📄 menus.html
字号:
_$('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> <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 + -