| Current Path : /home/nicholsonsmith/public_html/backup/media/com_akeeba/js/ |
| Current File : /home/nicholsonsmith/public_html/backup/media/com_akeeba/js/multidb.js |
/**
* @copyright 2009 - 2015 Nicholas K. Dionysopoulos / Akeeba Ltd
* @license GNU GPL version 3 or later
*/
// Object initialisation
if (typeof akeeba == 'undefined')
{
var akeeba = {};
}
if (typeof akeeba.Multidb == 'undefined')
{
akeeba.Multidb = {
translations: {},
loadingGif: ''
}
}
(function($){
/**
* Render the additional databases interface
*
* @param data
*/
akeeba.Multidb.render = function(data)
{
var tbody = $('#ak_list_contents');
tbody.html('');
$.each(data, function(rootname, def){
akeeba.Multidb.addRow(rootname, def, tbody);
});
akeeba.Multidb.addNewRecordButton( tbody );
};
/**
* Add a single row to the additional databases interface
*
* @param root
* @param def
* @param append_to_here
*/
akeeba.Multidb.addRow = function (root, def, append_to_here)
{
$(document.createElement('tr'))
.addClass('ak_filter_row')
.data('root', root) // Cache the root name of this definition
.data('def', def) // Cache the definition data
// Delete button
.append(
$(document.createElement('td'))
.append(
$(document.createElement('span'))
.addClass('ak_filter_tab_icon_container')
.click(function(){
// If an editor is already showing we shouldn't try to delete anything
var editor = $('#ak-editor');
if(editor.dialog('isOpen')) return;
var new_data = {
root: $(this).parent().parent().data('root'),
verb: 'remove'
};
akeeba.Fsfilters.toggle(new_data, $(this), function(response, caller){
if(response.success == true)
{
caller.parent().parent().remove();
}
});
})
.append(
$(document.createElement('span'))
.addClass('ui-icon ui-icon-trash deletebutton ak-toggle-button')
)
)
)
// Edit button
.append(
$(document.createElement('td'))
.css('width', '2em')
.append(
$(document.createElement('span'))
.addClass('ak_filter_tab_icon_container')
.click(function(){
var cache_element = $(this).parent().parent();
var cache_data = $(this).parent().parent().data('def');
var cache_root = $(this).parent().parent().data('root');
var editor = $('#ak-editor');
// If an editor is already showing we can't re-show it :)
if(editor.dialog('isOpen')) return;
// Select the correct driver
if(cache_data.driver == '') cache_data.driver = 'mysqli';
// Set the parameters
$('#ake_driver').val(cache_data.driver);
$('#ake_host').val(cache_data.host);
$('#ake_username').val(cache_data.username);
$('#ake_password').val(cache_data.password);
$('#ake_database').val(cache_data.database);
$('#ake_prefix').val(cache_data.prefix);
// Remove any leftover notifier
try {
$('#ak_editor_notifier').remove();
} catch (e) {}
// Set editor's buttons
var strTest = akeeba.Multidb.translations['UI-MULTIDB-TEST'];
var strSave = akeeba.Multidb.translations['UI-MULTIDB-SAVE'];
var strCancel = akeeba.Multidb.translations['UI-MULTIDB-CANCEL'];
var buttons = {};
buttons[strTest] = function() {
// Create the placeholder div and show a loading message
$('#ak_editor_notifier').remove();
$('#ak_editor_table')
.before(
$(document.createElement('div'))
.addClass('ak_notifier')
.attr('id', 'ak_editor_notifier')
.append(
// Close button
$(document.createElement('span'))
.addClass('ui-icon')
.addClass('ui-icon-closethick')
.addClass('ak-toggle-button')
.click(function(){
$(this).parent().remove();
})
)
.append(
$(document.createElement('span'))
.attr('id','ak_editor_notifier_content')
.append(
// Loading animation
$(document.createElement('img'))
.attr({
border: 0,
src: akeeba.Multidb.loadingGif
})
)
.append(
// Loading text
$(document.createElement('span'))
.html(akeeba.Multidb.translations['UI-MULTIDB-LOADING'])
)
)
);
// Test the connection via AJAX
var req = {
verb : 'test',
root : root,
data : {
driver : $('#ake_driver').val(),
host : $('#ake_host').val(),
port : $('#ake_port').val(),
user : $('#ake_username').val(),
password : $('#ake_password').val(),
database : $('#ake_database').val(),
prefix : $('#ake_prefix').val()
}
};
var json = JSON.stringify(req);
var query = {};
query.action = json;
akeeba.System.doAjax(query, function(response){
if( response.status == true )
{
$('#ak_editor_notifier_content').html(akeeba.Multidb.translations['UI-MULTIDB-CONNECTOK']);
}
else
{
$('#ak_editor_notifier_content').html(
akeeba.Multidb.translations['UI-MULTIDB-CONNECTFAIL'] +
'<br/>' +
'<tt>' + response.message + '</tt>'
);
}
}, function(message) {
$('#ak_editor_notifier_content').html(
akeeba.Multidb.translations['UI-MULTIDB-CONNECTFAIL']
);
akeeba.System.params.errorCallback(message);
});
};
buttons[strSave] = function() {
// Create the placeholder div and show a loading message
$('#ak_editor_notifier').remove();
$('#ak_editor_table')
.before(
$(document.createElement('div'))
.addClass('ak_notifier')
.attr('id', 'ak_editor_notifier')
.append(
// Close button
$(document.createElement('span'))
.addClass('ui-icon')
.addClass('ui-icon-closethick')
.addClass('ak-toggle-button')
.click(function(){
$(this).parent().remove();
})
)
.append(
$(document.createElement('span'))
.attr('id','ak_editor_notifier_content')
.append(
// Loading animation
$(document.createElement('img'))
.attr({
border: 0,
src: akeeba.Multidb.loadingGif
})
)
.append(
// Loading text
$(document.createElement('span'))
.html(akeeba.Multidb.translations['UI-MULTIDB-LOADING'])
)
)
);
// Send AJAX save request
var req = {
verb : 'set',
root : root,
data : {
driver : $('#ake_driver').val(),
host : $('#ake_host').val(),
port : $('#ake_port').val(),
username : $('#ake_username').val(),
password : $('#ake_password').val(),
database : $('#ake_database').val(),
prefix : $('#ake_prefix').val(),
dumpFile : String(root).substr(0,9) + $('#ake_database').val() + '.sql'
}
};
var json = JSON.stringify(req);
var query = {
action : json
};
akeeba.System.doAjax(query, function(response){
if( response == true )
{
// Cache new data
cache_element.data('def', req.data);
// Update grid cells (host & db)
var cells = cache_element.children('td');
cells.find('span.ak_dbhost').html(req.data.host);
cells.find('span.ak_dbname').html(req.data.database);
// Handle new row case
if(!cells.find('span.editbutton').hasClass('ui-icon-pencil'))
{
// This was a new row. Add the normal buttons...
cells.find('span.deletebutton').parent().show();
cells.find('span.editbutton')
.removeClass('ui-icon-circle-plus')
.addClass('ui-icon-pencil')
.addClass('ak-toggle-button');
// ...then add a new "add new row" at the bottom.
akeeba.Multidb.addNewRecordButton(cache_element.parent());
}
// Finally close the dialog
$('#ak-editor').dialog("close");
}
else
{
$('#ak_editor_notifier_content')
.html( akeeba.Multidb.translations['UI-MULTIDB-SAVEFAIL'] );
}
}, function(message) {
$('#ak_editor_notifier_content')
.html( akeeba.Multidb.translations['UI-MULTIDB-SAVEFAIL'] );
akeeba.System.params.errorCallback(message);
});
};
buttons[strCancel] = function() {
// Cancel edits; just close the dialog
$(this).dialog("close");
};
editor.dialog('option', 'buttons', buttons);
// Show editor
editor.dialog('open');
editor.find('span').focus();
})
.append(
$(document.createElement('span'))
.addClass('ui-icon ui-icon-pencil editbutton')
.addClass('ak-toggle-button')
)
)
)
.append(
// Database host
$(document.createElement('td'))
.addClass('ak_filter_item')
.append(
$(document.createElement('span'))
.addClass('ak_filter_name')
.addClass('ak_dbhost')
.html(def.host)
)
)
.append(
// Database name
$(document.createElement('td'))
.addClass('ak_filter_item')
.append(
$(document.createElement('span'))
.addClass('ak_filter_name')
.addClass('ak_dbname')
.html(def.database)
)
)
.appendTo( $(append_to_here) );
};
akeeba.Multidb.addNewRecordButton = function( append_to_here )
{
var root = Math.uuid();
var dummyData = {
host: '',
port: '',
username: '',
password: '',
database: '',
prefix: ''
};
akeeba.Multidb.addRow(root, dummyData, append_to_here);
$('#ak_list_contents tr:last-child td:first-child span:first').hide();
$('#ak_list_contents tr:last-child td:nth-child(2) span:last')
.removeClass('ui-icon-pencil')
.addClass('ui-icon-circle-plus')
.addClass('ak-toggle-button');
}
}(akeeba.jQuery));