Merge pull request #167 from catborise/master
some fixing operations and minor additions
|
@ -193,10 +193,9 @@ sudo systemctl restart nginx && systemctl restart supervisord
|
||||||
And finally, check everything is running:
|
And finally, check everything is running:
|
||||||
```bash
|
```bash
|
||||||
sudo supervisorctl status
|
sudo supervisorctl status
|
||||||
|
gstfsd RUNNING pid 24662, uptime 6:01:40
|
||||||
novncd RUNNING pid 24186, uptime 2:59:14
|
novncd RUNNING pid 24661, uptime 6:01:40
|
||||||
webvirtcloud RUNNING pid 24185, uptime 2:59:14
|
webvirtcloud RUNNING pid 24660, uptime 6:01:40
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Apache mod_wsgi configuration
|
#### Apache mod_wsgi configuration
|
||||||
|
|
36
accounts/migrations/0014_auto_20180808_1436.py
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.11.13 on 2018-08-08 11:36
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
import django.core.validators
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('accounts', '0013_auto_20180625_1358'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='userattributes',
|
||||||
|
name='max_cpus',
|
||||||
|
field=models.IntegerField(default=1, help_text=b'-1 for unlimited. Any integer value', validators=[django.core.validators.MinValueValidator(-1)]),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='userattributes',
|
||||||
|
name='max_disk_size',
|
||||||
|
field=models.IntegerField(default=20, help_text=b'-1 for unlimited. Any integer value', validators=[django.core.validators.MinValueValidator(-1)]),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='userattributes',
|
||||||
|
name='max_instances',
|
||||||
|
field=models.IntegerField(default=1, help_text=b'-1 for unlimited. Any integer value', validators=[django.core.validators.MinValueValidator(-1)]),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='userattributes',
|
||||||
|
name='max_memory',
|
||||||
|
field=models.IntegerField(default=2048, help_text=b'-1 for unlimited. Any integer value', validators=[django.core.validators.MinValueValidator(-1)]),
|
||||||
|
),
|
||||||
|
]
|
22
accounts/migrations/0015_auto_20180808_1449.py
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.11.13 on 2018-08-08 11:49
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('accounts', '0014_auto_20180808_1436'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='usersshkey',
|
||||||
|
name='user',
|
||||||
|
field=models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to=settings.AUTH_USER_MODEL),
|
||||||
|
),
|
||||||
|
]
|
|
@ -2,12 +2,12 @@ from django.db import models
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from instances.models import Instance
|
from instances.models import Instance
|
||||||
from django.core.validators import integer_validator, MinValueValidator
|
from django.core.validators import MinValueValidator
|
||||||
|
|
||||||
|
|
||||||
class UserInstance(models.Model):
|
class UserInstance(models.Model):
|
||||||
user = models.ForeignKey(User)
|
user = models.ForeignKey(User, on_delete=models.CASCADE)
|
||||||
instance = models.ForeignKey(Instance)
|
instance = models.ForeignKey(Instance, on_delete=models.CASCADE)
|
||||||
is_change = models.BooleanField(default=False)
|
is_change = models.BooleanField(default=False)
|
||||||
is_delete = models.BooleanField(default=False)
|
is_delete = models.BooleanField(default=False)
|
||||||
is_vnc = models.BooleanField(default=False)
|
is_vnc = models.BooleanField(default=False)
|
||||||
|
@ -17,7 +17,7 @@ class UserInstance(models.Model):
|
||||||
|
|
||||||
|
|
||||||
class UserSSHKey(models.Model):
|
class UserSSHKey(models.Model):
|
||||||
user = models.ForeignKey(User)
|
user = models.ForeignKey(User, on_delete=models.DO_NOTHING)
|
||||||
keyname = models.CharField(max_length=25)
|
keyname = models.CharField(max_length=25)
|
||||||
keypublic = models.CharField(max_length=500)
|
keypublic = models.CharField(max_length=500)
|
||||||
|
|
||||||
|
@ -27,10 +27,10 @@ class UserSSHKey(models.Model):
|
||||||
class UserAttributes(models.Model):
|
class UserAttributes(models.Model):
|
||||||
user = models.OneToOneField(User, on_delete=models.CASCADE)
|
user = models.OneToOneField(User, on_delete=models.CASCADE)
|
||||||
can_clone_instances = models.BooleanField(default=True)
|
can_clone_instances = models.BooleanField(default=True)
|
||||||
max_instances = models.IntegerField(default=1, help_text="-1 for unlimited. Any integer value", validators=[integer_validator,MinValueValidator(-1),])
|
max_instances = models.IntegerField(default=1, help_text="-1 for unlimited. Any integer value", validators=[MinValueValidator(-1),])
|
||||||
max_cpus = models.IntegerField(default=1, help_text="-1 for unlimited. Any integer value", validators=[integer_validator,MinValueValidator(-1)])
|
max_cpus = models.IntegerField(default=1, help_text="-1 for unlimited. Any integer value", validators=[MinValueValidator(-1)])
|
||||||
max_memory = models.IntegerField(default=2048, help_text="-1 for unlimited. Any integer value", validators=[integer_validator,MinValueValidator(-1)])
|
max_memory = models.IntegerField(default=2048, help_text="-1 for unlimited. Any integer value", validators=[MinValueValidator(-1)])
|
||||||
max_disk_size = models.IntegerField(default=20, help_text="-1 for unlimited. Any integer value", validators=[integer_validator,MinValueValidator(-1)])
|
max_disk_size = models.IntegerField(default=20, help_text="-1 for unlimited. Any integer value", validators=[MinValueValidator(-1)])
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def create_missing_userattributes(user):
|
def create_missing_userattributes(user):
|
||||||
|
|
|
@ -43,7 +43,7 @@
|
||||||
{% if not user_insts %}
|
{% if not user_insts %}
|
||||||
<div class="col-lg-12">
|
<div class="col-lg-12">
|
||||||
<div class="alert alert-warning alert-dismissable">
|
<div class="alert alert-warning alert-dismissable">
|
||||||
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
||||||
<i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning:" %}</strong> {% trans "User doesn't have any Instace" %}
|
<i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning:" %}</strong> {% trans "User doesn't have any Instace" %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
{% if not users %}
|
{% if not users %}
|
||||||
<div class="col-lg-12">
|
<div class="col-lg-12">
|
||||||
<div class="alert alert-warning alert-dismissable">
|
<div class="alert alert-warning alert-dismissable">
|
||||||
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
||||||
<i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning:" %}</strong> {% trans "You don't have any User" %}
|
<i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning:" %}</strong> {% trans "You don't have any User" %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
{% if not users %}
|
{% if not users %}
|
||||||
<div class="col-lg-12">
|
<div class="col-lg-12">
|
||||||
<div class="alert alert-warning alert-dismissable">
|
<div class="alert alert-warning alert-dismissable">
|
||||||
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
||||||
<i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning:" %}</strong> {% trans "You don't have any User" %}
|
<i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning:" %}</strong> {% trans "You don't have any User" %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
<div class="col-xs-12" role="main">
|
<div class="col-xs-12" role="main">
|
||||||
{% if form.errors %}
|
{% if form.errors %}
|
||||||
<div class="alert alert-danger">
|
<div class="alert alert-danger">
|
||||||
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
||||||
{% trans "Incorrect username or password." %}
|
{% trans "Incorrect username or password." %}
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
|
@ -13,6 +13,7 @@ class ComputeAddTcpForm(forms.Form):
|
||||||
max_length=100)
|
max_length=100)
|
||||||
password = forms.CharField(error_messages={'required': _('No password has been entered')},
|
password = forms.CharField(error_messages={'required': _('No password has been entered')},
|
||||||
max_length=100)
|
max_length=100)
|
||||||
|
details = forms.CharField(max_length=50, required=False)
|
||||||
|
|
||||||
def clean_name(self):
|
def clean_name(self):
|
||||||
name = self.cleaned_data['name']
|
name = self.cleaned_data['name']
|
||||||
|
@ -49,6 +50,7 @@ class ComputeAddSshForm(forms.Form):
|
||||||
max_length=100)
|
max_length=100)
|
||||||
login = forms.CharField(error_messages={'required': _('No login has been entered')},
|
login = forms.CharField(error_messages={'required': _('No login has been entered')},
|
||||||
max_length=20)
|
max_length=20)
|
||||||
|
details = forms.CharField(max_length=50, required=False)
|
||||||
|
|
||||||
def clean_name(self):
|
def clean_name(self):
|
||||||
name = self.cleaned_data['name']
|
name = self.cleaned_data['name']
|
||||||
|
@ -87,6 +89,7 @@ class ComputeAddTlsForm(forms.Form):
|
||||||
max_length=100)
|
max_length=100)
|
||||||
password = forms.CharField(error_messages={'required': _('No password has been entered')},
|
password = forms.CharField(error_messages={'required': _('No password has been entered')},
|
||||||
max_length=100)
|
max_length=100)
|
||||||
|
details = forms.CharField(max_length=50, required=False)
|
||||||
|
|
||||||
def clean_name(self):
|
def clean_name(self):
|
||||||
name = self.cleaned_data['name']
|
name = self.cleaned_data['name']
|
||||||
|
@ -125,6 +128,7 @@ class ComputeEditHostForm(forms.Form):
|
||||||
login = forms.CharField(error_messages={'required': _('No login has been entered')},
|
login = forms.CharField(error_messages={'required': _('No login has been entered')},
|
||||||
max_length=100)
|
max_length=100)
|
||||||
password = forms.CharField(max_length=100)
|
password = forms.CharField(max_length=100)
|
||||||
|
details = forms.CharField(max_length=50, required=False)
|
||||||
|
|
||||||
def clean_name(self):
|
def clean_name(self):
|
||||||
name = self.cleaned_data['name']
|
name = self.cleaned_data['name']
|
||||||
|
|
|
@ -6,7 +6,7 @@ class Compute(models.Model):
|
||||||
hostname = models.CharField(max_length=20)
|
hostname = models.CharField(max_length=20)
|
||||||
login = models.CharField(max_length=20)
|
login = models.CharField(max_length=20)
|
||||||
password = models.CharField(max_length=14, blank=True, null=True)
|
password = models.CharField(max_length=14, blank=True, null=True)
|
||||||
details = models.CharField(max_length=50, null=True, blank=True)
|
details = models.CharField(max_length=50, null=True, blank=True)
|
||||||
type = models.IntegerField()
|
type = models.IntegerField()
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
|
|
|
@ -62,8 +62,9 @@
|
||||||
<h4 class="modal-title">{% trans "Edit connection" %}</h4>
|
<h4 class="modal-title">{% trans "Edit connection" %}</h4>
|
||||||
</div>
|
</div>
|
||||||
{% ifequal compute.type 1 %}
|
{% ifequal compute.type 1 %}
|
||||||
<div class="modal-body">
|
<form class="form-horizontal" method="post" role="form">{% csrf_token %}
|
||||||
<form class="form-horizontal" method="post" role="form">{% csrf_token %}
|
<div class="modal-body">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-sm-4 control-label">{% trans "Label" %}</label>
|
<label class="col-sm-4 control-label">{% trans "Label" %}</label>
|
||||||
<div class="col-sm-6">
|
<div class="col-sm-6">
|
||||||
|
@ -89,23 +90,28 @@
|
||||||
<input type="password" name="password" class="form-control" value="{{ compute.password }}">
|
<input type="password" name="password" class="form-control" value="{{ compute.password }}">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="form-group">
|
||||||
<div class="modal-footer">
|
<label class="col-sm-4 control-label">{% trans "Details" %}</label>
|
||||||
<button type="submit" class="pull-left btn btn-danger" name="host_del">
|
<div class="col-sm-6">
|
||||||
{% trans "Delete" %}
|
<input type="text" name="details" class="form-control" placeholder="Details" value="{{ compute.details }}">
|
||||||
</button>
|
</div>
|
||||||
<button type="button" class="btn btn-default" data-dismiss="modal">
|
</div></div>
|
||||||
{% trans "Close" %}
|
<div class="modal-footer">
|
||||||
</button>
|
<button type="submit" class="pull-left btn btn-danger" name="host_del">
|
||||||
<button type="submit" class="btn btn-primary" name="host_edit">
|
{% trans "Delete" %}
|
||||||
{% trans "Change" %}
|
</button>
|
||||||
</button>
|
<button type="button" class="btn btn-default" data-dismiss="modal">
|
||||||
</form>
|
{% trans "Close" %}
|
||||||
</div>
|
</button>
|
||||||
|
<button type="submit" class="btn btn-primary" name="host_edit">
|
||||||
|
{% trans "Change" %}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
{% endifequal %}
|
{% endifequal %}
|
||||||
{% ifequal compute.type 2 %}
|
{% ifequal compute.type 2 %}
|
||||||
<div class="modal-body">
|
<form class="form-horizontal" method="post" role="form">{% csrf_token %}
|
||||||
<form class="form-horizontal" method="post" role="form">{% csrf_token %}
|
<div class="modal-body">
|
||||||
<p class="modal-body">{% trans "Need create ssh <a href='https://github.com/retspen/webvirtmgr/wiki/Setup-SSH-Authorization'>authorization key</a>. If you have another SSH port on your server, you can add IP:PORT like '192.168.1.1:2222'." %}</p>
|
<p class="modal-body">{% trans "Need create ssh <a href='https://github.com/retspen/webvirtmgr/wiki/Setup-SSH-Authorization'>authorization key</a>. If you have another SSH port on your server, you can add IP:PORT like '192.168.1.1:2222'." %}</p>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-sm-4 control-label">{% trans "Label" %}</label>
|
<label class="col-sm-4 control-label">{% trans "Label" %}</label>
|
||||||
|
@ -124,25 +130,33 @@
|
||||||
<label class="col-sm-4 control-label">{% trans "Username" %}</label>
|
<label class="col-sm-4 control-label">{% trans "Username" %}</label>
|
||||||
<div class="col-sm-6">
|
<div class="col-sm-6">
|
||||||
<input type="text" name="login" class="form-control" value="{{ compute.login }}">
|
<input type="text" name="login" class="form-control" value="{{ compute.login }}">
|
||||||
|
<input type="hidden" name="password" value="{{ compute.password }}">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="form-group">
|
||||||
<div class="modal-footer">
|
<label class="col-sm-4 control-label">{% trans "Details" %}</label>
|
||||||
<button type="submit" class="pull-left btn btn-danger" name="host_del">
|
<div class="col-sm-6">
|
||||||
{% trans "Delete" %}
|
<input type="text" name="details" class="form-control" placeholder="Details" value="{{ compute.details }}">
|
||||||
</button>
|
</div>
|
||||||
<button type="button" class="btn btn-default" data-dismiss="modal">
|
</div>
|
||||||
{% trans "Close" %}
|
</div>
|
||||||
</button>
|
<div class="modal-footer">
|
||||||
<button type="submit" class="btn btn-primary" name="host_edit">
|
<button type="submit" class="pull-left btn btn-danger" name="host_del">
|
||||||
{% trans "Change" %}
|
{% trans "Delete" %}
|
||||||
</button>
|
</button>
|
||||||
</form>
|
<button type="button" class="btn btn-default" data-dismiss="modal">
|
||||||
</div>
|
{% trans "Close" %}
|
||||||
|
</button>
|
||||||
|
<button type="submit" class="btn btn-primary" name="host_edit">
|
||||||
|
{% trans "Change" %}
|
||||||
|
</button>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
{% endifequal %}
|
{% endifequal %}
|
||||||
{% ifequal compute.type 3 %}
|
{% ifequal compute.type 3 %}
|
||||||
<div class="modal-body">
|
<form class="form-horizontal" method="post" role="form">{% csrf_token %}
|
||||||
<form class="form-horizontal" method="post" role="form">{% csrf_token %}
|
<div class="modal-body">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-sm-4 control-label">{% trans "Label" %}</label>
|
<label class="col-sm-4 control-label">{% trans "Label" %}</label>
|
||||||
<div class="col-sm-6">
|
<div class="col-sm-6">
|
||||||
|
@ -168,23 +182,29 @@
|
||||||
<input type="password" name="password" class="form-control" value="{{ compute.password }}">
|
<input type="password" name="password" class="form-control" value="{{ compute.password }}">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="form-group">
|
||||||
<div class="modal-footer">
|
<label class="col-sm-4 control-label">{% trans "Details" %}</label>
|
||||||
<button type="submit" class="pull-left btn btn-danger" name="host_del">
|
<div class="col-sm-6">
|
||||||
{% trans "Delete" %}
|
<input type="text" name="details" class="form-control" placeholder="Details" value="{{ compute.details }}">
|
||||||
</button>
|
</div>
|
||||||
<button type="button" class="btn btn-default" data-dismiss="modal">
|
</div>
|
||||||
{% trans "Close" %}
|
</div>
|
||||||
</button>
|
<div class="modal-footer">
|
||||||
<button type="submit" class="btn btn-primary" name="host_edit">
|
<button type="submit" class="pull-left btn btn-danger" name="host_del">
|
||||||
{% trans "Change" %}
|
{% trans "Delete" %}
|
||||||
</button>
|
</button>
|
||||||
</form>
|
<button type="button" class="btn btn-default" data-dismiss="modal">
|
||||||
</div>
|
{% trans "Close" %}
|
||||||
|
</button>
|
||||||
|
<button type="submit" class="btn btn-primary" name="host_edit">
|
||||||
|
{% trans "Change" %}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
{% endifequal %}
|
{% endifequal %}
|
||||||
{% ifequal compute.type 4 %}
|
{% ifequal compute.type 4 %}
|
||||||
<div class="modal-body">
|
<form class="form-horizontal" method="post" role="form">{% csrf_token %}
|
||||||
<form class="form-horizontal" method="post" role="form">{% csrf_token %}
|
<div class="modal-body">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-sm-4 control-label">{% trans "Label" %}</label>
|
<label class="col-sm-4 control-label">{% trans "Label" %}</label>
|
||||||
<div class="col-sm-6">
|
<div class="col-sm-6">
|
||||||
|
@ -192,19 +212,25 @@
|
||||||
<input type="text" name="name" class="form-control" value="{{ compute.name }}" maxlength="20" required pattern="[a-z0-9\.\-_]+">
|
<input type="text" name="name" class="form-control" value="{{ compute.name }}" maxlength="20" required pattern="[a-z0-9\.\-_]+">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="form-group">
|
||||||
<div class="modal-footer">
|
<label class="col-sm-4 control-label">{% trans "Details" %}</label>
|
||||||
<button type="submit" class="pull-left btn btn-danger" name="host_del">
|
<div class="col-sm-6">
|
||||||
{% trans "Delete" %}
|
<input type="text" name="details" class="form-control" placeholder="Details" value="{{ compute.details }}">
|
||||||
</button>
|
</div>
|
||||||
<button type="button" class="btn btn-default" data-dismiss="modal">
|
</div>
|
||||||
{% trans "Close" %}
|
</div>
|
||||||
</button>
|
<div class="modal-footer">
|
||||||
<button type="submit" class="btn btn-primary" name="host_edit">
|
<button type="submit" class="pull-left btn btn-danger" name="host_del">
|
||||||
{% trans "Change" %}
|
{% trans "Delete" %}
|
||||||
</button>
|
</button>
|
||||||
</form>
|
<button type="button" class="btn btn-default" data-dismiss="modal">
|
||||||
</div>
|
{% trans "Close" %}
|
||||||
|
</button>
|
||||||
|
<button type="submit" class="btn btn-primary" name="host_edit">
|
||||||
|
{% trans "Change" %}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
{% endifequal %}
|
{% endifequal %}
|
||||||
</div><!-- /.modal-content -->
|
</div><!-- /.modal-content -->
|
||||||
</div><!-- /.modal-dialog -->
|
</div><!-- /.modal-dialog -->
|
||||||
|
@ -217,7 +243,7 @@
|
||||||
{% else %}
|
{% else %}
|
||||||
<div class="col-lg-12">
|
<div class="col-lg-12">
|
||||||
<div class="alert alert-warning alert-dismissable">
|
<div class="alert alert-warning alert-dismissable">
|
||||||
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
||||||
<i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning:" %}</strong> {% trans "Hypervisor doesn't have any Computes" %}
|
<i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning:" %}</strong> {% trans "Hypervisor doesn't have any Computes" %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
<div class="modal-dialog">
|
<div class="modal-dialog">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||||
<h4 class="modal-title">{% trans "Add Connection" %}</h4>
|
<h4 class="modal-title">{% trans "Add Connection" %}</h4>
|
||||||
</div>
|
</div>
|
||||||
<div class="tabbable">
|
<div class="tabbable">
|
||||||
|
@ -50,6 +50,12 @@
|
||||||
<input type="password" name="password" class="form-control" placeholder="{% trans "Password" %}">
|
<input type="password" name="password" class="form-control" placeholder="{% trans "Password" %}">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-4 control-label">{% trans "Details" %}</label>
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<input type="text" name="details" class="form-control" placeholder="{% trans "Details" %}">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-default" data-dismiss="modal">
|
<button type="button" class="btn btn-default" data-dismiss="modal">
|
||||||
|
@ -83,6 +89,12 @@
|
||||||
<input type="text" name="login" class="form-control" placeholder="{% trans "Username" %}">
|
<input type="text" name="login" class="form-control" placeholder="{% trans "Username" %}">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-4 control-label">{% trans "Details" %}</label>
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<input type="text" name="details" class="form-control" placeholder="{% trans "Details" %}">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-default" data-dismiss="modal">
|
<button type="button" class="btn btn-default" data-dismiss="modal">
|
||||||
|
@ -121,6 +133,12 @@
|
||||||
<input type="password" name="password" class="form-control" placeholder="{% trans "Password" %}">
|
<input type="password" name="password" class="form-control" placeholder="{% trans "Password" %}">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-4 control-label">{% trans "Details" %}</label>
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<input type="text" name="details" class="form-control" placeholder="{% trans "Details" %}">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-default" data-dismiss="modal">
|
<button type="button" class="btn btn-default" data-dismiss="modal">
|
||||||
|
|
|
@ -66,7 +66,8 @@ def computes(request):
|
||||||
hostname=data['hostname'],
|
hostname=data['hostname'],
|
||||||
type=CONN_TCP,
|
type=CONN_TCP,
|
||||||
login=data['login'],
|
login=data['login'],
|
||||||
password=data['password'])
|
password=data['password'],
|
||||||
|
details=data['details'])
|
||||||
new_tcp_host.save()
|
new_tcp_host.save()
|
||||||
return HttpResponseRedirect(request.get_full_path())
|
return HttpResponseRedirect(request.get_full_path())
|
||||||
else:
|
else:
|
||||||
|
@ -79,7 +80,8 @@ def computes(request):
|
||||||
new_ssh_host = Compute(name=data['name'],
|
new_ssh_host = Compute(name=data['name'],
|
||||||
hostname=data['hostname'],
|
hostname=data['hostname'],
|
||||||
type=CONN_SSH,
|
type=CONN_SSH,
|
||||||
login=data['login'])
|
login=data['login'],
|
||||||
|
details=data['details'])
|
||||||
new_ssh_host.save()
|
new_ssh_host.save()
|
||||||
return HttpResponseRedirect(request.get_full_path())
|
return HttpResponseRedirect(request.get_full_path())
|
||||||
else:
|
else:
|
||||||
|
@ -93,7 +95,8 @@ def computes(request):
|
||||||
hostname=data['hostname'],
|
hostname=data['hostname'],
|
||||||
type=CONN_TLS,
|
type=CONN_TLS,
|
||||||
login=data['login'],
|
login=data['login'],
|
||||||
password=data['password'])
|
password=data['password'],
|
||||||
|
details=data['details'])
|
||||||
new_tls_host.save()
|
new_tls_host.save()
|
||||||
return HttpResponseRedirect(request.get_full_path())
|
return HttpResponseRedirect(request.get_full_path())
|
||||||
else:
|
else:
|
||||||
|
@ -123,7 +126,7 @@ def computes(request):
|
||||||
compute_edit.hostname = data['hostname']
|
compute_edit.hostname = data['hostname']
|
||||||
compute_edit.login = data['login']
|
compute_edit.login = data['login']
|
||||||
compute_edit.password = data['password']
|
compute_edit.password = data['password']
|
||||||
#compute_edit.details = data['details']
|
compute_edit.details = data['details']
|
||||||
compute_edit.save()
|
compute_edit.save()
|
||||||
return HttpResponseRedirect(request.get_full_path())
|
return HttpResponseRedirect(request.get_full_path())
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -121,7 +121,7 @@ def get_connection_infos(token):
|
||||||
console_port = conn.get_console_port()
|
console_port = conn.get_console_port()
|
||||||
console_socket = conn.get_console_socket()
|
console_socket = conn.get_console_socket()
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
logging.error('Fail to retrieve console connexion infos for token %s : %s' % (token, e))
|
logging.error('Fail to retrieve console connection infos for token %s : %s' % (token, e))
|
||||||
raise
|
raise
|
||||||
return (connhost, connport, connuser, conntype, console_host,
|
return (connhost, connport, connuser, conntype, console_host,
|
||||||
console_port, console_socket)
|
console_port, console_socket)
|
||||||
|
@ -139,7 +139,7 @@ class CompatibilityMixIn(object):
|
||||||
(connhost, connport, connuser, conntype, console_host, console_port,
|
(connhost, connport, connuser, conntype, console_host, console_port,
|
||||||
console_socket) = get_connection_infos(token)
|
console_socket) = get_connection_infos(token)
|
||||||
|
|
||||||
cnx_debug_msg = "Connexion infos :\n"
|
cnx_debug_msg = "Connection infos :\n"
|
||||||
cnx_debug_msg += "- connhost : '%s'\n" % connhost
|
cnx_debug_msg += "- connhost : '%s'\n" % connhost
|
||||||
cnx_debug_msg += "- connport : '%s'\n" % connport
|
cnx_debug_msg += "- connport : '%s'\n" % connport
|
||||||
cnx_debug_msg += "- connuser : '%s'\n" % connuser
|
cnx_debug_msg += "- connuser : '%s'\n" % connuser
|
||||||
|
@ -159,7 +159,7 @@ class CompatibilityMixIn(object):
|
||||||
if conntype != CONN_SSH:
|
if conntype != CONN_SSH:
|
||||||
self.msg("Need a tunnel to access console but can't mount " +
|
self.msg("Need a tunnel to access console but can't mount " +
|
||||||
"one because it's not a SSH host")
|
"one because it's not a SSH host")
|
||||||
raise
|
raise Exception(self.msg)
|
||||||
try:
|
try:
|
||||||
# generate a string with all placeholders to avoid TypeErrors
|
# generate a string with all placeholders to avoid TypeErrors
|
||||||
# in sprintf
|
# in sprintf
|
||||||
|
@ -175,7 +175,7 @@ class CompatibilityMixIn(object):
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.msg("Fail to open tunnel : %s" % e)
|
self.msg("Fail to open tunnel : %s" % e)
|
||||||
raise
|
raise
|
||||||
self.msg("Tunnel openned")
|
self.msg("Tunnel opened")
|
||||||
else:
|
else:
|
||||||
# Direct access
|
# Direct access
|
||||||
self.msg("connecting to: %s:%s" % (connhost, console_port))
|
self.msg("connecting to: %s:%s" % (connhost, console_port))
|
||||||
|
|
|
@ -84,7 +84,7 @@
|
||||||
<li onclick='sendCtrlAltFN(11);'><a href='#'>Ctrl+Alt+F12</a></li>
|
<li onclick='sendCtrlAltFN(11);'><a href='#'>Ctrl+Alt+F12</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li onclick='fullscreen()'><a href='#'>{% trans "Fullscreen" %}</a></li>
|
<li id="fullscreen_button"><a href='#'>{% trans "Fullscreen" %}</a></li>
|
||||||
{% block navbarmenu %}{% endblock %}
|
{% block navbarmenu %}{% endblock %}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
242
console/templates/console-spice-full.html
Normal file
|
@ -0,0 +1,242 @@
|
||||||
|
<!--
|
||||||
|
Copyright (C) 2012 by Jeremy P. White <jwhite@codeweavers.com>
|
||||||
|
|
||||||
|
This file is part of spice-html5.
|
||||||
|
|
||||||
|
spice-html5 is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
spice-html5 is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU Lesser General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public License
|
||||||
|
along with spice-html5. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
--------------------------------------------------
|
||||||
|
Spice Javascript client template.
|
||||||
|
Refer to main.js for more detailed information
|
||||||
|
--------------------------------------------------
|
||||||
|
|
||||||
|
-->
|
||||||
|
{% extends "console-base.html" %}
|
||||||
|
{% load i18n %}
|
||||||
|
{% load staticfiles %}
|
||||||
|
{% block head %}
|
||||||
|
|
||||||
|
<title>WebVirtCloud - Spice Client - Full</title>
|
||||||
|
<script src="{% static "js/spice-html5/spicearraybuffer.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/enums.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/atKeynames.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/utils.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/png.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/lz.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/quic.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/bitmap.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/spicedataview.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/spicetype.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/spicemsg.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/wire.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/spiceconn.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/display.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/port.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/main.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/inputs.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/webm.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/playback.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/simulatecursor.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/cursor.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/thirdparty/jsbn.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/thirdparty/rsa.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/thirdparty/prng4.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/thirdparty/rng.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/thirdparty/sha1.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/ticket.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/resize.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/filexfer.js" %}"></script>
|
||||||
|
<link rel="stylesheet" type="text/css" href="{% static "js/spice-html5/spice.css" %}" />
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
<div id="login">
|
||||||
|
<span class="logo">SPICE</span>
|
||||||
|
<label for="host">Host:</label> <input type='text' id='host' value='{{ ws_host }}'> <!-- localhost -->
|
||||||
|
<label for="port">Port:</label> <input type='text' id='port' value='{{ ws_port }}'>
|
||||||
|
<label for="password">Password:</label> <input type='password' id='password' value='{{ console_passwd }}'>
|
||||||
|
<label for="show_console">Show console </label><input type="checkbox" id="show_console" value="1" onchange="toggle_console()" checked>
|
||||||
|
<button id="connectButton" onclick="connect();">Start</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="spice-area">
|
||||||
|
<div id="spice-screen" class="spice-screen"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="message-div" class="spice-message"></div>
|
||||||
|
|
||||||
|
<div id="debug-div">
|
||||||
|
<!-- If DUMPXXX is turned on, dumped images will go here -->
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block foot %}
|
||||||
|
|
||||||
|
<script>
|
||||||
|
var host = null, port = null;
|
||||||
|
var sc;
|
||||||
|
|
||||||
|
function spice_error(e)
|
||||||
|
{
|
||||||
|
disconnect();
|
||||||
|
}
|
||||||
|
|
||||||
|
function connect()
|
||||||
|
{
|
||||||
|
var host, port, password, scheme = "ws://", uri;
|
||||||
|
|
||||||
|
host = document.getElementById("host").value;
|
||||||
|
port = document.getElementById("port").value;
|
||||||
|
password = document.getElementById("password").value;
|
||||||
|
|
||||||
|
|
||||||
|
if ((!host) || (!port)) {
|
||||||
|
console.log("must set host and port");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sc) {
|
||||||
|
sc.stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
uri = scheme + host + ":" + port;
|
||||||
|
|
||||||
|
document.getElementById('connectButton').innerHTML = "Stop";
|
||||||
|
document.getElementById('connectButton').onclick = disconnect;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
sc = new SpiceMainConn({uri: uri, screen_id: "spice-screen", dump_id: "debug-div",
|
||||||
|
message_id: "message-div", password: password, onerror: spice_error, onagent: agent_connected });
|
||||||
|
}
|
||||||
|
catch (e)
|
||||||
|
{
|
||||||
|
alert(e.toString());
|
||||||
|
disconnect();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function disconnect()
|
||||||
|
{
|
||||||
|
console.log(">> disconnect");
|
||||||
|
if (sc) {
|
||||||
|
sc.stop();
|
||||||
|
}
|
||||||
|
document.getElementById('connectButton').innerHTML = "Start";
|
||||||
|
document.getElementById('connectButton').onclick = connect;
|
||||||
|
if (window.File && window.FileReader && window.FileList && window.Blob)
|
||||||
|
{
|
||||||
|
var spice_xfer_area = document.getElementById('spice-xfer-area');
|
||||||
|
document.getElementById('spice-area').removeChild(spice_xfer_area);
|
||||||
|
document.getElementById('spice-area').removeEventListener('dragover', handle_file_dragover, false);
|
||||||
|
document.getElementById('spice-area').removeEventListener('drop', handle_file_drop, false);
|
||||||
|
}
|
||||||
|
console.log("<< disconnect");
|
||||||
|
}
|
||||||
|
|
||||||
|
function agent_connected(sc)
|
||||||
|
{
|
||||||
|
window.addEventListener('resize', handle_resize);
|
||||||
|
window.spice_connection = this;
|
||||||
|
|
||||||
|
resize_helper(this);
|
||||||
|
|
||||||
|
if (window.File && window.FileReader && window.FileList && window.Blob)
|
||||||
|
{
|
||||||
|
var spice_xfer_area = document.createElement("div");
|
||||||
|
spice_xfer_area.setAttribute('id', 'spice-xfer-area');
|
||||||
|
document.getElementById('spice-area').appendChild(spice_xfer_area);
|
||||||
|
document.getElementById('spice-area').addEventListener('dragover', handle_file_dragover, false);
|
||||||
|
document.getElementById('spice-area').addEventListener('drop', handle_file_drop, false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
console.log("File API is not supported");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function toggle_console()
|
||||||
|
{
|
||||||
|
var checkbox = document.getElementById('show_console');
|
||||||
|
var m = document.getElementById('message-div');
|
||||||
|
|
||||||
|
if (checkbox.checked)
|
||||||
|
{
|
||||||
|
m.style.display = 'block';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m.style.display = 'none';
|
||||||
|
}
|
||||||
|
|
||||||
|
window.addEventListener('resize', handle_resize);
|
||||||
|
resize_helper(sc);
|
||||||
|
}
|
||||||
|
|
||||||
|
function sendCtrlAltFN(f) {
|
||||||
|
if (sc && sc.inputs && sc.inputs.state === "ready"){
|
||||||
|
var keys_code=[KEY_F1,KEY_F2,KEY_F3,KEY_F4,KEY_F5,KEY_F6,KEY_F7,KEY_F8,KEY_F9,KEY_F10,KEY_F11,KEY_F12];
|
||||||
|
|
||||||
|
if (keys_code[f]==undefined) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var key = new SpiceMsgcKeyDown();
|
||||||
|
var msg = new SpiceMiniData();
|
||||||
|
|
||||||
|
update_modifier(true, KEY_LCtrl, sc);
|
||||||
|
update_modifier(true, KEY_Alt, sc);
|
||||||
|
|
||||||
|
key.code = keys_code[f];
|
||||||
|
msg.build_msg(SPICE_MSGC_INPUTS_KEY_DOWN, key);
|
||||||
|
sc.inputs.send_msg(msg);
|
||||||
|
msg.build_msg(SPICE_MSGC_INPUTS_KEY_UP, key);
|
||||||
|
sc.inputs.send_msg(msg);
|
||||||
|
|
||||||
|
if(Ctrl_state == false) update_modifier(false, KEY_LCtrl, sc);
|
||||||
|
if(Alt_state == false) update_modifier(false, KEY_Alt, sc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function fullscreen() {
|
||||||
|
var screen=document.getElementById('spice-area');
|
||||||
|
if(screen.requestFullscreen) {
|
||||||
|
screen.requestFullscreen();
|
||||||
|
} else if(screen.mozRequestFullScreen) {
|
||||||
|
screen.mozRequestFullScreen();
|
||||||
|
} else if(screen.webkitRequestFullscreen) {
|
||||||
|
screen.webkitRequestFullscreen();
|
||||||
|
} else if(screen.msRequestFullscreen) {
|
||||||
|
screen.msRequestFullscreen();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* SPICE port event listeners
|
||||||
|
window.addEventListener('spice-port-data', function(event) {
|
||||||
|
// Here we convert data to text, but really we can obtain binary data also
|
||||||
|
var msg_text = arraybuffer_to_str(new Uint8Array(event.detail.data));
|
||||||
|
DEBUG > 0 && console.log('SPICE port', event.detail.channel.portName, 'message text:', msg_text);
|
||||||
|
});
|
||||||
|
|
||||||
|
window.addEventListener('spice-port-event', function(event) {
|
||||||
|
DEBUG > 0 && console.log('SPICE port', event.detail.channel.portName, 'event data:', event.detail.spiceEvent);
|
||||||
|
});
|
||||||
|
*/
|
||||||
|
document.getElementById("fullscreen_button").addEventListener('click', fullscreen);
|
||||||
|
|
||||||
|
connect();
|
||||||
|
</script>
|
||||||
|
{% endblock %}
|
262
console/templates/console-spice-lite.html
Normal file
|
@ -0,0 +1,262 @@
|
||||||
|
<!--
|
||||||
|
Copyright (C) 2012 by Jeremy P. White <jwhite@codeweavers.com>
|
||||||
|
|
||||||
|
This file is part of spice-html5.
|
||||||
|
|
||||||
|
spice-html5 is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
spice-html5 is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU Lesser General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public License
|
||||||
|
along with spice-html5. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
--------------------------------------------------
|
||||||
|
Spice Javascript client template.
|
||||||
|
Refer to main.js for more detailed information
|
||||||
|
--------------------------------------------------
|
||||||
|
|
||||||
|
-->
|
||||||
|
{% extends "console-base.html" %}
|
||||||
|
{% load i18n %}
|
||||||
|
{% load staticfiles %}
|
||||||
|
{% block head %}
|
||||||
|
|
||||||
|
<title>Spice Javascript client</title>
|
||||||
|
<script src="{% static "js/spice-html5/spicearraybuffer.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/enums.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/atKeynames.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/utils.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/png.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/lz.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/quic.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/bitmap.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/spicedataview.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/spicetype.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/spicemsg.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/wire.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/spiceconn.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/display.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/main.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/inputs.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/webm.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/playback.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/simulatecursor.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/cursor.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/thirdparty/jsbn.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/thirdparty/rsa.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/thirdparty/prng4.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/thirdparty/rng.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/thirdparty/sha1.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/ticket.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/resize.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/filexfer.js" %}"></script>
|
||||||
|
<script src="{% static "js/spice-html5/port.js" %}"></script>
|
||||||
|
|
||||||
|
<link rel="stylesheet" type="text/css" href="{% static "js/spice-html5/spice.css" %}" />
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div id="spice-area">
|
||||||
|
<div id="spice-screen" class="spice-screen"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="message-div" class="spice-message"></div>
|
||||||
|
|
||||||
|
<div id="debug-div">
|
||||||
|
<!-- If DUMPXXX is turned on, dumped images will go here -->
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block foot %}
|
||||||
|
<script>
|
||||||
|
var host = null, port = null;
|
||||||
|
var sc;
|
||||||
|
|
||||||
|
function spice_set_cookie(name, value, days) {
|
||||||
|
var date, expires;
|
||||||
|
date = new Date();
|
||||||
|
date.setTime(date.getTime() + (days*24*60*60*1000));
|
||||||
|
expires = "; expires=" + date.toGMTString();
|
||||||
|
document.cookie = name + "=" + value + expires + "; path=/";
|
||||||
|
};
|
||||||
|
|
||||||
|
function spice_query_var(name, defvalue) {
|
||||||
|
var match = RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search);
|
||||||
|
return match ? decodeURIComponent(match[1].replace(/\+/g, ' ')) : defvalue;
|
||||||
|
}
|
||||||
|
|
||||||
|
function spice_error(e)
|
||||||
|
{
|
||||||
|
console.log(e);
|
||||||
|
disconnect();
|
||||||
|
if (e.message !== undefined) {
|
||||||
|
log_error(e.message);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
log_error('Unknown error');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function connect()
|
||||||
|
{
|
||||||
|
var host, port, password, scheme = "ws://", uri;
|
||||||
|
|
||||||
|
// By default, use the host and port of server that served this file
|
||||||
|
//host = spice_query_var('host', window.location.hostname);
|
||||||
|
host = '{{ ws_host| safe }}';
|
||||||
|
|
||||||
|
// Note that using the web server port only makes sense
|
||||||
|
// if your web server has a reverse proxy to relay the WebSocket
|
||||||
|
// traffic to the correct destination port.
|
||||||
|
var default_port = window.location.port;
|
||||||
|
if (!default_port) {
|
||||||
|
if (window.location.protocol == 'http:') {
|
||||||
|
default_port = 80;
|
||||||
|
}
|
||||||
|
else if (window.location.protocol == 'https:') {
|
||||||
|
default_port = 443;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//port = spice_query_var('port', default_port);
|
||||||
|
port = '{{ ws_port| safe }}';
|
||||||
|
if (window.location.protocol == 'https:') {
|
||||||
|
scheme = "wss://";
|
||||||
|
}
|
||||||
|
|
||||||
|
// If a token variable is passed in, set the parameter in a cookie.
|
||||||
|
// This is used by nova-spiceproxy.
|
||||||
|
token = spice_query_var('token', null);
|
||||||
|
if (token) {
|
||||||
|
spice_set_cookie('token', token, 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
//password = spice_query_var('password', '');
|
||||||
|
password = '{{ console_passwd | safe }}';
|
||||||
|
path = spice_query_var('path', 'websockify');
|
||||||
|
|
||||||
|
if ((!host) || (!port)) {
|
||||||
|
console.log("must specify host and port in URL");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sc) {
|
||||||
|
sc.stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
uri = scheme + host + ":" + port;
|
||||||
|
|
||||||
|
if (path) {
|
||||||
|
uri += path[0] == '/' ? path : ('/' + path);
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
sc = new SpiceMainConn({uri: uri, screen_id: "spice-screen", dump_id: "debug-div",
|
||||||
|
message_id: "message-div", password: password, onerror: spice_error, onagent: agent_connected });
|
||||||
|
}
|
||||||
|
catch (e)
|
||||||
|
{
|
||||||
|
alert(e.toString());
|
||||||
|
disconnect();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function disconnect()
|
||||||
|
{
|
||||||
|
console.log(">> disconnect");
|
||||||
|
if (sc) {
|
||||||
|
sc.stop();
|
||||||
|
}
|
||||||
|
if (window.File && window.FileReader && window.FileList && window.Blob)
|
||||||
|
{
|
||||||
|
var spice_xfer_area = document.getElementById('spice-xfer-area');
|
||||||
|
document.getElementById('spice-area').removeChild(spice_xfer_area);
|
||||||
|
document.getElementById('spice-area').removeEventListener('dragover', handle_file_dragover, false);
|
||||||
|
document.getElementById('spice-area').removeEventListener('drop', handle_file_drop, false);
|
||||||
|
}
|
||||||
|
console.log("<< disconnect");
|
||||||
|
}
|
||||||
|
|
||||||
|
function agent_connected(sc)
|
||||||
|
{
|
||||||
|
window.addEventListener('resize', handle_resize);
|
||||||
|
window.spice_connection = this;
|
||||||
|
|
||||||
|
resize_helper(this);
|
||||||
|
|
||||||
|
if (window.File && window.FileReader && window.FileList && window.Blob)
|
||||||
|
{
|
||||||
|
var spice_xfer_area = document.createElement("div");
|
||||||
|
spice_xfer_area.setAttribute('id', 'spice-xfer-area');
|
||||||
|
document.getElementById('spice-area').appendChild(spice_xfer_area);
|
||||||
|
document.getElementById('spice-area').addEventListener('dragover', handle_file_dragover, false);
|
||||||
|
document.getElementById('spice-area').addEventListener('drop', handle_file_drop, false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
console.log("File API is not supported");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function sendCtrlAltFN(f) {
|
||||||
|
if (sc && sc.inputs && sc.inputs.state === "ready"){
|
||||||
|
var keys_code=[KEY_F1,KEY_F2,KEY_F3,KEY_F4,KEY_F5,KEY_F6,KEY_F7,KEY_F8,KEY_F9,KEY_F10,KEY_F11,KEY_F12];
|
||||||
|
|
||||||
|
if (keys_code[f]==undefined) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var key = new SpiceMsgcKeyDown();
|
||||||
|
var msg = new SpiceMiniData();
|
||||||
|
|
||||||
|
update_modifier(true, KEY_LCtrl, sc);
|
||||||
|
update_modifier(true, KEY_Alt, sc);
|
||||||
|
|
||||||
|
key.code = keys_code[f];
|
||||||
|
msg.build_msg(SPICE_MSGC_INPUTS_KEY_DOWN, key);
|
||||||
|
sc.inputs.send_msg(msg);
|
||||||
|
msg.build_msg(SPICE_MSGC_INPUTS_KEY_UP, key);
|
||||||
|
sc.inputs.send_msg(msg);
|
||||||
|
|
||||||
|
if(Ctrl_state == false) update_modifier(false, KEY_LCtrl, sc);
|
||||||
|
if(Alt_state == false) update_modifier(false, KEY_Alt, sc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function fullscreen() {
|
||||||
|
var screen=document.getElementById('spice-area');
|
||||||
|
if(screen.requestFullscreen) {
|
||||||
|
screen.requestFullscreen();
|
||||||
|
} else if(screen.mozRequestFullScreen) {
|
||||||
|
screen.mozRequestFullScreen();
|
||||||
|
} else if(screen.webkitRequestFullscreen) {
|
||||||
|
screen.webkitRequestFullscreen();
|
||||||
|
} else if(screen.msRequestFullscreen) {
|
||||||
|
screen.msRequestFullscreen();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* SPICE port event listeners
|
||||||
|
window.addEventListener('spice-port-data', function(event) {
|
||||||
|
// Here we convert data to text, but really we can obtain binary data also
|
||||||
|
var msg_text = arraybuffer_to_str(new Uint8Array(event.detail.data));
|
||||||
|
DEBUG > 0 && console.log('SPICE port', event.detail.channel.portName, 'message text:', msg_text);
|
||||||
|
});
|
||||||
|
|
||||||
|
window.addEventListener('spice-port-event', function(event) {
|
||||||
|
DEBUG > 0 && console.log('SPICE port', event.detail.channel.portName, 'event data:', event.detail.spiceEvent);
|
||||||
|
});
|
||||||
|
*/
|
||||||
|
document.getElementById("fullscreen_button").addEventListener('click', fullscreen);
|
||||||
|
connect();
|
||||||
|
</script>
|
||||||
|
{% endblock %}
|
|
@ -1,194 +0,0 @@
|
||||||
{% extends "console-base.html" %}
|
|
||||||
{% load i18n %}
|
|
||||||
{% load staticfiles %}
|
|
||||||
{% block head %}
|
|
||||||
<script src="{% static "js/spice-html5/spicearraybuffer.js" %}"></script>
|
|
||||||
<script src="{% static "js/spice-html5/enums.js" %}"></script>
|
|
||||||
<script src="{% static "js/spice-html5/atKeynames.js" %}"></script>
|
|
||||||
<script src="{% static "js/spice-html5/utils.js" %}"></script>
|
|
||||||
<script src="{% static "js/spice-html5/png.js" %}"></script>
|
|
||||||
<script src="{% static "js/spice-html5/lz.js" %}"></script>
|
|
||||||
<script src="{% static "js/spice-html5/quic.js" %}"></script>
|
|
||||||
<script src="{% static "js/spice-html5/bitmap.js" %}"></script>
|
|
||||||
<script src="{% static "js/spice-html5/spicedataview.js" %}"></script>
|
|
||||||
<script src="{% static "js/spice-html5/spicetype.js" %}"></script>
|
|
||||||
<script src="{% static "js/spice-html5/spicemsg.js" %}"></script>
|
|
||||||
<script src="{% static "js/spice-html5/wire.js" %}"></script>
|
|
||||||
<script src="{% static "js/spice-html5/spiceconn.js" %}"></script>
|
|
||||||
<script src="{% static "js/spice-html5/display.js" %}"></script>
|
|
||||||
<script src="{% static "js/spice-html5/main.js" %}"></script>
|
|
||||||
<script src="{% static "js/spice-html5/inputs.js" %}"></script>
|
|
||||||
<script src="{% static "js/spice-html5/webm.js" %}"></script>
|
|
||||||
<script src="{% static "js/spice-html5/playback.js" %}"></script>
|
|
||||||
<script src="{% static "js/spice-html5/simulatecursor.js" %}"></script>
|
|
||||||
<script src="{% static "js/spice-html5/cursor.js" %}"></script>
|
|
||||||
<script src="{% static "js/spice-html5/thirdparty/jsbn.js" %}"></script>
|
|
||||||
<script src="{% static "js/spice-html5/thirdparty/rsa.js" %}"></script>
|
|
||||||
<script src="{% static "js/spice-html5/thirdparty/prng4.js" %}"></script>
|
|
||||||
<script src="{% static "js/spice-html5/thirdparty/rng.js" %}"></script>
|
|
||||||
<script src="{% static "js/spice-html5/thirdparty/sha1.js" %}"></script>
|
|
||||||
<script src="{% static "js/spice-html5/ticket.js" %}"></script>
|
|
||||||
<script src="{% static "js/spice-html5/resize.js" %}"></script>
|
|
||||||
<script src="{% static "js/spice-html5/filexfer.js" %}"></script>
|
|
||||||
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block content %}
|
|
||||||
<div id='spice_container'></div>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block foot %}
|
|
||||||
<script>
|
|
||||||
var sc;
|
|
||||||
|
|
||||||
function spice_set_cookie(name, value, days) {
|
|
||||||
var date, expires;
|
|
||||||
date = new Date();
|
|
||||||
date.setTime(date.getTime() + (days*24*60*60*1000));
|
|
||||||
expires = "; expires=" + date.toGMTString();
|
|
||||||
document.cookie = name + "=" + value + expires + "; path=/";
|
|
||||||
};
|
|
||||||
|
|
||||||
function spice_query_var(name, defvalue) {
|
|
||||||
var match = RegExp('[?&]' + name + '=([^&]*)')
|
|
||||||
.exec(window.location.search);
|
|
||||||
return match ?
|
|
||||||
decodeURIComponent(match[1].replace(/\+/g, ' '))
|
|
||||||
: defvalue;
|
|
||||||
}
|
|
||||||
|
|
||||||
function spice_error(e)
|
|
||||||
{
|
|
||||||
console.log(e);
|
|
||||||
disconnect();
|
|
||||||
if (e.message != undefined) {
|
|
||||||
log_error(e.message);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
log_error('Unknown error');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function spice_success(msg) {
|
|
||||||
log_info(msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
function connect(uri,password)
|
|
||||||
{
|
|
||||||
// If a token variable is passed in, set the parameter in a cookie.
|
|
||||||
// This is used by nova-spiceproxy.
|
|
||||||
token = spice_query_var('token', null);
|
|
||||||
if (token) {
|
|
||||||
spice_set_cookie('token', token, 1)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sc) {
|
|
||||||
sc.stop();
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
sc = new SpiceMainConn({uri: uri, password: password, screen_id: "spice_container",
|
|
||||||
onsuccess: spice_success, onerror: spice_error, onagent: agent_connected });
|
|
||||||
}
|
|
||||||
catch (e)
|
|
||||||
{
|
|
||||||
console.log(e);
|
|
||||||
log_error(e.toString());
|
|
||||||
disconnect();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
function disconnect()
|
|
||||||
{
|
|
||||||
console.log(">> disconnect");
|
|
||||||
if (sc) {
|
|
||||||
sc.stop();
|
|
||||||
}
|
|
||||||
if (window.File && window.FileReader && window.FileList && window.Blob)
|
|
||||||
{
|
|
||||||
console.log(" -> Disable drag/drop transfer");
|
|
||||||
var spice_xfer_area = document.getElementById('spice-xfer-area');
|
|
||||||
try {
|
|
||||||
document.getElementById('spice-area').removeChild(spice_xfer_area);
|
|
||||||
document.getElementById('spice-area').removeEventListener('dragover', handle_file_dragover, false);
|
|
||||||
document.getElementById('spice-area').removeEventListener('drop', handle_file_drop, false);
|
|
||||||
}
|
|
||||||
catch(e) {
|
|
||||||
console.log(' -> Error disabling drag/drop transfer');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
console.log("<< disconnect");
|
|
||||||
}
|
|
||||||
|
|
||||||
function agent_connected(sc) {
|
|
||||||
window.addEventListener('resize', handle_resize);
|
|
||||||
window.spice_connection = this;
|
|
||||||
|
|
||||||
resize_helper(this);
|
|
||||||
|
|
||||||
if (window.File && window.FileReader && window.FileList && window.Blob)
|
|
||||||
{
|
|
||||||
var spice_xfer_area = document.createElement("div");
|
|
||||||
spice_xfer_area.setAttribute('id', 'spice-xfer-area');
|
|
||||||
document.getElementById('spice-area').addEventListener('dragover', handle_file_dragover, false);
|
|
||||||
document.getElementById('spice-area').addEventListener('drop', handle_file_drop, false);
|
|
||||||
log_info('Drag and drop transfer enabled.');
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
console.log("File API is not supported");
|
|
||||||
log_info('Drag and drop transfer not supported.');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function sendCtrlAltFN(f) {
|
|
||||||
if (sc && sc.inputs && sc.inputs.state === "ready"){
|
|
||||||
var keys_code=[KEY_F1,KEY_F2,KEY_F3,KEY_F4,KEY_F5,KEY_F6,KEY_F7,KEY_F8,KEY_F9,KEY_F10,KEY_F11,KEY_F12];
|
|
||||||
|
|
||||||
if (keys_code[f]==undefined) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var key = new SpiceMsgcKeyDown();
|
|
||||||
var msg = new SpiceMiniData();
|
|
||||||
|
|
||||||
update_modifier(true, KEY_LCtrl, sc);
|
|
||||||
update_modifier(true, KEY_Alt, sc);
|
|
||||||
|
|
||||||
key.code = keys_code[f];
|
|
||||||
msg.build_msg(SPICE_MSGC_INPUTS_KEY_DOWN, key);
|
|
||||||
sc.inputs.send_msg(msg);
|
|
||||||
msg.build_msg(SPICE_MSGC_INPUTS_KEY_UP, key);
|
|
||||||
sc.inputs.send_msg(msg);
|
|
||||||
|
|
||||||
if(Ctrl_state == false) update_modifier(false, KEY_LCtrl, sc);
|
|
||||||
if(Alt_state == false) update_modifier(false, KEY_Alt, sc);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function fullscreen() {
|
|
||||||
var screen=document.getElementById('spice_container');
|
|
||||||
if(screen.requestFullscreen) {
|
|
||||||
screen.requestFullscreen();
|
|
||||||
} else if(screen.mozRequestFullScreen) {
|
|
||||||
screen.mozRequestFullScreen();
|
|
||||||
} else if(screen.webkitRequestFullscreen) {
|
|
||||||
screen.webkitRequestFullscreen();
|
|
||||||
} else if(screen.msRequestFullscreen) {
|
|
||||||
screen.msRequestFullscreen();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var uri;
|
|
||||||
if (window.location.protocol === "https:") {
|
|
||||||
uri = 'wss://{{ ws_host }}:{{ ws_port }}';
|
|
||||||
} else {
|
|
||||||
uri = 'ws://{{ ws_host }}:{{ ws_port }}';
|
|
||||||
}
|
|
||||||
|
|
||||||
var password = '{{ console_passwd }}';
|
|
||||||
log_info('Connecting ...');
|
|
||||||
connect(uri,password);
|
|
||||||
</script>
|
|
||||||
{% endblock %}
|
|
323
console/templates/console-vnc-full.html
Executable file
|
@ -0,0 +1,323 @@
|
||||||
|
{% extends "console-base.html" %}
|
||||||
|
{% load i18n %}
|
||||||
|
{% load staticfiles %}
|
||||||
|
|
||||||
|
{% block head %}
|
||||||
|
<!--
|
||||||
|
noVNC example: simple example using default UI
|
||||||
|
Copyright (C) 2012 Joel Martin
|
||||||
|
Copyright (C) 2016 Samuel Mannehed for Cendio AB
|
||||||
|
Copyright (C) 2016 Pierre Ossman for Cendio AB
|
||||||
|
noVNC is licensed under the MPL 2.0 (see LICENSE.txt)
|
||||||
|
This file is licensed under the 2-Clause BSD license (see LICENSE.txt).
|
||||||
|
|
||||||
|
Connect parameters are provided in query string:
|
||||||
|
http://example.com/?host=HOST&port=PORT&encrypt=1
|
||||||
|
or the fragment:
|
||||||
|
http://example.com/#host=HOST&port=PORT&encrypt=1
|
||||||
|
-->
|
||||||
|
<title xmlns="http://www.w3.org/1999/html">WebVirtCloud - noVNC</title>
|
||||||
|
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
|
||||||
|
<!-- Always force latest IE rendering engine (even in intranet) & Chrome Frame
|
||||||
|
Remove this if you use the .htaccess -->
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
||||||
|
|
||||||
|
<!-- Icons (see Makefile for what the sizes are for) -->
|
||||||
|
<link rel="icon" sizes="16x16" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-16x16.png" %}">
|
||||||
|
<link rel="icon" sizes="24x24" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-24x24.png" %}">
|
||||||
|
<link rel="icon" sizes="32x32" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-32x32.png" %}">
|
||||||
|
<link rel="icon" sizes="48x48" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-48x48.png" %}">
|
||||||
|
<link rel="icon" sizes="60x60" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-60x60.png" %}">
|
||||||
|
<link rel="icon" sizes="64x64" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-64x64.png" %}">
|
||||||
|
<link rel="icon" sizes="72x72" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-72x72.png" %}">
|
||||||
|
<link rel="icon" sizes="76x76" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-76x76.png" %}">
|
||||||
|
<link rel="icon" sizes="96x96" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-96x96.png" %}">
|
||||||
|
<link rel="icon" sizes="120x120" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-120x120.png" %}">
|
||||||
|
<link rel="icon" sizes="144x144" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-144x144.png" %}">
|
||||||
|
<link rel="icon" sizes="152x152" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-152x152.png" %}">
|
||||||
|
<link rel="icon" sizes="192x192" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-192x192.png" %}">
|
||||||
|
<!-- Firefox currently mishandles SVG, see #1419039
|
||||||
|
<link rel="icon" sizes="any" type="image/svg+xml" href="{% static "js/novnc/app/images/icons/novnc-icon.svg" %}">
|
||||||
|
-->
|
||||||
|
<!-- Repeated last so that legacy handling will pick this -->
|
||||||
|
<link rel="icon" sizes="16x16" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-16x16.png" %}">
|
||||||
|
|
||||||
|
<!-- Apple iOS Safari settings -->
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
||||||
|
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||||
|
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
|
||||||
|
<!-- Home Screen Icons (favourites and bookmarks use the normal icons) -->
|
||||||
|
<link rel="apple-touch-icon" sizes="60x60" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-60x60.png" %}">
|
||||||
|
<link rel="apple-touch-icon" sizes="76x76" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-76x76.png" %}">
|
||||||
|
<link rel="apple-touch-icon" sizes="120x120" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-120x120.png" %}">
|
||||||
|
<link rel="apple-touch-icon" sizes="152x152" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-152x152.png" %}">
|
||||||
|
|
||||||
|
<!-- Stylesheets -->
|
||||||
|
<link rel="stylesheet" href="{% static "js/novnc/app/styles/base.css" %}"/>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
<script type='text/javascript' src='http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js'></script>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- this is included as a normal file in order to catch script-loading errors as well -->
|
||||||
|
<script type="text/javascript" src="{% static "js/novnc/app/error-handler.js" %}"></script>
|
||||||
|
|
||||||
|
<!-- begin scripts -->
|
||||||
|
<script src="{% static "js/novnc/app.js" %}"></script>
|
||||||
|
<!-- end scripts -->
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
<div id="noVNC_fallback_error" class="noVNC_center">
|
||||||
|
<div>
|
||||||
|
<div>noVNC encountered an error:</div>
|
||||||
|
<br>
|
||||||
|
<div id="noVNC_fallback_errormsg"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- noVNC Control Bar -->
|
||||||
|
<div id="noVNC_control_bar_anchor" class="noVNC_vcenter">
|
||||||
|
|
||||||
|
<div id="noVNC_control_bar">
|
||||||
|
<div id="noVNC_control_bar_handle" title="Hide/Show the control bar"><div></div></div>
|
||||||
|
|
||||||
|
<div class="noVNC_scroll">
|
||||||
|
|
||||||
|
<h1 class="noVNC_logo" translate="no"><span>no</span><br />VNC</h1>
|
||||||
|
|
||||||
|
<!-- Drag/Pan the viewport -->
|
||||||
|
<input type="image" alt="viewport drag" src="{% static "js/novnc/app/images/drag.svg" %}"
|
||||||
|
id="noVNC_view_drag_button" class="noVNC_button noVNC_hidden"
|
||||||
|
title="Move/Drag Viewport" />
|
||||||
|
|
||||||
|
<!--noVNC Touch Device only buttons-->
|
||||||
|
<div id="noVNC_mobile_buttons">
|
||||||
|
<input type="image" alt="No mousebutton" src="{% static "js/novnc/app/images/mouse_none.svg" %}"
|
||||||
|
id="noVNC_mouse_button0" class="noVNC_button"
|
||||||
|
title="Active Mouse Button"/>
|
||||||
|
<input type="image" alt="Left mousebutton" src="{% static "js/novnc/app/images/mouse_left.svg" %}"
|
||||||
|
id="noVNC_mouse_button1" class="noVNC_button"
|
||||||
|
title="Active Mouse Button"/>
|
||||||
|
<input type="image" alt="Middle mousebutton" src="{% static "js/novnc/app/images/mouse_middle.svg" %}"
|
||||||
|
id="noVNC_mouse_button2" class="noVNC_button"
|
||||||
|
title="Active Mouse Button"/>
|
||||||
|
<input type="image" alt="Right mousebutton" src="{% static "js/novnc/app/images/mouse_right.svg" %}"
|
||||||
|
id="noVNC_mouse_button4" class="noVNC_button"
|
||||||
|
title="Active Mouse Button"/>
|
||||||
|
<input type="image" alt="Keyboard" src="{% static "js/novnc/app/images/keyboard.svg" %}"
|
||||||
|
id="noVNC_keyboard_button" class="noVNC_button"
|
||||||
|
value="Keyboard" title="Show Keyboard" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Extra manual keys -->
|
||||||
|
<div id="noVNC_extra_keys">
|
||||||
|
<input type="image" alt="Extra keys" src="{% static "js/novnc/app/images/toggleextrakeys.svg" %}"
|
||||||
|
id="noVNC_toggle_extra_keys_button" class="noVNC_button"
|
||||||
|
title="Show Extra Keys"/>
|
||||||
|
<div class="noVNC_vcenter">
|
||||||
|
<div id="noVNC_modifiers" class="noVNC_panel">
|
||||||
|
<input type="image" alt="Ctrl" src="{% static "js/novnc/app/images/ctrl.svg" %}"
|
||||||
|
id="noVNC_toggle_ctrl_button" class="noVNC_button"
|
||||||
|
title="Toggle Ctrl"/>
|
||||||
|
<input type="image" alt="Alt" src="{% static "js/novnc/app/images/alt.svg" %}"
|
||||||
|
id="noVNC_toggle_alt_button" class="noVNC_button"
|
||||||
|
title="Toggle Alt"/>
|
||||||
|
<input type="image" alt="Tab" src="{% static "js/novnc/app/images/tab.svg" %}"
|
||||||
|
id="noVNC_send_tab_button" class="noVNC_button"
|
||||||
|
title="Send Tab"/>
|
||||||
|
<input type="image" alt="Esc" src="{% static "js/novnc/app/images/esc.svg" %}"
|
||||||
|
id="noVNC_send_esc_button" class="noVNC_button"
|
||||||
|
title="Send Escape"/>
|
||||||
|
<input type="image" alt="Ctrl+Alt+Del" src="{% static "js/novnc/app/images/ctrlaltdel.svg" %}"
|
||||||
|
id="noVNC_send_ctrl_alt_del_button" class="noVNC_button"
|
||||||
|
title="Send Ctrl-Alt-Del" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Shutdown/Reboot -->
|
||||||
|
<input type="image" alt="Shutdown/Reboot" src="{% static "js/novnc/app/images/power.svg" %}"
|
||||||
|
id="noVNC_power_button" class="noVNC_button"
|
||||||
|
title="Shutdown/Reboot..." />
|
||||||
|
<div class="noVNC_vcenter">
|
||||||
|
<div id="noVNC_power" class="noVNC_panel">
|
||||||
|
<div class="noVNC_heading">
|
||||||
|
<img src="{% static "js/novnc/app/images/power.svg" %}"> Power
|
||||||
|
</div>
|
||||||
|
<input type="button" id="noVNC_shutdown_button" value="Shutdown" />
|
||||||
|
<input type="button" id="noVNC_reboot_button" value="Reboot" />
|
||||||
|
<input type="button" id="noVNC_reset_button" value="Reset" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Clipboard -->
|
||||||
|
<input type="image" alt="Clipboard" src="{% static "js/novnc/app/images/clipboard.svg" %}"
|
||||||
|
id="noVNC_clipboard_button" class="noVNC_button"
|
||||||
|
title="Clipboard" />
|
||||||
|
<div class="noVNC_vcenter">
|
||||||
|
<div id="noVNC_clipboard" class="noVNC_panel">
|
||||||
|
<div class="noVNC_heading">
|
||||||
|
<img src="{% static "js/novnc/app/images/clipboard.svg" %}"> Clipboard
|
||||||
|
</div>
|
||||||
|
<textarea id="noVNC_clipboard_text" rows=5></textarea>
|
||||||
|
<br />
|
||||||
|
<input id="noVNC_clipboard_clear_button" type="button"
|
||||||
|
value="Clear" class="noVNC_submit" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Toggle fullscreen -->
|
||||||
|
<input type="image" alt="Fullscreen" src="{% static "js/novnc/app/images/fullscreen.svg" %}"
|
||||||
|
id="noVNC_fullscreen_button" class="noVNC_button noVNC_hidden"
|
||||||
|
title="Fullscreen" />
|
||||||
|
|
||||||
|
<!-- Settings -->
|
||||||
|
<input type="image" alt="Settings" src="{% static "js/novnc/app/images/settings.svg" %}"
|
||||||
|
id="noVNC_settings_button" class="noVNC_button"
|
||||||
|
title="Settings" />
|
||||||
|
<div class="noVNC_vcenter">
|
||||||
|
<div id="noVNC_settings" class="noVNC_panel">
|
||||||
|
<ul>
|
||||||
|
<li class="noVNC_heading">
|
||||||
|
<img src="{% static "js/novnc/app/images/settings.svg" %}"> Settings
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<label><input id="noVNC_setting_shared" type="checkbox" /> Shared Mode</label>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<label><input id="noVNC_setting_view_only" type="checkbox" /> View Only</label>
|
||||||
|
</li>
|
||||||
|
<li><hr></li>
|
||||||
|
<li>
|
||||||
|
<label><input id="noVNC_setting_view_clip" type="checkbox" /> Clip to Window</label>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<label for="noVNC_setting_resize">Scaling Mode:</label>
|
||||||
|
<select id="noVNC_setting_resize" name="vncResize">
|
||||||
|
<option value="off">None</option>
|
||||||
|
<option value="scale">Local Scaling</option>
|
||||||
|
<option value="remote">Remote Resizing</option>
|
||||||
|
</select>
|
||||||
|
</li>
|
||||||
|
<li><hr></li>
|
||||||
|
<li>
|
||||||
|
<div class="noVNC_expander">Advanced</div>
|
||||||
|
<div><ul>
|
||||||
|
<li>
|
||||||
|
<label for="noVNC_setting_repeaterID">Repeater ID:</label>
|
||||||
|
<input id="noVNC_setting_repeaterID" type="input" value="" />
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<div class="noVNC_expander">WebSocket</div>
|
||||||
|
<div><ul>
|
||||||
|
<li>
|
||||||
|
<label><input id="noVNC_setting_encrypt" type="checkbox" /> Encrypt</label>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<label for="noVNC_setting_host">Host:</label>
|
||||||
|
<input id="noVNC_setting_host" value="{{ ws_host }}"/>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<label for="noVNC_setting_port">Port:</label>
|
||||||
|
<input id="noVNC_setting_port" value="{{ ws_port }}" type="number" />
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<label for="noVNC_setting_path">Path:</label>
|
||||||
|
<input id="noVNC_setting_path" type="input" value="websockify" />
|
||||||
|
</li>
|
||||||
|
</ul></div>
|
||||||
|
</li>
|
||||||
|
<li><hr></li>
|
||||||
|
<li>
|
||||||
|
<label><input id="noVNC_setting_reconnect" type="checkbox" /> Automatic Reconnect</label>
|
||||||
|
<input id="noVNC_setting_autoconnect" type="checkbox" value="true" hidden/>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<label for="noVNC_setting_reconnect_delay">Reconnect Delay (ms):</label>
|
||||||
|
<input id="noVNC_setting_reconnect_delay" type="number" />
|
||||||
|
</li>
|
||||||
|
<li><hr></li>
|
||||||
|
<!-- Logging selection dropdown -->
|
||||||
|
<li>
|
||||||
|
<label>Logging:
|
||||||
|
<select id="noVNC_setting_logging" name="vncLogging">
|
||||||
|
</select>
|
||||||
|
</label>
|
||||||
|
</li>
|
||||||
|
</ul></div>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Connection Controls -->
|
||||||
|
<input type="image" alt="Disconnect" src="{% static "js/novnc/app/images/disconnect.svg" %}"
|
||||||
|
id="noVNC_disconnect_button" class="noVNC_button"
|
||||||
|
title="Disconnect" />
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="noVNC_control_bar_hint"></div>
|
||||||
|
|
||||||
|
</div> <!-- End of noVNC_control_bar -->
|
||||||
|
|
||||||
|
<!-- Status Dialog -->
|
||||||
|
<div id="noVNC_status"></div>
|
||||||
|
|
||||||
|
<!-- Connect button -->
|
||||||
|
<div class="noVNC_center">
|
||||||
|
<div id="noVNC_connect_dlg">
|
||||||
|
<div class="noVNC_logo" translate="no"><span>no</span>VNC</div>
|
||||||
|
<div id="noVNC_connect_button">
|
||||||
|
<div>
|
||||||
|
<img src="{% static "js/novnc/app/images/connect.svg" %}"> Connect
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Password Dialog -->
|
||||||
|
<div class="noVNC_center noVNC_connect_layer">
|
||||||
|
<div id="noVNC_password_dlg" class="noVNC_panel"><form>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<label>Password:</label>
|
||||||
|
<input id="noVNC_password_input" type="password" />
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<input id="noVNC_password_button" type="submit" value="Send Password" class="noVNC_submit" />
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</form></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Transition Screens -->
|
||||||
|
<div id="noVNC_transition">
|
||||||
|
<div id="noVNC_transition_text"></div>
|
||||||
|
<div>
|
||||||
|
<input type="button" id="noVNC_cancel_reconnect_button" value="Cancel" class="noVNC_submit" />
|
||||||
|
</div>
|
||||||
|
<div class="noVNC_spinner"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- This is where the RFB elements will attach -->
|
||||||
|
<div id="noVNC_container">
|
||||||
|
<!-- Note that Google Chrome on Android doesn't respect any of these,
|
||||||
|
html attributes which attempt to disable text suggestions on the
|
||||||
|
on-screen keyboard. Let's hope Chrome implements the ime-mode
|
||||||
|
style for example -->
|
||||||
|
<textarea id="noVNC_keyboardinput" autocapitalize="off"
|
||||||
|
autocorrect="off" autocomplete="off" spellcheck="false"
|
||||||
|
mozactionhint="Enter" tabindex="-1"></textarea>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<audio id="noVNC_bell">
|
||||||
|
<source src="{% static "js/novnc/app/sounds/bell.oga" %}" type="audio/ogg">
|
||||||
|
<source src="{% static "js/novnc/app/sounds/bell.mp3" %}" type="audio/mpeg">
|
||||||
|
</audio>
|
||||||
|
{% endblock %}
|
266
console/templates/console-vnc-lite.html
Executable file
|
@ -0,0 +1,266 @@
|
||||||
|
{% extends "console-base.html" %}
|
||||||
|
{% load i18n %}
|
||||||
|
{% load staticfiles %}
|
||||||
|
{% block head %}
|
||||||
|
<!--
|
||||||
|
noVNC example: lightweight example using minimal UI and features
|
||||||
|
Copyright (C) 2012 Joel Martin
|
||||||
|
Copyright (C) 2017 Samuel Mannehed for Cendio AB
|
||||||
|
noVNC is licensed under the MPL 2.0 (see LICENSE.txt)
|
||||||
|
This file is licensed under the 2-Clause BSD license (see LICENSE.txt).
|
||||||
|
|
||||||
|
Connect parameters are provided in query string:
|
||||||
|
http://example.com/?host=HOST&port=PORT&encrypt=1
|
||||||
|
or the fragment:
|
||||||
|
http://example.com/#host=HOST&port=PORT&encrypt=1
|
||||||
|
-->
|
||||||
|
<title>noVNC</title>
|
||||||
|
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<!-- Always force latest IE rendering engine (even in intranet) & Chrome Frame
|
||||||
|
Remove this if you use the .htaccess -->
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||||
|
|
||||||
|
<!-- Icons (see Makefile for what the sizes are for) -->
|
||||||
|
<link rel="icon" sizes="16x16" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-16x16.png" %}">
|
||||||
|
<link rel="icon" sizes="24x24" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-24x24.png" %}">
|
||||||
|
<link rel="icon" sizes="32x32" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-32x32.png" %}">
|
||||||
|
<link rel="icon" sizes="48x48" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-48x48.png" %}">
|
||||||
|
<link rel="icon" sizes="60x60" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-60x60.png" %}">
|
||||||
|
<link rel="icon" sizes="64x64" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-64x64.png" %}">
|
||||||
|
<link rel="icon" sizes="72x72" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-72x72.png" %}">
|
||||||
|
<link rel="icon" sizes="76x76" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-76x76.png" %}">
|
||||||
|
<link rel="icon" sizes="96x96" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-96x96.png" %}">
|
||||||
|
<link rel="icon" sizes="120x120" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-120x120.png" %}">
|
||||||
|
<link rel="icon" sizes="144x144" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-144x144.png" %}">
|
||||||
|
<link rel="icon" sizes="152x152" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-152x152.png" %}">
|
||||||
|
<link rel="icon" sizes="192x192" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-192x192.png" %}">
|
||||||
|
<!-- Firefox currently mishandles SVG, see #1419039
|
||||||
|
<link rel="icon" sizes="any" type="image/svg+xml" href="{% static "js/novnc/app/images/icons/novnc-icon.svg" %}">
|
||||||
|
-->
|
||||||
|
<!-- Repeated last so that legacy handling will pick this -->
|
||||||
|
<link rel="icon" sizes="16x16" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-16x16.png" %}">
|
||||||
|
|
||||||
|
<!-- Apple iOS Safari settings -->
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
||||||
|
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||||
|
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
|
||||||
|
<!-- Home Screen Icons (favourites and bookmarks use the normal icons) -->
|
||||||
|
<link rel="apple-touch-icon" sizes="60x60" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-60x60.png" %}">
|
||||||
|
<link rel="apple-touch-icon" sizes="76x76" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-76x76.png" %}">
|
||||||
|
<link rel="apple-touch-icon" sizes="120x120" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-120x120.png" %}">
|
||||||
|
<link rel="apple-touch-icon" sizes="152x152" type="image/png" href="{% static "js/novnc/app/images/icons/novnc-152x152.png" %}">
|
||||||
|
|
||||||
|
<!-- Stylesheets -->
|
||||||
|
<link rel="stylesheet" href="{% static "js/novnc/app/styles/lite.css" %}">
|
||||||
|
|
||||||
|
<!--
|
||||||
|
<script type='text/javascript'
|
||||||
|
src='http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js'></script>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- promise polyfills promises for IE11 -->
|
||||||
|
<script src="{% static "js/novnc/vendor/promise.js" %}"></script>
|
||||||
|
<!-- ES2015/ES6 modules polyfill -->
|
||||||
|
<script type="module">
|
||||||
|
window._noVNC_has_module_support = true;
|
||||||
|
</script>
|
||||||
|
<script>
|
||||||
|
window.addEventListener("load", function() {
|
||||||
|
if (window._noVNC_has_module_support) return;
|
||||||
|
var loader = document.createElement("script");
|
||||||
|
loader.src = "{% static "js/novnc/vendor/browser-es-module-loader/dist/browser-es-module-loader.js" %}";
|
||||||
|
document.head.appendChild(loader);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
<div id="noVNC_status_bar">
|
||||||
|
<div id="noVNC_left_dummy_elem"></div>
|
||||||
|
<div id="noVNC_status">Loading</div>
|
||||||
|
<div id="noVNC_buttons">
|
||||||
|
<input type=button value="Send CtrlAltDel" id="sendCtrlAltDelButton" class="noVNC_shown">
|
||||||
|
<span id="noVNC_power_buttons" class="noVNC_hidden">
|
||||||
|
<input type=button value="Shutdown" id="machineShutdownButton">
|
||||||
|
<input type=button value="Reboot" id="machineRebootButton">
|
||||||
|
<input type=button value="Reset" id="machineResetButton">
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id='vnc_container'></div>
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block foot %}
|
||||||
|
<!-- actual script modules -->
|
||||||
|
<script type="module" crossorigin="anonymous">
|
||||||
|
// Load supporting scripts
|
||||||
|
import * as WebUtil from '{% static "js/novnc/app/webutil.js" %}';
|
||||||
|
import RFB from '{% static "js/novnc/core/rfb.js" %}';
|
||||||
|
|
||||||
|
var rfb;
|
||||||
|
var desktopName;
|
||||||
|
|
||||||
|
function updateDesktopName(e) {
|
||||||
|
desktopName = e.detail.name;
|
||||||
|
}
|
||||||
|
function credentials(e) {
|
||||||
|
var html;
|
||||||
|
|
||||||
|
var form = document.createElement('form');
|
||||||
|
form.innerHTML = '<label></label>';
|
||||||
|
form.innerHTML += '<input type=password size=10 id="password_input">';
|
||||||
|
form.onsubmit = setPassword;
|
||||||
|
|
||||||
|
// bypass status() because it sets text content
|
||||||
|
document.getElementById('noVNC_status_bar').setAttribute("class", "noVNC_status_warn");
|
||||||
|
document.getElementById('noVNC_status').innerHTML = '';
|
||||||
|
document.getElementById('noVNC_status').appendChild(form);
|
||||||
|
document.getElementById('noVNC_status').querySelector('label').textContent = 'Password Required: ';
|
||||||
|
}
|
||||||
|
function setPassword() {
|
||||||
|
rfb.sendCredentials({ password: document.getElementById('password_input').value });
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
function sendCtrlAltDel() {
|
||||||
|
rfb.sendCtrlAltDel();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
function machineShutdown() {
|
||||||
|
rfb.machineShutdown();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
function machineReboot() {
|
||||||
|
rfb.machineReboot();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
function machineReset() {
|
||||||
|
rfb.machineReset();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
function status(text, level) {
|
||||||
|
switch (level) {
|
||||||
|
case 'normal':
|
||||||
|
case 'warn':
|
||||||
|
case 'error':
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
level = "warn";
|
||||||
|
}
|
||||||
|
document.getElementById('noVNC_status_bar').className = "noVNC_status_" + level;
|
||||||
|
document.getElementById('noVNC_status').textContent = text;
|
||||||
|
}
|
||||||
|
|
||||||
|
function connected(e) {
|
||||||
|
document.getElementById('sendCtrlAltDelButton').disabled = false;
|
||||||
|
if (WebUtil.getConfigVar('encrypt', (window.location.protocol === "https:"))) {
|
||||||
|
status("Connected (encrypted) to " + desktopName, "normal");
|
||||||
|
} else {
|
||||||
|
status("Connected (unencrypted) to " + desktopName, "normal");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function disconnected(e) {
|
||||||
|
document.getElementById('sendCtrlAltDelButton').disabled = true;
|
||||||
|
updatePowerButtons();
|
||||||
|
if (e.detail.clean) {
|
||||||
|
status("Disconnected", "normal");
|
||||||
|
} else {
|
||||||
|
status("Something went wrong, connection is closed", "error");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function updatePowerButtons() {
|
||||||
|
var powerbuttons;
|
||||||
|
powerbuttons = document.getElementById('noVNC_power_buttons');
|
||||||
|
if (rfb.capabilities.power) {
|
||||||
|
powerbuttons.className= "noVNC_shown";
|
||||||
|
} else {
|
||||||
|
powerbuttons.className = "noVNC_hidden";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
document.getElementById('sendCtrlAltDelButton').onclick = sendCtrlAltDel;
|
||||||
|
document.getElementById('machineShutdownButton').onclick = machineShutdown;
|
||||||
|
document.getElementById('machineRebootButton').onclick = machineReboot;
|
||||||
|
document.getElementById('machineResetButton').onclick = machineReset;
|
||||||
|
|
||||||
|
WebUtil.init_logging(WebUtil.getConfigVar('logging', 'warn'));
|
||||||
|
document.title = WebUtil.getConfigVar('title', 'noVNC');
|
||||||
|
// By default, use the host and port of server that served this file
|
||||||
|
//var host = WebUtil.getConfigVar('host', window.location.hostname);
|
||||||
|
//var port = WebUtil.getConfigVar('port', window.location.port);
|
||||||
|
var host = '{{ ws_host }}';
|
||||||
|
var port = '{{ ws_port }}';
|
||||||
|
|
||||||
|
// if port == 80 (or 443) then it won't be present and should be
|
||||||
|
// set manually
|
||||||
|
if (!port) {
|
||||||
|
if (window.location.protocol.substring(0,5) == 'https') {
|
||||||
|
port = 443;
|
||||||
|
}
|
||||||
|
else if (window.location.protocol.substring(0,4) == 'http') {
|
||||||
|
port = 80;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//var password = WebUtil.getConfigVar('password', '');
|
||||||
|
var password = '{{ console_passwd }}';
|
||||||
|
|
||||||
|
var path = WebUtil.getConfigVar('path', 'websockify');
|
||||||
|
|
||||||
|
// If a token variable is passed in, set the parameter in a cookie.
|
||||||
|
// This is used by nova-novncproxy.
|
||||||
|
var token = WebUtil.getConfigVar('token', null);
|
||||||
|
if (token) {
|
||||||
|
// if token is already present in the path we should use it
|
||||||
|
path = WebUtil.injectParamIfMissing(path, "token", token);
|
||||||
|
|
||||||
|
WebUtil.createCookie('token', token, 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
|
||||||
|
status("Connecting", "normal");
|
||||||
|
|
||||||
|
if ((!host) || (!port)) {
|
||||||
|
status('Must specify host and port in URL', 'error');
|
||||||
|
}
|
||||||
|
|
||||||
|
var url;
|
||||||
|
|
||||||
|
if (WebUtil.getConfigVar('encrypt', (window.location.protocol === "https:"))) {
|
||||||
|
url = 'wss';
|
||||||
|
} else {
|
||||||
|
url = 'ws';
|
||||||
|
}
|
||||||
|
|
||||||
|
url += '://' + host;
|
||||||
|
if(port) {
|
||||||
|
url += ':' + port;
|
||||||
|
}
|
||||||
|
url += '/' + path;
|
||||||
|
|
||||||
|
// rfb = new RFB(document.body, url,
|
||||||
|
// { repeaterID: WebUtil.getConfigVar('repeaterID', ''),
|
||||||
|
// shared: WebUtil.getConfigVar('shared', true),
|
||||||
|
// credentials: { password: password } });
|
||||||
|
rfb = new RFB(document.getElementById('vnc_container'), url,
|
||||||
|
{ repeaterID: WebUtil.getConfigVar('repeaterID', ''),
|
||||||
|
shared: WebUtil.getConfigVar('shared', true),
|
||||||
|
credentials: { password: password } });
|
||||||
|
|
||||||
|
rfb.viewOnly = WebUtil.getConfigVar('view_only', false);
|
||||||
|
rfb.addEventListener("connect", connected);
|
||||||
|
rfb.addEventListener("disconnect", disconnected);
|
||||||
|
rfb.addEventListener("capabilities", function () { updatePowerButtons(); });
|
||||||
|
rfb.addEventListener("credentialsrequired", credentials);
|
||||||
|
rfb.addEventListener("desktopname", updateDesktopName);
|
||||||
|
rfb.scaleViewport = WebUtil.getConfigVar('scale', false);
|
||||||
|
rfb.resizeSession = WebUtil.getConfigVar('resize', false);
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
|
{% endblock %}
|
|
@ -1,203 +0,0 @@
|
||||||
{% extends "console-base.html" %}
|
|
||||||
{% load i18n %}
|
|
||||||
{% load staticfiles %}
|
|
||||||
{% block head %}
|
|
||||||
<script src="{% static "js/novnc/util.js" %}"></script>
|
|
||||||
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block navbarmenu %}
|
|
||||||
<!-- dirty fix for keyboard on iOS devices -->
|
|
||||||
<li id="showKeyboard"><a href='#'>{% trans "Show Keyboad" %}</a></li>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block content %}
|
|
||||||
<div id='noVNC_area'>
|
|
||||||
<canvas id="noVNC_canvas" width="640px" height="20px">
|
|
||||||
{% trans "Canvas not supported." %}
|
|
||||||
</canvas>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Note that Google Chrome on Android doesn't respect any of these,
|
|
||||||
html attributes which attempt to disable text suggestions on the
|
|
||||||
on-screen keyboard. Let's hope Chrome implements the ime-mode
|
|
||||||
style for example -->
|
|
||||||
<!-- TODO: check if this is needed on iOS -->
|
|
||||||
<textarea id="keyboardinput" autocapitalize="off"
|
|
||||||
autocorrect="off" autocomplete="off" spellcheck="false"
|
|
||||||
mozactionhint="Enter" onsubmit="return false;"
|
|
||||||
style="display: none;">
|
|
||||||
</textarea>
|
|
||||||
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block foot %}
|
|
||||||
<script>
|
|
||||||
/*jslint white: false */
|
|
||||||
/*global window, $, Util, RFB, */
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
// dirty fix for keyboard on iOS devices
|
|
||||||
var keyboardVisible = false;
|
|
||||||
var isTouchDevice = false;
|
|
||||||
isTouchDevice = 'ontouchstart' in document.documentElement;
|
|
||||||
|
|
||||||
// Load supporting scripts
|
|
||||||
Util.load_scripts(["webutil.js", "base64.js", "websock.js", "des.js",
|
|
||||||
"input.js", "display.js", "jsunzip.js", "rfb.js"]);
|
|
||||||
|
|
||||||
var rfb;
|
|
||||||
|
|
||||||
function passwordRequired(rfb) {
|
|
||||||
var modal;
|
|
||||||
modal = '<div class="modal fade">';
|
|
||||||
modal += ' <div class="modal-dialog">';
|
|
||||||
modal += ' <div class="modal-content">';
|
|
||||||
modal += ' <div class="modal-header">';
|
|
||||||
modal += ' <h4 class="modal-title">{% trans "Password required" %}</h4>';
|
|
||||||
modal += ' </div>';
|
|
||||||
modal += ' <div class="modal-body">';
|
|
||||||
modal += ' <form id="password_form" onsubmit="return setPassword();">';
|
|
||||||
modal += ' <div class="form-group">';
|
|
||||||
modal += ' <label for="password_input">Password</label>';
|
|
||||||
modal += ' <input type="password" class="form-control" id="password_input" placeholder="Password"/>';
|
|
||||||
modal += ' </div>';
|
|
||||||
modal += ' </form>';
|
|
||||||
modal += ' </div>';
|
|
||||||
modal += ' <div class="modal-footer">';
|
|
||||||
modal += ' <button type="button" class="btn btn-primary" data-dismiss="modal" onclick="return setPassword();">{% trans "OK" %}</button>';
|
|
||||||
modal += ' </div>';
|
|
||||||
modal += ' </div>';
|
|
||||||
modal += ' </div>';
|
|
||||||
modal += '</div>';
|
|
||||||
$('body').append(modal);
|
|
||||||
$('div.modal').modal();
|
|
||||||
}
|
|
||||||
function setPassword() {
|
|
||||||
rfb.sendPassword($('#password_input').val());
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
function sendCtrlAltDel() {
|
|
||||||
rfb.sendCtrlAltDel();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function sendCtrlAltFN(f) {
|
|
||||||
var keys_code=[0xFFBE,0xFFBF,0xFFC0,0xFFC1,0xFFC2,0xFFC3,0xFFC4,0xFFC5,0xFFC6,0xFFC7,0xFFC8,0xFFC9];
|
|
||||||
if (keys_code[f]==undefined) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
rfb.sendKey(0xFFE3, 'down');
|
|
||||||
rfb.sendKey(0xFFE9, 'down');
|
|
||||||
rfb.sendKey(keys_code[f], 'down');
|
|
||||||
rfb.sendKey(keys_code[f], 'up');
|
|
||||||
rfb.sendKey(0xFFE9, 'up');
|
|
||||||
rfb.sendKey(0xFFE3, 'up');
|
|
||||||
};
|
|
||||||
|
|
||||||
// dirty fix for keyboard on iOS devices
|
|
||||||
function showKeyboard() {
|
|
||||||
var kbi, skb, l;
|
|
||||||
kbi = $D('keyboardinput');
|
|
||||||
skb = $D('showKeyboard');
|
|
||||||
l = kbi.value.length;
|
|
||||||
if (keyboardVisible === false) {
|
|
||||||
kbi.focus();
|
|
||||||
try {
|
|
||||||
kbi.setSelectionRange(l, l);
|
|
||||||
} // Move the caret to the end
|
|
||||||
catch (err) {
|
|
||||||
} // setSelectionRange is undefined in Google Chrome
|
|
||||||
keyboardVisible = true;
|
|
||||||
//skb.className = "noVNC_status_button_selected";
|
|
||||||
} else if (keyboardVisible === true) {
|
|
||||||
kbi.blur();
|
|
||||||
//skb.className = "noVNC_status_button";
|
|
||||||
keyboardVisible = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function updateState(rfb, state, oldstate, msg) {
|
|
||||||
var s, sb, cad, af, level;
|
|
||||||
cad = $D('sendCtrlAltDelButton');
|
|
||||||
af = $D('askFullscreen');
|
|
||||||
switch (state) {
|
|
||||||
case 'failed':
|
|
||||||
level = "danger";
|
|
||||||
break;
|
|
||||||
case 'fatal':
|
|
||||||
level = "danger";
|
|
||||||
break;
|
|
||||||
case 'normal':
|
|
||||||
level = "info";
|
|
||||||
break;
|
|
||||||
case 'disconnected':
|
|
||||||
level = "info";
|
|
||||||
break;
|
|
||||||
case 'loaded':
|
|
||||||
level = "info";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
level = "warning";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (typeof(msg) !== 'undefined') {
|
|
||||||
log_message(msg,level);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function fullscreen() {
|
|
||||||
var screen=document.getElementById('main_container');
|
|
||||||
if(screen.requestFullscreen) {
|
|
||||||
screen.requestFullscreen();
|
|
||||||
} else if(screen.mozRequestFullScreen) {
|
|
||||||
screen.mozRequestFullScreen();
|
|
||||||
} else if(screen.webkitRequestFullscreen) {
|
|
||||||
screen.webkitRequestFullscreen();
|
|
||||||
} else if(screen.msRequestFullscreen) {
|
|
||||||
screen.msRequestFullscreen();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
window.onscriptsload = function () {
|
|
||||||
var host, port, password, path, token;
|
|
||||||
|
|
||||||
// dirty fix for keyboard on iOS devices
|
|
||||||
if (isTouchDevice) {
|
|
||||||
$D('showKeyboard').onclick = showKeyboard;
|
|
||||||
// Remove the address bar
|
|
||||||
setTimeout(function () {
|
|
||||||
window.scrollTo(0, 1);
|
|
||||||
}, 100);
|
|
||||||
} else {
|
|
||||||
$D('showKeyboard').style.display = "none";
|
|
||||||
}
|
|
||||||
|
|
||||||
WebUtil.init_logging(WebUtil.getQueryVar('logging', 'warn'));
|
|
||||||
document.title = unescape(WebUtil.getQueryVar('title', 'noVNC'));
|
|
||||||
// By default, use the host and port of server that served this file
|
|
||||||
host = '{{ ws_host }}';
|
|
||||||
port = '{{ ws_port }}';
|
|
||||||
password = '{{ console_passwd }}';
|
|
||||||
|
|
||||||
if ((!host) || (!port)) {
|
|
||||||
updateState('failed',
|
|
||||||
"Must specify host and port in URL");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
rfb = new RFB({'target': document.getElementById('noVNC_canvas'),
|
|
||||||
'encrypt': WebUtil.getQueryVar('encrypt',
|
|
||||||
(window.location.protocol === "https:")),
|
|
||||||
'repeaterID': WebUtil.getQueryVar('repeaterID', ''),
|
|
||||||
'true_color': WebUtil.getQueryVar('true_color', true),
|
|
||||||
'local_cursor': WebUtil.getQueryVar('cursor', true),
|
|
||||||
'shared': WebUtil.getQueryVar('shared', true),
|
|
||||||
'view_only': WebUtil.getQueryVar('view_only', false),
|
|
||||||
'updateState': updateState,
|
|
||||||
'onPasswordRequired': passwordRequired});
|
|
||||||
rfb.connect(host, port, password, path);
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
{% endblock %}
|
|
|
@ -20,6 +20,7 @@ def console(request):
|
||||||
|
|
||||||
if request.method == 'GET':
|
if request.method == 'GET':
|
||||||
token = request.GET.get('token', '')
|
token = request.GET.get('token', '')
|
||||||
|
view_type = request.GET.get('view', 'lite')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
temptoken = token.split('-', 1)
|
temptoken = token.split('-', 1)
|
||||||
|
@ -45,13 +46,12 @@ def console(request):
|
||||||
if ':' in ws_host:
|
if ':' in ws_host:
|
||||||
ws_host = re.sub(':[0-9]+', '', ws_host)
|
ws_host = re.sub(':[0-9]+', '', ws_host)
|
||||||
|
|
||||||
if console_type == 'vnc':
|
console_page = "console-" + console_type + "-" + view_type + ".html"
|
||||||
response = render(request, 'console-vnc.html', locals())
|
if console_type == 'vnc' or console_type == 'spice':
|
||||||
elif console_type == 'spice':
|
response = render(request, console_page, locals())
|
||||||
response = render(request, 'console-spice.html', locals())
|
|
||||||
else:
|
else:
|
||||||
console_error = "Console type: %s no support" % console_type
|
console_error = "Console type: %s no support" % console_type
|
||||||
response = render(request, 'console-vnc.html', locals())
|
response = render(request, 'console-vnc-lite.html', locals())
|
||||||
|
|
||||||
response.set_cookie('token', token)
|
response.set_cookie('token', token)
|
||||||
return response
|
return response
|
||||||
|
|
|
@ -233,7 +233,7 @@
|
||||||
{% if not flavors %}
|
{% if not flavors %}
|
||||||
<div class="col-lg-12">
|
<div class="col-lg-12">
|
||||||
<div class="alert alert-warning alert-dismissable">
|
<div class="alert alert-warning alert-dismissable">
|
||||||
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
||||||
<i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning:" %}</strong> {% trans "Hypervisor doesn't have any Flavors" %}
|
<i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning:" %}</strong> {% trans "Hypervisor doesn't have any Flavors" %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -37,12 +37,12 @@ def create_instance(request, compute_id):
|
||||||
compute.password,
|
compute.password,
|
||||||
compute.type)
|
compute.type)
|
||||||
|
|
||||||
storages = sorted(conn.get_storages())
|
storages = sorted(conn.get_storages(only_actives=True))
|
||||||
networks = sorted(conn.get_networks())
|
networks = sorted(conn.get_networks())
|
||||||
instances = conn.get_instances()
|
instances = conn.get_instances()
|
||||||
get_images = sorted(conn.get_storages_images())
|
|
||||||
cache_modes = sorted(conn.get_cache_modes().items())
|
cache_modes = sorted(conn.get_cache_modes().items())
|
||||||
mac_auto = util.randomMAC()
|
mac_auto = util.randomMAC()
|
||||||
|
get_images = sorted(conn.get_storages_images())
|
||||||
except libvirtError as lib_err:
|
except libvirtError as lib_err:
|
||||||
error_messages.append(lib_err)
|
error_messages.append(lib_err)
|
||||||
|
|
||||||
|
@ -74,7 +74,7 @@ def create_instance(request, compute_id):
|
||||||
xml = request.POST.get('from_xml', '')
|
xml = request.POST.get('from_xml', '')
|
||||||
try:
|
try:
|
||||||
name = util.get_xml_path(xml, '/domain/name')
|
name = util.get_xml_path(xml, '/domain/name')
|
||||||
except util.libxml2.parserError:
|
except util.etree.ParserError:
|
||||||
name = None
|
name = None
|
||||||
if name in instances:
|
if name in instances:
|
||||||
error_msg = _("A virtual machine with this name already exists")
|
error_msg = _("A virtual machine with this name already exists")
|
||||||
|
|
20
instances/migrations/0004_auto_20180724_1136.py
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.11.13 on 2018-07-24 11:36
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('instances', '0003_instance_created'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='instance',
|
||||||
|
name='name',
|
||||||
|
field=models.CharField(max_length=120),
|
||||||
|
),
|
||||||
|
]
|
|
@ -3,8 +3,8 @@ from computes.models import Compute
|
||||||
|
|
||||||
|
|
||||||
class Instance(models.Model):
|
class Instance(models.Model):
|
||||||
compute = models.ForeignKey(Compute)
|
compute = models.ForeignKey(Compute, on_delete=models.CASCADE)
|
||||||
name = models.CharField(max_length=20)
|
name = models.CharField(max_length=120)
|
||||||
uuid = models.CharField(max_length=36)
|
uuid = models.CharField(max_length=36)
|
||||||
is_template = models.BooleanField(default=False)
|
is_template = models.BooleanField(default=False)
|
||||||
created = models.DateField(auto_now_add=True)
|
created = models.DateField(auto_now_add=True)
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
<h4 class="modal-title">{% trans "Choose a compute for new instance" %}</h4>
|
<h4 class="modal-title">{% trans "Choose a compute for new instance" %}</h4>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<form class="form-horizontal" role="form">
|
<form class="form-horizontal" role="form"> {% csrf_token %}
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-sm-4 control-label">{% trans "Compute" %}</label>
|
<label class="col-sm-4 control-label">{% trans "Compute" %}</label>
|
||||||
<div class="col-sm-6">
|
<div class="col-sm-6">
|
||||||
|
|
|
@ -35,6 +35,8 @@
|
||||||
{{ disk.size|filesizeformat }} {% trans "Disk" %} |
|
{{ disk.size|filesizeformat }} {% trans "Disk" %} |
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
<a href="{% url 'instance' compute.id vname %}" type="button" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-refresh"></span></a>
|
<a href="{% url 'instance' compute.id vname %}" type="button" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-refresh"></span></a>
|
||||||
|
<em>on</em>
|
||||||
|
<a href="{% url 'overview' compute.id %}"><span class="label label-primary">{{ compute.name}} - {{ compute.hostname }} </span></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% if user_quota_msg %}
|
{% if user_quota_msg %}
|
||||||
|
@ -247,7 +249,19 @@
|
||||||
<div role="tabpanel" class="tab-pane tab-pane-bordered active" id="vnconsole">
|
<div role="tabpanel" class="tab-pane tab-pane-bordered active" id="vnconsole">
|
||||||
<p>{% trans "This action opens a new window with a VNC connection to the console of the instance." %}</p>
|
<p>{% trans "This action opens a new window with a VNC connection to the console of the instance." %}</p>
|
||||||
{% ifequal status 1 %}
|
{% ifequal status 1 %}
|
||||||
<a href="#" class="btn btn-lg btn-success pull-right" title="Console port: {{ console_port }}" onclick="open_console()">{% trans "Console" %}</a>
|
<!-- Split button -->
|
||||||
|
<div class="btn-group pull-right">
|
||||||
|
<button type="button" class="btn btn-lg btn-success " onclick="open_console('lite')">Console</button>
|
||||||
|
<button type="button" class="btn btn-lg btn-success dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||||
|
<span class="caret"></span>
|
||||||
|
<span class="sr-only">Toggle Dropdown</span>
|
||||||
|
</button>
|
||||||
|
<ul class="dropdown-menu">
|
||||||
|
<li><a href="#" title="Console port: {{ console_port }}" onclick="open_console('lite')">{% trans "Console - Lite" %}</a></li>
|
||||||
|
<li><a href="#" title="Console port: {{ console_port }}" onclick="open_console('full')">{% trans "Console - Full" %}</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
{% else %}
|
{% else %}
|
||||||
<button class="btn btn-lg btn-success pull-right disabled">{% trans "Console" %}</button>
|
<button class="btn btn-lg btn-success pull-right disabled">{% trans "Console" %}</button>
|
||||||
{% endifequal %}
|
{% endifequal %}
|
||||||
|
@ -318,7 +332,7 @@
|
||||||
<!-- Tab panes -->
|
<!-- Tab panes -->
|
||||||
<div class="tab-content">
|
<div class="tab-content">
|
||||||
<div role="tabpanel" class="tab-pane tab-pane-bordered active" id="resizevm">
|
<div role="tabpanel" class="tab-pane tab-pane-bordered active" id="resizevm">
|
||||||
{% if request.user.is_superuser or request.user.is_staff or userinstace.is_change %}
|
{% if request.user.is_superuser or request.user.is_staff or userinstance.is_change %}
|
||||||
<form class="form-horizontal" method="post" role="form">{% csrf_token %}
|
<form class="form-horizontal" method="post" role="form">{% csrf_token %}
|
||||||
<p style="font-weight:bold;">{% trans "Logical host CPUs:" %} {{ vcpu_host }}</p>
|
<p style="font-weight:bold;">{% trans "Logical host CPUs:" %} {{ vcpu_host }}</p>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
|
@ -396,7 +410,7 @@
|
||||||
<div class="clearfix"></div>
|
<div class="clearfix"></div>
|
||||||
</div>
|
</div>
|
||||||
<div role="tabpanel" class="tab-pane tab-pane-bordered" id="addvolume">
|
<div role="tabpanel" class="tab-pane tab-pane-bordered" id="addvolume">
|
||||||
{% if request.user.is_superuser or userinstace.is_change %}
|
{% if request.user.is_superuser or userinstance.is_change %}
|
||||||
<form class="form-horizontal" method="post" role="form">{% csrf_token %}
|
<form class="form-horizontal" method="post" role="form">{% csrf_token %}
|
||||||
<p style="font-weight:bold;">{% trans "Volume parameters" %}</p>
|
<p style="font-weight:bold;">{% trans "Volume parameters" %}</p>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
|
@ -414,13 +428,6 @@
|
||||||
<div class="col-sm-4">
|
<div class="col-sm-4">
|
||||||
<input type="text" class="form-control" name="name" placeholder="{% trans "Name" %}" required pattern="[a-zA-Z0-9\.\-_]+">
|
<input type="text" class="form-control" name="name" placeholder="{% trans "Name" %}" required pattern="[a-zA-Z0-9\.\-_]+">
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-2">
|
|
||||||
<select name="extension" class="form-control image-format">
|
|
||||||
{% for format in formats %}
|
|
||||||
<option value="{{ format }}" {% if format == default_format %}selected{% endif %}>{% trans format %}</option>
|
|
||||||
{% endfor %}
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-sm-3 control-label" style="font-weight:normal;">{% trans "Format" %}</label>
|
<label class="col-sm-3 control-label" style="font-weight:normal;">{% trans "Format" %}</label>
|
||||||
|
@ -588,7 +595,7 @@
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if request.user.is_superuser or userinstace.is_vnc %}
|
{% if request.user.is_superuser or userinstance.is_vnc %}
|
||||||
<li role="presentation">
|
<li role="presentation">
|
||||||
<a href="#vncsettings" aria-controls="vncsettings" role="tab" data-toggle="tab">
|
<a href="#vncsettings" aria-controls="vncsettings" role="tab" data-toggle="tab">
|
||||||
{% trans "VNC" %}
|
{% trans "VNC" %}
|
||||||
|
@ -689,7 +696,7 @@
|
||||||
<div class="clearfix"></div>
|
<div class="clearfix"></div>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if request.user.is_superuser or userinstace.is_vnc %}
|
{% if request.user.is_superuser or userinstance.is_vnc %}
|
||||||
<div role="tabpanel" class="tab-pane tab-pane-bordered" id="vncsettings">
|
<div role="tabpanel" class="tab-pane tab-pane-bordered" id="vncsettings">
|
||||||
<p>{% trans "To set console's type, shutdown the instance." %}</p>
|
<p>{% trans "To set console's type, shutdown the instance." %}</p>
|
||||||
<form class="form-horizontal" method="post" role="form">{% csrf_token %}
|
<form class="form-horizontal" method="post" role="form">{% csrf_token %}
|
||||||
|
@ -811,19 +818,29 @@
|
||||||
<p style="font-weight:bold;">{% trans "Network devices" %}</p>
|
<p style="font-weight:bold;">{% trans "Network devices" %}</p>
|
||||||
{% for network in networks %}
|
{% for network in networks %}
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-sm-3 control-label" style="font-weight:normal;">eth{{ forloop.counter0 }}</label>
|
<label class="col-sm-3 control-label" style="font-weight:normal;">eth{{ forloop.counter0 }}({{ network.target|default:"no target" }})</label>
|
||||||
<div class="col-sm-4">
|
<div class="col-sm-3">
|
||||||
<input type="text" class="form-control" name="net-mac-{{ forloop.counter0 }}" value="{{ network.mac }}"/>
|
<input type="text" class="form-control" name="net-mac-{{ forloop.counter0 }}" value="{{ network.mac }}"/>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-3">
|
<div class="col-sm-3">
|
||||||
<input type="text" class="form-control" name="net-source-{{ forloop.counter0 }}" value="{{ network.nic }}"/>
|
<input type="text" class="form-control" name="net-source-{{ forloop.counter0 }}" value="{{ network.nic }}" disabled/>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-3">
|
||||||
|
<select name="net-source-{{ forloop.counter0 }}" class="form-control" id="network_select" onchange="network_select_enable()">
|
||||||
|
{% for c_nets in compute_networks %}
|
||||||
|
{% if forloop.counter0 == 0 %}
|
||||||
|
<option value="{{ network.nic }}" selected hidden>{% trans "to Change" %}</option>
|
||||||
|
{% endif %}
|
||||||
|
<option value="{{ c_nets }}">{{ c_nets }}</option>
|
||||||
|
{% endfor %}
|
||||||
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% ifequal status 5 %}
|
{% ifequal status 5 %}
|
||||||
<button type="submit" class="btn btn-lg btn-success pull-right" name="change_network">{% trans "Change" %}</button>
|
<button type="submit" class="btn btn-lg btn-success pull-right" id="ali" name="change_network" disabled>{% trans "Change" %}</button>
|
||||||
{% else %}
|
{% else %}
|
||||||
<button class="btn btn-lg btn-success pull-right disabled" name="change_network">{% trans "Change" %}</button>
|
<button type="submit"class="btn btn-lg btn-success pull-right" id="ali" name="change_network" disabled>{% trans "Change" %}</button>
|
||||||
{% endifequal %}
|
{% endifequal %}
|
||||||
</form>
|
</form>
|
||||||
<div class="clearfix"></div>
|
<div class="clearfix"></div>
|
||||||
|
@ -1149,7 +1166,7 @@
|
||||||
<div class="tab-content">
|
<div class="tab-content">
|
||||||
<div role="tabpanel" class="tab-pane tab-pane-bordered active" id="destroy">
|
<div role="tabpanel" class="tab-pane tab-pane-bordered active" id="destroy">
|
||||||
<p>{% trans "Delete storage for instance?" %}</p>
|
<p>{% trans "Delete storage for instance?" %}</p>
|
||||||
{% if request.user.is_superuser or userinstace.is_delete %}
|
{% if request.user.is_superuser or userinstance.is_delete %}
|
||||||
{% ifequal status 3 %}
|
{% ifequal status 3 %}
|
||||||
<button class="btn btn-lg btn-success disabled pull-right" name="delete">{% trans "Destroy" %}</button>
|
<button class="btn btn-lg btn-success disabled pull-right" name="delete">{% trans "Destroy" %}</button>
|
||||||
{% else %}
|
{% else %}
|
||||||
|
@ -1188,20 +1205,15 @@
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
<script>
|
<script>
|
||||||
function open_console() {
|
function open_console(view_style) {
|
||||||
window.open('{% url 'console' %}?token={{ compute_id }}-{{ uuid }}', '', 'width=850,height=485')
|
window.open('{% url 'console' %}?token={{ compute_id }}-{{ uuid }}&view=' +view_style +'', '', 'width=850,height=600')
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<script>
|
<script>
|
||||||
function random_mac(net) {
|
function random_mac(net) {
|
||||||
var hexDigits = "0123456789abcdef";
|
$.getJSON('/instance/random_mac_address/', function(data) {
|
||||||
var macAddress="52:54:00:";
|
$('input[name="clone-net-mac-'+net+'"]').val(data['mac']);
|
||||||
for (var i=0; i<3; i++) {
|
});
|
||||||
macAddress+=hexDigits.charAt(Math.round(Math.random()*16));
|
|
||||||
macAddress+=hexDigits.charAt(Math.round(Math.random()*16));
|
|
||||||
if (i != 2) macAddress+=":";
|
|
||||||
}
|
|
||||||
$('input[name="clone-net-mac-'+net+'"]').val(macAddress);
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
<script>
|
<script>
|
||||||
|
@ -1301,7 +1313,11 @@
|
||||||
$("#console_select_listen_address option[value='" + console_listen_address + "']").prop('selected', true);
|
$("#console_select_listen_address option[value='" + console_listen_address + "']").prop('selected', true);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
{% if not request.user.is_superuser %}
|
{% if request.user.is_superuser %}
|
||||||
|
$(document).ready(function () {
|
||||||
|
random_mac(0);
|
||||||
|
});
|
||||||
|
{% else %}
|
||||||
$('#select_clone_name').on('change', function () {
|
$('#select_clone_name').on('change', function () {
|
||||||
update_clone_disk_name($(this).val());
|
update_clone_disk_name($(this).val());
|
||||||
guess_mac_address('#select_clone_name', 0);
|
guess_mac_address('#select_clone_name', 0);
|
||||||
|
@ -1321,6 +1337,16 @@
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
<script>
|
||||||
|
function network_select_enable(){
|
||||||
|
// set network button enabled
|
||||||
|
var selected = $('network_select').val();
|
||||||
|
if (selected != "to Change") {
|
||||||
|
$('button[name="change_network"]').removeAttr('disabled');
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
<script src="{% static "js/Chart.min.js" %}"></script>
|
<script src="{% static "js/Chart.min.js" %}"></script>
|
||||||
<script>
|
<script>
|
||||||
$('#chartgraphs').on('shown.bs.tab', function (event) {
|
$('#chartgraphs').on('shown.bs.tab', function (event) {
|
||||||
|
|
|
@ -31,133 +31,23 @@
|
||||||
{% if not all_host_vms %}
|
{% if not all_host_vms %}
|
||||||
<div class="col-lg-12">
|
<div class="col-lg-12">
|
||||||
<div class="alert alert-warning alert-dismissable">
|
<div class="alert alert-warning alert-dismissable">
|
||||||
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
||||||
<i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning:" %}</strong> {% trans "You don't have any Instance" %}
|
<i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning:" %}</strong> {% trans "You don't have any Instance" %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% else %}
|
{% else %}
|
||||||
<table class="table table-hover table-striped sortable-theme-bootstrap" data-sortable>
|
{% ifequal view_style "nongrouped" %}
|
||||||
<thead >
|
{% include 'instances_nongrouped.html' %}
|
||||||
<tr>
|
{% endifequal %}
|
||||||
<th>#</th>
|
{% ifequal view_style "grouped" %}
|
||||||
<th>Name<br>Description</th>
|
{% include 'instances_grouped.html' %}
|
||||||
<th>User</th>
|
{% endifequal %}
|
||||||
<th>Status</th>
|
|
||||||
<th>VCPU</th>
|
|
||||||
<th>Memory</th>
|
|
||||||
<th data-sortable="false" style="width:205px;">Actions & Mem Usage</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody class="searchable">
|
|
||||||
{% for host, inst in all_host_vms.items %}
|
|
||||||
<tr class="success" style="font-size:16px">
|
|
||||||
<td>{{ forloop.counter }}</td>
|
|
||||||
<td><a href="{% url 'overview' host.0 %}">{{ host.1 }}</a></td>
|
|
||||||
<td></td>
|
|
||||||
<td>{% ifequal host.2 1 %}<span class="label label-success">{% trans "Active" %}
|
|
||||||
</span>{% endifequal %}
|
|
||||||
{% ifequal host.2 2 %}<span class="label label-danger">{% trans "Not Active" %}
|
|
||||||
</span>{% endifequal %}
|
|
||||||
{% ifequal host.2 3 %}<span class="label label-danger">{% trans "Connection Failed" %}
|
|
||||||
</span>{% endifequal %}
|
|
||||||
</td>
|
|
||||||
<td style="text-align:center;">{{ host.3 }}</td>
|
|
||||||
<td style="text-align:right;">{{ host.4|filesizeformat }}</td>
|
|
||||||
<td style="text-align:left;">
|
|
||||||
<div class="progress-bar-success" role="progressbar" style="width: {{ host.5 }}%" aria-valuenow="{{ host.5 }}" aria-valuemin="0" aria-valuemax="100">{{ host.5 }}%</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
{% for vm, info in inst.items %}
|
|
||||||
<tr>
|
|
||||||
<td></td>
|
|
||||||
<td>{{ forloop.counter }}   <a href="{% url 'instance' host.0 vm %}">{{ vm }}</a><br><small><em>{{ info.title }}</em></small></td>
|
|
||||||
<td><small><em>{% if info.userinstances.count > 0 %}{{ info.userinstances.first_user.user.username }}{% if info.userinstances.count > 1 %} (+{{ info.userinstances.count|add:"-1" }}){% endif %}{% endif %}</em></small></td>
|
|
||||||
<td>{% ifequal info.status 1 %}
|
|
||||||
<span class="text-success">{% trans "Active" %}</span>
|
|
||||||
{% endifequal %}
|
|
||||||
{% ifequal info.status 5 %}
|
|
||||||
<span class="text-danger">{% trans "Off" %}</span>
|
|
||||||
{% endifequal %}
|
|
||||||
{% ifequal info.status 3 %}
|
|
||||||
<span class="text-warning">{% trans "Suspend" %}</span>
|
|
||||||
{% endifequal %}
|
|
||||||
</td>
|
|
||||||
<td style="text-align:center;">{{ info.vcpu }}</td>
|
|
||||||
<td style="text-align:right;">{{ info.memory |filesizeformat }}</td>
|
|
||||||
<td><form action="" method="post" role="form">{% csrf_token %}
|
|
||||||
<input type="hidden" name="name" value="{{ vm }}"/>
|
|
||||||
<input type="hidden" name="compute_id" value="{{ host.0 }}"/>
|
|
||||||
{% ifequal info.status 5 %}
|
|
||||||
{% if info.is_template %}
|
|
||||||
<button class="btn btn-sm btn-default" type="button" name="clone" title="{% trans "Clone" %}" onclick="goto_instance_clone({{ host.0 }}, '{{ vm }}');">
|
|
||||||
<span class="glyphicon glyphicon-duplicate"></span>
|
|
||||||
</button>
|
|
||||||
{% else %}
|
|
||||||
<button class="btn btn-sm btn-default" type="submit" name="poweron" title="{% trans "Power On" %}">
|
|
||||||
<span class="glyphicon glyphicon-play"></span>
|
|
||||||
</button>
|
|
||||||
{% endif %}
|
|
||||||
<button class="btn btn-sm btn-default disabled" title="{% trans "Suspend" %}">
|
|
||||||
<span class="glyphicon glyphicon-pause"></span>
|
|
||||||
</button>
|
|
||||||
<button class="btn btn-sm btn-default disabled" title="{% trans "Power Off" %}">
|
|
||||||
<span class="glyphicon glyphicon-off"></span>
|
|
||||||
</button>
|
|
||||||
<button class="btn btn-sm btn-default disabled" title="{% trans "Power Cycle" %}">
|
|
||||||
<span class="glyphicon glyphicon-refresh"></span>
|
|
||||||
</button>
|
|
||||||
<button class="btn btn-sm btn-default disabled" title="{% trans "VNC Console" %}">
|
|
||||||
<span class="glyphicon glyphicon-eye-open"></span>
|
|
||||||
</button>
|
|
||||||
{% endifequal %}
|
|
||||||
{% ifequal info.status 3 %}
|
|
||||||
<button class="btn btn-sm btn-default" type="submit" name="resume" title="{% trans "Resume" %}">
|
|
||||||
<span class="glyphicon glyphicon-play"></span>
|
|
||||||
</button>
|
|
||||||
<button class="btn btn-sm btn-default disabled" title="{% trans "Suspend" %}">
|
|
||||||
<span class="glyphicon glyphicon-pause"></span>
|
|
||||||
</button>
|
|
||||||
<button class="btn btn-sm btn-default disabled" title="{% trans "Power Off" %}">
|
|
||||||
<span class="glyphicon glyphicon-off"></span>
|
|
||||||
</button>
|
|
||||||
<button class="btn btn-sm btn-default disabled" title="{% trans "Power Cycle" %}">
|
|
||||||
<span class="glyphicon glyphicon-refresh"></span>
|
|
||||||
</button>
|
|
||||||
<button class="btn btn-sm btn-default disabled" title="{% trans "VNC Console" %}">
|
|
||||||
<span class="glyphicon glyphicon-eye-open"></span>
|
|
||||||
</button>
|
|
||||||
{% endifequal %}
|
|
||||||
{% ifequal info.status 1 %}
|
|
||||||
<button class="btn btn-sm btn-default disabled" title="{% trans "Power On" %}">
|
|
||||||
<span class="glyphicon glyphicon-play"></span>
|
|
||||||
</button>
|
|
||||||
<button class="btn btn-sm btn-default" type="submit" name="suspend" title="{% trans "Suspend" %}">
|
|
||||||
<span class="glyphicon glyphicon-pause"></span>
|
|
||||||
</button>
|
|
||||||
<button class="btn btn-sm btn-default" type="submit" name="poweroff" title="{% trans "Power Off" %}" onclick="return confirm('Are you sure?')">
|
|
||||||
<span class="glyphicon glyphicon-off"></span>
|
|
||||||
</button>
|
|
||||||
<button class="btn btn-sm btn-default" type="submit" name="powercycle" title="{% trans "Power Cycle" %}" onclick="return confirm('Are you sure?')">
|
|
||||||
<span class="glyphicon glyphicon-refresh"></span>
|
|
||||||
</button>
|
|
||||||
<a href="#" class="btn btn-sm btn-default" onclick='open_console("{{ host.0 }}-{{ info.uuid }}")' title="{% trans "Console" %}">
|
|
||||||
<span class="glyphicon glyphicon-eye-open"></span>
|
|
||||||
</a>
|
|
||||||
{% endifequal %}
|
|
||||||
</form>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
{% endfor %}
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% else %}
|
{% else %}
|
||||||
{% if not all_user_vms %}
|
{% if not all_user_vms %}
|
||||||
<div class="col-lg-12">
|
<div class="col-lg-12">
|
||||||
<div class="alert alert-warning alert-dismissable">
|
<div class="alert alert-warning alert-dismissable">
|
||||||
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
||||||
<i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning:" %}</strong> {% trans "You don't have any Instance" %}
|
<i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning:" %}</strong> {% trans "You don't have any Instance" %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
122
instances/templates/instances_grouped.html
Normal file
|
@ -0,0 +1,122 @@
|
||||||
|
{% load i18n %}
|
||||||
|
<table class="table table-hover table-striped sortable-theme-bootstrap">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>#</th>
|
||||||
|
<th>{% trans "Name" %}<br>{% trans "Description" %}</th></th>
|
||||||
|
<th>{% trans "User"%}</th>
|
||||||
|
<th>{% trans "Status" %}</th>
|
||||||
|
<th>{% trans "VCPU" %}</th>
|
||||||
|
<th>{% trans "Memory" %}</th>
|
||||||
|
<th data-sortable="false" style="width:205px;">{% trans "Actions & Mem Usage" %}</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody class="searchable">
|
||||||
|
{% for host, inst in all_host_vms.items %}
|
||||||
|
<tr class="active" style="font-weight: bold;border-bottom: 2px solid darkgray;border-top: 2px solid darkgray;">
|
||||||
|
<td><span class="fa fa-server"></span> </td>
|
||||||
|
<td><a href="{% url 'overview' host.0 %}">{{ host.1 }}</a></td>
|
||||||
|
<td></td>
|
||||||
|
<td>
|
||||||
|
{% ifequal host.2 1 %}<span class="label label-success">{% trans "Active" %}</span>{% endifequal %}
|
||||||
|
{% ifequal host.2 2 %}<span class="label label-danger">{% trans "Not Active" %}</span>{% endifequal %}
|
||||||
|
{% ifequal host.2 3 %}<span class="label label-danger">{% trans "Connection Failed" %}</span>{% endifequal %}
|
||||||
|
</td>
|
||||||
|
<td style="text-align:center;">{{ host.3 }}</td>
|
||||||
|
<td style="text-align:right;">{{ host.4|filesizeformat }}</td>
|
||||||
|
<td style="text-align:left;">
|
||||||
|
<div class="progress-bar progress-bar-success" role="progressbar" style="width: {{ host.5 }}%"
|
||||||
|
aria-valuenow="{{ host.5 }}" aria-valuemin="0" aria-valuemax="100">{{ host.5 }}%
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
{% for vm, info in inst.items %}
|
||||||
|
<tr>
|
||||||
|
<td style="text-align: right">{{ forloop.counter }} </td>
|
||||||
|
<td>  <a href="{% url 'instance' host.0 vm %}">{{ vm }}</a><br>
|
||||||
|
<small><em>{{ info.title }}</em></small>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<small><em>
|
||||||
|
{% if info.userinstances.count > 0 %} {{ info.userinstances.first_user.user.username }}
|
||||||
|
{% if info.userinstances.count > 1 %} (+{{ info.userinstances.count|add:"-1" }}){% endif %}
|
||||||
|
{% endif %}
|
||||||
|
</em>
|
||||||
|
</small>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{% ifequal info.status 1 %}<span class="text-success">{% trans "Active" %}</span>{% endifequal %}
|
||||||
|
{% ifequal info.status 5 %}<span class="text-danger">{% trans "Off" %}</span>{% endifequal %}
|
||||||
|
{% ifequal info.status 3 %}<span class="text-warning">{% trans "Suspend" %}</span>{% endifequal %}
|
||||||
|
</td>
|
||||||
|
<td style="text-align:center;">{{ info.vcpu }}</td>
|
||||||
|
<td style="text-align:right;">{{ info.memory |filesizeformat }}</td>
|
||||||
|
<td>
|
||||||
|
<form action="" method="post" role="form">{% csrf_token %}
|
||||||
|
<input type="hidden" name="name" value="{{ vm }}"/>
|
||||||
|
<input type="hidden" name="compute_id" value="{{ host.0 }}"/>
|
||||||
|
{% ifequal info.status 5 %}
|
||||||
|
{% if info.is_template %}
|
||||||
|
<button class="btn btn-sm btn-default" type="button" name="clone" title="{% trans "Clone" %}" onclick="goto_instance_clone({{ host.0 }}, '{{ vm }}');">
|
||||||
|
<span class="glyphicon glyphicon-duplicate"></span>
|
||||||
|
</button>
|
||||||
|
{% else %}
|
||||||
|
<button class="btn btn-sm btn-default" type="submit" name="poweron" title="{% trans "Power On" %}">
|
||||||
|
<span class="glyphicon glyphicon-play"></span>
|
||||||
|
</button>
|
||||||
|
{% endif %}
|
||||||
|
<button class="btn btn-sm btn-default disabled" title="{% trans "Suspend" %}">
|
||||||
|
<span class="glyphicon glyphicon-pause"></span>
|
||||||
|
</button>
|
||||||
|
<button class="btn btn-sm btn-default disabled" title="{% trans "Power Off" %}">
|
||||||
|
<span class="glyphicon glyphicon-off"></span>
|
||||||
|
</button>
|
||||||
|
<button class="btn btn-sm btn-default disabled" title="{% trans "Power Cycle" %}">
|
||||||
|
<span class="glyphicon glyphicon-refresh"></span>
|
||||||
|
</button>
|
||||||
|
<button class="btn btn-sm btn-default disabled" title="{% trans "VNC Console" %}">
|
||||||
|
<span class="glyphicon glyphicon-eye-open"></span>
|
||||||
|
</button>
|
||||||
|
{% endifequal %}
|
||||||
|
{% ifequal info.status 3 %}
|
||||||
|
<button class="btn btn-sm btn-default" type="submit" name="resume" title="{% trans "Resume" %}">
|
||||||
|
<span class="glyphicon glyphicon-play"></span>
|
||||||
|
</button>
|
||||||
|
<button class="btn btn-sm btn-default disabled" title="{% trans "Suspend" %}">
|
||||||
|
<span class="glyphicon glyphicon-pause"></span>
|
||||||
|
</button>
|
||||||
|
<button class="btn btn-sm btn-default disabled" title="{% trans "Power Off" %}">
|
||||||
|
<span class="glyphicon glyphicon-off"></span>
|
||||||
|
</button>
|
||||||
|
<button class="btn btn-sm btn-default disabled" title="{% trans "Power Cycle" %}">
|
||||||
|
<span class="glyphicon glyphicon-refresh"></span>
|
||||||
|
</button>
|
||||||
|
<button class="btn btn-sm btn-default disabled" title="{% trans "VNC Console" %}">
|
||||||
|
<span class="glyphicon glyphicon-eye-open"></span>
|
||||||
|
</button>
|
||||||
|
{% endifequal %}
|
||||||
|
{% ifequal info.status 1 %}
|
||||||
|
<button class="btn btn-sm btn-default disabled" title="{% trans "Power On" %}">
|
||||||
|
<span class="glyphicon glyphicon-play"></span>
|
||||||
|
</button>
|
||||||
|
<button class="btn btn-sm btn-default" type="submit" name="suspend" title="{% trans "Suspend" %}">
|
||||||
|
<span class="glyphicon glyphicon-pause"></span>
|
||||||
|
</button>
|
||||||
|
<button class="btn btn-sm btn-default" type="submit" name="poweroff" title="{% trans "Power Off" %}" onclick="return confirm('Are you sure?')">
|
||||||
|
<span class="glyphicon glyphicon-off"></span>
|
||||||
|
</button>
|
||||||
|
<button class="btn btn-sm btn-default" type="submit" name="powercycle" title="{% trans "Power Cycle" %}" onclick="return confirm('Are you sure?')">
|
||||||
|
<span class="glyphicon glyphicon-refresh"></span>
|
||||||
|
</button>
|
||||||
|
<a href="#" class="btn btn-sm btn-default" onclick='open_console("{{ host.0 }}-{{ info.uuid }}")' title="{% trans "Console" %}">
|
||||||
|
<span class="glyphicon glyphicon-eye-open"></span>
|
||||||
|
</a>
|
||||||
|
{% endifequal %}
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
92
instances/templates/instances_nongrouped.html
Normal file
|
@ -0,0 +1,92 @@
|
||||||
|
{% load i18n %}
|
||||||
|
<table class="table table-hover table-striped sortable-theme-bootstrap" data-sortable>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Name<br>Description</th>
|
||||||
|
<th>Host<br>User</th>
|
||||||
|
<th>Status</th>
|
||||||
|
<th>VCPU</th>
|
||||||
|
<th>Memory</th>
|
||||||
|
<th data-sortable="false" style="width:205px;">Actions</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody class="searchable">
|
||||||
|
{% for host, inst in all_host_vms.items %}
|
||||||
|
{% for vm, info in inst.items %}
|
||||||
|
<tr>
|
||||||
|
<td><a href="{% url 'instance' host.0 vm %}">{{ vm }}</a><br><small><em>{{ info.title }}</em></small></td>
|
||||||
|
<td><a href="{% url 'overview' host.0 %}">{{ host.1 }}</a><br><small><em>{% if info.userinstances.count > 0 %}{{ info.userinstances.first_user.user.username }}{% if info.userinstances.count > 1 %} (+{{ info.userinstances.count|add:"-1" }}){% endif %}{% endif %}</em></small></td>
|
||||||
|
<td>
|
||||||
|
{% ifequal info.status 1 %}<span class="text-success">{% trans "Active" %}</span>{% endifequal %}
|
||||||
|
{% ifequal info.status 5 %}<span class="text-danger">{% trans "Off" %}</span>{% endifequal %}
|
||||||
|
{% ifequal info.status 3 %}<span class="text-warning">{% trans "Suspend" %}</span>{% endifequal %}
|
||||||
|
</td>
|
||||||
|
<td>{{ info.vcpu }}</td>
|
||||||
|
<td>{{ info.memory|filesizeformat }}</td>
|
||||||
|
<td><form action="" method="post" role="form">{% csrf_token %}
|
||||||
|
<input type="hidden" name="name" value="{{ vm }}"/>
|
||||||
|
<input type="hidden" name="compute_id" value="{{ host.0 }}"/>
|
||||||
|
{% ifequal info.status 5 %}
|
||||||
|
{% if info.is_template %}
|
||||||
|
<button class="btn btn-sm btn-default" type="button" name="clone" title="{% trans "Clone" %}" onclick="goto_instance_clone({{ host.0 }}, '{{ vm }}');">
|
||||||
|
<span class="glyphicon glyphicon-duplicate"></span>
|
||||||
|
</button>
|
||||||
|
{% else %}
|
||||||
|
<button class="btn btn-sm btn-default" type="submit" name="poweron" title="{% trans "Power On" %}">
|
||||||
|
<span class="glyphicon glyphicon-play"></span>
|
||||||
|
</button>
|
||||||
|
{% endif %}
|
||||||
|
<button class="btn btn-sm btn-default disabled" title="{% trans "Suspend" %}">
|
||||||
|
<span class="glyphicon glyphicon-pause"></span>
|
||||||
|
</button>
|
||||||
|
<button class="btn btn-sm btn-default disabled" title="{% trans "Power Off" %}">
|
||||||
|
<span class="glyphicon glyphicon-off"></span>
|
||||||
|
</button>
|
||||||
|
<button class="btn btn-sm btn-default disabled" title="{% trans "Power Cycle" %}">
|
||||||
|
<span class="glyphicon glyphicon-refresh"></span>
|
||||||
|
</button>
|
||||||
|
<button class="btn btn-sm btn-default disabled" title="{% trans "VNC Console" %}">
|
||||||
|
<span class="glyphicon glyphicon-eye-open"></span>
|
||||||
|
</button>
|
||||||
|
{% endifequal %}
|
||||||
|
{% ifequal info.status 3 %}
|
||||||
|
<button class="btn btn-sm btn-default" type="submit" name="resume" title="{% trans "Resume" %}">
|
||||||
|
<span class="glyphicon glyphicon-play"></span>
|
||||||
|
</button>
|
||||||
|
<button class="btn btn-sm btn-default disabled" title="{% trans "Suspend" %}">
|
||||||
|
<span class="glyphicon glyphicon-pause"></span>
|
||||||
|
</button>
|
||||||
|
<button class="btn btn-sm btn-default disabled" title="{% trans "Power Off" %}">
|
||||||
|
<span class="glyphicon glyphicon-off"></span>
|
||||||
|
</button>
|
||||||
|
<button class="btn btn-sm btn-default disabled" title="{% trans "Power Cycle" %}">
|
||||||
|
<span class="glyphicon glyphicon-refresh"></span>
|
||||||
|
</button>
|
||||||
|
<button class="btn btn-sm btn-default disabled" title="{% trans "VNC Console" %}">
|
||||||
|
<span class="glyphicon glyphicon-eye-open"></span>
|
||||||
|
</button>
|
||||||
|
{% endifequal %}
|
||||||
|
{% ifequal info.status 1 %}
|
||||||
|
<button class="btn btn-sm btn-default disabled" title="{% trans "Power On" %}">
|
||||||
|
<span class="glyphicon glyphicon-play"></span>
|
||||||
|
</button>
|
||||||
|
<button class="btn btn-sm btn-default" type="submit" name="suspend" title="{% trans "Suspend" %}">
|
||||||
|
<span class="glyphicon glyphicon-pause"></span>
|
||||||
|
</button>
|
||||||
|
<button class="btn btn-sm btn-default" type="submit" name="poweroff" title="{% trans "Power Off" %}" onclick="return confirm('Are you sure?')">
|
||||||
|
<span class="glyphicon glyphicon-off"></span>
|
||||||
|
</button>
|
||||||
|
<button class="btn btn-sm btn-default" type="submit" name="powercycle" title="{% trans "Power Cycle" %}" onclick="return confirm('Are you sure?')">
|
||||||
|
<span class="glyphicon glyphicon-refresh"></span>
|
||||||
|
</button>
|
||||||
|
<a href="#" class="btn btn-sm btn-default" onclick='open_console("{{ host.0 }}-{{ info.uuid }}")' title="{% trans "Console" %}">
|
||||||
|
<span class="glyphicon glyphicon-eye-open"></span>
|
||||||
|
</a>
|
||||||
|
{% endifequal %}
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
|
@ -2,18 +2,12 @@ from django.conf.urls import url
|
||||||
from . import views
|
from . import views
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(r'^(?P<compute_id>[0-9]+)/(?P<vname>[\w\-\.]+)/$',
|
url(r'^(?P<compute_id>[0-9]+)/(?P<vname>[\w\-\.]+)/$', views.instance, name='instance'),
|
||||||
views.instance, name='instance'),
|
url(r'^statistics/(?P<compute_id>[0-9]+)/(?P<vname>[\w\-\.]+)/$', views.inst_graph, name='inst_graph'),
|
||||||
url(r'^statistics/(?P<compute_id>[0-9]+)/(?P<vname>[\w\-\.]+)/$',
|
url(r'^status/(?P<compute_id>[0-9]+)/(?P<vname>[\w\-\.]+)/$', views.inst_status, name='inst_status'),
|
||||||
views.inst_graph, name='inst_graph'),
|
url(r'^guess_mac_address/(?P<vname>[\w\-\.]+)/$', views.guess_mac_address, name='guess_mac_address'),
|
||||||
url(r'^status/(?P<compute_id>[0-9]+)/(?P<vname>[\w\-\.]+)/$',
|
url(r'^guess_clone_name/$', views.guess_clone_name, name='guess_clone_name'),
|
||||||
views.inst_status, name='inst_status'),
|
url(r'^random_mac_address/$', views.random_mac_address, name='random_mac_address'),
|
||||||
url(r'^guess_mac_address/(?P<vname>[\w\-\.]+)/$',
|
url(r'^check_instance/(?P<vname>[\w\-\.]+)/$', views.check_instance, name='check_instance'),
|
||||||
views.guess_mac_address, name='guess_mac_address'),
|
url(r'^sshkeys/(?P<vname>[\w\-\.]+)/$', views.sshkeys, name='sshkeys'),
|
||||||
url(r'^guess_clone_name/$',
|
|
||||||
views.guess_clone_name, name='guess_clone_name'),
|
|
||||||
url(r'^check_instance/(?P<vname>[\w\-\.]+)/$',
|
|
||||||
views.check_instance, name='check_instance'),
|
|
||||||
url(r'^sshkeys/(?P<vname>[\w\-\.]+)/$',
|
|
||||||
views.sshkeys, name='sshkeys'),
|
|
||||||
]
|
]
|
||||||
|
|
|
@ -5,7 +5,7 @@ import socket
|
||||||
import crypt
|
import crypt
|
||||||
import re
|
import re
|
||||||
import string
|
import string
|
||||||
from random import choice
|
import random
|
||||||
from bisect import insort
|
from bisect import insort
|
||||||
from django.http import HttpResponse, HttpResponseRedirect
|
from django.http import HttpResponse, HttpResponseRedirect
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
|
@ -24,6 +24,7 @@ from vrtManager.util import randomPasswd
|
||||||
from libvirt import libvirtError, VIR_DOMAIN_XML_SECURE
|
from libvirt import libvirtError, VIR_DOMAIN_XML_SECURE
|
||||||
from logs.views import addlogmsg
|
from logs.views import addlogmsg
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
from django.contrib import messages
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
|
@ -46,7 +47,7 @@ def instances(request):
|
||||||
error_messages = []
|
error_messages = []
|
||||||
all_host_vms = {}
|
all_host_vms = {}
|
||||||
all_user_vms = {}
|
all_user_vms = {}
|
||||||
computes = Compute.objects.all()
|
computes = Compute.objects.all().order_by("name")
|
||||||
|
|
||||||
def get_userinstances_info(instance):
|
def get_userinstances_info(instance):
|
||||||
info = {}
|
info = {}
|
||||||
|
@ -72,18 +73,18 @@ def instances(request):
|
||||||
if check_uuid.uuid != info['uuid']:
|
if check_uuid.uuid != info['uuid']:
|
||||||
check_uuid.save()
|
check_uuid.save()
|
||||||
|
|
||||||
all_host_vms[comp_info["id"],
|
all_host_vms[comp["id"],
|
||||||
comp_info["name"],
|
comp["name"],
|
||||||
comp_info["status"],
|
comp["status"],
|
||||||
comp_info["cpu"],
|
comp["cpu"],
|
||||||
comp_info["mem_size"],
|
comp["mem_size"],
|
||||||
comp_info["mem_perc"]][vm]['is_template'] = check_uuid.is_template
|
comp["mem_perc"]][vm]['is_template'] = check_uuid.is_template
|
||||||
all_host_vms[comp_info["id"],
|
all_host_vms[comp["id"],
|
||||||
comp_info["name"],
|
comp["name"],
|
||||||
comp_info["status"],
|
comp["status"],
|
||||||
comp_info["cpu"],
|
comp["cpu"],
|
||||||
comp_info["mem_size"],
|
comp["mem_size"],
|
||||||
comp_info["mem_perc"]][vm]['userinstances'] = get_userinstances_info(check_uuid)
|
comp["mem_perc"]][vm]['userinstances'] = get_userinstances_info(check_uuid)
|
||||||
except Instance.DoesNotExist:
|
except Instance.DoesNotExist:
|
||||||
check_uuid = Instance(compute_id=comp["id"], name=vm, uuid=info['uuid'])
|
check_uuid = Instance(compute_id=comp["id"], name=vm, uuid=info['uuid'])
|
||||||
check_uuid.save()
|
check_uuid.save()
|
||||||
|
@ -192,6 +193,8 @@ def instances(request):
|
||||||
error_messages.append(lib_err)
|
error_messages.append(lib_err)
|
||||||
addlogmsg(request.user.username, instance.name, lib_err.message)
|
addlogmsg(request.user.username, instance.name, lib_err.message)
|
||||||
|
|
||||||
|
view_style = settings.VIEW_INSTANCES_LIST_STYLE
|
||||||
|
|
||||||
return render(request, 'instances.html', locals())
|
return render(request, 'instances.html', locals())
|
||||||
|
|
||||||
|
|
||||||
|
@ -203,7 +206,7 @@ def instance(request, compute_id, vname):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
error_messages = []
|
error_messages = []
|
||||||
messages = []
|
#messages = []
|
||||||
compute = get_object_or_404(Compute, pk=compute_id)
|
compute = get_object_or_404(Compute, pk=compute_id)
|
||||||
computes = Compute.objects.all().order_by('name')
|
computes = Compute.objects.all().order_by('name')
|
||||||
computes_count = computes.count()
|
computes_count = computes.count()
|
||||||
|
@ -213,14 +216,14 @@ def instance(request, compute_id, vname):
|
||||||
console_types = settings.QEMU_CONSOLE_TYPES
|
console_types = settings.QEMU_CONSOLE_TYPES
|
||||||
console_listen_addresses = settings.QEMU_CONSOLE_LISTEN_ADDRESSES
|
console_listen_addresses = settings.QEMU_CONSOLE_LISTEN_ADDRESSES
|
||||||
try:
|
try:
|
||||||
userinstace = UserInstance.objects.get(instance__compute_id=compute_id,
|
userinstance = UserInstance.objects.get(instance__compute_id=compute_id,
|
||||||
instance__name=vname,
|
instance__name=vname,
|
||||||
user__id=request.user.id)
|
user__id=request.user.id)
|
||||||
except UserInstance.DoesNotExist:
|
except UserInstance.DoesNotExist:
|
||||||
userinstace = None
|
userinstance = None
|
||||||
|
|
||||||
if not request.user.is_superuser:
|
if not request.user.is_superuser:
|
||||||
if not userinstace:
|
if not userinstance:
|
||||||
return HttpResponseRedirect(reverse('index'))
|
return HttpResponseRedirect(reverse('index'))
|
||||||
|
|
||||||
def show_clone_disk(disks, vname=''):
|
def show_clone_disk(disks, vname=''):
|
||||||
|
@ -325,7 +328,7 @@ def instance(request, compute_id, vname):
|
||||||
compute.password,
|
compute.password,
|
||||||
compute.type,
|
compute.type,
|
||||||
vname)
|
vname)
|
||||||
|
compute_networks = sorted(conn.get_networks())
|
||||||
status = conn.get_status()
|
status = conn.get_status()
|
||||||
autostart = conn.get_autostart()
|
autostart = conn.get_autostart()
|
||||||
vcpu = conn.get_vcpu()
|
vcpu = conn.get_vcpu()
|
||||||
|
@ -366,6 +369,8 @@ def instance(request, compute_id, vname):
|
||||||
default_cache = settings.INSTANCE_VOLUME_DEFAULT_CACHE
|
default_cache = settings.INSTANCE_VOLUME_DEFAULT_CACHE
|
||||||
default_format = settings.INSTANCE_VOLUME_DEFAULT_FORMAT
|
default_format = settings.INSTANCE_VOLUME_DEFAULT_FORMAT
|
||||||
formats = conn.get_image_formats()
|
formats = conn.get_image_formats()
|
||||||
|
|
||||||
|
|
||||||
busses = conn.get_busses()
|
busses = conn.get_busses()
|
||||||
default_bus = settings.INSTANCE_VOLUME_DEFAULT_BUS
|
default_bus = settings.INSTANCE_VOLUME_DEFAULT_BUS
|
||||||
show_access_root_password = settings.SHOW_ACCESS_ROOT_PASSWORD
|
show_access_root_password = settings.SHOW_ACCESS_ROOT_PASSWORD
|
||||||
|
@ -408,7 +413,7 @@ def instance(request, compute_id, vname):
|
||||||
addlogmsg(request.user.username, instance.name, msg)
|
addlogmsg(request.user.username, instance.name, msg)
|
||||||
return HttpResponseRedirect(request.get_full_path() + '#powerforce')
|
return HttpResponseRedirect(request.get_full_path() + '#powerforce')
|
||||||
|
|
||||||
if 'delete' in request.POST and (request.user.is_superuser or userinstace.is_delete):
|
if 'delete' in request.POST and (request.user.is_superuser or userinstance.is_delete):
|
||||||
if conn.get_status() == 1:
|
if conn.get_status() == 1:
|
||||||
conn.force_shutdown()
|
conn.force_shutdown()
|
||||||
if request.POST.get('delete_disk', ''):
|
if request.POST.get('delete_disk', ''):
|
||||||
|
@ -447,7 +452,7 @@ def instance(request, compute_id, vname):
|
||||||
addlogmsg(request.user.username, instance.name, msg)
|
addlogmsg(request.user.username, instance.name, msg)
|
||||||
|
|
||||||
if result['return'] == 'success':
|
if result['return'] == 'success':
|
||||||
messages.append(msg)
|
messages.success(request, msg)
|
||||||
else:
|
else:
|
||||||
error_messages.append(msg)
|
error_messages.append(msg)
|
||||||
else:
|
else:
|
||||||
|
@ -469,14 +474,14 @@ def instance(request, compute_id, vname):
|
||||||
addlogmsg(request.user.username, instance.name, msg)
|
addlogmsg(request.user.username, instance.name, msg)
|
||||||
|
|
||||||
if result['return'] == 'success':
|
if result['return'] == 'success':
|
||||||
messages.append(msg)
|
messages.success(request, msg)
|
||||||
else:
|
else:
|
||||||
error_messages.append(msg)
|
error_messages.append(msg)
|
||||||
else:
|
else:
|
||||||
msg = _("Please shutdow down your instance and then try again")
|
msg = _("Please shutdow down your instance and then try again")
|
||||||
error_messages.append(msg)
|
error_messages.append(msg)
|
||||||
|
|
||||||
if 'resize' in request.POST and (request.user.is_superuser or request.user.is_staff or userinstace.is_change):
|
if 'resize' in request.POST and (request.user.is_superuser or request.user.is_staff or userinstance.is_change):
|
||||||
new_vcpu = request.POST.get('vcpu', '')
|
new_vcpu = request.POST.get('vcpu', '')
|
||||||
new_cur_vcpu = request.POST.get('cur_vcpu', '')
|
new_cur_vcpu = request.POST.get('cur_vcpu', '')
|
||||||
new_memory = request.POST.get('memory', '')
|
new_memory = request.POST.get('memory', '')
|
||||||
|
@ -509,14 +514,13 @@ def instance(request, compute_id, vname):
|
||||||
addlogmsg(request.user.username, instance.name, msg)
|
addlogmsg(request.user.username, instance.name, msg)
|
||||||
return HttpResponseRedirect(request.get_full_path() + '#resize')
|
return HttpResponseRedirect(request.get_full_path() + '#resize')
|
||||||
|
|
||||||
if 'addvolume' in request.POST and (request.user.is_superuser or userinstace.is_change):
|
if 'addvolume' in request.POST and (request.user.is_superuser or userinstance.is_change):
|
||||||
connCreate = wvmCreate(compute.hostname,
|
connCreate = wvmCreate(compute.hostname,
|
||||||
compute.login,
|
compute.login,
|
||||||
compute.password,
|
compute.password,
|
||||||
compute.type)
|
compute.type)
|
||||||
storage = request.POST.get('storage', '')
|
storage = request.POST.get('storage', '')
|
||||||
name = request.POST.get('name', '')
|
name = request.POST.get('name', '')
|
||||||
extension = request.POST.get('extension', '')
|
|
||||||
format = request.POST.get('format', '')
|
format = request.POST.get('format', '')
|
||||||
size = request.POST.get('size', 0)
|
size = request.POST.get('size', 0)
|
||||||
meta_prealloc = request.POST.get('meta_prealloc', False)
|
meta_prealloc = request.POST.get('meta_prealloc', False)
|
||||||
|
@ -524,7 +528,7 @@ def instance(request, compute_id, vname):
|
||||||
cache = request.POST.get('cache', '')
|
cache = request.POST.get('cache', '')
|
||||||
target = get_new_disk_dev(disks, bus)
|
target = get_new_disk_dev(disks, bus)
|
||||||
|
|
||||||
path = connCreate.create_volume(storage, name, size, format, meta_prealloc, extension)
|
path = connCreate.create_volume(storage, name, size, format, meta_prealloc)
|
||||||
conn.attach_disk(path, target, subdriver=format, cache=cache, targetbus=bus)
|
conn.attach_disk(path, target, subdriver=format, cache=cache, targetbus=bus)
|
||||||
msg = _('Attach new disk')
|
msg = _('Attach new disk')
|
||||||
addlogmsg(request.user.username, instance.name, msg)
|
addlogmsg(request.user.username, instance.name, msg)
|
||||||
|
@ -565,7 +569,7 @@ def instance(request, compute_id, vname):
|
||||||
conn.snapshot_revert(snap_name)
|
conn.snapshot_revert(snap_name)
|
||||||
msg = _("Successful revert snapshot: ")
|
msg = _("Successful revert snapshot: ")
|
||||||
msg += snap_name
|
msg += snap_name
|
||||||
messages.append(msg)
|
messages.success(request, msg)
|
||||||
msg = _("Revert snapshot")
|
msg = _("Revert snapshot")
|
||||||
addlogmsg(request.user.username, instance.name, msg)
|
addlogmsg(request.user.username, instance.name, msg)
|
||||||
|
|
||||||
|
@ -602,7 +606,7 @@ def instance(request, compute_id, vname):
|
||||||
addlogmsg(request.user.username, instance.name, msg)
|
addlogmsg(request.user.username, instance.name, msg)
|
||||||
return HttpResponseRedirect(request.get_full_path() + '#xmledit')
|
return HttpResponseRedirect(request.get_full_path() + '#xmledit')
|
||||||
|
|
||||||
if request.user.is_superuser or userinstace.is_vnc:
|
if request.user.is_superuser or userinstance.is_vnc:
|
||||||
if 'set_console_passwd' in request.POST:
|
if 'set_console_passwd' in request.POST:
|
||||||
if request.POST.get('auto_pass', ''):
|
if request.POST.get('auto_pass', ''):
|
||||||
passwd = randomPasswd()
|
passwd = randomPasswd()
|
||||||
|
@ -686,6 +690,8 @@ def instance(request, compute_id, vname):
|
||||||
conn.change_network(network_data)
|
conn.change_network(network_data)
|
||||||
msg = _("Edit network")
|
msg = _("Edit network")
|
||||||
addlogmsg(request.user.username, instance.name, msg)
|
addlogmsg(request.user.username, instance.name, msg)
|
||||||
|
msg = _("Network Devices are changed. Please reboot instance to activate.")
|
||||||
|
messages.success(request, msg)
|
||||||
return HttpResponseRedirect(request.get_full_path() + '#network')
|
return HttpResponseRedirect(request.get_full_path() + '#network')
|
||||||
|
|
||||||
if 'add_owner' in request.POST:
|
if 'add_owner' in request.POST:
|
||||||
|
@ -905,10 +911,10 @@ def inst_graph(request, compute_id, vname):
|
||||||
response.write(data)
|
response.write(data)
|
||||||
return response
|
return response
|
||||||
|
|
||||||
@login_required
|
|
||||||
def guess_mac_address(request, vname):
|
def _get_dhcp_mac_address(vname):
|
||||||
dhcp_file = '/srv/webvirtcloud/dhcpd.conf'
|
dhcp_file = '/srv/webvirtcloud/dhcpd.conf'
|
||||||
data = { 'vname': vname, 'mac': '52:54:00:' }
|
mac = ''
|
||||||
if os.path.isfile(dhcp_file):
|
if os.path.isfile(dhcp_file):
|
||||||
with open(dhcp_file, 'r') as f:
|
with open(dhcp_file, 'r') as f:
|
||||||
name_found = False
|
name_found = False
|
||||||
|
@ -916,10 +922,37 @@ def guess_mac_address(request, vname):
|
||||||
if "host %s." % vname in line:
|
if "host %s." % vname in line:
|
||||||
name_found = True
|
name_found = True
|
||||||
if name_found and "hardware ethernet" in line:
|
if name_found and "hardware ethernet" in line:
|
||||||
data['mac'] = line.split(' ')[-1].strip().strip(';')
|
mac = line.split(' ')[-1].strip().strip(';')
|
||||||
break
|
break
|
||||||
|
return mac
|
||||||
|
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
def guess_mac_address(request, vname):
|
||||||
|
data = { 'vname': vname }
|
||||||
|
mac = _get_dhcp_mac_address(vname)
|
||||||
|
if not mac:
|
||||||
|
mac = _get_random_mac_address()
|
||||||
|
data['mac'] = mac
|
||||||
return HttpResponse(json.dumps(data))
|
return HttpResponse(json.dumps(data))
|
||||||
|
|
||||||
|
|
||||||
|
def _get_random_mac_address():
|
||||||
|
mac = '52:54:00:%02x:%02x:%02x' % (
|
||||||
|
random.randint(0x00, 0xff),
|
||||||
|
random.randint(0x00, 0xff),
|
||||||
|
random.randint(0x00, 0xff)
|
||||||
|
)
|
||||||
|
return mac
|
||||||
|
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
def random_mac_address(request):
|
||||||
|
data = {}
|
||||||
|
data['mac'] = _get_random_mac_address()
|
||||||
|
return HttpResponse(json.dumps(data))
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def guess_clone_name(request):
|
def guess_clone_name(request):
|
||||||
dhcp_file = '/srv/webvirtcloud/dhcpd.conf'
|
dhcp_file = '/srv/webvirtcloud/dhcpd.conf'
|
||||||
|
@ -936,6 +969,7 @@ def guess_clone_name(request):
|
||||||
return HttpResponse(json.dumps({'name': hostname}))
|
return HttpResponse(json.dumps({'name': hostname}))
|
||||||
return HttpResponse(json.dumps({}))
|
return HttpResponse(json.dumps({}))
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def check_instance(request, vname):
|
def check_instance(request, vname):
|
||||||
check_instance = Instance.objects.filter(name=vname)
|
check_instance = Instance.objects.filter(name=vname)
|
||||||
|
@ -944,6 +978,7 @@ def check_instance(request, vname):
|
||||||
data['exists'] = True
|
data['exists'] = True
|
||||||
return HttpResponse(json.dumps(data))
|
return HttpResponse(json.dumps(data))
|
||||||
|
|
||||||
|
|
||||||
def sshkeys(request, vname):
|
def sshkeys(request, vname):
|
||||||
"""
|
"""
|
||||||
:param request:
|
:param request:
|
||||||
|
@ -965,6 +1000,7 @@ def sshkeys(request, vname):
|
||||||
response = json.dumps(instance_keys)
|
response = json.dumps(instance_keys)
|
||||||
return HttpResponse(response)
|
return HttpResponse(response)
|
||||||
|
|
||||||
|
|
||||||
def delete_instance(instance, delete_disk=False):
|
def delete_instance(instance, delete_disk=False):
|
||||||
compute = instance.compute
|
compute = instance.compute
|
||||||
instance_name = instance.name
|
instance_name = instance.name
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
{% if not ifaces_all %}
|
{% if not ifaces_all %}
|
||||||
<div class="col-lg-12">
|
<div class="col-lg-12">
|
||||||
<div class="alert alert-warning alert-dismissable">
|
<div class="alert alert-warning alert-dismissable">
|
||||||
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
||||||
<i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning:" %}</strong> {% trans "Hypervisor doesn't have any Interfaces" %}
|
<i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning:" %}</strong> {% trans "Hypervisor doesn't have any Interfaces" %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
{% if not logs %}
|
{% if not logs %}
|
||||||
<div class="col-lg-12">
|
<div class="col-lg-12">
|
||||||
<div class="alert alert-warning alert-dismissable">
|
<div class="alert alert-warning alert-dismissable">
|
||||||
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
||||||
<i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning:" %}</strong> {% trans "You don't have any Logs" %}
|
<i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning:" %}</strong> {% trans "You don't have any Logs" %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
{% if not networks %}
|
{% if not networks %}
|
||||||
<div class="col-lg-12">
|
<div class="col-lg-12">
|
||||||
<div class="alert alert-warning alert-dismissable">
|
<div class="alert alert-warning alert-dismissable">
|
||||||
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
||||||
<i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning:" %}</strong> {% trans "Hypervisor doesn't have any Networks" %}
|
<i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning:" %}</strong> {% trans "Hypervisor doesn't have any Networks" %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
{% if not secrets_all %}
|
{% if not secrets_all %}
|
||||||
<div class="col-lg-12">
|
<div class="col-lg-12">
|
||||||
<div class="alert alert-warning alert-dismissable">
|
<div class="alert alert-warning alert-dismissable">
|
||||||
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
||||||
<i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning:" %}</strong> {% trans "Hypervisor doesn't have any Secrets" %}
|
<i class="fa fa-exclamation-triangle"></i> <strong>{% trans "Warning:" %}</strong> {% trans "Hypervisor doesn't have any Secrets" %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
12069
static/js/novnc/app.js
Executable file
56
static/js/novnc/app/error-handler.js
Executable file
|
@ -0,0 +1,56 @@
|
||||||
|
// NB: this should *not* be included as a module until we have
|
||||||
|
// native support in the browsers, so that our error handler
|
||||||
|
// can catch script-loading errors.
|
||||||
|
|
||||||
|
|
||||||
|
(function(){
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
// Fallback for all uncought errors
|
||||||
|
function handleError (event, err) {
|
||||||
|
try {
|
||||||
|
var msg = document.getElementById('noVNC_fallback_errormsg');
|
||||||
|
|
||||||
|
// Only show the initial error
|
||||||
|
if (msg.hasChildNodes()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var div = document.createElement("div");
|
||||||
|
div.classList.add('noVNC_message');
|
||||||
|
div.appendChild(document.createTextNode(event.message));
|
||||||
|
msg.appendChild(div);
|
||||||
|
|
||||||
|
if (event.filename) {
|
||||||
|
div = document.createElement("div");
|
||||||
|
div.className = 'noVNC_location';
|
||||||
|
var text = event.filename;
|
||||||
|
if (event.lineno !== undefined) {
|
||||||
|
text += ":" + event.lineno;
|
||||||
|
if (event.colno !== undefined) {
|
||||||
|
text += ":" + event.colno;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
div.appendChild(document.createTextNode(text));
|
||||||
|
msg.appendChild(div);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (err && (err.stack !== undefined)) {
|
||||||
|
div = document.createElement("div");
|
||||||
|
div.className = 'noVNC_stack';
|
||||||
|
div.appendChild(document.createTextNode(err.stack));
|
||||||
|
msg.appendChild(div);
|
||||||
|
}
|
||||||
|
|
||||||
|
document.getElementById('noVNC_fallback_error')
|
||||||
|
.classList.add("noVNC_open");
|
||||||
|
} catch (exc) {
|
||||||
|
document.write("noVNC encountered an error.");
|
||||||
|
}
|
||||||
|
// Don't return true since this would prevent the error
|
||||||
|
// from being printed to the browser console.
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
window.addEventListener('error', function (evt) { handleError(evt, evt.error); });
|
||||||
|
window.addEventListener('unhandledrejection', function (evt) { handleError(evt.reason, evt.reason); });
|
||||||
|
})();
|
92
static/js/novnc/app/images/alt.svg
Executable file
|
@ -0,0 +1,92 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="25"
|
||||||
|
height="25"
|
||||||
|
viewBox="0 0 25 25"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.91 r13725"
|
||||||
|
sodipodi:docname="alt.svg"
|
||||||
|
inkscape:export-filename="/home/ossman/devel/noVNC/images/drag.png"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-ydpi="90">
|
||||||
|
<defs
|
||||||
|
id="defs4" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#959595"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="16"
|
||||||
|
inkscape:cx="18.205425"
|
||||||
|
inkscape:cy="17.531398"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
inkscape:snap-bbox="true"
|
||||||
|
inkscape:bbox-paths="true"
|
||||||
|
inkscape:bbox-nodes="true"
|
||||||
|
inkscape:snap-bbox-edge-midpoints="true"
|
||||||
|
inkscape:object-paths="true"
|
||||||
|
showguides="true"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1136"
|
||||||
|
inkscape:window-x="1920"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:snap-smooth-nodes="true"
|
||||||
|
inkscape:object-nodes="true"
|
||||||
|
inkscape:snap-intersection-paths="true"
|
||||||
|
inkscape:snap-nodes="true"
|
||||||
|
inkscape:snap-global="true">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid4136" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-1027.3622)">
|
||||||
|
<g
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:48px;line-height:125%;font-family:'DejaVu Sans';-inkscape-font-specification:'Sans Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
id="text5290">
|
||||||
|
<path
|
||||||
|
d="m 9.9560547,1042.3329 -2.9394531,0 -0.4638672,1.3281 -1.8896485,0 2.7001953,-7.29 2.241211,0 2.7001958,7.29 -1.889649,0 -0.4589843,-1.3281 z m -2.4707031,-1.3526 1.9970703,0 -0.9960938,-2.9003 -1.0009765,2.9003 z"
|
||||||
|
style="font-size:10px;fill:#ffffff;fill-opacity:1"
|
||||||
|
id="path5340" />
|
||||||
|
<path
|
||||||
|
d="m 13.188477,1036.0634 1.748046,0 0,7.5976 -1.748046,0 0,-7.5976 z"
|
||||||
|
style="font-size:10px;fill:#ffffff;fill-opacity:1"
|
||||||
|
id="path5342" />
|
||||||
|
<path
|
||||||
|
d="m 18.535156,1036.6395 0,1.5528 1.801758,0 0,1.25 -1.801758,0 0,2.3193 q 0,0.3809 0.151367,0.5176 0.151368,0.1318 0.600586,0.1318 l 0.898438,0 0,1.25 -1.499024,0 q -1.035156,0 -1.469726,-0.4297 -0.429688,-0.4345 -0.429688,-1.4697 l 0,-2.3193 -0.86914,0 0,-1.25 0.86914,0 0,-1.5528 1.748047,0 z"
|
||||||
|
style="font-size:10px;fill:#ffffff;fill-opacity:1"
|
||||||
|
id="path5344" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.5 KiB |
106
static/js/novnc/app/images/clipboard.svg
Executable file
|
@ -0,0 +1,106 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="25"
|
||||||
|
height="25"
|
||||||
|
viewBox="0 0 25 25"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.91 r13725"
|
||||||
|
sodipodi:docname="clipboard.svg"
|
||||||
|
inkscape:export-filename="/home/ossman/devel/noVNC/images/drag.png"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-ydpi="90">
|
||||||
|
<defs
|
||||||
|
id="defs4" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#959595"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="1"
|
||||||
|
inkscape:cx="15.366606"
|
||||||
|
inkscape:cy="16.42981"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
inkscape:snap-bbox="true"
|
||||||
|
inkscape:bbox-paths="true"
|
||||||
|
inkscape:bbox-nodes="true"
|
||||||
|
inkscape:snap-bbox-edge-midpoints="true"
|
||||||
|
inkscape:object-paths="true"
|
||||||
|
showguides="true"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1136"
|
||||||
|
inkscape:window-x="1920"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:snap-smooth-nodes="true"
|
||||||
|
inkscape:object-nodes="true"
|
||||||
|
inkscape:snap-intersection-paths="true"
|
||||||
|
inkscape:snap-nodes="true"
|
||||||
|
inkscape:snap-global="true">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid4136" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-1027.3622)">
|
||||||
|
<path
|
||||||
|
style="opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="M 9,6 6,6 C 5.4459889,6 5,6.4459889 5,7 l 0,13 c 0,0.554011 0.4459889,1 1,1 l 13,0 c 0.554011,0 1,-0.445989 1,-1 L 20,7 C 20,6.4459889 19.554011,6 19,6 l -3,0"
|
||||||
|
transform="translate(0,1027.3622)"
|
||||||
|
id="rect6083"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cssssssssc" />
|
||||||
|
<rect
|
||||||
|
style="opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="rect6085"
|
||||||
|
width="7"
|
||||||
|
height="4"
|
||||||
|
x="9"
|
||||||
|
y="1031.3622"
|
||||||
|
ry="1.00002" />
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.50196081"
|
||||||
|
d="m 8.5071212,1038.8622 7.9999998,0"
|
||||||
|
id="path6087"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.50196081"
|
||||||
|
d="m 8.5071212,1041.8622 3.9999998,0"
|
||||||
|
id="path6089"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.50196081"
|
||||||
|
d="m 8.5071212,1044.8622 5.9999998,0"
|
||||||
|
id="path6091"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.9 KiB |
96
static/js/novnc/app/images/connect.svg
Executable file
|
@ -0,0 +1,96 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="25"
|
||||||
|
height="25"
|
||||||
|
viewBox="0 0 25 25"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.91 r13725"
|
||||||
|
sodipodi:docname="connect.svg"
|
||||||
|
inkscape:export-filename="/home/ossman/devel/noVNC/images/drag.png"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-ydpi="90">
|
||||||
|
<defs
|
||||||
|
id="defs4" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#959595"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="1"
|
||||||
|
inkscape:cx="37.14834"
|
||||||
|
inkscape:cy="1.9525926"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
inkscape:snap-bbox="true"
|
||||||
|
inkscape:bbox-paths="true"
|
||||||
|
inkscape:bbox-nodes="true"
|
||||||
|
inkscape:snap-bbox-edge-midpoints="true"
|
||||||
|
inkscape:object-paths="true"
|
||||||
|
showguides="true"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1136"
|
||||||
|
inkscape:window-x="1920"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:snap-smooth-nodes="true"
|
||||||
|
inkscape:object-nodes="true"
|
||||||
|
inkscape:snap-intersection-paths="true"
|
||||||
|
inkscape:snap-nodes="true">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid4136" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-1027.3622)">
|
||||||
|
<g
|
||||||
|
id="g5103"
|
||||||
|
transform="matrix(0.70710678,-0.70710678,0.70710678,0.70710678,-729.15757,315.8823)">
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cssssc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="rect5096"
|
||||||
|
d="m 11,1040.3622 -5,0 c -1.108,0 -2,-0.892 -2,-2 l 0,-4 c 0,-1.108 0.892,-2 2,-2 l 5,0"
|
||||||
|
style="opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
style="opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="m 14,1032.3622 5,0 c 1.108,0 2,0.892 2,2 l 0,4 c 0,1.108 -0.892,2 -2,2 l -5,0"
|
||||||
|
id="path5099"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cssssc" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path5101"
|
||||||
|
d="m 9,1036.3622 7,0"
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.3 KiB |
96
static/js/novnc/app/images/ctrl.svg
Executable file
|
@ -0,0 +1,96 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="25"
|
||||||
|
height="25"
|
||||||
|
viewBox="0 0 25 25"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.91 r13725"
|
||||||
|
sodipodi:docname="ctrl.svg"
|
||||||
|
inkscape:export-filename="/home/ossman/devel/noVNC/images/drag.png"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-ydpi="90">
|
||||||
|
<defs
|
||||||
|
id="defs4" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#959595"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="16"
|
||||||
|
inkscape:cx="18.205425"
|
||||||
|
inkscape:cy="17.531398"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
inkscape:snap-bbox="true"
|
||||||
|
inkscape:bbox-paths="true"
|
||||||
|
inkscape:bbox-nodes="true"
|
||||||
|
inkscape:snap-bbox-edge-midpoints="true"
|
||||||
|
inkscape:object-paths="true"
|
||||||
|
showguides="true"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1136"
|
||||||
|
inkscape:window-x="1920"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:snap-smooth-nodes="true"
|
||||||
|
inkscape:object-nodes="true"
|
||||||
|
inkscape:snap-intersection-paths="true"
|
||||||
|
inkscape:snap-nodes="true"
|
||||||
|
inkscape:snap-global="true">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid4136" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-1027.3622)">
|
||||||
|
<g
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:48px;line-height:125%;font-family:'DejaVu Sans';-inkscape-font-specification:'Sans Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
id="text5290">
|
||||||
|
<path
|
||||||
|
d="m 9.1210938,1043.1898 q -0.5175782,0.2686 -1.0791016,0.4053 -0.5615235,0.1367 -1.171875,0.1367 -1.8212891,0 -2.8857422,-1.0156 -1.0644531,-1.0205 -1.0644531,-2.7637 0,-1.748 1.0644531,-2.7637 1.0644531,-1.0205 2.8857422,-1.0205 0.6103515,0 1.171875,0.1368 0.5615234,0.1367 1.0791016,0.4052 l 0,1.5088 q -0.522461,-0.3564 -1.0302735,-0.5224 -0.5078125,-0.1661 -1.0693359,-0.1661 -1.0058594,0 -1.5820313,0.6446 -0.5761719,0.6445 -0.5761719,1.7773 0,1.1279 0.5761719,1.7725 0.5761719,0.6445 1.5820313,0.6445 0.5615234,0 1.0693359,-0.166 0.5078125,-0.166 1.0302735,-0.5225 l 0,1.5088 z"
|
||||||
|
style="font-size:10px;fill:#ffffff;fill-opacity:1"
|
||||||
|
id="path5370" />
|
||||||
|
<path
|
||||||
|
d="m 12.514648,1036.5687 0,1.5528 1.801758,0 0,1.25 -1.801758,0 0,2.3193 q 0,0.3809 0.151368,0.5176 0.151367,0.1318 0.600586,0.1318 l 0.898437,0 0,1.25 -1.499023,0 q -1.035157,0 -1.469727,-0.4297 -0.429687,-0.4345 -0.429687,-1.4697 l 0,-2.3193 -0.8691411,0 0,-1.25 0.8691411,0 0,-1.5528 1.748046,0 z"
|
||||||
|
style="font-size:10px;fill:#ffffff;fill-opacity:1"
|
||||||
|
id="path5372" />
|
||||||
|
<path
|
||||||
|
d="m 19.453125,1039.6107 q -0.229492,-0.1074 -0.458984,-0.1562 -0.22461,-0.054 -0.454102,-0.054 -0.673828,0 -1.040039,0.4345 -0.361328,0.4297 -0.361328,1.2354 l 0,2.5195 -1.748047,0 0,-5.4687 1.748047,0 0,0.8984 q 0.336914,-0.5371 0.771484,-0.7813 0.439453,-0.249 1.049805,-0.249 0.08789,0 0.19043,0.01 0.102539,0 0.297851,0.029 l 0.0049,1.582 z"
|
||||||
|
style="font-size:10px;fill:#ffffff;fill-opacity:1"
|
||||||
|
id="path5374" />
|
||||||
|
<path
|
||||||
|
d="m 20.332031,1035.9926 1.748047,0 0,7.5976 -1.748047,0 0,-7.5976 z"
|
||||||
|
style="font-size:10px;fill:#ffffff;fill-opacity:1"
|
||||||
|
id="path5376" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.3 KiB |
100
static/js/novnc/app/images/ctrlaltdel.svg
Executable file
|
@ -0,0 +1,100 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="25"
|
||||||
|
height="25"
|
||||||
|
viewBox="0 0 25 25"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.91 r13725"
|
||||||
|
sodipodi:docname="ctrlaltdel.svg"
|
||||||
|
inkscape:export-filename="/home/ossman/devel/noVNC/images/drag.png"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-ydpi="90">
|
||||||
|
<defs
|
||||||
|
id="defs4" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#959595"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="8"
|
||||||
|
inkscape:cx="11.135667"
|
||||||
|
inkscape:cy="16.407428"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
inkscape:snap-bbox="true"
|
||||||
|
inkscape:bbox-paths="true"
|
||||||
|
inkscape:bbox-nodes="true"
|
||||||
|
inkscape:snap-bbox-edge-midpoints="true"
|
||||||
|
inkscape:object-paths="true"
|
||||||
|
showguides="true"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1136"
|
||||||
|
inkscape:window-x="1920"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:snap-smooth-nodes="true"
|
||||||
|
inkscape:object-nodes="true"
|
||||||
|
inkscape:snap-intersection-paths="true"
|
||||||
|
inkscape:snap-nodes="true"
|
||||||
|
inkscape:snap-global="true">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid4136" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-1027.3622)">
|
||||||
|
<rect
|
||||||
|
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="rect5253"
|
||||||
|
width="5"
|
||||||
|
height="5.0000172"
|
||||||
|
x="16"
|
||||||
|
y="1031.3622"
|
||||||
|
ry="1.0000174" />
|
||||||
|
<rect
|
||||||
|
y="1043.3622"
|
||||||
|
x="4"
|
||||||
|
height="5.0000172"
|
||||||
|
width="5"
|
||||||
|
id="rect5255"
|
||||||
|
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
ry="1.0000174" />
|
||||||
|
<rect
|
||||||
|
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="rect5257"
|
||||||
|
width="5"
|
||||||
|
height="5.0000172"
|
||||||
|
x="13"
|
||||||
|
y="1043.3622"
|
||||||
|
ry="1.0000174" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.2 KiB |
94
static/js/novnc/app/images/disconnect.svg
Executable file
|
@ -0,0 +1,94 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="25"
|
||||||
|
height="25"
|
||||||
|
viewBox="0 0 25 25"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.91 r13725"
|
||||||
|
sodipodi:docname="disconnect.svg"
|
||||||
|
inkscape:export-filename="/home/ossman/devel/noVNC/images/drag.png"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-ydpi="90">
|
||||||
|
<defs
|
||||||
|
id="defs4" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#959595"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="16"
|
||||||
|
inkscape:cx="25.05707"
|
||||||
|
inkscape:cy="11.594858"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
inkscape:snap-bbox="true"
|
||||||
|
inkscape:bbox-paths="true"
|
||||||
|
inkscape:bbox-nodes="true"
|
||||||
|
inkscape:snap-bbox-edge-midpoints="true"
|
||||||
|
inkscape:object-paths="true"
|
||||||
|
showguides="true"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1136"
|
||||||
|
inkscape:window-x="1920"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:snap-smooth-nodes="true"
|
||||||
|
inkscape:object-nodes="true"
|
||||||
|
inkscape:snap-intersection-paths="true"
|
||||||
|
inkscape:snap-nodes="true"
|
||||||
|
inkscape:snap-global="false">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid4136" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-1027.3622)">
|
||||||
|
<g
|
||||||
|
id="g5171"
|
||||||
|
transform="translate(-24.062499,-6.15775e-4)">
|
||||||
|
<path
|
||||||
|
id="path5110"
|
||||||
|
transform="translate(0,1027.3622)"
|
||||||
|
d="m 39.744141,3.4960938 c -0.769923,0 -1.539607,0.2915468 -2.121094,0.8730468 l -2.566406,2.5664063 1.414062,1.4140625 2.566406,-2.5664063 c 0.403974,-0.404 1.010089,-0.404 1.414063,0 l 2.828125,2.828125 c 0.40398,0.4039 0.403907,1.0101621 0,1.4140629 l -2.566406,2.566406 1.414062,1.414062 2.566406,-2.566406 c 1.163041,-1.1629 1.162968,-3.0791874 0,-4.2421874 L 41.865234,4.3691406 C 41.283747,3.7876406 40.514063,3.4960937 39.744141,3.4960938 Z M 39.017578,9.015625 a 1.0001,1.0001 0 0 0 -0.6875,0.3027344 l -0.445312,0.4453125 1.414062,1.4140621 0.445313,-0.445312 A 1.0001,1.0001 0 0 0 39.017578,9.015625 Z m -6.363281,0.7070312 a 1.0001,1.0001 0 0 0 -0.6875,0.3027348 L 28.431641,13.5625 c -1.163042,1.163 -1.16297,3.079187 0,4.242188 l 2.828125,2.828124 c 1.162974,1.163101 3.079213,1.163101 4.242187,0 l 3.535156,-3.535156 a 1.0001,1.0001 0 1 0 -1.414062,-1.414062 l -3.535156,3.535156 c -0.403974,0.404 -1.010089,0.404 -1.414063,0 l -2.828125,-2.828125 c -0.403981,-0.404 -0.403908,-1.010162 0,-1.414063 l 3.535156,-3.537109 A 1.0001,1.0001 0 0 0 32.654297,9.7226562 Z m 3.109375,2.1621098 -2.382813,2.384765 a 1.0001,1.0001 0 1 0 1.414063,1.414063 l 2.382812,-2.384766 -1.414062,-1.414062 z"
|
||||||
|
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<rect
|
||||||
|
transform="matrix(0.70710678,-0.70710678,0.70710678,0.70710678,0,0)"
|
||||||
|
y="752.29541"
|
||||||
|
x="-712.31262"
|
||||||
|
height="18.000017"
|
||||||
|
width="3"
|
||||||
|
id="rect5116"
|
||||||
|
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.9 KiB |
76
static/js/novnc/app/images/drag.svg
Executable file
|
@ -0,0 +1,76 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="25"
|
||||||
|
height="25"
|
||||||
|
viewBox="0 0 25 25"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.91 r13725"
|
||||||
|
sodipodi:docname="drag.svg"
|
||||||
|
inkscape:export-filename="/home/ossman/devel/noVNC/images/drag.png"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-ydpi="90">
|
||||||
|
<defs
|
||||||
|
id="defs4" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#959595"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="22.627417"
|
||||||
|
inkscape:cx="9.8789407"
|
||||||
|
inkscape:cy="9.5008608"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="true"
|
||||||
|
units="px"
|
||||||
|
inkscape:snap-bbox="true"
|
||||||
|
inkscape:bbox-paths="true"
|
||||||
|
inkscape:bbox-nodes="true"
|
||||||
|
inkscape:snap-bbox-edge-midpoints="true"
|
||||||
|
inkscape:object-paths="true"
|
||||||
|
showguides="false"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1136"
|
||||||
|
inkscape:window-x="1920"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid4136" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-1027.3622)">
|
||||||
|
<path
|
||||||
|
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="m 7.039733,1049.3037 c -0.4309106,-0.1233 -0.7932634,-0.4631 -0.9705434,-0.9103 -0.04922,-0.1241 -0.057118,-0.2988 -0.071321,-1.5771 l -0.015972,-1.4375 -0.328125,-0.082 c -0.7668138,-0.1927 -1.1897046,-0.4275 -1.7031253,-0.9457 -0.4586773,-0.4629 -0.6804297,-0.8433 -0.867034,-1.4875 -0.067215,-0.232 -0.068001,-0.2642 -0.078682,-3.2188 -0.012078,-3.341 -0.020337,-3.2012 0.2099452,-3.5555 0.2246623,-0.3458 0.5798271,-0.5892 0.9667343,-0.6626 0.092506,-0.017 0.531898,-0.032 0.9764271,-0.032 l 0.8082347,0 1.157e-4,1.336 c 1.125e-4,1.2779 0.00281,1.3403 0.062214,1.4378 0.091785,0.1505 0.2357707,0.226 0.4314082,0.2261 0.285389,2e-4 0.454884,-0.1352 0.5058962,-0.4042 0.019355,-0.102 0.031616,-0.982 0.031616,-2.269 0,-1.9756 0.00357,-2.1138 0.059205,-2.2926 0.1645475,-0.5287 0.6307616,-0.9246 1.19078,-1.0113 0.8000572,-0.1238 1.5711277,0.4446 1.6860387,1.2429 0.01732,0.1203 0.03177,0.8248 0.03211,1.5657 6.19e-4,1.3449 7.22e-4,1.347 0.07093,1.4499 0.108355,0.1587 0.255268,0.2248 0.46917,0.2108 0.204069,-0.013 0.316116,-0.08 0.413642,-0.2453 0.06028,-0.1024 0.06307,-0.1778 0.07862,-2.1218 0.01462,-1.8283 0.02124,-2.0285 0.07121,-2.1549 0.260673,-0.659 0.934894,-1.0527 1.621129,-0.9465 0.640523,0.099 1.152269,0.6104 1.243187,1.2421 0.01827,0.1269 0.03175,0.9943 0.03211,2.0657 l 6.19e-4,1.8469 0.07031,0.103 c 0.108355,0.1587 0.255267,0.2248 0.46917,0.2108 0.204069,-0.013 0.316115,-0.08 0.413642,-0.2453 0.05951,-0.1011 0.06329,-0.1786 0.07907,-1.6218 0.01469,-1.3438 0.02277,-1.5314 0.07121,-1.6549 0.257975,-0.6576 0.934425,-1.0527 1.620676,-0.9465 0.640522,0.099 1.152269,0.6104 1.243186,1.2421 0.0186,0.1292 0.03179,1.0759 0.03222,2.3125 7.15e-4,2.0335 0.0025,2.0966 0.06283,2.1956 0.09178,0.1505 0.235771,0.226 0.431409,0.2261 0.285388,2e-4 0.454884,-0.1352 0.505897,-0.4042 0.01874,-0.099 0.03161,-0.8192 0.03161,-1.769 0,-1.4848 0.0043,-1.6163 0.0592,-1.7926 0.164548,-0.5287 0.630762,-0.9246 1.19078,-1.0113 0.800057,-0.1238 1.571128,0.4446 1.686039,1.2429 0.04318,0.2999 0.04372,9.1764 5.78e-4,9.4531 -0.04431,0.2841 -0.217814,0.6241 -0.420069,0.8232 -0.320102,0.315 -0.63307,0.4268 -1.194973,0.4268 l -0.35281,0 -2.51e-4,1.2734 c -1.25e-4,0.7046 -0.01439,1.3642 -0.03191,1.4766 -0.06665,0.4274 -0.372966,0.8704 -0.740031,1.0702 -0.349999,0.1905 0.01748,0.18 -6.242199,0.1776 -5.3622439,0 -5.7320152,-0.01 -5.9121592,-0.057 l 1.4e-5,0 z"
|
||||||
|
id="path4379"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.6 KiB |
81
static/js/novnc/app/images/error.svg
Executable file
|
@ -0,0 +1,81 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="25"
|
||||||
|
height="25"
|
||||||
|
viewBox="0 0 25 25"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.91 r13725"
|
||||||
|
sodipodi:docname="error.svg"
|
||||||
|
inkscape:export-filename="/home/ossman/devel/noVNC/images/drag.png"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-ydpi="90">
|
||||||
|
<defs
|
||||||
|
id="defs4" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#959595"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="1"
|
||||||
|
inkscape:cx="14.00357"
|
||||||
|
inkscape:cy="12.443398"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
inkscape:snap-bbox="true"
|
||||||
|
inkscape:bbox-paths="true"
|
||||||
|
inkscape:bbox-nodes="true"
|
||||||
|
inkscape:snap-bbox-edge-midpoints="true"
|
||||||
|
inkscape:object-paths="true"
|
||||||
|
showguides="true"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1136"
|
||||||
|
inkscape:window-x="1920"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:snap-smooth-nodes="true"
|
||||||
|
inkscape:object-nodes="true"
|
||||||
|
inkscape:snap-intersection-paths="true"
|
||||||
|
inkscape:snap-nodes="true"
|
||||||
|
inkscape:snap-global="true">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid4136" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-1027.3622)">
|
||||||
|
<path
|
||||||
|
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="M 7 3 C 4.7839905 3 3 4.7839905 3 7 L 3 18 C 3 20.21601 4.7839905 22 7 22 L 18 22 C 20.21601 22 22 20.21601 22 18 L 22 7 C 22 4.7839905 20.21601 3 18 3 L 7 3 z M 7.6992188 6 A 1.6916875 1.6924297 0 0 1 8.9121094 6.5117188 L 12.5 10.101562 L 16.087891 6.5117188 A 1.6916875 1.6924297 0 0 1 17.251953 6 A 1.6916875 1.6924297 0 0 1 18.480469 8.90625 L 14.892578 12.496094 L 18.480469 16.085938 A 1.6916875 1.6924297 0 1 1 16.087891 18.478516 L 12.5 14.888672 L 8.9121094 18.478516 A 1.6916875 1.6924297 0 1 1 6.5214844 16.085938 L 10.109375 12.496094 L 6.5214844 8.90625 A 1.6916875 1.6924297 0 0 1 7.6992188 6 z "
|
||||||
|
transform="translate(0,1027.3622)"
|
||||||
|
id="rect4135" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3 KiB |
92
static/js/novnc/app/images/esc.svg
Executable file
|
@ -0,0 +1,92 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="25"
|
||||||
|
height="25"
|
||||||
|
viewBox="0 0 25 25"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.91 r13725"
|
||||||
|
sodipodi:docname="esc.svg"
|
||||||
|
inkscape:export-filename="/home/ossman/devel/noVNC/images/drag.png"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-ydpi="90">
|
||||||
|
<defs
|
||||||
|
id="defs4" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#959595"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="16"
|
||||||
|
inkscape:cx="18.205425"
|
||||||
|
inkscape:cy="17.531398"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="text5290"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
inkscape:snap-bbox="true"
|
||||||
|
inkscape:bbox-paths="true"
|
||||||
|
inkscape:bbox-nodes="true"
|
||||||
|
inkscape:snap-bbox-edge-midpoints="true"
|
||||||
|
inkscape:object-paths="true"
|
||||||
|
showguides="true"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1136"
|
||||||
|
inkscape:window-x="1920"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:snap-smooth-nodes="true"
|
||||||
|
inkscape:object-nodes="true"
|
||||||
|
inkscape:snap-intersection-paths="true"
|
||||||
|
inkscape:snap-nodes="true"
|
||||||
|
inkscape:snap-global="true">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid4136" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-1027.3622)">
|
||||||
|
<g
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:48px;line-height:125%;font-family:'DejaVu Sans';-inkscape-font-specification:'Sans Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
id="text5290">
|
||||||
|
<path
|
||||||
|
d="m 3.9331055,1036.1464 5.0732422,0 0,1.4209 -3.1933594,0 0,1.3574 3.0029297,0 0,1.4209 -3.0029297,0 0,1.6699 3.3007812,0 0,1.4209 -5.180664,0 0,-7.29 z"
|
||||||
|
style="font-size:10px;fill:#ffffff;fill-opacity:1"
|
||||||
|
id="path5314" />
|
||||||
|
<path
|
||||||
|
d="m 14.963379,1038.1385 0,1.3282 q -0.561524,-0.2344 -1.083984,-0.3516 -0.522461,-0.1172 -0.986329,-0.1172 -0.498046,0 -0.742187,0.127 -0.239258,0.122 -0.239258,0.3808 0,0.21 0.180664,0.3223 0.185547,0.1123 0.65918,0.166 l 0.307617,0.044 q 1.342773,0.1709 1.806641,0.5615 0.463867,0.3906 0.463867,1.2256 0,0.874 -0.644531,1.3134 -0.644532,0.4395 -1.923829,0.4395 -0.541992,0 -1.123046,-0.088 -0.576172,-0.083 -1.186524,-0.2539 l 0,-1.3281 q 0.522461,0.2539 1.069336,0.3808 0.551758,0.127 1.118164,0.127 0.512695,0 0.771485,-0.1416 0.258789,-0.1416 0.258789,-0.4199 0,-0.2344 -0.180664,-0.3467 -0.175782,-0.1172 -0.708008,-0.1807 l -0.307617,-0.039 q -1.166993,-0.1465 -1.635743,-0.542 -0.46875,-0.3955 -0.46875,-1.2012 0,-0.8691 0.595703,-1.2891 0.595704,-0.4199 1.826172,-0.4199 0.483399,0 1.015625,0.073 0.532227,0.073 1.157227,0.2294 z"
|
||||||
|
style="font-size:10px;fill:#ffffff;fill-opacity:1"
|
||||||
|
id="path5316" />
|
||||||
|
<path
|
||||||
|
d="m 21.066895,1038.1385 0,1.4258 q -0.356446,-0.2441 -0.717774,-0.3613 -0.356445,-0.1172 -0.742187,-0.1172 -0.732422,0 -1.142579,0.4297 -0.405273,0.4248 -0.405273,1.1914 0,0.7666 0.405273,1.1963 0.410157,0.4248 1.142579,0.4248 0.410156,0 0.776367,-0.1221 0.371094,-0.122 0.683594,-0.3613 l 0,1.4307 q -0.410157,0.1513 -0.834961,0.2246 -0.419922,0.078 -0.844727,0.078 -1.479492,0 -2.314453,-0.7568 -0.834961,-0.7618 -0.834961,-2.1143 0,-1.3525 0.834961,-2.1094 0.834961,-0.7617 2.314453,-0.7617 0.429688,0 0.844727,0.078 0.419921,0.073 0.834961,0.2246 z"
|
||||||
|
style="font-size:10px;fill:#ffffff;fill-opacity:1"
|
||||||
|
id="path5318" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.4 KiB |
69
static/js/novnc/app/images/expander.svg
Executable file
|
@ -0,0 +1,69 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="9"
|
||||||
|
height="10"
|
||||||
|
viewBox="0 0 9 10"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.91 r13725"
|
||||||
|
sodipodi:docname="expander.svg">
|
||||||
|
<defs
|
||||||
|
id="defs4" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="45.254834"
|
||||||
|
inkscape:cx="9.8737281"
|
||||||
|
inkscape:cy="6.4583132"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="true"
|
||||||
|
units="px"
|
||||||
|
inkscape:snap-object-midpoints="false"
|
||||||
|
inkscape:object-nodes="true"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1136"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid4136" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-1042.3622)">
|
||||||
|
<path
|
||||||
|
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
d="M 2.0800781,1042.3633 A 2.0002,2.0002 0 0 0 0,1044.3613 l 0,6 a 2.0002,2.0002 0 0 0 3.0292969,1.7168 l 5,-3 a 2.0002,2.0002 0 0 0 0,-3.4316 l -5,-3 a 2.0002,2.0002 0 0 0 -0.9492188,-0.2832 z"
|
||||||
|
id="path4138"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3 KiB |
93
static/js/novnc/app/images/fullscreen.svg
Executable file
|
@ -0,0 +1,93 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="25"
|
||||||
|
height="25"
|
||||||
|
viewBox="0 0 25 25"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.91 r13725"
|
||||||
|
sodipodi:docname="fullscreen.svg"
|
||||||
|
inkscape:export-filename="/home/ossman/devel/noVNC/images/drag.png"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-ydpi="90">
|
||||||
|
<defs
|
||||||
|
id="defs4" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#959595"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="1"
|
||||||
|
inkscape:cx="16.400723"
|
||||||
|
inkscape:cy="15.083758"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
inkscape:snap-bbox="true"
|
||||||
|
inkscape:bbox-paths="true"
|
||||||
|
inkscape:bbox-nodes="true"
|
||||||
|
inkscape:snap-bbox-edge-midpoints="true"
|
||||||
|
inkscape:object-paths="true"
|
||||||
|
showguides="false"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1136"
|
||||||
|
inkscape:window-x="1920"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:snap-smooth-nodes="true"
|
||||||
|
inkscape:object-nodes="true"
|
||||||
|
inkscape:snap-intersection-paths="true"
|
||||||
|
inkscape:snap-nodes="false">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid4136" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-1027.3622)">
|
||||||
|
<rect
|
||||||
|
style="opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="rect5006"
|
||||||
|
width="17"
|
||||||
|
height="17.000017"
|
||||||
|
x="4"
|
||||||
|
y="1031.3622"
|
||||||
|
ry="3.0000174" />
|
||||||
|
<path
|
||||||
|
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||||
|
d="m 7.5,1044.8622 4,0 -1.5,-1.5 1.5,-1.5 -1,-1 -1.5,1.5 -1.5,-1.5 0,4 z"
|
||||||
|
id="path5017"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path5025"
|
||||||
|
d="m 17.5,1034.8622 -4,0 1.5,1.5 -1.5,1.5 1,1 1.5,-1.5 1.5,1.5 0,-4 z"
|
||||||
|
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.1 KiB |
82
static/js/novnc/app/images/handle.svg
Executable file
|
@ -0,0 +1,82 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="5"
|
||||||
|
height="6"
|
||||||
|
viewBox="0 0 5 6"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.91 r13725"
|
||||||
|
sodipodi:docname="handle.svg"
|
||||||
|
inkscape:export-filename="/home/ossman/devel/noVNC/images/drag.png"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-ydpi="90">
|
||||||
|
<defs
|
||||||
|
id="defs4" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#959595"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="32"
|
||||||
|
inkscape:cx="1.3551778"
|
||||||
|
inkscape:cy="8.7800329"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="true"
|
||||||
|
units="px"
|
||||||
|
inkscape:snap-bbox="true"
|
||||||
|
inkscape:bbox-paths="true"
|
||||||
|
inkscape:bbox-nodes="true"
|
||||||
|
inkscape:snap-bbox-edge-midpoints="true"
|
||||||
|
inkscape:object-paths="true"
|
||||||
|
showguides="false"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1136"
|
||||||
|
inkscape:window-x="1920"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:snap-smooth-nodes="true"
|
||||||
|
inkscape:object-nodes="true"
|
||||||
|
inkscape:snap-intersection-paths="true"
|
||||||
|
inkscape:snap-nodes="true"
|
||||||
|
inkscape:snap-global="true">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid4136" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-1046.3622)">
|
||||||
|
<path
|
||||||
|
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 4.0000803,1049.3622 -3,-2 0,4 z"
|
||||||
|
id="path4247"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cccc" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.5 KiB |
172
static/js/novnc/app/images/handle_bg.svg
Executable file
|
@ -0,0 +1,172 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="15"
|
||||||
|
height="50"
|
||||||
|
viewBox="0 0 15 50"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.91 r13725"
|
||||||
|
sodipodi:docname="handle_bg.svg"
|
||||||
|
inkscape:export-filename="/home/ossman/devel/noVNC/images/drag.png"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-ydpi="90">
|
||||||
|
<defs
|
||||||
|
id="defs4" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#959595"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="16"
|
||||||
|
inkscape:cx="-10.001409"
|
||||||
|
inkscape:cy="24.512566"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="true"
|
||||||
|
units="px"
|
||||||
|
inkscape:snap-bbox="true"
|
||||||
|
inkscape:bbox-paths="true"
|
||||||
|
inkscape:bbox-nodes="true"
|
||||||
|
inkscape:snap-bbox-edge-midpoints="true"
|
||||||
|
inkscape:object-paths="true"
|
||||||
|
showguides="false"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1136"
|
||||||
|
inkscape:window-x="1920"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:snap-smooth-nodes="true"
|
||||||
|
inkscape:object-nodes="true"
|
||||||
|
inkscape:snap-intersection-paths="true"
|
||||||
|
inkscape:snap-nodes="true"
|
||||||
|
inkscape:snap-global="true">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid4136" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-1002.3622)">
|
||||||
|
<rect
|
||||||
|
style="opacity:0.25;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="rect4249"
|
||||||
|
width="1"
|
||||||
|
height="1.0000174"
|
||||||
|
x="9.5"
|
||||||
|
y="1008.8622"
|
||||||
|
ry="1.7382812e-05" />
|
||||||
|
<rect
|
||||||
|
ry="1.7382812e-05"
|
||||||
|
y="1013.8622"
|
||||||
|
x="9.5"
|
||||||
|
height="1.0000174"
|
||||||
|
width="1"
|
||||||
|
id="rect4255"
|
||||||
|
style="opacity:0.25;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
|
<rect
|
||||||
|
ry="1.7382812e-05"
|
||||||
|
y="1008.8622"
|
||||||
|
x="4.5"
|
||||||
|
height="1.0000174"
|
||||||
|
width="1"
|
||||||
|
id="rect4261"
|
||||||
|
style="opacity:0.25;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
|
<rect
|
||||||
|
style="opacity:0.25;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="rect4263"
|
||||||
|
width="1"
|
||||||
|
height="1.0000174"
|
||||||
|
x="4.5"
|
||||||
|
y="1013.8622"
|
||||||
|
ry="1.7382812e-05" />
|
||||||
|
<rect
|
||||||
|
ry="1.7382812e-05"
|
||||||
|
y="1039.8622"
|
||||||
|
x="9.5"
|
||||||
|
height="1.0000174"
|
||||||
|
width="1"
|
||||||
|
id="rect4265"
|
||||||
|
style="opacity:0.25;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
|
<rect
|
||||||
|
style="opacity:0.25;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="rect4267"
|
||||||
|
width="1"
|
||||||
|
height="1.0000174"
|
||||||
|
x="9.5"
|
||||||
|
y="1044.8622"
|
||||||
|
ry="1.7382812e-05" />
|
||||||
|
<rect
|
||||||
|
style="opacity:0.25;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="rect4269"
|
||||||
|
width="1"
|
||||||
|
height="1.0000174"
|
||||||
|
x="4.5"
|
||||||
|
y="1039.8622"
|
||||||
|
ry="1.7382812e-05" />
|
||||||
|
<rect
|
||||||
|
ry="1.7382812e-05"
|
||||||
|
y="1044.8622"
|
||||||
|
x="4.5"
|
||||||
|
height="1.0000174"
|
||||||
|
width="1"
|
||||||
|
id="rect4271"
|
||||||
|
style="opacity:0.25;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
|
<rect
|
||||||
|
style="opacity:0.25;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="rect4273"
|
||||||
|
width="1"
|
||||||
|
height="1.0000174"
|
||||||
|
x="9.5"
|
||||||
|
y="1018.8622"
|
||||||
|
ry="1.7382812e-05" />
|
||||||
|
<rect
|
||||||
|
ry="1.7382812e-05"
|
||||||
|
y="1018.8622"
|
||||||
|
x="4.5"
|
||||||
|
height="1.0000174"
|
||||||
|
width="1"
|
||||||
|
id="rect4275"
|
||||||
|
style="opacity:0.25;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
|
<rect
|
||||||
|
style="opacity:0.25;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="rect4277"
|
||||||
|
width="1"
|
||||||
|
height="1.0000174"
|
||||||
|
x="9.5"
|
||||||
|
y="1034.8622"
|
||||||
|
ry="1.7382812e-05" />
|
||||||
|
<rect
|
||||||
|
ry="1.7382812e-05"
|
||||||
|
y="1034.8622"
|
||||||
|
x="4.5"
|
||||||
|
height="1.0000174"
|
||||||
|
width="1"
|
||||||
|
id="rect4279"
|
||||||
|
style="opacity:0.25;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 6.2 KiB |
42
static/js/novnc/app/images/icons/Makefile
Executable file
|
@ -0,0 +1,42 @@
|
||||||
|
ICONS := \
|
||||||
|
novnc-16x16.png \
|
||||||
|
novnc-24x24.png \
|
||||||
|
novnc-32x32.png \
|
||||||
|
novnc-48x48.png \
|
||||||
|
novnc-64x64.png
|
||||||
|
|
||||||
|
ANDROID_LAUNCHER := \
|
||||||
|
novnc-48x48.png \
|
||||||
|
novnc-72x72.png \
|
||||||
|
novnc-96x96.png \
|
||||||
|
novnc-144x144.png \
|
||||||
|
novnc-192x192.png
|
||||||
|
|
||||||
|
IPHONE_LAUNCHER := \
|
||||||
|
novnc-60x60.png \
|
||||||
|
novnc-120x120.png
|
||||||
|
|
||||||
|
IPAD_LAUNCHER := \
|
||||||
|
novnc-76x76.png \
|
||||||
|
novnc-152x152.png
|
||||||
|
|
||||||
|
ALL_ICONS := $(ICONS) $(ANDROID_LAUNCHER) $(IPHONE_LAUNCHER) $(IPAD_LAUNCHER)
|
||||||
|
|
||||||
|
all: $(ALL_ICONS)
|
||||||
|
|
||||||
|
novnc-16x16.png: novnc-icon-sm.svg
|
||||||
|
convert -density 90 \
|
||||||
|
-background transparent "$<" "$@"
|
||||||
|
novnc-24x24.png: novnc-icon-sm.svg
|
||||||
|
convert -density 135 \
|
||||||
|
-background transparent "$<" "$@"
|
||||||
|
novnc-32x32.png: novnc-icon-sm.svg
|
||||||
|
convert -density 180 \
|
||||||
|
-background transparent "$<" "$@"
|
||||||
|
|
||||||
|
novnc-%.png: novnc-icon.svg
|
||||||
|
convert -density $$[`echo $* | cut -d x -f 1` * 90 / 48] \
|
||||||
|
-background transparent "$<" "$@"
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *.png
|
BIN
static/js/novnc/app/images/icons/novnc-120x120.png
Executable file
After Width: | Height: | Size: 3.9 KiB |
BIN
static/js/novnc/app/images/icons/novnc-144x144.png
Executable file
After Width: | Height: | Size: 4.5 KiB |
BIN
static/js/novnc/app/images/icons/novnc-152x152.png
Executable file
After Width: | Height: | Size: 5.1 KiB |
BIN
static/js/novnc/app/images/icons/novnc-16x16.png
Executable file
After Width: | Height: | Size: 675 B |
BIN
static/js/novnc/app/images/icons/novnc-192x192.png
Executable file
After Width: | Height: | Size: 5.7 KiB |
BIN
static/js/novnc/app/images/icons/novnc-24x24.png
Executable file
After Width: | Height: | Size: 1,000 B |
BIN
static/js/novnc/app/images/icons/novnc-32x32.png
Executable file
After Width: | Height: | Size: 1 KiB |
BIN
static/js/novnc/app/images/icons/novnc-48x48.png
Executable file
After Width: | Height: | Size: 1.4 KiB |
BIN
static/js/novnc/app/images/icons/novnc-60x60.png
Executable file
After Width: | Height: | Size: 1.9 KiB |
BIN
static/js/novnc/app/images/icons/novnc-64x64.png
Executable file
After Width: | Height: | Size: 1.9 KiB |
BIN
static/js/novnc/app/images/icons/novnc-72x72.png
Executable file
After Width: | Height: | Size: 2.6 KiB |
BIN
static/js/novnc/app/images/icons/novnc-76x76.png
Executable file
After Width: | Height: | Size: 2.8 KiB |
BIN
static/js/novnc/app/images/icons/novnc-96x96.png
Executable file
After Width: | Height: | Size: 2.3 KiB |
163
static/js/novnc/app/images/icons/novnc-icon-sm.svg
Executable file
|
@ -0,0 +1,163 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="16"
|
||||||
|
height="16"
|
||||||
|
viewBox="0 0 16 16"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.91 r13725"
|
||||||
|
sodipodi:docname="novnc-icon-sm.svg">
|
||||||
|
<defs
|
||||||
|
id="defs4" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="45.254834"
|
||||||
|
inkscape:cx="9.722703"
|
||||||
|
inkscape:cy="5.5311896"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
inkscape:object-nodes="true"
|
||||||
|
inkscape:snap-smooth-nodes="true"
|
||||||
|
inkscape:snap-midpoints="true"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1136"
|
||||||
|
inkscape:window-x="1920"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid4169" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-1036.3621)">
|
||||||
|
<rect
|
||||||
|
style="opacity:1;fill:#494949;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="rect4167"
|
||||||
|
width="16"
|
||||||
|
height="15.999992"
|
||||||
|
x="0"
|
||||||
|
y="1036.3622"
|
||||||
|
ry="2.6666584" />
|
||||||
|
<path
|
||||||
|
style="opacity:1;fill:#313131;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="M 2.6666667,1036.3621 C 1.1893373,1036.3621 0,1037.5515 0,1039.0288 l 0,10.6666 c 0,1.4774 1.1893373,2.6667 2.6666667,2.6667 l 4,0 C 11.837333,1052.3621 16,1046.7128 16,1039.6955 l 0,-0.6667 c 0,-1.4773 -1.189337,-2.6667 -2.666667,-2.6667 l -10.6666663,0 z"
|
||||||
|
id="rect4173"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<g
|
||||||
|
id="g4381">
|
||||||
|
<g
|
||||||
|
transform="translate(0.25,0.25)"
|
||||||
|
style="fill:#000000;fill-opacity:1"
|
||||||
|
id="g4365">
|
||||||
|
<g
|
||||||
|
style="fill:#000000;fill-opacity:1"
|
||||||
|
id="g4367">
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path4369"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:medium;line-height:125%;font-family:Orbitron;-inkscape-font-specification:'Orbitron Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="m 4.3289754,1039.3621 c 0.1846149,0 0.3419956,0.071 0.4716623,0.2121 C 4.933546,1039.7121 5,1039.8793 5,1040.0759 l 0,3.2862 -1,0 0,-2.964 c 0,-0.024 -0.011592,-0.036 -0.034038,-0.036 l -1.931924,0 C 2.011349,1040.3621 2,1040.3741 2,1040.3981 l 0,2.964 -1,0 0,-4 z"
|
||||||
|
sodipodi:nodetypes="scsccsssscccs" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path4371"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:medium;line-height:125%;font-family:Orbitron;-inkscape-font-specification:'Orbitron Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="m 6.6710244,1039.3621 2.6579513,0 c 0.184775,0 0.3419957,0.071 0.471662,0.2121 C 9.933546,1039.7121 10,1039.8793 10,1040.0759 l 0,2.5724 c 0,0.1966 -0.066454,0.3655 -0.1993623,0.5069 -0.1296663,0.1379 -0.286887,0.2069 -0.471662,0.2069 l -2.6579513,0 c -0.184775,0 -0.3436164,-0.069 -0.4765247,-0.2069 C 6.0648334,1043.0138 6,1042.8449 6,1042.6483 l 0,-2.5724 c 0,-0.1966 0.064833,-0.3638 0.1944997,-0.5017 0.1329083,-0.1414 0.2917497,-0.2121 0.4765247,-0.2121 z m 2.2949386,1 -1.931926,0 C 7.011344,1040.3621 7,1040.3741 7,1040.3981 l 0,1.928 c 0,0.024 0.011347,0.036 0.034037,0.036 l 1.931926,0 c 0.02269,0 0.034037,-0.012 0.034037,-0.036 l 0,-1.928 c 0,-0.024 -0.011347,-0.036 -0.034037,-0.036 z"
|
||||||
|
sodipodi:nodetypes="sscsscsscsscssssssssss" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
style="fill:#000000;fill-opacity:1"
|
||||||
|
id="g4373">
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path4375"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:medium;line-height:125%;font-family:Orbitron;-inkscape-font-specification:'Orbitron Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="m 3,1047.1121 1,-2.75 1,0 -1.5,4 -1,0 -1.5,-4 1,0 z"
|
||||||
|
sodipodi:nodetypes="cccccccc" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path4377"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:medium;line-height:125%;font-family:Orbitron;-inkscape-font-specification:'Orbitron Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="m 9,1046.8621 0,-2.5 1,0 0,4 -1,0 -2,-2.5 0,2.5 -1,0 0,-4 1,0 z"
|
||||||
|
sodipodi:nodetypes="ccccccccccc" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path4379"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:medium;line-height:125%;font-family:Orbitron;-inkscape-font-specification:'Orbitron Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="m 15,1045.3621 -2.96596,0 c -0.02269,0 -0.03404,0.012 -0.03404,0.036 l 0,1.928 c 0,0.024 0.01135,0.036 0.03404,0.036 l 2.96596,0 0,1 -3.324113,0 c -0.188017,0 -0.348479,-0.068 -0.481388,-0.2037 C 11.064833,1048.0192 11,1047.8511 11,1047.6542 l 0,-2.5842 c 0,-0.1969 0.06483,-0.3633 0.194499,-0.4991 0.132909,-0.1392 0.293371,-0.2088 0.481388,-0.2088 l 3.324113,0 z"
|
||||||
|
sodipodi:nodetypes="cssssccscsscscc" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g4356">
|
||||||
|
<g
|
||||||
|
id="g4347">
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="scsccsssscccs"
|
||||||
|
d="m 4.3289754,1039.3621 c 0.1846149,0 0.3419956,0.071 0.4716623,0.2121 C 4.933546,1039.7121 5,1039.8793 5,1040.0759 l 0,3.2862 -1,0 0,-2.964 c 0,-0.024 -0.011592,-0.036 -0.034038,-0.036 l -1.931924,0 c -0.022689,0 -0.034038,0.012 -0.034038,0.036 l 0,2.964 -1,0 0,-4 z"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:medium;line-height:125%;font-family:Orbitron;-inkscape-font-specification:'Orbitron Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#008000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
id="path4143"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="sscsscsscsscssssssssss"
|
||||||
|
d="m 6.6710244,1039.3621 2.6579513,0 c 0.184775,0 0.3419957,0.071 0.471662,0.2121 C 9.933546,1039.7121 10,1039.8793 10,1040.0759 l 0,2.5724 c 0,0.1966 -0.066454,0.3655 -0.1993623,0.5069 -0.1296663,0.1379 -0.286887,0.2069 -0.471662,0.2069 l -2.6579513,0 c -0.184775,0 -0.3436164,-0.069 -0.4765247,-0.2069 C 6.0648334,1043.0138 6,1042.8449 6,1042.6483 l 0,-2.5724 c 0,-0.1966 0.064833,-0.3638 0.1944997,-0.5017 0.1329083,-0.1414 0.2917497,-0.2121 0.4765247,-0.2121 z m 2.2949386,1 -1.931926,0 C 7.011344,1040.3621 7,1040.3741 7,1040.3981 l 0,1.928 c 0,0.024 0.011347,0.036 0.034037,0.036 l 1.931926,0 c 0.02269,0 0.034037,-0.012 0.034037,-0.036 l 0,-1.928 c 0,-0.024 -0.011347,-0.036 -0.034037,-0.036 z"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:medium;line-height:125%;font-family:Orbitron;-inkscape-font-specification:'Orbitron Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#008000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
id="path4145"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g4351">
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cccccccc"
|
||||||
|
d="m 3,1047.1121 1,-2.75 1,0 -1.5,4 -1,0 -1.5,-4 1,0 z"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:medium;line-height:125%;font-family:Orbitron;-inkscape-font-specification:'Orbitron Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffff00;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
id="path4147"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="ccccccccccc"
|
||||||
|
d="m 9,1046.8621 0,-2.5 1,0 0,4 -1,0 -2,-2.5 0,2.5 -1,0 0,-4 1,0 z"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:medium;line-height:125%;font-family:Orbitron;-inkscape-font-specification:'Orbitron Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffff00;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
id="path4149"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cssssccscsscscc"
|
||||||
|
d="m 15,1045.3621 -2.96596,0 c -0.02269,0 -0.03404,0.012 -0.03404,0.036 l 0,1.928 c 0,0.024 0.01135,0.036 0.03404,0.036 l 2.96596,0 0,1 -3.324113,0 c -0.188017,0 -0.348479,-0.068 -0.481388,-0.2037 C 11.064833,1048.0192 11,1047.8511 11,1047.6542 l 0,-2.5842 c 0,-0.1969 0.06483,-0.3633 0.194499,-0.4991 0.132909,-0.1392 0.293371,-0.2088 0.481388,-0.2088 l 3.324113,0 z"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:medium;line-height:125%;font-family:Orbitron;-inkscape-font-specification:'Orbitron Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffff00;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
id="path4151"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 11 KiB |
163
static/js/novnc/app/images/icons/novnc-icon.svg
Executable file
|
@ -0,0 +1,163 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="48"
|
||||||
|
height="48"
|
||||||
|
viewBox="0 0 48 48.000001"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.91 r13725"
|
||||||
|
sodipodi:docname="novnc-icon.svg">
|
||||||
|
<defs
|
||||||
|
id="defs4" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="11.313708"
|
||||||
|
inkscape:cx="27.187245"
|
||||||
|
inkscape:cy="17.700974"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
inkscape:object-nodes="true"
|
||||||
|
inkscape:snap-smooth-nodes="true"
|
||||||
|
inkscape:snap-midpoints="true"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1136"
|
||||||
|
inkscape:window-x="1920"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid4169" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-1004.3621)">
|
||||||
|
<rect
|
||||||
|
style="opacity:1;fill:#494949;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="rect4167"
|
||||||
|
width="48"
|
||||||
|
height="48"
|
||||||
|
x="0"
|
||||||
|
y="1004.3621"
|
||||||
|
ry="7.9999785" />
|
||||||
|
<path
|
||||||
|
style="opacity:1;fill:#313131;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="m 8,1004.3621 c -4.4319881,0 -8,3.568 -8,8 l 0,32 c 0,4.432 3.5680119,8 8,8 l 12,0 c 15.512,0 28,-16.948 28,-38 l 0,-2 c 0,-4.432 -3.568012,-8 -8,-8 l -32,0 z"
|
||||||
|
id="rect4173"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<g
|
||||||
|
id="g4300"
|
||||||
|
style="fill:#000000;fill-opacity:1;stroke:none"
|
||||||
|
transform="translate(0.5,0.5)">
|
||||||
|
<g
|
||||||
|
id="g4302"
|
||||||
|
style="fill:#000000;fill-opacity:1;stroke:none">
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="scsccsssscccs"
|
||||||
|
d="m 11.986926,1016.3621 c 0.554325,0 1.025987,0.2121 1.414987,0.6362 0.398725,0.4138 0.600909,0.9155 0.598087,1.5052 l 0,6.8586 -2,0 0,-6.8914 c 0,-0.072 -0.03404,-0.1086 -0.102113,-0.1086 l -4.7957745,0 C 7.0340375,1018.3621 7,1018.3983 7,1018.4707 l 0,6.8914 -2,0 0,-9 z"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:medium;line-height:125%;font-family:Orbitron;-inkscape-font-specification:'Orbitron Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
id="path4304"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="sscsscsscsscssssssssss"
|
||||||
|
d="m 17.013073,1016.3621 4.973854,0 c 0.554325,0 1.025987,0.2121 1.414986,0.6362 0.398725,0.4138 0.598087,0.9155 0.598087,1.5052 l 0,4.7172 c 0,0.5897 -0.199362,1.0966 -0.598087,1.5207 -0.388999,0.4138 -0.860661,0.6207 -1.414986,0.6207 l -4.973854,0 c -0.554325,0 -1.030849,-0.2069 -1.429574,-0.6207 C 15.1945,1024.3173 15,1023.8104 15,1023.2207 l 0,-4.7172 c 0,-0.5897 0.1945,-1.0914 0.583499,-1.5052 0.398725,-0.4241 0.875249,-0.6362 1.429574,-0.6362 z m 4.884815,2 -4.795776,0 c -0.06808,0 -0.102112,0.036 -0.102112,0.1086 l 0,4.7828 c 0,0.072 0.03404,0.1086 0.102112,0.1086 l 4.795776,0 c 0.06807,0 0.102112,-0.036 0.102112,-0.1086 l 0,-4.7828 c 0,-0.072 -0.03404,-0.1086 -0.102112,-0.1086 z"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:medium;line-height:125%;font-family:Orbitron;-inkscape-font-specification:'Orbitron Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
id="path4306"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g4308"
|
||||||
|
style="fill:#000000;fill-opacity:1;stroke:none">
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cccccccc"
|
||||||
|
d="m 12,1036.9177 4.768114,-8.5556 2.231886,0 -6,11 -2,0 -6,-11 2.2318854,0 z"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:medium;line-height:125%;font-family:Orbitron;-inkscape-font-specification:'Orbitron Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
id="path4310"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="ccccccccccc"
|
||||||
|
d="m 29,1036.3621 0,-8 2,0 0,11 -2,0 -7,-8 0,8 -2,0 0,-11 2,0 z"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:medium;line-height:125%;font-family:Orbitron;-inkscape-font-specification:'Orbitron Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
id="path4312"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cssssccscsscscc"
|
||||||
|
d="m 43,1030.3621 -8.897887,0 c -0.06808,0 -0.102113,0.036 -0.102113,0.1069 l 0,6.7862 c 0,0.071 0.03404,0.1069 0.102113,0.1069 l 8.897887,0 0,2 -8.972339,0 c -0.56405,0 -1.045437,-0.2037 -1.444162,-0.6111 C 32.1945,1038.3334 32,1037.8292 32,1037.2385 l 0,-6.7528 c 0,-0.5907 0.1945,-1.0898 0.583499,-1.4972 0.398725,-0.4176 0.880112,-0.6264 1.444162,-0.6264 l 8.972339,0 z"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:medium;line-height:125%;font-family:Orbitron;-inkscape-font-specification:'Orbitron Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
id="path4314"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g4291"
|
||||||
|
style="stroke:none">
|
||||||
|
<g
|
||||||
|
id="g4282"
|
||||||
|
style="stroke:none">
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path4143"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:medium;line-height:125%;font-family:Orbitron;-inkscape-font-specification:'Orbitron Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#008000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="m 11.986926,1016.3621 c 0.554325,0 1.025987,0.2121 1.414987,0.6362 0.398725,0.4138 0.600909,0.9155 0.598087,1.5052 l 0,6.8586 -2,0 0,-6.8914 c 0,-0.072 -0.03404,-0.1086 -0.102113,-0.1086 l -4.7957745,0 C 7.0340375,1018.3621 7,1018.3983 7,1018.4707 l 0,6.8914 -2,0 0,-9 z"
|
||||||
|
sodipodi:nodetypes="scsccsssscccs" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path4145"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:medium;line-height:125%;font-family:Orbitron;-inkscape-font-specification:'Orbitron Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#008000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="m 17.013073,1016.3621 4.973854,0 c 0.554325,0 1.025987,0.2121 1.414986,0.6362 0.398725,0.4138 0.598087,0.9155 0.598087,1.5052 l 0,4.7172 c 0,0.5897 -0.199362,1.0966 -0.598087,1.5207 -0.388999,0.4138 -0.860661,0.6207 -1.414986,0.6207 l -4.973854,0 c -0.554325,0 -1.030849,-0.2069 -1.429574,-0.6207 C 15.1945,1024.3173 15,1023.8104 15,1023.2207 l 0,-4.7172 c 0,-0.5897 0.1945,-1.0914 0.583499,-1.5052 0.398725,-0.4241 0.875249,-0.6362 1.429574,-0.6362 z m 4.884815,2 -4.795776,0 c -0.06808,0 -0.102112,0.036 -0.102112,0.1086 l 0,4.7828 c 0,0.072 0.03404,0.1086 0.102112,0.1086 l 4.795776,0 c 0.06807,0 0.102112,-0.036 0.102112,-0.1086 l 0,-4.7828 c 0,-0.072 -0.03404,-0.1086 -0.102112,-0.1086 z"
|
||||||
|
sodipodi:nodetypes="sscsscsscsscssssssssss" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g4286"
|
||||||
|
style="stroke:none">
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path4147"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:medium;line-height:125%;font-family:Orbitron;-inkscape-font-specification:'Orbitron Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffff00;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="m 12,1036.9177 4.768114,-8.5556 2.231886,0 -6,11 -2,0 -6,-11 2.2318854,0 z"
|
||||||
|
sodipodi:nodetypes="cccccccc" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path4149"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:medium;line-height:125%;font-family:Orbitron;-inkscape-font-specification:'Orbitron Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffff00;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="m 29,1036.3621 0,-8 2,0 0,11 -2,0 -7,-8 0,8 -2,0 0,-11 2,0 z"
|
||||||
|
sodipodi:nodetypes="ccccccccccc" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path4151"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:medium;line-height:125%;font-family:Orbitron;-inkscape-font-specification:'Orbitron Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffff00;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="m 43,1030.3621 -8.897887,0 c -0.06808,0 -0.102113,0.036 -0.102113,0.1069 l 0,6.7862 c 0,0.071 0.03404,0.1069 0.102113,0.1069 l 8.897887,0 0,2 -8.972339,0 c -0.56405,0 -1.045437,-0.2037 -1.444162,-0.6111 C 32.1945,1038.3334 32,1037.8292 32,1037.2385 l 0,-6.7528 c 0,-0.5907 0.1945,-1.0898 0.583499,-1.4972 0.398725,-0.4176 0.880112,-0.6264 1.444162,-0.6264 l 8.972339,0 z"
|
||||||
|
sodipodi:nodetypes="cssssccscsscscc" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 11 KiB |
81
static/js/novnc/app/images/info.svg
Executable file
|
@ -0,0 +1,81 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="25"
|
||||||
|
height="25"
|
||||||
|
viewBox="0 0 25 25"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.91 r13725"
|
||||||
|
sodipodi:docname="info.svg"
|
||||||
|
inkscape:export-filename="/home/ossman/devel/noVNC/images/drag.png"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-ydpi="90">
|
||||||
|
<defs
|
||||||
|
id="defs4" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#959595"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="1"
|
||||||
|
inkscape:cx="15.720838"
|
||||||
|
inkscape:cy="8.9111233"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
inkscape:snap-bbox="true"
|
||||||
|
inkscape:bbox-paths="true"
|
||||||
|
inkscape:bbox-nodes="true"
|
||||||
|
inkscape:snap-bbox-edge-midpoints="true"
|
||||||
|
inkscape:object-paths="true"
|
||||||
|
showguides="false"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1136"
|
||||||
|
inkscape:window-x="1920"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:snap-smooth-nodes="true"
|
||||||
|
inkscape:object-nodes="true"
|
||||||
|
inkscape:snap-intersection-paths="true"
|
||||||
|
inkscape:snap-nodes="true"
|
||||||
|
inkscape:snap-global="true">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid4136" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-1027.3622)">
|
||||||
|
<path
|
||||||
|
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="M 12.5 3 A 9.5 9.4999914 0 0 0 3 12.5 A 9.5 9.4999914 0 0 0 12.5 22 A 9.5 9.4999914 0 0 0 22 12.5 A 9.5 9.4999914 0 0 0 12.5 3 z M 12.5 5 A 1.5 1.5000087 0 0 1 14 6.5 A 1.5 1.5000087 0 0 1 12.5 8 A 1.5 1.5000087 0 0 1 11 6.5 A 1.5 1.5000087 0 0 1 12.5 5 z M 10.521484 8.9785156 L 12.521484 8.9785156 A 1.50015 1.50015 0 0 1 14.021484 10.478516 L 14.021484 15.972656 A 1.50015 1.50015 0 0 1 14.498047 18.894531 C 14.498047 18.894531 13.74301 19.228309 12.789062 18.912109 C 12.312092 18.754109 11.776235 18.366625 11.458984 17.828125 C 11.141734 17.289525 11.021484 16.668469 11.021484 15.980469 L 11.021484 11.980469 L 10.521484 11.980469 A 1.50015 1.50015 0 1 1 10.521484 8.9804688 L 10.521484 8.9785156 z "
|
||||||
|
transform="translate(0,1027.3622)"
|
||||||
|
id="path4136" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.1 KiB |
88
static/js/novnc/app/images/keyboard.svg
Executable file
|
@ -0,0 +1,88 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="25"
|
||||||
|
height="25"
|
||||||
|
viewBox="0 0 25 25"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.91 r13725"
|
||||||
|
sodipodi:docname="keyboard.svg"
|
||||||
|
inkscape:export-filename="/home/ossman/devel/noVNC/images/keyboard.png"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-ydpi="90">
|
||||||
|
<defs
|
||||||
|
id="defs4" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#717171"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="1"
|
||||||
|
inkscape:cx="31.285341"
|
||||||
|
inkscape:cy="8.8028469"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
inkscape:snap-bbox="true"
|
||||||
|
inkscape:bbox-paths="true"
|
||||||
|
inkscape:bbox-nodes="true"
|
||||||
|
inkscape:snap-bbox-edge-midpoints="true"
|
||||||
|
inkscape:snap-bbox-midpoints="false"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1136"
|
||||||
|
inkscape:window-x="1920"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:object-paths="true"
|
||||||
|
inkscape:snap-intersection-paths="true"
|
||||||
|
inkscape:object-nodes="true"
|
||||||
|
inkscape:snap-midpoints="true"
|
||||||
|
inkscape:snap-smooth-nodes="true">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid4136" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-1027.3622)">
|
||||||
|
<path
|
||||||
|
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
d="M 7,3 C 4.8012876,3 3,4.8013 3,7 3,11.166667 3,15.333333 3,19.5 3,20.8764 4.1236413,22 5.5,22 l 14,0 C 20.876358,22 22,20.8764 22,19.5 22,15.333333 22,11.166667 22,7 22,4.8013 20.198712,3 18,3 Z m 0,2 11,0 c 1.125307,0 2,0.8747 2,2 L 20,12 5,12 5,7 C 5,5.8747 5.8746931,5 7,5 Z M 6.5,14 C 6.777,14 7,14.223 7,14.5 7,14.777 6.777,15 6.5,15 6.223,15 6,14.777 6,14.5 6,14.223 6.223,14 6.5,14 Z m 2,0 C 8.777,14 9,14.223 9,14.5 9,14.777 8.777,15 8.5,15 8.223,15 8,14.777 8,14.5 8,14.223 8.223,14 8.5,14 Z m 2,0 C 10.777,14 11,14.223 11,14.5 11,14.777 10.777,15 10.5,15 10.223,15 10,14.777 10,14.5 10,14.223 10.223,14 10.5,14 Z m 2,0 C 12.777,14 13,14.223 13,14.5 13,14.777 12.777,15 12.5,15 12.223,15 12,14.777 12,14.5 12,14.223 12.223,14 12.5,14 Z m 2,0 C 14.777,14 15,14.223 15,14.5 15,14.777 14.777,15 14.5,15 14.223,15 14,14.777 14,14.5 14,14.223 14.223,14 14.5,14 Z m 2,0 C 16.777,14 17,14.223 17,14.5 17,14.777 16.777,15 16.5,15 16.223,15 16,14.777 16,14.5 16,14.223 16.223,14 16.5,14 Z m 2,0 C 18.777,14 19,14.223 19,14.5 19,14.777 18.777,15 18.5,15 18.223,15 18,14.777 18,14.5 18,14.223 18.223,14 18.5,14 Z m -13,2 C 5.777,16 6,16.223 6,16.5 6,16.777 5.777,17 5.5,17 5.223,17 5,16.777 5,16.5 5,16.223 5.223,16 5.5,16 Z m 2,0 C 7.777,16 8,16.223 8,16.5 8,16.777 7.777,17 7.5,17 7.223,17 7,16.777 7,16.5 7,16.223 7.223,16 7.5,16 Z m 2,0 C 9.777,16 10,16.223 10,16.5 10,16.777 9.777,17 9.5,17 9.223,17 9,16.777 9,16.5 9,16.223 9.223,16 9.5,16 Z m 2,0 C 11.777,16 12,16.223 12,16.5 12,16.777 11.777,17 11.5,17 11.223,17 11,16.777 11,16.5 11,16.223 11.223,16 11.5,16 Z m 2,0 C 13.777,16 14,16.223 14,16.5 14,16.777 13.777,17 13.5,17 13.223,17 13,16.777 13,16.5 13,16.223 13.223,16 13.5,16 Z m 2,0 C 15.777,16 16,16.223 16,16.5 16,16.777 15.777,17 15.5,17 15.223,17 15,16.777 15,16.5 15,16.223 15.223,16 15.5,16 Z m 2,0 C 17.777,16 18,16.223 18,16.5 18,16.777 17.777,17 17.5,17 17.223,17 17,16.777 17,16.5 17,16.223 17.223,16 17.5,16 Z m 2,0 C 19.777,16 20,16.223 20,16.5 20,16.777 19.777,17 19.5,17 19.223,17 19,16.777 19,16.5 19,16.223 19.223,16 19.5,16 Z M 6,18 c 0.554,0 1,0.446 1,1 0,0.554 -0.446,1 -1,1 -0.554,0 -1,-0.446 -1,-1 0,-0.554 0.446,-1 1,-1 z m 2.8261719,0 7.3476561,0 C 16.631643,18 17,18.368372 17,18.826172 l 0,0.347656 C 17,19.631628 16.631643,20 16.173828,20 L 8.8261719,20 C 8.3683573,20 8,19.631628 8,19.173828 L 8,18.826172 C 8,18.368372 8.3683573,18 8.8261719,18 Z m 10.1113281,0 0.125,0 C 19.581551,18 20,18.4184 20,18.9375 l 0,0.125 C 20,19.5816 19.581551,20 19.0625,20 l -0.125,0 C 18.418449,20 18,19.5816 18,19.0625 l 0,-0.125 C 18,18.4184 18.418449,18 18.9375,18 Z"
|
||||||
|
transform="translate(0,1027.3622)"
|
||||||
|
id="rect4160"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="sccssccsssssccssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss" />
|
||||||
|
<path
|
||||||
|
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
|
||||||
|
d="m 12.499929,1033.8622 -2,2 1.500071,0 0,2 1,0 0,-2 1.499929,0 z"
|
||||||
|
id="path4150"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cccccccc" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 6.3 KiB |
92
static/js/novnc/app/images/mouse_left.svg
Executable file
|
@ -0,0 +1,92 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="25"
|
||||||
|
height="25"
|
||||||
|
viewBox="0 0 25 25"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.91 r13725"
|
||||||
|
sodipodi:docname="mouse_left.svg"
|
||||||
|
inkscape:export-filename="/home/ossman/devel/noVNC/images/drag.png"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-ydpi="90">
|
||||||
|
<defs
|
||||||
|
id="defs4" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#959595"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="11.313708"
|
||||||
|
inkscape:cx="15.551515"
|
||||||
|
inkscape:cy="12.205592"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
inkscape:snap-bbox="true"
|
||||||
|
inkscape:bbox-paths="true"
|
||||||
|
inkscape:bbox-nodes="true"
|
||||||
|
inkscape:snap-bbox-edge-midpoints="true"
|
||||||
|
inkscape:object-paths="true"
|
||||||
|
showguides="true"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1136"
|
||||||
|
inkscape:window-x="1920"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:snap-smooth-nodes="true"
|
||||||
|
inkscape:object-nodes="true"
|
||||||
|
inkscape:snap-intersection-paths="true"
|
||||||
|
inkscape:snap-nodes="true"
|
||||||
|
inkscape:snap-global="true">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid4136" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-1027.3622)">
|
||||||
|
<path
|
||||||
|
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#0068f6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
d="m 8,1030.3622 c -2.1987124,0 -4,1.8013 -4,4 l 0,2 5,0 0,-2 c 0,-1.4738 1.090393,-2.7071 2.5,-2.9492 l 0,-1.0508 -3.5,0 z"
|
||||||
|
id="path6219" />
|
||||||
|
<path
|
||||||
|
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
d="m 13.5,1030.3622 0,1.0508 c 1.409607,0.2421 2.5,1.4754 2.5,2.9492 l 0,2 5,0 0,-2 c 0,-2.1987 -1.801288,-4 -4,-4 l -3.5,0 z"
|
||||||
|
id="path6217" />
|
||||||
|
<path
|
||||||
|
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
d="m 12,1033.3622 c -0.571311,0 -1,0.4287 -1,1 l 0,5 c 0,0.5713 0.428689,1 1,1 l 1,0 c 0.571311,0 1,-0.4287 1,-1 l 0,-5 c 0,-0.5713 -0.428689,-1 -1,-1 l -1,0 z"
|
||||||
|
id="path6215" />
|
||||||
|
<path
|
||||||
|
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
d="m 4,1038.3622 0,3.5 c 0,4.1377 3.362302,7.5 7.5,7.5 l 2,0 c 4.137698,0 7.5,-3.3623 7.5,-7.5 l 0,-3.5 -5,0 0,1 c 0,1.6447 -1.355293,3 -3,3 l -1,0 c -1.644707,0 -3,-1.3553 -3,-3 l 0,-1 -5,0 z"
|
||||||
|
id="rect6178" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 6.8 KiB |
92
static/js/novnc/app/images/mouse_middle.svg
Executable file
|
@ -0,0 +1,92 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="25"
|
||||||
|
height="25"
|
||||||
|
viewBox="0 0 25 25"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.91 r13725"
|
||||||
|
sodipodi:docname="mouse_middle.svg"
|
||||||
|
inkscape:export-filename="/home/ossman/devel/noVNC/images/drag.png"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-ydpi="90">
|
||||||
|
<defs
|
||||||
|
id="defs4" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#959595"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="11.313708"
|
||||||
|
inkscape:cx="15.551515"
|
||||||
|
inkscape:cy="12.205592"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
inkscape:snap-bbox="true"
|
||||||
|
inkscape:bbox-paths="true"
|
||||||
|
inkscape:bbox-nodes="true"
|
||||||
|
inkscape:snap-bbox-edge-midpoints="true"
|
||||||
|
inkscape:object-paths="true"
|
||||||
|
showguides="true"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1136"
|
||||||
|
inkscape:window-x="1920"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:snap-smooth-nodes="true"
|
||||||
|
inkscape:object-nodes="true"
|
||||||
|
inkscape:snap-intersection-paths="true"
|
||||||
|
inkscape:snap-nodes="true"
|
||||||
|
inkscape:snap-global="true">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid4136" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-1027.3622)">
|
||||||
|
<path
|
||||||
|
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
d="m 8,1030.3622 c -2.1987124,0 -4,1.8013 -4,4 l 0,2 5,0 0,-2 c 0,-1.4738 1.090393,-2.7071 2.5,-2.9492 l 0,-1.0508 -3.5,0 z"
|
||||||
|
id="path6219" />
|
||||||
|
<path
|
||||||
|
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
d="m 13.5,1030.3622 0,1.0508 c 1.409607,0.2421 2.5,1.4754 2.5,2.9492 l 0,2 5,0 0,-2 c 0,-2.1987 -1.801288,-4 -4,-4 l -3.5,0 z"
|
||||||
|
id="path6217" />
|
||||||
|
<path
|
||||||
|
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#0068f6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
d="m 12,1033.3622 c -0.571311,0 -1,0.4287 -1,1 l 0,5 c 0,0.5713 0.428689,1 1,1 l 1,0 c 0.571311,0 1,-0.4287 1,-1 l 0,-5 c 0,-0.5713 -0.428689,-1 -1,-1 l -1,0 z"
|
||||||
|
id="path6215" />
|
||||||
|
<path
|
||||||
|
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
d="m 4,1038.3622 0,3.5 c 0,4.1377 3.362302,7.5 7.5,7.5 l 2,0 c 4.137698,0 7.5,-3.3623 7.5,-7.5 l 0,-3.5 -5,0 0,1 c 0,1.6447 -1.355293,3 -3,3 l -1,0 c -1.644707,0 -3,-1.3553 -3,-3 l 0,-1 -5,0 z"
|
||||||
|
id="rect6178" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 6.8 KiB |
92
static/js/novnc/app/images/mouse_none.svg
Executable file
|
@ -0,0 +1,92 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="25"
|
||||||
|
height="25"
|
||||||
|
viewBox="0 0 25 25"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.91 r13725"
|
||||||
|
sodipodi:docname="mouse_none.svg"
|
||||||
|
inkscape:export-filename="/home/ossman/devel/noVNC/images/drag.png"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-ydpi="90">
|
||||||
|
<defs
|
||||||
|
id="defs4" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#959595"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="16"
|
||||||
|
inkscape:cx="23.160825"
|
||||||
|
inkscape:cy="13.208262"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
inkscape:snap-bbox="true"
|
||||||
|
inkscape:bbox-paths="true"
|
||||||
|
inkscape:bbox-nodes="true"
|
||||||
|
inkscape:snap-bbox-edge-midpoints="true"
|
||||||
|
inkscape:object-paths="true"
|
||||||
|
showguides="true"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1136"
|
||||||
|
inkscape:window-x="1920"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:snap-smooth-nodes="true"
|
||||||
|
inkscape:object-nodes="true"
|
||||||
|
inkscape:snap-intersection-paths="true"
|
||||||
|
inkscape:snap-nodes="true"
|
||||||
|
inkscape:snap-global="true">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid4136" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-1027.3622)">
|
||||||
|
<path
|
||||||
|
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
d="m 8,1030.3622 c -2.1987124,0 -4,1.8013 -4,4 l 0,2 5,0 0,-2 c 0,-1.4738 1.090393,-2.7071 2.5,-2.9492 l 0,-1.0508 -3.5,0 z"
|
||||||
|
id="path6219" />
|
||||||
|
<path
|
||||||
|
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
d="m 13.5,1030.3622 0,1.0508 c 1.409607,0.2421 2.5,1.4754 2.5,2.9492 l 0,2 5,0 0,-2 c 0,-2.1987 -1.801288,-4 -4,-4 l -3.5,0 z"
|
||||||
|
id="path6217" />
|
||||||
|
<path
|
||||||
|
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
d="m 12,1033.3622 c -0.571311,0 -1,0.4287 -1,1 l 0,5 c 0,0.5713 0.428689,1 1,1 l 1,0 c 0.571311,0 1,-0.4287 1,-1 l 0,-5 c 0,-0.5713 -0.428689,-1 -1,-1 l -1,0 z"
|
||||||
|
id="path6215" />
|
||||||
|
<path
|
||||||
|
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
d="m 4,1038.3622 0,3.5 c 0,4.1377 3.362302,7.5 7.5,7.5 l 2,0 c 4.137698,0 7.5,-3.3623 7.5,-7.5 l 0,-3.5 -5,0 0,1 c 0,1.6447 -1.355293,3 -3,3 l -1,0 c -1.644707,0 -3,-1.3553 -3,-3 l 0,-1 -5,0 z"
|
||||||
|
id="rect6178" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 6.8 KiB |
92
static/js/novnc/app/images/mouse_right.svg
Executable file
|
@ -0,0 +1,92 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="25"
|
||||||
|
height="25"
|
||||||
|
viewBox="0 0 25 25"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.91 r13725"
|
||||||
|
sodipodi:docname="mouse_right.svg"
|
||||||
|
inkscape:export-filename="/home/ossman/devel/noVNC/images/drag.png"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-ydpi="90">
|
||||||
|
<defs
|
||||||
|
id="defs4" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#959595"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="11.313708"
|
||||||
|
inkscape:cx="15.551515"
|
||||||
|
inkscape:cy="12.205592"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
inkscape:snap-bbox="true"
|
||||||
|
inkscape:bbox-paths="true"
|
||||||
|
inkscape:bbox-nodes="true"
|
||||||
|
inkscape:snap-bbox-edge-midpoints="true"
|
||||||
|
inkscape:object-paths="true"
|
||||||
|
showguides="true"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1136"
|
||||||
|
inkscape:window-x="1920"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:snap-smooth-nodes="true"
|
||||||
|
inkscape:object-nodes="true"
|
||||||
|
inkscape:snap-intersection-paths="true"
|
||||||
|
inkscape:snap-nodes="true"
|
||||||
|
inkscape:snap-global="true">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid4136" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-1027.3622)">
|
||||||
|
<path
|
||||||
|
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
d="m 8,1030.3622 c -2.1987124,0 -4,1.8013 -4,4 l 0,2 5,0 0,-2 c 0,-1.4738 1.090393,-2.7071 2.5,-2.9492 l 0,-1.0508 -3.5,0 z"
|
||||||
|
id="path6219" />
|
||||||
|
<path
|
||||||
|
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#0068f6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
d="m 13.5,1030.3622 0,1.0508 c 1.409607,0.2421 2.5,1.4754 2.5,2.9492 l 0,2 5,0 0,-2 c 0,-2.1987 -1.801288,-4 -4,-4 l -3.5,0 z"
|
||||||
|
id="path6217" />
|
||||||
|
<path
|
||||||
|
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
d="m 12,1033.3622 c -0.571311,0 -1,0.4287 -1,1 l 0,5 c 0,0.5713 0.428689,1 1,1 l 1,0 c 0.571311,0 1,-0.4287 1,-1 l 0,-5 c 0,-0.5713 -0.428689,-1 -1,-1 l -1,0 z"
|
||||||
|
id="path6215" />
|
||||||
|
<path
|
||||||
|
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
d="m 4,1038.3622 0,3.5 c 0,4.1377 3.362302,7.5 7.5,7.5 l 2,0 c 4.137698,0 7.5,-3.3623 7.5,-7.5 l 0,-3.5 -5,0 0,1 c 0,1.6447 -1.355293,3 -3,3 l -1,0 c -1.644707,0 -3,-1.3553 -3,-3 l 0,-1 -5,0 z"
|
||||||
|
id="rect6178" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 6.8 KiB |
87
static/js/novnc/app/images/power.svg
Executable file
|
@ -0,0 +1,87 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="25"
|
||||||
|
height="25"
|
||||||
|
viewBox="0 0 25 25"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.91 r13725"
|
||||||
|
sodipodi:docname="power.svg"
|
||||||
|
inkscape:export-filename="/home/ossman/devel/noVNC/images/drag.png"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-ydpi="90">
|
||||||
|
<defs
|
||||||
|
id="defs4" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#959595"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="1"
|
||||||
|
inkscape:cx="9.3159849"
|
||||||
|
inkscape:cy="13.436208"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
inkscape:snap-bbox="true"
|
||||||
|
inkscape:bbox-paths="true"
|
||||||
|
inkscape:bbox-nodes="true"
|
||||||
|
inkscape:snap-bbox-edge-midpoints="true"
|
||||||
|
inkscape:object-paths="true"
|
||||||
|
showguides="true"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1136"
|
||||||
|
inkscape:window-x="1920"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:snap-smooth-nodes="true"
|
||||||
|
inkscape:object-nodes="true"
|
||||||
|
inkscape:snap-intersection-paths="true"
|
||||||
|
inkscape:snap-nodes="true"
|
||||||
|
inkscape:snap-global="true">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid4136" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-1027.3622)">
|
||||||
|
<path
|
||||||
|
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
d="M 9 6.8183594 C 6.3418164 8.1213032 4.5 10.849161 4.5 14 C 4.5 18.4065 8.0935666 22 12.5 22 C 16.906433 22 20.5 18.4065 20.5 14 C 20.5 10.849161 18.658184 8.1213032 16 6.8183594 L 16 9.125 C 17.514327 10.211757 18.5 11.984508 18.5 14 C 18.5 17.3256 15.825553 20 12.5 20 C 9.1744469 20 6.5 17.3256 6.5 14 C 6.5 11.984508 7.4856727 10.211757 9 9.125 L 9 6.8183594 z "
|
||||||
|
transform="translate(0,1027.3622)"
|
||||||
|
id="path6140" />
|
||||||
|
<path
|
||||||
|
style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 12.5,1031.8836 0,6.4786"
|
||||||
|
id="path6142"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.9 KiB |
76
static/js/novnc/app/images/settings.svg
Executable file
|
@ -0,0 +1,76 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="25"
|
||||||
|
height="25"
|
||||||
|
viewBox="0 0 25 25"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.91 r13725"
|
||||||
|
sodipodi:docname="settings.svg"
|
||||||
|
inkscape:export-filename="/home/ossman/devel/noVNC/images/drag.png"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-ydpi="90">
|
||||||
|
<defs
|
||||||
|
id="defs4" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#959595"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="22.627417"
|
||||||
|
inkscape:cx="14.69683"
|
||||||
|
inkscape:cy="8.8039511"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="true"
|
||||||
|
units="px"
|
||||||
|
inkscape:snap-bbox="true"
|
||||||
|
inkscape:bbox-paths="true"
|
||||||
|
inkscape:bbox-nodes="true"
|
||||||
|
inkscape:snap-bbox-edge-midpoints="true"
|
||||||
|
inkscape:object-paths="true"
|
||||||
|
showguides="false"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1136"
|
||||||
|
inkscape:window-x="1920"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid4136" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-1027.3622)">
|
||||||
|
<path
|
||||||
|
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="M 11 3 L 11 5.1601562 A 7.5 7.5 0 0 0 8.3671875 6.2460938 L 6.84375 4.7226562 L 4.7226562 6.84375 L 6.2480469 8.3691406 A 7.5 7.5 0 0 0 5.1523438 11 L 3 11 L 3 14 L 5.1601562 14 A 7.5 7.5 0 0 0 6.2460938 16.632812 L 4.7226562 18.15625 L 6.84375 20.277344 L 8.3691406 18.751953 A 7.5 7.5 0 0 0 11 19.847656 L 11 22 L 14 22 L 14 19.839844 A 7.5 7.5 0 0 0 16.632812 18.753906 L 18.15625 20.277344 L 20.277344 18.15625 L 18.751953 16.630859 A 7.5 7.5 0 0 0 19.847656 14 L 22 14 L 22 11 L 19.839844 11 A 7.5 7.5 0 0 0 18.753906 8.3671875 L 20.277344 6.84375 L 18.15625 4.7226562 L 16.630859 6.2480469 A 7.5 7.5 0 0 0 14 5.1523438 L 14 3 L 11 3 z M 12.5 10 A 2.5 2.5 0 0 1 15 12.5 A 2.5 2.5 0 0 1 12.5 15 A 2.5 2.5 0 0 1 10 12.5 A 2.5 2.5 0 0 1 12.5 10 z "
|
||||||
|
transform="translate(0,1027.3622)"
|
||||||
|
id="rect4967" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3 KiB |
86
static/js/novnc/app/images/tab.svg
Executable file
|
@ -0,0 +1,86 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="25"
|
||||||
|
height="25"
|
||||||
|
viewBox="0 0 25 25"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.91 r13725"
|
||||||
|
sodipodi:docname="tab.svg"
|
||||||
|
inkscape:export-filename="/home/ossman/devel/noVNC/images/drag.png"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-ydpi="90">
|
||||||
|
<defs
|
||||||
|
id="defs4" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#959595"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="16"
|
||||||
|
inkscape:cx="11.67335"
|
||||||
|
inkscape:cy="17.881696"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
inkscape:snap-bbox="true"
|
||||||
|
inkscape:bbox-paths="true"
|
||||||
|
inkscape:bbox-nodes="true"
|
||||||
|
inkscape:snap-bbox-edge-midpoints="true"
|
||||||
|
inkscape:object-paths="true"
|
||||||
|
showguides="true"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1136"
|
||||||
|
inkscape:window-x="1920"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:snap-smooth-nodes="true"
|
||||||
|
inkscape:object-nodes="true"
|
||||||
|
inkscape:snap-intersection-paths="true"
|
||||||
|
inkscape:snap-nodes="true"
|
||||||
|
inkscape:snap-global="true">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid4136" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-1027.3622)">
|
||||||
|
<path
|
||||||
|
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
d="m 3,1031.3622 0,8 2,0 0,-4 0,-4 -2,0 z m 2,4 4,4 0,-3 13,0 0,-2 -13,0 0,-3 -4,4 z"
|
||||||
|
id="rect5194"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
id="path5211"
|
||||||
|
d="m 22,1048.3622 0,-8 -2,0 0,4 0,4 2,0 z m -2,-4 -4,-4 0,3 -13,0 0,2 13,0 0,3 4,-4 z"
|
||||||
|
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.9 KiB |
90
static/js/novnc/app/images/toggleextrakeys.svg
Executable file
|
@ -0,0 +1,90 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="25"
|
||||||
|
height="25"
|
||||||
|
viewBox="0 0 25 25"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.91 r13725"
|
||||||
|
sodipodi:docname="extrakeys.svg"
|
||||||
|
inkscape:export-filename="/home/ossman/devel/noVNC/images/drag.png"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-ydpi="90">
|
||||||
|
<defs
|
||||||
|
id="defs4" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#959595"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="1"
|
||||||
|
inkscape:cx="15.234555"
|
||||||
|
inkscape:cy="9.9710826"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
inkscape:snap-bbox="true"
|
||||||
|
inkscape:bbox-paths="true"
|
||||||
|
inkscape:bbox-nodes="true"
|
||||||
|
inkscape:snap-bbox-edge-midpoints="true"
|
||||||
|
inkscape:object-paths="true"
|
||||||
|
showguides="false"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1136"
|
||||||
|
inkscape:window-x="1920"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:snap-smooth-nodes="true"
|
||||||
|
inkscape:object-nodes="true"
|
||||||
|
inkscape:snap-intersection-paths="true"
|
||||||
|
inkscape:snap-nodes="false">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid4136" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-1027.3622)">
|
||||||
|
<path
|
||||||
|
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
d="m 8,1031.3622 c -2.1987124,0 -4,1.8013 -4,4 l 0,8.9996 c 0,2.1987 1.8012876,4 4,4 l 9,0 c 2.198712,0 4,-1.8013 4,-4 l 0,-8.9996 c 0,-2.1987 -1.801288,-4 -4,-4 z m 0,2 9,0 c 1.125307,0 2,0.8747 2,2 l 0,7.0005 c 0,1.1253 -0.874693,2 -2,2 l -9,0 c -1.1253069,0 -2,-0.8747 -2,-2 l 0,-7.0005 c 0,-1.1253 0.8746931,-2 2,-2 z"
|
||||||
|
id="rect5006"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="ssssssssssssssssss" />
|
||||||
|
<g
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:10px;line-height:125%;font-family:'DejaVu Sans';-inkscape-font-specification:'Sans Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
id="text4167"
|
||||||
|
transform="matrix(0.96021948,0,0,0.96021948,0.18921715,41.80659)">
|
||||||
|
<path
|
||||||
|
d="m 14.292969,1040.6791 -2.939453,0 -0.463868,1.3281 -1.889648,0 2.700195,-7.29 2.241211,0 2.700196,7.29 -1.889649,0 -0.458984,-1.3281 z m -2.470703,-1.3526 1.99707,0 -0.996094,-2.9004 -1.000976,2.9004 z"
|
||||||
|
id="path4172"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.3 KiB |
81
static/js/novnc/app/images/warning.svg
Executable file
|
@ -0,0 +1,81 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="25"
|
||||||
|
height="25"
|
||||||
|
viewBox="0 0 25 25"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.91 r13725"
|
||||||
|
sodipodi:docname="warning.svg"
|
||||||
|
inkscape:export-filename="/home/ossman/devel/noVNC/images/drag.png"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-ydpi="90">
|
||||||
|
<defs
|
||||||
|
id="defs4" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#959595"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="1"
|
||||||
|
inkscape:cx="16.457343"
|
||||||
|
inkscape:cy="12.179552"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
inkscape:snap-bbox="true"
|
||||||
|
inkscape:bbox-paths="true"
|
||||||
|
inkscape:bbox-nodes="true"
|
||||||
|
inkscape:snap-bbox-edge-midpoints="true"
|
||||||
|
inkscape:object-paths="true"
|
||||||
|
showguides="false"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1136"
|
||||||
|
inkscape:window-x="1920"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:snap-smooth-nodes="true"
|
||||||
|
inkscape:object-nodes="true"
|
||||||
|
inkscape:snap-intersection-paths="true"
|
||||||
|
inkscape:snap-nodes="true"
|
||||||
|
inkscape:snap-global="true">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid4136" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-1027.3622)">
|
||||||
|
<path
|
||||||
|
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
d="M 12.513672 3.0019531 C 11.751609 2.9919531 11.052563 3.4242687 10.710938 4.1054688 L 3.2109375 19.105469 C 2.5461937 20.435369 3.5132277 21.9999 5 22 L 20 22 C 21.486772 21.9999 22.453806 20.435369 21.789062 19.105469 L 14.289062 4.1054688 C 13.951849 3.4330688 13.265888 3.0066531 12.513672 3.0019531 z M 12.478516 6.9804688 A 1.50015 1.50015 0 0 1 14 8.5 L 14 14.5 A 1.50015 1.50015 0 1 1 11 14.5 L 11 8.5 A 1.50015 1.50015 0 0 1 12.478516 6.9804688 z M 12.5 17 A 1.5 1.5 0 0 1 14 18.5 A 1.5 1.5 0 0 1 12.5 20 A 1.5 1.5 0 0 1 11 18.5 A 1.5 1.5 0 0 1 12.5 17 z "
|
||||||
|
transform="translate(0,1027.3622)"
|
||||||
|
id="path4208" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.8 KiB |
69
static/js/novnc/app/locale/de.json
Executable file
|
@ -0,0 +1,69 @@
|
||||||
|
{
|
||||||
|
"Connecting...": "Verbinden...",
|
||||||
|
"Disconnecting...": "Verbindung trennen...",
|
||||||
|
"Reconnecting...": "Verbindung wiederherstellen...",
|
||||||
|
"Internal error": "Interner Fehler",
|
||||||
|
"Must set host": "Richten Sie den Server ein",
|
||||||
|
"Connected (encrypted) to ": "Verbunden mit (verschlüsselt) ",
|
||||||
|
"Connected (unencrypted) to ": "Verbunden mit (unverschlüsselt) ",
|
||||||
|
"Something went wrong, connection is closed": "Etwas lief schief, Verbindung wurde getrennt",
|
||||||
|
"Disconnected": "Verbindung zum Server getrennt",
|
||||||
|
"New connection has been rejected with reason: ": "Verbindung wurde aus folgendem Grund abgelehnt: ",
|
||||||
|
"New connection has been rejected": "Verbindung wurde abgelehnt",
|
||||||
|
"Password is required": "Passwort ist erforderlich",
|
||||||
|
"noVNC encountered an error:": "Ein Fehler ist aufgetreten:",
|
||||||
|
"Hide/Show the control bar": "Kontrollleiste verstecken/anzeigen",
|
||||||
|
"Move/Drag Viewport": "Ansichtsfenster verschieben/ziehen",
|
||||||
|
"viewport drag": "Ansichtsfenster ziehen",
|
||||||
|
"Active Mouse Button": "Aktive Maustaste",
|
||||||
|
"No mousebutton": "Keine Maustaste",
|
||||||
|
"Left mousebutton": "Linke Maustaste",
|
||||||
|
"Middle mousebutton": "Mittlere Maustaste",
|
||||||
|
"Right mousebutton": "Rechte Maustaste",
|
||||||
|
"Keyboard": "Tastatur",
|
||||||
|
"Show Keyboard": "Tastatur anzeigen",
|
||||||
|
"Extra keys": "Zusatztasten",
|
||||||
|
"Show Extra Keys": "Zusatztasten anzeigen",
|
||||||
|
"Ctrl": "Strg",
|
||||||
|
"Toggle Ctrl": "Strg umschalten",
|
||||||
|
"Alt": "Alt",
|
||||||
|
"Toggle Alt": "Alt umschalten",
|
||||||
|
"Send Tab": "Tab senden",
|
||||||
|
"Tab": "Tab",
|
||||||
|
"Esc": "Esc",
|
||||||
|
"Send Escape": "Escape senden",
|
||||||
|
"Ctrl+Alt+Del": "Strg+Alt+Entf",
|
||||||
|
"Send Ctrl-Alt-Del": "Strg+Alt+Entf senden",
|
||||||
|
"Shutdown/Reboot": "Herunterfahren/Neustarten",
|
||||||
|
"Shutdown/Reboot...": "Herunterfahren/Neustarten...",
|
||||||
|
"Power": "Energie",
|
||||||
|
"Shutdown": "Herunterfahren",
|
||||||
|
"Reboot": "Neustarten",
|
||||||
|
"Reset": "Zurücksetzen",
|
||||||
|
"Clipboard": "Zwischenablage",
|
||||||
|
"Clear": "Löschen",
|
||||||
|
"Fullscreen": "Vollbild",
|
||||||
|
"Settings": "Einstellungen",
|
||||||
|
"Shared Mode": "Geteilter Modus",
|
||||||
|
"View Only": "Nur betrachten",
|
||||||
|
"Clip to Window": "Auf Fenster begrenzen",
|
||||||
|
"Scaling Mode:": "Skalierungsmodus:",
|
||||||
|
"None": "Keiner",
|
||||||
|
"Local Scaling": "Lokales skalieren",
|
||||||
|
"Remote Resizing": "Serverseitiges skalieren",
|
||||||
|
"Advanced": "Erweitert",
|
||||||
|
"Repeater ID:": "Repeater ID:",
|
||||||
|
"WebSocket": "WebSocket",
|
||||||
|
"Encrypt": "Verschlüsselt",
|
||||||
|
"Host:": "Server:",
|
||||||
|
"Port:": "Port:",
|
||||||
|
"Path:": "Pfad:",
|
||||||
|
"Automatic Reconnect": "Automatisch wiederverbinden",
|
||||||
|
"Reconnect Delay (ms):": "Wiederverbindungsverzögerung (ms):",
|
||||||
|
"Logging:": "Protokollierung:",
|
||||||
|
"Disconnect": "Verbindung trennen",
|
||||||
|
"Connect": "Verbinden",
|
||||||
|
"Password:": "Passwort:",
|
||||||
|
"Cancel": "Abbrechen",
|
||||||
|
"Canvas not supported.": "Canvas nicht unterstützt."
|
||||||
|
}
|
69
static/js/novnc/app/locale/el.json
Executable file
|
@ -0,0 +1,69 @@
|
||||||
|
{
|
||||||
|
"Connecting...": "Συνδέεται...",
|
||||||
|
"Disconnecting...": "Aποσυνδέεται...",
|
||||||
|
"Reconnecting...": "Επανασυνδέεται...",
|
||||||
|
"Internal error": "Εσωτερικό σφάλμα",
|
||||||
|
"Must set host": "Πρέπει να οριστεί ο διακομιστής",
|
||||||
|
"Connected (encrypted) to ": "Συνδέθηκε (κρυπτογραφημένα) με το ",
|
||||||
|
"Connected (unencrypted) to ": "Συνδέθηκε (μη κρυπτογραφημένα) με το ",
|
||||||
|
"Something went wrong, connection is closed": "Κάτι πήγε στραβά, η σύνδεση διακόπηκε",
|
||||||
|
"Disconnected": "Αποσυνδέθηκε",
|
||||||
|
"New connection has been rejected with reason: ": "Η νέα σύνδεση απορρίφθηκε διότι: ",
|
||||||
|
"New connection has been rejected": "Η νέα σύνδεση απορρίφθηκε ",
|
||||||
|
"Password is required": "Απαιτείται ο κωδικός πρόσβασης",
|
||||||
|
"noVNC encountered an error:": "το noVNC αντιμετώπισε ένα σφάλμα:",
|
||||||
|
"Hide/Show the control bar": "Απόκρυψη/Εμφάνιση γραμμής ελέγχου",
|
||||||
|
"Move/Drag Viewport": "Μετακίνηση/Σύρσιμο Θεατού πεδίου",
|
||||||
|
"viewport drag": "σύρσιμο θεατού πεδίου",
|
||||||
|
"Active Mouse Button": "Ενεργό Πλήκτρο Ποντικιού",
|
||||||
|
"No mousebutton": "Χωρίς Πλήκτρο Ποντικιού",
|
||||||
|
"Left mousebutton": "Αριστερό Πλήκτρο Ποντικιού",
|
||||||
|
"Middle mousebutton": "Μεσαίο Πλήκτρο Ποντικιού",
|
||||||
|
"Right mousebutton": "Δεξί Πλήκτρο Ποντικιού",
|
||||||
|
"Keyboard": "Πληκτρολόγιο",
|
||||||
|
"Show Keyboard": "Εμφάνιση Πληκτρολογίου",
|
||||||
|
"Extra keys": "Επιπλέον πλήκτρα",
|
||||||
|
"Show Extra Keys": "Εμφάνιση Επιπλέον Πλήκτρων",
|
||||||
|
"Ctrl": "Ctrl",
|
||||||
|
"Toggle Ctrl": "Εναλλαγή Ctrl",
|
||||||
|
"Alt": "Alt",
|
||||||
|
"Toggle Alt": "Εναλλαγή Alt",
|
||||||
|
"Send Tab": "Αποστολή Tab",
|
||||||
|
"Tab": "Tab",
|
||||||
|
"Esc": "Esc",
|
||||||
|
"Send Escape": "Αποστολή Escape",
|
||||||
|
"Ctrl+Alt+Del": "Ctrl+Alt+Del",
|
||||||
|
"Send Ctrl-Alt-Del": "Αποστολή Ctrl-Alt-Del",
|
||||||
|
"Shutdown/Reboot": "Κλείσιμο/Επανεκκίνηση",
|
||||||
|
"Shutdown/Reboot...": "Κλείσιμο/Επανεκκίνηση...",
|
||||||
|
"Power": "Απενεργοποίηση",
|
||||||
|
"Shutdown": "Κλείσιμο",
|
||||||
|
"Reboot": "Επανεκκίνηση",
|
||||||
|
"Reset": "Επαναφορά",
|
||||||
|
"Clipboard": "Πρόχειρο",
|
||||||
|
"Clear": "Καθάρισμα",
|
||||||
|
"Fullscreen": "Πλήρης Οθόνη",
|
||||||
|
"Settings": "Ρυθμίσεις",
|
||||||
|
"Shared Mode": "Κοινόχρηστη Λειτουργία",
|
||||||
|
"View Only": "Μόνο Θέαση",
|
||||||
|
"Clip to Window": "Αποκοπή στο όριο του Παράθυρου",
|
||||||
|
"Scaling Mode:": "Λειτουργία Κλιμάκωσης:",
|
||||||
|
"None": "Καμία",
|
||||||
|
"Local Scaling": "Τοπική Κλιμάκωση",
|
||||||
|
"Remote Resizing": "Απομακρυσμένη Αλλαγή μεγέθους",
|
||||||
|
"Advanced": "Για προχωρημένους",
|
||||||
|
"Repeater ID:": "Repeater ID:",
|
||||||
|
"WebSocket": "WebSocket",
|
||||||
|
"Encrypt": "Κρυπτογράφηση",
|
||||||
|
"Host:": "Όνομα διακομιστή:",
|
||||||
|
"Port:": "Πόρτα διακομιστή:",
|
||||||
|
"Path:": "Διαδρομή:",
|
||||||
|
"Automatic Reconnect": "Αυτόματη επανασύνδεση",
|
||||||
|
"Reconnect Delay (ms):": "Καθυστέρηση επανασύνδεσης (ms):",
|
||||||
|
"Logging:": "Καταγραφή:",
|
||||||
|
"Disconnect": "Αποσύνδεση",
|
||||||
|
"Connect": "Σύνδεση",
|
||||||
|
"Password:": "Κωδικός Πρόσβασης:",
|
||||||
|
"Cancel": "Ακύρωση",
|
||||||
|
"Canvas not supported.": "Δεν υποστηρίζεται το στοιχείο Canvas"
|
||||||
|
}
|
68
static/js/novnc/app/locale/es.json
Executable file
|
@ -0,0 +1,68 @@
|
||||||
|
{
|
||||||
|
"Connecting...": "Conectando...",
|
||||||
|
"Connected (encrypted) to ": "Conectado (con encriptación) a",
|
||||||
|
"Connected (unencrypted) to ": "Conectado (sin encriptación) a",
|
||||||
|
"Disconnecting...": "Desconectando...",
|
||||||
|
"Disconnected": "Desconectado",
|
||||||
|
"Must set host": "Debes configurar el host",
|
||||||
|
"Reconnecting...": "Reconectando...",
|
||||||
|
"Password is required": "Contraseña es obligatoria",
|
||||||
|
"Disconnect timeout": "Tiempo de desconexión agotado",
|
||||||
|
"noVNC encountered an error:": "noVNC ha encontrado un error:",
|
||||||
|
"Hide/Show the control bar": "Ocultar/Mostrar la barra de control",
|
||||||
|
"Move/Drag Viewport": "Mover/Arrastrar la ventana",
|
||||||
|
"viewport drag": "Arrastrar la ventana",
|
||||||
|
"Active Mouse Button": "Botón activo del ratón",
|
||||||
|
"No mousebutton": "Ningún botón del ratón",
|
||||||
|
"Left mousebutton": "Botón izquierdo del ratón",
|
||||||
|
"Middle mousebutton": "Botón central del ratón",
|
||||||
|
"Right mousebutton": "Botón derecho del ratón",
|
||||||
|
"Keyboard": "Teclado",
|
||||||
|
"Show Keyboard": "Mostrar teclado",
|
||||||
|
"Extra keys": "Teclas adicionales",
|
||||||
|
"Show Extra Keys": "Mostrar Teclas Adicionales",
|
||||||
|
"Ctrl": "Ctrl",
|
||||||
|
"Toggle Ctrl": "Pulsar/Soltar Ctrl",
|
||||||
|
"Alt": "Alt",
|
||||||
|
"Toggle Alt": "Pulsar/Soltar Alt",
|
||||||
|
"Send Tab": "Enviar Tabulación",
|
||||||
|
"Tab": "Tabulación",
|
||||||
|
"Esc": "Esc",
|
||||||
|
"Send Escape": "Enviar Escape",
|
||||||
|
"Ctrl+Alt+Del": "Ctrl+Alt+Del",
|
||||||
|
"Send Ctrl-Alt-Del": "Enviar Ctrl+Alt+Del",
|
||||||
|
"Shutdown/Reboot": "Apagar/Reiniciar",
|
||||||
|
"Shutdown/Reboot...": "Apagar/Reiniciar...",
|
||||||
|
"Power": "Encender",
|
||||||
|
"Shutdown": "Apagar",
|
||||||
|
"Reboot": "Reiniciar",
|
||||||
|
"Reset": "Restablecer",
|
||||||
|
"Clipboard": "Portapapeles",
|
||||||
|
"Clear": "Vaciar",
|
||||||
|
"Fullscreen": "Pantalla Completa",
|
||||||
|
"Settings": "Configuraciones",
|
||||||
|
"Shared Mode": "Modo Compartido",
|
||||||
|
"View Only": "Solo visualización",
|
||||||
|
"Clip to Window": "Recortar al tamaño de la ventana",
|
||||||
|
"Scaling Mode:": "Modo de escalado:",
|
||||||
|
"None": "Ninguno",
|
||||||
|
"Local Scaling": "Escalado Local",
|
||||||
|
"Local Downscaling": "Reducción de escala local",
|
||||||
|
"Remote Resizing": "Cambio de tamaño remoto",
|
||||||
|
"Advanced": "Avanzado",
|
||||||
|
"Local Cursor": "Cursor Local",
|
||||||
|
"Repeater ID:": "ID del Repetidor",
|
||||||
|
"WebSocket": "WebSocket",
|
||||||
|
"Encrypt": "",
|
||||||
|
"Host:": "Host",
|
||||||
|
"Port:": "Puesto",
|
||||||
|
"Path:": "Ruta",
|
||||||
|
"Automatic Reconnect": "Reconexión automática",
|
||||||
|
"Reconnect Delay (ms):": "Retraso en la reconexión (ms)",
|
||||||
|
"Logging:": "Logging",
|
||||||
|
"Disconnect": "Desconectar",
|
||||||
|
"Connect": "Conectar",
|
||||||
|
"Password:": "Contraseña",
|
||||||
|
"Cancel": "Cancelar",
|
||||||
|
"Canvas not supported.": "Canvas no está soportado"
|
||||||
|
}
|
68
static/js/novnc/app/locale/nl.json
Executable file
|
@ -0,0 +1,68 @@
|
||||||
|
{
|
||||||
|
"Connecting...": "Verbinden...",
|
||||||
|
"Connected (encrypted) to ": "Verbonden (versleuteld) met ",
|
||||||
|
"Connected (unencrypted) to ": "Verbonden (onversleuteld) met ",
|
||||||
|
"Disconnecting...": "Verbinding verbreken...",
|
||||||
|
"Disconnected": "Verbinding verbroken",
|
||||||
|
"Must set host": "Host moeten worden ingesteld",
|
||||||
|
"Reconnecting...": "Opnieuw verbinding maken...",
|
||||||
|
"Password is required": "Wachtwoord is vereist",
|
||||||
|
"Disconnect timeout": "Timeout tijdens verbreken van verbinding",
|
||||||
|
"noVNC encountered an error:": "noVNC heeft een fout bemerkt:",
|
||||||
|
"Hide/Show the control bar": "Verberg/Toon de bedieningsbalk",
|
||||||
|
"Move/Drag Viewport": "Verplaats/Versleep Kijkvenster",
|
||||||
|
"viewport drag": "kijkvenster slepen",
|
||||||
|
"Active Mouse Button": "Actieve Muisknop",
|
||||||
|
"No mousebutton": "Geen muisknop",
|
||||||
|
"Left mousebutton": "Linker muisknop",
|
||||||
|
"Middle mousebutton": "Middelste muisknop",
|
||||||
|
"Right mousebutton": "Rechter muisknop",
|
||||||
|
"Keyboard": "Toetsenbord",
|
||||||
|
"Show Keyboard": "Toon Toetsenbord",
|
||||||
|
"Extra keys": "Extra toetsen",
|
||||||
|
"Show Extra Keys": "Toon Extra Toetsen",
|
||||||
|
"Ctrl": "Ctrl",
|
||||||
|
"Toggle Ctrl": "Ctrl aan/uitzetten",
|
||||||
|
"Alt": "Alt",
|
||||||
|
"Toggle Alt": "Alt aan/uitzetten",
|
||||||
|
"Send Tab": "Tab Sturen",
|
||||||
|
"Tab": "Tab",
|
||||||
|
"Esc": "Esc",
|
||||||
|
"Send Escape": "Escape Sturen",
|
||||||
|
"Ctrl+Alt+Del": "Ctrl-Alt-Del",
|
||||||
|
"Send Ctrl-Alt-Del": "Ctrl-Alt-Del Sturen",
|
||||||
|
"Shutdown/Reboot": "Uitschakelen/Herstarten",
|
||||||
|
"Shutdown/Reboot...": "Uitschakelen/Herstarten...",
|
||||||
|
"Power": "Systeem",
|
||||||
|
"Shutdown": "Uitschakelen",
|
||||||
|
"Reboot": "Herstarten",
|
||||||
|
"Reset": "Resetten",
|
||||||
|
"Clipboard": "Klembord",
|
||||||
|
"Clear": "Wissen",
|
||||||
|
"Fullscreen": "Volledig Scherm",
|
||||||
|
"Settings": "Instellingen",
|
||||||
|
"Shared Mode": "Gedeelde Modus",
|
||||||
|
"View Only": "Alleen Kijken",
|
||||||
|
"Clip to Window": "Randen buiten venster afsnijden",
|
||||||
|
"Scaling Mode:": "Schaalmodus:",
|
||||||
|
"None": "Geen",
|
||||||
|
"Local Scaling": "Lokaal Schalen",
|
||||||
|
"Local Downscaling": "Lokaal Neerschalen",
|
||||||
|
"Remote Resizing": "Op Afstand Formaat Wijzigen",
|
||||||
|
"Advanced": "Geavanceerd",
|
||||||
|
"Local Cursor": "Lokale Cursor",
|
||||||
|
"Repeater ID:": "Repeater ID:",
|
||||||
|
"WebSocket": "WebSocket",
|
||||||
|
"Encrypt": "Versleutelen",
|
||||||
|
"Host:": "Host:",
|
||||||
|
"Port:": "Poort:",
|
||||||
|
"Path:": "Pad:",
|
||||||
|
"Automatic Reconnect": "Automatisch Opnieuw Verbinden",
|
||||||
|
"Reconnect Delay (ms):": "Vertraging voor Opnieuw Verbinden (ms):",
|
||||||
|
"Logging:": "Logmeldingen:",
|
||||||
|
"Disconnect": "Verbinding verbreken",
|
||||||
|
"Connect": "Verbinden",
|
||||||
|
"Password:": "Wachtwoord:",
|
||||||
|
"Cancel": "Annuleren",
|
||||||
|
"Canvas not supported.": "Canvas wordt niet ondersteund."
|
||||||
|
}
|
69
static/js/novnc/app/locale/pl.json
Executable file
|
@ -0,0 +1,69 @@
|
||||||
|
{
|
||||||
|
"Connecting...": "Łączenie...",
|
||||||
|
"Disconnecting...": "Rozłączanie...",
|
||||||
|
"Reconnecting...": "Łączenie...",
|
||||||
|
"Internal error": "Błąd wewnętrzny",
|
||||||
|
"Must set host": "Host i port są wymagane",
|
||||||
|
"Connected (encrypted) to ": "Połączenie (szyfrowane) z ",
|
||||||
|
"Connected (unencrypted) to ": "Połączenie (nieszyfrowane) z ",
|
||||||
|
"Something went wrong, connection is closed": "Coś poszło źle, połączenie zostało zamknięte",
|
||||||
|
"Disconnected": "Rozłączony",
|
||||||
|
"New connection has been rejected with reason: ": "Nowe połączenie zostało odrzucone z powodu: ",
|
||||||
|
"New connection has been rejected": "Nowe połączenie zostało odrzucone",
|
||||||
|
"Password is required": "Hasło jest wymagane",
|
||||||
|
"noVNC encountered an error:": "noVNC napotkało błąd:",
|
||||||
|
"Hide/Show the control bar": "Pokaż/Ukryj pasek ustawień",
|
||||||
|
"Move/Drag Viewport": "Ruszaj/Przeciągaj Viewport",
|
||||||
|
"viewport drag": "przeciągnij viewport",
|
||||||
|
"Active Mouse Button": "Aktywny Przycisk Myszy",
|
||||||
|
"No mousebutton": "Brak przycisku myszy",
|
||||||
|
"Left mousebutton": "Lewy przycisk myszy",
|
||||||
|
"Middle mousebutton": "Środkowy przycisk myszy",
|
||||||
|
"Right mousebutton": "Prawy przycisk myszy",
|
||||||
|
"Keyboard": "Klawiatura",
|
||||||
|
"Show Keyboard": "Pokaż klawiaturę",
|
||||||
|
"Extra keys": "Przyciski dodatkowe",
|
||||||
|
"Show Extra Keys": "Pokaż przyciski dodatkowe",
|
||||||
|
"Ctrl": "Ctrl",
|
||||||
|
"Toggle Ctrl": "Przełącz Ctrl",
|
||||||
|
"Alt": "Alt",
|
||||||
|
"Toggle Alt": "Przełącz Alt",
|
||||||
|
"Send Tab": "Wyślij Tab",
|
||||||
|
"Tab": "Tab",
|
||||||
|
"Esc": "Esc",
|
||||||
|
"Send Escape": "Wyślij Escape",
|
||||||
|
"Ctrl+Alt+Del": "Ctrl+Alt+Del",
|
||||||
|
"Send Ctrl-Alt-Del": "Wyślij Ctrl-Alt-Del",
|
||||||
|
"Shutdown/Reboot": "Wyłącz/Uruchom ponownie",
|
||||||
|
"Shutdown/Reboot...": "Wyłącz/Uruchom ponownie...",
|
||||||
|
"Power": "Włączony",
|
||||||
|
"Shutdown": "Wyłącz",
|
||||||
|
"Reboot": "Uruchom ponownie",
|
||||||
|
"Reset": "Resetuj",
|
||||||
|
"Clipboard": "Schowek",
|
||||||
|
"Clear": "Wyczyść",
|
||||||
|
"Fullscreen": "Pełny ekran",
|
||||||
|
"Settings": "Ustawienia",
|
||||||
|
"Shared Mode": "Tryb Współdzielenia",
|
||||||
|
"View Only": "Tylko Podgląd",
|
||||||
|
"Clip to Window": "Przytnij do Okna",
|
||||||
|
"Scaling Mode:": "Tryb Skalowania:",
|
||||||
|
"None": "Brak",
|
||||||
|
"Local Scaling": "Skalowanie lokalne",
|
||||||
|
"Remote Resizing": "Skalowanie zdalne",
|
||||||
|
"Advanced": "Zaawansowane",
|
||||||
|
"Repeater ID:": "ID Repeatera:",
|
||||||
|
"WebSocket": "WebSocket",
|
||||||
|
"Encrypt": "Szyfrowanie",
|
||||||
|
"Host:": "Host:",
|
||||||
|
"Port:": "Port:",
|
||||||
|
"Path:": "Ścieżka:",
|
||||||
|
"Automatic Reconnect": "Automatycznie wznawiaj połączenie",
|
||||||
|
"Reconnect Delay (ms):": "Opóźnienie wznawiania (ms):",
|
||||||
|
"Logging:": "Poziom logowania:",
|
||||||
|
"Disconnect": "Rozłącz",
|
||||||
|
"Connect": "Połącz",
|
||||||
|
"Password:": "Hasło:",
|
||||||
|
"Cancel": "Anuluj",
|
||||||
|
"Canvas not supported.": "Element Canvas nie jest wspierany."
|
||||||
|
}
|
68
static/js/novnc/app/locale/sv.json
Executable file
|
@ -0,0 +1,68 @@
|
||||||
|
{
|
||||||
|
"Connecting...": "Ansluter...",
|
||||||
|
"Connected (encrypted) to ": "Ansluten (krypterat) till ",
|
||||||
|
"Connected (unencrypted) to ": "Ansluten (okrypterat) till ",
|
||||||
|
"Disconnecting...": "Kopplar ner...",
|
||||||
|
"Disconnected": "Frånkopplad",
|
||||||
|
"Must set host": "Du måste specifiera en värd",
|
||||||
|
"Reconnecting...": "Återansluter...",
|
||||||
|
"Password is required": "Lösenord krävs",
|
||||||
|
"Disconnect timeout": "Det tog för lång tid att koppla ner",
|
||||||
|
"noVNC encountered an error:": "noVNC stötte på ett problem:",
|
||||||
|
"Hide/Show the control bar": "Göm/Visa kontrollbaren",
|
||||||
|
"Move/Drag Viewport": "Flytta/Dra Vyn",
|
||||||
|
"viewport drag": "dra vy",
|
||||||
|
"Active Mouse Button": "Aktiv musknapp",
|
||||||
|
"No mousebutton": "Ingen musknapp",
|
||||||
|
"Left mousebutton": "Vänster musknapp",
|
||||||
|
"Middle mousebutton": "Mitten-musknapp",
|
||||||
|
"Right mousebutton": "Höger musknapp",
|
||||||
|
"Keyboard": "Tangentbord",
|
||||||
|
"Show Keyboard": "Visa Tangentbord",
|
||||||
|
"Extra keys": "Extraknappar",
|
||||||
|
"Show Extra Keys": "Visa Extraknappar",
|
||||||
|
"Ctrl": "Ctrl",
|
||||||
|
"Toggle Ctrl": "Växla Ctrl",
|
||||||
|
"Alt": "Alt",
|
||||||
|
"Toggle Alt": "Växla Alt",
|
||||||
|
"Send Tab": "Skicka Tab",
|
||||||
|
"Tab": "Tab",
|
||||||
|
"Esc": "Esc",
|
||||||
|
"Send Escape": "Skicka Escape",
|
||||||
|
"Ctrl+Alt+Del": "Ctrl+Alt+Del",
|
||||||
|
"Send Ctrl-Alt-Del": "Skicka Ctrl-Alt-Del",
|
||||||
|
"Shutdown/Reboot": "Stäng av/Boota om",
|
||||||
|
"Shutdown/Reboot...": "Stäng av/Boota om...",
|
||||||
|
"Power": "Ström",
|
||||||
|
"Shutdown": "Stäng av",
|
||||||
|
"Reboot": "Boota om",
|
||||||
|
"Reset": "Återställ",
|
||||||
|
"Clipboard": "Urklipp",
|
||||||
|
"Clear": "Rensa",
|
||||||
|
"Fullscreen": "Fullskärm",
|
||||||
|
"Settings": "Inställningar",
|
||||||
|
"Shared Mode": "Delat Läge",
|
||||||
|
"View Only": "Endast Visning",
|
||||||
|
"Clip to Window": "Begränsa till Fönster",
|
||||||
|
"Scaling Mode:": "Skalningsläge:",
|
||||||
|
"None": "Ingen",
|
||||||
|
"Local Scaling": "Lokal Skalning",
|
||||||
|
"Local Downscaling": "Lokal Nedskalning",
|
||||||
|
"Remote Resizing": "Ändra Storlek",
|
||||||
|
"Advanced": "Avancerat",
|
||||||
|
"Local Cursor": "Lokal Muspekare",
|
||||||
|
"Repeater ID:": "Repeater-ID:",
|
||||||
|
"WebSocket": "WebSocket",
|
||||||
|
"Encrypt": "Kryptera",
|
||||||
|
"Host:": "Värd:",
|
||||||
|
"Port:": "Port:",
|
||||||
|
"Path:": "Sökväg:",
|
||||||
|
"Automatic Reconnect": "Automatisk Återanslutning",
|
||||||
|
"Reconnect Delay (ms):": "Fördröjning (ms):",
|
||||||
|
"Logging:": "Loggning:",
|
||||||
|
"Disconnect": "Koppla från",
|
||||||
|
"Connect": "Anslut",
|
||||||
|
"Password:": "Lösenord:",
|
||||||
|
"Cancel": "Avbryt",
|
||||||
|
"Canvas not supported.": "Canvas stöds ej"
|
||||||
|
}
|
69
static/js/novnc/app/locale/tr.json
Executable file
|
@ -0,0 +1,69 @@
|
||||||
|
{
|
||||||
|
"Connecting...": "Bağlanıyor...",
|
||||||
|
"Disconnecting...": "Bağlantı kesiliyor...",
|
||||||
|
"Reconnecting...": "Yeniden bağlantı kuruluyor...",
|
||||||
|
"Internal error": "İç hata",
|
||||||
|
"Must set host": "Sunucuyu kur",
|
||||||
|
"Connected (encrypted) to ": "Bağlı (şifrelenmiş)",
|
||||||
|
"Connected (unencrypted) to ": "Bağlandı (şifrelenmemiş)",
|
||||||
|
"Something went wrong, connection is closed": "Bir şeyler ters gitti, bağlantı kesildi",
|
||||||
|
"Disconnected": "Bağlantı kesildi",
|
||||||
|
"New connection has been rejected with reason: ": "Bağlantı aşağıdaki nedenlerden dolayı reddedildi: ",
|
||||||
|
"New connection has been rejected": "Bağlantı reddedildi",
|
||||||
|
"Password is required": "Şifre gerekli",
|
||||||
|
"noVNC encountered an error:": "Bir hata oluştu:",
|
||||||
|
"Hide/Show the control bar": "Denetim masasını Gizle/Göster",
|
||||||
|
"Move/Drag Viewport": "Görünümü Taşı/Sürükle",
|
||||||
|
"viewport drag": "Görüntü penceresini sürükle",
|
||||||
|
"Active Mouse Button": "Aktif Fare Düğmesi",
|
||||||
|
"No mousebutton": "Fare düğmesi yok",
|
||||||
|
"Left mousebutton": "Farenin sol düğmesi",
|
||||||
|
"Middle mousebutton": "Farenin orta düğmesi",
|
||||||
|
"Right mousebutton": "Farenin sağ düğmesi",
|
||||||
|
"Keyboard": "Klavye",
|
||||||
|
"Show Keyboard": "Klavye Düzenini Göster",
|
||||||
|
"Extra keys": "Ekstra tuşlar",
|
||||||
|
"Show Extra Keys": "Ekstra tuşları göster",
|
||||||
|
"Ctrl": "Ctrl",
|
||||||
|
"Toggle Ctrl": "Ctrl Değiştir ",
|
||||||
|
"Alt": "Alt",
|
||||||
|
"Toggle Alt": "Alt Değiştir",
|
||||||
|
"Send Tab": "Sekme Gönder",
|
||||||
|
"Tab": "Sekme",
|
||||||
|
"Esc": "Esc",
|
||||||
|
"Send Escape": "Boşluk Gönder",
|
||||||
|
"Ctrl+Alt+Del": "Ctrl + Alt + Del",
|
||||||
|
"Send Ctrl-Alt-Del": "Ctrl-Alt-Del Gönder",
|
||||||
|
"Shutdown/Reboot": "Kapat/Yeniden Başlat",
|
||||||
|
"Shutdown/Reboot...": "Kapat/Yeniden Başlat...",
|
||||||
|
"Power": "Güç",
|
||||||
|
"Shutdown": "Kapat",
|
||||||
|
"Reboot": "Yeniden Başlat",
|
||||||
|
"Reset": "Sıfırla",
|
||||||
|
"Clipboard": "Pano",
|
||||||
|
"Clear": "Temizle",
|
||||||
|
"Fullscreen": "Tam Ekran",
|
||||||
|
"Settings": "Ayarlar",
|
||||||
|
"Shared Mode": "Paylaşım Modu",
|
||||||
|
"View Only": "Sadece Görüntüle",
|
||||||
|
"Clip to Window": "Pencereye Tıkla",
|
||||||
|
"Scaling Mode:": "Ölçekleme Modu:",
|
||||||
|
"None": "Bilinmeyen",
|
||||||
|
"Local Scaling": "Yerel Ölçeklendirme",
|
||||||
|
"Remote Resizing": "Uzaktan Yeniden Boyutlandırma",
|
||||||
|
"Advanced": "Gelişmiş",
|
||||||
|
"Repeater ID:": "Tekralayıcı ID:",
|
||||||
|
"WebSocket": "WebSocket",
|
||||||
|
"Encrypt": "Şifrele",
|
||||||
|
"Host:": "Ana makine:",
|
||||||
|
"Port:": "Port:",
|
||||||
|
"Path:": "Yol:",
|
||||||
|
"Automatic Reconnect": "Otomatik Yeniden Bağlan",
|
||||||
|
"Reconnect Delay (ms):": "Yeniden Bağlanma Süreci (ms):",
|
||||||
|
"Logging:": "Giriş yapılıyor:",
|
||||||
|
"Disconnect": "Bağlantıyı Kes",
|
||||||
|
"Connect": "Bağlan",
|
||||||
|
"Password:": "Parola:",
|
||||||
|
"Cancel": "Vazgeç",
|
||||||
|
"Canvas not supported.": "Tuval desteklenmiyor."
|
||||||
|
}
|
69
static/js/novnc/app/locale/zh.json
Executable file
|
@ -0,0 +1,69 @@
|
||||||
|
{
|
||||||
|
"Connecting...": "連線中...",
|
||||||
|
"Disconnecting...": "正在中斷連線...",
|
||||||
|
"Reconnecting...": "重新連線中...",
|
||||||
|
"Internal error": "內部錯誤",
|
||||||
|
"Must set host": "請提供主機資訊",
|
||||||
|
"Connected (encrypted) to ": "已加密連線到",
|
||||||
|
"Connected (unencrypted) to ": "未加密連線到",
|
||||||
|
"Something went wrong, connection is closed": "發生錯誤,連線已關閉",
|
||||||
|
"Failed to connect to server": "無法連線到伺服器",
|
||||||
|
"Disconnected": "連線已中斷",
|
||||||
|
"New connection has been rejected with reason: ": "連線被拒絕,原因:",
|
||||||
|
"New connection has been rejected": "連線被拒絕",
|
||||||
|
"Password is required": "請提供密碼",
|
||||||
|
"noVNC encountered an error:": "noVNC 遇到一個錯誤:",
|
||||||
|
"Hide/Show the control bar": "顯示/隱藏控制列",
|
||||||
|
"Move/Drag Viewport": "拖放顯示範圍",
|
||||||
|
"viewport drag": "顯示範圍拖放",
|
||||||
|
"Active Mouse Button": "啟用滑鼠按鍵",
|
||||||
|
"No mousebutton": "無滑鼠按鍵",
|
||||||
|
"Left mousebutton": "滑鼠左鍵",
|
||||||
|
"Middle mousebutton": "滑鼠中鍵",
|
||||||
|
"Right mousebutton": "滑鼠右鍵",
|
||||||
|
"Keyboard": "鍵盤",
|
||||||
|
"Show Keyboard": "顯示鍵盤",
|
||||||
|
"Extra keys": "額外按鍵",
|
||||||
|
"Show Extra Keys": "顯示額外按鍵",
|
||||||
|
"Ctrl": "Ctrl",
|
||||||
|
"Toggle Ctrl": "切換 Ctrl",
|
||||||
|
"Alt": "Alt",
|
||||||
|
"Toggle Alt": "切換 Alt",
|
||||||
|
"Send Tab": "送出 Tab 鍵",
|
||||||
|
"Tab": "Tab",
|
||||||
|
"Esc": "Esc",
|
||||||
|
"Send Escape": "送出 Escape 鍵",
|
||||||
|
"Ctrl+Alt+Del": "Ctrl-Alt-Del",
|
||||||
|
"Send Ctrl-Alt-Del": "送出 Ctrl-Alt-Del 快捷鍵",
|
||||||
|
"Shutdown/Reboot": "關機/重新啟動",
|
||||||
|
"Shutdown/Reboot...": "關機/重新啟動...",
|
||||||
|
"Power": "電源",
|
||||||
|
"Shutdown": "關機",
|
||||||
|
"Reboot": "重新啟動",
|
||||||
|
"Reset": "重設",
|
||||||
|
"Clipboard": "剪貼簿",
|
||||||
|
"Clear": "清除",
|
||||||
|
"Fullscreen": "全螢幕",
|
||||||
|
"Settings": "設定",
|
||||||
|
"Shared Mode": "分享模式",
|
||||||
|
"View Only": "僅檢視",
|
||||||
|
"Clip to Window": "限制/裁切視窗大小",
|
||||||
|
"Scaling Mode:": "縮放模式:",
|
||||||
|
"None": "無",
|
||||||
|
"Local Scaling": "本機縮放",
|
||||||
|
"Remote Resizing": "遠端調整大小",
|
||||||
|
"Advanced": "進階",
|
||||||
|
"Repeater ID:": "中繼站 ID",
|
||||||
|
"WebSocket": "WebSocket",
|
||||||
|
"Encrypt": "加密",
|
||||||
|
"Host:": "主機:",
|
||||||
|
"Port:": "連接埠:",
|
||||||
|
"Path:": "路徑:",
|
||||||
|
"Automatic Reconnect": "自動重新連線",
|
||||||
|
"Reconnect Delay (ms):": "重新連線間隔 (ms):",
|
||||||
|
"Logging:": "日誌級別:",
|
||||||
|
"Disconnect": "中斷連線",
|
||||||
|
"Connect": "連線",
|
||||||
|
"Password:": "密碼:",
|
||||||
|
"Cancel": "取消"
|
||||||
|
}
|
163
static/js/novnc/app/localization.js
Executable file
|
@ -0,0 +1,163 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.Localizer = Localizer;
|
||||||
|
/*
|
||||||
|
* noVNC: HTML5 VNC client
|
||||||
|
* Copyright (C) 2012 Joel Martin
|
||||||
|
* Licensed under MPL 2.0 (see LICENSE.txt)
|
||||||
|
*
|
||||||
|
* See README.md for usage and integration instructions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Localization Utilities
|
||||||
|
*/
|
||||||
|
|
||||||
|
function Localizer() {
|
||||||
|
// Currently configured language
|
||||||
|
this.language = 'en';
|
||||||
|
|
||||||
|
// Current dictionary of translations
|
||||||
|
this.dictionary = undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
Localizer.prototype = {
|
||||||
|
// Configure suitable language based on user preferences
|
||||||
|
setup: function (supportedLanguages) {
|
||||||
|
var userLanguages;
|
||||||
|
|
||||||
|
this.language = 'en'; // Default: US English
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Navigator.languages only available in Chrome (32+) and FireFox (32+)
|
||||||
|
* Fall back to navigator.language for other browsers
|
||||||
|
*/
|
||||||
|
if (typeof window.navigator.languages == 'object') {
|
||||||
|
userLanguages = window.navigator.languages;
|
||||||
|
} else {
|
||||||
|
userLanguages = [navigator.language || navigator.userLanguage];
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var i = 0; i < userLanguages.length; i++) {
|
||||||
|
var userLang = userLanguages[i];
|
||||||
|
userLang = userLang.toLowerCase();
|
||||||
|
userLang = userLang.replace("_", "-");
|
||||||
|
userLang = userLang.split("-");
|
||||||
|
|
||||||
|
// Built-in default?
|
||||||
|
if (userLang[0] === 'en' && (userLang[1] === undefined || userLang[1] === 'us')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// First pass: perfect match
|
||||||
|
for (var j = 0; j < supportedLanguages.length; j++) {
|
||||||
|
var supLang = supportedLanguages[j];
|
||||||
|
supLang = supLang.toLowerCase();
|
||||||
|
supLang = supLang.replace("_", "-");
|
||||||
|
supLang = supLang.split("-");
|
||||||
|
|
||||||
|
if (userLang[0] !== supLang[0]) continue;
|
||||||
|
if (userLang[1] !== supLang[1]) continue;
|
||||||
|
|
||||||
|
this.language = supportedLanguages[j];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Second pass: fallback
|
||||||
|
for (var j = 0; j < supportedLanguages.length; j++) {
|
||||||
|
supLang = supportedLanguages[j];
|
||||||
|
supLang = supLang.toLowerCase();
|
||||||
|
supLang = supLang.replace("_", "-");
|
||||||
|
supLang = supLang.split("-");
|
||||||
|
|
||||||
|
if (userLang[0] !== supLang[0]) continue;
|
||||||
|
if (supLang[1] !== undefined) continue;
|
||||||
|
|
||||||
|
this.language = supportedLanguages[j];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// Retrieve localised text
|
||||||
|
get: function (id) {
|
||||||
|
if (typeof this.dictionary !== 'undefined' && this.dictionary[id]) {
|
||||||
|
return this.dictionary[id];
|
||||||
|
} else {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// Traverses the DOM and translates relevant fields
|
||||||
|
// See https://html.spec.whatwg.org/multipage/dom.html#attr-translate
|
||||||
|
translateDOM: function () {
|
||||||
|
var self = this;
|
||||||
|
function process(elem, enabled) {
|
||||||
|
function isAnyOf(searchElement, items) {
|
||||||
|
return items.indexOf(searchElement) !== -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
function translateAttribute(elem, attr) {
|
||||||
|
var str = elem.getAttribute(attr);
|
||||||
|
str = self.get(str);
|
||||||
|
elem.setAttribute(attr, str);
|
||||||
|
}
|
||||||
|
|
||||||
|
function translateTextNode(node) {
|
||||||
|
var str = node.data.trim();
|
||||||
|
str = self.get(str);
|
||||||
|
node.data = str;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (elem.hasAttribute("translate")) {
|
||||||
|
if (isAnyOf(elem.getAttribute("translate"), ["", "yes"])) {
|
||||||
|
enabled = true;
|
||||||
|
} else if (isAnyOf(elem.getAttribute("translate"), ["no"])) {
|
||||||
|
enabled = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (enabled) {
|
||||||
|
if (elem.hasAttribute("abbr") && elem.tagName === "TH") {
|
||||||
|
translateAttribute(elem, "abbr");
|
||||||
|
}
|
||||||
|
if (elem.hasAttribute("alt") && isAnyOf(elem.tagName, ["AREA", "IMG", "INPUT"])) {
|
||||||
|
translateAttribute(elem, "alt");
|
||||||
|
}
|
||||||
|
if (elem.hasAttribute("download") && isAnyOf(elem.tagName, ["A", "AREA"])) {
|
||||||
|
translateAttribute(elem, "download");
|
||||||
|
}
|
||||||
|
if (elem.hasAttribute("label") && isAnyOf(elem.tagName, ["MENUITEM", "MENU", "OPTGROUP", "OPTION", "TRACK"])) {
|
||||||
|
translateAttribute(elem, "label");
|
||||||
|
}
|
||||||
|
// FIXME: Should update "lang"
|
||||||
|
if (elem.hasAttribute("placeholder") && isAnyOf(elem.tagName, ["INPUT", "TEXTAREA"])) {
|
||||||
|
translateAttribute(elem, "placeholder");
|
||||||
|
}
|
||||||
|
if (elem.hasAttribute("title")) {
|
||||||
|
translateAttribute(elem, "title");
|
||||||
|
}
|
||||||
|
if (elem.hasAttribute("value") && elem.tagName === "INPUT" && isAnyOf(elem.getAttribute("type"), ["reset", "button", "submit"])) {
|
||||||
|
translateAttribute(elem, "value");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var i = 0; i < elem.childNodes.length; i++) {
|
||||||
|
var node = elem.childNodes[i];
|
||||||
|
if (node.nodeType === node.ELEMENT_NODE) {
|
||||||
|
process(node, enabled);
|
||||||
|
} else if (node.nodeType === node.TEXT_NODE && enabled) {
|
||||||
|
translateTextNode(node);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
process(document.body, true);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var l10n = exports.l10n = new Localizer();
|
||||||
|
exports.default = l10n.get.bind(l10n);
|
4
static/js/novnc/app/sounds/CREDITS
Executable file
|
@ -0,0 +1,4 @@
|
||||||
|
bell
|
||||||
|
Copyright: Dr. Richard Boulanger et al
|
||||||
|
URL: http://www.archive.org/details/Berklee44v12
|
||||||
|
License: CC-BY Attribution 3.0 Unported
|
BIN
static/js/novnc/app/sounds/bell.mp3
Executable file
BIN
static/js/novnc/app/sounds/bell.oga
Executable file
0
static/js/novnc/Orbitron700.ttf → static/js/novnc/app/styles/Orbitron700.ttf
Normal file → Executable file
0
static/js/novnc/Orbitron700.woff → static/js/novnc/app/styles/Orbitron700.woff
Normal file → Executable file
902
static/js/novnc/app/styles/base.css
Executable file
|
@ -0,0 +1,902 @@
|
||||||
|
/*
|
||||||
|
* noVNC base CSS
|
||||||
|
* Copyright (C) 2012 Joel Martin
|
||||||
|
* Copyright (C) 2016 Samuel Mannehed for Cendio AB
|
||||||
|
* Copyright (C) 2016 Pierre Ossman for Cendio AB
|
||||||
|
* noVNC is licensed under the MPL 2.0 (see LICENSE.txt)
|
||||||
|
* This file is licensed under the 2-Clause BSD license (see LICENSE.txt).
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Z index layers:
|
||||||
|
*
|
||||||
|
* 0: Main screen
|
||||||
|
* 10: Control bar
|
||||||
|
* 50: Transition blocker
|
||||||
|
* 60: Connection popups
|
||||||
|
* 100: Status bar
|
||||||
|
* ...
|
||||||
|
* 1000: Javascript crash
|
||||||
|
* ...
|
||||||
|
* 10000: Max (used for polyfills)
|
||||||
|
*/
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin:0;
|
||||||
|
padding:0;
|
||||||
|
font-family: Helvetica;
|
||||||
|
/*Background image with light grey curve.*/
|
||||||
|
background-color:#494949;
|
||||||
|
background-repeat:no-repeat;
|
||||||
|
background-position:right bottom;
|
||||||
|
height:100%;
|
||||||
|
touch-action: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
html {
|
||||||
|
height:100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.noVNC_only_touch.noVNC_hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.noVNC_disabled {
|
||||||
|
color: rgb(128, 128, 128);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------
|
||||||
|
* Spinner
|
||||||
|
* ----------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
.noVNC_spinner {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.noVNC_spinner, .noVNC_spinner::before, .noVNC_spinner::after {
|
||||||
|
width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
border-radius: 2px;
|
||||||
|
box-shadow: -60px 10px 0 rgba(255, 255, 255, 0);
|
||||||
|
animation: noVNC_spinner 1.0s linear infinite;
|
||||||
|
}
|
||||||
|
.noVNC_spinner::before {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
left: 0px;
|
||||||
|
top: 0px;
|
||||||
|
animation-delay: -0.1s;
|
||||||
|
}
|
||||||
|
.noVNC_spinner::after {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
top: 0px;
|
||||||
|
left: 0px;
|
||||||
|
animation-delay: 0.1s;
|
||||||
|
}
|
||||||
|
@keyframes noVNC_spinner {
|
||||||
|
0% { box-shadow: -60px 10px 0 rgba(255, 255, 255, 0); width: 20px; }
|
||||||
|
25% { box-shadow: 20px 10px 0 rgba(255, 255, 255, 1); width: 10px; }
|
||||||
|
50% { box-shadow: 60px 10px 0 rgba(255, 255, 255, 0); width: 10px; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------
|
||||||
|
* Input Elements
|
||||||
|
* ----------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
input[type=input], input[type=password], input[type=number],
|
||||||
|
input:not([type]), textarea {
|
||||||
|
/* Disable default rendering */
|
||||||
|
-webkit-appearance: none;
|
||||||
|
-moz-appearance: none;
|
||||||
|
background: none;
|
||||||
|
|
||||||
|
margin: 2px;
|
||||||
|
padding: 2px;
|
||||||
|
border: 1px solid rgb(192, 192, 192);
|
||||||
|
border-radius: 5px;
|
||||||
|
color: black;
|
||||||
|
background: linear-gradient(to top, rgb(255, 255, 255) 80%, rgb(240, 240, 240));
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type=button], input[type=submit], select {
|
||||||
|
/* Disable default rendering */
|
||||||
|
-webkit-appearance: none;
|
||||||
|
-moz-appearance: none;
|
||||||
|
background: none;
|
||||||
|
|
||||||
|
margin: 2px;
|
||||||
|
padding: 2px;
|
||||||
|
border: 1px solid rgb(192, 192, 192);
|
||||||
|
border-bottom-width: 2px;
|
||||||
|
border-radius: 5px;
|
||||||
|
color: black;
|
||||||
|
background: linear-gradient(to top, rgb(255, 255, 255), rgb(240, 240, 240));
|
||||||
|
|
||||||
|
/* This avoids it jumping around when :active */
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type=button], input[type=submit] {
|
||||||
|
padding-left: 20px;
|
||||||
|
padding-right: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
option {
|
||||||
|
color: black;
|
||||||
|
background: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type=input]:focus, input[type=password]:focus,
|
||||||
|
input:not([type]):focus, input[type=button]:focus,
|
||||||
|
input[type=submit]:focus,
|
||||||
|
textarea:focus, select:focus {
|
||||||
|
box-shadow: 0px 0px 3px rgba(74, 144, 217, 0.5);
|
||||||
|
border-color: rgb(74, 144, 217);
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type=button]::-moz-focus-inner,
|
||||||
|
input[type=submit]::-moz-focus-inner {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type=input]:disabled, input[type=password]:disabled,
|
||||||
|
input:not([type]):disabled, input[type=button]:disabled,
|
||||||
|
input[type=submit]:disabled, input[type=number]:disabled,
|
||||||
|
textarea:disabled, select:disabled {
|
||||||
|
color: rgb(128, 128, 128);
|
||||||
|
background: rgb(240, 240, 240);
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type=button]:active, input[type=submit]:active,
|
||||||
|
select:active {
|
||||||
|
border-bottom-width: 1px;
|
||||||
|
margin-top: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
:root:not(.noVNC_touch) input[type=button]:hover:not(:disabled),
|
||||||
|
:root:not(.noVNC_touch) input[type=submit]:hover:not(:disabled),
|
||||||
|
:root:not(.noVNC_touch) select:hover:not(:disabled) {
|
||||||
|
background: linear-gradient(to top, rgb(255, 255, 255), rgb(250, 250, 250));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------
|
||||||
|
* WebKit centering hacks
|
||||||
|
* ----------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
.noVNC_center {
|
||||||
|
/*
|
||||||
|
* This is a workaround because webkit misrenders transforms and
|
||||||
|
* uses non-integer coordinates, resulting in blurry content.
|
||||||
|
* Ideally we'd use "top: 50%; transform: translateY(-50%);" on
|
||||||
|
* the objects instead.
|
||||||
|
*/
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
.noVNC_center > * {
|
||||||
|
pointer-events: auto;
|
||||||
|
}
|
||||||
|
.noVNC_vcenter {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
height: 100%;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
.noVNC_vcenter > * {
|
||||||
|
pointer-events: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------
|
||||||
|
* Layering
|
||||||
|
* ----------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
.noVNC_connect_layer {
|
||||||
|
z-index: 60;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------
|
||||||
|
* Fallback error
|
||||||
|
* ----------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
#noVNC_fallback_error {
|
||||||
|
z-index: 1000;
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
#noVNC_fallback_error.noVNC_open {
|
||||||
|
visibility: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
#noVNC_fallback_error > div {
|
||||||
|
max-width: 90%;
|
||||||
|
padding: 15px;
|
||||||
|
|
||||||
|
transition: 0.5s ease-in-out;
|
||||||
|
|
||||||
|
transform: translateY(-50px);
|
||||||
|
opacity: 0;
|
||||||
|
|
||||||
|
text-align: center;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #fff;
|
||||||
|
|
||||||
|
border-radius: 10px;
|
||||||
|
box-shadow: 6px 6px 0px rgba(0, 0, 0, 0.5);
|
||||||
|
background: rgba(200,55,55,0.8);
|
||||||
|
}
|
||||||
|
#noVNC_fallback_error.noVNC_open > div {
|
||||||
|
transform: translateY(0);
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#noVNC_fallback_errormsg {
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
#noVNC_fallback_errormsg .noVNC_message {
|
||||||
|
display: inline-block;
|
||||||
|
text-align: left;
|
||||||
|
font-family: monospace;
|
||||||
|
white-space: pre-wrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
#noVNC_fallback_error .noVNC_location {
|
||||||
|
font-style: italic;
|
||||||
|
font-size: 0.8em;
|
||||||
|
color: rgba(255, 255, 255, 0.8);
|
||||||
|
}
|
||||||
|
|
||||||
|
#noVNC_fallback_error .noVNC_stack {
|
||||||
|
max-height: 50vh;
|
||||||
|
padding: 10px;
|
||||||
|
margin: 10px;
|
||||||
|
font-size: 0.8em;
|
||||||
|
text-align: left;
|
||||||
|
font-family: monospace;
|
||||||
|
white-space: pre;
|
||||||
|
border: 1px solid rgba(0, 0, 0, 0.5);
|
||||||
|
background: rgba(0, 0, 0, 0.2);
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------
|
||||||
|
* Control Bar
|
||||||
|
* ----------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
#noVNC_control_bar_anchor {
|
||||||
|
/* The anchor is needed to get z-stacking to work */
|
||||||
|
position: fixed;
|
||||||
|
z-index: 10;
|
||||||
|
|
||||||
|
transition: 0.5s ease-in-out;
|
||||||
|
|
||||||
|
/* Edge misrenders animations wihthout this */
|
||||||
|
transform: translateX(0);
|
||||||
|
}
|
||||||
|
:root.noVNC_connected #noVNC_control_bar_anchor.noVNC_idle {
|
||||||
|
opacity: 0.8;
|
||||||
|
}
|
||||||
|
#noVNC_control_bar_anchor.noVNC_right {
|
||||||
|
left: auto;
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#noVNC_control_bar {
|
||||||
|
position: relative;
|
||||||
|
left: -100%;
|
||||||
|
|
||||||
|
transition: 0.5s ease-in-out;
|
||||||
|
|
||||||
|
background-color: rgb(110, 132, 163);
|
||||||
|
border-radius: 0 10px 10px 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
#noVNC_control_bar.noVNC_open {
|
||||||
|
box-shadow: 6px 6px 0px rgba(0, 0, 0, 0.5);
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
|
#noVNC_control_bar::before {
|
||||||
|
/* This extra element is to get a proper shadow */
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
z-index: -1;
|
||||||
|
height: 100%;
|
||||||
|
width: 30px;
|
||||||
|
left: -30px;
|
||||||
|
transition: box-shadow 0.5s ease-in-out;
|
||||||
|
}
|
||||||
|
#noVNC_control_bar.noVNC_open::before {
|
||||||
|
box-shadow: 6px 6px 0px rgba(0, 0, 0, 0.5);
|
||||||
|
}
|
||||||
|
.noVNC_right #noVNC_control_bar {
|
||||||
|
left: 100%;
|
||||||
|
border-radius: 10px 0 0 10px;
|
||||||
|
}
|
||||||
|
.noVNC_right #noVNC_control_bar.noVNC_open {
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
|
.noVNC_right #noVNC_control_bar::before {
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
#noVNC_control_bar_handle {
|
||||||
|
position: absolute;
|
||||||
|
left: -15px;
|
||||||
|
top: 0;
|
||||||
|
transform: translateY(35px);
|
||||||
|
width: calc(100% + 30px);
|
||||||
|
height: 50px;
|
||||||
|
z-index: -1;
|
||||||
|
cursor: pointer;
|
||||||
|
border-radius: 5px;
|
||||||
|
background-color: rgb(83, 99, 122);
|
||||||
|
background-image: url("../images/handle_bg.svg");
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: right;
|
||||||
|
box-shadow: 3px 3px 0px rgba(0, 0, 0, 0.5);
|
||||||
|
}
|
||||||
|
#noVNC_control_bar_handle:after {
|
||||||
|
content: "";
|
||||||
|
transition: transform 0.5s ease-in-out;
|
||||||
|
background: url("../images/handle.svg");
|
||||||
|
position: absolute;
|
||||||
|
top: 22px; /* (50px-6px)/2 */
|
||||||
|
right: 5px;
|
||||||
|
width: 5px;
|
||||||
|
height: 6px;
|
||||||
|
}
|
||||||
|
#noVNC_control_bar.noVNC_open #noVNC_control_bar_handle:after {
|
||||||
|
transform: translateX(1px) rotate(180deg);
|
||||||
|
}
|
||||||
|
:root:not(.noVNC_connected) #noVNC_control_bar_handle {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.noVNC_right #noVNC_control_bar_handle {
|
||||||
|
background-position: left;
|
||||||
|
}
|
||||||
|
.noVNC_right #noVNC_control_bar_handle:after {
|
||||||
|
left: 5px;
|
||||||
|
right: 0;
|
||||||
|
transform: translateX(1px) rotate(180deg);
|
||||||
|
}
|
||||||
|
.noVNC_right #noVNC_control_bar.noVNC_open #noVNC_control_bar_handle:after {
|
||||||
|
transform: none;
|
||||||
|
}
|
||||||
|
#noVNC_control_bar_handle div {
|
||||||
|
position: absolute;
|
||||||
|
right: -35px;
|
||||||
|
top: 0;
|
||||||
|
width: 50px;
|
||||||
|
height: 50px;
|
||||||
|
}
|
||||||
|
:root:not(.noVNC_touch) #noVNC_control_bar_handle div {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.noVNC_right #noVNC_control_bar_handle div {
|
||||||
|
left: -35px;
|
||||||
|
right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
#noVNC_control_bar .noVNC_scroll {
|
||||||
|
max-height: 100vh; /* Chrome is buggy with 100% */
|
||||||
|
overflow-x: hidden;
|
||||||
|
overflow-y: auto;
|
||||||
|
padding: 0 10px 0 5px;
|
||||||
|
}
|
||||||
|
.noVNC_right #noVNC_control_bar .noVNC_scroll {
|
||||||
|
padding: 0 5px 0 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Control bar hint */
|
||||||
|
#noVNC_control_bar_hint {
|
||||||
|
position: fixed;
|
||||||
|
left: calc(100vw - 50px);
|
||||||
|
right: auto;
|
||||||
|
top: 50%;
|
||||||
|
transform: translateY(-50%) scale(0);
|
||||||
|
width: 100px;
|
||||||
|
height: 50%;
|
||||||
|
max-height: 600px;
|
||||||
|
|
||||||
|
visibility: hidden;
|
||||||
|
opacity: 0;
|
||||||
|
transition: 0.2s ease-in-out;
|
||||||
|
background: transparent;
|
||||||
|
box-shadow: 0 0 10px black, inset 0 0 10px 10px rgba(110, 132, 163, 0.8);
|
||||||
|
border-radius: 10px;
|
||||||
|
transition-delay: 0s;
|
||||||
|
}
|
||||||
|
#noVNC_control_bar_anchor.noVNC_right #noVNC_control_bar_hint{
|
||||||
|
left: auto;
|
||||||
|
right: calc(100vw - 50px);
|
||||||
|
}
|
||||||
|
#noVNC_control_bar_hint.noVNC_active {
|
||||||
|
visibility: visible;
|
||||||
|
opacity: 1;
|
||||||
|
transition-delay: 0.2s;
|
||||||
|
transform: translateY(-50%) scale(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* General button style */
|
||||||
|
.noVNC_button {
|
||||||
|
display: block;
|
||||||
|
padding: 4px 4px;
|
||||||
|
margin: 10px 0;
|
||||||
|
vertical-align: middle;
|
||||||
|
border:1px solid rgba(255, 255, 255, 0.2);
|
||||||
|
border-radius: 6px;
|
||||||
|
}
|
||||||
|
.noVNC_button.noVNC_selected {
|
||||||
|
border-color: rgba(0, 0, 0, 0.8);
|
||||||
|
background: rgba(0, 0, 0, 0.5);
|
||||||
|
}
|
||||||
|
.noVNC_button:disabled {
|
||||||
|
opacity: 0.4;
|
||||||
|
}
|
||||||
|
.noVNC_button:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
.noVNC_button:active {
|
||||||
|
padding-top: 5px;
|
||||||
|
padding-bottom: 3px;
|
||||||
|
}
|
||||||
|
/* Android browsers don't properly update hover state if touch events
|
||||||
|
* are intercepted, but focus should be safe to display */
|
||||||
|
:root:not(.noVNC_touch) .noVNC_button.noVNC_selected:hover,
|
||||||
|
.noVNC_button.noVNC_selected:focus {
|
||||||
|
border-color: rgba(0, 0, 0, 0.4);
|
||||||
|
background: rgba(0, 0, 0, 0.2);
|
||||||
|
}
|
||||||
|
:root:not(.noVNC_touch) .noVNC_button:hover,
|
||||||
|
.noVNC_button:focus {
|
||||||
|
background: rgba(255, 255, 255, 0.2);
|
||||||
|
}
|
||||||
|
.noVNC_button.noVNC_hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Panels */
|
||||||
|
.noVNC_panel {
|
||||||
|
transform: translateX(25px);
|
||||||
|
|
||||||
|
transition: 0.5s ease-in-out;
|
||||||
|
|
||||||
|
max-height: 100vh; /* Chrome is buggy with 100% */
|
||||||
|
overflow-x: hidden;
|
||||||
|
overflow-y: auto;
|
||||||
|
|
||||||
|
visibility: hidden;
|
||||||
|
opacity: 0;
|
||||||
|
|
||||||
|
padding: 15px;
|
||||||
|
|
||||||
|
background: #fff;
|
||||||
|
border-radius: 10px;
|
||||||
|
color: #000;
|
||||||
|
border: 2px solid #E0E0E0;
|
||||||
|
box-shadow: 6px 6px 0px rgba(0, 0, 0, 0.5);
|
||||||
|
}
|
||||||
|
.noVNC_panel.noVNC_open {
|
||||||
|
visibility: visible;
|
||||||
|
opacity: 1;
|
||||||
|
transform: translateX(75px);
|
||||||
|
}
|
||||||
|
.noVNC_right .noVNC_vcenter {
|
||||||
|
left: auto;
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
.noVNC_right .noVNC_panel {
|
||||||
|
transform: translateX(-25px);
|
||||||
|
}
|
||||||
|
.noVNC_right .noVNC_panel.noVNC_open {
|
||||||
|
transform: translateX(-75px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.noVNC_panel hr {
|
||||||
|
border: none;
|
||||||
|
border-top: 1px solid rgb(192, 192, 192);
|
||||||
|
}
|
||||||
|
|
||||||
|
.noVNC_panel label {
|
||||||
|
display: block;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.noVNC_panel .noVNC_heading {
|
||||||
|
background-color: rgb(110, 132, 163);
|
||||||
|
border-radius: 5px;
|
||||||
|
padding: 5px;
|
||||||
|
/* Compensate for padding in image */
|
||||||
|
padding-right: 8px;
|
||||||
|
color: white;
|
||||||
|
font-size: 20px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
.noVNC_panel .noVNC_heading img {
|
||||||
|
vertical-align: bottom;
|
||||||
|
}
|
||||||
|
|
||||||
|
.noVNC_submit {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Expanders */
|
||||||
|
.noVNC_expander {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.noVNC_expander::before {
|
||||||
|
content: url("../images/expander.svg");
|
||||||
|
display: inline-block;
|
||||||
|
margin-right: 5px;
|
||||||
|
transition: 0.2s ease-in-out;
|
||||||
|
}
|
||||||
|
.noVNC_expander.noVNC_open::before {
|
||||||
|
transform: rotateZ(90deg);
|
||||||
|
}
|
||||||
|
.noVNC_expander ~ * {
|
||||||
|
margin: 5px;
|
||||||
|
margin-left: 10px;
|
||||||
|
padding: 5px;
|
||||||
|
background: rgba(0, 0, 0, 0.05);
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
.noVNC_expander:not(.noVNC_open) ~ * {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Control bar content */
|
||||||
|
|
||||||
|
#noVNC_control_bar .noVNC_logo {
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
|
||||||
|
:root:not(.noVNC_connected) #noVNC_view_drag_button {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* noVNC Touch Device only buttons */
|
||||||
|
:root:not(.noVNC_connected) #noVNC_mobile_buttons {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
:root:not(.noVNC_touch) #noVNC_mobile_buttons {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Extra manual keys */
|
||||||
|
:root:not(.noVNC_connected) #noVNC_extra_keys {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#noVNC_modifiers {
|
||||||
|
background-color: rgb(92, 92, 92);
|
||||||
|
border: none;
|
||||||
|
padding: 0 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Shutdown/Reboot */
|
||||||
|
:root:not(.noVNC_connected) #noVNC_power_button {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
#noVNC_power {
|
||||||
|
}
|
||||||
|
#noVNC_power_buttons {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#noVNC_power input[type=button] {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Clipboard */
|
||||||
|
:root:not(.noVNC_connected) #noVNC_clipboard_button {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
#noVNC_clipboard {
|
||||||
|
/* Full screen, minus padding and left and right margins */
|
||||||
|
max-width: calc(100vw - 2*15px - 75px - 25px);
|
||||||
|
}
|
||||||
|
#noVNC_clipboard_text {
|
||||||
|
width: 500px;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Settings */
|
||||||
|
#noVNC_settings {
|
||||||
|
}
|
||||||
|
#noVNC_settings ul {
|
||||||
|
list-style: none;
|
||||||
|
margin: 0px;
|
||||||
|
padding: 0px;
|
||||||
|
}
|
||||||
|
#noVNC_setting_port {
|
||||||
|
width: 80px;
|
||||||
|
}
|
||||||
|
#noVNC_setting_path {
|
||||||
|
width: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Connection Controls */
|
||||||
|
:root:not(.noVNC_connected) #noVNC_disconnect_button {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------
|
||||||
|
* Status Dialog
|
||||||
|
* ----------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
#noVNC_status {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
z-index: 100;
|
||||||
|
transform: translateY(-100%);
|
||||||
|
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
|
transition: 0.5s ease-in-out;
|
||||||
|
|
||||||
|
visibility: hidden;
|
||||||
|
opacity: 0;
|
||||||
|
|
||||||
|
padding: 5px;
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: center;
|
||||||
|
align-content: center;
|
||||||
|
|
||||||
|
line-height: 25px;
|
||||||
|
word-wrap: break-word;
|
||||||
|
color: #fff;
|
||||||
|
|
||||||
|
border-bottom: 1px solid rgba(0, 0, 0, 0.9);
|
||||||
|
}
|
||||||
|
#noVNC_status.noVNC_open {
|
||||||
|
transform: translateY(0);
|
||||||
|
visibility: visible;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#noVNC_status::before {
|
||||||
|
content: "";
|
||||||
|
display: inline-block;
|
||||||
|
width: 25px;
|
||||||
|
height: 25px;
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#noVNC_status.noVNC_status_normal {
|
||||||
|
background: rgba(128,128,128,0.9);
|
||||||
|
}
|
||||||
|
#noVNC_status.noVNC_status_normal::before {
|
||||||
|
content: url("../images/info.svg") " ";
|
||||||
|
}
|
||||||
|
#noVNC_status.noVNC_status_error {
|
||||||
|
background: rgba(200,55,55,0.9);
|
||||||
|
}
|
||||||
|
#noVNC_status.noVNC_status_error::before {
|
||||||
|
content: url("../images/error.svg") " ";
|
||||||
|
}
|
||||||
|
#noVNC_status.noVNC_status_warn {
|
||||||
|
background: rgba(180,180,30,0.9);
|
||||||
|
}
|
||||||
|
#noVNC_status.noVNC_status_warn::before {
|
||||||
|
content: url("../images/warning.svg") " ";
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------
|
||||||
|
* Connect Dialog
|
||||||
|
* ----------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
#noVNC_connect_dlg {
|
||||||
|
transition: 0.5s ease-in-out;
|
||||||
|
|
||||||
|
transform: scale(0, 0);
|
||||||
|
visibility: hidden;
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
#noVNC_connect_dlg.noVNC_open {
|
||||||
|
transform: scale(1, 1);
|
||||||
|
visibility: visible;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
#noVNC_connect_dlg .noVNC_logo {
|
||||||
|
transition: 0.5s ease-in-out;
|
||||||
|
padding: 10px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
|
||||||
|
font-size: 80px;
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
@media (max-width: 440px) {
|
||||||
|
#noVNC_connect_dlg {
|
||||||
|
max-width: calc(100vw - 100px);
|
||||||
|
}
|
||||||
|
#noVNC_connect_dlg .noVNC_logo {
|
||||||
|
font-size: calc(25vw - 30px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#noVNC_connect_button {
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
|
padding: 10px;
|
||||||
|
|
||||||
|
color: white;
|
||||||
|
background-color: rgb(110, 132, 163);
|
||||||
|
border-radius: 12px;
|
||||||
|
|
||||||
|
text-align: center;
|
||||||
|
font-size: 20px;
|
||||||
|
|
||||||
|
box-shadow: 6px 6px 0px rgba(0, 0, 0, 0.5);
|
||||||
|
}
|
||||||
|
#noVNC_connect_button div {
|
||||||
|
margin: 2px;
|
||||||
|
padding: 5px 30px;
|
||||||
|
border: 1px solid rgb(83, 99, 122);
|
||||||
|
border-bottom-width: 2px;
|
||||||
|
border-radius: 5px;
|
||||||
|
background: linear-gradient(to top, rgb(110, 132, 163), rgb(99, 119, 147));
|
||||||
|
|
||||||
|
/* This avoids it jumping around when :active */
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
#noVNC_connect_button div:active {
|
||||||
|
border-bottom-width: 1px;
|
||||||
|
margin-top: 3px;
|
||||||
|
}
|
||||||
|
:root:not(.noVNC_touch) #noVNC_connect_button div:hover {
|
||||||
|
background: linear-gradient(to top, rgb(110, 132, 163), rgb(105, 125, 155));
|
||||||
|
}
|
||||||
|
|
||||||
|
#noVNC_connect_button img {
|
||||||
|
vertical-align: bottom;
|
||||||
|
height: 1.3em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------
|
||||||
|
* Password Dialog
|
||||||
|
* ----------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
#noVNC_password_dlg {
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
transform: translateY(-50px);
|
||||||
|
}
|
||||||
|
#noVNC_password_dlg.noVNC_open {
|
||||||
|
transform: translateY(0);
|
||||||
|
}
|
||||||
|
#noVNC_password_dlg ul {
|
||||||
|
list-style: none;
|
||||||
|
margin: 0px;
|
||||||
|
padding: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------
|
||||||
|
* Main Area
|
||||||
|
* ----------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Transition screen */
|
||||||
|
#noVNC_transition {
|
||||||
|
display: none;
|
||||||
|
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
bottom: 0;
|
||||||
|
right: 0;
|
||||||
|
|
||||||
|
color: white;
|
||||||
|
background: rgba(0, 0, 0, 0.5);
|
||||||
|
z-index: 50;
|
||||||
|
|
||||||
|
/*display: flex;*/
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
:root.noVNC_loading #noVNC_transition,
|
||||||
|
:root.noVNC_connecting #noVNC_transition,
|
||||||
|
:root.noVNC_disconnecting #noVNC_transition,
|
||||||
|
:root.noVNC_reconnecting #noVNC_transition {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
:root:not(.noVNC_reconnecting) #noVNC_cancel_reconnect_button {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
#noVNC_transition_text {
|
||||||
|
font-size: 1.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Main container */
|
||||||
|
#noVNC_container {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background-color: #313131;
|
||||||
|
border-bottom-right-radius: 800px 600px;
|
||||||
|
/*border-top-left-radius: 800px 600px;*/
|
||||||
|
}
|
||||||
|
|
||||||
|
#noVNC_keyboardinput {
|
||||||
|
width: 1px;
|
||||||
|
height: 1px;
|
||||||
|
background-color: #fff;
|
||||||
|
color: #fff;
|
||||||
|
border: 0;
|
||||||
|
position: absolute;
|
||||||
|
left: -40px;
|
||||||
|
z-index: -1;
|
||||||
|
ime-mode: disabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*Default noVNC logo.*/
|
||||||
|
/* From: http://fonts.googleapis.com/css?family=Orbitron:700 */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Orbitron';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 700;
|
||||||
|
src: local('?'), url('Orbitron700.woff') format('woff'),
|
||||||
|
url('Orbitron700.ttf') format('truetype');
|
||||||
|
}
|
||||||
|
|
||||||
|
.noVNC_logo {
|
||||||
|
color:yellow;
|
||||||
|
font-family: 'Orbitron', 'OrbitronTTF', sans-serif;
|
||||||
|
line-height:90%;
|
||||||
|
text-shadow: 0.1em 0.1em 0 black;
|
||||||
|
}
|
||||||
|
.noVNC_logo span{
|
||||||
|
color:green;
|
||||||
|
}
|
||||||
|
|
||||||
|
#noVNC_bell {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------
|
||||||
|
* Media sizing
|
||||||
|
* ----------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
@media screen and (max-width: 640px){
|
||||||
|
#noVNC_logo {
|
||||||
|
font-size: 150px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (min-width: 321px) and (max-width: 480px) {
|
||||||
|
#noVNC_logo {
|
||||||
|
font-size: 110px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 320px) {
|
||||||
|
#noVNC_logo {
|
||||||
|
font-size: 90px;
|
||||||
|
}
|
||||||
|
}
|
63
static/js/novnc/app/styles/lite.css
Executable file
|
@ -0,0 +1,63 @@
|
||||||
|
/*
|
||||||
|
* noVNC auto CSS
|
||||||
|
* Copyright (C) 2012 Joel Martin
|
||||||
|
* Copyright (C) 2017 Samuel Mannehed for Cendio AB
|
||||||
|
* noVNC is licensed under the MPL 2.0 (see LICENSE.txt)
|
||||||
|
* This file is licensed under the 2-Clause BSD license (see LICENSE.txt).
|
||||||
|
*/
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin:0;
|
||||||
|
background-color:#313131;
|
||||||
|
border-bottom-right-radius: 800px 600px;
|
||||||
|
height:100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
html {
|
||||||
|
background-color:#494949;
|
||||||
|
height:100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#noVNC_status_bar {
|
||||||
|
width: 100%;
|
||||||
|
display:flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
#noVNC_status {
|
||||||
|
color: #fff;
|
||||||
|
font: bold 12px Helvetica;
|
||||||
|
margin: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.noVNC_status_normal {
|
||||||
|
background: linear-gradient(#b2bdcd 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.noVNC_status_error {
|
||||||
|
background: linear-gradient(#c83737 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.noVNC_status_warn {
|
||||||
|
background: linear-gradient(#b4b41e 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.noNVC_shown {
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
.noVNC_hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#noVNC_left_dummy_elem {
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#noVNC_buttons {
|
||||||
|
padding: 1px;
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
}
|
1620
static/js/novnc/app/ui.js
Executable file
270
static/js/novnc/app/webutil.js
Executable file
|
@ -0,0 +1,270 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.init_logging = init_logging;
|
||||||
|
exports.getQueryVar = getQueryVar;
|
||||||
|
exports.getHashVar = getHashVar;
|
||||||
|
exports.getConfigVar = getConfigVar;
|
||||||
|
exports.createCookie = createCookie;
|
||||||
|
exports.readCookie = readCookie;
|
||||||
|
exports.eraseCookie = eraseCookie;
|
||||||
|
exports.initSettings = initSettings;
|
||||||
|
exports.writeSetting = writeSetting;
|
||||||
|
exports.readSetting = readSetting;
|
||||||
|
exports.eraseSetting = eraseSetting;
|
||||||
|
exports.injectParamIfMissing = injectParamIfMissing;
|
||||||
|
exports.fetchJSON = fetchJSON;
|
||||||
|
|
||||||
|
var _logging = require("../core/util/logging.js");
|
||||||
|
|
||||||
|
// init log level reading the logging HTTP param
|
||||||
|
function init_logging(level) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
if (typeof level !== "undefined") {
|
||||||
|
(0, _logging.init_logging)(level);
|
||||||
|
} else {
|
||||||
|
var param = document.location.href.match(/logging=([A-Za-z0-9\._\-]*)/);
|
||||||
|
(0, _logging.init_logging)(param || undefined);
|
||||||
|
}
|
||||||
|
} /*
|
||||||
|
* noVNC: HTML5 VNC client
|
||||||
|
* Copyright (C) 2012 Joel Martin
|
||||||
|
* Copyright (C) 2013 NTT corp.
|
||||||
|
* Licensed under MPL 2.0 (see LICENSE.txt)
|
||||||
|
*
|
||||||
|
* See README.md for usage and integration instructions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
;
|
||||||
|
|
||||||
|
// Read a query string variable
|
||||||
|
function getQueryVar(name, defVal) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var re = new RegExp('.*[?&]' + name + '=([^&#]*)'),
|
||||||
|
match = document.location.href.match(re);
|
||||||
|
if (typeof defVal === 'undefined') {
|
||||||
|
defVal = null;
|
||||||
|
}
|
||||||
|
if (match) {
|
||||||
|
return decodeURIComponent(match[1]);
|
||||||
|
} else {
|
||||||
|
return defVal;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Read a hash fragment variable
|
||||||
|
function getHashVar(name, defVal) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var re = new RegExp('.*[&#]' + name + '=([^&]*)'),
|
||||||
|
match = document.location.hash.match(re);
|
||||||
|
if (typeof defVal === 'undefined') {
|
||||||
|
defVal = null;
|
||||||
|
}
|
||||||
|
if (match) {
|
||||||
|
return decodeURIComponent(match[1]);
|
||||||
|
} else {
|
||||||
|
return defVal;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Read a variable from the fragment or the query string
|
||||||
|
// Fragment takes precedence
|
||||||
|
function getConfigVar(name, defVal) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var val = getHashVar(name);
|
||||||
|
if (val === null) {
|
||||||
|
val = getQueryVar(name, defVal);
|
||||||
|
}
|
||||||
|
return val;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Cookie handling. Dervied from: http://www.quirksmode.org/js/cookies.html
|
||||||
|
*/
|
||||||
|
|
||||||
|
// No days means only for this browser session
|
||||||
|
function createCookie(name, value, days) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var date, expires;
|
||||||
|
if (days) {
|
||||||
|
date = new Date();
|
||||||
|
date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);
|
||||||
|
expires = "; expires=" + date.toGMTString();
|
||||||
|
} else {
|
||||||
|
expires = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
var secure;
|
||||||
|
if (document.location.protocol === "https:") {
|
||||||
|
secure = "; secure";
|
||||||
|
} else {
|
||||||
|
secure = "";
|
||||||
|
}
|
||||||
|
document.cookie = name + "=" + value + expires + "; path=/" + secure;
|
||||||
|
};
|
||||||
|
|
||||||
|
function readCookie(name, defaultValue) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var nameEQ = name + "=",
|
||||||
|
ca = document.cookie.split(';');
|
||||||
|
|
||||||
|
for (var i = 0; i < ca.length; i += 1) {
|
||||||
|
var c = ca[i];
|
||||||
|
while (c.charAt(0) === ' ') {
|
||||||
|
c = c.substring(1, c.length);
|
||||||
|
}
|
||||||
|
if (c.indexOf(nameEQ) === 0) {
|
||||||
|
return c.substring(nameEQ.length, c.length);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return typeof defaultValue !== 'undefined' ? defaultValue : null;
|
||||||
|
};
|
||||||
|
|
||||||
|
function eraseCookie(name) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
createCookie(name, "", -1);
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Setting handling.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var settings = {};
|
||||||
|
|
||||||
|
function initSettings(callback /*, ...callbackArgs */) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var callbackArgs = Array.prototype.slice.call(arguments, 1);
|
||||||
|
if (window.chrome && window.chrome.storage) {
|
||||||
|
window.chrome.storage.sync.get(function (cfg) {
|
||||||
|
settings = cfg;
|
||||||
|
if (callback) {
|
||||||
|
callback.apply(this, callbackArgs);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// No-op
|
||||||
|
if (callback) {
|
||||||
|
callback.apply(this, callbackArgs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// No days means only for this browser session
|
||||||
|
function writeSetting(name, value) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
if (window.chrome && window.chrome.storage) {
|
||||||
|
if (settings[name] !== value) {
|
||||||
|
settings[name] = value;
|
||||||
|
window.chrome.storage.sync.set(settings);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
localStorage.setItem(name, value);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function readSetting(name, defaultValue) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var value;
|
||||||
|
if (window.chrome && window.chrome.storage) {
|
||||||
|
value = settings[name];
|
||||||
|
} else {
|
||||||
|
value = localStorage.getItem(name);
|
||||||
|
}
|
||||||
|
if (typeof value === "undefined") {
|
||||||
|
value = null;
|
||||||
|
}
|
||||||
|
if (value === null && typeof defaultValue !== "undefined") {
|
||||||
|
return defaultValue;
|
||||||
|
} else {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function eraseSetting(name) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
if (window.chrome && window.chrome.storage) {
|
||||||
|
window.chrome.storage.sync.remove(name);
|
||||||
|
delete settings[name];
|
||||||
|
} else {
|
||||||
|
localStorage.removeItem(name);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function injectParamIfMissing(path, param, value) {
|
||||||
|
// force pretend that we're dealing with a relative path
|
||||||
|
// (assume that we wanted an extra if we pass one in)
|
||||||
|
path = "/" + path;
|
||||||
|
|
||||||
|
var elem = document.createElement('a');
|
||||||
|
elem.href = path;
|
||||||
|
|
||||||
|
var param_eq = encodeURIComponent(param) + "=";
|
||||||
|
var query;
|
||||||
|
if (elem.search) {
|
||||||
|
query = elem.search.slice(1).split('&');
|
||||||
|
} else {
|
||||||
|
query = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!query.some(function (v) {
|
||||||
|
return v.startsWith(param_eq);
|
||||||
|
})) {
|
||||||
|
query.push(param_eq + encodeURIComponent(value));
|
||||||
|
elem.search = "?" + query.join("&");
|
||||||
|
}
|
||||||
|
|
||||||
|
// some browsers (e.g. IE11) may occasionally omit the leading slash
|
||||||
|
// in the elem.pathname string. Handle that case gracefully.
|
||||||
|
if (elem.pathname.charAt(0) == "/") {
|
||||||
|
return elem.pathname.slice(1) + elem.search + elem.hash;
|
||||||
|
} else {
|
||||||
|
return elem.pathname + elem.search + elem.hash;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// sadly, we can't use the Fetch API until we decide to drop
|
||||||
|
// IE11 support or polyfill promises and fetch in IE11.
|
||||||
|
// resolve will receive an object on success, while reject
|
||||||
|
// will receive either an event or an error on failure.
|
||||||
|
function fetchJSON(path, resolve, reject) {
|
||||||
|
// NB: IE11 doesn't support JSON as a responseType
|
||||||
|
var req = new XMLHttpRequest();
|
||||||
|
req.open('GET', path);
|
||||||
|
|
||||||
|
req.onload = function () {
|
||||||
|
if (req.status === 200) {
|
||||||
|
try {
|
||||||
|
var resObj = JSON.parse(req.responseText);
|
||||||
|
} catch (err) {
|
||||||
|
reject(err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
resolve(resObj);
|
||||||
|
} else {
|
||||||
|
reject(new Error("XHR got non-200 status while trying to load '" + path + "': " + req.status));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
req.onerror = function (evt) {
|
||||||
|
reject(new Error("XHR encountered an error while trying to load '" + path + "': " + evt.message));
|
||||||
|
};
|
||||||
|
|
||||||
|
req.ontimeout = function (evt) {
|
||||||
|
reject(new Error("XHR timed out while trying to load '" + path + "'"));
|
||||||
|
};
|
||||||
|
|
||||||
|
req.send();
|
||||||
|
}
|
|
@ -1,405 +0,0 @@
|
||||||
/*
|
|
||||||
* noVNC base CSS
|
|
||||||
* Copyright (C) 2012 Joel Martin
|
|
||||||
* noVNC is licensed under the MPL 2.0 (see LICENSE.txt)
|
|
||||||
* This file is licensed under the 2-Clause BSD license (see LICENSE.txt).
|
|
||||||
*/
|
|
||||||
|
|
||||||
body {
|
|
||||||
margin:0;
|
|
||||||
padding:0;
|
|
||||||
font-family: Helvetica;
|
|
||||||
/*Background image with light grey curve.*/
|
|
||||||
background-color:#494949;
|
|
||||||
background-repeat:no-repeat;
|
|
||||||
background-position:right bottom;
|
|
||||||
height:100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
html {
|
|
||||||
height:100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
#noVNC_controls ul {
|
|
||||||
list-style: none;
|
|
||||||
margin: 0px;
|
|
||||||
padding: 0px;
|
|
||||||
}
|
|
||||||
#noVNC_controls li {
|
|
||||||
padding-bottom:8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#noVNC_host {
|
|
||||||
width:150px;
|
|
||||||
}
|
|
||||||
#noVNC_port {
|
|
||||||
width: 80px;
|
|
||||||
}
|
|
||||||
#noVNC_password {
|
|
||||||
width: 150px;
|
|
||||||
}
|
|
||||||
#noVNC_encrypt {
|
|
||||||
}
|
|
||||||
#noVNC_connectTimeout {
|
|
||||||
width: 30px;
|
|
||||||
}
|
|
||||||
#noVNC_path {
|
|
||||||
width: 100px;
|
|
||||||
}
|
|
||||||
#noVNC_connect_button {
|
|
||||||
width: 110px;
|
|
||||||
float:right;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#noVNC_view_drag_button {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
#sendCtrlAltDelButton {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
#noVNC_mobile_buttons {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.noVNC-buttons-left {
|
|
||||||
float: left;
|
|
||||||
padding-left:10px;
|
|
||||||
padding-top:4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.noVNC-buttons-right {
|
|
||||||
float:right;
|
|
||||||
right: 0px;
|
|
||||||
padding-right:10px;
|
|
||||||
padding-top:4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#noVNC_status_bar {
|
|
||||||
margin-top: 0px;
|
|
||||||
padding: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#noVNC_status_bar div {
|
|
||||||
font-size: 12px;
|
|
||||||
padding-top: 4px;
|
|
||||||
width:100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
#noVNC_status {
|
|
||||||
height:20px;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
#noVNC_settings_menu {
|
|
||||||
margin: 3px;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
#noVNC_settings_menu ul {
|
|
||||||
list-style: none;
|
|
||||||
margin: 0px;
|
|
||||||
padding: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#noVNC_apply {
|
|
||||||
float:right;
|
|
||||||
}
|
|
||||||
|
|
||||||
.noVNC_status_normal {
|
|
||||||
background: #eee;
|
|
||||||
}
|
|
||||||
.noVNC_status_error {
|
|
||||||
background: #f44;
|
|
||||||
}
|
|
||||||
.noVNC_status_warn {
|
|
||||||
background: #ff4;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Do not set width/height for VNC_screen or VNC_canvas or incorrect
|
|
||||||
* scaling will occur. Canvas resizes to remote VNC settings */
|
|
||||||
#noVNC_screen_pad {
|
|
||||||
margin: 0px;
|
|
||||||
padding: 0px;
|
|
||||||
height: 44px;
|
|
||||||
}
|
|
||||||
#noVNC_screen {
|
|
||||||
text-align: center;
|
|
||||||
display: table;
|
|
||||||
width:100%;
|
|
||||||
height:100%;
|
|
||||||
background-color:#313131;
|
|
||||||
border-bottom-right-radius: 800px 600px;
|
|
||||||
/*border-top-left-radius: 800px 600px;*/
|
|
||||||
}
|
|
||||||
|
|
||||||
#noVNC_container, #noVNC_canvas {
|
|
||||||
margin: 0px;
|
|
||||||
padding: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#noVNC_canvas {
|
|
||||||
left: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#VNC_clipboard_clear_button {
|
|
||||||
float:right;
|
|
||||||
}
|
|
||||||
#VNC_clipboard_text {
|
|
||||||
font-size: 11px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#noVNC_clipboard_clear_button {
|
|
||||||
float:right;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*Bubble contents divs*/
|
|
||||||
#noVNC_settings {
|
|
||||||
display:none;
|
|
||||||
margin-top:77px;
|
|
||||||
right:20px;
|
|
||||||
position:fixed;
|
|
||||||
}
|
|
||||||
|
|
||||||
#noVNC_controls {
|
|
||||||
display:none;
|
|
||||||
margin-top:77px;
|
|
||||||
right:12px;
|
|
||||||
position:fixed;
|
|
||||||
}
|
|
||||||
#noVNC_controls.top:after {
|
|
||||||
right:15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#noVNC_description {
|
|
||||||
display:none;
|
|
||||||
position:fixed;
|
|
||||||
|
|
||||||
margin-top:77px;
|
|
||||||
right:20px;
|
|
||||||
left:20px;
|
|
||||||
padding:15px;
|
|
||||||
color:#000;
|
|
||||||
background:#eee; /* default background for browsers without gradient support */
|
|
||||||
|
|
||||||
border:2px solid #E0E0E0;
|
|
||||||
-webkit-border-radius:10px;
|
|
||||||
-moz-border-radius:10px;
|
|
||||||
border-radius:10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#noVNC_clipboard {
|
|
||||||
display:none;
|
|
||||||
margin-top:77px;
|
|
||||||
right:30px;
|
|
||||||
position:fixed;
|
|
||||||
}
|
|
||||||
#noVNC_clipboard.top:after {
|
|
||||||
right:85px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#keyboardinput {
|
|
||||||
width:1px;
|
|
||||||
height:1px;
|
|
||||||
background-color:#fff;
|
|
||||||
color:#fff;
|
|
||||||
border:0;
|
|
||||||
position: relative;
|
|
||||||
left: -40px;
|
|
||||||
z-index: -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.noVNC_status_warn {
|
|
||||||
background-color:yellow;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Advanced Styling
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Control bar */
|
|
||||||
#noVNC-control-bar {
|
|
||||||
position:fixed;
|
|
||||||
background: #b2bdcd; /* Old browsers */
|
|
||||||
background: -moz-linear-gradient(top, #b2bdcd 0%, #899cb3 49%, #7e93af 51%, #6e84a3 100%); /* FF3.6+ */
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#b2bdcd), color-stop(49%,#899cb3), color-stop(51%,#7e93af), color-stop(100%,#6e84a3)); /* Chrome,Safari4+ */
|
|
||||||
background: -webkit-linear-gradient(top, #b2bdcd 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); /* Chrome10+,Safari5.1+ */
|
|
||||||
background: -o-linear-gradient(top, #b2bdcd 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); /* Opera11.10+ */
|
|
||||||
background: -ms-linear-gradient(top, #b2bdcd 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); /* IE10+ */
|
|
||||||
background: linear-gradient(top, #b2bdcd 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); /* W3C */
|
|
||||||
|
|
||||||
display:block;
|
|
||||||
height:44px;
|
|
||||||
left:0;
|
|
||||||
top:0;
|
|
||||||
width:100%;
|
|
||||||
z-index:200;
|
|
||||||
}
|
|
||||||
|
|
||||||
.noVNC_status_button {
|
|
||||||
padding: 4px 4px;
|
|
||||||
vertical-align: middle;
|
|
||||||
border:1px solid #869dbc;
|
|
||||||
-webkit-border-radius: 6px;
|
|
||||||
-moz-border-radius: 6px;
|
|
||||||
border-radius: 6px;
|
|
||||||
background: #b2bdcd; /* Old browsers */
|
|
||||||
background: -moz-linear-gradient(top, #b2bdcd 0%, #899cb3 49%, #7e93af 51%, #6e84a3 100%); /* FF3.6+ */
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#b2bdcd), color-stop(49%,#899cb3), color-stop(51%,#7e93af), color-stop(100%,#6e84a3)); /* Chrome,Safari4+ */
|
|
||||||
background: -webkit-linear-gradient(top, #b2bdcd 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); /* Chrome10+,Safari5.1+ */
|
|
||||||
background: -o-linear-gradient(top, #b2bdcd 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); /* Opera11.10+ */
|
|
||||||
background: -ms-linear-gradient(top, #b2bdcd 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); /* IE10+ */
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#b2bdcd', endColorstr='#6e84a3',GradientType=0 ); /* IE6-9 */
|
|
||||||
background: linear-gradient(top, #b2bdcd 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); /* W3C */
|
|
||||||
/*box-shadow:inset 0.4px 0.4px 0.4px #000000;*/
|
|
||||||
}
|
|
||||||
|
|
||||||
.noVNC_status_button_selected {
|
|
||||||
padding: 4px 4px;
|
|
||||||
vertical-align: middle;
|
|
||||||
border:1px solid #4366a9;
|
|
||||||
-webkit-border-radius: 6px;
|
|
||||||
-moz-border-radius: 6px;
|
|
||||||
background: #779ced; /* Old browsers */
|
|
||||||
background: -moz-linear-gradient(top, #779ced 0%, #3970e0 49%, #2160dd 51%, #2463df 100%); /* FF3.6+ */
|
|
||||||
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#779ced), color-stop(49%,#3970e0), color-stop(51%,#2160dd), color-stop(100%,#2463df)); /* Chrome,Safari4+ */
|
|
||||||
background: -webkit-linear-gradient(top, #779ced 0%,#3970e0 49%,#2160dd 51%,#2463df 100%); /* Chrome10+,Safari5.1+ */
|
|
||||||
background: -o-linear-gradient(top, #779ced 0%,#3970e0 49%,#2160dd 51%,#2463df 100%); /* Opera11.10+ */
|
|
||||||
background: -ms-linear-gradient(top, #779ced 0%,#3970e0 49%,#2160dd 51%,#2463df 100%); /* IE10+ */
|
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#779ced', endColorstr='#2463df',GradientType=0 ); /* IE6-9 */
|
|
||||||
background: linear-gradient(top, #779ced 0%,#3970e0 49%,#2160dd 51%,#2463df 100%); /* W3C */
|
|
||||||
/*box-shadow:inset 0.4px 0.4px 0.4px #000000;*/
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*Settings Bubble*/
|
|
||||||
.triangle-right {
|
|
||||||
position:relative;
|
|
||||||
padding:15px;
|
|
||||||
margin:1em 0 3em;
|
|
||||||
color:#fff;
|
|
||||||
background:#fff; /* default background for browsers without gradient support */
|
|
||||||
/* css3 */
|
|
||||||
/*background:-webkit-gradient(linear, 0 0, 0 100%, from(#2e88c4), to(#075698));
|
|
||||||
background:-moz-linear-gradient(#2e88c4, #075698);
|
|
||||||
background:-o-linear-gradient(#2e88c4, #075698);
|
|
||||||
background:linear-gradient(#2e88c4, #075698);*/
|
|
||||||
-webkit-border-radius:10px;
|
|
||||||
-moz-border-radius:10px;
|
|
||||||
border-radius:10px;
|
|
||||||
color:#000;
|
|
||||||
border:2px solid #E0E0E0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.triangle-right.top:after {
|
|
||||||
border-color: transparent #E0E0E0;
|
|
||||||
border-width: 20px 20px 0 0;
|
|
||||||
bottom: auto;
|
|
||||||
left: auto;
|
|
||||||
right: 50px;
|
|
||||||
top: -20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.triangle-right:after {
|
|
||||||
content:"";
|
|
||||||
position:absolute;
|
|
||||||
bottom:-20px; /* value = - border-top-width - border-bottom-width */
|
|
||||||
left:50px; /* controls horizontal position */
|
|
||||||
border-width:20px 0 0 20px; /* vary these values to change the angle of the vertex */
|
|
||||||
border-style:solid;
|
|
||||||
border-color:#E0E0E0 transparent;
|
|
||||||
/* reduce the damage in FF3.0 */
|
|
||||||
display:block;
|
|
||||||
width:0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.triangle-right.top:after {
|
|
||||||
top:-40px; /* value = - border-top-width - border-bottom-width */
|
|
||||||
right:50px; /* controls horizontal position */
|
|
||||||
bottom:auto;
|
|
||||||
left:auto;
|
|
||||||
border-width:40px 40px 0 0; /* vary these values to change the angle of the vertex */
|
|
||||||
border-color:transparent #E0E0E0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*Default noVNC logo.*/
|
|
||||||
/* From: http://fonts.googleapis.com/css?family=Orbitron:700 */
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Orbitron';
|
|
||||||
font-style: normal;
|
|
||||||
font-weight: 700;
|
|
||||||
src: local('?'), url('Orbitron700.woff') format('woff'),
|
|
||||||
url('Orbitron700.ttf') format('truetype');
|
|
||||||
}
|
|
||||||
|
|
||||||
#noVNC_logo {
|
|
||||||
margin-top: 170px;
|
|
||||||
margin-left: 10px;
|
|
||||||
color:yellow;
|
|
||||||
text-align:left;
|
|
||||||
font-family: 'Orbitron', 'OrbitronTTF', sans-serif;
|
|
||||||
line-height:90%;
|
|
||||||
text-shadow:
|
|
||||||
5px 5px 0 #000,
|
|
||||||
-1px -1px 0 #000,
|
|
||||||
1px -1px 0 #000,
|
|
||||||
-1px 1px 0 #000,
|
|
||||||
1px 1px 0 #000;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#noVNC_logo span{
|
|
||||||
color:green;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ----------------------------------------
|
|
||||||
* Media sizing
|
|
||||||
* ----------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
.noVNC_status_button {
|
|
||||||
font-size: 12px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#noVNC_clipboard_text {
|
|
||||||
width: 500px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#noVNC_logo {
|
|
||||||
font-size: 180px;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media screen and (min-width: 481px) and (max-width: 640px) {
|
|
||||||
.noVNC_status_button {
|
|
||||||
font-size: 10px;
|
|
||||||
}
|
|
||||||
#noVNC_clipboard_text {
|
|
||||||
width: 410px;
|
|
||||||
}
|
|
||||||
#noVNC_logo {
|
|
||||||
font-size: 150px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media screen and (min-width: 321px) and (max-width: 480px) {
|
|
||||||
.noVNC_status_button {
|
|
||||||
font-size: 10px;
|
|
||||||
}
|
|
||||||
#noVNC_clipboard_text {
|
|
||||||
width: 250px;
|
|
||||||
}
|
|
||||||
#noVNC_logo {
|
|
||||||
font-size: 110px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media screen and (max-width: 320px) {
|
|
||||||
.noVNC_status_button {
|
|
||||||
font-size: 9px;
|
|
||||||
}
|
|
||||||
#noVNC_clipboard_text {
|
|
||||||
width: 220px;
|
|
||||||
}
|
|
||||||
#noVNC_logo {
|
|
||||||
font-size: 90px;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,115 +0,0 @@
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
// From: http://hg.mozilla.org/mozilla-central/raw-file/ec10630b1a54/js/src/devtools/jint/sunspider/string-base64.js
|
|
||||||
|
|
||||||
/*jslint white: false, bitwise: false, plusplus: false */
|
|
||||||
/*global console */
|
|
||||||
|
|
||||||
var Base64 = {
|
|
||||||
|
|
||||||
/* Convert data (an array of integers) to a Base64 string. */
|
|
||||||
toBase64Table : 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='.split(''),
|
|
||||||
base64Pad : '=',
|
|
||||||
|
|
||||||
encode: function (data) {
|
|
||||||
"use strict";
|
|
||||||
var result = '';
|
|
||||||
var toBase64Table = Base64.toBase64Table;
|
|
||||||
var length = data.length
|
|
||||||
var lengthpad = (length%3);
|
|
||||||
var i = 0, j = 0;
|
|
||||||
// Convert every three bytes to 4 ascii characters.
|
|
||||||
/* BEGIN LOOP */
|
|
||||||
for (i = 0; i < (length - 2); i += 3) {
|
|
||||||
result += toBase64Table[data[i] >> 2];
|
|
||||||
result += toBase64Table[((data[i] & 0x03) << 4) + (data[i+1] >> 4)];
|
|
||||||
result += toBase64Table[((data[i+1] & 0x0f) << 2) + (data[i+2] >> 6)];
|
|
||||||
result += toBase64Table[data[i+2] & 0x3f];
|
|
||||||
}
|
|
||||||
/* END LOOP */
|
|
||||||
|
|
||||||
// Convert the remaining 1 or 2 bytes, pad out to 4 characters.
|
|
||||||
if (lengthpad === 2) {
|
|
||||||
j = length - lengthpad;
|
|
||||||
result += toBase64Table[data[j] >> 2];
|
|
||||||
result += toBase64Table[((data[j] & 0x03) << 4) + (data[j+1] >> 4)];
|
|
||||||
result += toBase64Table[(data[j+1] & 0x0f) << 2];
|
|
||||||
result += toBase64Table[64];
|
|
||||||
} else if (lengthpad === 1) {
|
|
||||||
j = length - lengthpad;
|
|
||||||
result += toBase64Table[data[j] >> 2];
|
|
||||||
result += toBase64Table[(data[j] & 0x03) << 4];
|
|
||||||
result += toBase64Table[64];
|
|
||||||
result += toBase64Table[64];
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
},
|
|
||||||
|
|
||||||
/* Convert Base64 data to a string */
|
|
||||||
toBinaryTable : [
|
|
||||||
-1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
|
|
||||||
-1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
|
|
||||||
-1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,62, -1,-1,-1,63,
|
|
||||||
52,53,54,55, 56,57,58,59, 60,61,-1,-1, -1, 0,-1,-1,
|
|
||||||
-1, 0, 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,-1, -1,-1,-1,-1,
|
|
||||||
-1,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,-1, -1,-1,-1,-1
|
|
||||||
],
|
|
||||||
|
|
||||||
decode: function (data, offset) {
|
|
||||||
"use strict";
|
|
||||||
offset = typeof(offset) !== 'undefined' ? offset : 0;
|
|
||||||
var toBinaryTable = Base64.toBinaryTable;
|
|
||||||
var base64Pad = Base64.base64Pad;
|
|
||||||
var result, result_length, idx, i, c, padding;
|
|
||||||
var leftbits = 0; // number of bits decoded, but yet to be appended
|
|
||||||
var leftdata = 0; // bits decoded, but yet to be appended
|
|
||||||
var data_length = data.indexOf('=') - offset;
|
|
||||||
|
|
||||||
if (data_length < 0) { data_length = data.length - offset; }
|
|
||||||
|
|
||||||
/* Every four characters is 3 resulting numbers */
|
|
||||||
result_length = (data_length >> 2) * 3 + Math.floor((data_length%4)/1.5);
|
|
||||||
result = new Array(result_length);
|
|
||||||
|
|
||||||
// Convert one by one.
|
|
||||||
/* BEGIN LOOP */
|
|
||||||
for (idx = 0, i = offset; i < data.length; i++) {
|
|
||||||
c = toBinaryTable[data.charCodeAt(i) & 0x7f];
|
|
||||||
padding = (data.charAt(i) === base64Pad);
|
|
||||||
// Skip illegal characters and whitespace
|
|
||||||
if (c === -1) {
|
|
||||||
console.error("Illegal character code " + data.charCodeAt(i) + " at position " + i);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Collect data into leftdata, update bitcount
|
|
||||||
leftdata = (leftdata << 6) | c;
|
|
||||||
leftbits += 6;
|
|
||||||
|
|
||||||
// If we have 8 or more bits, append 8 bits to the result
|
|
||||||
if (leftbits >= 8) {
|
|
||||||
leftbits -= 8;
|
|
||||||
// Append if not padding.
|
|
||||||
if (!padding) {
|
|
||||||
result[idx++] = (leftdata >> leftbits) & 0xff;
|
|
||||||
}
|
|
||||||
leftdata &= (1 << leftbits) - 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* END LOOP */
|
|
||||||
|
|
||||||
// If there are any bits left, the base64 string was corrupted
|
|
||||||
if (leftbits) {
|
|
||||||
throw {name: 'Base64-Error',
|
|
||||||
message: 'Corrupted base64 string'};
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
}; /* End of Base64 namespace */
|
|