/************************************************/ /* 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>/, "$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();