summaryrefslogtreecommitdiffhomepage
path: root/applications/luci-app-shadowsocks-libev/htdocs/luci-static/resources/view/shadowsocks-libev/servers.js
blob: 5951e92e51773b552c27d3fc7110a44beae995b1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
'use strict';
'require form';
'require uci';
'require ui';
'require shadowsocks-libev as ss';

var conf = 'shadowsocks-libev';

return L.view.extend({
	render: function() {
		var m, s, o;

		m = new form.Map(conf, _('Remote Servers'),
			_('Definition of remote shadowsocks servers.  \
				Disable any of them will also disable instances referring to it.'));

		s = m.section(form.GridSection, 'server');
		s.addremove = true;
		s.handleLinkImport = function() {
			var textarea = new ui.Textarea();
			ui.showModal(_('Import Links'), [
				textarea.render(),
				E('div', { class: 'right' }, [
					E('button', {
						class: 'btn',
						click: ui.hideModal
					}, [ _('Cancel') ]),
					' ',
					E('button', {
						class: 'btn cbi-button-action',
						click: ui.createHandlerFn(this, function() {
							textarea.getValue().split('\n').forEach(function(s) {
								var config = ss.parse_uri(s);
								if (config) {
									var tag = config[1];
									if (tag && !tag.match(/^[a-zA-Z0-9_]+$/)) tag = null;
									var sid = uci.add(conf, 'server', tag);
									config = config[0];
									Object.keys(config).forEach(function(k) {
										uci.set(conf, sid, k, config[k]);
									});
								}
							});
							return uci.save()
								.then(L.bind(this.map.load, this.map))
								.then(L.bind(this.map.reset, this.map))
								.then(L.ui.hideModal)
								.catch(function() {});
						})
					}, [ _('Import') ])
				])
			]);
		};
		s.renderSectionAdd = function(extra_class) {
			var el = form.GridSection.prototype.renderSectionAdd.apply(this, arguments);
			el.appendChild(E('button', {
				'class': 'cbi-button cbi-button-add',
				'title': _('Import Links'),
				'click': ui.createHandlerFn(this, 'handleLinkImport')
			}, [ _('Import Links') ]));
			return el;
		};

		o = s.option(form.Flag, 'disabled', _('Disable'));
		o.editable = true;

		ss.options_server(s);

		return m.render();
	},
	addFooter: function() {
		var p = '#edit=';
		if (location.hash.indexOf(p) === 0) {
			var section_id = location.hash.substring(p.length);
			var editBtn = document.querySelector('#cbi-shadowsocks-libev-' + section_id + ' button.cbi-button-edit');
			if (editBtn)
				editBtn.click();
		}
		return this.super('addFooter', arguments);
	}
});