⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 menus.html

📁 asterisk 的图形管理界面
💻 HTML
📖 第 1 页 / 共 3 页
字号:
			_$('savevmenu').disabled = true;
			_$('save').disabled = true;
			_$('cancel').disabled = true;
			
			if( _vms.options[_vms.selectedIndex].innerHTML=='New Entry' ){ // (if new Voicemenu 
				voicemenusdata[current_vmenu] = new Object();	
				voicemenusdata[current_vmenu].comment =  _cmv ;
				voicemenusdata[current_vmenu].alias_exten =  _ae.value;
				voicemenusdata[current_vmenu].extensions = new Object();
				// add the "s,1,Answer" data to voicemenus data
				voicemenusdata[current_vmenu].extensions['s'] = new Array();
				voicemenusdata[current_vmenu].extensions['s'][0] = answer_call_string;
				for (var k=0; k< keys.length; k++){
					if( buildstring[keys[k]] ){
						voicemenusdata[current_vmenu].extensions[keys[k]] = new Array();
						voicemenusdata[current_vmenu].extensions[keys[k]][0] = buildstring[keys[k]] ;
					}
				}
				// update vmenus
				_vms.options[_vms.selectedIndex].text = "VoiceMenu - " + _cmv;
				_vms.options[_vms.selectedIndex].value = current_vmenu;
				select_vmenu();
				// add the new menu to the list of menus being displayed in the keypad options
				add_newvmenu_tolistofkeymenus();

			}else{ // if editing existing keypress options
				for (var k=0; k< keys.length; k++){
					if( buildstring[keys[k]] ){
						voicemenusdata[current_vmenu].extensions[keys[k]] = new Array();
						voicemenusdata[current_vmenu].extensions[keys[k]][0] = buildstring[keys[k]] ;
					}else{
						if( voicemenusdata[current_vmenu].extensions[keys[k]] ){
							voicemenusdata[current_vmenu].extensions[keys[k]] = [];
						}
					}
				}
			}

		},
		onFailure: function(t) {
			_$('status_message').style.display='none';
			gui_alert("Config Error: " + t.status + ": " + t.statusText);
		}
	};
	var uri = "" ;
	var p = 0 ;
	var buildstring = new Object ;

	if( _vms.options[_vms.selectedIndex].innerHTML=='New Entry' ){
		var current_vmenu = next_freevmenu();
		uri += build_action('newcat', p, current_vmenu,"", ""); p = p+1;
		uri += build_action('append', p, current_vmenu,"comment", _cmv ); p = p+1;
		uri += build_action('append', p, current_vmenu,"alias_exten", _ae.value); p = p+1;
		if(_ae.value.length > 0){
			// alias for this voicemenu in [default] section of extensions.conf
			var alias_string = _ae.value + ",1,Goto(" + current_vmenu + "|s|1)"  ;
			uri += build_action('append', p, specialcontext ,"exten", alias_string ); p = p+1;
		}

		if( _ale.checked){ uri += build_action('append', p, current_vmenu,"include", "default"); p = p+1; }
		uri += build_action('append', p, current_vmenu,"exten", answer_call_string); p = p+1;
	}else{
		// Updating existing Voicemenu
		var current_vmenu = _vms.value;
		if(  voicemenusdata[current_vmenu].comment != _cmv ){
			uri += build_action('update', p, current_vmenu ,"comment", _cmv); p = p+1;
			change_vmenuname_inlistofmenus(voicemenusdata[current_vmenu].comment,_cmv);
			voicemenusdata[current_vmenu].comment = _cmv;
		}
		
		if(  voicemenusdata[current_vmenu].alias_exten != _ae.value ){
			var existing_alias_string = voicemenusdata[current_vmenu].alias_exten + ",1,Goto(" + current_vmenu + "|s|1)"  ;
			if( _ae.value.length > 0 ){
				// change alias for this voicemenu in 'default' section of extensions.conf
				var new_alias_string = _ae.value + ",1,Goto(" + current_vmenu + "|s|1)"  ;
				uri += build_action('update', p, specialcontext ,"exten", new_alias_string,existing_alias_string); p = p+1;
			}else{
				// if the user is deleting the alias for this voicemenu, then delete the defined alias in the [default] extensions.conf
				uri += build_action('delete', p, specialcontext ,"exten", "",existing_alias_string); p = p+1;
			}

			uri += build_action('update', p, current_vmenu ,"alias_exten", _ae.value ); p = p+1;
			voicemenusdata[current_vmenu].alias_exten = _ae.value;
		}
		
		if( voicemenusdata[current_vmenu].include =="default" && !_ale.checked ){
			uri += build_action('delete', p, current_vmenu ,"include",""); p = p+1;
			voicemenusdata[current_vmenu].include = "" ;
		}else if ( voicemenusdata[current_vmenu].include !="default"  && _ale.checked ){
			uri += build_action('append', p, current_vmenu,"include", "default"); p = p+1;
			voicemenusdata[current_vmenu].include = "default" ;
		}else if ( !voicemenusdata[current_vmenu].include && _ale.checked ){
			uri += build_action('append', p, current_vmenu ,"include", "default"); p = p+1;
			voicemenusdata[current_vmenu].include = "default" ;
		}

		for (var k=0; k< keys.length; k++){
			if(voicemenusdata[current_vmenu].extensions[keys[k]]){
				uri += build_action('delete', p, current_vmenu,"exten", "", voicemenusdata[current_vmenu].extensions[keys[k]][0] ); p = p+1;
			}
		}
	}

	// Build exten strings for enabled keys and append/update the 
	for (var k=0; k< keys.length; k++){
		var current_key_action='keypress_'+ keys[k] + '_action';
		var current_key_text='keypress_'+ keys[k] + '_text';
		var current_key_exts='keypress_'+ keys[k] + '_exts';
		var current_key_menus='keypress_'+ keys[k] + '_menus';
	
		if( $(current_key_action).value == "disabled")
			continue;
		else if( $(current_key_action).value == "gotomenu" )
				buildstring[keys[k]] = keys[k] + ",1,Goto("+ $(current_key_menus).value + "|s|1)" ;					
		else if( $(current_key_action).value == "gotoextension" )
				buildstring[keys[k]] = keys[k] + ",1,Goto(default|"+ $(current_key_exts).value + "|1)" ;					
		else if( $(current_key_action).value == "Custom" ) 
				buildstring[keys[k]] = keys[k] + ",1,"+ $(current_key_text).value ;
		else if( $(current_key_action).value == "Hangup" )
				buildstring[keys[k]] = keys[k] + ",1,"+ "Hangup" ;					
		else if( $(current_key_action).value == "PlayInvalid" ) 
				buildstring[keys[k]] = keys[k] + ",1,"+ "Playback(invalid)" ;
					
		uri += build_action('append', p, current_vmenu,"exten", buildstring[keys[k]]); p = p+1;
	}

	opt.parameters="action=updateconfig&srcfilename=" + encodeURIComponent("extensions.conf") + "&dstfilename=" + encodeURIComponent("extensions.conf") + uri;
	// send the request
	tmp = new Ajax.Request(asterisk_rawmanPath, opt);
}


function  enable_savecancel(){
	_$('save').disabled=false;
	_$('savevmenu').disabled = false;
	_$('cancel').disabled = false;
}


function generate_fields(key){
	var t = '<select  class="input8" style="font-family: Verdana, Arial, Helvetica, Sans-Serif;font-size: 11px;"   id=\'keypress_'+ key + '_action\' onchange="key_action(this.value, \'' + key + '\')">\n';
	t += '<option value="disabled">Disabled</option>\n' ;
	t += '<option value="gotomenu">Goto Menu</option>\n';
	t += '<option value="gotoextension">Goto Extension</option>\n';
	t += '<option value="Custom">Custom</option>\n';
	t += '<option value="Hangup">Hangup</option>\n';
	t += '<option value="PlayInvalid">Play Invalid</option>\n';
	t += '</select>&nbsp;<input type="text" class="input8" size=16 style="display:none;font-family: Verdana, Arial, Helvetica, Sans-Serif;font-size: 11px;" id="keypress_' + key+ '_text" onchange="enable_savecancel()">\n';
	t += '<select  style="display:none; font-family: Verdana, Arial, Helvetica, Sans-Serif;font-size: 11px;"  id="keypress_'+ key + '_menus" onchange="enable_savecancel()" class="input8"></select>\n';
	t += '<select  style="display:none; font-family: Verdana, Arial, Helvetica, Sans-Serif;font-size: 11px;"  id="keypress_'+ key + '_exts" onchange="enable_savecancel()" class="input8"></select>\n';
	return t;
}

