📄 astman.js
字号:
return false; else return true; } return true;}function Astman() { var me = this; var channels = new Array; var lastselect; var selecttarget; this.setURL = function(url) { this.url = url; }; this.setEventCallback = function(callback) { this.eventcallback = callback; }; this.setDebug = function(debug) { this.debug = debug; }; this.run_tool = function(tool, callback) { var opt = { method: 'get', asynchronous: true, onSuccess: function() { if (callback) callback(); }, onFailure: function(t) { gui_alert("Tool Error: " + t.status + ": " + t.statusText); } }; var tmp; opt.parameters="action=originate&channel=" + encodeURIComponent("Local/executecommand@"+asterisk_guitools ) + "&Variable=command%3d"+ encodeURIComponent(tool) + "&application=noop&timeout=60000"; tmp = new Ajax.Request(this.url, opt); }; this.cliCommand = function(cmd, callback) { var opt = { method: 'get', asynchronous: true, onSuccess: function(originalRequest) { if (callback) callback(originalRequest.responseText); }, onFailure: function(t) { gui_alert("Tool Error: " + t.status + ": " + t.statusText); } }; var tmp; opt.parameters="action=command&command=" + encodeURIComponent(cmd); tmp = new Ajax.Request(this.url, opt); }; this.clickChannel = function(ev) { var target = ev.target; // XXX This is icky, we statically use astmanEngine to call the callback XXX if (me.selecttarget) me.restoreTarget(me.selecttarget); while(!target.id || !target.id.length) target=target.parentNode; me.selecttarget = target.id; target.className = "chanlistselected"; me.chancallback(target.id); }; this.restoreTarget = function(targetname) { var other; var target = _$(targetname); if (!target) return; if (target.previousSibling) { other = target.previousSibling.previousSibling.className; } else if (target.nextSibling) { other = target.nextSibling.nextSibling.className; } if (other) { if (other == "chanlisteven") target.className = "chanlistodd"; else target.className = "chanlisteven"; } else target.className = "chanlistodd"; }; this.channelUpdate = function(msg, channame) { var fields = new Array("callerid", "calleridname", "context", "extension", "priority", "account", "state", "link", "uniqueid" ); var x; if (!channame || !channame.length) channame = msg.headers['channel']; if (!channels[channame]) channels[channame] = new Array(); if (msg.headers.event) { if (msg.headers.event == "Hangup") { delete channels[channame]; } else if (msg.headers.event == "Link") { var chan1 = msg.headers.channel1; var chan2 = msg.headers.channel2; if (chan1 && channels[chan1]) channels[chan1].link = chan2; if (chan2 && channels[chan2]) channels[chan2].link = chan1; } else if (msg.headers.event == "Unlink") { var chan1 = msg.headers.channel1; var chan2 = msg.headers.channel2; if (chan1 && channels[chan1]) delete channels[chan1].link; if (chan2 && channels[chan2]) delete channels[chan2].link; } else if (msg.headers.event == "Rename") { var oldname = msg.headers.oldname; var newname = msg.headers.newname; if (oldname && channels[oldname]) { channels[newname] = channels[oldname]; delete channels[oldname]; } } else { channels[channame]['channel'] = channame; for (x=0;x<fields.length;x++) { if (msg.headers[fields[x]]) channels[channame][fields[x]] = msg.headers[fields[x]]; } } } else { channels[channame]['channel'] = channame; for (x=0;x<fields.length;x++) { if (msg.headers[fields[x]]) channels[channame][fields[x]] = msg.headers[fields[x]]; } } }; this.channelClear = function() { channels = new Array; }; this.channelInfo = function(channame) { return channels[channame]; }; this.channelTable = function(callback) { var s, x; var cclass, count=0; var found = 0; var foundactive = 0; var fieldlist = new Array("channel", "callerid", "calleridname", "context", "extension", "priority"); me.chancallback = callback; s = "<table class='chantable' align='center'>\n"; s = s + "\t<tr class='labels' id='labels'><td>Channel</td><td>State</td><td>Caller</td><td>Location</td><td>Link</td></tr>"; count=0; for (x in channels) { if (channels[x].channel) { if (count % 2) cclass = "chanlistodd"; else cclass = "chanlisteven"; if (me.selecttarget && (me.selecttarget == x)) { cclass = "chanlistselected"; foundactive = 1; } count++; s = s + "\t<tr class='" + cclass + "' id='" + channels[x].channel + "' onClick='parent.astmanEngine.clickChannel(event)'>"; s = s + "<td class='field_text'>" + channels[x].channel + "</td>"; if (channels[x].state) s = s + "<td class='field_text'>" + channels[x].state + "</td>"; else s = s + "<td class='field_text'><i class='light'>unknown</i></td>"; if (channels[x].calleridname && channels[x].callerid && channels[x].calleridname != "<unknown>") { cid = channels[x].calleridname.escapeHTML() + " <" + channels[x].callerid.escapeHTML() + ">"; } else if (channels[x].calleridname && (channels[x].calleridname != "<unknown>")) { cid = channels[x].calleridname.escapeHTML(); } else if (channels[x].callerid) { cid = channels[x].callerid.escapeHTML(); } else { cid = "<i class='light'>Unknown</i>"; } s = s + "<td class='field_text'>" + cid + "</td>"; if (channels[x].extension) { s = s + "<td class='field_text'>" + channels[x].extension + "@" + channels[x].context + ":" + channels[x].priority + "</td>"; } else { s = s + "<td class='field_text'><i class='light'>None</i></td>"; } if (channels[x].link) { s = s + "<td class='field_text'>" + channels[x].link + "</td>"; } else { s = s + "<td class='field_text'><i class='light'>None</i></td>"; } s = s + "</tr>\n"; found++; } } if (!found) s += "<tr><td colspan=" + fieldlist.length + "><i class='light'>No active channels</i></td>\n"; s += "</table>\n"; if (!foundactive) { me.selecttarget = null; } return s; }; this.parseResponse = function(t, callback, userdata) { var msgs = new Array(); var inmsg = 0; var msgnum = 0; var x,y; var s = t.responseText; var allheaders = s.split('\r\n'); if (me.debug) me.debug.value = "\n"; for (x=0;x<allheaders.length;x++) { if (allheaders[x].length) { var fields = allheaders[x].split(': '); if (!inmsg) { msgs[msgnum] = new Object(); msgs[msgnum].headers = {}; msgs[msgnum].names = new Array(); y=0; } msgs[msgnum].headers[fields[0].toLowerCase()] = allheaders[x].substr(fields[0].length +2); msgs[msgnum].names[y++] = fields[0].toLowerCase(); if (me.debug) me.debug.value = me.debug.value + "field " + fields[0] + "/" + fields[1] + "\n"; inmsg=1; } else { if (inmsg) { if (me.debug) me.debug.value = me.debug.value + " new message\n"; inmsg = 0; msgnum++; } } } if (me.debug) { me.debug.value = me.debug.value + "msgnum is " + msgnum + " and array length is " + msgs.length + "\n"; me.debug.value = me.debug.value + "length is " + msgs.length + "\n"; var x, y; for (x=0;x<msgs.length;x++) { for (y=0;y<msgs[x].names.length;y++) { me.debug.value = me.debug.value + "msg "+ (x + 1) + "/" + msgs[x].names[y] + "/" + msgs[x].headers[msgs[x].names[y]] + "\n"; } } } callback(msgs, userdata); }; this.fields2changes = function(widgets, config, cattmp, chop_changes) { var thevalue; var changes=""; var count = 0; var override=0; var tmp; var cat; var chopped_changes={}; chopped_changes.current_batch = 1 ; chopped_changes.current_batch_actionnumber = 0; chopped_changes.actions = {}; chopped_changes.getacn = function(nc){ return this.current_batch_actionnumber; }; chopped_changes.addNewChange = function(nc){ var t = 'act_' + this.current_batch; if(!this.current_batch_actionnumber){ this.actions[t] = nc; }else{ this.actions[t] = this.actions[t] + nc; } if( this.current_batch_actionnumber == 5 ){ this.current_batch++; this.current_batch_actionnumber = 0; }else{ this.current_batch_actionnumber++; } }; chopped_changes.build_action = function(a,x,b,c,d,e){ var z = this.getacn(); var nc = e?build_action(a, z, b, c, d, e):build_action(a, z, b, c, d) ; this.addNewChange(nc); }; tmp = cattmp.catname.split(']'); if (tmp.length > 1) cat = config.catbyname[tmp[0]].subfields[tmp[1]]; else cat = config.catbyname[cattmp.catname]; if (widgets['name']) { if (cat.name != widgets['name'].value) { if (cat.name.length) { changes += build_action('renamecat', count++, cat.name, "", widgets['name'].value); if(chop_changes){ chopped_changes.build_action('renamecat', count++, cat.name, "", widgets['name'].value); } } else { changes += build_action('newcat', count++, widgets['name'].value, "", ""); if(chop_changes){ chopped_changes.build_action('newcat', count++, widgets['name'].value, "", ""); } override = 1; } cat.name = widgets['name'].value; if (cat.fieldbyname) { config.catbyname[cattmp.catname] = null; config.catbyname[cat.name] = cat; cattmp.catname = cat.name; } } } for (var x in widgets) { if( widgets.hasOwnProperty(x) ){ var src; if ((x == 'save') || (x == 'cancel') || (x == 'name') || (x == 'new') || (x == 'newitem') || (x == 'delete')) continue; if (widgets[x].name) src = widgets[x].name; else src = x; if (widgets[x] && widgets[x].type) { if (cat.fieldbyname) { if (cat.fieldbyname[src]) thevalue = cat.fieldbyname[src]; else thevalue = ''; } else if (cat[src]) thevalue = cat[src]; else thevalue = ''; if (widgets[x].type == 'radio') { if (widgets[x].checked) { if (override || !thevalue.length || (widgets[x].value != thevalue)) { if (cat.fieldbyname) cat.fieldbyname[src] = widgets[x].value; else cat[src] = widgets[x].value; if (cat.fieldbyname){ changes += build_action('update', count++, cat.name, src, cat.fieldbyname[src]); if(chop_changes){ chopped_changes.build_action('update', count++, cat.name, src, cat.fieldbyname[src]); } } } } } else if (widgets[x].type == 'checkbox') { if (override || !thevalue.length || (widgets[x].checked != ast_true(thevalue))) { if (widgets[x].checked) { if (cat.fieldbyname) cat.fieldbyname[src] = 'yes'; else cat[src] = 'yes'; } else if (cat.fieldbyname) cat.fieldbyname[src] = 'no'; else cat[src] = 'no'; if (cat.fieldbyname){ changes += build_action('update', count++, cat.name, src, cat.fieldbyname[src]); if(chop_changes){ chopped_changes.build_action('update', count++, cat.name, src, cat.fieldbyname[src]); } } } } else if (widgets[x].options && widgets[x].multiple && widgets[x].splitchar) { var answers = new Array; for (var y=0;y<widgets[x].options.length;y++) { if (widgets[x].options[y].selected) answers.push(widgets[x].options[y].value); } if (cat.fieldbyname) { cat.fieldbyname[src] = answers.join(widgets[x].splitchar); if (thevalue != cat.fieldbyname[src]){ changes += build_action('update', count++, cat.name, src, cat.fieldbyname[src]); if(chop_changes){ chopped_changes.build_action('update', count++, cat.name, src, cat.fieldbyname[src]); } } } else cat[src] = answers.join(widgets[x].splitchar); } else if (override || (widgets[x].value != thevalue)) { if (cat.fieldbyname) { cat.fieldbyname[src] = widgets[x].value; if( !widgets[x].value && !widgets[x].hasAttribute('allowblank') ){ changes += build_action('delete', count++, cat.name, src, "", thevalue); if(chop_changes){ chopped_changes.build_action('delete', count++, cat.name, src, "", thevalue); } }else{ changes += build_action('update', count++, cat.name, src, cat.fieldbyname[src]); if(chop_changes){ chopped_changes.build_action('update', count++, cat.name, src, cat.fieldbyname[src]); } } } else cat[src] = widgets[src].value; } } }} if(chop_changes){ return chopped_changes.actions; } return changes; }; this.cat2fields = function(widgets, cat) { var thevalue; var savewidget = widgets['save']; var cancelwidget = widgets['cancel']; if (savewidget) { savewidget.activateSave = function(t) { savewidget.disabled = false; if (savewidget.cancelwidget) { savewidget.cancelwidget.disabled = false; } }; savewidget.disabled = true; if (cancelwidget) { savewidget.cancelwidget = cancelwidget; cancelwidget.disabled = true; } } for (var x in widgets) { if( widgets.hasOwnProperty(x) ){ var src; if ((x == 'save') || (x == 'cancel') || (x == 'new') || (x == 'newitem') || (x == 'delete')) continue; if (widgets[x].name) src = widgets[x].name;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -