717 lines
16 KiB
JavaScript
717 lines
16 KiB
JavaScript
/************************************************/
|
|
/* IPB3 Javascript */
|
|
/* -------------------------------------------- */
|
|
/* ips.gallery.js - Gallery javascript */
|
|
/* (c) IPS, Inc 2008 */
|
|
/* -------------------------------------------- */
|
|
/* Author: Rikki Tissier & Brandon Farber */
|
|
/************************************************/
|
|
|
|
/* Hack to get lastDescendant
|
|
Thanks: http://proto-scripty.wikidot.com/prototype:tip-getting-last-descendant-of-an-element
|
|
*/
|
|
Element.addMethods({
|
|
lastDescendant: function(element) {
|
|
element = $(element).lastChild;
|
|
while (element && element.nodeType != 1)
|
|
element = element.previousSibling;
|
|
return $(element);
|
|
}
|
|
});
|
|
|
|
|
|
|
|
var _gallery = window.IPBoard;
|
|
|
|
_gallery.prototype.gallery = {
|
|
|
|
totalChecked: 0,
|
|
inSection: '',
|
|
|
|
cur_left: 0,
|
|
cur_right: 0,
|
|
cur_image: 0,
|
|
|
|
catPopups: [],
|
|
/*timer: [],
|
|
blockSizes: [],*/
|
|
|
|
/*------------------------------*/
|
|
/* Constructor */
|
|
init: function()
|
|
{
|
|
Debug.write("Initializing ips.gallery.js");
|
|
|
|
document.observe("dom:loaded", function(){
|
|
/* Gallery meta popup */
|
|
if( $('meta-link') )
|
|
{
|
|
$('meta-link').observe('click', ipb.gallery.showMeta );
|
|
}
|
|
|
|
if( ipb.gallery.inSection == 'image' )
|
|
{
|
|
ipb.gallery.preCheckComments();
|
|
|
|
ipb.delegate.register('a[rel="bookmark"]', ipb.gallery.showLinkToComment );
|
|
ipb.delegate.register('a[rel~=newwindow]', ipb.global.openNewWindow, { 'force': 1 } );
|
|
ipb.delegate.register('a[rel~=popup]', ipb.gallery.openPopUp );
|
|
ipb.delegate.register('.delete_item', ipb.gallery.confirmSingleDelete );
|
|
ipb.delegate.register('.comment_mod', ipb.gallery.checkComment );
|
|
ipb.delegate.register('.multiquote', ipb.gallery.toggleMultiquote);
|
|
|
|
if( $('show_filters') )
|
|
{
|
|
$('show_filters').observe('click', ipb.gallery.toggleFilters );
|
|
$('filter_form').hide();
|
|
}
|
|
}
|
|
else if( ipb.gallery.inSection == 'category' )
|
|
{
|
|
ipb.gallery.preCheckImages();
|
|
|
|
//ipb.delegate.register('.image_mod', ipb.gallery.checkImage );
|
|
ipb.delegate.register('.check_all', ipb.gallery.checkAllInForm );
|
|
}
|
|
|
|
if( $('album') )
|
|
{
|
|
$('album').hide();
|
|
}
|
|
|
|
$$('.subcatsTrigger').each( function(elem) {
|
|
|
|
var thisid = elem.identify();
|
|
thisid = thisid.replace( 'subCatsDDTrigger_', '' );
|
|
|
|
if( $('subCatsDD_' + thisid ) )
|
|
{
|
|
$('subCatsDD_' + thisid ).hide();
|
|
$(elem).observe('click', ipb.gallery.showSubCats );
|
|
}
|
|
});
|
|
});
|
|
},
|
|
|
|
buildSubCatPopup: function( e, id )
|
|
{
|
|
Event.stop(e);
|
|
|
|
if( ipb.gallery.catPopups[ id ] ){
|
|
ipb.gallery.catPopups[ id ].show();
|
|
}
|
|
else
|
|
{
|
|
ipb.gallery.catPopups[ id ] = new ipb.Popup( id + '_popup', {
|
|
initial: $( id + '_subcats' ).innerHTML,
|
|
type: 'balloon',
|
|
stem: true,
|
|
hideAtStart: false,
|
|
attach: {
|
|
target: $(id + '_subcat_link'),
|
|
position: 'auto',
|
|
'event': 'click'
|
|
},
|
|
w: '300px'
|
|
});
|
|
}
|
|
},
|
|
|
|
registerCategory: function( id, href )
|
|
{
|
|
if( !$('category_' + id) ){ return; }
|
|
|
|
href = href.replace('&', '&');
|
|
|
|
$('category_' + id).down('.preview').wrap( 'a', { href: href, 'class': 'enhanced_link', title: ipb.lang['go_to_category'] } );
|
|
$('category_' + id).down('.description').hide();
|
|
|
|
var mouseOvered = true;
|
|
|
|
if( $('category_' + id + '_description' ) )
|
|
{
|
|
$('category_' + id).observe('mouseenter', function(e){
|
|
new Effect.Appear( $('category_' + id + '_description'), { duration: 0.3 } );
|
|
});
|
|
$('category_' + id).observe('mouseleave', function(e){
|
|
new Effect.Fade( $('category_' + id + '_description'), { duration: 0.3 } );
|
|
});
|
|
}
|
|
},
|
|
|
|
toggleFilters: function(e)
|
|
{
|
|
if( $('filter_form') )
|
|
{
|
|
Effect.toggle( $('filter_form'), 'blind', {duration: 0.2} );
|
|
Effect.toggle( $('show_filters'), 'blind', {duration: 0.2} );
|
|
}
|
|
},
|
|
|
|
rotateImage: function( e, dir )
|
|
{
|
|
Debug.write( curnotes.size() );
|
|
|
|
// If we have notes, just refresh
|
|
if( !Object.isUndefined( curnotes ) && curnotes.size() )
|
|
{
|
|
return;
|
|
}
|
|
|
|
Event.stop(e);
|
|
if( ( dir != 'left' && dir != 'right' ) || !$('image_view_' + ipb.gallery.imageID) ){ return; }
|
|
|
|
new Ajax.Request(
|
|
ipb.vars['base_url']+'app=gallery&module=ajax§ion=image&do=rotate-' + dir + '&secure_key=' + ipb.vars['secure_hash'] + '&img=' + ipb.gallery.imageID,
|
|
{
|
|
method: 'post',
|
|
onSuccess: function(t)
|
|
{
|
|
/* No Permission */
|
|
if( t.responseText == 'nopermission' )
|
|
{
|
|
alert( ipb.lang['no_permission'] );
|
|
}
|
|
else if( t.responseText == 'rotate_failed' )
|
|
{
|
|
alert( ipb.lang['gallery_rotate_failed'] );
|
|
}
|
|
else
|
|
{
|
|
var rand = Math.round( Math.random() * 100000000 );
|
|
var img = $('image_view_' + ipb.gallery.imageID);
|
|
var tmpSrc = img.src;
|
|
|
|
tmpSrc = tmpSrc.replace(/t=[0-9]+/, '');
|
|
|
|
$( img ).src = tmpSrc + "?t=" + rand;
|
|
}
|
|
}
|
|
}
|
|
);
|
|
return false;
|
|
|
|
},
|
|
|
|
setUpGalleryBlock: function(id)
|
|
{
|
|
if( ipb.Cookie.get('galleryBlock_' + id) == '1' ){
|
|
$( id + '_title').addClassName('expanded');
|
|
$( id + '_content').show();
|
|
} else {
|
|
$( id + '_title').addClassName('collapsed');
|
|
$( id + '_content').hide();
|
|
}
|
|
|
|
$( id + '_title').observe( 'click', ipb.gallery.toggleImageViewBlock.bindAsEventListener( this, id ) );
|
|
},
|
|
|
|
toggleImageViewBlock: function( e, id )
|
|
{
|
|
Event.stop(e);
|
|
|
|
if( $( id + '_content' ).visible() ){
|
|
new Effect.BlindUp( $( id + '_content' ), { duration: 0.2 } );
|
|
$( id + '_title' ).removeClassName('expanded').addClassName('collapsed');
|
|
ipb.Cookie.set('galleryBlock_' + id, '0', true);
|
|
} else {
|
|
new Effect.BlindDown( $( id + '_content' ), { duration: 0.2 } );
|
|
$( id + '_title' ).removeClassName('collapsed').addClassName('expanded');
|
|
ipb.Cookie.set('galleryBlock_' + id, '1', true);
|
|
}
|
|
|
|
},
|
|
|
|
openPopUp: function(e, link)
|
|
{
|
|
window.open(link.href, "image", "status=0,toolbar=0,location=0,menubar=0,directories=0,resizable=1,scrollbars=1");
|
|
Event.stop(e);
|
|
return false;
|
|
},
|
|
|
|
showSubCats: function(e)
|
|
{
|
|
Event.stop(e);
|
|
elem = Event.findElement( e, 'h5' );
|
|
var thisid = elem.identify();
|
|
thisid = thisid.replace( 'subCatsDDTrigger_', '' );
|
|
|
|
$('subCatsDD_' + thisid ).toggle();
|
|
},
|
|
|
|
/**
|
|
* Photostrip code - at the top because it'll prob be updated the most :P
|
|
*/
|
|
photostripInit: function()
|
|
{
|
|
if( ipb.gallery.cur_left > 0 )
|
|
{
|
|
$('slide_left').show();
|
|
$('slide_left').observe( 'mouseover', ipb.gallery.photostripMouesover );
|
|
$('slide_left').observe( 'mouseout', ipb.gallery.photostripMouesout );
|
|
$('slide_left').observe( 'click', ipb.gallery.photostripSlideLeft );
|
|
}
|
|
else
|
|
{
|
|
$('slide_left').hide();
|
|
}
|
|
|
|
if( ipb.gallery.cur_right > 0 )
|
|
{
|
|
$('slide_right').show();
|
|
$('slide_right').observe( 'mouseover', ipb.gallery.photostripMouesover );
|
|
$('slide_right').observe( 'mouseout', ipb.gallery.photostripMouesout );
|
|
$('slide_right').observe( 'click', ipb.gallery.photostripSlideRight );
|
|
}
|
|
else
|
|
{
|
|
$('slide_right').hide();
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Photostrip code - at the top because it'll prob be updated the most :P
|
|
*/
|
|
resetPhotostrip: function()
|
|
{
|
|
var count = 1;
|
|
|
|
$('strip').childElements().each( function(elem){
|
|
if( count == 1 )
|
|
{
|
|
ipb.gallery.cur_left = elem.id.replace( /strip_/, '' );
|
|
}
|
|
|
|
if( count == 5 )
|
|
{
|
|
ipb.gallery.cur_right = elem.id.replace( /strip_/, '' );
|
|
}
|
|
|
|
count++;
|
|
});
|
|
},
|
|
|
|
/**
|
|
* Photostrip slide left
|
|
*/
|
|
photostripSlideLeft: function(e)
|
|
{
|
|
new Ajax.Request(
|
|
ipb.vars['base_url']+'app=gallery&module=ajax§ion=photostrip&do=slide_right&secure_key=' + ipb.vars['secure_hash'] + '&img='+ipb.gallery.cur_left+'&cur_img='+ipb.gallery.cur_image,
|
|
{
|
|
method: 'post',
|
|
onSuccess: function(t)
|
|
{
|
|
/* No Permission */
|
|
if( t.responseText == 'nopermission' )
|
|
{
|
|
alert( ipb.lang['no_permission'] );
|
|
}
|
|
else
|
|
{
|
|
// Get rid of first item in the list
|
|
$('strip').lastDescendant().remove();
|
|
|
|
// Add the new item
|
|
$('strip').insert( { top: t.responseText } );
|
|
|
|
// And then reset
|
|
ipb.gallery.resetPhotostrip();
|
|
ipb.gallery.photostripInit();
|
|
}
|
|
}
|
|
}
|
|
);
|
|
return false;
|
|
},
|
|
|
|
/**
|
|
* Photostrip slide right
|
|
*/
|
|
photostripSlideRight: function(e)
|
|
{
|
|
new Ajax.Request(
|
|
ipb.vars['base_url']+'app=gallery&module=ajax§ion=photostrip&do=slide_left&secure_key=' + ipb.vars['secure_hash'] + '&img='+ipb.gallery.cur_right+'&cur_img='+ipb.gallery.cur_image,
|
|
{
|
|
method: 'post',
|
|
onSuccess: function(t)
|
|
{
|
|
/* No Permission */
|
|
if( t.responseText == 'nopermission' )
|
|
{
|
|
alert( ipb.lang['no_permission'] );
|
|
}
|
|
else
|
|
{
|
|
// Get rid of first item in the list
|
|
$('strip').firstDescendant().remove();
|
|
|
|
// Add the new item
|
|
$('strip').insert( { bottom: t.responseText } );
|
|
|
|
// And then reset
|
|
ipb.gallery.resetPhotostrip();
|
|
ipb.gallery.photostripInit();
|
|
}
|
|
}
|
|
}
|
|
);
|
|
return false;
|
|
},
|
|
|
|
/**
|
|
* Photostrip slider cell mouseover
|
|
*/
|
|
photostripMouesover: function(e)
|
|
{
|
|
cell = Event.findElement( e, 'div' );
|
|
|
|
$(cell.id).addClassName('post2');
|
|
$(cell.id).addClassName('clickable');
|
|
},
|
|
|
|
/**
|
|
* Photostrip slider cell mouseout
|
|
*/
|
|
photostripMouesout: function(e)
|
|
{
|
|
cell = Event.findElement( e, 'div' );
|
|
|
|
$(cell.id).removeClassName('post2');
|
|
$(cell.id).removeClassName('clickable');
|
|
},
|
|
|
|
/**
|
|
* Show the meta information popup
|
|
*/
|
|
showMeta: function(e)
|
|
{
|
|
Event.stop(e);
|
|
popup = new ipb.Popup( 'showmeta', { type: 'pane', modal: false, w: '600px', h: '500px', initial: $('metacontent').innerHTML, hideAtStart: false, close: 'a[rel="close"]' } );
|
|
return false;
|
|
},
|
|
|
|
/**
|
|
* Show the comment link
|
|
*/
|
|
showLinkToComment: 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);
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Do album manager dropdown change
|
|
*
|
|
* @var object select The select box element
|
|
*/
|
|
goToAlbumOp: function( select )
|
|
{
|
|
goto_url = select.options[select.selectedIndex].value;
|
|
|
|
if( goto_url == 'null' )
|
|
{
|
|
return false;
|
|
}
|
|
|
|
if( goto_url.match( /do=del/ ) )
|
|
{
|
|
if( confirm( deletion_confirm_lang ) )
|
|
{
|
|
document.location = ipb.vars['base_url'] + goto_url;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
document.location = ipb.vars['base_url'] + goto_url;
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Toggles the multimod buttons in posts
|
|
*
|
|
* @param {event} e The event
|
|
* @param {element} elem The element that fired
|
|
*/
|
|
toggleMultiquote: function(e, elem)
|
|
{
|
|
Event.stop(e);
|
|
|
|
// Get list of already quoted posts
|
|
try {
|
|
quoted = ipb.Cookie.get('gal_pids').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('gal_pids', quoted, 0);
|
|
},
|
|
|
|
/**
|
|
* Check the files we've selected
|
|
*/
|
|
preCheckComments: function()
|
|
{
|
|
if( $('selectedgcids') )
|
|
{
|
|
var topics = $F('selectedgcids').split(',');
|
|
}
|
|
|
|
var checkboxesOnPage = 0;
|
|
var checkedOnPage = 0;
|
|
|
|
if( topics )
|
|
{
|
|
topics.each( function(check){
|
|
if( check != '' )
|
|
{
|
|
if( $('pid_' + check ) )
|
|
{
|
|
checkedOnPage++;
|
|
$('pid_' + check ).checked = true;
|
|
}
|
|
|
|
ipb.gallery.totalChecked++;
|
|
}
|
|
});
|
|
}
|
|
|
|
$$('.comment_mod').each( function(check){
|
|
checkboxesOnPage++;
|
|
} );
|
|
|
|
if( $('comments_all') )
|
|
{
|
|
if( checkedOnPage == checkboxesOnPage )
|
|
{
|
|
$('comments_all').checked = true;
|
|
}
|
|
}
|
|
|
|
ipb.gallery.updateModButton();
|
|
},
|
|
|
|
/**
|
|
* Confirm they want to delete stuff
|
|
*
|
|
* @var {event} e The event
|
|
*/
|
|
checkComment: function(e, elem)
|
|
{
|
|
remove = new Array();
|
|
check = elem;
|
|
selectedTopics = $F('selectedgcids').split(',').compact();
|
|
|
|
var checkboxesOnPage = 0;
|
|
var checkedOnPage = 0;
|
|
|
|
if( check.checked == true )
|
|
{
|
|
Debug.write("Checked");
|
|
selectedTopics.push( check.id.replace('pid_', '') );
|
|
ipb.gallery.totalChecked++;
|
|
}
|
|
else
|
|
{
|
|
remove.push( check.id.replace('pid_', '') );
|
|
ipb.gallery.totalChecked--;
|
|
}
|
|
|
|
$$('.comment_mod').each( function(check){
|
|
checkboxesOnPage++;
|
|
|
|
if( $(check).checked == true )
|
|
{
|
|
checkedOnPage++;
|
|
}
|
|
} );
|
|
|
|
if( $('comments_all') )
|
|
{
|
|
if( checkedOnPage == checkboxesOnPage )
|
|
{
|
|
$('comments_all').checked = true;
|
|
}
|
|
else
|
|
{
|
|
$('comments_all' ).checked = false;
|
|
}
|
|
}
|
|
|
|
selectedTopics = selectedTopics.uniq().without( remove ).join(',');
|
|
ipb.Cookie.set('modgcids', selectedTopics, 0);
|
|
|
|
$('selectedgcids').value = selectedTopics;
|
|
|
|
ipb.gallery.updateModButton();
|
|
},
|
|
|
|
/**
|
|
* Check the files we've selected
|
|
*/
|
|
preCheckImages: function()
|
|
{
|
|
var topics = [];
|
|
|
|
if( $('selectedimgids' ) ){
|
|
topics = $F('selectedimgids').split(',');
|
|
}
|
|
|
|
var checkboxesOnPage = 0;
|
|
var checkedOnPage = 0;
|
|
|
|
if( topics )
|
|
{
|
|
topics.each( function(check){
|
|
if( check != '' )
|
|
{
|
|
if( $('img_' + check ) )
|
|
{
|
|
checkedOnPage++;
|
|
$('img_' + check ).checked = true;
|
|
}
|
|
|
|
ipb.gallery.totalChecked++;
|
|
}
|
|
});
|
|
}
|
|
|
|
$$('.image_mod').each( function(check){
|
|
checkboxesOnPage++;
|
|
} );
|
|
|
|
if( $('imgs_all') )
|
|
{
|
|
if( checkedOnPage == checkboxesOnPage )
|
|
{
|
|
$('imgs_all').checked = true;
|
|
}
|
|
}
|
|
|
|
ipb.gallery.updateModButton();
|
|
},
|
|
|
|
/**
|
|
* Update the moderation button
|
|
*/
|
|
updateModButton: function( )
|
|
{
|
|
if( $('mod_submit') )
|
|
{
|
|
if( ipb.gallery.totalChecked == 0 ){
|
|
$('mod_submit').disabled = true;
|
|
} else {
|
|
$('mod_submit').disabled = false;
|
|
}
|
|
|
|
$('mod_submit').value = ipb.lang['with_selected'].replace('{num}', ipb.gallery.totalChecked);
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Check all the files in this form
|
|
*/
|
|
checkAllInForm: function(e)
|
|
{
|
|
selectedTopics = $F('selectedimgids').split(',').compact();
|
|
remove = new Array();
|
|
|
|
check = Event.findElement(e, 'input');
|
|
toCheck = $F(check);
|
|
form = check.up('form');
|
|
|
|
form.select('.image_mod').each( function(check){
|
|
if( toCheck != null )
|
|
{
|
|
selectedTopics.push( check.id.replace('img_', '') );
|
|
check.checked = true;
|
|
}
|
|
else
|
|
{
|
|
remove.push( check.id.replace('img_', '') );
|
|
check.checked = false;
|
|
}
|
|
});
|
|
|
|
selectedTopics = selectedTopics.uniq().without( remove ).join(',');
|
|
ipb.Cookie.set('modimgids', selectedTopics, 0);
|
|
},
|
|
|
|
/**
|
|
* Sets the supplied post to hidden
|
|
*
|
|
* @var {int} id The ID of the post to hide
|
|
*/
|
|
setCommentHidden: function(id)
|
|
{
|
|
if( $( 'comment_id_' + id ).select('.post_wrap')[0] )
|
|
{
|
|
$( 'comment_id_' + id ).select('.post_wrap')[0].hide();
|
|
|
|
if( $('unhide_post_' + id ) )
|
|
{
|
|
$('unhide_post_' + id).observe('click', ipb.gallery.showHiddenComment );
|
|
}
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Unhides the supplied post
|
|
*
|
|
* @var {event} e The link event
|
|
*/
|
|
showHiddenComment: function(e)
|
|
{
|
|
link = Event.findElement(e, 'a');
|
|
id = link.id.replace('unhide_post_', '');
|
|
|
|
if( $('comment_id_' + id ).select('.post_wrap')[0] )
|
|
{
|
|
elem = $('comment_id_' + id ).select('.post_wrap')[0];
|
|
new Effect.Parallel( [
|
|
new Effect.BlindDown( elem ),
|
|
new Effect.Appear( elem )
|
|
], { duration: 0.5 } );
|
|
}
|
|
|
|
if( $('comment_id_' + id ).select('.post_ignore')[0] )
|
|
{
|
|
elem = $('comment_id_' + id ).select('.post_ignore')[0];
|
|
/*new Effect.BlindUp( elem, {duration: 0.2} );*/
|
|
elem.hide();
|
|
}
|
|
|
|
Event.stop(e);
|
|
}
|
|
}
|
|
|
|
ipb.gallery.init(); |