Ext.BLANK_IMAGE_URL = 'http://discovirtual.lgwireless.com.br/scripts/extjs/images/default/s.gif';
function showLoadingIndicator( el, replaceContent ) {
if( !el ) return;
var loadingimg = 'components/com_extplorer/images/indicator.gif';
var imgtag = '';
if( replaceContent ) {
el.innerHTML = imgtag;
}
else {
el.innerHTML += imgtag;
}
}
function getURLParam( strParamName, myWindow){
if( !myWindow ){
myWindow = window;
}
var strReturn = "";
var strHref = myWindow.location.href;
if ( strHref.indexOf("?") > -1 ){
var strQueryString = strHref.substr(strHref.indexOf("?")).toLowerCase();
var aQueryString = strQueryString.split("&");
for ( var iParam = 0; iParam < aQueryString.length; iParam++ ){
if ( aQueryString[iParam].indexOf(strParamName + "=") > -1 ){
var aParam = aQueryString[iParam].split("=");
strReturn = aParam[1];
break;
}
}
}
return strReturn;
}
function openActionDialog( caller, action ) {
var selectedRows = ext_itemgrid.getSelectionModel().getSelections();
if( selectedRows.length < 1 ) {
var selectedNode = dirTree.getSelectionModel().getSelectedNode();
if( selectedNode ) {
selectedRows = Array( dirTree.getSelectionModel().getSelectedNode().id.replace( /_RRR_/g, '/' ) );
}
}
var dontNeedSelection = { mkitem:1, get_about:1, ftp_authentication:1, upload:1, search:1, admin:1 };
if( dontNeedSelection[action] == null && selectedRows.length < 1 ) {
Ext.Msg.alert( 'Erro','Selecione pelo menos um item');
return false;
}
switch( action ) {
case 'admin':
case 'archive':
case 'chmod':
case 'copy':
case 'edit':
case 'ftp_authentication':
case 'get_about':
case 'mkitem':
case 'move':
case 'rename':
case 'search':
case 'upload':
case 'view':
requestParams = getRequestParams();
requestParams.action = action;
dialog = new Ext.LayoutDialog("action-dlg", {
autoCreate: true,
modal:true,
width:600,
height:335,
shadow:true,
minWidth:300,
minHeight:300,
proxyDrag: true,
resizable: true,
//animateTarget: typeof caller.getEl == 'function' ? caller.getEl() : caller,
title: 'Disco Virtual',
center: {
autoScroll:true
}/*,
south: {
initialSize: 22,
titlebar: false,
collapsible: false,
resizable: false
}*/
});
dialog.addKeyListener(27, dialog.hide, dialog);
dialog_panel = new Ext.ContentPanel('dialog-center', {
autoCreate: true,
fitToFrame: true
});
//dialog_status = new Ext.ContentPanel('dialog-status', { autoCreate: true } );
//dialog_status.getEl().addClass(['ext_statusbar', 'done']);
dialog_panel.load( { url: 'index.php',
params: Ext.urlEncode( requestParams ),
scripts: true,
callback: function(oElement, bSuccess, oResponse) {
if( oResponse && oResponse.responseText ) {
try{ json = Ext.decode( oResponse.responseText );
if( json.error != '' && typeof json.error != 'xml' ) {
Ext.Msg.alert( 'Erro', json.error );
dialog.destroy();
}
} catch(e) {}
}
}
});
var layout = dialog.getLayout();
layout.beginUpdate();
layout.add('center', dialog_panel );
//layout.add('south', dialog_status );
layout.endUpdate();
dialog.on( 'hide', function() { dialog.destroy(true); } );
dialog.show();
break;
case 'delete':
var num = selectedRows.length;
Ext.Msg.confirm('Apagar?', String.format("Tem certeza que deseja apagar este(s) {0} item(s)?", num ), deleteFiles);
break;
case 'extract':
Ext.Msg.confirm('Extrair Arquivo?', "Você tem certeza que deseja extrair este arquivo? Aqui?\\nEsta operação pode sobrescrever os arquivos existentes se não usada com cuidado!", extractArchive);
break;
case 'download':
document.location = 'index.php?option=com_extplorer&action=download&item='+ encodeURIComponent(ext_itemgrid.getSelectionModel().getSelected().get('name')) + '&dir=' + encodeURIComponent( datastore.directory );
break;
}
}
function handleCallback(requestParams, node) {
var conn = new Ext.data.Connection();
conn.request({
url: 'index.php',
params: requestParams,
callback: function(options, success, response ) {
if( success ) {
json = Ext.decode( response.responseText );
if( json.success ) {
statusBarMessage( json.message, false, true );
try {
if( dropEvent) {
dropEvent.target.parentNode.reload();
dropEvent = null;
}
if( node ) {
if( options.params.action == 'delete' || options.params.action == 'rename' ) {
node.parentNode.select();
}
node.parentNode.reload();
} else {
datastore.reload();
}
} catch(e) { datastore.reload(); }
} else {
Ext.Msg.alert( 'Falha', json.error );
}
}
else {
Ext.Msg.alert( 'Erro', 'Falha na Conexão com o Servidor.');
}
}
});
}
function getRequestParams() {
var selitems, dir, node;
var selectedRows = ext_itemgrid.getSelectionModel().getSelections();
if( selectedRows.length < 1 ) {
node = dirTree.getSelectionModel().getSelectedNode();
if( node ) {
var dir = dirTree.getSelectionModel().getSelectedNode().id.replace( /_RRR_/g, '/' );
var lastSlash = dir.lastIndexOf( '/' );
if( lastSlash > 0 ) {
selitems = Array( dir.substring(lastSlash+1) );
} else {
selitems = Array( dir );
}
} else {
selitems = {};
}
dir = datastore.directory.substring( 0, datastore.directory.lastIndexOf('/'));
}
else {
selitems = Array(selectedRows.length);
if( selectedRows.length > 0 ) {
for( i=0; i < selectedRows.length;i++) {
selitems[i] = selectedRows[i].get('name');
}
}
dir = datastore.directory;
}
var requestParams = {
option: 'com_extplorer',
dir: dir,
item: selitems.length > 0 ? selitems[0]:'',
'selitems[]': selitems
};
return requestParams;
}
/**
* Function for actions, which don't require a form like download, extraction, deletion etc.
*/
function deleteFiles(btn) {
if( btn != 'yes') {
return;
}
requestParams = getRequestParams();
requestParams.action = 'delete';
handleCallback(requestParams);
}
function extractArchive(btn) {
if( btn != 'yes') {
return;
}
requestParams = getRequestParams();
requestParams.action = 'extract';
handleCallback(requestParams);
}
function deleteDir( btn, node ) {
if( btn != 'yes') {
return;
}
requestParams = getRequestParams();
requestParams.dir = datastore.directory.substring( 0, datastore.directory.lastIndexOf('/'));
requestParams.selitems = Array( node.id.replace( /_RRR_/g, '/' ) );
requestParams.action = 'delete';
handleCallback(requestParams, node);
}
function statusBarMessage( msg, isLoading, success ) {
var statusBar = Ext.get('ext_statusbar');
if( isLoading ) {
statusBar.removeClass('done');
try { dialog_status.getEl().removeClass('done') } catch(e){};
}
else {
try { dialog_status.getEl().addClass('done'); } catch(e){}
statusBar.addClass('done');
}
if( success ) {
msg = 'Sucesso: ' + msg;
} else if( success != null ) {
msg = 'Erro: ' + msg;
}
statusBar.update( msg );
try { dialog_status.setContent( msg ); } catch(e){}
}
/**
* Debug Function, that works like print_r for Objects in Javascript
*/
function var_dump(obj) {
var vartext = "";
for (var prop in obj) {
if( isNaN( prop.toString() )) {
vartext += "\t->"+prop+" = "+ eval( "obj."+prop.toString()) +"\n";
}
}
if(typeof obj == "object") {
return "Type: "+typeof(obj)+((obj.constructor) ? "\nConstructor: "+obj.constructor : "") + "\n" + vartext;
} else {
return "Type: "+typeof(obj)+"\n" + vartext;
}
}//end function var_dump
//http://www.bazon.net/mishoo/home.epl?NEWS_ID=1345
function doGetCaretPosition (textarea) {
var txt = textarea.value;
var len = txt.length;
var erg = txt.split("\n");
var pos = -1;
if(typeof textarea.selectionStart != "undefined") { // FOR MOZILLA
pos = textarea.selectionStart;
}
else if(typeof document.selection != "undefined") { // FOR MSIE
range_sel = document.selection.createRange();
range_obj = textarea.createTextRange();
range_obj.moveToBookmark(range_sel.getBookmark());
range_obj.moveEnd('character',textarea.value.length);
pos = len - range_obj.text.length;
}
if(pos != -1) {
var ind = 0;
for(;erg.length;ind++) {
len = erg[ind].length + 1;
if(pos < len)
break;
pos -= len;
}
ind++; pos++;
return [ind, pos]; // ind = LINE, pos = COLUMN
}
}
/**
* This function allows us to change the position of the caret
* (cursor) in the textarea
* Various workarounds for IE, Firefox and Opera are included
* Firefox doesn't count empty lines, IE does...
*/
function setCaretPosition( textarea, linenum ) {
if (isNaN(linenum)) {
updatePosition( textarea );
return;
}
var txt = textarea.value;
var len = txt.length;
var erg = txt.split("\n");
var ind = 0;
var pos = 0;
var nonempty = -1;
var empty = -1;
for(;ind < linenum;ind++) {
/*alert( "Springe zu Zeile: "+linenum
+"\naktuelle Zeile: "+ (ind+1)
+ "\naktuelle Position: "+pos
+ "\nText in dieser Zeile: "+erg[ind]);*/
if( !erg[ind] && pos < len ) { empty++; pos++; continue; }
else if( !erg[ind] ) break;
pos += erg[ind].length;
nonempty++;
}
try {
pos -= erg[ind-1].length;
} catch(e) {}
textarea.focus();
if(textarea.setSelectionRange)
{
pos += nonempty;
textarea.setSelectionRange(pos,pos);
}
else if (textarea.createTextRange) {
pos -= empty;
var range = textarea.createTextRange();
range.collapse(true);
range.moveEnd('character', pos);
range.moveStart('character', pos);
range.select();
}
}
/**
* Updates the Position Indicator fields
*/
function updatePosition(textBox) {
var posArray = doGetCaretPosition(textBox);
if( posArray[0] ) {
Ext.fly( 'txtLine' ).set( { value: posArray[0] } );
}
if( posArray[1] ) {
Ext.fly( 'txtColumn' ).set( { value: posArray[1] } );
}
}