Re: [Kimchi-devel] [project-kimchi][PATCHv3 3/5] Storage server: Update API.md
by Royce Lv
On 2013年12月06日 22:30, Mark Wu wrote:
> On 12/06/2013 06:12 PM, lvroyce(a)linux.vnet.ibm.com wrote:
>> From: Royce Lv <lvroyce(a)linux.vnet.ibm.com>
>>
>> Update API.md to specify storage server api.
>>
>> Signed-off-by: Royce Lv <lvroyce(a)linux.vnet.ibm.com>
>> ---
>> docs/API.md | 13 +++++++++++++
>> 1 file changed, 13 insertions(+)
>>
>> diff --git a/docs/API.md b/docs/API.md
>> index f60d0b0..42a5cd5 100644
>> --- a/docs/API.md
>> +++ b/docs/API.md
>> @@ -436,6 +436,19 @@ creation.
>> not tested yet
>> * **POST**: *See Configuration Actions*
>>
>> +**Actions (POST):**
>> +
>> +*No actions defined*
>> +
>> +### Collection: Storage Servers
>> +
>> +**URI:** /storageservers
>> +
>> +**Methods:**
>> +
>> +* **GET**: Retrieve a summarized list of used storage servers.
>> + * type: Filter server list with given type, currently support 'netfs'.
> You could claim that it's a param in url. And it seems it's
> inconsistent with what you define in API.json for it. type is better
> for me.
I will fix inconsistency between API.json and doc. For GET request its
param cannot put in body, and just in url.
>> +
>> ### Collection: Distros
>>
>> **URI:** /config/distros
>
11 years
Re: [Kimchi-devel] [project-kimchi] [PATCH v1 0/4] Stroage Pool: refactor and add iSCSI support
by Sheldon
wow. cool, Bing Bu.
You should send out this patch easily, then we can avoid so many
repetitions work.
To Aline:
Bing Bu not only implement iscsi and nfs pool, but also implement a test
case for iscsi and nfs pool.
On 12/20/2013 06:54 AM, Bing Bu Cao wrote:
> On 12/16/2013 04:01 PM, Zhou Zheng Sheng wrote:
>> Hi all!
>>
>> I'm implementing iSCSI storage pool support in kimchi. I found that the
>> current design and implementation is not very flexible to add new
>> type of
>> pool.
>>
>> Firstly it uses "if ... elif" to inspect the requested pool type and
>> go into
>> the corresponding branch and create XML. This could be turn into a
>> dispatching
>> dict, with the pool type as the key, and XML generating function as
>> the value.
>>
>> Secondly I think a few arguments for various type of pool can be
>> re-used if
>> they are for the same purpose. For example, both NFS pool and iSCSI
>> pool need
>> a remote host argument, so I renamed the "nfsserver" to "srcHost",
>> and use
>> "srcHost" in both NFS and iSCSI pool. I also change the relative
>> front end
>> code.
>>
>> After the refactoring, I add the iSCSI support. I've tested all the
>> code on
>> Fedora 19 by defining various types of storage pool with various
>> argument.
>>
>> Zhou Zheng Sheng (4):
>> storagepool: dispatch _get_pool_xml() to respective
>> _get_XXX_storagepool_xml() function
>> storagepool: rename and consolidate arguments of creating (back end)
>> storagepool: rename and consolidate arguments of creating (front end)
>> storagepool: Support Creating iSCSI storagepool in model.py
>>
>> docs/API.md | 21 ++--
>> src/kimchi/model.py | 158
>> +++++++++++++++++++++----------
>> ui/js/src/kimchi.storagepool_add_main.js | 9 +-
>> 3 files changed, 128 insertions(+), 60 deletions(-)
>>
> Before I leave kimchi, I written one patch set which refactoring the
> storage pool part.
> But Adam did not allow me to send this patch out because he thought it
> is not important at that moment.
> Whatever, I hope this can give you some other ideas for storage pool
> refactoring. But I am afraid you should make a big rebase because they
> are really so old...
>
>From 6cd5a7900a4f9794c97a1cf86f32128f046bf526 Mon Sep 17 00:00:00 2001
From: Bing Bu Cao <mars(a)linux.vnet.ibm.com>
Date: Thu, 22 Aug 2013 10:00:00 +0800
Subject: [PATCH 1/4] Generate the storage object XML in storage.py
Signed-off-by: Bing Bu Cao <mars(a)linux.vnet.ibm.com>
---
src/kimchi/Makefile.am | 1 +
src/kimchi/storage.py | 168
++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 169 insertions(+), 0 deletions(-)
create mode 100644 src/kimchi/storage.py
diff --git a/src/kimchi/Makefile.am b/src/kimchi/Makefile.am
index c5cf5cc..b4e92d4 100644
--- a/src/kimchi/Makefile.am
+++ b/src/kimchi/Makefile.am
@@ -36,6 +36,7 @@ kimchi_PYTHON = \
screenshot.py \
server.py \
sslcert.py \
+ storage.py \
template.py \
vmtemplate.py \
vnc.py \
diff --git a/src/kimchi/storage.py b/src/kimchi/storage.py
new file mode 100644
index 0000000..1114756
--- /dev/null
+++ b/src/kimchi/storage.py
@@ -0,0 +1,168 @@
+#
+# Project Burnet
+#
+# Copyright IBM, Corp. 2013
+#
+# Authors:
+# Bing Bu Cao <mars(a)linux.vnet.ibm.com>
+#
+# This library 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 2.1 of the License, or (at your option) any later version.
+#
+# This library 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 this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA
+
+import copy
+import os
+from kimchi.exception import *
+
+STOR_TYPE_POOL = 'pool'
+STOR_TYPE_VOLUME = 'volume'
+STOR_TYPE_LIST = [STOR_TYPE_POOL, STOR_TYPE_VOLUME]
+
+DIR = "dir"
+NETFS = "netfs"
+ISCSI = "iscsi"
+POOL_TYPE_LIST = [DIR, NETFS, ISCSI]
+
+DEFAULT_DIR_TARGET_BASE = "/var/lib/libvirt/images/"
+DEFAULT_SCSI_TARGET = "/dev/disk/by-path"
+
+
+class storage(object):
+ def __init__(self, storage_type, pool_type=None, **kwargs):
+ """
+ @param storage_type: 'pool' or 'volume'
+ @param pool_type: 'pool' or 'volume'
+ @param kwargs:
+ """
+ if storage_type not in STOR_TYPE_LIST:
+ raise InvalidParameter(
+ "Unknown Storage Type: %s" % storage_type)
+ if storage_type == 'volume' and pool_type not in POOL_TYPE_LIST:
+ raise InvalidParameter(
+ "Invalid Pool Type: %s" % pool_type)
+
+ self.pool_type = pool_type
+ self.params = copy.copy(kwargs)
+ self.type = storage_type
+
+ def dumpxml(self):
+ return getattr(self, "_get_%s_xml" % self.type)(self.pool_type)
+
+ def _get_pool_xml(self, pool_type):
+ return getattr(self, "_get_%(type)s_pool_xml" % self.params)()
+
+ def _get_dir_pool_xml(self):
+ # Required parameters
+ # name:
+ # type:
+ # Optional parameters
+ # path:
+ kwargs = self.params
+ kwargs.setdefault('path', DEFAULT_DIR_TARGET_BASE)
+ xml = """
+ <pool type='%(type)s'>
+ <name>%(name)s</name>
+ <target>
+ <path>%(path)s</path>
+ </target>
+ </pool>
+ """ % kwargs
+ return xml
+
+ def _get_netfs_pool_xml(self):
+ # Required parameters
+ # name:
+ # type:
+ # Optional parameters
+ # path:
+ kwargs = self.params
+ formats = ["auto", "nfs", "glusterfs"]
+ kwargs.setdefault('path', os.path.join(DEFAULT_DIR_TARGET_BASE,
+ kwargs['name']))
+ kwargs.setdefault('format', "auto")
+ format = kwargs['format']
+ if not format in formats:
+ raise InvalidParameter(
+ "Unknown Network Filesystem format: %s" %
format)
+ xml = """
+ <pool type='%(type)s'>
+ <name>%(name)s</name>
+ <source>
+ <host name='%(host)s'/>
+ <dir path='%(src_path)s'/>
+ <format type='%(format)s'/>
+ </source>
+ <target>
+ <path>%(path)s</path>
+ </target>
+ </pool>
+ """ % kwargs
+ return xml
+
+ def _get_iscsi_pool_xml(self):
+ # Required parameters
+ # name:
+ # type:
+ # Optional parameters
+ # path:
+ kwargs = self.params
+ kwargs.setdefault('path', DEFAULT_SCSI_TARGET)
+ xml = """
+ <pool type='%(type)s'>
+ <name>%(name)s</name>
+ <source>
+ <host name='%(host)s'/>
+ <device path='%(src_path)s'/>
+ </source>
+ <target>
+ <path>%(path)s</path>
+ </target>
+ </pool>
+ """ % kwargs
+ return xml
+
+ def _get_volume_xml(self, pool_type):
+ # Required parameters
+ # name:
+ # capacity:
+ # path:
+ # Optional parameters
+ # allocation:
+ # format(not used for iscsi pool):
+ if pool_type == ISCSI:
+ raise InvalidOperation(
+ "Creating volume is not supported for iscsi pool")
+ kwargs = self.params
+ kwargs.setdefault('allocation', 0)
+ kwargs.setdefault('format', 'qcow2')
+ target = self._get_vol_target_xml(kwargs.get('format'))
+ kwargs.update({'target': target})
+ xml = """
+ <volume>
+ <name>%(name)s</name>
+ <allocation unit="MiB">%(allocation)s</allocation>
+ <capacity unit="MiB">%(capacity)s</capacity>
+ <source>
+ </source>%(target)s
+ </volume>
+ """ % kwargs
+ return xml
+
+ def _get_vol_target_xml(self, format):
+ target_xml = ""
+ if self.pool_type == DIR:
+ target_xml = """
+ <target>
+ <format type='%s'/>
+ </target>""" % format
+ return target_xml
--
1.7.7.6
>From 93dd8c5d78706d7444ad54cf52845812aa8d7173 Mon Sep 17 00:00:00 2001
From: Bing Bu Cao <mars(a)linux.vnet.ibm.com>
Date: Thu, 22 Aug 2013 10:02:02 +0800
Subject: [PATCH 2/4] Use new xml generator in model for StoragePool and
StorageVolume operation
Signed-off-by: Bing Bu Cao <mars(a)linux.vnet.ibm.com>
---
src/kimchi/model.py | 53
+++++++-------------------------------------------
1 files changed, 8 insertions(+), 45 deletions(-)
diff --git a/src/kimchi/model.py b/src/kimchi/model.py
index f05b532..670fb7e 100644
--- a/src/kimchi/model.py
+++ b/src/kimchi/model.py
@@ -54,6 +54,7 @@ from kimchi.exception import *
from kimchi.utils import kimchi_log, is_digit
from kimchi.distroloader import DistroLoader
+from kimchi.storage import storage
ISO_POOL_NAME = u'kimchi_isos'
STATS_INTERVAL = 5
@@ -581,7 +582,8 @@ class Model(object):
name = params['name']
if name in (ISO_POOL_NAME, ):
raise InvalidOperation("StoragePool already exists")
- xml = _get_pool_xml(**params)
+ storpool = storage('pool', **params)
+ xml = storpool.dumpxml()
except KeyError, key:
raise MissingParameter(key)
if name in self.storagepools_get_list():
@@ -689,10 +691,13 @@ class Model(object):
raise
def storagevolumes_create(self, pool, params):
- info = self.storagepool_lookup(pool)
+ pool_obj = self._get_storagepool(pool)
+ pooltype = xmlutils.xpath_get_text(pool_obj.XMLDesc(0),
+ "/pool/@type")[0]
try:
name = params['name']
- xml = _get_volume_xml(**params)
+ storvol = storage('volume', pool_type=pooltype, **params)
+ xml = storvol.dumpxml()
except KeyError, key:
raise MissingParameter(key)
pool = self._get_storagepool(pool)
@@ -826,48 +831,6 @@ class LibvirtVMScreenshot(VMScreenshot):
os.close(fd)
-def _get_pool_xml(**kwargs):
- # Required parameters
- # name:
- # type:
- # path:
- xml = """
- <pool type='%(type)s'>
- <name>%(name)s</name>
- <target>
- <path>%(path)s</path>
- </target>
- </pool>
- """ % kwargs
- return xml
-
-
-def _get_volume_xml(**kwargs):
- # Required parameters
- # name:
- # capacity:
- #
- # Optional:
- # allocation:
- # format:
- kwargs.setdefault('allocation', 0)
- kwargs.setdefault('format', 'qcow2')
-
- xml = """
- <volume>
- <name>%(name)s</name>
- <allocation unit="MiB">%(allocation)s</allocation>
- <capacity unit="MiB">%(capacity)s</capacity>
- <source>
- </source>
- <target>
- <format type='%(format)s'/>
- </target>
- </volume>
- """ % kwargs
- return xml
-
-
class LibvirtConnection(object):
def __init__(self, uri):
self.uri = uri
--
1.7.7.6
>From 21433a52d1b135d696e187d0e29b68d5954749f5 Mon Sep 17 00:00:00 2001
From: Bing Bu Cao <mars(a)linux.vnet.ibm.com>
Date: Thu, 22 Aug 2013 10:03:39 +0800
Subject: [PATCH 3/4] Add testcases in test_model.py to test the ISCSI
and NFS
storagepool
Signed-off-by: Bing Bu Cao <mars(a)linux.vnet.ibm.com>
---
tests/test_model.py | 123
+++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 123 insertions(+), 0 deletions(-)
diff --git a/tests/test_model.py b/tests/test_model.py
index dcabbcb..3f6a10e 100644
--- a/tests/test_model.py
+++ b/tests/test_model.py
@@ -26,6 +26,10 @@ import threading
import os
import time
import tempfile
+import shlex
+import subprocess
+import random
+import shutil
import kimchi.model
import kimchi.objectstore
@@ -256,6 +260,125 @@ class ModelTests(unittest.TestCase):
for key in params.keys():
self.assertEquals(params[key], info[key])
+ def _execute_cmd(self, cmd):
+ print cmd
+ args = shlex.split(cmd)
+ p = subprocess.Popen(args, close_fds=True, stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+ out, err = p.communicate()
+ print out, err
+
+ def _create_iscsi_target(self, path, iqn, capacity):
+ self._execute_cmd("dd if=/dev/zero of=%s bs=1M count=%i" %
(path, capacity))
+ conf = """
+ <target %s>
+ backing-store %s
+ </target>
+ """ % (iqn, path)
+ conf_file = '/etc/tgt/targets.conf'
+ with open(conf_file, 'a') as file:
+ file.write(conf)
+
+ self._execute_cmd("tgt-admin --update %s" % iqn)
+
+ def _get_target(self, iqn):
+ self._execute_cmd("tgt-admin --show")
+
+ def _clean_iscsi_target(self, iqn):
+ self._execute_cmd("tgt-admin --delete %s" % iqn)
+ #remove the lines added before
+ conf = open('/etc/tgt/targets.conf')
+ lines = conf.readlines()
+ conf.close()
+ conf = open('/etc/tgt/targets.conf', 'w')
+ lines = lines[:-4]
+ conf.writelines(lines)
+ conf.close()
+ self._execute_cmd("exportfs -rf")
+
+ @unittest.skipUnless(utils.running_as_root(), 'Must be run as root')
+ def test_iscsi_pool(self):
+ inst = kimchi.model.Model('qemu:///system', self.tmp_store)
+ path = '/srv/images'
+ name = 'iscsi-test-pool'
+ img = 'kimchi-%s.img' % random.getrandbits(16)
+ iqn = 'iqn.2013.08.org.foo.bar:%s' % random.getrandbits(16)
+ cap = random.getrandbits(8)
+ if not os.path.exists(path):
+ os.makedirs(path)
+
+ self._create_iscsi_target(os.path.join(path, img), iqn, cap)
+ self._get_target(iqn)
+
+ with utils.RollbackContext() as rollback:
+ args = {'name': name,
+ 'type': 'iscsi',
+ 'host': '127.0.0.1',
+ 'src_path': iqn}
+ inst.storagepools_create(args)
+ rollback.prependDefer(inst.storagepool_delete, name)
+ inst.storagepool_activate(name)
+ rollback.prependDefer(inst.storagepool_deactivate, name)
+ poolinfo = inst.storagepool_lookup(name)
+ self.assertEquals(cap, poolinfo['capacity'])
+
+ self._clean_iscsi_target(iqn)
+ shutil.rmtree(path)
+
+ def _create_nfs(self, path):
+ conf = '%s 127.0.0.1(rw,sync,root_squash)\n' % path
+ conf_file = '/etc/exports'
+ with open(conf_file, 'a') as file:
+ file.write(conf)
+
+ self._execute_cmd("exportfs -rv")
+
+ def _clean_nfs(self, path):
+ #remove the line added in _create_nfs()
+ conf = open('/etc/exports')
+ output = []
+ for line in conf:
+ if not path in line:
+ output.append(line)
+ conf.close()
+ conf = open('/etc/exports', 'w')
+ conf.writelines(output)
+ conf.close()
+ self._execute_cmd("exportfs -rf")
+
+ @unittest.skipUnless(utils.running_as_root(), 'Must be run as root')
+ def test_nfs_pool(self):
+ inst = kimchi.model.Model('qemu:///system', self.tmp_store)
+ src_path = '/tmp/nfs-%s' % random.getrandbits(16)
+ src_file = 'kimchi-%s.img' % random.getrandbits(16)
+ name = "pool-nfs-test"
+ cap = 32 * 1024 * 1024
+ if not os.path.exists(src_path):
+ os.makedirs(src_path)
+ fd = open(os.path.join(src_path, src_file), 'w')
+ fd.truncate(cap)
+ self._create_nfs(src_path)
+
+ dst_path = '/mnt/nfs'
+ if not os.path.exists(dst_path):
+ os.makedirs(dst_path)
+ with utils.RollbackContext() as rollback:
+ args = {"type": "netfs",
+ "name": name,
+ "host": "127.0.0.1",
+ "format": "nfs",
+ "src_path": src_path,
+ "path": dst_path}
+ inst.storagepools_create(args)
+ rollback.prependDefer(inst.storagepool_delete, name)
+ inst.storagepool_activate(name)
+ rollback.prependDefer(inst.storagepool_deactivate, name)
+ volinfo = inst.storagevolume_lookup(name, src_file)
+ self.assertEquals(cap >> 20, volinfo['capacity'])
+
+ self._clean_nfs(src_path)
+ shutil.rmtree(src_path)
+
def test_multithreaded_connection(self):
def worker():
for i in xrange(100):
--
1.7.7.6
>From 74c089a3a8174e16f2b03795b5c759334f4ce2ec Mon Sep 17 00:00:00 2001
From: Bing Bu Cao <mars(a)linux.vnet.ibm.com>
Date: Thu, 22 Aug 2013 10:17:00 +0800
Subject: [PATCH 4/4] Redefine the storagepool 'POST' description in API.md
Signed-off-by: Bing Bu Cao <mars(a)linux.vnet.ibm.com>
---
docs/API.md | 6 +++++-
1 files changed, 5 insertions(+), 1 deletions(-)
diff --git a/docs/API.md b/docs/API.md
index 0c187e0..73d3396 100644
--- a/docs/API.md
+++ b/docs/API.md
@@ -163,8 +163,12 @@ Represents a snapshot of the Virtual Machine's
primary monitor.
* **GET**: Retrieve a summarized list of all defined Storage Pools
* **POST**: Create a new Storage Pool
* name: The name of the Storage Pool
- * path: The path of the defined Storage Pool
+ * path: The target path of the defined Storage Pool
+ * src_path: The source path of the defined Storage pool
* type: The type of the defined Storage Pool
+ * host: The remote server which provide the pool source
+ Only and necessary for netfs and iscsi storage pool
+ * format: The format of the pool, only valid for netfs storage pool
### Resource: Storage Pool
--
1.7.7.6
--
Sheldon Feng(冯少合)<shaohef(a)linux.vnet.ibm.com>
IBM Linux Technology Center
11 years
[PATCH] Organize python imports
by Rodrigo Trujillo
Follow this rule:
1) Import common modules
import ...
import ...
from ... import ...
from ... import ...
2) Import kimchi modules
import kimchi.<mod>
import kimchi.<mod>
from kimchi import ...
from kimchi import ...
Signed-off-by: Rodrigo Trujillo <rodrigo.trujillo(a)linux.vnet.ibm.com>
---
plugins/sample/__init__.py | 8 ++++++--
plugins/sample/model.py | 2 +-
src/kimchi/model.py | 4 ++--
src/kimchi/server.py | 2 +-
src/kimchi/sslcert.py | 2 +-
src/kimchi/websocket.py | 17 ++++++++++++++---
src/kimchi/websockify.py | 15 +++++++++++++--
tests/test_exception.py | 6 ++++--
tests/test_mockmodel.py | 5 +++--
tests/test_model.py | 18 ++++++++++--------
tests/test_networkxml.py | 4 +++-
tests/test_osinfo.py | 3 +++
tests/test_plugin.py | 4 +++-
tests/test_rest.py | 10 +++++++---
tests/test_server.py | 4 ++--
tests/test_vmtemplate.py | 2 ++
tests/utils.py | 15 +++++++++------
17 files changed, 84 insertions(+), 37 deletions(-)
diff --git a/plugins/sample/__init__.py b/plugins/sample/__init__.py
index a20f5e6..7064904 100644
--- a/plugins/sample/__init__.py
+++ b/plugins/sample/__init__.py
@@ -22,12 +22,16 @@
import json
import os
+
+
from cherrypy import expose
-from kimchi.controller import Resource, Collection
+
+
+from kimchi.controller import Collection, Resource
from model import Model
-model = Model()
+model = Model()
class Drawings(Resource):
def __init__(self):
diff --git a/plugins/sample/model.py b/plugins/sample/model.py
index f6da5d0..9a2f22f 100644
--- a/plugins/sample/model.py
+++ b/plugins/sample/model.py
@@ -20,7 +20,7 @@
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-from kimchi.exception import NotFoundError, InvalidOperation
+from kimchi.exception import InvalidOperation, NotFoundError
class Model(object):
diff --git a/src/kimchi/model.py b/src/kimchi/model.py
index 73c18ac..1e4dac2 100644
--- a/src/kimchi/model.py
+++ b/src/kimchi/model.py
@@ -42,9 +42,9 @@ import time
import uuid
-from collections import defaultdict
from cherrypy.process.plugins import BackgroundTask
from cherrypy.process.plugins import SimplePlugin
+from collections import defaultdict
from xml.etree import ElementTree
@@ -69,7 +69,7 @@ from kimchi.networkxml import to_network_xml
from kimchi.objectstore import ObjectStore
from kimchi.scan import Scanner
from kimchi.screenshot import VMScreenshot
-from kimchi.utils import kimchi_log, is_digit, get_enabled_plugins
+from kimchi.utils import get_enabled_plugins, is_digit, kimchi_log
from kimchi.vmtemplate import VMTemplate
diff --git a/src/kimchi/server.py b/src/kimchi/server.py
index 6ff6fa0..114a3a0 100644
--- a/src/kimchi/server.py
+++ b/src/kimchi/server.py
@@ -33,7 +33,7 @@ from kimchi import config
from kimchi import model
from kimchi import mockmodel
from kimchi.root import Root
-from kimchi.utils import import_class, get_enabled_plugins
+from kimchi.utils import get_enabled_plugins, import_class
LOGGING_LEVEL = {"debug": logging.DEBUG,
diff --git a/src/kimchi/sslcert.py b/src/kimchi/sslcert.py
index 70441f2..529699d 100644
--- a/src/kimchi/sslcert.py
+++ b/src/kimchi/sslcert.py
@@ -28,7 +28,7 @@
import time
-from M2Crypto import X509, EVP, RSA, ASN1
+from M2Crypto import ASN1, EVP, RSA, X509
class SSLCert(object):
diff --git a/src/kimchi/websocket.py b/src/kimchi/websocket.py
index a98fc6d..945676d 100644
--- a/src/kimchi/websocket.py
+++ b/src/kimchi/websocket.py
@@ -16,9 +16,20 @@ as taken from http://docs.python.org/dev/library/ssl.html#certificates
'''
-import os, sys, time, errno, signal, socket, traceback, select
-import array, struct
-from base64 import b64encode, b64decode
+import array
+import errno
+import os
+import select
+import signal
+import socket
+import struct
+import sys
+import time
+import traceback
+
+
+from base64 import b64decode, b64encode
+
# Imports that vary by python version
diff --git a/src/kimchi/websockify.py b/src/kimchi/websockify.py
index 1154d92..2857e7c 100755
--- a/src/kimchi/websockify.py
+++ b/src/kimchi/websockify.py
@@ -11,15 +11,26 @@ as taken from http://docs.python.org/dev/library/ssl.html#certificates
'''
-import signal, socket, optparse, time, os, sys, subprocess
+import optparse
+import os
+import signal
+import socket
+import subprocess
+import sys
+import time
+
+
from select import select
-import websocket
try:
from urllib.parse import parse_qs, urlparse
except:
from cgi import parse_qs
from urlparse import urlparse
+
+import websocket
+
+
class WebSocketProxy(websocket.WebSocketServer):
"""
Proxy traffic to and from a WebSockets client to a normal TCP
diff --git a/tests/test_exception.py b/tests/test_exception.py
index 9b5355a..cb60995 100644
--- a/tests/test_exception.py
+++ b/tests/test_exception.py
@@ -20,14 +20,16 @@
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-import unittest
-import os
import json
+import os
+import unittest
+
import kimchi.mockmodel
import kimchi.server
from utils import *
+
test_server = None
model = None
host = None
diff --git a/tests/test_mockmodel.py b/tests/test_mockmodel.py
index b819172..0830a24 100644
--- a/tests/test_mockmodel.py
+++ b/tests/test_mockmodel.py
@@ -20,16 +20,17 @@
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-import unittest
import cherrypy
import json
import os
+import unittest
+
import kimchi.mockmodel
import kimchi.controller
-
from utils import *
+
#utils.silence_server()
test_server = None
model = None
diff --git a/tests/test_model.py b/tests/test_model.py
index fb7d6dd..07b68b1 100644
--- a/tests/test_model.py
+++ b/tests/test_model.py
@@ -21,21 +21,23 @@
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-import unittest
-import threading
import os
-import time
-import tempfile
-import psutil
import platform
+import psutil
+import tempfile
+import threading
+import time
+import unittest
import uuid
+
+import iso_gen
import kimchi.model
import kimchi.objectstore
-from kimchi.exception import *
-from kimchi import netinfo
import utils
-import iso_gen
+from kimchi import netinfo
+from kimchi.exception import *
+
class ModelTests(unittest.TestCase):
def setUp(self):
diff --git a/tests/test_networkxml.py b/tests/test_networkxml.py
index 4eeeaa2..3073bce 100644
--- a/tests/test_networkxml.py
+++ b/tests/test_networkxml.py
@@ -20,10 +20,12 @@
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+import ipaddr
import unittest
+
+
import kimchi.networkxml as nxml
from kimchi.xmlutils import xpath_get_text
-import ipaddr
class NetworkXmlTests(unittest.TestCase):
diff --git a/tests/test_osinfo.py b/tests/test_osinfo.py
index f92567d..1dcfdaf 100644
--- a/tests/test_osinfo.py
+++ b/tests/test_osinfo.py
@@ -21,8 +21,11 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
import unittest
+
+
from kimchi.osinfo import *
+
class OSInfoTests(unittest.TestCase):
def test_default_lookup(self):
name, entry = lookup(None, None)
diff --git a/tests/test_plugin.py b/tests/test_plugin.py
index 20cc598..f12b11f 100644
--- a/tests/test_plugin.py
+++ b/tests/test_plugin.py
@@ -20,17 +20,19 @@
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-import unittest
import json
import os
import sys
+import unittest
from functools import partial
+
import kimchi.mockmodel
import kimchi.server
import utils
from kimchi import config
+
test_server = None
model = None
host = None
diff --git a/tests/test_rest.py b/tests/test_rest.py
index 73b5243..61369c3 100644
--- a/tests/test_rest.py
+++ b/tests/test_rest.py
@@ -20,16 +20,20 @@
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-import unittest
import json
-import time
import os
+import time
+import unittest
+
+
from functools import partial
+
import kimchi.mockmodel
import kimchi.server
-from utils import *
from kimchi.asynctask import AsyncTask
+from utils import *
+
test_server = None
model = None
diff --git a/tests/test_server.py b/tests/test_server.py
index 9bb0034..734a618 100644
--- a/tests/test_server.py
+++ b/tests/test_server.py
@@ -20,12 +20,12 @@
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-import unittest
import json
import os
+import unittest
-import utils
+import utils
import kimchi.mockmodel
#utils.silence_server()
diff --git a/tests/test_vmtemplate.py b/tests/test_vmtemplate.py
index 81382c7..92c7385 100644
--- a/tests/test_vmtemplate.py
+++ b/tests/test_vmtemplate.py
@@ -23,9 +23,11 @@
import unittest
import uuid
+
from kimchi.vmtemplate import *
from kimchi.xmlutils import xpath_get_text
+
class VMTemplateTests(unittest.TestCase):
def test_minimal_construct(self):
fields = (('name', 'test'), ('os_distro', 'unknown'),
diff --git a/tests/utils.py b/tests/utils.py
index c114813..a7596e8 100644
--- a/tests/utils.py
+++ b/tests/utils.py
@@ -21,16 +21,19 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
#
-import httplib
+import base64
import cherrypy
-import threading
-import time
+import httplib
import os
-import sys
import socket
-from contextlib import closing
+import sys
+import threading
+import time
import unittest
-import base64
+
+
+from contextlib import closing
+
import kimchi.server
import kimchi.model
--
1.8.1.4
11 years
[PATCH V3] Bug fix: Kimchi will try to create directory for 'DIR' storagepool
by Rodrigo Trujillo
When you create a 'DIR' storagepool, kimchi does not check if the
path exists, returning errors when you try to activate the SP.
This path makes kimchi check the path and created the directory,
if it does not exist.
Signed-off-by: Rodrigo Trujillo <rodrigo.trujillo(a)linux.vnet.ibm.com>
---
src/kimchi/model.py | 8 ++++----
ui/pages/storagepool-add.html.tmpl | 4 +++-
2 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/src/kimchi/model.py b/src/kimchi/model.py
index 73c18ac..3a4e20e 100644
--- a/src/kimchi/model.py
+++ b/src/kimchi/model.py
@@ -1006,16 +1006,16 @@ class Model(object):
return name
pool = conn.storagePoolDefineXML(xml, 0)
- if params['type'] == 'logical':
- pool.setAutostart(1)
+ if params['type'] in ['logical', 'dir']:
pool.build(libvirt.VIR_STORAGE_POOL_BUILD_NEW)
- if params['type'] == 'dir':
- # autostart dir storage pool created from kimchi
+ # autostart dir and logical storage pool created from kimchi
pool.setAutostart(1)
else:
# disable autostart for others
pool.setAutostart(0)
except libvirt.libvirtError as e:
+ msg = "Problem creating Storage Pool: %s"
+ kimchi_log.error(msg, e)
raise OperationFailed(e.get_error_message())
return name
diff --git a/ui/pages/storagepool-add.html.tmpl b/ui/pages/storagepool-add.html.tmpl
index d7b046d..792744c 100644
--- a/ui/pages/storagepool-add.html.tmpl
+++ b/ui/pages/storagepool-add.html.tmpl
@@ -63,6 +63,8 @@
<div class="field">
<p class="text-help">
$_("The path of the Storage Pool. Each Storage Pool must have a unique path.")</p>
+ <p class="text-help">
+ $_("Kimchi will try to create the directory when it does not already exist in your system.")</p>
<input id="pathId" type="text" class="text" style="width: 300px">
</div>
<div class="clear"></div>
@@ -116,4 +118,4 @@
</div>
</script>
</body>
-</html>
\ No newline at end of file
+</html>
--
1.8.1.4
11 years
[PATCH] Replace tab to 4 spaces
by Aline Manera
From: Aline Manera <alinefm(a)br.ibm.com>
All py, css, js, tmpl and json files created by us must use 4 space for
indentation.
Imported files must keep as they are (such as those for jquery, novnc)
This patch was generated by the following command:
find . -name \*.py -o -name \*.json -o -name \*.css -o -name \*.js -o \
-name \*.tmpl | xargs -I @ sed -i s/\\t/" "/g @
Then imported files had changes reverted.
Signed-off-by: Aline Manera <alinefm(a)br.ibm.com>
---
plugins/sample/API.json | 90 +++---
src/kimchi/API.json | 416 +++++++++++++--------------
ui/css/theme-default/button.css | 490 ++++++++++++++++----------------
ui/css/theme-default/circle.css | 8 +-
ui/css/theme-default/form.css | 26 +-
ui/css/theme-default/framework.css | 10 +-
ui/css/theme-default/guest-edit.css | 48 ++--
ui/css/theme-default/list.css | 244 ++++++++--------
ui/css/theme-default/login-window.css | 8 +-
ui/css/theme-default/message.css | 158 +++++-----
ui/css/theme-default/nav-tree.css | 104 +++----
ui/css/theme-default/navbar.css | 50 ++--
ui/css/theme-default/popover.css | 124 ++++----
ui/css/theme-default/reset.css | 28 +-
ui/css/theme-default/storage.css | 40 +--
ui/css/theme-default/template-edit.css | 58 ++--
ui/css/theme-default/template.css | 78 ++---
ui/css/theme-default/template_add.css | 288 +++++++++----------
ui/css/theme-default/template_list.css | 288 +++++++++----------
ui/css/theme-default/tile-check.css | 22 +-
ui/css/theme-default/toolbar.css | 42 +--
ui/css/theme-default/topbar.css | 166 +++++------
ui/css/theme-default/window.css | 140 ++++-----
ui/js/dev.main.js | 8 +-
ui/js/src/kimchi.template_main.js | 2 +-
ui/pages/guest-add.html.tmpl | 120 ++++----
ui/pages/guest.html.tmpl | 78 ++---
ui/pages/kimchi-ui.html.tmpl | 40 +--
ui/pages/report-add.html.tmpl | 52 ++--
ui/pages/storagepool-add.html.tmpl | 144 +++++-----
ui/pages/tabs/guests.html.tmpl | 42 +--
ui/pages/tabs/host.html.tmpl | 220 +++++++-------
ui/pages/template-edit.html.tmpl | 182 ++++++------
33 files changed, 1907 insertions(+), 1907 deletions(-)
diff --git a/plugins/sample/API.json b/plugins/sample/API.json
index 58b6162..58d0969 100644
--- a/plugins/sample/API.json
+++ b/plugins/sample/API.json
@@ -1,47 +1,47 @@
{
- "$schema": "http://json-schema.org/draft-03/schema#",
- "title": "Plugin Sample API",
- "description": "Json schema for Kimchi's Sample Plugin API",
- "type": "object",
- "properties": {
- "rectangles_create": {
- "type": "object",
- "properties": {
- "name": {
- "description": "The name of the new rectangle instance",
- "type": "string",
- "required": true
- },
- "length": {
- "$ref": "#/definitions/positiveNumber",
- "required": true
- },
- "width": {
- "$ref": "#/definitions/positiveNumber",
- "required": true
- }
- }
- }
- },
- "circles_create": {
- "type": "object",
- "properties": {
- "name": {
- "description": "The name of the new circle instance",
- "type": "string",
- "required": true
- },
- "radius": {
- "$ref": "#/definitions/positiveNumber",
- "required": true
- }
- }
- },
- "definitions": {
- "positiveNumber": {
- "type": "number",
- "minimum": 0,
- "exclusiveMinimum": true
- }
- }
+ "$schema": "http://json-schema.org/draft-03/schema#",
+ "title": "Plugin Sample API",
+ "description": "Json schema for Kimchi's Sample Plugin API",
+ "type": "object",
+ "properties": {
+ "rectangles_create": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "description": "The name of the new rectangle instance",
+ "type": "string",
+ "required": true
+ },
+ "length": {
+ "$ref": "#/definitions/positiveNumber",
+ "required": true
+ },
+ "width": {
+ "$ref": "#/definitions/positiveNumber",
+ "required": true
+ }
+ }
+ }
+ },
+ "circles_create": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "description": "The name of the new circle instance",
+ "type": "string",
+ "required": true
+ },
+ "radius": {
+ "$ref": "#/definitions/positiveNumber",
+ "required": true
+ }
+ }
+ },
+ "definitions": {
+ "positiveNumber": {
+ "type": "number",
+ "minimum": 0,
+ "exclusiveMinimum": true
+ }
+ }
}
diff --git a/src/kimchi/API.json b/src/kimchi/API.json
index e364bcd..7b90826 100644
--- a/src/kimchi/API.json
+++ b/src/kimchi/API.json
@@ -1,210 +1,210 @@
{
- "$schema": "http://json-schema.org/draft-03/schema#",
- "title": "Kimchi API",
- "description": "Json schema for Kimchi API",
- "type": "object",
- "properties": {
- "vms_create": {
- "type": "object",
- "properties": {
- "name": {
- "description": "The name of the new VM",
- "type": "string"
- },
- "template": {
- "description": "The URI of a template to use when building a VM",
- "type": "string",
- "pattern": "^/templates/[^/]+/?$",
- "required": true
- },
- "storagepool": {
- "description": "Assign a specefic Storage Pool to the new VM",
- "type": "string",
- "pattern": "^/storagepools/[^/]+/?$"
- }
- }
- },
- "vm_update": {
- "type": "object",
- "properties": {
- "name": {
- "description": "New name of VM",
- "type": "string",
- "minLength": 1
- }
- }
- },
- "networks_create": {
- "type": "object",
- "properties": {
- "name": {
- "description": "The name of the new network",
- "type": "string",
- "minLength": 1,
- "required": true
- },
- "connection": {
- "description": "Specifies how this network should be connected to the other networks",
- "type": "string",
- "pattern": "^isolated|nat|bridge$",
- "required": true
- },
- "subnet": {
- "description": "Network segment in slash-separated format with ip address and prefix or netmask",
- "type": "string"
- },
- "interface": {
- "description": "The name of a network interface on the host",
- "type": "string"
- }
- }
- },
- "templates_create": {
- "type": "object",
- "properties": {
- "name": {
- "description": "The name of the template",
- "type": "string",
- "pattern": "^[^ ]+( +[^ ]+)*$",
- "minLength": 1
- },
- "icon": {
- "description": "The template icon path",
- "type": "string",
- "pattern": "^images/"
- },
- "os_distro": {
- "description": "Distribution name of the Operating System",
- "type": "string",
- "minLength": 1
- },
- "os_version": {
- "description": "Version of the Operating System",
- "type": "string",
- "minLength": 1
- },
- "cpus": {
- "description": "Number of CPUs for the template",
- "type": "integer",
- "minimum": 1
- },
- "memory": {
- "description": "Memory (MB) for the template",
- "type": "integer",
- "minimum": 512
- },
- "cdrom": {
- "description": "Path for cdrom",
- "type": "string",
- "pattern": "^((/)|(http)[s]?:|[t]?(ftp)[s]?:)+.*([.]iso)$",
- "required": true
- },
- "disks": {
- "description": "List of disks",
- "type": "array",
- "items": {
- "type": "object",
- "properties": {
- "index": {
- "description": "Index of the disk",
- "type": "integer",
- "minimum": 0
- },
- "size": {
- "description": "Size (GB) of the disk",
- "type": "number",
- "minimum": 1
- }
- }
- },
- "minItems": 1,
- "uniqueItems": true
- },
- "storagepool": {
- "description": "Location of the storage pool",
- "type": "string",
- "pattern": "^/storagepools/[^/]+/?$"
- },
- "folder": {
- "description": "Folder",
- "type": "array",
- "items": { "type": "string" }
- }
- },
- "additionalProperties": false
- },
- "template_update": {
- "type": "object",
- "properties": {
- "name": {
- "description": "The name of the template",
- "type": "string",
- "pattern": "^[^ ]+( +[^ ]+)*$",
- "minLength": 1
- },
- "icon": {
- "description": "The template icon path",
- "type": "string",
- "pattern": "^images/"
- },
- "os_distro": {
- "description": "Distribution name of the Operating System",
- "type": "string",
- "minLength": 1
- },
- "os_version": {
- "description": "Version of the Operating System",
- "type": "string",
- "minLength": 1
- },
- "cpus": {
- "description": "Number of CPUs for the template",
- "type": "integer",
- "minimum": 1
- },
- "memory": {
- "description": "Memory (MB) for the template",
- "type": "integer",
- "minimum": 512
- },
- "cdrom": {
- "description": "Path for cdrom",
- "type": "string",
- "pattern": "^((/)|(http)[s]?:|[t]?(ftp)[s]?:)+.*([.]iso)$"
- },
- "disks": {
- "description": "List of disks",
- "type": "array",
- "items": {
- "type": "object",
- "properties": {
- "index": {
- "description": "Index of the disk",
- "type": "integer",
- "minimum": 0
- },
- "size": {
- "description": "Size (GB) of the disk",
- "type": "number",
- "minimum": 1
- }
- }
- },
- "minItems": 1,
- "uniqueItems": true
- },
- "storagepool": {
- "description": "Location of the storage pool",
- "type": "string",
- "pattern": "^/storagepools/[^/]+/?$"
- },
- "folder": {
- "description": "Folder",
- "type": "array",
- "items": { "type": "string" }
- }
- },
- "additionalProperties": false
- }
- }
+ "$schema": "http://json-schema.org/draft-03/schema#",
+ "title": "Kimchi API",
+ "description": "Json schema for Kimchi API",
+ "type": "object",
+ "properties": {
+ "vms_create": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "description": "The name of the new VM",
+ "type": "string"
+ },
+ "template": {
+ "description": "The URI of a template to use when building a VM",
+ "type": "string",
+ "pattern": "^/templates/[^/]+/?$",
+ "required": true
+ },
+ "storagepool": {
+ "description": "Assign a specefic Storage Pool to the new VM",
+ "type": "string",
+ "pattern": "^/storagepools/[^/]+/?$"
+ }
+ }
+ },
+ "vm_update": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "description": "New name of VM",
+ "type": "string",
+ "minLength": 1
+ }
+ }
+ },
+ "networks_create": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "description": "The name of the new network",
+ "type": "string",
+ "minLength": 1,
+ "required": true
+ },
+ "connection": {
+ "description": "Specifies how this network should be connected to the other networks",
+ "type": "string",
+ "pattern": "^isolated|nat|bridge$",
+ "required": true
+ },
+ "subnet": {
+ "description": "Network segment in slash-separated format with ip address and prefix or netmask",
+ "type": "string"
+ },
+ "interface": {
+ "description": "The name of a network interface on the host",
+ "type": "string"
+ }
+ }
+ },
+ "templates_create": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "description": "The name of the template",
+ "type": "string",
+ "pattern": "^[^ ]+( +[^ ]+)*$",
+ "minLength": 1
+ },
+ "icon": {
+ "description": "The template icon path",
+ "type": "string",
+ "pattern": "^images/"
+ },
+ "os_distro": {
+ "description": "Distribution name of the Operating System",
+ "type": "string",
+ "minLength": 1
+ },
+ "os_version": {
+ "description": "Version of the Operating System",
+ "type": "string",
+ "minLength": 1
+ },
+ "cpus": {
+ "description": "Number of CPUs for the template",
+ "type": "integer",
+ "minimum": 1
+ },
+ "memory": {
+ "description": "Memory (MB) for the template",
+ "type": "integer",
+ "minimum": 512
+ },
+ "cdrom": {
+ "description": "Path for cdrom",
+ "type": "string",
+ "pattern": "^((/)|(http)[s]?:|[t]?(ftp)[s]?:)+.*([.]iso)$",
+ "required": true
+ },
+ "disks": {
+ "description": "List of disks",
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "index": {
+ "description": "Index of the disk",
+ "type": "integer",
+ "minimum": 0
+ },
+ "size": {
+ "description": "Size (GB) of the disk",
+ "type": "number",
+ "minimum": 1
+ }
+ }
+ },
+ "minItems": 1,
+ "uniqueItems": true
+ },
+ "storagepool": {
+ "description": "Location of the storage pool",
+ "type": "string",
+ "pattern": "^/storagepools/[^/]+/?$"
+ },
+ "folder": {
+ "description": "Folder",
+ "type": "array",
+ "items": { "type": "string" }
+ }
+ },
+ "additionalProperties": false
+ },
+ "template_update": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "description": "The name of the template",
+ "type": "string",
+ "pattern": "^[^ ]+( +[^ ]+)*$",
+ "minLength": 1
+ },
+ "icon": {
+ "description": "The template icon path",
+ "type": "string",
+ "pattern": "^images/"
+ },
+ "os_distro": {
+ "description": "Distribution name of the Operating System",
+ "type": "string",
+ "minLength": 1
+ },
+ "os_version": {
+ "description": "Version of the Operating System",
+ "type": "string",
+ "minLength": 1
+ },
+ "cpus": {
+ "description": "Number of CPUs for the template",
+ "type": "integer",
+ "minimum": 1
+ },
+ "memory": {
+ "description": "Memory (MB) for the template",
+ "type": "integer",
+ "minimum": 512
+ },
+ "cdrom": {
+ "description": "Path for cdrom",
+ "type": "string",
+ "pattern": "^((/)|(http)[s]?:|[t]?(ftp)[s]?:)+.*([.]iso)$"
+ },
+ "disks": {
+ "description": "List of disks",
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "index": {
+ "description": "Index of the disk",
+ "type": "integer",
+ "minimum": 0
+ },
+ "size": {
+ "description": "Size (GB) of the disk",
+ "type": "number",
+ "minimum": 1
+ }
+ }
+ },
+ "minItems": 1,
+ "uniqueItems": true
+ },
+ "storagepool": {
+ "description": "Location of the storage pool",
+ "type": "string",
+ "pattern": "^/storagepools/[^/]+/?$"
+ },
+ "folder": {
+ "description": "Folder",
+ "type": "array",
+ "items": { "type": "string" }
+ }
+ },
+ "additionalProperties": false
+ }
+ }
}
diff --git a/ui/css/theme-default/button.css b/ui/css/theme-default/button.css
index e9354cf..c7ed3f6 100644
--- a/ui/css/theme-default/button.css
+++ b/ui/css/theme-default/button.css
@@ -21,57 +21,57 @@
/* Generated at http://colorzilla.com/gradient-editor/ */
.btn {
- display: inline-block;
- height: 42px;
- margin: 3px;
- vertical-align: top;
- border: 1px solid #aaa;
- -webkit-border-radius: 5px;
- -moz-border-radius: 5px;
- border-radius: 5px;
- -moz-box-sizing: content-box;
- box-sizing: content-box;
- box-shadow: -2px -2px 2px #eaeaea, 2px 2px 2px #fff, 3px 3px 3px white inset, -3px -3px 3px rgba(0, 0, 0, .25) inset;
- background: #ffffff;
- background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #e5e5e5));
- background: -webkit-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
- background: -o-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
- background: -ms-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
- background: linear-gradient(to bottom, #ffffff 0%, #e5e5e5 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e5e5e5', GradientType=0);
- line-height: 42px;
- color: #333;
- font-size: 13px;
- text-shadow: -1px -1px 1px #aaa, 1px 1px 1px #fff;
- text-align: center;
- text-overflow: ellipsis;
- white-space: nowrap;
- cursor: pointer;
+ display: inline-block;
+ height: 42px;
+ margin: 3px;
+ vertical-align: top;
+ border: 1px solid #aaa;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ box-shadow: -2px -2px 2px #eaeaea, 2px 2px 2px #fff, 3px 3px 3px white inset, -3px -3px 3px rgba(0, 0, 0, .25) inset;
+ background: #ffffff;
+ background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #e5e5e5));
+ background: -webkit-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
+ background: -o-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
+ background: -ms-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
+ background: linear-gradient(to bottom, #ffffff 0%, #e5e5e5 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e5e5e5', GradientType=0);
+ line-height: 42px;
+ color: #333;
+ font-size: 13px;
+ text-shadow: -1px -1px 1px #aaa, 1px 1px 1px #fff;
+ text-align: center;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ cursor: pointer;
}
.btn:not([disabled]):hover {
- box-shadow: -2px -2px 2px #dadada, 2px 2px 2px #fff, 3px 3px 3px white inset, -3px -3px 3px rgba(0, 0, 0, .25) inset;
- background: #d5d5d5;
- background: -moz-linear-gradient(top, #d5d5d5 0%, #eeeeee 100%);
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #d5d5d5), color-stop(100%, #eeeeee));
- background: -webkit-linear-gradient(top, #d5d5d5 0%, #eeeeee 100%);
- background: -o-linear-gradient(top, #d5d5d5 0%, #eeeeee 100%);
- background: -ms-linear-gradient(top, #d5d5d5 0%, #eeeeee 100%);
- background: linear-gradient(to bottom, #d5d5d5 0%, #eeeeee 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#d5d5d5', endColorstr='#eeeeee', GradientType=0);
+ box-shadow: -2px -2px 2px #dadada, 2px 2px 2px #fff, 3px 3px 3px white inset, -3px -3px 3px rgba(0, 0, 0, .25) inset;
+ background: #d5d5d5;
+ background: -moz-linear-gradient(top, #d5d5d5 0%, #eeeeee 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #d5d5d5), color-stop(100%, #eeeeee));
+ background: -webkit-linear-gradient(top, #d5d5d5 0%, #eeeeee 100%);
+ background: -o-linear-gradient(top, #d5d5d5 0%, #eeeeee 100%);
+ background: -ms-linear-gradient(top, #d5d5d5 0%, #eeeeee 100%);
+ background: linear-gradient(to bottom, #d5d5d5 0%, #eeeeee 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#d5d5d5', endColorstr='#eeeeee', GradientType=0);
}
.btn:not([disabled]):active {
- box-shadow: -2px -2px 2px #eaeaea, 2px 2px 2px #fff, 3px 3px 3px rgba(0, 0, 0, .25) inset, -3px -3px 3px white inset;
- background: #ffffff;
- background: -moz-linear-gradient(top, #e5e5e5 0%, #ffffff 100%);
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #e5e5e5), color-stop(100%, #ffffff));
- background: -webkit-linear-gradient(top, #e5e5e5 0%, #ffffff 100%);
- background: -o-linear-gradient(top, #e5e5e5 0%, #ffffff 100%);
- background: -ms-linear-gradient(top, #e5e5e5 0%, #ffffff 100%);
- background: linear-gradient(to bottom, #e5e5e5 0%, #ffffff 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#e5e5e5', endColorstr='#ffffff', GradientType=0);
+ box-shadow: -2px -2px 2px #eaeaea, 2px 2px 2px #fff, 3px 3px 3px rgba(0, 0, 0, .25) inset, -3px -3px 3px white inset;
+ background: #ffffff;
+ background: -moz-linear-gradient(top, #e5e5e5 0%, #ffffff 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #e5e5e5), color-stop(100%, #ffffff));
+ background: -webkit-linear-gradient(top, #e5e5e5 0%, #ffffff 100%);
+ background: -o-linear-gradient(top, #e5e5e5 0%, #ffffff 100%);
+ background: -ms-linear-gradient(top, #e5e5e5 0%, #ffffff 100%);
+ background: linear-gradient(to bottom, #e5e5e5 0%, #ffffff 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#e5e5e5', endColorstr='#ffffff', GradientType=0);
}
.btn.loading {
@@ -84,321 +84,321 @@
}
.btn .text {
- padding: 0 10px;
+ padding: 0 10px;
}
.btn .icon {
- display: block;
- width: 42px;
- height: 42px;
+ display: block;
+ width: 42px;
+ height: 42px;
}
.btn.dropdown {
- text-align: left;
- position: relative;
- padding-right: 25px;
+ text-align: left;
+ position: relative;
+ padding-right: 25px;
}
.btn.dropdown .arrow {
- position: absolute;
- width: 15px;
- height: 42px;
- line-height: 42px;
- top: 0;
- right: 10px;
- background: url(../images/theme-default/arrow-down-black.png) no-repeat center center;
- right: 10px;
+ position: absolute;
+ width: 15px;
+ height: 42px;
+ line-height: 42px;
+ top: 0;
+ right: 10px;
+ background: url(../images/theme-default/arrow-down-black.png) no-repeat center center;
+ right: 10px;
}
/* Generated at http://colorzilla.com/gradient-editor/ */
.btn-tool {
- display: inline-block;
- height: 38px;
- margin: 6px 3px;
- vertical-align: top;
- -webkit-border-radius: 5px;
- -moz-border-radius: 5px;
- border-radius: 5px;
- -moz-box-sizing: content-box;
- box-sizing: content-box;
- box-shadow: -1px -1px 1px #777, 1px 1px 1px #eee, 2px 2px 2px #ddd inset, -3px -3px 3px rgba(0, 0, 0, .25) inset;
- background: #f3f3f3;
- background: -moz-linear-gradient(top, #f3f3f3 0%, #dddddd 50%, #d8d8d8 51%, #cccccc 100%);
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f3f3f3), color-stop(50%, #dddddd),
- color-stop(51%, #d8d8d8), color-stop(100%, #cccccc));
- background: -webkit-linear-gradient(top, #f3f3f3 0%, #dddddd 50%, #d8d8d8 51%, #cccccc 100%);
- background: -o-linear-gradient(top, #f3f3f3 0%, #dddddd 50%, #d8d8d8 51%, #cccccc 100%);
- background: -ms-linear-gradient(top, #f3f3f3 0%, #dddddd 50%, #d8d8d8 51%, #cccccc 100%);
- background: linear-gradient(to bottom, #f3f3f3 0%, #dddddd 50%, #d8d8d8 51%, #cccccc 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f3f3f3', endColorstr='#cccccc', GradientType=0);
- overflow: hidden;
- cursor: pointer;
+ display: inline-block;
+ height: 38px;
+ margin: 6px 3px;
+ vertical-align: top;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ box-shadow: -1px -1px 1px #777, 1px 1px 1px #eee, 2px 2px 2px #ddd inset, -3px -3px 3px rgba(0, 0, 0, .25) inset;
+ background: #f3f3f3;
+ background: -moz-linear-gradient(top, #f3f3f3 0%, #dddddd 50%, #d8d8d8 51%, #cccccc 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f3f3f3), color-stop(50%, #dddddd),
+ color-stop(51%, #d8d8d8), color-stop(100%, #cccccc));
+ background: -webkit-linear-gradient(top, #f3f3f3 0%, #dddddd 50%, #d8d8d8 51%, #cccccc 100%);
+ background: -o-linear-gradient(top, #f3f3f3 0%, #dddddd 50%, #d8d8d8 51%, #cccccc 100%);
+ background: -ms-linear-gradient(top, #f3f3f3 0%, #dddddd 50%, #d8d8d8 51%, #cccccc 100%);
+ background: linear-gradient(to bottom, #f3f3f3 0%, #dddddd 50%, #d8d8d8 51%, #cccccc 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f3f3f3', endColorstr='#cccccc', GradientType=0);
+ overflow: hidden;
+ cursor: pointer;
}
.btn-tool:hover {
- box-shadow: -1px -1px 1px #777, 1px 1px 1px #eee, 2px 2px 2px rgba(0, 0, 0, .25) inset, -3px -3px 3px rgba(0, 0, 0, .25)
- inset;
+ box-shadow: -1px -1px 1px #777, 1px 1px 1px #eee, 2px 2px 2px rgba(0, 0, 0, .25) inset, -3px -3px 3px rgba(0, 0, 0, .25)
+ inset;
}
/* Generated at http://colorzilla.com/gradient-editor/ */
.btn-tool.left,.btn-tool.right {
- -webkit-border-radius: 0;
- -moz-border-radius: 0;
- border-radius: 0;
- background: #dddddd;
- background: -moz-linear-gradient(top, #dddddd 0%, #999999 100%);
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #dddddd), color-stop(100%, #999999));
- background: -webkit-linear-gradient(top, #dddddd 0%, #999999 100%);
- background: -o-linear-gradient(top, #dddddd 0%, #999999 100%);
- background: -ms-linear-gradient(top, #dddddd 0%, #999999 100%);
- background: linear-gradient(to bottom, #dddddd 0%, #999999 100%);
- filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#dddddd', endColorstr='#999999', GradientType=0);
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ border-radius: 0;
+ background: #dddddd;
+ background: -moz-linear-gradient(top, #dddddd 0%, #999999 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #dddddd), color-stop(100%, #999999));
+ background: -webkit-linear-gradient(top, #dddddd 0%, #999999 100%);
+ background: -o-linear-gradient(top, #dddddd 0%, #999999 100%);
+ background: -ms-linear-gradient(top, #dddddd 0%, #999999 100%);
+ background: linear-gradient(to bottom, #dddddd 0%, #999999 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#dddddd', endColorstr='#999999', GradientType=0);
}
.btn-tool:active,.btn-tool.active {
- box-shadow: -1px -1px 1px #777, 1px 1px 1px #eee, 3px 3px 3px rgba(0, 0, 0, .35) inset;
+ box-shadow: -1px -1px 1px #777, 1px 1px 1px #eee, 3px 3px 3px rgba(0, 0, 0, .35) inset;
}
.btn-tool.left {
- -webkit-border-top-left-radius: 5px;
- -moz-border-top-left-radius: 5px;
- border-top-left-radius: 5px;
- -webkit-border-bottom-left-radius: 5px;
- -moz-border-bottom-left-radius: 5px;
- border-bottom-left-radius: 5px;
+ -webkit-border-top-left-radius: 5px;
+ -moz-border-top-left-radius: 5px;
+ border-top-left-radius: 5px;
+ -webkit-border-bottom-left-radius: 5px;
+ -moz-border-bottom-left-radius: 5px;
+ border-bottom-left-radius: 5px;
}
.btn-tool.right {
- -webkit-border-top-right-radius: 5px;
- -moz-border-top-right-radius: 5px;
- border-top-right-radius: 5px;
- -webkit-border-bottom-right-radius: 5px;
- -moz-border-bottom-right-radius: 5px;
- border-bottom-right-radius: 5px;
+ -webkit-border-top-right-radius: 5px;
+ -moz-border-top-right-radius: 5px;
+ border-top-right-radius: 5px;
+ -webkit-border-bottom-right-radius: 5px;
+ -moz-border-bottom-right-radius: 5px;
+ border-bottom-right-radius: 5px;
}
.btn-tool .icon {
- display: block;
- width: 48px;
- height: 38px;
+ display: block;
+ width: 48px;
+ height: 38px;
}
.icon.reset {
- background: url(../images/theme-default/icon-reset.png) center center no-repeat;
+ background: url(../images/theme-default/icon-reset.png) center center no-repeat;
}
.icon.power-up {
- background: url(../images/theme-default/icon-power-up.png) center center no-repeat;
+ background: url(../images/theme-default/icon-power-up.png) center center no-repeat;
}
.icon.power-down {
- background: url(../images/theme-default/icon-power-down.png) center center no-repeat;
+ background: url(../images/theme-default/icon-power-down.png) center center no-repeat;
}
.icon.search {
- background: url(../images/theme-default/icon-search.png) no-repeat center center;
+ background: url(../images/theme-default/icon-search.png) no-repeat center center;
}
.icon.sort {
- background: url(../images/theme-default/icon-sort.png) no-repeat center center;
+ background: url(../images/theme-default/icon-sort.png) no-repeat center center;
}
.icon.design {
- background: url(../images/theme-default/icon-design.png) no-repeat center center;
+ background: url(../images/theme-default/icon-design.png) no-repeat center center;
}
.icon.list {
- background: url(../images/theme-default/icon-list.png) no-repeat center center;
+ background: url(../images/theme-default/icon-list.png) no-repeat center center;
}
.icon.detail {
- background: url(../images/theme-default/icon-detail.png) no-repeat center center;
+ background: url(../images/theme-default/icon-detail.png) no-repeat center center;
}
.icon.add {
- line-height: 32px;
- text-align: center;
- text-shadow: -1px -1px 1px #aaa, 1px 1px 1px #eee;
- font-size: 38px;
- font-weight: bold;
- color: #7cae0a;
+ line-height: 32px;
+ text-align: center;
+ text-shadow: -1px -1px 1px #aaa, 1px 1px 1px #eee;
+ font-size: 38px;
+ font-weight: bold;
+ color: #7cae0a;
}
.icon.tree {
- width: 42px;
- background: url(../images/theme-default/icon-tree.png) no-repeat center center;
+ width: 42px;
+ background: url(../images/theme-default/icon-tree.png) no-repeat center center;
}
/* Generated at http://colorzilla.com/gradient-editor/ */
.btn-tool.tree {
- width: 42px;
- margin: 5px 10px;
- background: #ffffff;
- background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #e5e5e5));
- background: -webkit-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
- background: -o-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
- background: -ms-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
- background: linear-gradient(to bottom, #ffffff 0%, #e5e5e5 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e5e5e5', GradientType=0);
- box-shadow: -1px -1px 1px #03385c, 1px 1px 1px #09F, 3px 3px 3px white inset, -3px -3px 3px rgba(0, 0, 0, .25) inset;
+ width: 42px;
+ margin: 5px 10px;
+ background: #ffffff;
+ background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #e5e5e5));
+ background: -webkit-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
+ background: -o-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
+ background: -ms-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
+ background: linear-gradient(to bottom, #ffffff 0%, #e5e5e5 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e5e5e5', GradientType=0);
+ box-shadow: -1px -1px 1px #03385c, 1px 1px 1px #09F, 3px 3px 3px white inset, -3px -3px 3px rgba(0, 0, 0, .25) inset;
}
.btn-select {
- display: inline-block;
- position: relative;
- height: 38px;
- padding-right: 20px;
- margin: 5px;
- vertical-align: top;
- -webkit-border-radius: 5px;
- -moz-border-radius: 5px;
- border-radius: 5px;
- background: #eee;
- box-shadow: -1px -1px 1px #666, 1px 1px 1px #fff, 2px 2px 2px rgba(0, 0, 0, .15) inset;
- font-size: 13px;
- line-height: 38px;
- text-align: left;
- cursor: pointer;
+ display: inline-block;
+ position: relative;
+ height: 38px;
+ padding-right: 20px;
+ margin: 5px;
+ vertical-align: top;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+ background: #eee;
+ box-shadow: -1px -1px 1px #666, 1px 1px 1px #fff, 2px 2px 2px rgba(0, 0, 0, .15) inset;
+ font-size: 13px;
+ line-height: 38px;
+ text-align: left;
+ cursor: pointer;
}
.btn-select .text {
- padding: 0 10px;
+ padding: 0 10px;
}
.btn-select .arrow {
- position: absolute;
- width: 15px;
- height: 38px;
- line-height: 38px;
- top: 0;
- right: 5px;
- background: url(../images/theme-default/arrow-down-black.png) no-repeat center center;
+ position: absolute;
+ width: 15px;
+ height: 38px;
+ line-height: 38px;
+ top: 0;
+ right: 5px;
+ background: url(../images/theme-default/arrow-down-black.png) no-repeat center center;
}
/* Generated at http://colorzilla.com/gradient-editor/ */
.button-big {
- display: block;
- margin-bottom: 10px;
- border: 1px solid #ccc;
- box-shadow: -1px -1px 1px #ccc, 1px 1px 1px #eee;
- text-shadow: -1px -1px 1px #ccc, 1px 1px 1px #fff;
- -webkit-border-radius: 05px;
- -moz-border-radius: 05px;
- border-radius: 05px;
- background: #ffffff;
- background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #e5e5e5));
- background: -webkit-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
- background: -o-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
- background: -ms-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
- background: linear-gradient(to bottom, #ffffff 0%, #e5e5e5 100%);
- filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#e5e5e5', GradientType=0);
- text-align: center;
- font-size: 13px;
- line-height: 38px;
- width: 100%;
+ display: block;
+ margin-bottom: 10px;
+ border: 1px solid #ccc;
+ box-shadow: -1px -1px 1px #ccc, 1px 1px 1px #eee;
+ text-shadow: -1px -1px 1px #ccc, 1px 1px 1px #fff;
+ -webkit-border-radius: 05px;
+ -moz-border-radius: 05px;
+ border-radius: 05px;
+ background: #ffffff;
+ background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #e5e5e5));
+ background: -webkit-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
+ background: -o-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
+ background: -ms-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
+ background: linear-gradient(to bottom, #ffffff 0%, #e5e5e5 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#e5e5e5', GradientType=0);
+ text-align: center;
+ font-size: 13px;
+ line-height: 38px;
+ width: 100%;
}
.button-big:not([disabled]):hover {
- box-shadow: -1px -1px 1px #bbb, 1px 1px 1px #ddd;
- background: #eeeeee;
- background: -moz-linear-gradient(top, #eeeeee 0%, #d5d5d5 100%);
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #eeeeee), color-stop(100%, #d5d5d5));
- background: -webkit-linear-gradient(top, #eeeeee 0%, #d5d5d5 100%);
- background: -o-linear-gradient(top, #eeeeee 0%, #d5d5d5 100%);
- background: -ms-linear-gradient(top, #eeeeee 0%, #d5d5d5 100%);
- background: linear-gradient(to bottom, #eeeeee 0%, #d5d5d5 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#d5d5d5', GradientType=0);
+ box-shadow: -1px -1px 1px #bbb, 1px 1px 1px #ddd;
+ background: #eeeeee;
+ background: -moz-linear-gradient(top, #eeeeee 0%, #d5d5d5 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #eeeeee), color-stop(100%, #d5d5d5));
+ background: -webkit-linear-gradient(top, #eeeeee 0%, #d5d5d5 100%);
+ background: -o-linear-gradient(top, #eeeeee 0%, #d5d5d5 100%);
+ background: -ms-linear-gradient(top, #eeeeee 0%, #d5d5d5 100%);
+ background: linear-gradient(to bottom, #eeeeee 0%, #d5d5d5 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#d5d5d5', GradientType=0);
}
.button-big:not([disabled]):active {
- box-shadow: -1px -1px 1px #eee, 1px 1px 1px #ccc, 2px 2px 2px #ccc inset, -2px -2px 2px #aaa inset;
- background: -moz-linear-gradient(top, #e5e5e5 0%, #ffffff 100%);
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #e5e5e5), color-stop(100%, #ffffff));
- background: -webkit-linear-gradient(top, #e5e5e5 0%, #ffffff 100%);
- background: -o-linear-gradient(top, #e5e5e5 0%, #ffffff 100%);
- background: -ms-linear-gradient(top, #e5e5e5 0%, #ffffff 100%);
- background: linear-gradient(to bottom, #e5e5e5 0%, #ffffff 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#e5e5e5', endColorstr='#ffffff', GradientType=0);
+ box-shadow: -1px -1px 1px #eee, 1px 1px 1px #ccc, 2px 2px 2px #ccc inset, -2px -2px 2px #aaa inset;
+ background: -moz-linear-gradient(top, #e5e5e5 0%, #ffffff 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #e5e5e5), color-stop(100%, #ffffff));
+ background: -webkit-linear-gradient(top, #e5e5e5 0%, #ffffff 100%);
+ background: -o-linear-gradient(top, #e5e5e5 0%, #ffffff 100%);
+ background: -ms-linear-gradient(top, #e5e5e5 0%, #ffffff 100%);
+ background: linear-gradient(to bottom, #e5e5e5 0%, #ffffff 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#e5e5e5', endColorstr='#ffffff', GradientType=0);
}
/* Generated at http://colorzilla.com/gradient-editor/ */
.button-big.red:not([disabled]) {
- text-shadow: -1px -1px 1px #9e0505, 1px 1px 1px #fc5d4c;
- border: 1px solid #b10f14;
- background: #ff3019;
- background: -moz-linear-gradient(top, #ff3019 0%, #cf0404 100%);
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ff3019), color-stop(100%, #cf0404));
- background: -webkit-linear-gradient(top, #ff3019 0%, #cf0404 100%);
- background: -o-linear-gradient(top, #ff3019 0%, #cf0404 100%);
- background: -ms-linear-gradient(top, #ff3019 0%, #cf0404 100%);
- background: linear-gradient(to bottom, #ff3019 0%, #cf0404 100%);
- filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ff3019', endColorstr='#cf0404', GradientType=0);
- color: #fff;
+ text-shadow: -1px -1px 1px #9e0505, 1px 1px 1px #fc5d4c;
+ border: 1px solid #b10f14;
+ background: #ff3019;
+ background: -moz-linear-gradient(top, #ff3019 0%, #cf0404 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ff3019), color-stop(100%, #cf0404));
+ background: -webkit-linear-gradient(top, #ff3019 0%, #cf0404 100%);
+ background: -o-linear-gradient(top, #ff3019 0%, #cf0404 100%);
+ background: -ms-linear-gradient(top, #ff3019 0%, #cf0404 100%);
+ background: linear-gradient(to bottom, #ff3019 0%, #cf0404 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ff3019', endColorstr='#cf0404', GradientType=0);
+ color: #fff;
}
.button-big.red:not([disabled]):hover {
- background: #ef2009;
- background: -moz-linear-gradient(top, #ef2009 0%, #bf0404 100%);
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ef2009), color-stop(100%, #bf0404));
- background: -webkit-linear-gradient(top, #ef2009 0%, #bf0404 100%);
- background: -o-linear-gradient(top, #ef2009 0%, #bf0404 100%);
- background: -ms-linear-gradient(top, #ef2009 0%, #bf0404 100%);
- background: linear-gradient(to bottom, #ef2009 0%, #bf0404 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ef2009', endColorstr='#bf0404', GradientType=0);
- color: #fff;
+ background: #ef2009;
+ background: -moz-linear-gradient(top, #ef2009 0%, #bf0404 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ef2009), color-stop(100%, #bf0404));
+ background: -webkit-linear-gradient(top, #ef2009 0%, #bf0404 100%);
+ background: -o-linear-gradient(top, #ef2009 0%, #bf0404 100%);
+ background: -ms-linear-gradient(top, #ef2009 0%, #bf0404 100%);
+ background: linear-gradient(to bottom, #ef2009 0%, #bf0404 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ef2009', endColorstr='#bf0404', GradientType=0);
+ color: #fff;
}
.button-big.red:not([disabled]):active {
- background: -moz-linear-gradient(top, #cf0404 0%, #ff3019 100%);
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #cf0404), color-stop(100%, #ff3019));
- background: -webkit-linear-gradient(top, #cf0404 0%, #ff3019 100%);
- background: -o-linear-gradient(top, #cf0404 0%, #ff3019 100%);
- background: -ms-linear-gradient(top, #cf0404 0%, #ff3019 100%);
- background: linear-gradient(to bottom, #cf0404 0%, #ff3019 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#cf0404', endColorstr='#ff3019', GradientType=0);
+ background: -moz-linear-gradient(top, #cf0404 0%, #ff3019 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #cf0404), color-stop(100%, #ff3019));
+ background: -webkit-linear-gradient(top, #cf0404 0%, #ff3019 100%);
+ background: -o-linear-gradient(top, #cf0404 0%, #ff3019 100%);
+ background: -ms-linear-gradient(top, #cf0404 0%, #ff3019 100%);
+ background: linear-gradient(to bottom, #cf0404 0%, #ff3019 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#cf0404', endColorstr='#ff3019', GradientType=0);
}
.button-big.disable {
- display: none;
+ display: none;
}
.btn-normal {
- display: inline-block;
- height: 38px;
- margin: 9px 3px;
- vertical-align: top;
- background: #06F;
- line-height: 38px;
- padding: 0 20px;
- color: #EEE;
+ display: inline-block;
+ height: 38px;
+ margin: 9px 3px;
+ vertical-align: top;
+ background: #06F;
+ line-height: 38px;
+ padding: 0 20px;
+ color: #EEE;
border-radius: 8px;
font-size: 13px;
}
.btn-normal:not([disabled]):hover {
- background: #04D;
+ background: #04D;
}
.btn-normal:not([disabled]):active {
- box-shadow: -1px -1px 1px #eee, 1px 1px 1px #ccc, 2px 2px 2px #ccc inset, -2px -2px 2px #aaa inset;
- background: -moz-linear-gradient(top, #04d 0%, #06f 100%);
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #04d), color-stop(100%, #06f));
- background: -webkit-linear-gradient(top, #04d 0%, #ff3019 100%);
- background: -o-linear-gradient(top, #04d 0%, #06f 100%);
- background: -ms-linear-gradient(top, #04d 0%, #06f 100%);
- background: linear-gradient(to bottom, #04d 0%, #06f 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#04d', endColorstr='#06f', GradientType=0);
+ box-shadow: -1px -1px 1px #eee, 1px 1px 1px #ccc, 2px 2px 2px #ccc inset, -2px -2px 2px #aaa inset;
+ background: -moz-linear-gradient(top, #04d 0%, #06f 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #04d), color-stop(100%, #06f));
+ background: -webkit-linear-gradient(top, #04d 0%, #ff3019 100%);
+ background: -o-linear-gradient(top, #04d 0%, #06f 100%);
+ background: -ms-linear-gradient(top, #04d 0%, #06f 100%);
+ background: linear-gradient(to bottom, #04d 0%, #06f 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#04d', endColorstr='#06f', GradientType=0);
}
.btn-normal[disabled] {
- background-color: silver;
+ background-color: silver;
}
.btn-group {
- float: right;
- padding: 0 10px;
+ float: right;
+ padding: 0 10px;
}
.btn-small {
diff --git a/ui/css/theme-default/circle.css b/ui/css/theme-default/circle.css
index 0cd7909..8008219 100644
--- a/ui/css/theme-default/circle.css
+++ b/ui/css/theme-default/circle.css
@@ -19,8 +19,8 @@
* limitations under the License.
*/
.circle {
- position: relative;
- margin: 30px 10px 10px 10px;
- width: 70px;
- height: 70px;
+ position: relative;
+ margin: 30px 10px 10px 10px;
+ width: 70px;
+ height: 70px;
}
diff --git a/ui/css/theme-default/form.css b/ui/css/theme-default/form.css
index 9b7fd68..c24b277 100644
--- a/ui/css/theme-default/form.css
+++ b/ui/css/theme-default/form.css
@@ -19,29 +19,29 @@
* limitations under the License.
*/
.form-section {
- padding: 10px;
+ padding: 10px;
}
.form-section>h2 {
- font-size: 14px;
- padding: 5px;
+ font-size: 14px;
+ padding: 5px;
}
.form-section .field {
- padding: 5px 5px 5px 20px;
- overflow: hidden;
+ padding: 5px 5px 5px 20px;
+ overflow: hidden;
}
.form-section .field .text-help {
- font-size: 12px;
- color: #333;
- margin: 0 0 5px 5px;
+ font-size: 12px;
+ color: #333;
+ margin: 0 0 5px 5px;
}
.form-section .field input.text {
- border: 1px solid #ccc;
- font-size: 16px;
- height: 30px;
- line-height: 30px;
- padding: 0 5px;
+ border: 1px solid #ccc;
+ font-size: 16px;
+ height: 30px;
+ line-height: 30px;
+ padding: 0 5px;
}
diff --git a/ui/css/theme-default/framework.css b/ui/css/theme-default/framework.css
index 200dd6b..d904527 100644
--- a/ui/css/theme-default/framework.css
+++ b/ui/css/theme-default/framework.css
@@ -19,18 +19,18 @@
* limitations under the License.
*/
body {
- background: url(../images/theme-default/bg.png);
+ background: url(../images/theme-default/bg.png);
}
.tmpl-html {
- display: none;
+ display: none;
}
.container {
- margin: 0 auto;
- width: 1024px;
+ margin: 0 auto;
+ width: 1024px;
}
.hidden {
- display: none;
+ display: none;
}
diff --git a/ui/css/theme-default/guest-edit.css b/ui/css/theme-default/guest-edit.css
index 5f97a12..79fca83 100644
--- a/ui/css/theme-default/guest-edit.css
+++ b/ui/css/theme-default/guest-edit.css
@@ -19,49 +19,49 @@
* limitations under the License.
*/
#guest-edit-window {
- font-size: 13px;
- height: 380px;
- width: 420px;
+ font-size: 13px;
+ height: 380px;
+ width: 420px;
}
.guest-edit-fieldset {
- float: left;
- padding: 1em;
+ float: left;
+ padding: 1em;
}
.guest-edit-wrapper-label, .guest-edit-wrapper-controls {
- display: inline-block;
+ display: inline-block;
}
.guest-edit-wrapper-controls input[type="text"][disabled] {
- color: #bbb;
- background-color: #fafafa;
- cursor: not-allowed;
+ color: #bbb;
+ background-color: #fafafa;
+ cursor: not-allowed;
}
.guest-edit-wrapper-label {
- width: 10em;
+ width: 10em;
}
.guest-edit-wrapper-controls {
- width: 18em;
+ width: 18em;
}
.guest-edit-wrapper-controls input[type="text"] {
- height: 38px;
- line-height: 38px;
- background: #fff;
- -webkit-border-radius: 5px;
- border-radius: 5px;
- box-shadow: 2px 2px 2px #eee inset;
- border-top: 1px solid #bbb;
- border-left: 1px solid #bbb;
- padding-left: 10px;
- width: 100%;
+ height: 38px;
+ line-height: 38px;
+ background: #fff;
+ -webkit-border-radius: 5px;
+ border-radius: 5px;
+ box-shadow: 2px 2px 2px #eee inset;
+ border-top: 1px solid #bbb;
+ border-left: 1px solid #bbb;
+ padding-left: 10px;
+ width: 100%;
}
.guest-edit-wrapper-controls input[type="text"][disabled] {
- color: #bbb;
- background-color: #fafafa;
- cursor: not-allowed;
+ color: #bbb;
+ background-color: #fafafa;
+ cursor: not-allowed;
}
diff --git a/ui/css/theme-default/list.css b/ui/css/theme-default/list.css
index e34772f..468361f 100644
--- a/ui/css/theme-default/list.css
+++ b/ui/css/theme-default/list.css
@@ -19,232 +19,232 @@
* limitations under the License.
*/
.list-vm {
- margin: 10px;
+ margin: 10px;
}
/* Generated at http://colorzilla.com/gradient-editor/ */
.list-vm>li {
- margin-bottom: 10px;
- background: #ffffff;
- background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #e5e5e5));
- background: -webkit-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
- background: -o-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
- background: -ms-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
- background: linear-gradient(to bottom, #ffffff 0%, #e5e5e5 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e5e5e5', GradientType=0);
- border: 1px solid #ccc;
- color: #333;
- -webkit-border-radius: 8px;
- -moz-border-radius: 8px;
- border-radius: 8px;
+ margin-bottom: 10px;
+ background: #ffffff;
+ background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #e5e5e5));
+ background: -webkit-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
+ background: -o-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
+ background: -ms-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
+ background: linear-gradient(to bottom, #ffffff 0%, #e5e5e5 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e5e5e5', GradientType=0);
+ border: 1px solid #ccc;
+ color: #333;
+ -webkit-border-radius: 8px;
+ -moz-border-radius: 8px;
+ border-radius: 8px;
}
.list-vm li>* {
- height: 130px;
- display: table-cell;
- vertical-align: top;
- position: relative;
- border-left: 1px solid #ccc;
- border-right: 1px solid #fff;
+ height: 130px;
+ display: table-cell;
+ vertical-align: top;
+ position: relative;
+ border-left: 1px solid #ccc;
+ border-right: 1px solid #fff;
}
.list-vm li>*:FIRST-CHILD {
- border-left: none;
+ border-left: none;
}
.list-vm li>*:LAST-CHILD {
- border-right: none;
+ border-right: none;
}
.list-vm li>.guest-tile{
- text-align: center;
- vertical-align: middle;
+ text-align: center;
+ vertical-align: middle;
}
.list-vm .handle {
- display: block;
- width: 50px;
- height: 130px;
- box-sizing: border-box;
- box-shadow: inset 4px 4px 4px #0289e2, inset -4px -4px 4px #04385d;
- background: #0b6bad url(../images/theme-default/arrow_out.png) center center no-repeat;
- border-top-right: 1px solid #CCC;
- -webkit-border-top-right-radius: 8px;
- -moz-border-top-right-radius: 8px;
- border-top-right-radius: 8px;
- border-bottom-right: 1px solid #CCC;
- -webkit-border-bottom-right-radius: 8px;
- -moz-border-bottom-right-radius: 8px;
- border-bottom-right-radius: 8px;
+ display: block;
+ width: 50px;
+ height: 130px;
+ box-sizing: border-box;
+ box-shadow: inset 4px 4px 4px #0289e2, inset -4px -4px 4px #04385d;
+ background: #0b6bad url(../images/theme-default/arrow_out.png) center center no-repeat;
+ border-top-right: 1px solid #CCC;
+ -webkit-border-top-right-radius: 8px;
+ -moz-border-top-right-radius: 8px;
+ border-top-right-radius: 8px;
+ border-bottom-right: 1px solid #CCC;
+ -webkit-border-bottom-right-radius: 8px;
+ -moz-border-bottom-right-radius: 8px;
+ border-bottom-right-radius: 8px;
}
.list-vm .subtitle {
- color: #666;
- font-size: 13px;
- text-align: center;
- line-height: 10px;
- font-weight: bold;
+ color: #666;
+ font-size: 13px;
+ text-align: center;
+ line-height: 10px;
+ font-weight: bold;
}
.list-vm .tile .imgload {
- display: none;
- max-height: 110px;
- max-width: 170px;
- height: auto;
- width: auto;
+ display: none;
+ max-height: 110px;
+ max-width: 170px;
+ height: auto;
+ width: auto;
}
.list-vm .tile .imgactive {
- max-height: 110px;
- max-width: 170px;
- height: auto;
- width: auto;
+ max-height: 110px;
+ max-width: 170px;
+ height: auto;
+ width: auto;
}
.guest-type {
- width: 257px;
+ width: 257px;
}
.guest-cpu {
- width: 91px;
+ width: 91px;
}
.guest-network {
- width: 91px;
+ width: 91px;
}
.guest-storage {
- width: 91px;
+ width: 91px;
}
.guest-tile {
- width: 190px;
+ width: 190px;
}
.guest-users {
- width: 93px;
+ width: 93px;
}
.guest-actions {
- width: 125px;
- min-width: 125px;
+ width: 125px;
+ min-width: 125px;
}
.guest-handle {
- width: 50px;
+ width: 50px;
}
.guest-general {
- padding: 10px;
- border-bottom: 1px solid #ccc;
- width: 237px;
+ padding: 10px;
+ border-bottom: 1px solid #ccc;
+ width: 237px;
}
.guest-ip {
- padding: 0 10px;
- border-top: 1px solid #fff;
+ padding: 0 10px;
+ border-top: 1px solid #fff;
}
.guest-general .title {
- color: #666;
- font-size: 16px;
- font-weight: normal;
- height: 25px;
- line-height: 25px;
- text-shadow: -1px -1px 1px #ccc, 1px 1px 1px #fff;
- max-width: 237px;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
+ color: #666;
+ font-size: 16px;
+ font-weight: normal;
+ height: 25px;
+ line-height: 25px;
+ text-shadow: -1px -1px 1px #ccc, 1px 1px 1px #fff;
+ max-width: 237px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
}
.guest-general .text {
- font-weight: bold;
- color: #999;
- font-size: 11px;
- text-shadow: -1px -1px 1px #ccc, 1px 1px 1px #fff;
+ font-weight: bold;
+ color: #999;
+ font-size: 11px;
+ text-shadow: -1px -1px 1px #ccc, 1px 1px 1px #fff;
}
.guest-users .top {
- border-bottom: 1px solid #ccc;
- padding: 3px 10px;
+ border-bottom: 1px solid #ccc;
+ padding: 3px 10px;
}
.guest-users .bottom {
- border-top: 1px solid #fff;
- padding: 3px 10px;
+ border-top: 1px solid #fff;
+ padding: 3px 10px;
}
.guest-users .users {
- height: 45px;
- line-height: 45px;
- background: url(../images/theme-default/icon-user.png) left center no-repeat;
- padding-left: 50px;
- font-size: 36px;
- font-weight: bold;
+ height: 45px;
+ line-height: 45px;
+ background: url(../images/theme-default/icon-user.png) left center no-repeat;
+ padding-left: 50px;
+ font-size: 36px;
+ font-weight: bold;
}
.guest-users .snapshots {
- height: 40px;
- line-height: 40px;
- background: url(../images/theme-default/icon-camera.png) left center no-repeat;
- padding-left: 50px;
- font-size: 36px;
- font-weight: bold;
+ height: 40px;
+ line-height: 40px;
+ background: url(../images/theme-default/icon-camera.png) left center no-repeat;
+ padding-left: 50px;
+ font-size: 36px;
+ font-weight: bold;
}
.guest-users .mini-text {
- font-size: 11px;
- font-weight: normal;
- text-shadow: -1px -1px 1px #ccc, 1px 1px 1px #fff;
+ font-size: 11px;
+ font-weight: normal;
+ text-shadow: -1px -1px 1px #ccc, 1px 1px 1px #fff;
}
.guest-actions .top {
- padding: 7px 10px;
+ padding: 7px 10px;
}
.guest-actions .bottom {
- padding: 0 10px;
+ padding: 0 10px;
}
.list-vm .tile {
- max-width: 170px;
- max-height: 110px;
- width: auto;
- height: auto;
- margin: 10px;
+ max-width: 170px;
+ max-height: 110px;
+ width: auto;
+ height: auto;
+ margin: 10px;
}
.list-vm .tile:not(.shutoff) img {
- box-shadow: -1px -1px 2px rgb(0, 0, 0, .25), 3px 3px 3px #fff;
+ box-shadow: -1px -1px 2px rgb(0, 0, 0, .25), 3px 3px 3px #fff;
}
.list-vm .shutoff {
- box-shadow: none !important;
+ box-shadow: none !important;
}
.list-vm .shutoff img {
- opacity: 0.4;
+ opacity: 0.4;
}
.list-title {
- color: #666;
- font-weight: bold;
- font-size: 12px;
- overflow: hidden;
- margin: 10px;
+ color: #666;
+ font-weight: bold;
+ font-size: 12px;
+ overflow: hidden;
+ margin: 10px;
}
.list-title li {
- display: table-cell;
- padding: 0 1px;
+ display: table-cell;
+ padding: 0 1px;
}
.list-no-result {
- font-size: 16px;
- height: 48px;
- line-height: 48px;
- text-shadow: -1px -1px 1px #ccc, 1px 1px 1px #fff;
- padding-left: 10px;
+ font-size: 16px;
+ height: 48px;
+ line-height: 48px;
+ text-shadow: -1px -1px 1px #ccc, 1px 1px 1px #fff;
+ padding-left: 10px;
}
diff --git a/ui/css/theme-default/login-window.css b/ui/css/theme-default/login-window.css
index c2f445d..a5a2729 100644
--- a/ui/css/theme-default/login-window.css
+++ b/ui/css/theme-default/login-window.css
@@ -26,10 +26,10 @@
#login-window>header>.title-text {
front: #000000;
font-size: 18px;
- height: 48px;
- line-height: 48px;
- font-weight: bold;
- text-shadow: -1px -1px 1px #eaeaea, 1px 1px 1px #fff;
+ height: 48px;
+ line-height: 48px;
+ font-weight: bold;
+ text-shadow: -1px -1px 1px #eaeaea, 1px 1px 1px #fff;
}
#login-window footer #form-language {
diff --git a/ui/css/theme-default/message.css b/ui/css/theme-default/message.css
index d2c7192..46d1a55 100644
--- a/ui/css/theme-default/message.css
+++ b/ui/css/theme-default/message.css
@@ -19,120 +19,120 @@
* limitations under the License.
*/
#messageField {
- position: fixed;
- margin: auto;
- left: 0;
- right: 0;
- top: 0;
- width: 1024px;
- max-width: 100%;
- z-index: 200;
+ position: fixed;
+ margin: auto;
+ left: 0;
+ right: 0;
+ top: 0;
+ width: 1024px;
+ max-width: 100%;
+ z-index: 200;
}
.message {
- background-color: #FFF68F;
- position: relative;
- margin-bottom: 5px;
+ background-color: #FFF68F;
+ position: relative;
+ margin-bottom: 5px;
}
.message.warn {
- background-color: #FFF68F;
+ background-color: #FFF68F;
}
.message.error {
- background-color: #FFAEB9;
+ background-color: #FFAEB9;
}
.message.success {
- background-color: #90EE90;
+ background-color: #90EE90;
}
.message .close {
- position: absolute;
- width: 30px;
- height: 30px;
- top: 0;
- right: 0;
- color: #545454;
- font-size: 12px;
- text-align: center;
- line-height: 30px;
- cursor: pointer;
+ position: absolute;
+ width: 30px;
+ height: 30px;
+ top: 0;
+ right: 0;
+ color: #545454;
+ font-size: 12px;
+ text-align: center;
+ line-height: 30px;
+ cursor: pointer;
}
.message .content {
- padding: 0 30px 0 10px;
- line-height: 30px;
+ padding: 0 30px 0 10px;
+ line-height: 30px;
}
.confirmbox {
- position: absolute;
- margin: auto;
- left: 0;
- right: 0;
- top: 0;
- bottom: 0;
- box-shadow: 2px 2px 6px #000;
- border: 2px solid #0f71b4;
- -webkit-border-radius: 8px;
- -moz-border-radius: 8px;
- border-radius: 8px;
- background-color: black;
- box-sizing: border-box;
- max-width: 100%;
- max-height: 100%;
- width: 350px;
- height: 170px;
- z-index: 9999;
+ position: absolute;
+ margin: auto;
+ left: 0;
+ right: 0;
+ top: 0;
+ bottom: 0;
+ box-shadow: 2px 2px 6px #000;
+ border: 2px solid #0f71b4;
+ -webkit-border-radius: 8px;
+ -moz-border-radius: 8px;
+ border-radius: 8px;
+ background-color: black;
+ box-sizing: border-box;
+ max-width: 100%;
+ max-height: 100%;
+ width: 350px;
+ height: 170px;
+ z-index: 9999;
}
.confirmbox>footer {
- position: absolute;
- left: 0;
- right: 0;
- bottom: 0;
- height: 48px;
- box-shadow: 0 -1px 1px rgba(0, 0, 0, 0.15);
+ position: absolute;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ height: 48px;
+ box-shadow: 0 -1px 1px rgba(0, 0, 0, 0.15);
}
.confirmbox .title {
- display: inline-block;
- padding: 10px 10px 0 10px;
- line-height: 20px;
- color: white;
+ display: inline-block;
+ padding: 10px 10px 0 10px;
+ line-height: 20px;
+ color: white;
}
.confirmbox .content {
- padding: 20px 10px 0px 100px;
- line-height: 16px;
- font-size: 13px;
- color: white;
- background: url(../images/theme-default/alert.png) no-repeat 20px center;
- height: 41px;
- vertical-align: middle;
+ padding: 20px 10px 0px 100px;
+ line-height: 16px;
+ font-size: 13px;
+ color: white;
+ background: url(../images/theme-default/alert.png) no-repeat 20px center;
+ height: 41px;
+ vertical-align: middle;
}
.confirmbox .close {
- position: absolute;
- width: 13px;
- height: 13px;
- top: 7px;
- right: 7px;
- -webkit-border-radius: 13px;
- -moz-border-radius: 13px;
- border-radius: 13px;
- border: 2px solid #ccc;
- color: #ccc;
- font-size: 13px;
- text-align: center;
- line-height: 13px;
- font-weight: bold;
- background: #4a4a4a;;
- cursor: pointer;
+ position: absolute;
+ width: 13px;
+ height: 13px;
+ top: 7px;
+ right: 7px;
+ -webkit-border-radius: 13px;
+ -moz-border-radius: 13px;
+ border-radius: 13px;
+ border: 2px solid #ccc;
+ color: #ccc;
+ font-size: 13px;
+ text-align: center;
+ line-height: 13px;
+ font-weight: bold;
+ background: #4a4a4a;;
+ cursor: pointer;
}
.confirmbox>header>.close:hover {
- border: 2px solid #444;
- color: #444;
+ border: 2px solid #444;
+ color: #444;
}
\ No newline at end of file
diff --git a/ui/css/theme-default/nav-tree.css b/ui/css/theme-default/nav-tree.css
index 7a9356a..52c0506 100644
--- a/ui/css/theme-default/nav-tree.css
+++ b/ui/css/theme-default/nav-tree.css
@@ -19,98 +19,98 @@
* limitations under the License.
*/
.nav-tree {
- overflow: hidden;
- border-bottom: 1px solid #000;
+ overflow: hidden;
+ border-bottom: 1px solid #000;
}
.nav-tree .item {
- overflow: hidden;
- border-top: 1px solid #000;
- border-bottom: 1px solid #444;
- background: #222;
- *vertical-align: top;
+ overflow: hidden;
+ border-top: 1px solid #000;
+ border-bottom: 1px solid #444;
+ background: #222;
+ *vertical-align: top;
}
.nav-tree .item .arrow {
- float: left;
- width: 42px;
- height: 48px;
- border-right: 1px solid #000;
- background: transparent url("../images/theme-default/folder-arrow-right.png") center center no-repeat;
+ float: left;
+ width: 42px;
+ height: 48px;
+ border-right: 1px solid #000;
+ background: transparent url("../images/theme-default/folder-arrow-right.png") center center no-repeat;
}
.nav-tree .item.on .arrow {
- background: transparent url("../images/theme-default/folder-arrow-down.png") center center no-repeat;
+ background: transparent url("../images/theme-default/folder-arrow-down.png") center center no-repeat;
}
.nav-tree .item.nochild .arrow {
- background: none;
+ background: none;
}
.nav-tree .item .arrow+.item-link {
- border-left: 1px solid #444;
+ border-left: 1px solid #444;
}
.nav-tree .sub {
- display: none;
+ display: none;
}
.nav-tree .item.on+.sub {
- display: block;
+ display: block;
}
.nav-tree .sub .item {
- padding-left: 44px;
+ padding-left: 44px;
}
.nav-tree .item-link {
- display: block;
- position: relative;
- height: 48px;
- overflow: hidden;
- line-height: 48px;
- color: #eee;
+ display: block;
+ position: relative;
+ height: 48px;
+ overflow: hidden;
+ line-height: 48px;
+ color: #eee;
}
.nav-tree .item-link .count {
- position: absolute;
- height: 24px;
- right: 10px;
- margin: 12px 0;
- padding: 0 9px;
- background: #900;
- box-shadow: 1px 1px 1px #333, -1px -1px 1px #000, 1px 1px 1px #600 inset;
- -webkit-border-radius: 24px;
- -moz-border-radius: 24px;
- border-radius: 24px;
- text-align: center;
- color: #fff;
- font-size: 10px;
- line-height: 24px;
+ position: absolute;
+ height: 24px;
+ right: 10px;
+ margin: 12px 0;
+ padding: 0 9px;
+ background: #900;
+ box-shadow: 1px 1px 1px #333, -1px -1px 1px #000, 1px 1px 1px #600 inset;
+ -webkit-border-radius: 24px;
+ -moz-border-radius: 24px;
+ border-radius: 24px;
+ text-align: center;
+ color: #fff;
+ font-size: 10px;
+ line-height: 24px;
}
.nav-tree .item-link .title {
- position: absolute;
- left: 42px;
- right: 42px;
- overflow: hidden;
- color: #fff;
- font-size: 13px;
- text-overflow: ellipsis;
- white-space: nowrap;
- overflow: hidden;
+ position: absolute;
+ left: 42px;
+ right: 42px;
+ overflow: hidden;
+ color: #fff;
+ font-size: 13px;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ overflow: hidden;
}
.nav-tree .item-link .thumb {
- position: absolute;
- width: 42px;
- height: 48px;
+ position: absolute;
+ width: 42px;
+ height: 48px;
}
.nav-tree .item-link .thumb.host {
- background: url("../images/theme-default/thumb-host.png") center center no-repeat;
+ background: url("../images/theme-default/thumb-host.png") center center no-repeat;
}
.nav-tree .item-link .thumb.guest {
- background: url("../images/theme-default/thumb-guest.png") center center no-repeat;
+ background: url("../images/theme-default/thumb-guest.png") center center no-repeat;
}
diff --git a/ui/css/theme-default/navbar.css b/ui/css/theme-default/navbar.css
index efd08aa..7ecfcf1 100644
--- a/ui/css/theme-default/navbar.css
+++ b/ui/css/theme-default/navbar.css
@@ -19,44 +19,44 @@
* limitations under the License.
*/
.navbar {
- height: 48px;
- border-top: 1px solid #2c85c3;
- border-bottom: 1px solid #04385d;
- background: #0769ac url(../images/theme-default/nav-bg.png) repeat-x;
+ height: 48px;
+ border-top: 1px solid #2c85c3;
+ border-bottom: 1px solid #04385d;
+ background: #0769ac url(../images/theme-default/nav-bg.png) repeat-x;
}
.nav-menu {
- height: 48px;
- position: relative;
+ height: 48px;
+ position: relative;
}
.nav-menu li {
- float: left;
- height: 48px;
+ float: left;
+ height: 48px;
}
.nav-menu .item {
- display: block;
- width: 100px;
- height: 48px;
- line-height: 48px;
- padding: 0 10px;
- text-align: center;
- font-size: 13px;
- color: #eee;
- outline: none;
+ display: block;
+ width: 100px;
+ height: 48px;
+ line-height: 48px;
+ padding: 0 10px;
+ text-align: center;
+ font-size: 13px;
+ color: #eee;
+ outline: none;
}
.nav-menu .item.current:focus {
- outline: white dotted thin;
+ outline: white dotted thin;
}
.menu-arrow {
- position: absolute;
- width: 0;
- bottom: -1px;
- left: 50px;
- border: 10px solid transparent;
- border-top: none;
- border-bottom-color: #e4e4e4;
+ position: absolute;
+ width: 0;
+ bottom: -1px;
+ left: 50px;
+ border: 10px solid transparent;
+ border-top: none;
+ border-bottom-color: #e4e4e4;
}
diff --git a/ui/css/theme-default/popover.css b/ui/css/theme-default/popover.css
index 65ec3a2..95eb183 100644
--- a/ui/css/theme-default/popover.css
+++ b/ui/css/theme-default/popover.css
@@ -19,102 +19,102 @@
* limitations under the License.
*/
.popover {
- -webkit-border-radius: 5px;
- -moz-border-radius: 5px;
- border-radius: 5px;
- background: #eee;
- border: 2px solid #096aad;
- box-shadow: 1px 1px 2px rgba(0, 0, 0, .5);
- z-index: 9999;
- position: absolute;
- top: 125%;
- left: 0;
- display: none;
- cursor: default;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+ background: #eee;
+ border: 2px solid #096aad;
+ box-shadow: 1px 1px 2px rgba(0, 0, 0, .5);
+ z-index: 9999;
+ position: absolute;
+ top: 125%;
+ left: 0;
+ display: none;
+ cursor: default;
}
.popover:BEFORE {
- content: "";
- display: block;
- border: 12px solid transparent;
- border-bottom-color: #096aad;
- position: absolute;
- top: -24px;
- left: 20px;
+ content: "";
+ display: block;
+ border: 12px solid transparent;
+ border-bottom-color: #096aad;
+ position: absolute;
+ top: -24px;
+ left: 20px;
}
.popover:AFTER {
- content: "";
- display: block;
- border: 10px solid transparent;
- border-bottom-color: #eee;
- position: absolute;
- top: -20px;
- left: 22px;
+ content: "";
+ display: block;
+ border: 10px solid transparent;
+ border-bottom-color: #eee;
+ position: absolute;
+ top: -20px;
+ left: 22px;
}
.popover.right-side {
- left: auto;
- right: 0;
+ left: auto;
+ right: 0;
}
.popover.right-side:BEFORE {
- left: auto;
- right: 20px;
+ left: auto;
+ right: 20px;
}
.popover.right-side:AFTER {
- left: auto;
- right: 22px;
+ left: auto;
+ right: 22px;
}
.open>.popover {
- display: block;
+ display: block;
}
/* Generated at http://colorzilla.com/gradient-editor/ */
.actionsheet {
- background: rgb(238, 238, 238);
- background: -moz-linear-gradient(top, rgba(238, 238, 238, 1) 0%, rgba(204, 204, 204, 1) 10px, rgba(204, 204, 204, 1) 96%,
- rgba(165, 165, 165, 1) 100%);
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(238, 238, 238, 1)),
- color-stop(10px, rgba(204, 204, 204, 1)), color-stop(96%, rgba(204, 204, 204, 1)),
- color-stop(100%, rgba(165, 165, 165, 1)));
- background: -webkit-linear-gradient(top, rgba(238, 238, 238, 1) 0%, rgba(204, 204, 204, 1) 10px, rgba(204, 204, 204, 1)
- 96%, rgba(165, 165, 165, 1) 100%);
- background: -o-linear-gradient(top, rgba(238, 238, 238, 1) 0%, rgba(204, 204, 204, 1) 10px, rgba(204, 204, 204, 1) 96%,
- rgba(165, 165, 165, 1) 100%);
- background: -ms-linear-gradient(top, rgba(238, 238, 238, 1) 0%, rgba(204, 204, 204, 1) 10px, rgba(204, 204, 204, 1) 96%,
- rgba(165, 165, 165, 1) 100%);
- background: linear-gradient(to bottom, rgba(238, 238, 238, 1) 0%, rgba(204, 204, 204, 1) 10px, rgba(204, 204, 204, 1)
- 96%, rgba(165, 165, 165, 1) 100%);
- padding: 10px 10px 0 10px;
+ background: rgb(238, 238, 238);
+ background: -moz-linear-gradient(top, rgba(238, 238, 238, 1) 0%, rgba(204, 204, 204, 1) 10px, rgba(204, 204, 204, 1) 96%,
+ rgba(165, 165, 165, 1) 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(238, 238, 238, 1)),
+ color-stop(10px, rgba(204, 204, 204, 1)), color-stop(96%, rgba(204, 204, 204, 1)),
+ color-stop(100%, rgba(165, 165, 165, 1)));
+ background: -webkit-linear-gradient(top, rgba(238, 238, 238, 1) 0%, rgba(204, 204, 204, 1) 10px, rgba(204, 204, 204, 1)
+ 96%, rgba(165, 165, 165, 1) 100%);
+ background: -o-linear-gradient(top, rgba(238, 238, 238, 1) 0%, rgba(204, 204, 204, 1) 10px, rgba(204, 204, 204, 1) 96%,
+ rgba(165, 165, 165, 1) 100%);
+ background: -ms-linear-gradient(top, rgba(238, 238, 238, 1) 0%, rgba(204, 204, 204, 1) 10px, rgba(204, 204, 204, 1) 96%,
+ rgba(165, 165, 165, 1) 100%);
+ background: linear-gradient(to bottom, rgba(238, 238, 238, 1) 0%, rgba(204, 204, 204, 1) 10px, rgba(204, 204, 204, 1)
+ 96%, rgba(165, 165, 165, 1) 100%);
+ padding: 10px 10px 0 10px;
}
.select-list {
- max-height: 195px;
- overflow: auto;
+ max-height: 195px;
+ overflow: auto;
}
.select-list>li {
- height: 48px;
- padding: 0 20px 0 40px;
- border-bottom: 1px solid #ccc;
- box-shadow: 0px 1px 1px #fff;
- text-shadow: -1px -1px 1px #ddd, 1px 1px 1px #fff;
- color: #222;
- font-size: 12px;
- line-height: 48px;
+ height: 48px;
+ padding: 0 20px 0 40px;
+ border-bottom: 1px solid #ccc;
+ box-shadow: 0px 1px 1px #fff;
+ text-shadow: -1px -1px 1px #ddd, 1px 1px 1px #fff;
+ color: #222;
+ font-size: 12px;
+ line-height: 48px;
}
.select-list>li:LAST-CHILD {
- border-bottom: none;
- box-shadow: inherit;
+ border-bottom: none;
+ box-shadow: inherit;
}
.select-list>li:hover {
- background: #f8f8f8 url(../images/theme-default/check-grey.png) no-repeat 10px center;
+ background: #f8f8f8 url(../images/theme-default/check-grey.png) no-repeat 10px center;
}
.select-list>li.active {
- background: #f8f8f8 url(../images/theme-default/check-green.png) no-repeat 10px center;
+ background: #f8f8f8 url(../images/theme-default/check-green.png) no-repeat 10px center;
}
diff --git a/ui/css/theme-default/reset.css b/ui/css/theme-default/reset.css
index b956119..05b4836 100644
--- a/ui/css/theme-default/reset.css
+++ b/ui/css/theme-default/reset.css
@@ -19,39 +19,39 @@
* limitations under the License.
*/
html,body,div,span,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video,button
- {
- margin: 0;
- padding: 0;
- border: 0;
- font-family: Tahoma, Geneva, sans-serif;
+ {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-family: Tahoma, Geneva, sans-serif;
}
article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section
- {
- display: block;
+ {
+ display: block;
}
ol,ul {
- list-style: none;
+ list-style: none;
}
table {
- border-collapse: collapse;
- border-spacing: 0;
+ border-collapse: collapse;
+ border-spacing: 0;
}
img {
- border: none;
+ border: none;
}
a {
- text-decoration: none;
+ text-decoration: none;
}
a:active,a:hover {
- outline: none;
+ outline: none;
}
a label {
- cursor: pointer;
+ cursor: pointer;
}
diff --git a/ui/css/theme-default/storage.css b/ui/css/theme-default/storage.css
index 6ac7d10..d81dc75 100644
--- a/ui/css/theme-default/storage.css
+++ b/ui/css/theme-default/storage.css
@@ -526,33 +526,33 @@
}
.storage-type-wrapper-controls {
- width: 300px;
- display: inline-block;
- vertical-align: top;
- padding: 5px 5px 5px 20px;
+ width: 300px;
+ display: inline-block;
+ vertical-align: top;
+ padding: 5px 5px 5px 20px;
}
.storage-type-wrapper-controls input[type="text"] {
- height: 38px;
- line-height: 38px;
- background: #fff;
- -webkit-border-radius: 5px;
- border-radius: 5px;
- box-shadow: 2px 2px 2px #eee inset;
- border-top: 1px solid #bbb;
- border-left: 1px solid #bbb;
- padding: 0 10px;
- margin-top: 5px;
- width: 250px;
+ height: 38px;
+ line-height: 38px;
+ background: #fff;
+ -webkit-border-radius: 5px;
+ border-radius: 5px;
+ box-shadow: 2px 2px 2px #eee inset;
+ border-top: 1px solid #bbb;
+ border-left: 1px solid #bbb;
+ padding: 0 10px;
+ margin-top: 5px;
+ width: 250px;
}
.storage-type-wrapper-controls > .dropdown {
- margin: 5px 0 0 1px;
- width: 250px;
+ margin: 5px 0 0 1px;
+ width: 250px;
}
.storage-type-wrapper-controls input[type="text"][disabled] {
- color: #bbb;
- background-color: #fafafa;
- cursor: not-allowed;
+ color: #bbb;
+ background-color: #fafafa;
+ cursor: not-allowed;
}
\ No newline at end of file
diff --git a/ui/css/theme-default/template-edit.css b/ui/css/theme-default/template-edit.css
index 1a049c0..e61b2fb 100644
--- a/ui/css/theme-default/template-edit.css
+++ b/ui/css/theme-default/template-edit.css
@@ -19,57 +19,57 @@
* limitations under the License.
*/
#template-edit-window {
- font-size: 13px;
- height: 400px;
- width: 1000px;
+ font-size: 13px;
+ height: 400px;
+ width: 1000px;
}
.template-edit-fieldset {
- float: left;
- padding: 1em;
+ float: left;
+ padding: 1em;
}
.template-edit-wrapper-label, .template-edit-wrapper-controls {
- display: inline-block;
- vertical-align: top;
+ display: inline-block;
+ vertical-align: top;
}
.template-edit-wrapper-label {
- width: 150px;
- height: 38px;
- line-height: 38px;
- margin-top: 5px;
+ width: 150px;
+ height: 38px;
+ line-height: 38px;
+ margin-top: 5px;
}
.template-edit-wrapper-controls {
- width: 300px;
+ width: 300px;
}
.template-edit-wrapper-controls input[type="text"] {
- height: 38px;
- line-height: 38px;
- background: #fff;
- -webkit-border-radius: 5px;
- border-radius: 5px;
- box-shadow: 2px 2px 2px #eee inset;
- border-top: 1px solid #bbb;
- border-left: 1px solid #bbb;
- padding: 0 10px;
- margin-top: 5px;
- width: 250px;
+ height: 38px;
+ line-height: 38px;
+ background: #fff;
+ -webkit-border-radius: 5px;
+ border-radius: 5px;
+ box-shadow: 2px 2px 2px #eee inset;
+ border-top: 1px solid #bbb;
+ border-left: 1px solid #bbb;
+ padding: 0 10px;
+ margin-top: 5px;
+ width: 250px;
}
.template-edit-wrapper-controls > .dropdown {
- margin: 5px 0 0 1px;
- width: 250px;
+ margin: 5px 0 0 1px;
+ width: 250px;
}
.template-edit-wrapper-controls input[type="text"][disabled] {
- color: #bbb;
- background-color: #fafafa;
- cursor: not-allowed;
+ color: #bbb;
+ background-color: #fafafa;
+ cursor: not-allowed;
}
.hidden-area {
- display: none;
+ display: none;
}
diff --git a/ui/css/theme-default/template.css b/ui/css/theme-default/template.css
index 8629183..0962926 100644
--- a/ui/css/theme-default/template.css
+++ b/ui/css/theme-default/template.css
@@ -19,70 +19,70 @@
* limitations under the License.
*/
.tile-template>li>label:hover .summary {
- opacity: 0.1;
+ opacity: 0.1;
}
.tile-template>li>label:hover .list-info {
- top: 0;
+ top: 0;
}
.tile-template .summary {
- -webkit-transition: opacity 0.25s;
- -moz-transition: opacity 0.25s;
- transition: opacity 0.25s;
+ -webkit-transition: opacity 0.25s;
+ -moz-transition: opacity 0.25s;
+ transition: opacity 0.25s;
}
.tile-template .list-info {
- -webkit-transition: top 0.25s;
- -moz-transition: top 0.25s;
- transition: top 0.25s;
- position: absolute;
- top: 100%;
- width: 100%;
+ -webkit-transition: top 0.25s;
+ -moz-transition: top 0.25s;
+ transition: top 0.25s;
+ position: absolute;
+ top: 100%;
+ width: 100%;
}
.tile-template .list-info>li {
- border-bottom: 1px dotted #ccc;
- padding: 5px;
- font-size: 12px;
- line-height: 20px;
- overflow: hidden;
- width: 96%;
+ border-bottom: 1px dotted #ccc;
+ padding: 5px;
+ font-size: 12px;
+ line-height: 20px;
+ overflow: hidden;
+ width: 96%;
}
.tile-template .list-info>li>label {
- display: inline-block;
- color: #111;
- width: auto;
- text-align: left;
- cursor: pointer;
+ display: inline-block;
+ color: #111;
+ width: auto;
+ text-align: left;
+ cursor: pointer;
}
.tile-template .list-info>li>span {
- float: right;
- color: #444693;
- width: auto;
- text-align: right;
+ float: right;
+ color: #444693;
+ width: auto;
+ text-align: right;
}
.os-icon {
- text-align: center;
+ text-align: center;
}
.os-icon .title {
- display: block;
- font-size: 14px;
- margin-bottom: 5px;
- overflow: hidden;
- width: 260px;
- word-break: break-all;
- word-wrap: break-word;
- height: 50px;
- line-height: 25px;
+ display: block;
+ font-size: 14px;
+ margin-bottom: 5px;
+ overflow: hidden;
+ width: 260px;
+ word-break: break-all;
+ word-wrap: break-word;
+ height: 50px;
+ line-height: 25px;
}
.os-icon img {
- margin-top: 7px;
- width: 64px;
- height: 64px;
+ margin-top: 7px;
+ width: 64px;
+ height: 64px;
}
diff --git a/ui/css/theme-default/template_add.css b/ui/css/theme-default/template_add.css
index 38fa375..511dd98 100644
--- a/ui/css/theme-default/template_add.css
+++ b/ui/css/theme-default/template_add.css
@@ -19,264 +19,264 @@
* limitations under the License.
*/
.page-list {
- position: absolute;
- left: 0;
- right: 0;
- top: 0;
- bottom: 0;
- overflow: hidden;
+ position: absolute;
+ left: 0;
+ right: 0;
+ top: 0;
+ bottom: 0;
+ overflow: hidden;
}
.page {
- position: absolute;
- left: 100%;
- width: 100%;
- height: 100%;
- overflow: auto;
+ position: absolute;
+ left: 100%;
+ width: 100%;
+ height: 100%;
+ overflow: auto;
}
.page>header {
- position: relative;
- overflow: hidden;
+ position: relative;
+ overflow: hidden;
}
.back {
- float: left; display : block;
- width: 50px;
- height: 52px;
- background: url(../../images/theme-default/icon-back.png) center center no-repeat;
- cursor: pointer;
- display: block;
+ float: left; display : block;
+ width: 50px;
+ height: 52px;
+ background: url(../../images/theme-default/icon-back.png) center center no-repeat;
+ cursor: pointer;
+ display: block;
}
.step-title {
- color: #333;
- font-size: 18px;
- font-weight: normal;
- padding: 15px 10px;
+ color: #333;
+ font-size: 18px;
+ font-weight: normal;
+ padding: 15px 10px;
}
.step-choose>li>a {
- display: block;
- margin: 0 10px 10px;
- padding: 20px 10px 20px 65px;
- border: 2px solid #ccc;
- background: url(../../images/theme-default/icon-local.png) 15px center no-repeat;
- cursor: pointer;
+ display: block;
+ margin: 0 10px 10px;
+ padding: 20px 10px 20px 65px;
+ border: 2px solid #ccc;
+ background: url(../../images/theme-default/icon-local.png) 15px center no-repeat;
+ cursor: pointer;
}
.step-choose>li>a.local {
- background-image: url(../../images/theme-default/icon-local.png);
+ background-image: url(../../images/theme-default/icon-local.png);
}
.step-choose>li>a.remote {
- background-image: url(../../images/theme-default/icon-remote.png);
+ background-image: url(../../images/theme-default/icon-remote.png);
}
.step-choose>li>a:HOVER {
- border: 2px solid #06C;
+ border: 2px solid #06C;
}
.step-subtitle {
- font-size: 16px;
- height: 48px;
- line-height: 48px;
- color: #06C;
- margin: 0 10px;
- font-weight: bold;
- text-shadow: -1px -1px 1px #eaeaea, 1px 1px 1px #fff;
+ font-size: 16px;
+ height: 48px;
+ line-height: 48px;
+ color: #06C;
+ margin: 0 10px;
+ font-weight: bold;
+ text-shadow: -1px -1px 1px #eaeaea, 1px 1px 1px #fff;
}
.custom-iso-field {
- position: relative;
- padding: 0 10px 10px;
+ position: relative;
+ padding: 0 10px 10px;
}
.custom-iso-field>.input-wrapper {
- margin-right: 110px;
+ margin-right: 110px;
}
.custom-iso-field>.input-wrapper>input.text {
- padding: 10px;
- color: #333;
- font-size: 13px;
- background: #fff;
- -webkit-border-radius: 5px;
- -moz-border-radius: 5px;
- border-radius: 5px;
- box-shadow: 2px 2px 2px #eee inset;
- border-top: 1px solid #bbb;
- border-left: 1px solid #bbb;
- width: 100%;
+ padding: 10px;
+ color: #333;
+ font-size: 13px;
+ background: #fff;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+ box-shadow: 2px 2px 2px #eee inset;
+ border-top: 1px solid #bbb;
+ border-left: 1px solid #bbb;
+ width: 100%;
}
.custom-iso-field>button {
- position: absolute;
- top: -6px;
- right: 8px;
+ position: absolute;
+ top: -6px;
+ right: 8px;
}
.iso-field .button-field {
- padding: 0 20px;
- text-align: right;
+ padding: 0 20px;
+ text-align: right;
}
.check-all {
- display: inline-block;
- position: relative;
- height: 38px;
- line-height: 38px;
- margin: 5px;
- font-size: 13px;
+ display: inline-block;
+ position: relative;
+ height: 38px;
+ line-height: 38px;
+ margin: 5px;
+ font-size: 13px;
}
.check-all input {
- margin: 0 5px 0 0;
+ margin: 0 5px 0 0;
}
.box {
- background: #ffffff;
- background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #e5e5e5));
- background: -webkit-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
- background: -o-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
- background: -ms-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
- background: linear-gradient(to bottom, #ffffff 0%, #e5e5e5 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e5e5e5', GradientType=0);
- border: 1px solid #ccc;
- color: #333;
- text-shadow: -1px -1px 1px #ccc, 1px 1px 1px #fff;
- -webkit-border-radius: 8px;
- -moz-border-radius: 8px;
- border-radius: 8px;
+ background: #ffffff;
+ background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #e5e5e5));
+ background: -webkit-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
+ background: -o-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
+ background: -ms-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
+ background: linear-gradient(to bottom, #ffffff 0%, #e5e5e5 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e5e5e5', GradientType=0);
+ border: 1px solid #ccc;
+ color: #333;
+ text-shadow: -1px -1px 1px #ccc, 1px 1px 1px #fff;
+ -webkit-border-radius: 8px;
+ -moz-border-radius: 8px;
+ border-radius: 8px;
}
.box:HOVER {
- border: 1px solid #aaa;
- -webkit-box-shadow: #bbb 0px 0px 5px;
- box-shadow: #bbb 0px 0px 5px;
+ border: 1px solid #aaa;
+ -webkit-box-shadow: #bbb 0px 0px 5px;
+ box-shadow: #bbb 0px 0px 5px;
}
.box-iso {
- padding: 10px;
- margin: 5px;
- overflow: hidden;
+ padding: 10px;
+ margin: 5px;
+ overflow: hidden;
}
.iso-icon {
- float: left;
- width: 58px;
- height: 58px;
- margin: 0 5px 0 0;
- border: 1px solid #CCCCCC;
- border-radius: 8px;
- background: url(../../images/icon-vm.png) center center no-repeat;
- background-size: 58px;
+ float: left;
+ width: 58px;
+ height: 58px;
+ margin: 0 5px 0 0;
+ border: 1px solid #CCCCCC;
+ border-radius: 8px;
+ background: url(../../images/icon-vm.png) center center no-repeat;
+ background-size: 58px;
}
.iso-icon.centos {
- background-image: url(../../images/icon-centos.png);
+ background-image: url(../../images/icon-centos.png);
}
.iso-icon.debian {
- background-image: url(../../images/icon-debian.png);
+ background-image: url(../../images/icon-debian.png);
}
.iso-icon.fedora {
- background-image: url(../../images/icon-fedora.png);
+ background-image: url(../../images/icon-fedora.png);
}
.iso-icon.opensuse {
- background-image: url(../../images/icon-opensuse.png);
+ background-image: url(../../images/icon-opensuse.png);
}
.iso-icon.ubuntu {
- background-image: url(../../images/icon-ubuntu.png);
+ background-image: url(../../images/icon-ubuntu.png);
}
.list-iso {
- overflow: hidden;
- margin: 5px;
+ overflow: hidden;
+ margin: 5px;
}
.list-iso li {
- float: left;
- width: 320px;
+ float: left;
+ width: 320px;
}
.list-iso>li>label {
- display: block;
- cursor: pointer;
+ display: block;
+ cursor: pointer;
}
.list-iso>li>label>input[type="checkbox"] {
- display: none;
+ display: none;
}
.list-iso>li>label>input[type="checkbox"]:CHECKED+.box-iso {
- border: 1px solid rgb(11, 107, 173);
- -webkit-box-shadow: rgb(11, 107, 173) 0px 0px 4px;
- box-shadow: rgb(11, 107, 173) 0px 0px 4px;
+ border: 1px solid rgb(11, 107, 173);
+ -webkit-box-shadow: rgb(11, 107, 173) 0px 0px 4px;
+ box-shadow: rgb(11, 107, 173) 0px 0px 4px;
}
.iso-title {
- margin: 0;
- display: block;
- position: relative;
- height: 23px;
- line-height: 23px;
- font-size: 14px;
- font-weight: normal;
- max-width: 100%;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
+ margin: 0;
+ display: block;
+ position: relative;
+ height: 23px;
+ line-height: 23px;
+ font-size: 14px;
+ font-weight: normal;
+ max-width: 100%;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
}
.iso-title>label>input {
- display: block;
- position: absolute;
- top: 0;
- right: 2px;
+ display: block;
+ position: absolute;
+ top: 0;
+ right: 2px;
}
.iso-info {
- margin-top: 5px;
- overflow: hidden;
+ margin-top: 5px;
+ overflow: hidden;
}
.iso-info-col {
- float: left;
- width: 50%;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- padding: 0 0 0 5px;
+ float: left;
+ width: 50%;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ padding: 0 0 0 5px;
}
.iso-info-col:FIRST-CHILD {
- padding: 0 5px 0 0;
- border-right: 1px solid #999;
+ padding: 0 5px 0 0;
+ border-right: 1px solid #999;
}
.iso-info-item {
- font-weight: bold;
- color: #999;
- font-size: 11px;
- line-height: 18px;
- max-width: 106px;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
+ font-weight: bold;
+ color: #999;
+ font-size: 11px;
+ line-height: 18px;
+ max-width: 106px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
}
#iso-search {
- margin: 10px 15px;
+ margin: 10px 15px;
}
#iso-search-loading {
- margin: 10px 15px;
- background: #C0C0C0 url(../../images/theme-default/loading.gif) 7px center no-repeat;
- padding: 0 20px 0 26px;
+ margin: 10px 15px;
+ background: #C0C0C0 url(../../images/theme-default/loading.gif) 7px center no-repeat;
+ padding: 0 20px 0 26px;
}
#iso-more-loading {
diff --git a/ui/css/theme-default/template_list.css b/ui/css/theme-default/template_list.css
index 8bf5d4c..bd250a9 100644
--- a/ui/css/theme-default/template_list.css
+++ b/ui/css/theme-default/template_list.css
@@ -19,232 +19,232 @@
* limitations under the License.
*/
.list-template.framework {
- float: left;
- clear: both;
+ float: left;
+ clear: both;
}
.template-box {
- border-radius: 8px 8px 8px 8px;
- box-shadow: none;
- color: #666666;
- float: left;
- height: auto;
- margin: 10px 11px 10px 0;
- padding: 10px;
- width: 308px;
+ border-radius: 8px 8px 8px 8px;
+ box-shadow: none;
+ color: #666666;
+ float: left;
+ height: auto;
+ margin: 10px 11px 10px 0;
+ padding: 10px;
+ width: 308px;
}
.template-title {
- font-size: 16px;
- height: 25px;
- line-height: 25px;
+ font-size: 16px;
+ height: 25px;
+ line-height: 25px;
}
.template-icon {
- border: 1px solid #CCCCCC;
- border-radius: 8px 8px 8px 8px;
- height: 58px;
- margin: 0 10px 10px 0;
- width: 48px;
+ border: 1px solid #CCCCCC;
+ border-radius: 8px 8px 8px 8px;
+ height: 58px;
+ margin: 0 10px 10px 0;
+ width: 48px;
}
.template-icon img {
- width: 58px;
+ width: 58px;
}
.template-text {
- color: #999999;
- float: left;
- font-size: 11px;
- font-weight: bold;
- height: 18px;
- line-height: 18px;
- width: 142px;
- display: table;
+ color: #999999;
+ float: left;
+ font-size: 11px;
+ font-weight: bold;
+ height: 18px;
+ line-height: 18px;
+ width: 142px;
+ display: table;
}
.white-box {
- background: #ffffff;
- background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #e5e5e5));
- background: -webkit-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
- background: -o-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
- background: -ms-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
- background: linear-gradient(to bottom, #ffffff 0%, #e5e5e5 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e5e5e5', GradientType=0);
- border: 1px solid #CCCCCC;
- color: #333333;
- text-shadow: -1px -1px 1px #CCCCCC, 1px 1px 1px #FFFFFF;
+ background: #ffffff;
+ background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #e5e5e5));
+ background: -webkit-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
+ background: -o-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
+ background: -ms-linear-gradient(top, #ffffff 0%, #e5e5e5 100%);
+ background: linear-gradient(to bottom, #ffffff 0%, #e5e5e5 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e5e5e5', GradientType=0);
+ border: 1px solid #CCCCCC;
+ color: #333333;
+ text-shadow: -1px -1px 1px #CCCCCC, 1px 1px 1px #FFFFFF;
}
.row-select {
- -moz-border-bottom-colors: none;
- -moz-border-left-colors: none;
- -moz-border-right-colors: none;
- -moz-border-top-colors: none;
- background: linear-gradient(to bottom, #FFFFFF 0%, #E5E5E5 100%) repeat scroll 0 0 transparent;
- border-color: #999999 #AAAAAA #AAAAAA #999999;
- border-image: none;
- border-radius: 5px 5px 5px 5px;
- border-right: 1px solid #AAAAAA;
- border-style: solid;
- border-width: 1px;
- float: left;
- font-size: 13px;
- height: 42px;
- line-height: 42px;
- margin: 5px 0 0 10px;
- padding-left: 10px;
- text-align: left;
- text-shadow: -1px -1px 1px #AAAAAA, 1px 1px 1px #FFFFFF;
- width: 100px;
+ -moz-border-bottom-colors: none;
+ -moz-border-left-colors: none;
+ -moz-border-right-colors: none;
+ -moz-border-top-colors: none;
+ background: linear-gradient(to bottom, #FFFFFF 0%, #E5E5E5 100%) repeat scroll 0 0 transparent;
+ border-color: #999999 #AAAAAA #AAAAAA #999999;
+ border-image: none;
+ border-radius: 5px 5px 5px 5px;
+ border-right: 1px solid #AAAAAA;
+ border-style: solid;
+ border-width: 1px;
+ float: left;
+ font-size: 13px;
+ height: 42px;
+ line-height: 42px;
+ margin: 5px 0 0 10px;
+ padding-left: 10px;
+ text-align: left;
+ text-shadow: -1px -1px 1px #AAAAAA, 1px 1px 1px #FFFFFF;
+ width: 100px;
}
.bevel3 {
- box-shadow: -2px -2px 2px #EAEAEA, 2px 2px 2px #FFFFFF, 3px 3px 3px white inset, -3px -3px 3px rgba(0, 0, 0, 0.25) inset;
- color: #333333;
+ box-shadow: -2px -2px 2px #EAEAEA, 2px 2px 2px #FFFFFF, 3px 3px 3px white inset, -3px -3px 3px rgba(0, 0, 0, 0.25) inset;
+ color: #333333;
}
.row-drop {
- left: 10px;
- position: relative;
- top: 50px;
+ left: 10px;
+ position: relative;
+ top: 50px;
}
.template-action-hidden {
- visibility: hidden;
+ visibility: hidden;
}
.template-action-show {
- visibility: visible;
- display: block;
+ visibility: visible;
+ display: block;
}
template-hidden {
- display: none;
+ display: none;
}
.select-drop {
- background: none repeat scroll 0 0 #EEEEEE;
- border: 2px solid #096AAD;
- border-radius: 5px 5px 5px 5px;
- box-shadow: 6px 6px 6px;
- height: 147px;
- left: 0;
- position: absolute;
- top: 8px;
- width: 250px;
- z-index: 2147483647;
+ background: none repeat scroll 0 0 #EEEEEE;
+ border: 2px solid #096AAD;
+ border-radius: 5px 5px 5px 5px;
+ box-shadow: 6px 6px 6px;
+ height: 147px;
+ left: 0;
+ position: absolute;
+ top: 8px;
+ width: 250px;
+ z-index: 2147483647;
}
.button-drop {
- background: linear-gradient(to bottom, #EEEEEE 0%, #CCCCCC 10px, #CCCCCC 96%, #A5A5A5 100%) repeat scroll 0 0 transparent;
+ background: linear-gradient(to bottom, #EEEEEE 0%, #CCCCCC 10px, #CCCCCC 96%, #A5A5A5 100%) repeat scroll 0 0 transparent;
}
.action-bevel {
- box-shadow: -1px -1px 1px #CCCCCC, 1px 1px 1px #EEEEEE;
+ box-shadow: -1px -1px 1px #CCCCCC, 1px 1px 1px #EEEEEE;
}
.template-border {
- border: 1px solid rgb(204, 204, 204);
+ border: 1px solid rgb(204, 204, 204);
}
.template-button-position {
- position: relative;
- left: 250px;
- top: 55px;
- z-index: 5555;
+ position: relative;
+ left: 250px;
+ top: 55px;
+ z-index: 5555;
}
.tempate-action-position {
- float: right;
- width: 83px;
- margin: 0;
+ float: right;
+ width: 83px;
+ margin: 0;
}
.template-actiontext-position {
- width: 250px;
- height: 160px;
+ width: 250px;
+ height: 160px;
}
.template-line {
- left: 200px;
+ left: 200px;
}
.template-os-position {
- padding-right: 10px;
- clear: both;
- width: 142px;
- border-right: 1px solid #999;
- float: left;
+ padding-right: 10px;
+ clear: both;
+ width: 142px;
+ border-right: 1px solid #999;
+ float: left;
}
.template-cpu-position {
- border-left: 1px solid #eee;
- padding-left: 10px;
- float: left;
- width: 132px;
+ border-left: 1px solid #eee;
+ padding-left: 10px;
+ float: left;
+ width: 132px;
}
.template-icon-position {
- float: left;
- height: 58px;
- width: 58px;
+ float: left;
+ height: 58px;
+ width: 58px;
}
.template-title-position {
- float: left;
- width: 120px;
+ float: left;
+ width: 120px;
}
.template-results {
- background: linear-gradient(to bottom, #FFFFFF 35px, rgba(255, 255, 255, 0) 100%) repeat scroll 0 0 transparent;
- float: left;
- height: 60px;
- margin-bottom: -22px;
- padding-left: 10px;
- width: 1014px;
+ background: linear-gradient(to bottom, #FFFFFF 35px, rgba(255, 255, 255, 0) 100%) repeat scroll 0 0 transparent;
+ float: left;
+ height: 60px;
+ margin-bottom: -22px;
+ padding-left: 10px;
+ width: 1014px;
}
.select-row-action {
- background: linear-gradient(to bottom, #FFFFFF 0%, #E5E5E5 100%) repeat scroll 0 0 transparent;
- border: 1px solid #CCCCCC;
- border-radius: 5px 5px 5px 5px;
- float: left;
- font-size: 13px;
- height: 38px;
- line-height: 38px;
- margin: 10px 10px 0;
- text-align: center;
- text-shadow: -1px -1px 1px #CCCCCC, 1px 1px 1px #FFFFFF;
- width: 230px;
+ background: linear-gradient(to bottom, #FFFFFF 0%, #E5E5E5 100%) repeat scroll 0 0 transparent;
+ border: 1px solid #CCCCCC;
+ border-radius: 5px 5px 5px 5px;
+ float: left;
+ font-size: 13px;
+ height: 38px;
+ line-height: 38px;
+ margin: 10px 10px 0;
+ text-align: center;
+ text-shadow: -1px -1px 1px #CCCCCC, 1px 1px 1px #FFFFFF;
+ width: 230px;
}
.select-row-delete {
- background: linear-gradient(to bottom, #FF3019 0%, #CF0404 100%) repeat scroll 0 0 transparent;
- border: 1px solid #B10F14;
- border-radius: 5px 5px 5px 5px;
- color: #FFFFFF;
- float: left;
- font-size: 13px;
- font-weight: bold;
- height: 38px;
- line-height: 38px;
- margin: 10px 10px 0;
- text-align: center;
- text-shadow: -1px -1px 1px #9E0505, 1px 1px 1px #FC5D4C;
- width: 230px;
+ background: linear-gradient(to bottom, #FF3019 0%, #CF0404 100%) repeat scroll 0 0 transparent;
+ border: 1px solid #B10F14;
+ border-radius: 5px 5px 5px 5px;
+ color: #FFFFFF;
+ float: left;
+ font-size: 13px;
+ font-weight: bold;
+ height: 38px;
+ line-height: 38px;
+ margin: 10px 10px 0;
+ text-align: center;
+ text-shadow: -1px -1px 1px #9E0505, 1px 1px 1px #FC5D4C;
+ width: 230px;
}
.template-general .title {
- color: black;
- font-size: 16px;
- font-weight: normal;
- height: 25px;
- line-height: 25px;
- text-shadow: -1px -1px 1px #ccc, 1px 1px 1px #fff;
- max-width: 130px;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
+ color: black;
+ font-size: 16px;
+ font-weight: normal;
+ height: 25px;
+ line-height: 25px;
+ text-shadow: -1px -1px 1px #ccc, 1px 1px 1px #fff;
+ max-width: 130px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
}
diff --git a/ui/css/theme-default/tile-check.css b/ui/css/theme-default/tile-check.css
index 0e41010..e30e173 100644
--- a/ui/css/theme-default/tile-check.css
+++ b/ui/css/theme-default/tile-check.css
@@ -19,30 +19,30 @@
* limitations under the License.
*/
.tile-check {
- overflow: hidden;
+ overflow: hidden;
}
.tile-check>li {
- float: left;
- padding: 5px;
+ float: left;
+ padding: 5px;
}
.tile-check>li>label {
- display: block;
- cursor: pointer;
+ display: block;
+ cursor: pointer;
}
.tile-check>li>label>input[type="radio"] {
- display: none;
+ display: none;
}
.tile-check>li>label>.info {
- display: block;
- position: relative;
- overflow: hidden;
- border: 4px solid #ccc;
+ display: block;
+ position: relative;
+ overflow: hidden;
+ border: 4px solid #ccc;
}
.tile-check>li>label>input[type="radio"]:CHECKED+.info {
- border: 4px solid #06C;
+ border: 4px solid #06C;
}
diff --git a/ui/css/theme-default/toolbar.css b/ui/css/theme-default/toolbar.css
index 6bd1037..5f47ed8 100644
--- a/ui/css/theme-default/toolbar.css
+++ b/ui/css/theme-default/toolbar.css
@@ -21,34 +21,34 @@
/* Generated at http://colorzilla.com/gradient-editor/ */
.toolbar {
- position: relative;
- height: 48px;
- padding: 0 5px;
- overflow: hidden;
- background: #e5e5e5;
- background: -moz-linear-gradient(top, #e5e5e5 0%, #c4c4c4 100%);
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #e5e5e5), color-stop(100%, #c4c4c4));
- background: -webkit-linear-gradient(top, #e5e5e5 0%, #c4c4c4 100%);
- background: -o-linear-gradient(top, #e5e5e5 0%, #c4c4c4 100%);
- background: -ms-linear-gradient(top, #e5e5e5 0%, #c4c4c4 100%);
- background: linear-gradient(to bottom, #e5e5e5 0%, #c4c4c4 100%);
- filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#e5e5e5', endColorstr='#c4c4c4', GradientType=0);
- border-bottom: 1px solid #aaa;
+ position: relative;
+ height: 48px;
+ padding: 0 5px;
+ overflow: hidden;
+ background: #e5e5e5;
+ background: -moz-linear-gradient(top, #e5e5e5 0%, #c4c4c4 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #e5e5e5), color-stop(100%, #c4c4c4));
+ background: -webkit-linear-gradient(top, #e5e5e5 0%, #c4c4c4 100%);
+ background: -o-linear-gradient(top, #e5e5e5 0%, #c4c4c4 100%);
+ background: -ms-linear-gradient(top, #e5e5e5 0%, #c4c4c4 100%);
+ background: linear-gradient(to bottom, #e5e5e5 0%, #c4c4c4 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#e5e5e5', endColorstr='#c4c4c4', GradientType=0);
+ border-bottom: 1px solid #aaa;
}
.toolbar .filters {
- float: left;
+ float: left;
}
.toolbar .tools {
- float: right;
+ float: right;
}
.toolbar .divide {
- display: inline-block;
- height: 42px;
- margin: 3px;
- vertical-align: top;
- border-left: 1px solid #999;
- border-right: 1px solid #eee;
+ display: inline-block;
+ height: 42px;
+ margin: 3px;
+ vertical-align: top;
+ border-left: 1px solid #999;
+ border-right: 1px solid #eee;
}
diff --git a/ui/css/theme-default/topbar.css b/ui/css/theme-default/topbar.css
index 42859cc..6a5aec6 100644
--- a/ui/css/theme-default/topbar.css
+++ b/ui/css/theme-default/topbar.css
@@ -21,147 +21,147 @@
/* Generated at http://colorzilla.com/gradient-editor/ */
.topbar {
- height: 48px;
- background: #4a4a4a; /* Old browsers */
- background: -moz-linear-gradient(top, #4a4a4a 0%, #272727 100%); /* FF3.6+ */
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #4a4a4a), color-stop(100%, #272727));
- /* Chrome,Safari4+ */
- background: -webkit-linear-gradient(top, #4a4a4a 0%, #272727 100%); /* Chrome10+,Safari5.1+ */
- background: -o-linear-gradient(top, #4a4a4a 0%, #272727 100%); /* Opera 11.10+ */
- background: -ms-linear-gradient(top, #4a4a4a 0%, #272727 100%); /* IE10+ */
- background: linear-gradient(to bottom, #4a4a4a 0%, #272727 100%); /* W3C */
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#4a4a4a', endColorstr='#272727', GradientType=0);
- border-top: 1px solid #6b6868;
- boder-bottom: 1px solid #151718;
- position: relative;
+ height: 48px;
+ background: #4a4a4a; /* Old browsers */
+ background: -moz-linear-gradient(top, #4a4a4a 0%, #272727 100%); /* FF3.6+ */
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #4a4a4a), color-stop(100%, #272727));
+ /* Chrome,Safari4+ */
+ background: -webkit-linear-gradient(top, #4a4a4a 0%, #272727 100%); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(top, #4a4a4a 0%, #272727 100%); /* Opera 11.10+ */
+ background: -ms-linear-gradient(top, #4a4a4a 0%, #272727 100%); /* IE10+ */
+ background: linear-gradient(to bottom, #4a4a4a 0%, #272727 100%); /* W3C */
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#4a4a4a', endColorstr='#272727', GradientType=0);
+ border-top: 1px solid #6b6868;
+ boder-bottom: 1px solid #151718;
+ position: relative;
}
#logo {
- height: 48px;
- line-height: 48px;
- padding: 0 10px;
- font-size: 20px;
- font-weight: normal;
- color: #eee;
- text-shadow: -1px -1px 1px #000, 1px 1px 1px #555;
- vertical-align: top;
- max-width: 250px;
- overflow: hidden;
+ height: 48px;
+ line-height: 48px;
+ padding: 0 10px;
+ font-size: 20px;
+ font-weight: normal;
+ color: #eee;
+ text-shadow: -1px -1px 1px #000, 1px 1px 1px #555;
+ vertical-align: top;
+ max-width: 250px;
+ overflow: hidden;
}
.nav-top {
- position: absolute;
- right: 0;
- top: 0;
- border-left: 1px solid #000;
- border-right: 1px solid #585858;
+ position: absolute;
+ right: 0;
+ top: 0;
+ border-left: 1px solid #000;
+ border-right: 1px solid #585858;
}
.nav-top>li {
- float: left;
- border-left: 1px solid #585858;
- border-right: 1px solid #000;
+ float: left;
+ border-left: 1px solid #585858;
+ border-right: 1px solid #000;
}
.nav-top .icon {
- display: block;
- position: relative;
- width: 58px;
- height: 48px;
+ display: block;
+ position: relative;
+ width: 58px;
+ height: 48px;
}
.nav-top .icon .count {
- position: absolute;
- top: 3px;
- right: 3px;
- height: 16px;
- line-height: 17px;
- padding: 0 5px;
- -webkit-border-radius: 12px;
- -moz-border-radius: 12px;
- border-radius: 12px;
- font-size: 10px;
- color: #fff;
- text-align: center;
- background: #06C;
- text-shadow: none;
+ position: absolute;
+ top: 3px;
+ right: 3px;
+ height: 16px;
+ line-height: 17px;
+ padding: 0 5px;
+ -webkit-border-radius: 12px;
+ -moz-border-radius: 12px;
+ border-radius: 12px;
+ font-size: 10px;
+ color: #fff;
+ text-align: center;
+ background: #06C;
+ text-shadow: none;
}
.icon.setting {
- background: url(../images/theme-default/icon-setting.png) no-repeat center center;
+ background: url(../images/theme-default/icon-setting.png) no-repeat center center;
}
.icon.tool {
- background: url(../images/theme-default/icon-tool.png) no-repeat center center;
+ background: url(../images/theme-default/icon-tool.png) no-repeat center center;
}
.icon.event {
- background: url(../images/theme-default/icon-event.png) no-repeat center center;
+ background: url(../images/theme-default/icon-event.png) no-repeat center center;
}
.icon.alert {
- background: url(../images/theme-default/icon-alert.png) no-repeat center center;
+ background: url(../images/theme-default/icon-alert.png) no-repeat center center;
}
#user {
- color: white;
- cursor: pointer;
- display: block;
- position: relative;
- height: 48px;
- margin: 0 12px;
+ color: white;
+ cursor: pointer;
+ display: block;
+ position: relative;
+ height: 48px;
+ margin: 0 12px;
}
#user span {
- display: inline-block;
- margin-top: 16px;
+ display: inline-block;
+ margin-top: 16px;
}
#user:hover #user-name {
- border-bottom: 1px solid white;
+ border-bottom: 1px solid white;
}
#user.not-logged-in {
- display: none;
+ display: none;
}
#user-icon {
- background: url("/images/theme-default/user-icon.png") no-repeat left top;
- height: 16px;
- width: 16px;
+ background: url("/images/theme-default/user-icon.png") no-repeat left top;
+ height: 16px;
+ width: 16px;
}
#user-name {
- height: 16px;
- line-height: 16px;
+ height: 16px;
+ line-height: 16px;
}
#user .arrow {
- border: 6px solid transparent;
- border-bottom: none;
- border-top-color: white;
- display: inline-block;
- width: 0;
+ border: 6px solid transparent;
+ border-bottom: none;
+ border-top-color: white;
+ display: inline-block;
+ width: 0;
}
#user .action-panel {
- top: 45px;
- color: black;
- padding: 12px 18px;
- white-space: nowrap;
+ top: 45px;
+ color: black;
+ padding: 12px 18px;
+ white-space: nowrap;
}
#btn-logout {
- color: black;
- font-size: 14px;
+ color: black;
+ font-size: 14px;
}
a#btn-logout:hover {
- text-decoration: underline;
+ text-decoration: underline;
}
@media ( max-width : 640px) {
- #logo {
- display: none;
- }
+ #logo {
+ display: none;
+ }
}
diff --git a/ui/css/theme-default/window.css b/ui/css/theme-default/window.css
index 712bdb7..0a95dce 100644
--- a/ui/css/theme-default/window.css
+++ b/ui/css/theme-default/window.css
@@ -20,98 +20,98 @@
*/
/* Hide the "Build Me" warning */
#buildme {
- display: none;
+ display: none;
}
.bgmask {
- position: fixed;
- left: 0;
- right: 0;
- top: 0;
- bottom: 0;
- background: url(../images/theme-default/bg-mask.png);
- z-index: 100;
- overflow: hidden;
+ position: fixed;
+ left: 0;
+ right: 0;
+ top: 0;
+ bottom: 0;
+ background: url(../images/theme-default/bg-mask.png);
+ z-index: 100;
+ overflow: hidden;
}
.window {
- position: absolute;
- margin: auto;
- left: 0;
- right: 0;
- top: 0;
- bottom: 0;
- box-shadow: 2px 2px 6px #000;
- border: 2px solid #0f71b4;
- -webkit-border-radius: 8px;
- -moz-border-radius: 8px;
- border-radius: 8px;
- background-color: #eee;
- box-sizing: border-box;
- max-width: 100%;
- max-height: 100%;
+ position: absolute;
+ margin: auto;
+ left: 0;
+ right: 0;
+ top: 0;
+ bottom: 0;
+ box-shadow: 2px 2px 6px #000;
+ border: 2px solid #0f71b4;
+ -webkit-border-radius: 8px;
+ -moz-border-radius: 8px;
+ border-radius: 8px;
+ background-color: #eee;
+ box-sizing: border-box;
+ max-width: 100%;
+ max-height: 100%;
}
.window>header {
- position: absolute;
- left: 0;
- right: 0;
- top: 0;
- height: 48px;
- z-index: 100;
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.05);
+ position: absolute;
+ left: 0;
+ right: 0;
+ top: 0;
+ height: 48px;
+ z-index: 100;
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.05);
}
.window footer {
- position: absolute;
- left: 0;
- right: 0;
- bottom: 0;
- height: 56px;
- z-index: 100;
- box-shadow: 0 -1px 1px rgba(0, 0, 0, 0.15);
+ position: absolute;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ height: 56px;
+ z-index: 100;
+ box-shadow: 0 -1px 1px rgba(0, 0, 0, 0.15);
}
.window .content {
- position: absolute;
- left: 0;
- right: 0;
- top: 0;
- bottom: 0;
- overflow: auto;
- margin: 48px 0;
+ position: absolute;
+ left: 0;
+ right: 0;
+ top: 0;
+ bottom: 0;
+ overflow: auto;
+ margin: 48px 0;
}
.window .close {
- position: absolute;
- width: 30px;
- height: 30px;
- top: 7px;
- right: 7px;
- -webkit-border-radius: 30px;
- -moz-border-radius: 30px;
- border-radius: 30px;
- border: 2px solid #ccc;
- color: #ccc;
- font-size: 24px;
- text-align: center;
- line-height: 30px;
- font-weight: bold;
- background: #eee;
- cursor: pointer;
+ position: absolute;
+ width: 30px;
+ height: 30px;
+ top: 7px;
+ right: 7px;
+ -webkit-border-radius: 30px;
+ -moz-border-radius: 30px;
+ border-radius: 30px;
+ border: 2px solid #ccc;
+ color: #ccc;
+ font-size: 24px;
+ text-align: center;
+ line-height: 30px;
+ font-weight: bold;
+ background: #eee;
+ cursor: pointer;
}
.window>header>.close:HOVER {
- border: 2px solid #444;
- color: #444;
+ border: 2px solid #444;
+ color: #444;
}
.window>header>.title {
- font-size: 18px;
- height: 48px;
- line-height: 48px;
- color: #06C;
- margin: 0 10px;
- font-weight: bold;
- text-shadow: -1px -1px 1px #eaeaea, 1px 1px 1px #fff;
+ font-size: 18px;
+ height: 48px;
+ line-height: 48px;
+ color: #06C;
+ margin: 0 10px;
+ font-weight: bold;
+ text-shadow: -1px -1px 1px #eaeaea, 1px 1px 1px #fff;
}
diff --git a/ui/js/dev.main.js b/ui/js/dev.main.js
index 23546e5..8a68989 100644
--- a/ui/js/dev.main.js
+++ b/ui/js/dev.main.js
@@ -232,13 +232,13 @@ function load(data)
{
console.log("load");
$.ajax({
- url: "/vms",
- dataType: "json"
+ url: "/vms",
+ dataType: "json"
}).done(load_vms);
$.ajax({
- url: "/templates",
- dataType: "json"
+ url: "/templates",
+ dataType: "json"
}).done(load_templates);
$.ajax({
diff --git a/ui/js/src/kimchi.template_main.js b/ui/js/src/kimchi.template_main.js
index 932fa70..ffc7306 100644
--- a/ui/js/src/kimchi.template_main.js
+++ b/ui/js/src/kimchi.template_main.js
@@ -10,7 +10,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
- * http://www.apache.org/licenses/LICENSE-2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
diff --git a/ui/pages/guest-add.html.tmpl b/ui/pages/guest-add.html.tmpl
index e91d57d..36a0f35 100644
--- a/ui/pages/guest-add.html.tmpl
+++ b/ui/pages/guest-add.html.tmpl
@@ -28,68 +28,68 @@
<html>
<body>
<div class="window" style="width: 900px;height: 580px;">
- <header>
- <h1 class="title">$_("Create a New Virtual Machine")</h1>
- <div class="close">X</div>
- </header>
- <div class="content">
- <form id="form-vm-add">
- <section class="form-section">
- <h2>1. $_("Virtual Machine Name")</h2>
- <div class="field">
- <p class="text-help">
- $_("The name used to identify the VM. If omitted, a name will be chosen based on the template used.")
- </p>
- <input type="text" class="text" style="width: 300px" name="name">
- </div>
- </section>
- <section class="form-section">
- <h2>2. $_("Template")</h2>
- <div class="field">
- <div class="text-help">
- <div id="prompt-create-template" class="hidden">
- <div>$_("Please create a template first.")</div>
- <a id="btn-create-template" class="btn-normal" href="templates.html">
- <span class="text">$_("Create a Template")</span>
- </a>
- </div>
- <div id="prompt-choose-template" class="hidden">
- <span>$_("Please choose a template.")</span>
- </div>
- </div>
- <ul id="templateTile" class="tile-check tile-template">
- </ul>
- <script type="html/text" id="tmpl-template" class="tmpl-html">
- <li>
- <label>
- <input type="radio" name="template" value="/templates/{name}">
- <div class="info">
- <div class="summary os-icon">
- <img src="{icon}">
- <span class="title">{name}</span>
- </div>
- <ul class="list-info">
- <li><label>$_("OS")</label><span>{os_distro}</span></li>
- <li><label>$_("OS Version")</label><span>{os_version}</span></li>
- <li><label>$_("CPUS")</label><span>{cpus}</span></li>
- <li><label>$_("Memory")</label><span>{memory}M</span></li>
- </ul>
- </div>
- </label>
- </li>
- </script>
- </div>
- </section>
- </form>
- </div>
- <footer>
- <div class="btn-group">
- <button id="vm-doAdd" class="btn-normal" disabled="disabled" href="javascript:void(0);"><span class="text">$_("Create")</span></button>
- </div>
- </footer>
+ <header>
+ <h1 class="title">$_("Create a New Virtual Machine")</h1>
+ <div class="close">X</div>
+ </header>
+ <div class="content">
+ <form id="form-vm-add">
+ <section class="form-section">
+ <h2>1. $_("Virtual Machine Name")</h2>
+ <div class="field">
+ <p class="text-help">
+ $_("The name used to identify the VM. If omitted, a name will be chosen based on the template used.")
+ </p>
+ <input type="text" class="text" style="width: 300px" name="name">
+ </div>
+ </section>
+ <section class="form-section">
+ <h2>2. $_("Template")</h2>
+ <div class="field">
+ <div class="text-help">
+ <div id="prompt-create-template" class="hidden">
+ <div>$_("Please create a template first.")</div>
+ <a id="btn-create-template" class="btn-normal" href="templates.html">
+ <span class="text">$_("Create a Template")</span>
+ </a>
+ </div>
+ <div id="prompt-choose-template" class="hidden">
+ <span>$_("Please choose a template.")</span>
+ </div>
+ </div>
+ <ul id="templateTile" class="tile-check tile-template">
+ </ul>
+ <script type="html/text" id="tmpl-template" class="tmpl-html">
+ <li>
+ <label>
+ <input type="radio" name="template" value="/templates/{name}">
+ <div class="info">
+ <div class="summary os-icon">
+ <img src="{icon}">
+ <span class="title">{name}</span>
+ </div>
+ <ul class="list-info">
+ <li><label>$_("OS")</label><span>{os_distro}</span></li>
+ <li><label>$_("OS Version")</label><span>{os_version}</span></li>
+ <li><label>$_("CPUS")</label><span>{cpus}</span></li>
+ <li><label>$_("Memory")</label><span>{memory}M</span></li>
+ </ul>
+ </div>
+ </label>
+ </li>
+ </script>
+ </div>
+ </section>
+ </form>
+ </div>
+ <footer>
+ <div class="btn-group">
+ <button id="vm-doAdd" class="btn-normal" disabled="disabled" href="javascript:void(0);"><span class="text">$_("Create")</span></button>
+ </div>
+ </footer>
</div>
<script>
- kimchi.guest_add_main();
+ kimchi.guest_add_main();
</script>
</body>
</html>
diff --git a/ui/pages/guest.html.tmpl b/ui/pages/guest.html.tmpl
index 3ae1687..6bd6853 100644
--- a/ui/pages/guest.html.tmpl
+++ b/ui/pages/guest.html.tmpl
@@ -24,44 +24,44 @@
#silent t = gettext.translation($lang.domain, $lang.localedir, languages=$lang.lang)
#silent _ = t.gettext
#silent _t = t.gettext
- <li id="{name}">
- <div class="sortable guest-type">
- <div class="guest-general">
- <h2 class="title" title="{name}">{name}</h2>
- </div>
- </div>
- <div class="sortable guest-cpu">
- <div class="circle" data-value="{stats}"></div>
- </div>
- <div class="sortable guest-network">
- <div class="circle" data-value="{stats}"></div>
+ <li id="{name}">
+ <div class="sortable guest-type">
+ <div class="guest-general">
+ <h2 class="title" title="{name}">{name}</h2>
+ </div>
+ </div>
+ <div class="sortable guest-cpu">
+ <div class="circle" data-value="{stats}"></div>
+ </div>
+ <div class="sortable guest-network">
+ <div class="circle" data-value="{stats}"></div>
<div class="subtitle">KB/s</div>
- </div>
- <div class="sortable guest-storage">
- <div class="circle" data-value="{stats}"></div>
+ </div>
+ <div class="sortable guest-storage">
+ <div class="circle" data-value="{stats}"></div>
<div class="subtitle">KB/s</div>
- </div>
- <div class="sortable guest-tile">
- <div class="tile {state}">
- <img class="imgactive" alt="" src="{tile-src}">
- <img class="imgload" alt="" src="{load-src}">
- </div>
- </div>
- <div class="sortable guest-actions">
- <div class="top">
- <a class="btn vm-reset" data-vmstate="{state}" data-vm="{name}" href="javascript:void(0);" title="$_("Reset")"><span class="icon reset"></span></a>
- <a class="btn vm-start" data-vmstate="{state}" data-vm="{name}" href="javascript:void(0);" title="$_("Start")"><span class="icon power-down"></span></a>
- <a class="btn vm-stop" data-vmstate="{state}" data-vm="{name}" href="javascript:void(0);" title="$_("Stop")"><span class="icon power-up"></span></a>
- </div>
- <div class="bottom">
- <div class="btn dropdown popable vm-action" data-vmstate="{state}" data-graphics="{graphics.type}" data-vm="{name}" style="width: 70px">
- <span class="text">$_("Actions")</span><span class="arrow"></span>
- <div class="popover actionsheet right-side" style="width: 250px">
- <button class="button-big vm-vnc" data-vm="{name}"><span class="text">VNC</span></button>
- <button class="button-big vm-edit" data-vm="{name}"><span class="text">$_("Edit")</span></button>
- <a class="button-big red vm-delete" data-vm="{name}">$_("Delete")</a>
- </div>
- </div>
- </div>
- </div>
- </li>
+ </div>
+ <div class="sortable guest-tile">
+ <div class="tile {state}">
+ <img class="imgactive" alt="" src="{tile-src}">
+ <img class="imgload" alt="" src="{load-src}">
+ </div>
+ </div>
+ <div class="sortable guest-actions">
+ <div class="top">
+ <a class="btn vm-reset" data-vmstate="{state}" data-vm="{name}" href="javascript:void(0);" title="$_("Reset")"><span class="icon reset"></span></a>
+ <a class="btn vm-start" data-vmstate="{state}" data-vm="{name}" href="javascript:void(0);" title="$_("Start")"><span class="icon power-down"></span></a>
+ <a class="btn vm-stop" data-vmstate="{state}" data-vm="{name}" href="javascript:void(0);" title="$_("Stop")"><span class="icon power-up"></span></a>
+ </div>
+ <div class="bottom">
+ <div class="btn dropdown popable vm-action" data-vmstate="{state}" data-graphics="{graphics.type}" data-vm="{name}" style="width: 70px">
+ <span class="text">$_("Actions")</span><span class="arrow"></span>
+ <div class="popover actionsheet right-side" style="width: 250px">
+ <button class="button-big vm-vnc" data-vm="{name}"><span class="text">VNC</span></button>
+ <button class="button-big vm-edit" data-vm="{name}"><span class="text">$_("Edit")</span></button>
+ <a class="button-big red vm-delete" data-vm="{name}">$_("Delete")</a>
+ </div>
+ </div>
+ </div>
+ </div>
+ </li>
diff --git a/ui/pages/kimchi-ui.html.tmpl b/ui/pages/kimchi-ui.html.tmpl
index 5d8f583..8e234e2 100644
--- a/ui/pages/kimchi-ui.html.tmpl
+++ b/ui/pages/kimchi-ui.html.tmpl
@@ -65,28 +65,28 @@
<body>
<div class="container">
<header class="topbar">
- <h1 id="logo"><img alt="Project Kimchi" src="images/theme-default/logo-white.png"></h1>
- <ul class="nav-top">
- <li>
- <div id="user" class="popable">
- <span id="user-icon"></span>
- <span id="user-name"></span>
- <span class="arrow"></span>
- <div class="action-panel popover right-side">
- <a id="btn-logout" href="javascript: void(0);">$_("Log out")</a>
- </div>
- </div>
- </li>
- </ul>
+ <h1 id="logo"><img alt="Project Kimchi" src="images/theme-default/logo-white.png"></h1>
+ <ul class="nav-top">
+ <li>
+ <div id="user" class="popable">
+ <span id="user-icon"></span>
+ <span id="user-name"></span>
+ <span class="arrow"></span>
+ <div class="action-panel popover right-side">
+ <a id="btn-logout" href="javascript: void(0);">$_("Log out")</a>
+ </div>
+ </div>
+ </li>
+ </ul>
</header>
<div class="content">
- <nav class="navbar">
- <ul id="nav-menu" class="nav-menu">
- <li class="menu-arrow"></li>
- </ul>
- </nav>
- <div id="main">
- </div>
+ <nav class="navbar">
+ <ul id="nav-menu" class="nav-menu">
+ <li class="menu-arrow"></li>
+ </ul>
+ </nav>
+ <div id="main">
+ </div>
</div>
</div>
<script src="$href("libs/jquery-1.10.0.min.js")"></script>
diff --git a/ui/pages/report-add.html.tmpl b/ui/pages/report-add.html.tmpl
index c9214ce..2a962d4 100644
--- a/ui/pages/report-add.html.tmpl
+++ b/ui/pages/report-add.html.tmpl
@@ -26,32 +26,32 @@
#silent _t = t.gettext
<!DOCTYPE html>
<div id="report-add-window" class="window">
- <header>
- <h1 class="title">$_("Generate a New Debug Report")</h1>
- <div class="close">X</div>
- </header>
- <div class="content">
- <form id="form-report-add">
- <section class="form-section">
- <h2>
- <label for="report-name-textbox">$_("Report Name")</label>
- </h2>
- <div class="field">
- <span>
- $_("The name used to identify the report. If omitted, a name will be chosen based on current time. Name can contain: letters, digits, \"-\", \"_\", or \".\".")
- </span>
- <input type="text" class="text" id="report-name-textbox" name="name" />
- <span id="report-error-message"></span>
- </div>
- </section>
- </form>
- </div>
- <footer>
- <div class="btn-group">
- <button id="button-report-add" class="btn-normal"><span class="text">$_("Generate")</span></button>
- </div>
- </footer>
+ <header>
+ <h1 class="title">$_("Generate a New Debug Report")</h1>
+ <div class="close">X</div>
+ </header>
+ <div class="content">
+ <form id="form-report-add">
+ <section class="form-section">
+ <h2>
+ <label for="report-name-textbox">$_("Report Name")</label>
+ </h2>
+ <div class="field">
+ <span>
+ $_("The name used to identify the report. If omitted, a name will be chosen based on current time. Name can contain: letters, digits, \"-\", \"_\", or \".\".")
+ </span>
+ <input type="text" class="text" id="report-name-textbox" name="name" />
+ <span id="report-error-message"></span>
+ </div>
+ </section>
+ </form>
+ </div>
+ <footer>
+ <div class="btn-group">
+ <button id="button-report-add" class="btn-normal"><span class="text">$_("Generate")</span></button>
+ </div>
+ </footer>
</div>
<script>
- kimchi.report_add_main();
+ kimchi.report_add_main();
</script>
diff --git a/ui/pages/storagepool-add.html.tmpl b/ui/pages/storagepool-add.html.tmpl
index d7b046d..3ab9ae5 100644
--- a/ui/pages/storagepool-add.html.tmpl
+++ b/ui/pages/storagepool-add.html.tmpl
@@ -27,89 +27,89 @@
<!DOCTYPE html>
<html>
<body>
- <div class="window" style="width: 600px; height: 600px;">
- <header>
- <h1 class="title">$_("Define a New Storage Pool")</h1>
- <div class="close">X</div>
- </header>
- <div class="content">
- <form id="form-pool-add">
- <section class="form-section">
- <h2>1. $_("Storage Pool Name")</h2>
- <div class="field">
- <p class="text-help">
+ <div class="window" style="width: 600px; height: 600px;">
+ <header>
+ <h1 class="title">$_("Define a New Storage Pool")</h1>
+ <div class="close">X</div>
+ </header>
+ <div class="content">
+ <form id="form-pool-add">
+ <section class="form-section">
+ <h2>1. $_("Storage Pool Name")</h2>
+ <div class="field">
+ <p class="text-help">
$_("The name used to identify the storage pools, and it should not be empty.")
</p>
- <input id="poolId" type="text" class="text" style="width: 300px"
- name="name">
- </div>
- </section>
- <section class="form-section">
- <h2>2. $_("Storage Pool Type")</h2>
- <div class="storage-type-wrapper-controls">
- <div class="btn dropdown popable">
- <input id="poolType" name="type" type="hidden" value="dir"/>
- <span class="text" id="pool-type-label"></span><span class="arrow"></span>
- <div class="popover" style="width: 100%">
- <ul class="select-list" id="storagePool-list" data-target="poolType" data-label="pool-type-label">
- </ul>
- </div>
- </div>
+ <input id="poolId" type="text" class="text" style="width: 300px"
+ name="name">
</div>
- </section>
+ </section>
+ <section class="form-section">
+ <h2>2. $_("Storage Pool Type")</h2>
+ <div class="storage-type-wrapper-controls">
+ <div class="btn dropdown popable">
+ <input id="poolType" name="type" type="hidden" value="dir"/>
+ <span class="text" id="pool-type-label"></span><span class="arrow"></span>
+ <div class="popover" style="width: 100%">
+ <ul class="select-list" id="storagePool-list" data-target="poolType" data-label="pool-type-label">
+ </ul>
+ </div>
+ </div>
+ </div>
+ </section>
<div class="path-section">
- <section class="form-section">
- <h2>3. $_("Storage Path")</h2>
- <div class="field">
- <p class="text-help">
+ <section class="form-section">
+ <h2>3. $_("Storage Path")</h2>
+ <div class="field">
+ <p class="text-help">
$_("The path of the Storage Pool. Each Storage Pool must have a unique path.")</p>
- <input id="pathId" type="text" class="text" style="width: 300px">
- </div>
- <div class="clear"></div>
- </section>
+ <input id="pathId" type="text" class="text" style="width: 300px">
+ </div>
+ <div class="clear"></div>
+ </section>
</div>
<div class="nfs-section tmpl-html">
- <section class="form-section">
- <h2>3. $_("NFS server IP")</h2>
- <div class="field">
- <p class="text-help">
+ <section class="form-section">
+ <h2>3. $_("NFS server IP")</h2>
+ <div class="field">
+ <p class="text-help">
$_("NFS server IP or hostname. It should not be empty.")</p>
- <input id="nfsserverId" type="text" class="text"
- style="width: 300px">
- </div>
- </section>
- <section class="form-section">
- <h2>4. $_("NFS Path")</h2>
- <div class="field">
- <p class="text-help">$_("The nfs exported path on nfs server")</p>
- <input id="nfspathId" type="text" class="text"
- style="width: 300px">
+ <input id="nfsserverId" type="text" class="text"
+ style="width: 300px">
+ </div>
+ </section>
+ <section class="form-section">
+ <h2>4. $_("NFS Path")</h2>
+ <div class="field">
+ <p class="text-help">$_("The nfs exported path on nfs server")</p>
+ <input id="nfspathId" type="text" class="text"
+ style="width: 300px">
<input type="hidden" id="localpathId" class="text"
- value="none">
- </div>
- <div class="clear"></div>
- </section>
- </div>
- <div class="logical-section tmpl-html">
- <section class="form-section storageType">
- <h2>3. $_("Device Path")</h2>
- <div class="host-partition"></div>
- </section>
- </div>
- </form>
- </div>
- <footer>
- <div class="btn-group">
- <button id="pool-doAdd" class="btn-normal">
- <span class="text">$_("Create")</span>
- </button>
- </div>
- </footer>
- </div>
- <script>
+ value="none">
+ </div>
+ <div class="clear"></div>
+ </section>
+ </div>
+ <div class="logical-section tmpl-html">
+ <section class="form-section storageType">
+ <h2>3. $_("Device Path")</h2>
+ <div class="host-partition"></div>
+ </section>
+ </div>
+ </form>
+ </div>
+ <footer>
+ <div class="btn-group">
+ <button id="pool-doAdd" class="btn-normal">
+ <span class="text">$_("Create")</span>
+ </button>
+ </div>
+ </footer>
+ </div>
+ <script>
kimchi.storagepool_add_main();
</script>
- <script id="partitionTmpl" type="html/text">
+ <script id="partitionTmpl" type="html/text">
<div>
<input type="checkbox" value="{path}" name="devices">
<label>{path}</label>
diff --git a/ui/pages/tabs/guests.html.tmpl b/ui/pages/tabs/guests.html.tmpl
index 36da9f1..d73eb39 100644
--- a/ui/pages/tabs/guests.html.tmpl
+++ b/ui/pages/tabs/guests.html.tmpl
@@ -30,29 +30,29 @@
<html>
<body>
<div id="guests-root-container">
- <div class="toolbar">
- <div class="tools">
- <a id="vm-add" class="btn-tool" href="javascript:void(0);"><span class="icon add">+</span></a>
- </div>
- </div>
- <div id="guestListField" style="display: none;">
- <ul class="list-title">
- <li class="guest-type">$_("Name")</li>
- <li class="guest-cpu">$_("CPU")</li>
- <li class="guest-network">$_("Network I/O")</li>
- <li class="guest-storage">$_("Disk I/O")</li>
- <li class="guest-tile">$_("Livetile")</li>
- <li class="guest-actions">$_("Actions")</li>
- </ul>
- <ul id="guestList" class="list-vm">
- </ul>
- </div>
- <div id="noGuests" class="list-no-result" style="display: none;">
- $_("No guests found.")
- </div>
+ <div class="toolbar">
+ <div class="tools">
+ <a id="vm-add" class="btn-tool" href="javascript:void(0);"><span class="icon add">+</span></a>
+ </div>
+ </div>
+ <div id="guestListField" style="display: none;">
+ <ul class="list-title">
+ <li class="guest-type">$_("Name")</li>
+ <li class="guest-cpu">$_("CPU")</li>
+ <li class="guest-network">$_("Network I/O")</li>
+ <li class="guest-storage">$_("Disk I/O")</li>
+ <li class="guest-tile">$_("Livetile")</li>
+ <li class="guest-actions">$_("Actions")</li>
+ </ul>
+ <ul id="guestList" class="list-vm">
+ </ul>
+ </div>
+ <div id="noGuests" class="list-no-result" style="display: none;">
+ $_("No guests found.")
+ </div>
</div>
<script>
- kimchi.guest_main();
+ kimchi.guest_main();
</script>
</body>
</html>
diff --git a/ui/pages/tabs/host.html.tmpl b/ui/pages/tabs/host.html.tmpl
index 01c817f..aa4ecfb 100644
--- a/ui/pages/tabs/host.html.tmpl
+++ b/ui/pages/tabs/host.html.tmpl
@@ -26,121 +26,121 @@
#silent _ = t.gettext
#silent _t = t.gettext
<div id="host-root-container">
- <div class="toolbar">
- <div class="tools">
- </div>
- </div>
- <div id="host-content-container"></div>
+ <div class="toolbar">
+ <div class="tools">
+ </div>
+ </div>
+ <div id="host-content-container"></div>
</div>
<script id="host-tmpl" type="kimchi/template">
- <div class="host-panel">
- <div class="logo-container">
- <div class="logo" style="background-image: url({logo});"></div>
- </div>
- <div id="host-info-container" class="info-container">
- <h2 class="hostname">{hostname}</h2>
- <div class="action-panel">
- <button id="host-button-shutdown" class="btn-normal stop">
- <div class="button-icon action-icon-stop"></div>
- $_("Shut down")
- </button>
- <button id="host-button-restart" class="btn-normal restart">
- <div class="button-icon action-icon-restart"></div>
- $_("Restart")
- </button>
- <button class="btn-normal connect" disabled="disabled">
- <div class="button-icon action-icon-connect"></div>
- $_("Connect")
- </button>
- </div>
- <div class="host-section">
- <h3 class="section-header"
- aria-expanded="false"
- aria-controls="content-sys-info">
- $_("Basic Information")
- </h3>
- <div id="content-sys-info" class="section-content">
- <div class="section-row">
- <div class="section-label">$_("OS Distro")</div>
- <div class="section-value">{os_distro}</div>
- </div>
- <div class="section-row">
- <div class="section-label">$_("OS Version")</div>
- <div class="section-value">{os_version}</div>
- </div>
- <div class="section-row">
- <div class="section-label">$_("OS Code Name")</div>
- <div class="section-value">{os_codename}</div>
- </div>
- <div class="section-row">
- <div class="section-label">$_("Processor")</div>
- <div class="section-value">{cpu}</div>
- </div>
- <div class="section-row">
- <div class="section-label">$_("Memory")</div>
- <div class="section-value">{memory}</div>
- </div>
- </div>
- </div>
- <div class="host-section">
- <h3 class="section-header"
- aria-controls="content-sys-statistics">
- $_("System Statistics")
- </h3>
- <div id="content-sys-statistics" class="section-content">
- <div class="section-row">
- <div class="section-label"></div>
- <div class="section-value">
- <input id="keep-monitoring-checkbox" type="checkbox" value="" />
- <label for="keep-monitoring-checkbox">$_("Collecting data after leaving this page")</label>
- </div>
- </div>
+ <div class="host-panel">
+ <div class="logo-container">
+ <div class="logo" style="background-image: url({logo});"></div>
+ </div>
+ <div id="host-info-container" class="info-container">
+ <h2 class="hostname">{hostname}</h2>
+ <div class="action-panel">
+ <button id="host-button-shutdown" class="btn-normal stop">
+ <div class="button-icon action-icon-stop"></div>
+ $_("Shut down")
+ </button>
+ <button id="host-button-restart" class="btn-normal restart">
+ <div class="button-icon action-icon-restart"></div>
+ $_("Restart")
+ </button>
+ <button class="btn-normal connect" disabled="disabled">
+ <div class="button-icon action-icon-connect"></div>
+ $_("Connect")
+ </button>
+ </div>
+ <div class="host-section">
+ <h3 class="section-header"
+ aria-expanded="false"
+ aria-controls="content-sys-info">
+ $_("Basic Information")
+ </h3>
+ <div id="content-sys-info" class="section-content">
+ <div class="section-row">
+ <div class="section-label">$_("OS Distro")</div>
+ <div class="section-value">{os_distro}</div>
+ </div>
+ <div class="section-row">
+ <div class="section-label">$_("OS Version")</div>
+ <div class="section-value">{os_version}</div>
+ </div>
+ <div class="section-row">
+ <div class="section-label">$_("OS Code Name")</div>
+ <div class="section-value">{os_codename}</div>
+ </div>
+ <div class="section-row">
+ <div class="section-label">$_("Processor")</div>
+ <div class="section-value">{cpu}</div>
+ </div>
+ <div class="section-row">
+ <div class="section-label">$_("Memory")</div>
+ <div class="section-value">{memory}</div>
+ </div>
+ </div>
+ </div>
+ <div class="host-section">
+ <h3 class="section-header"
+ aria-controls="content-sys-statistics">
+ $_("System Statistics")
+ </h3>
+ <div id="content-sys-statistics" class="section-content">
+ <div class="section-row">
+ <div class="section-label"></div>
+ <div class="section-value">
+ <input id="keep-monitoring-checkbox" type="checkbox" value="" />
+ <label for="keep-monitoring-checkbox">$_("Collecting data after leaving this page")</label>
+ </div>
+ </div>
- <div class="section-row">
- <div class="section-label">$_("CPU")</div>
- <div class="section-value">
- <div id="container-chart-cpu" class="inline-block"></div>
- </div>
- </div>
- <div class="section-row">
- <div class="section-label">$_("Memory")</div>
- <div class="section-value">
- <div id="container-chart-memory" class="inline-block"></div>
- </div>
- </div>
- <div class="section-row">
- <div class="section-label">$_("Disk I/O")</div>
- <div class="section-value">
- <div id="container-chart-disk-io" class="inline-block"></div>
- </div>
- </div>
- <div class="section-row">
- <div class="section-label">$_("Network I/O")</div>
- <div class="section-value">
- <div id="container-chart-network-io" class="inline-block"></div>
- </div>
- </div>
- </div>
- </div>
- <div id="debug-report-section" class="host-section hidden">
- <h3 class="section-header"
- aria-controls="content-sys-reports">
- $_("Debug Reports")
- </h3>
- <div id="content-sys-reports" class="section-content">
- <div class="section-row">
- <div class="section-label"></div>
- <div class="section-value">
- <div id="available-reports-grid-container"></div>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
+ <div class="section-row">
+ <div class="section-label">$_("CPU")</div>
+ <div class="section-value">
+ <div id="container-chart-cpu" class="inline-block"></div>
+ </div>
+ </div>
+ <div class="section-row">
+ <div class="section-label">$_("Memory")</div>
+ <div class="section-value">
+ <div id="container-chart-memory" class="inline-block"></div>
+ </div>
+ </div>
+ <div class="section-row">
+ <div class="section-label">$_("Disk I/O")</div>
+ <div class="section-value">
+ <div id="container-chart-disk-io" class="inline-block"></div>
+ </div>
+ </div>
+ <div class="section-row">
+ <div class="section-label">$_("Network I/O")</div>
+ <div class="section-value">
+ <div id="container-chart-network-io" class="inline-block"></div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div id="debug-report-section" class="host-section hidden">
+ <h3 class="section-header"
+ aria-controls="content-sys-reports">
+ $_("Debug Reports")
+ </h3>
+ <div id="content-sys-reports" class="section-content">
+ <div class="section-row">
+ <div class="section-label"></div>
+ <div class="section-value">
+ <div id="available-reports-grid-container"></div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
</script>
<script type="text/javascript">
- kimchi.host_main();
+ kimchi.host_main();
</script>
diff --git a/ui/pages/template-edit.html.tmpl b/ui/pages/template-edit.html.tmpl
index ea21875..fe7314d 100644
--- a/ui/pages/template-edit.html.tmpl
+++ b/ui/pages/template-edit.html.tmpl
@@ -27,97 +27,97 @@
#silent _t = t.gettext
<div id="template-edit-window" class="window">
- <header>
- <h1 class="title">$_("Edit Template")</h1>
- <div class="close">X</div>
- </header>
- <div class="content">
- <form id="form-template-edit">
- <input type="hidden" id="template-name" name="templateName" />
- <fieldset class="template-edit-fieldset">
- <div>
- <div class="template-edit-wrapper-label">
- <label for="template-edit-id-textbox">$_("Name")</label>
- </div>
- <div class="template-edit-wrapper-controls">
- <input id="template-edit-id-textbox" name="name" type="text" />
- </div>
- </div>
- <div>
- <div class="template-edit-wrapper-label">
- <label for="template-edit-vendor-textbox">$_("Vendor")</label>
- </div>
- <div class="template-edit-wrapper-controls">
- <input id="template-edit-vendor-textbox" name="os_distro" type="text" disabled="disabled" />
- </div>
- </div>
- <div>
- <div class="template-edit-wrapper-label">
- <label for="template-edit-version-textbox">$_("Version")</label>
- </div>
- <div class="template-edit-wrapper-controls">
- <input id="template-edit-version-textbox" name="os_version" type="text" disabled="disabled" />
- </div>
- </div>
- <div>
- <div class="template-edit-wrapper-label">
- <label for="template-edit-cpu-textbox">$_("CPU Number")</label>
- </div>
- <div class="template-edit-wrapper-controls">
- <input id="template-edit-cpu-textbox" name="cpus" type="text" />
- </div>
- </div>
- <div>
- <div class="template-edit-wrapper-label">
- <label for="template-edit-memory-textbox">$_("Memory")</label>
- </div>
- <div class="template-edit-wrapper-controls">
- <input id="template-edit-memory-textbox" name="memory" type="text" />
- </div>
- </div>
- </fieldset>
- <fieldset class="template-edit-fieldset">
- <div>
- <div class="template-edit-wrapper-label">
- <label>$_("Disk (GB)")</label>
- </div>
- <div class="template-edit-wrapper-controls">
- <input id="template-edit-version-textbox" name="disks" type="text" />
- </div>
- </div>
- <div>
- <div class="template-edit-wrapper-label">
- <label>$_("CDROM")</label>
- </div>
- <div class="template-edit-wrapper-controls">
- <input id="template-edit-version-textbox" name="cdrom" type="text" disabled="disabled"/>
- </div>
- </div>
- <div>
- <div class="template-edit-wrapper-label">
- <label>$_("Storage Pool")</label>
- </div>
- <div class="template-edit-wrapper-controls">
- <div class="btn dropdown popable">
- <input id="template-edit-storagePool" name="storagepool" type="hidden" />
- <span class="text" id="template-edit-storage-label"></span><span class="arrow"></span>
- <div class="popover" style="width: 100%">
- <ul class="select-list" id="template-edit-storagePool-list" data-target="template-edit-storagePool" data-label="template-edit-storage-label">
- </ul>
- </div>
- </div>
- </div>
- </div>
- </fieldset>
- </form>
- </div>
- <footer>
- <div class="btn-group">
- <a id="tmpl-edit-button-cancel" class="btn-normal" href="javascript:void(0);"><span class="text">$_("Cancel")</span></a>
- <a id="tmpl-edit-button-save" class="btn-normal" href="javascript:void(0);"><span class="text">$_("Save")</span></a>
- </div>
- </footer>
+ <header>
+ <h1 class="title">$_("Edit Template")</h1>
+ <div class="close">X</div>
+ </header>
+ <div class="content">
+ <form id="form-template-edit">
+ <input type="hidden" id="template-name" name="templateName" />
+ <fieldset class="template-edit-fieldset">
+ <div>
+ <div class="template-edit-wrapper-label">
+ <label for="template-edit-id-textbox">$_("Name")</label>
+ </div>
+ <div class="template-edit-wrapper-controls">
+ <input id="template-edit-id-textbox" name="name" type="text" />
+ </div>
+ </div>
+ <div>
+ <div class="template-edit-wrapper-label">
+ <label for="template-edit-vendor-textbox">$_("Vendor")</label>
+ </div>
+ <div class="template-edit-wrapper-controls">
+ <input id="template-edit-vendor-textbox" name="os_distro" type="text" disabled="disabled" />
+ </div>
+ </div>
+ <div>
+ <div class="template-edit-wrapper-label">
+ <label for="template-edit-version-textbox">$_("Version")</label>
+ </div>
+ <div class="template-edit-wrapper-controls">
+ <input id="template-edit-version-textbox" name="os_version" type="text" disabled="disabled" />
+ </div>
+ </div>
+ <div>
+ <div class="template-edit-wrapper-label">
+ <label for="template-edit-cpu-textbox">$_("CPU Number")</label>
+ </div>
+ <div class="template-edit-wrapper-controls">
+ <input id="template-edit-cpu-textbox" name="cpus" type="text" />
+ </div>
+ </div>
+ <div>
+ <div class="template-edit-wrapper-label">
+ <label for="template-edit-memory-textbox">$_("Memory")</label>
+ </div>
+ <div class="template-edit-wrapper-controls">
+ <input id="template-edit-memory-textbox" name="memory" type="text" />
+ </div>
+ </div>
+ </fieldset>
+ <fieldset class="template-edit-fieldset">
+ <div>
+ <div class="template-edit-wrapper-label">
+ <label>$_("Disk (GB)")</label>
+ </div>
+ <div class="template-edit-wrapper-controls">
+ <input id="template-edit-version-textbox" name="disks" type="text" />
+ </div>
+ </div>
+ <div>
+ <div class="template-edit-wrapper-label">
+ <label>$_("CDROM")</label>
+ </div>
+ <div class="template-edit-wrapper-controls">
+ <input id="template-edit-version-textbox" name="cdrom" type="text" disabled="disabled"/>
+ </div>
+ </div>
+ <div>
+ <div class="template-edit-wrapper-label">
+ <label>$_("Storage Pool")</label>
+ </div>
+ <div class="template-edit-wrapper-controls">
+ <div class="btn dropdown popable">
+ <input id="template-edit-storagePool" name="storagepool" type="hidden" />
+ <span class="text" id="template-edit-storage-label"></span><span class="arrow"></span>
+ <div class="popover" style="width: 100%">
+ <ul class="select-list" id="template-edit-storagePool-list" data-target="template-edit-storagePool" data-label="template-edit-storage-label">
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+ </fieldset>
+ </form>
+ </div>
+ <footer>
+ <div class="btn-group">
+ <a id="tmpl-edit-button-cancel" class="btn-normal" href="javascript:void(0);"><span class="text">$_("Cancel")</span></a>
+ <a id="tmpl-edit-button-save" class="btn-normal" href="javascript:void(0);"><span class="text">$_("Save")</span></a>
+ </div>
+ </footer>
</div>
<script>
- kimchi.template_edit_main();
+ kimchi.template_edit_main();
</script>
--
1.7.10.4
11 years
Re: [Kimchi-devel] [PATCH] Replace tab to 4 spaces
by Crístian Viana
Reviewed-by: Crístian Viana <vianac(a)linux.vnet.ibm.com>
On 20-12-2013 11:42, Aline Manera wrote:
>
>
> From: Aline Manera <alinefm(a)br.ibm.com>
>
> All py, css, js, tmpl and json files created by us must use 4 space for
> indentation.
> Imported files must keep as they are (such as those for jquery, novnc)
>
> This patch was generated by the following command:
>
> find . -name \*.py -o -name \*.json -o -name \*.css -o -name \*.js -o \
> -name \*.tmpl | xargs -I @ sed -i s/\\t/" "/g @
>
> Then imported files had changes reverted.
>
> Signed-off-by: Aline Manera <alinefm(a)br.ibm.com>
11 years
[PATCH] Issue #290: correct the log usage
by shaohef@linux.vnet.ibm.com
From: ShaoHe Feng <shaohef(a)linux.vnet.ibm.com>
It is recommended that the log message should use comma.
Arguments should be separated by comma.
and they should not be in a tuple.
Before this patch:
Kimchi throws an exception as follow:
TypeError: not enough arguments for format string
Logged from file disks.py, line 117
After use the log correctly:
Kimchi log works well:
Error getting partition info for 35000c5002eaa8392p2: Error executing
lsblk: lsblk: dm-2: unknown device name
Signed-off-by: ShaoHe Feng <shaohef(a)linux.vnet.ibm.com>
---
src/kimchi/disks.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/kimchi/disks.py b/src/kimchi/disks.py
index 991bb4a..a054961 100644
--- a/src/kimchi/disks.py
+++ b/src/kimchi/disks.py
@@ -114,7 +114,7 @@ def get_partition_details(name):
dev = _get_lsblk_devs(keys, [dev_path])[0]
except OperationFailed as e:
kimchi_log.error(
- "Error getting partition info for %s: %s", (name, e))
+ "Error getting partition info for %s: %s", name, e)
return {}
if dev['mountpoint']:
--
1.7.11.7
11 years
[project-kimchi][PATCHv2] screenshot: fix problem on Power of truncated picture
by lvroyce@linux.vnet.ibm.com
From: Royce Lv <lvroyce(a)linux.vnet.ibm.com>
PIL lib will report error because of picture information inconsistency,
this error may because of qemu screenshot generation,
work around this problem by load this image in advance
to prevent it raise error in thumbnail generation.
REF:
http://stackoverflow.com/questions/12984426/ \
python-pil-ioerror-image-file-truncated-with-big-images
Signed-off-by: Royce Lv <lvroyce(a)linux.vnet.ibm.com>
---
src/kimchi/screenshot.py | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/src/kimchi/screenshot.py b/src/kimchi/screenshot.py
index b17a3ce..5cfea96 100644
--- a/src/kimchi/screenshot.py
+++ b/src/kimchi/screenshot.py
@@ -174,6 +174,12 @@ class VMScreenshot(object):
self._create_black_image(thumbnail)
else:
im = Image.open(thumbnail)
+ try:
+ # Prevent Image lib from lazy load,
+ # work around pic truncate validation in thumbnail generation
+ im.load()
+ except Exception as e:
+ kimchi_log.warning("Image load with warning: %s." % e)
im.thumbnail(self.THUMBNAIL_SIZE)
im.save(thumbnail, "PNG")
--
1.8.1.2
11 years
[project-kimchi][PATCHv4] Return source information for storage pool
by lvroyce@linux.vnet.ibm.com
From: Royce Lv <lvroyce(a)linux.vnet.ibm.com>
v1>v4, Delete logical pool source because UI just care VG name.
Add update controller.
For netfs storage pool, remote export path and addr will make more
sense than local mount point.
Report storage source information in pool info.
Signed-off-by: Royce Lv <lvroyce(a)linux.vnet.ibm.com>
---
docs/API.md | 3 +++
src/kimchi/controller.py | 1 +
src/kimchi/mockmodel.py | 1 +
src/kimchi/model.py | 16 ++++++++++++++++
tests/test_rest.py | 1 +
5 files changed, 22 insertions(+)
diff --git a/docs/API.md b/docs/API.md
index 74bc1b5..9edc551 100644
--- a/docs/API.md
+++ b/docs/API.md
@@ -215,6 +215,9 @@ Represents a snapshot of the Virtual Machine's primary monitor.
* nr_volumes: The number of storage volumes for active pools, 0 for inactive pools
* autostart: Whether the storage pool will be enabled
automatically when the system boots
+ * source: Source of the storage pool,
+ * addr: mount address of this storage pool(for 'netfs' pool)
+ * path: export path of this storage pool(for 'netfs' pool)
* **PUT**: Set whether the Storage Pool should be enabled automatically when the
system boots
* autostart: Toggle the autostart flag of the VM
diff --git a/src/kimchi/controller.py b/src/kimchi/controller.py
index 3b27c27..2940278 100644
--- a/src/kimchi/controller.py
+++ b/src/kimchi/controller.py
@@ -533,6 +533,7 @@ class StoragePool(Resource):
'allocated': self.info['allocated'],
'available': self.info['available'],
'path': self.info['path'],
+ 'source': self.info['source'],
'type': self.info['type'],
'nr_volumes': self.info['nr_volumes'],
'autostart': self.info['autostart']}
diff --git a/src/kimchi/mockmodel.py b/src/kimchi/mockmodel.py
index 4839d4c..348127a 100644
--- a/src/kimchi/mockmodel.py
+++ b/src/kimchi/mockmodel.py
@@ -639,6 +639,7 @@ class MockStoragePool(object):
'allocated': 512 << 20,
'available': 512 << 20,
'path': '/var/lib/libvirt/images',
+ 'source': {},
'type': 'dir',
'nr_volumes': 0,
'autostart': 0}
diff --git a/src/kimchi/model.py b/src/kimchi/model.py
index 73c18ac..3bc5d6d 100644
--- a/src/kimchi/model.py
+++ b/src/kimchi/model.py
@@ -78,6 +78,9 @@ GUESTS_STATS_INTERVAL = 5
HOST_STATS_INTERVAL = 1
VM_STATIC_UPDATE_PARAMS = {'name': './name'}
VM_LIVE_UPDATE_PARAMS = {}
+STORAGE_SOURCES = {'netfs': {'addr': '/pool/source/host/@name',
+ 'path': '/pool/source/dir/@path'}}
+
def _uri_to_name(collection, uri):
expr = '/%s/(.*?)/?$' % collection
@@ -1019,6 +1022,17 @@ class Model(object):
raise OperationFailed(e.get_error_message())
return name
+ def _get_storage_source(self, pool_type, pool_xml):
+ source = {}
+ if pool_type not in STORAGE_SOURCES:
+ return source
+
+ for key, val in STORAGE_SOURCES[pool_type].items():
+ res = xmlutils.xpath_get_text(pool_xml, val)
+ source[key] = res[0] if len(res) == 1 else res
+
+ return source
+
def storagepool_lookup(self, name):
pool = self._get_storagepool(name)
info = pool.info()
@@ -1027,8 +1041,10 @@ class Model(object):
xml = pool.XMLDesc(0)
path = xmlutils.xpath_get_text(xml, "/pool/target/path")[0]
pool_type = xmlutils.xpath_get_text(xml, "/pool/@type")[0]
+ source = self._get_storage_source(pool_type, xml)
res = {'state': Model.pool_state_map[info[0]],
'path': path,
+ 'source': source,
'type': pool_type,
'autostart': autostart,
'capacity': info[1],
diff --git a/tests/test_rest.py b/tests/test_rest.py
index 73b5243..f597796 100644
--- a/tests/test_rest.py
+++ b/tests/test_rest.py
@@ -417,6 +417,7 @@ class RestTests(unittest.TestCase):
storagepool = json.loads(resp.read())
self.assertEquals('storagepool-1', storagepool['name'])
self.assertEquals('inactive', storagepool['state'])
+ self.assertIn('source', storagepool)
def test_storagepool_action(self):
# Create a storage pool
--
1.8.1.2
11 years
[project-kimchi] [PATCH 0/4] Use one weksockify instance as all vms' vnc proxy.
by Mark Wu
It resolves two problems:
A fixed port for firewall rule.
Race between client and server. It happens on every first connection after
the host running kimchi reboot.
Mark Wu (4):
Move configuration parsing to config.py
Add a configuration for vnc websocket proxy
Use one weksockify instance as all vms' vnc proxy.
Remove vnc related code in mockmodel
docs/API.md | 1 +
src/kimchi.conf.in | 3 +++
src/kimchi/config.py.in | 24 +++++++++++++++++++++---
src/kimchi/controller.py | 5 ++++-
src/kimchi/mockmodel.py | 19 -------------------
src/kimchi/model.py | 18 +++++-------------
src/kimchi/server.py | 5 +++++
src/kimchi/vnc.py | 42 +++++++++++++++++++++++-------------------
src/kimchid.in | 20 +-------------------
ui/js/src/kimchi.api.js | 14 +++++---------
10 files changed, 68 insertions(+), 83 deletions(-)
--
1.8.3.1
--
project-kimchi mailing list <project-kimchi(a)googlegroups.com>
https://groups.google.com/forum/#!forum/project-kimchi
---
You received this message because you are subscribed to the Google Groups "project-kimchi" group.
To unsubscribe from this group and stop receiving emails from it, send an email to project-kimchi+unsubscribe(a)googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
11 years