254 lines
7.5 KiB
JavaScript
254 lines
7.5 KiB
JavaScript
/************************************************/
|
|
/* IPB3 Javascript */
|
|
/* -------------------------------------------- */
|
|
/* acp.uagents.js - User agent mapping */
|
|
/* (c) IPS, Inc 2008 */
|
|
/* -------------------------------------------- */
|
|
/* Author: Rikki Tissier */
|
|
/************************************************/
|
|
|
|
var _uagents = window.IPBACP;
|
|
_uagents.prototype.uagents = {
|
|
popups: {},
|
|
|
|
init: function()
|
|
{
|
|
Debug.write("Initializing acp.uagents.js");
|
|
document.observe("dom:loaded", function(){
|
|
Debug.write("Here");
|
|
Sortable.create( 'sortable_handle', { tag: 'li', only: 'isDraggable', revert: true, format: 'uagent_([0-9]+)', handle: 'draghandle', onUpdate: acp.uagents.updateAgents } );
|
|
|
|
if( $('add_uagent') )
|
|
{
|
|
$('add_uagent').observe('click', acp.uagents.addNewAgent);
|
|
}
|
|
});
|
|
},
|
|
|
|
updateAgents: function( draggable, mouse )
|
|
{
|
|
var uagents = Sortable.serialize( 'sortable_handle', { tag: 'li', name: 'uagents' } );
|
|
|
|
new Ajax.Request( acp.uagents.updateURL,
|
|
{
|
|
method: 'post',
|
|
parameters: uagents,
|
|
onSuccess: function(t)
|
|
{
|
|
Debug.write( t.responseText );
|
|
}
|
|
});
|
|
},
|
|
|
|
deleteAgent: function(e, id)
|
|
{
|
|
if( !$('uagent_' + id) ){
|
|
return;
|
|
}
|
|
|
|
if( !confirm( ipb.lang['ua_perm_remove'] ) )
|
|
{
|
|
return;
|
|
}
|
|
|
|
var url = ipb.vars['base_url'] + "app=core&module=ajax&section=uagents&do=removeuAgent&uagent_id=" + id + '&secure_key=' + ipb.vars['md5_hash'];
|
|
|
|
new Ajax.Request( url.replace(/&/g, '&'),
|
|
{
|
|
method: 'post',
|
|
evalJSON: 'force',
|
|
onSuccess: function(t)
|
|
{
|
|
if( Object.isUndefined( t.responseJSON ) )
|
|
{
|
|
alert( ipb.lang['ua_error_remove'] );
|
|
return;
|
|
}
|
|
|
|
if( t.responseJSON['errors'] )
|
|
{
|
|
alert( ipb.lang['ua_error_remove2'] + t.responseJSON['errors']);
|
|
return;
|
|
}
|
|
|
|
acp.uagents.json = t.responseJSON;
|
|
|
|
$('uagent_' + id).remove();
|
|
ipb.global.showInlineNotification( ipb.lang['useragent_removed'], { showClose: true } );
|
|
}
|
|
});
|
|
},
|
|
|
|
addNewAgent: function( e )
|
|
{
|
|
Event.stop(e);
|
|
|
|
if( acp.uagents.popups['new'] )
|
|
{
|
|
acp.uagents.popups['new'].show();
|
|
}
|
|
else
|
|
{
|
|
var html = ipb.templates['add_uagent'].evaluate( { id: 'new', box_title: ipb.lang['ua_add_string'] } );
|
|
|
|
var afterInit = function( popup ){
|
|
$('uagent_new_save').observe('click', acp.uagents.saveEditAgent.bindAsEventListener( this, 'new' ) );
|
|
};
|
|
|
|
acp.uagents.popups['new'] = new ipb.Popup('add_uagent_popup', { type: 'pane', modal: false, hideAtStart: false, w: '600px', initial: html }, { afterInit: afterInit } );
|
|
}
|
|
},
|
|
|
|
editAgent: function(e, id)
|
|
{
|
|
Event.stop(e);
|
|
|
|
if( !$('uagent_' + id) ){
|
|
return;
|
|
}
|
|
|
|
if( acp.uagents.popups[ id ] )
|
|
{
|
|
acp.uagents.popups[ id ].show();
|
|
}
|
|
else
|
|
{
|
|
// Get info
|
|
var info = acp.uagents.json['uagents'][ id ];
|
|
if( !info ){ return; }
|
|
|
|
var replace = {
|
|
'id': id,
|
|
'box_title': ipb.lang['ua_edit_string'],
|
|
'a_name': info['uagent_name'],
|
|
'a_key': info['uagent_key'],
|
|
'a_position': info['uagent_position'],
|
|
'a_regex': info['uagent_regex'],
|
|
'a_capture': info['uagent_regex_capture'],
|
|
'type_search': '',
|
|
'type_browser': '',
|
|
'type_other': ''
|
|
};
|
|
|
|
if( info['uagent_type'] == 'browser' ){
|
|
replace['type_browser'] = "selected='selected'";
|
|
} else if ( info['uagent_type'] == 'search' ) {
|
|
replace['type_search'] = "selected='selected'";
|
|
} else {
|
|
replace['type_pther'] = "selected='selected'";
|
|
}
|
|
|
|
var html = ipb.templates['add_uagent'].evaluate( replace );
|
|
|
|
var afterInit = function( popup ){
|
|
$('uagent_' + id + '_save').observe('click', acp.uagents.saveEditAgent.bindAsEventListener( this, id ) );
|
|
};
|
|
|
|
acp.uagents.popups[ id ] = new ipb.Popup('edit_uagent_' + id , { type: 'pane', modal: false, hideAtStart: false, w: '600px', initial: html }, { afterInit: afterInit } );
|
|
}
|
|
},
|
|
|
|
saveEditAgent: function(e, id)
|
|
{
|
|
var url = ipb.vars['base_url'] + "app=core&module=ajax&section=uagents&do=saveuAgent&&uagent_id=" + id + '&secure_key=' + ipb.vars['md5_hash'];
|
|
|
|
var params = {
|
|
'uagent_key' : $F('uagent_key_' + id ),
|
|
'uagent_name' : $F('uagent_name_' + id ).encodeParam(),
|
|
'uagent_regex' : $F('uagent_regex_' + id ),
|
|
'uagent_regex_capture' : $F('uagent_capture_' + id ),
|
|
'uagent_type' : $F('uagent_type_' + id ),
|
|
'uagent_position' : $F('uagent_position_' + id ),
|
|
'type' : ( id == 'new' ) ? 'add' : 'edit'
|
|
};
|
|
|
|
if( id == 'new' )
|
|
{
|
|
params['uagent_position'] = $H( acp.uagents.json['uagents'] ).size() + 1;
|
|
}
|
|
|
|
/* Got enough data? */
|
|
if ( ! params['uagent_key'] || ! params['uagent_name'] || ! params['uagent_regex'] || ! params['uagent_type'] )
|
|
{
|
|
alert( ipb.lang['ua_form_incomplete'] );
|
|
return false;
|
|
}
|
|
|
|
new Ajax.Request( url.replace( /&/g, '&' ),
|
|
{
|
|
method: 'post',
|
|
parameters: params,
|
|
evalJSON: 'force',
|
|
onSuccess: function(t)
|
|
{
|
|
if( Object.isUndefined( t.responseJSON ) )
|
|
{
|
|
alert( ipb.lang['ua_error_save'] );
|
|
return;
|
|
}
|
|
else if( t.responseJSON['error'] )
|
|
{
|
|
t.responseJSON['error'] = ( t.responseJSON['error'] == 'UAGENT_EXISTS' ) ? ipb.lang['ua_exists'] : t.responseJSON['error'];
|
|
alert( ipb.lang['ua_error_save2'] + t.responseJSON['error'] );
|
|
return;
|
|
}
|
|
|
|
acp.uagents.json = t.responseJSON;
|
|
|
|
if( id == 'new' )
|
|
{
|
|
var newparams = {
|
|
'id': t.responseJSON['returnid'],
|
|
'name': unescape(params['uagent_name']),
|
|
'type': params['uagent_type']
|
|
};
|
|
|
|
// Need to add it to the list
|
|
var html = ipb.templates['agent_row'].evaluate( newparams );
|
|
$('sortable_handle').insert( { bottom: html } );
|
|
|
|
acp.uagents.popups['new'].hide();
|
|
|
|
$('uagent_key_new').value = '';
|
|
$('uagent_name_new').value = '';
|
|
$('uagent_regex_new').value = '';
|
|
$('uagent_capture_new').value = '';
|
|
$('uagent_position_new').value = 0;
|
|
|
|
/* Update ID */
|
|
id = newparams['id'];
|
|
}
|
|
else
|
|
{
|
|
$('agent_' + id + '_edit').stopObserving();
|
|
$('agent_' + id + '_delete').stopObserving();
|
|
|
|
/* Update contents so that the name and image are updated in place */
|
|
var newparams = {
|
|
'id': id,
|
|
'name': unescape(params['uagent_name']),
|
|
'type': params['uagent_type']
|
|
};
|
|
|
|
// Need to add it to the list
|
|
var html = ipb.templates['agent_row'].evaluate( newparams );
|
|
|
|
$('uagent_' + id ).update( html.replace( /^<li([^>]+?)>(.*)<\/li>/, "$2" ) );
|
|
|
|
acp.uagents.popups[ id ].hide();
|
|
}
|
|
|
|
/* Reset listeners */
|
|
$('agent_' + id + '_edit').observe('click', acp.uagents.editAgent.bindAsEventListener( this, id ) );
|
|
$('agent_' + id + '_delete').observe('click', acp.uagents.deleteAgent.bindAsEventListener( this, id ) );
|
|
|
|
ipb.global.showInlineNotification( ipb.lang['useragent_saved'], { showClose: true } );
|
|
|
|
/* Reset sortable */
|
|
Sortable.create( 'sortable_handle', { tag: 'li', only: 'isDraggable', revert: true, format: 'uagent_([0-9]+)', handle: 'draghandle', onUpdate: acp.uagents.updateAgents } );
|
|
}
|
|
});
|
|
}
|
|
};
|
|
|
|
acp.uagents.init(); |