80_upnp.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. 'use strict';
  2. 'require rpc';
  3. 'require uci';
  4. var callUpnpGetStatus, callUpnpDeleteRule, handleDelRule;
  5. callUpnpGetStatus = rpc.declare({
  6. object: 'luci.upnp',
  7. method: 'get_status',
  8. expect: { }
  9. });
  10. callUpnpDeleteRule = rpc.declare({
  11. object: 'luci.upnp',
  12. method: 'delete_rule',
  13. params: [ 'token' ],
  14. expect: { result : "OK" },
  15. });
  16. handleDelRule = function(num, ev) {
  17. L.dom.parent(ev.currentTarget, '.tr').style.opacity = 0.5;
  18. ev.currentTarget.classList.add('spinning');
  19. ev.currentTarget.disabled = true;
  20. ev.currentTarget.blur();
  21. callUpnpDeleteRule(num);
  22. };
  23. return L.Class.extend({
  24. title: _('Active UPnP Redirects'),
  25. load: function() {
  26. return Promise.all([
  27. callUpnpGetStatus(),
  28. ]);
  29. },
  30. render: function(data) {
  31. var table = E('div', { 'class': 'table', 'id': 'upnp_status_table' }, [
  32. E('div', { 'class': 'tr table-titles' }, [
  33. E('div', { 'class': 'th' }, _('Protocol')),
  34. E('div', { 'class': 'th' }, _('External Port')),
  35. E('div', { 'class': 'th' }, _('Client Address')),
  36. E('div', { 'class': 'th' }, _('Host')),
  37. E('div', { 'class': 'th' }, _('Client Port')),
  38. E('div', { 'class': 'th' }, _('Description')),
  39. E('div', { 'class': 'th cbi-section-actions' }, '')
  40. ])
  41. ]);
  42. var rules = Array.isArray(data[0].rules) ? data[0].rules : [];
  43. var rows = rules.map(function(rule) {
  44. return [
  45. rule.proto,
  46. rule.extport,
  47. rule.intaddr,
  48. rule.host_hint || _('Unknown'),
  49. rule.intport,
  50. rule.descr,
  51. E('button', {
  52. 'class': 'btn cbi-button-remove',
  53. 'click': L.bind(handleDelRule, this, rule.num)
  54. }, [ _('Delete') ])
  55. ];
  56. });
  57. cbi_update_table(table, rows, E('em', _('There are no active redirects.')));
  58. return table;
  59. }
  60. });