function step_onselect(){
	// enable delete button
	if(_$('steps').value){
		_$('deletestep').disabled = false;
	}

	// enable Up/Down buttons accordingly
	update_updown();
}

function update_updown(){
	var _steps = _$('steps') ;
	_$('stepUp').disabled =( _steps.selectedIndex ) ? false : true ; 
	_$('stepDown').disabled = ( _steps.selectedIndex != (_steps.length-1) ) ? false: true ;
}

function step_up(){ // Swap x, x-1
	var _steps = _$('steps') ; 
	swap_step(_steps.selectedIndex, _steps.selectedIndex-1 );
}


function step_down(){	//swap x, x+1
	var _steps = _$('steps') ;
	swap_step( _steps.selectedIndex, _steps.selectedIndex+1 );
}


function swap_step(a,b){
	var _steps = _$('steps');
	var _vms_v = _$('vmenus').value ;

	var tmp1 = _steps.options[a].value.split(",") ;
	var priority_1 = tmp1[1];
	var tmp2 = _steps.options[b].value.split(",") ;
	var priority_2 = tmp2[1];

	tmp1.splice(1,1,priority_2);
	tmp2.splice(1,1,priority_1);

	var opt = {
		method: 'get',
		asynchronous: true,
		onSuccess: function() { 
			// update voicemenusdata
			for(var p=0; p< voicemenusdata[_vms_v].extensions['s'].length; p++){
				if( voicemenusdata[_vms_v].extensions['s'][p] == _steps.options[a].value ){
					voicemenusdata[_vms_v].extensions['s'][p] = tmp1.join();
				}else if (voicemenusdata[_vms_v].extensions['s'][p] == _steps.options[b].value  ){ 
					voicemenusdata[_vms_v].extensions['s'][p] = tmp2.join();
				}
			}
			// swap select values of a to b
			_steps.options[a].value = tmp2.join();
			_steps.options[b].value = tmp1.join();
			var buffer = _steps.options[a].text;
			_steps.options[a].text = _steps.options[b].text;
			_steps.options[b].text = buffer;
			_steps.selectedIndex = b;
			gui_feedback('Step Priority Updated!','blue');
			update_updown();

		},
		onFailure: function(t) {
			gui_alert("Config Error: " + t.status + ": " + t.statusText);
		}
	};	
	var uri = "";

	// ok find $('steps').options[a].value in extensions.conf and replace it with tmp1.join() and also replace $('steps').options[b].value with tmp2.join()	
	uri += build_action('update', 0, _vms_v ,"exten",tmp1.join(), _steps.options[a].value);
	uri += build_action('update', 1, _vms_v ,"exten",tmp2.join(), _steps.options[b].value);
	opt.parameters="action=updateconfig&srcfilename=" + encodeURIComponent("extensions.conf") + "&dstfilename=" + encodeURIComponent("extensions.conf") + uri;
	tmp = new Ajax.Request(asterisk_rawmanPath, opt);
}


function delete_step(){
	// delete the selected step and update voicemenusdata and update 'select' object - steps
	_$('status_message').style.display="";
	var _vmenus = _$('vmenus');
	var _steps = _$('steps');

	var opt = {
		method: 'get',
		asynchronous: true,
		onSuccess: function() { 
			setTimeout(function(){ _$('status_message').style.display='none';} ,sc_displaytime);
			// Update voicemenusdata
			for(var p=0; p< voicemenusdata[_vmenus.value].extensions['s'].length; p++){
				if( voicemenusdata[_vmenus.value].extensions['s'][p] == _steps.value ){ 
					voicemenusdata[_vmenus.value].extensions['s'].splice(p,1); 
				}
			}
			_steps.remove( _steps.selectedIndex);
			gui_feedback('Step Deleted !','default');
			_$('deletestep').disabled = true;
		},
		onFailure: function(t) {
			_$('status_message').style.display='none';
			gui_alert("Config Error: " + t.status + ": " + t.statusText);
		}
	};	
	var uri = "";
	uri += build_action('delete', 0, _vmenus.value,"exten", "", _steps.value); 
	opt.parameters="action=updateconfig&srcfilename=" + encodeURIComponent("extensions.conf") + "&dstfilename=" + encodeURIComponent("extensions.conf") + uri;
	tmp = new Ajax.Request(asterisk_rawmanPath, opt);
}


function update_newstep_var(){
	var _nsv = _$('newstep_var') ;
	var _nsa = _$('newstep_action');
	var _ane = _$('add_newstep_extensions') ;
	var _anm = _$('add_newstep_menus') ;

	_nsv.value = "";
	_nsv.style.display = "none";
	_$('newstep_var_digit').style.display= "none" ;
	_$('combodiv_sounds').style.display = "none" ;
	_ane.style.display = "none";
	_anm.style.display = "none";

        if( _nsa.value== "" || _nsa.value== "Answer"  || _nsa.value== "Hangup"  ){

        }else if( _nsa.value== "Background"  || _nsa.value== "Playback" ){
                _nsv.style.display = "";
                _nsv.size= 12;
        }else if( _nsa.value== "Authenticate"  || _nsa.value== "DigitTimeout"  || _nsa.value== "ResponseTimeout" ||  _nsa.value== "Wait"  ||  _nsa.value== "WaitExten" ){
                _$('newstep_var_digit').style.display= "" ;
        }else if(_nsa.value== "GotoMenu"  ){
		_nsv.value = _anm.value;
		_anm.style.display = "";
        }else if(_nsa.value== "GotoExtension"  ){
		_nsv.value = _ane.value;
		_ane.style.display = "";
        }
}


