File: /var/www/ilya/data/www/irkboard.ru/public/js/ips.attachajax.js
/************************************************/
/* IPB3 Javascript */
/* -------------------------------------------- */
/* ips.attachajax.js - Attachment manager */
/* (c) IPS, Inc 2008 */
/* -------------------------------------------- */
/* Author: Rikki Tissier */
/************************************************/
/* -TRUE- MULTIPLE ATTACHMENTS!!! */
/* -------------------------------------------- */
var _attach = window.IPBoard;
_attach.prototype.attachajax = {
uploaders: [],
template: '',
init: function()
{
Debug.write("Initializing ips.attachAjax.js");
document.observe("dom:loaded", function(){
//ipb.attachajax.initUploaders();
});
},
/* ------------------------------ */
/**
* Registers an upload object
*
* @param {int} id The uploader ID
* @param {object} options Options to pass to object
*/
registerUploader: function( id, wrapper, options )
{
/* Build iframe */
iframe_obj = document.createElement( 'IFRAME' );
//iframe_obj.src = ipb.vars['base_url'] + "app=core&module=attach§ion=attach&do=attachiFrame&attach_rel_module=" +
// options['attach_rel_module'] + "&attach_rel_id=" + options['attach_rel_id'] + "&attach_post_key=" +
// options['attach_post_key'] + "&forum_id=" + options['forum_id'] + "&attach_id=" + id + '&fetch_all=1';
iframe_obj.id = 'iframeAttach_' + options['attach_rel_id'];
iframe_obj.name = 'iframeAttach_' + options['attach_rel_id'];
iframe_obj.scrolling = 'no';
iframe_obj.frameBorder = 'no';
iframe_obj.border = '0';
iframe_obj.className = '';
iframe_obj.style.width = '300px';
iframe_obj.style.height = '50px';
iframe_obj.style.overflow = 'hidden';
iframe_obj.style.display = '';
iframe_obj.style.backgroundColor = 'transparent';
iframe_obj.allowtransparency = true;
$( wrapper ).appendChild( iframe_obj );
this.options = options;
this.wrapper = wrapper;
if( $(id) )
{
$(id).hide();
}
$('add_files_attach_' + options['attach_rel_id'] ).observe('click', this.processUpload.bindAsEventListener( this ) );
},
/**
* Processes upload
*/
processUpload: function( e )
{
var iFrameBox = window.frames[ 'iframeAttach_' + this.options['attach_rel_id'] ].document.getElementById('iframeUploadBox');
var iFrameForm = window.frames[ 'iframeAttach_' + this.options['attach_rel_id'] ].document.getElementById('iframeUploadForm');
var box = $('attach_' + this.options['attach_rel_id'] );
iFrameForm.action = ipb.vars['base_url'] + "app=core&module=attach§ion=attach&do=attachUploadiFrame&attach_rel_module=" +
this.options['attach_rel_module'] + "&attach_rel_id=" + this.options['attach_rel_id'] + "&attach_post_key=" +
this.options['attach_post_key'] + "&forum_id=" + this.options['forum_id'] + '&fetch_all=1';
iFrameForm.submit();
},
/**
* Iframe is ready
*/
isReady: function()
{
if ( this.json )
{
if ( this.json['is_error'] )
{
$('attach_error_box').update( ipb.lang['error'] + " <strong>" + this._determineServerError( this.json['msg'] ) + "</strong>" );
}
if ( this.json['current_items'] )
{
this.buildBoxes( this.json['current_items'] );
}
if ( typeof( this.json['attach_rel_id']) !='undefined' )
{
if( $('space_info_attach_' + this.json['attach_rel_id'] ) )
{
$('space_info_attach_' + this.json['attach_rel_id'] ).update( "Использовано <strong>" + this.json.attach_stats.space_used_human + "</strong> из <strong>" + this.json.attach_stats.total_space_allowed_human + "</strong>" );
}
}
}
Debug.write( "Attach: iFrame is ready" );
},
/**
* Builds boxes
*/
buildBoxes: function( currentItems )
{
for( var i in currentItems )
{
id = i;
index = currentItems[i][0];
name = currentItems[i][1];
size = currentItems[i][2];
temp = this.template.gsub(/\[id\]/, id + '_' + index).gsub(/\[name\]/, name);
$( 'attachments' ).insert( temp );
new Effect.Appear( $( 'ali_' + id + '_' + index ), { duration: 0.3 } );
$( 'ali_' + id + '_' + index ).select('.info')[0].update( ipb.global.convertSize( size ) );
// Add event handlers
$( 'ali_' + id + '_' + index ).select('.delete')[0].observe( 'click', ipb.attachajax.removeUpload );
// Remove old statuses
['complete', 'in_progress', 'error'].each( function( cName ){ $( 'ali_' + id + '_' + index ).removeClassName( cName ); }.bind( this ) );
$( 'ali_' + id + '_' + index ).addClassName( 'complete' );
if( currentItems[ i ][ 3 ] == 1 )
{
tmp = currentItems[ i ];
var width = tmp[5];
var height = tmp[6];
if( ( tmp[5] && tmp[5] > 30 ) )
{
width = 30;
factor = ( 30 / tmp[5] );
height = tmp[6] * factor;
}
if( ( tmp[6] && tmp[6] > 30 ) )
{
height = 30;
factor = ( 30 / tmp[5] );
width = tmp[5] * factor;
}
thumb = new Element('img', { src: ipb.vars['upload_url'] + '/' + tmp[4], 'width': width, 'height': height, 'class': 'thumb_img' } ).hide();
$( 'ali_' + id + '_' + index ).select('.img_holder')[0].insert( thumb );
new Effect.Appear( $( thumb ), { duration: 0.4 } );
}
}
},
removeUpload: function(e)
{
elem = Event.findElement( e, 'li' );
elemid = elem.id.match( /^ali_(.+?)_([0-9]+)$/ );
if( !elemid[1] ){ return; }
// Send request to remove upload
new Ajax.Request( ipb.vars['base_url'] + "app=core&module=attach§ion=attach&do=attach_upload_remove&attach_rel_module=" +
ipb.attachajax.options['attach_rel_module'] + "&attach_rel_id=" + ipb.attachajax.options['attach_rel_id'] + "&attach_post_key=" +
ipb.attachajax.options['attach_post_key'] + "&forum_id=" + ipb.attachajax.options['forum_id'] + "&attach_id=" + elemid[1],
{
method: 'post',
evalJSON: 'force',
onSuccess: function(t)
{
if( Object.isUndefined( t.responseJSON ) ){ alert( ipb.lang['action_failed'] ); return; }
if( t.responseJSON.msg == 'attach_removed' )
{
$( elem.id ).hide();
}
else
{
alert( ipb.lang['action_failed'] );
return;
}
}
});
Event.stop(e);
},
/* ------------------------------ */
/**
* Returns a human-readable string for errors
*
* @param {string} msg The msg code
* @return {string} The human-readable message
*/
_determineServerError: function( msg )
{
if( msg.blank() ){ return ipb.lang['silly_server']; }
switch( msg )
{
case 'upload_no_file':
return ipb.lang['upload_no_file'];
break;
case 'invalid_mime_type':
return ipb.lang['invalid_mime_type'];
break;
case 'upload_too_big':
return ipb.lang['upload_too_big'];
break;
case 'upload_failed':
return ipb.lang['upload_failed'];
break;
default:
return ipb.lang['silly_server'];
break;
}
},
startedUploading: function(handler)
{
},
finishedUploading: function(handler)
{
},
/* ------------------------------ */
/**
* Fetches an uploader
*
* @param {int} id ID of uploader to get
* @return mixed Object if exists, false if not
*/
getUploader: function( id )
{
if( ipb.attachajax.uploaders[ id ] )
{
return ipb.attachajax.uploaders[ id ];
}
else
{
return false;
}
}
}
ipb.attachajax.init();