Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/spreed.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'js/admin/stun-server.js')
-rw-r--r--js/admin/stun-server.js100
1 files changed, 100 insertions, 0 deletions
diff --git a/js/admin/stun-server.js b/js/admin/stun-server.js
new file mode 100644
index 000000000..af1cd9bfe
--- /dev/null
+++ b/js/admin/stun-server.js
@@ -0,0 +1,100 @@
+/* global OC, OCP, OCA, $, _ */
+
+(function(OC, OCP, OCA, $, _) {
+ 'use strict';
+
+ OCA.VideoCalls = OCA.VideoCalls || {};
+ OCA.VideoCalls.Admin = OCA.VideoCalls.Admin || {};
+ OCA.VideoCalls.Admin.StunServer = {
+
+ TEMPLATE: '<div class="stun-server">' +
+ ' <input type="text" name="stun_server" placeholder="stunserver:port" value="{{server}}" />' +
+ ' <a class="icon icon-delete" title="' + t('spreed', 'Delete server') + '"></a>' +
+ ' <a class="icon icon-add" title="' + t('spreed', 'Add new server') + '"></a>' +
+ '</div>',
+ $list: undefined,
+ template: undefined,
+
+ init: function() {
+ this.template = Handlebars.compile(this.TEMPLATE);
+ this.$list = $('div.stun-servers');
+ this.renderList();
+ },
+
+ renderList: function() {
+ var servers = this.$list.data('servers');
+
+ _.each(servers, function(server) {
+ this.$list.append(
+ this.renderServer(server)
+ );
+ }.bind(this));
+
+ if (servers.length === 0) {
+ this.addNewTemplate('stun.nextcloud.com:443');
+ }
+ },
+
+ addNewTemplate: function(server) {
+ server = server || '';
+ this.$list.append(
+ this.renderServer(server)
+ );
+ },
+
+ deleteServer: function(e) {
+ e.stopPropagation();
+
+ var $server = $(e.currentTarget).parents('div.stun-server').first();
+ $server.remove();
+
+ this.saveServers();
+
+ if (this.$list.find('div.stun-server').length === 0) {
+ this.addNewTemplate('stun.nextcloud.com:443');
+ }
+
+ },
+
+ saveServers: function() {
+ var servers = [];
+
+ this.$list.find('input').each(function() {
+ var server = this.value,
+ parts = server.split(':');
+ if (parts.length !== 2) {
+ $(this).addClass('error');
+ } else {
+ if (parts[1].match(/^([1-9]\d{0,4})$/) === null ||
+ parseInt(parts[1]) > Math.pow(2, 16)) { //65536
+ $(this).addClass('error');
+ } else {
+ servers.push(this.value);
+ $(this).removeClass('error');
+ }
+ }
+ });
+
+ OCP.AppConfig.setValue('spreed', 'stun_server', JSON.stringify(servers));
+ },
+
+ renderServer: function(server) {
+ var $template = $(this.template({
+ server: server
+ }));
+
+ $template.find('a.icon-add').on('click', this.addNewTemplate.bind(this));
+ $template.find('a.icon-delete').on('click', this.deleteServer.bind(this));
+ $template.find('input').on('change', this.saveServers.bind(this));
+
+ return $template;
+ }
+
+ };
+
+
+})(OC, OCP, OCA, $, _);
+
+$(document).ready(function(){
+ OCA.VideoCalls.Admin.StunServer.init();
+});