function select_vmenu(){
	// show all the //s, lines in the select box -
	if(_$('vmenus').selectedIndex ==-1){ return true;}

	var _steps = _$('steps');
	current_context = _$('vmenus').value;
	var x, y, tmp;
	var priority_1, priority_2, buffer;
	
	_$('allowexten').checked = (voicemenusdata[current_context].include == "default") ? true : false ;
 	//$('keypressoptions').innerHTML = "";
	_steps.options.length =0;
	_$('comment').value = voicemenusdata[current_context].comment;
	_$('alias_exten').disabled = false;
 	_$('alias_exten').value = ( voicemenusdata[current_context].alias_exten  ) ? voicemenusdata[current_context].alias_exten : "" ;

	if(voicemenusdata[current_context].extensions['s']){
		for (var x=0;x<voicemenusdata[current_context].extensions['s'].length ; x++ ){
			var newoption = document.createElement("option");
			newoption.text = format_step(voicemenusdata[current_context].extensions['s'][x]);
			newoption.value = voicemenusdata[current_context].extensions['s'][x];
			_steps.options.add ( newoption );
		}
	}

	// To be done: replace the following bubble sort with js native sort method
	for (var x = (_steps.length - 1); x >= 0; x--){
		for (var y = 1; y <= x; y++){
			tmp = _steps.options[y].value.split(",") ;
			priority_1 = tmp[1];
			tmp = _steps.options[y-1].value.split(",") ;
			priority_2 = tmp[1];
			if (priority_2 - priority_1 > 0){
				buffer = _steps.options[y-1].value;
				_steps.options[y-1].value = _steps.options[y].value;
				_steps.options[y].value = buffer;
				buffer = _steps.options[y-1].text;
				_steps.options[y-1].text = _steps.options[y].text;
				_steps.options[y].text = buffer;
			}
		}
	}

	_steps.disabled = false;
	_$('addstep').disabled = false;
	_$('allowexten').disabled = false;
	_$('comment').disabled = false;
	_$('deletestep').disabled = true;
	_$('delete').disabled = false;
	_$('newstep_action').disabled = false;
	_$('newstep_var').disabled = false;
	_$('keypressoptions').style.display = "";
	_$('stepDown').disabled = true;
	_$('stepUp').disabled = true;
	_$('savevmenu').disabled = true;

	for (y=0; y<keys.length ; y++ ){
		current_key_action='keypress_'+ keys[y] + '_action';
		current_key_text='keypress_'+ keys[y] + '_text';
		current_key_exts='keypress_'+ keys[y] + '_exts';
		current_key_menus='keypress_'+ keys[y] + '_menus';

		_$(current_key_action).options.selectedIndex = 0;
		_$(current_key_menus).style.display = "none";
		_$(current_key_text).style.display = "none";
		_$(current_key_exts).style.display = "none";

		if(voicemenusdata[current_context].extensions[keys[y]]){
			// Load the appropriate Key menu according to the voicemenusdata[current_context].extensions[y][x]
			// actually we are assuming that there is only voicemenusdata[current_context].extensions[y][0]
			tmp = voicemenusdata[current_context].extensions[keys[y]][0].split(',');

			if( tmp[2].match("Goto") && tmp[2].match("voicemenu-") ){ //  if "is a voicemenu"
				_$(current_key_action).options[1].selected = true;
				_$(current_key_menus).style.display = "";
				select_menu (current_key_menus, tmp[2],"ismenu");
			}else  if( tmp[2].match("Goto") && !tmp[2].match("voicemenu-") ){ // //  if "goto an extension " (no 'voicemenu-')
				_$(current_key_action).options[2].selected = true;
				_$(current_key_exts).style.display = "";
				select_menu(current_key_exts, tmp[2],"isext"); // select_menu common for exts and menus
			}else if(tmp[2].match("Hangup") ){ // if HangUp
				_$(current_key_action).options[4].selected = true;							
			}else if( tmp[2].match('Playback') &&  tmp[2].match( "(invalid)" ) ){
				_$(current_key_action).options[5].selected = true;											
			}else{ // if custom (no 'goto')
				_$(current_key_action).options[3].selected = true;
				_$(current_key_text).style.display = "";
				_$(current_key_text).value = tmp[2];
			}
		}else{	// Key_action is disabled => hide the text & options (which already are)

		}
	}
}


menuscallbacks.postselect = function() {
	select_vmenu();
}

menuscallbacks.format = function(t, x) {
	var tmp = t.name.split('general');
	var exten_fields;

	if(tmp.length > 1 ){
		return false;
	}else if ( t.name.substr(0,10) == 'voicemenu-' && x==undefined ){	// if is a category
		current_context = t.name;
		voicemenusdata[current_context] = new Object();
		return t.name ;
	}else if(t.name.substr(0,10) == 'voicemenu-' ) { 	// if is a subcategory
		switch( t.names[x] ){
			case 'comment':
				voicemenusdata[current_context].comment =  t.fields[x];
				voicemenusdata[current_context].extensions = new Object();
				return false;
			case 'alias_exten':
				voicemenusdata[current_context].alias_exten =  t.fields[x];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -