moved pythonrewrite branch to trunk
|
@ -532,7 +532,7 @@ if ( ! &check_ssl()) {
|
|||
if ($device eq '') {
|
||||
&debug_msg(DEBUG_INFO, "invalid device: " . $query->param('device'));
|
||||
$pagedata->setValue('Data.Warning', 'InvalidDevice');
|
||||
$pagedata->setValue('Data.Action', 'empty');
|
||||
$pagedata->setValue('Data.Action', 'emptu');
|
||||
} elsif ( ! &check_config()) {
|
||||
$pagedata->setValue('Data.Warning', 'NotInitialized');
|
||||
$pagedata->setValue('Data.Action', 'form_init');
|
276
bin/CryptoBox.py
Executable file
|
@ -0,0 +1,276 @@
|
|||
#!/usr/bin/env python2.4
|
||||
'''
|
||||
This is the web interface for a fileserver managing encrypted filesystems.
|
||||
|
||||
It was originally written in bash/perl. Now a complete rewrite is in
|
||||
progress. So things might be confusing here. Hopefully not for long.
|
||||
:)
|
||||
'''
|
||||
|
||||
# check python version
|
||||
import sys
|
||||
(ver_major, ver_minor, ver_sub, ver_desc, ver_subsub) = sys.version_info
|
||||
if (ver_major < 2) or ((ver_major == 2) and (ver_minor < 4)):
|
||||
sys.stderr.write("You need a python version >= 2.4\nCurrent version is:\n %s\n" % sys.version)
|
||||
sys.exit(1)
|
||||
|
||||
import CryptoBoxContainer
|
||||
from CryptoBoxExceptions import *
|
||||
import re
|
||||
import os
|
||||
import CryptoBoxTools
|
||||
import subprocess
|
||||
|
||||
|
||||
|
||||
class CryptoBox:
|
||||
'''this class rules them all!
|
||||
|
||||
put things like logging, conf and oter stuff in here,
|
||||
that might be used by more classes, it will be passed on to them'''
|
||||
|
||||
VERSION = "0.3~1"
|
||||
|
||||
def __init__(self, config_file=None):
|
||||
import CryptoBoxSettings
|
||||
self.log = self.__getStartupLogger()
|
||||
self.prefs = CryptoBoxSettings.CryptoBoxSettings(config_file)
|
||||
self.__runTests()
|
||||
|
||||
|
||||
def __getStartupLogger(self):
|
||||
import logging
|
||||
'''initialises the logging system
|
||||
|
||||
use it with: 'self.log.[debug|info|warning|error|critical](logmessage)'
|
||||
all classes should get the logging instance during __init__:
|
||||
self.log = logging.getLogger("CryptoBox")
|
||||
|
||||
first we output all warnings/errors to stderr
|
||||
as soon as we opened the config file successfully, we redirect debug output
|
||||
to the configured destination'''
|
||||
## basicConfig(...) needs python >= 2.4
|
||||
try:
|
||||
log_handler = logging.getLogger("CryptoBox")
|
||||
logging.basicConfig(
|
||||
format='%(asctime)s CryptoBox %(levelname)s: %(message)s',
|
||||
stderr=sys.stderr)
|
||||
log_handler.setLevel(logging.ERROR)
|
||||
log_handler.info("loggingsystem is up'n running")
|
||||
## from now on everything can be logged via self.log...
|
||||
except:
|
||||
raise CBEnvironmentError("couldn't initialise the loggingsystem. I give up.")
|
||||
return log_handler
|
||||
|
||||
|
||||
# do some initial checks
|
||||
def __runTests(self):
|
||||
self.__runTestUID()
|
||||
self.__runTestRootPriv()
|
||||
|
||||
|
||||
def __runTestUID(self):
|
||||
if os.geteuid() == 0:
|
||||
raise CBEnvironmentError("you may not run the cryptobox as root")
|
||||
|
||||
|
||||
def __runTestRootPriv(self):
|
||||
"""try to run 'super' with 'CryptoBoxRootActions'"""
|
||||
try:
|
||||
devnull = open(os.devnull, "w")
|
||||
except IOError:
|
||||
raise CBEnvironmentError("could not open %s for writing!" % os.devnull)
|
||||
try:
|
||||
prog_super = self.prefs["Programs"]["super"]
|
||||
except KeyError:
|
||||
raise CBConfigUndefinedError("Programs", "super")
|
||||
try:
|
||||
prog_rootactions = self.prefs["Programs"]["CryptoBoxRootActions"]
|
||||
except KeyError:
|
||||
raise CBConfigUndefinedError("Programs", "CryptoBoxRootActions")
|
||||
try:
|
||||
proc = subprocess.Popen(
|
||||
shell = False,
|
||||
stdout = devnull,
|
||||
stderr = devnull,
|
||||
args = [prog_super, prog_rootactions, "check"])
|
||||
except OSError:
|
||||
raise CBEnvironmentError("failed to execute 'super' (%s)" % self.prefs["Programs"]["super"])
|
||||
proc.wait()
|
||||
if proc.returncode != 0:
|
||||
raise CBEnvironmentError("failed to call CryptoBoxRootActions (%s) via 'super' - maybe you did not add the appropriate line to /etc/super.tab?" % prog_rootactions)
|
||||
|
||||
|
||||
# this method just demonstrates inheritance effects - may be removed
|
||||
def cbx_inheritance_test(self, string="you lucky widow"):
|
||||
self.log.info(string)
|
||||
|
||||
|
||||
# RFC: why should CryptoBoxProps inherit CryptoBox? [l]
|
||||
# RFC: shouldn't we move all useful functions of CryptoBoxProps to CryptoBox? [l]
|
||||
class CryptoBoxProps(CryptoBox):
|
||||
'''Get and set the properties of a CryptoBox
|
||||
|
||||
This class contains all available devices that may be accessed.
|
||||
All properties of the cryptobox can be accessed by this class.
|
||||
'''
|
||||
|
||||
def __init__(self, config_file=None):
|
||||
'''read config and fill class variables'''
|
||||
CryptoBox.__init__(self, config_file)
|
||||
self.reReadContainerList()
|
||||
|
||||
|
||||
def reReadContainerList(self):
|
||||
self.log.debug("rereading container list")
|
||||
self.containers = []
|
||||
for device in CryptoBoxTools.getAvailablePartitions():
|
||||
if self.isDeviceAllowed(device) and not self.isConfigPartition(device):
|
||||
self.containers.append(CryptoBoxContainer.CryptoBoxContainer(device, self))
|
||||
## sort by container name
|
||||
self.containers.sort(cmp = lambda x,y: x.getName() < y.getName() and -1 or 1)
|
||||
|
||||
|
||||
def isConfigPartition(self, device):
|
||||
proc = subprocess.Popen(
|
||||
shell = False,
|
||||
stdout = subprocess.PIPE,
|
||||
args = [
|
||||
self.prefs["Programs"]["blkid"],
|
||||
"-c", os.path.devnull,
|
||||
"-o", "value",
|
||||
"-s", "LABEL",
|
||||
device])
|
||||
(output, error) = proc.communicate()
|
||||
return output.strip() == self.prefs["Main"]["ConfigVolumeLabel"]
|
||||
|
||||
|
||||
def isDeviceAllowed(self, devicename):
|
||||
"check if a device is white-listed for being used as cryptobox containers"
|
||||
import types
|
||||
allowed = self.prefs["Main"]["AllowedDevices"]
|
||||
if type(allowed) == types.StringType: allowed = [allowed]
|
||||
for a_dev in allowed:
|
||||
"remove double dots and so on ..."
|
||||
real_device = os.path.realpath(devicename)
|
||||
if a_dev and re.search('^' + a_dev, real_device): return True
|
||||
return False
|
||||
|
||||
|
||||
def getLogData(self, lines=None, maxSize=None):
|
||||
"""get the most recent log entries of the cryptobox
|
||||
|
||||
the maximum number and size of these entries can be limited by 'lines' and 'maxSize'
|
||||
"""
|
||||
# return nothing if the currently selected log output is not a file
|
||||
try:
|
||||
if self.prefs["Log"]["Destination"].upper() != "FILE": return []
|
||||
log_file = self.prefs["Log"]["Details"]
|
||||
except KeyError:
|
||||
self.log.error("could not evaluate one of the following config settings: [Log]->Destination or [Log]->Details")
|
||||
return []
|
||||
try:
|
||||
fd = open(log_file, "r")
|
||||
if maxSize: fd.seek(-maxSize, 2) # seek relative to the end of the file
|
||||
content = fd.readlines()
|
||||
fd.close()
|
||||
except IOError:
|
||||
self.log.warn("failed to read the log file (%s)" % log_file)
|
||||
return []
|
||||
if lines: content = content[-lines:]
|
||||
content.reverse()
|
||||
return content
|
||||
|
||||
|
||||
def getContainerList(self, filterType=None, filterName=None):
|
||||
"retrieve the list of all containers of this cryptobox"
|
||||
try:
|
||||
result = self.containers[:]
|
||||
if filterType != None:
|
||||
if filterType in range(len(CryptoBoxContainer.Types)):
|
||||
return [e for e in self.containers if e.getType() == filterType]
|
||||
else:
|
||||
self.log.info("invalid filterType (%d)" % filterType)
|
||||
result.clear()
|
||||
if filterName != None:
|
||||
result = [e for e in self.containers if e.getName() == filterName]
|
||||
return result
|
||||
except AttributeError:
|
||||
return []
|
||||
|
||||
|
||||
def getContainer(self, device):
|
||||
"retrieve the container element for this device"
|
||||
all = [e for e in self.getContainerList() if e.device == device]
|
||||
if all:
|
||||
return all[0]
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
def setNameForUUID(self, uuid, name):
|
||||
"assign a name to a uuid in the ContainerNameDatabase"
|
||||
used_uuid = self.getUUIDForName(name)
|
||||
"first remove potential conflicting uuid/name combination"
|
||||
if used_uuid:
|
||||
## remember the container which name was overriden
|
||||
for e in self.containers:
|
||||
if e.getName() == name:
|
||||
forcedRename = e
|
||||
break
|
||||
del self.prefs.nameDB[used_uuid]
|
||||
self.prefs.nameDB[uuid] = name
|
||||
self.prefs.nameDB.write()
|
||||
## rename the container that lost its name (necessary while we use cherrypy)
|
||||
if used_uuid:
|
||||
## this is surely not the best way to regenerate the name
|
||||
dev = e.getDevice()
|
||||
old_index = self.containers.index(e)
|
||||
self.containers.remove(e)
|
||||
self.containers.insert(old_index, CryptoBoxContainer.CryptoBoxContainer(dev,self))
|
||||
## there should be no reason for any failure
|
||||
return True
|
||||
|
||||
|
||||
def getNameForUUID(self, uuid):
|
||||
"get the name belonging to a specified key (usually the UUID of a fs)"
|
||||
try:
|
||||
return self.prefs.nameDB[uuid]
|
||||
except KeyError:
|
||||
return None
|
||||
|
||||
|
||||
def getUUIDForName(self, name):
|
||||
""" get the key belonging to a value in the ContainerNameDatabase
|
||||
this is the reverse action of 'getNameForUUID' """
|
||||
for key in self.prefs.nameDB.keys():
|
||||
if self.prefs.nameDB[key] == name: return key
|
||||
"the uuid was not found"
|
||||
return None
|
||||
|
||||
|
||||
def removeUUID(self, uuid):
|
||||
if uuid in self.prefs.nameDB.keys():
|
||||
del self.prefs.nameDB[uuid]
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
|
||||
def getAvailableLanguages(self):
|
||||
'''reads all files in path LangDir and returns a list of
|
||||
basenames from existing hdf files, that should are all available
|
||||
languages'''
|
||||
languages = [ f.rstrip(".hdf")
|
||||
for f in os.listdir(self.prefs["Locations"]["LangDir"])
|
||||
if f.endswith(".hdf") ]
|
||||
if len(languages) < 1:
|
||||
self.log.error("No .hdf files found! The website won't render properly.")
|
||||
return languages
|
||||
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
cb = CryptoBoxProps()
|
||||
|
607
bin/CryptoBoxContainer.py
Executable file
|
@ -0,0 +1,607 @@
|
|||
#!/usr/bin/env python2.4
|
||||
|
||||
## check python version
|
||||
import sys
|
||||
(ver_major, ver_minor, ver_sub, ver_desc, ver_subsub) = sys.version_info
|
||||
if (ver_major < 2) or ((ver_major == 2) and (ver_minor < 4)):
|
||||
sys.stderr.write("You need a python version >= 2.4\nCurrent version is:\n %s\n" % sys.version)
|
||||
sys.exit(1)
|
||||
|
||||
import subprocess
|
||||
import os
|
||||
import re
|
||||
import logging
|
||||
from CryptoBoxExceptions import *
|
||||
|
||||
"""exceptions:
|
||||
VolumeIsActive
|
||||
NameActivelyUsed
|
||||
InvalidName
|
||||
InvalidPassword
|
||||
InvalidType
|
||||
CreateError
|
||||
MountError
|
||||
ChangePasswordError
|
||||
"""
|
||||
|
||||
class CryptoBoxContainer:
|
||||
|
||||
Types = {
|
||||
"unused":0,
|
||||
"plain":1,
|
||||
"luks":2,
|
||||
"swap":3}
|
||||
|
||||
|
||||
__fsTypes = {
|
||||
"plain":["ext3", "ext2", "vfat", "reiser"],
|
||||
"swap":["swap"]}
|
||||
# TODO: more filesystem types? / check 'reiser'
|
||||
|
||||
__dmDir = "/dev/mapper"
|
||||
|
||||
|
||||
def __init__(self, device, cbox):
|
||||
self.device = device
|
||||
self.cbox = cbox
|
||||
self.log = logging.getLogger("CryptoBox")
|
||||
self.resetObject()
|
||||
|
||||
|
||||
def getName(self):
|
||||
return self.name
|
||||
|
||||
|
||||
def setName(self, new_name):
|
||||
if new_name == self.name: return
|
||||
if self.isMounted():
|
||||
raise CBVolumeIsActive("the container must be inactive during renaming")
|
||||
if not re.search(r'^[a-zA-Z0-9_\.\- ]+$', new_name):
|
||||
raise CBInvalidName("the supplied new name contains illegal characters")
|
||||
"check for active partitions with the same name"
|
||||
prev_name_owner = self.cbox.getContainerList(filterName=new_name)
|
||||
if prev_name_owner:
|
||||
for a in prev_name_owner:
|
||||
if a.isMounted():
|
||||
raise CBNameActivelyUsed("the supplied new name is already in use for an active partition")
|
||||
if not self.cbox.setNameForUUID(self.uuid, new_name):
|
||||
raise CBContainerError("failed to change the volume name for unknown reasons")
|
||||
self.name = new_name
|
||||
|
||||
|
||||
def getDevice(self):
|
||||
return self.device
|
||||
|
||||
|
||||
def getType(self):
|
||||
return self.type
|
||||
|
||||
|
||||
def isMounted(self):
|
||||
return os.path.ismount(self.__getMountPoint())
|
||||
|
||||
|
||||
def getCapacity(self):
|
||||
"""return the current capacity state of the volume
|
||||
|
||||
the volume may not be mounted
|
||||
the result is a tuple of values in megabyte:
|
||||
(size, available, used)
|
||||
"""
|
||||
info = os.statvfs(self.__getMountPoint())
|
||||
return (
|
||||
int(info.f_bsize*info.f_blocks/1024/1024),
|
||||
int(info.f_bsize*info.f_bavail/1024/1024),
|
||||
int(info.f_bsize*(info.f_blocks-info.f_bavail)/1024/1024))
|
||||
|
||||
|
||||
def getSize(self):
|
||||
"""return the size of the block device (_not_ of the filesystem)
|
||||
|
||||
the result is a value in megabyte
|
||||
an error is indicated by "-1"
|
||||
"""
|
||||
import CryptoBoxTools
|
||||
return CryptoBoxTools.getBlockDeviceSize(self.device)
|
||||
|
||||
|
||||
def resetObject(self):
|
||||
""" recheck the information about this container
|
||||
this is especially useful after changing the type via 'create' """
|
||||
self.uuid = self.__getUUID()
|
||||
self.type = self.__getTypeOfPartition()
|
||||
self.name = self.__getNameOfContainer()
|
||||
if self.type == self.Types["luks"]:
|
||||
self.mount = self.__mountLuks
|
||||
self.umount = self.__umountLuks
|
||||
elif self.type == self.Types["plain"]:
|
||||
self.mount = self.__mountPlain
|
||||
self.umount = self.__umountPlain
|
||||
|
||||
|
||||
def create(self, type, password=None):
|
||||
old_name = self.getName()
|
||||
if type == self.Types["luks"]:
|
||||
self.__createLuks(password)
|
||||
elif type == self.Types["plain"]:
|
||||
self.__createPlain()
|
||||
else:
|
||||
raise CBInvalidType("invalid container type (%d) supplied" % (type, ))
|
||||
## no exception was raised during creation -> we can continue
|
||||
## reset the properties (encryption state, ...) of the device
|
||||
self.resetObject()
|
||||
## restore the old name (must be after resetObject)
|
||||
self.setName(old_name)
|
||||
|
||||
|
||||
def changePassword(self, oldpw, newpw):
|
||||
if self.type != self.Types["luks"]:
|
||||
raise CBInvalidType("changing of password is possible only for luks containers")
|
||||
if not oldpw:
|
||||
raise CBInvalidPassword("no old password supplied for password change")
|
||||
if not newpw:
|
||||
raise CBInvalidPassword("no new password supplied for password change")
|
||||
"return if new and old passwords are the same"
|
||||
if oldpw == newpw: return
|
||||
if self.isMounted():
|
||||
raise CBVolumeIsActive("this container is currently active")
|
||||
devnull = None
|
||||
try:
|
||||
devnull = open(os.devnull, "w")
|
||||
except IOError:
|
||||
self.log.warn("Could not open %s" % (os.devnull, ))
|
||||
"remove any potential open luks mapping"
|
||||
self.__umountLuks()
|
||||
"create the luks header"
|
||||
proc = subprocess.Popen(
|
||||
shell = False,
|
||||
stdin = subprocess.PIPE,
|
||||
stdout = subprocess.PIPE,
|
||||
stderr = subprocess.PIPE,
|
||||
args = [
|
||||
self.cbox.prefs["Programs"]["super"],
|
||||
self.cbox.prefs["Programs"]["CryptoBoxRootActions"],
|
||||
"cryptsetup",
|
||||
"luksAddKey",
|
||||
self.device,
|
||||
"--batch-mode"])
|
||||
proc.stdin.write("%s\n%s" % (oldpw, newpw))
|
||||
(output, errout) = proc.communicate()
|
||||
if proc.returncode != 0:
|
||||
errorMsg = "Could not add a new luks key: %s - %s" % (output.strip(), errout.strip(), )
|
||||
self.log.error(errorMsg)
|
||||
raise CBChangePasswordError(errorMsg)
|
||||
## retrieve the key slot we used for unlocking
|
||||
keys_found = re.search(r'key slot (\d{1,3}) unlocked', output).groups()
|
||||
if keys_found:
|
||||
keyslot = int(keys_found[0])
|
||||
else:
|
||||
raise CBChangePasswordError("could not get the old key slot")
|
||||
"remove the old key"
|
||||
proc = subprocess.Popen(
|
||||
shell = False,
|
||||
stdin = None,
|
||||
stdout = devnull,
|
||||
stderr = subprocess.PIPE,
|
||||
args = [
|
||||
self.cbox.prefs["Programs"]["cryptsetup"],
|
||||
"--batch-mode",
|
||||
"luksDelKey",
|
||||
self.device,
|
||||
"%d" % (keyslot, )])
|
||||
proc.wait()
|
||||
if proc.returncode != 0:
|
||||
errorMsg = "Could not remove the old luks key: %s" % (proc.stderr.read().strip(), )
|
||||
self.log.error(errorMsg)
|
||||
raise CBChangePasswordError(errorMsg)
|
||||
|
||||
|
||||
|
||||
" ****************** internal stuff ********************* "
|
||||
|
||||
def __getNameOfContainer(self):
|
||||
"retrieve the name of the container by querying the database"
|
||||
def_name = self.cbox.getNameForUUID(self.uuid)
|
||||
if def_name: return def_name
|
||||
"there is no name defined for this uuid - we will propose a good one"
|
||||
prefix = self.cbox.prefs["Main"]["DefaultVolumePrefix"]
|
||||
unused_found = False
|
||||
counter = 1
|
||||
while not unused_found:
|
||||
guess = prefix + str(counter)
|
||||
if self.cbox.getUUIDForName(guess):
|
||||
counter += 1
|
||||
else:
|
||||
unused_found = True
|
||||
self.cbox.setNameForUUID(self.uuid, guess)
|
||||
return guess
|
||||
|
||||
|
||||
def __getUUID(self):
|
||||
if self.__getTypeOfPartition() == self.Types["luks"]:
|
||||
guess = self.__getLuksUUID()
|
||||
else:
|
||||
guess = self.__getNonLuksUUID()
|
||||
## did we get a valid value?
|
||||
if guess:
|
||||
return guess
|
||||
else:
|
||||
## emergency default value
|
||||
return self.device.replace(os.path.sep, "_")
|
||||
|
||||
|
||||
def __getLuksUUID(self):
|
||||
"""get uuid for luks devices"""
|
||||
proc = subprocess.Popen(
|
||||
shell = False,
|
||||
stdout = subprocess.PIPE,
|
||||
stderr = subprocess.PIPE,
|
||||
args = [self.cbox.prefs["Programs"]["cryptsetup"],
|
||||
"luksUUID",
|
||||
self.device])
|
||||
(stdout, stderr) = proc.communicate()
|
||||
if proc.returncode != 0:
|
||||
self.cbox.log.info("could not retrieve luks uuid (%s): %s", (self.device, stderr.strip()))
|
||||
return None
|
||||
return stdout.strip()
|
||||
|
||||
|
||||
def __getNonLuksUUID(self):
|
||||
"""return UUID for ext2/3 and vfat filesystems"""
|
||||
try:
|
||||
devnull = open(os.devnull, "w")
|
||||
except IOError:
|
||||
self.warn("Could not open %s" % (os.devnull, ))
|
||||
proc = subprocess.Popen(
|
||||
shell=False,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.PIPE,
|
||||
args=[self.cbox.prefs["Programs"]["blkid"],
|
||||
"-s", "UUID",
|
||||
"-o", "value",
|
||||
"-c", os.devnull,
|
||||
"-w", os.devnull,
|
||||
self.device])
|
||||
(stdout, stderr) = proc.communicate()
|
||||
devnull.close()
|
||||
## execution failed?
|
||||
if proc.returncode != 0:
|
||||
self.log.info("retrieving of partition type (%s) via 'blkid' failed: %s - maybe it is encrypted?" % (self.device, stderr.strip()))
|
||||
return None
|
||||
## return output of blkid
|
||||
return stdout.strip()
|
||||
|
||||
|
||||
def __getTypeOfPartition(self):
|
||||
"retrieve the type of the given partition (see CryptoBoxContainer.Types)"
|
||||
if self.__isLuksPartition(): return self.Types["luks"]
|
||||
typeOfPartition = self.__getTypeIdOfPartition()
|
||||
if typeOfPartition in self.__fsTypes["plain"]:
|
||||
return self.Types["plain"]
|
||||
if typeOfPartition in self.__fsTypes["swap"]:
|
||||
return self.Types["swap"]
|
||||
return self.Types["unused"]
|
||||
|
||||
|
||||
def __getTypeIdOfPartition(self):
|
||||
"returns the type of the partition (see 'man blkid')"
|
||||
devnull = None
|
||||
try:
|
||||
devnull = open(os.devnull, "w")
|
||||
except IOError:
|
||||
self.log.warn("Could not open %s" % (os.devnull, ))
|
||||
proc = subprocess.Popen(
|
||||
shell=False,
|
||||
stdin=None,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.PIPE,
|
||||
args=[self.cbox.prefs["Programs"]["blkid"],
|
||||
"-s", "TYPE",
|
||||
"-o", "value",
|
||||
"-c", os.devnull,
|
||||
"-w", os.devnull,
|
||||
self.device])
|
||||
proc.wait()
|
||||
output = proc.stdout.read().strip()
|
||||
if proc.returncode != 0:
|
||||
self.log.warn("retrieving of partition type via 'blkid' failed: %s" % (proc.stderr.read().strip(), ))
|
||||
return None
|
||||
devnull.close()
|
||||
return output
|
||||
|
||||
|
||||
def __isLuksPartition(self):
|
||||
"check if the given device is a luks partition"
|
||||
devnull = None
|
||||
try:
|
||||
devnull = open(os.devnull, "w")
|
||||
except IOError:
|
||||
self.log.warn("Could not open %s" % (os.devnull, ))
|
||||
proc = subprocess.Popen(
|
||||
shell = False,
|
||||
stdin = None,
|
||||
stdout = devnull,
|
||||
stderr = devnull,
|
||||
args = [
|
||||
self.cbox.prefs["Programs"]["cryptsetup"],
|
||||
"--batch-mode",
|
||||
"isLuks",
|
||||
self.device])
|
||||
proc.wait()
|
||||
devnull.close()
|
||||
return proc.returncode == 0
|
||||
|
||||
|
||||
def __getMountPoint(self):
|
||||
"return the name of the mountpoint of this volume"
|
||||
return os.path.join(self.cbox.prefs["Locations"]["MountParentDir"], self.name)
|
||||
|
||||
|
||||
def __mountLuks(self, password):
|
||||
"mount a luks partition"
|
||||
if not password:
|
||||
raise CBInvalidPassword("no password supplied for luksOpen")
|
||||
if self.isMounted(): raise CBVolumeIsActive("this container is already active")
|
||||
self.__umountLuks()
|
||||
try:
|
||||
devnull = open(os.devnull, "w")
|
||||
except IOError:
|
||||
self.log.warn("Could not open %s" % (os.devnull, ))
|
||||
self.__cleanMountDirs()
|
||||
if not os.path.exists(self.__getMountPoint()):
|
||||
os.mkdir(self.__getMountPoint())
|
||||
if not os.path.exists(self.__getMountPoint()):
|
||||
errorMsg = "Could not create mountpoint (%s)" % (self.__getMountPoint(), )
|
||||
self.log.error(errorMsg)
|
||||
raise CBMountError(errorMsg)
|
||||
proc = subprocess.Popen(
|
||||
shell = False,
|
||||
stdin = subprocess.PIPE,
|
||||
stdout = devnull,
|
||||
stderr = subprocess.PIPE,
|
||||
args = [
|
||||
self.cbox.prefs["Programs"]["super"],
|
||||
self.cbox.prefs["Programs"]["CryptoBoxRootActions"],
|
||||
"cryptsetup",
|
||||
"luksOpen",
|
||||
self.device,
|
||||
self.name,
|
||||
"--batch-mode"])
|
||||
proc.stdin.write(password)
|
||||
(output, errout) = proc.communicate()
|
||||
if proc.returncode != 0:
|
||||
errorMsg = "Could not open the luks mapping: %s" % (errout.strip(), )
|
||||
self.log.warn(errorMsg)
|
||||
raise CBMountError(errorMsg)
|
||||
proc = subprocess.Popen(
|
||||
shell = False,
|
||||
stdin = None,
|
||||
stdout = devnull,
|
||||
stderr = subprocess.PIPE,
|
||||
args = [
|
||||
self.cbox.prefs["Programs"]["super"],
|
||||
self.cbox.prefs["Programs"]["CryptoBoxRootActions"],
|
||||
"mount",
|
||||
os.path.join(self.__dmDir, self.name),
|
||||
self.__getMountPoint()])
|
||||
proc.wait()
|
||||
if proc.returncode != 0:
|
||||
errorMsg = "Could not mount the filesystem: %s" % (proc.stderr.read().strip(), )
|
||||
self.log.warn(errorMsg)
|
||||
raise CBMountError(errorMsg)
|
||||
devnull.close()
|
||||
|
||||
|
||||
def __umountLuks(self):
|
||||
"umount a luks partition"
|
||||
devnull = None
|
||||
try:
|
||||
devnull = open(os.devnull, "w")
|
||||
except IOError:
|
||||
self.log.warn("Could not open %s" % (os.devnull, ))
|
||||
if self.isMounted():
|
||||
proc = subprocess.Popen(
|
||||
shell = False,
|
||||
stdin = None,
|
||||
stdout = devnull,
|
||||
stderr = subprocess.PIPE,
|
||||
args = [
|
||||
self.cbox.prefs["Programs"]["super"],
|
||||
self.cbox.prefs["Programs"]["CryptoBoxRootActions"],
|
||||
"umount",
|
||||
self.__getMountPoint()])
|
||||
proc.wait()
|
||||
if proc.returncode != 0:
|
||||
errorMsg = "Could not umount the filesystem: %s" % (proc.stderr.read().strip(), )
|
||||
self.log.warn(errorMsg)
|
||||
raise CBUmountError(errorMsg)
|
||||
if os.path.exists(os.path.join(self.__dmDir, self.name)):
|
||||
proc = subprocess.Popen(
|
||||
shell = False,
|
||||
stdin = None,
|
||||
stdout = devnull,
|
||||
stderr = subprocess.PIPE,
|
||||
args = [
|
||||
self.cbox.prefs["Programs"]["super"],
|
||||
self.cbox.prefs["Programs"]["CryptoBoxRootActions"],
|
||||
"cryptsetup",
|
||||
"luksClose",
|
||||
self.name,
|
||||
"--batch-mode"])
|
||||
proc.wait()
|
||||
if proc.returncode != 0:
|
||||
errorMsg = "Could not remove the luks mapping: %s" % (proc.stderr.read().strip(), )
|
||||
self.log.warn(errorMsg)
|
||||
raise CBUmountError(errorMsg)
|
||||
devnull.close()
|
||||
|
||||
|
||||
def __mountPlain(self):
|
||||
"mount a plaintext partition"
|
||||
if self.isMounted(): raise CBVolumeIsActive("this container is already active")
|
||||
devnull = None
|
||||
try:
|
||||
devnull = open(os.devnull, "w")
|
||||
except IOError:
|
||||
self.log.warn("Could not open %s" % (os.devnull, ))
|
||||
self.__cleanMountDirs()
|
||||
if not os.path.exists(self.__getMountPoint()):
|
||||
os.mkdir(self.__getMountPoint())
|
||||
if not os.path.exists(self.__getMountPoint()):
|
||||
errorMsg = "Could not create mountpoint (%s)" % (self.__getMountPoint(), )
|
||||
self.log.error(errorMsg)
|
||||
raise CBMountError(errorMsg)
|
||||
proc = subprocess.Popen(
|
||||
shell = False,
|
||||
stdin = None,
|
||||
stdout = devnull,
|
||||
stderr = subprocess.PIPE,
|
||||
args = [
|
||||
self.cbox.prefs["Programs"]["super"],
|
||||
self.cbox.prefs["Programs"]["CryptoBoxRootActions"],
|
||||
"mount",
|
||||
self.device,
|
||||
self.__getMountPoint()])
|
||||
proc.wait()
|
||||
if proc.returncode != 0:
|
||||
errorMsg = "Could not mount the filesystem: %s" % (proc.stderr.read().strip(), )
|
||||
self.log.warn(errorMsg)
|
||||
raise CBMountError(errorMsg)
|
||||
devnull.close()
|
||||
|
||||
|
||||
def __umountPlain(self):
|
||||
"umount a plaintext partition"
|
||||
devnull = None
|
||||
try:
|
||||
devnull = open(os.devnull, "w")
|
||||
except IOError:
|
||||
self.log.warn("Could not open %s" % (os.devnull, ))
|
||||
if self.isMounted():
|
||||
proc = subprocess.Popen(
|
||||
shell = False,
|
||||
stdin = None,
|
||||
stdout = devnull,
|
||||
stderr = subprocess.PIPE,
|
||||
args = [
|
||||
self.cbox.prefs["Programs"]["super"],
|
||||
self.cbox.prefs["Programs"]["CryptoBoxRootActions"],
|
||||
"umount",
|
||||
self.__getMountPoint()])
|
||||
proc.wait()
|
||||
if proc.returncode != 0:
|
||||
errorMsg = "Could not umount the filesystem: %s" % (proc.stderr.read().strip(), )
|
||||
self.log.warn(errorMsg)
|
||||
raise CBUmountError(errorMsg)
|
||||
devnull.close()
|
||||
|
||||
|
||||
def __createPlain(self):
|
||||
"make a plaintext partition"
|
||||
if self.isMounted():
|
||||
raise CBVolumeIsActive("deactivate the partition before filesystem initialization")
|
||||
devnull = None
|
||||
try:
|
||||
devnull = open(os.devnull, "w")
|
||||
except IOError:
|
||||
self.log.warn("Could not open %s" % (os.devnull, ))
|
||||
proc = subprocess.Popen(
|
||||
shell = False,
|
||||
stdin = None,
|
||||
stdout = devnull,
|
||||
stderr = subprocess.PIPE,
|
||||
args = [
|
||||
self.cbox.prefs["Programs"]["mkfs-data"],
|
||||
self.device])
|
||||
proc.wait()
|
||||
if proc.returncode != 0:
|
||||
errorMsg = "Could not create the filesystem: %s" % (proc.stderr.read().strip(), )
|
||||
self.log.error(errorMsg)
|
||||
raise CBCreateError(errorMsg)
|
||||
devnull.close()
|
||||
|
||||
|
||||
def __createLuks(self, password):
|
||||
"make a luks partition"
|
||||
if not password:
|
||||
raise CBInvalidPassword("no password supplied for new luks mapping")
|
||||
if self.isMounted():
|
||||
raise CBVolumeIsActive("deactivate the partition before filesystem initialization")
|
||||
devnull = None
|
||||
try:
|
||||
devnull = open(os.devnull, "w")
|
||||
except IOError:
|
||||
self.log.warn("Could not open %s" % (os.devnull, ))
|
||||
"remove any potential open luks mapping"
|
||||
self.__umountLuks()
|
||||
"create the luks header"
|
||||
proc = subprocess.Popen(
|
||||
shell = False,
|
||||
stdin = subprocess.PIPE,
|
||||
stdout = devnull,
|
||||
stderr = subprocess.PIPE,
|
||||
args = [
|
||||
self.cbox.prefs["Programs"]["super"],
|
||||
self.cbox.prefs["Programs"]["CryptoBoxRootActions"],
|
||||
"cryptsetup",
|
||||
"luksFormat",
|
||||
self.device,
|
||||
"--batch-mode",
|
||||
"--cipher", self.cbox.prefs["Main"]["DefaultCipher"],
|
||||
"--iter-time", "2000"])
|
||||
proc.stdin.write(password)
|
||||
(output, errout) = proc.communicate()
|
||||
if proc.returncode != 0:
|
||||
errorMsg = "Could not create the luks header: %s" % (errout.strip(), )
|
||||
self.log.error(errorMsg)
|
||||
raise CBCreateError(errorMsg)
|
||||
"open the luks container for mkfs"
|
||||
proc = subprocess.Popen(
|
||||
shell = False,
|
||||
stdin = subprocess.PIPE,
|
||||
stdout = devnull,
|
||||
stderr = subprocess.PIPE,
|
||||
args = [
|
||||
self.cbox.prefs["Programs"]["super"],
|
||||
self.cbox.prefs["Programs"]["CryptoBoxRootActions"],
|
||||
"cryptsetup",
|
||||
"luksOpen",
|
||||
self.device,
|
||||
self.name,
|
||||
"--batch-mode"])
|
||||
proc.stdin.write(password)
|
||||
(output, errout) = proc.communicate()
|
||||
if proc.returncode != 0:
|
||||
errorMsg = "Could not open the new luks mapping: %s" % (errout.strip(), )
|
||||
self.log.error(errorMsg)
|
||||
raise CBCreateError(errorMsg)
|
||||
"make the filesystem"
|
||||
proc = subprocess.Popen(
|
||||
shell = False,
|
||||
stdin = None,
|
||||
stdout = devnull,
|
||||
stderr = subprocess.PIPE,
|
||||
args = [
|
||||
self.cbox.prefs["Programs"]["mkfs-data"],
|
||||
os.path.join(self.__dmDir, self.name)])
|
||||
proc.wait()
|
||||
"remove the mapping - for every exit status"
|
||||
self.__umountLuks()
|
||||
if proc.returncode != 0:
|
||||
errorMsg = "Could not create the filesystem: %s" % (proc.stderr.read().strip(), )
|
||||
self.log.error(errorMsg)
|
||||
"remove the luks mapping"
|
||||
raise CBCreateError(errorMsg)
|
||||
devnull.close()
|
||||
|
||||
|
||||
def __cleanMountDirs(self):
|
||||
""" remove all unnecessary subdirs of the mount parent directory
|
||||
this should be called for every (u)mount """
|
||||
subdirs = os.listdir(self.cbox.prefs["Locations"]["MountParentDir"])
|
||||
for dir in subdirs:
|
||||
abs_dir = os.path.join(self.cbox.prefs["Locations"]["MountParentDir"], dir)
|
||||
if (not os.path.islink(abs_dir)) and os.path.isdir(abs_dir) and (not os.path.ismount(abs_dir)):
|
||||
os.rmdir(abs_dir)
|
||||
|
||||
|
107
bin/CryptoBoxExceptions.py
Normal file
|
@ -0,0 +1,107 @@
|
|||
"""
|
||||
exceptions of the cryptobox package
|
||||
"""
|
||||
|
||||
|
||||
class CryptoBoxError(Exception):
|
||||
"""base class for exceptions of the cryptobox"""
|
||||
pass
|
||||
|
||||
|
||||
class CBConfigError(CryptoBoxError):
|
||||
"""any kind of error related to the configuration of a cryptobox"""
|
||||
pass
|
||||
|
||||
|
||||
class CBConfigUnavailableError(CBConfigError):
|
||||
"""config file/input was not available at all"""
|
||||
|
||||
def __init__(self, source=None):
|
||||
self.source = source
|
||||
|
||||
def __str__(self):
|
||||
if self.source:
|
||||
return "failed to access the configuration of the cryptobox: %s" % self.source
|
||||
else:
|
||||
return "failed to access the configuration of the cryptobox"
|
||||
|
||||
|
||||
class CBConfigUndefinedError(CBConfigError):
|
||||
"""a specific configuration setting was not defined"""
|
||||
|
||||
def __init__(self, section, name=None):
|
||||
self.section = section
|
||||
self.name = name
|
||||
|
||||
def __str__(self):
|
||||
# is it a settings or a section?
|
||||
if self.name:
|
||||
# setting
|
||||
return "undefined configuration setting: [%s]->%s - please check your configuration file" % (self.section, self.name)
|
||||
else:
|
||||
# section
|
||||
return "undefined configuration section: [%s] - please check your configuration file" % (self.section, )
|
||||
|
||||
|
||||
|
||||
class CBConfigInvalidValueError(CBConfigError):
|
||||
"""a configuration setting was invalid somehow"""
|
||||
|
||||
def __init__(self, section, name, value, reason):
|
||||
self.section = section
|
||||
self.name = name
|
||||
self.value = value
|
||||
self.reason = reason
|
||||
|
||||
def __str__(self):
|
||||
return "invalid configuration setting [%s]->%s (%s): %s" % (self.section, self.name, self.value, self.reason)
|
||||
|
||||
|
||||
class CBEnvironmentError(CryptoBoxError):
|
||||
"""some part of the environment of the cryptobox is broken
|
||||
e.g. the wrong version of a required program
|
||||
"""
|
||||
|
||||
def __init__(self, desc):
|
||||
self.desc = desc
|
||||
|
||||
def __str__(self):
|
||||
return "misconfiguration detected: %s" % self.desc
|
||||
|
||||
|
||||
class CBContainerError(CryptoBoxError):
|
||||
"""any error raised while manipulating a cryptobox container"""
|
||||
|
||||
def __init__(self, desc):
|
||||
self.desc = desc
|
||||
|
||||
def __str__(self):
|
||||
return self.desc
|
||||
|
||||
class CBCreateError(CBContainerError):
|
||||
pass
|
||||
|
||||
class CBVolumeIsActive(CBContainerError):
|
||||
pass
|
||||
|
||||
class CBInvalidName(CBContainerError):
|
||||
pass
|
||||
|
||||
class CBNameActivelyUsed(CBContainerError):
|
||||
pass
|
||||
|
||||
class CBInvalidType(CBContainerError):
|
||||
pass
|
||||
|
||||
class CBInvalidPassword(CBContainerError):
|
||||
pass
|
||||
|
||||
class CBChangePasswordError(CBContainerError):
|
||||
pass
|
||||
|
||||
class CBMountError(CBContainerError):
|
||||
pass
|
||||
|
||||
class CBUmountError(CBContainerError):
|
||||
pass
|
||||
|
165
bin/CryptoBoxPlugin.py
Normal file
|
@ -0,0 +1,165 @@
|
|||
# $Id$
|
||||
#
|
||||
# parent class for all plugins of the CryptoBox
|
||||
#
|
||||
|
||||
import os
|
||||
import cherrypy
|
||||
|
||||
|
||||
class CryptoBoxPlugin:
|
||||
|
||||
## default capability is "system" - the other supported capability is: "volume"
|
||||
pluginCapabilities = [ "system" ]
|
||||
|
||||
## does this plugin require admin authentification?
|
||||
requestAuth = False
|
||||
|
||||
## is this plugin enabled by default?
|
||||
enabled = True
|
||||
|
||||
## default rank (0..100) of the plugin in listings (lower value means higher priority)
|
||||
rank = 80
|
||||
|
||||
|
||||
## default icon of this plugin (relative path)
|
||||
defaultIconFileName = "plugin_icon.png"
|
||||
|
||||
|
||||
def __init__(self, cbox, pluginDir):
|
||||
self.cbox = cbox
|
||||
self.hdf = {}
|
||||
self.pluginDir = pluginDir
|
||||
self.hdf_prefix = "Data.Plugins.%s." % self.getName()
|
||||
|
||||
|
||||
def doAction(self, **args):
|
||||
"""override doAction with your plugin code"""
|
||||
raise Exception, "undefined action handler ('doAction') in plugin '%'" % self.getName()
|
||||
|
||||
|
||||
def getStatus(self):
|
||||
"""you should override this, to supply useful state information"""
|
||||
raise Exception, "undefined state handler ('getStatus') in plugin '%'" % self.getName()
|
||||
|
||||
|
||||
def getName(self):
|
||||
"""the name of the python file (module) should be the name of the plugin"""
|
||||
return self.__module__
|
||||
|
||||
|
||||
@cherrypy.expose
|
||||
def getIcon(self, image=None, **kargs):
|
||||
"""return the image data of the icon of the plugin
|
||||
|
||||
the parameter 'image' may be used for alternative image locations (relative
|
||||
to the directory of the plugin)
|
||||
'**kargs' is necessary, as a 'weblang' attribute may be specified (and ignored)"""
|
||||
import cherrypy, re
|
||||
if (image is None): # or (re.search(u'[\w-\.]', image)):
|
||||
plugin_icon_file = os.path.join(self.pluginDir, self.defaultIconFileName)
|
||||
else:
|
||||
plugin_icon_file = os.path.join(self.pluginDir, image)
|
||||
if not os.access(plugin_icon_file, os.R_OK):
|
||||
plugin_icon_file = os.path.join(self.cbox.prefs["Locations"]["PluginDir"], "plugin_icon_unknown.png")
|
||||
return cherrypy.lib.cptools.serveFile(plugin_icon_file)
|
||||
|
||||
|
||||
def getTemplateFileName(self, template_name):
|
||||
"""return the filename of the template, if it is part of this plugin
|
||||
|
||||
use this function to check, if the plugin provides the specified template
|
||||
"""
|
||||
result_file = os.path.join(self.pluginDir, template_name + ".cs")
|
||||
if os.access(result_file, os.R_OK) and os.path.isfile(result_file):
|
||||
return result_file
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
def getLanguageData(self, lang="en"):
|
||||
try:
|
||||
import neo_cgi, neo_util
|
||||
except:
|
||||
raise CryptoBoxExceptions.CBEnvironmentError("couldn't import 'neo_*'! Try 'apt-get install python-clearsilver'.")
|
||||
langdir = os.path.abspath(os.path.join(self.pluginDir, "lang"))
|
||||
## first: the default language file (english)
|
||||
langFiles = [os.path.join(langdir, "en.hdf")]
|
||||
## maybe we have to load a translation afterwards
|
||||
if lang != "en":
|
||||
langFiles.append(os.path.join(langdir, lang + ".hdf"))
|
||||
file_found = False
|
||||
lang_hdf = neo_util.HDF()
|
||||
for langFile in langFiles:
|
||||
if os.access(langFile, os.R_OK):
|
||||
lang_hdf.readFile(langFile)
|
||||
file_found = True
|
||||
if file_found:
|
||||
return lang_hdf
|
||||
else:
|
||||
self.cbox.log.debug("Couldn't find a valid plugin language file (%s)" % str(langFiles))
|
||||
return None
|
||||
|
||||
|
||||
def loadDataSet(self, hdf):
|
||||
for (key, value) in self.hdf.items():
|
||||
hdf.setValue(key, str(value))
|
||||
|
||||
|
||||
def isAuthRequired(self):
|
||||
"""check if this plugin requires authentication
|
||||
first step: check plugin configuration
|
||||
second step: check default value of plugin"""
|
||||
try:
|
||||
if self.cbox.prefs.pluginConf[self.getName()]["requestAuth"] is None:
|
||||
return self.requestAuth
|
||||
if self.cbox.prefs.pluginConf[self.getName()]["requestAuth"]:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
except KeyError:
|
||||
return self.requestAuth
|
||||
|
||||
|
||||
def isEnabled(self):
|
||||
"""check if this plugin is enabled
|
||||
first step: check plugin configuration
|
||||
second step: check default value of plugin"""
|
||||
import types
|
||||
try:
|
||||
if self.cbox.prefs.pluginConf[self.getName()]["enabled"] is None:
|
||||
return self.enabled
|
||||
if self.cbox.prefs.pluginConf[self.getName()]["enabled"]:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
except KeyError:
|
||||
return self.enabled
|
||||
|
||||
|
||||
def getRank(self):
|
||||
"""check the rank of this plugin
|
||||
first step: check plugin configuration
|
||||
second step: check default value of plugin"""
|
||||
try:
|
||||
if self.cbox.prefs.pluginConf[self.getName()]["rank"] is None:
|
||||
return self.rank
|
||||
return int(self.cbox.prefs.pluginConf[self.getName()]["rank"])
|
||||
except KeyError, TypeError:
|
||||
return self.rank
|
||||
|
||||
|
||||
def getTestClass(self):
|
||||
import imp
|
||||
pl_file = os.path.join(self.pluginDir, "unittests.py")
|
||||
if os.access(pl_file, os.R_OK) and os.path.isfile(pl_file):
|
||||
try:
|
||||
return getattr(imp.load_source("unittests_%s" % self.getName(), pl_file), "unittests")
|
||||
except AttributeError:
|
||||
pass
|
||||
try:
|
||||
self.cbox.log.info("could not load unittests for plugin: %s" % self.getName())
|
||||
except AttributeError:
|
||||
pass
|
||||
return None
|
||||
|
386
bin/CryptoBoxRootActions.py
Executable file
|
@ -0,0 +1,386 @@
|
|||
#!/usr/bin/env python2.4
|
||||
|
||||
"""module for executing the programs, that need root privileges
|
||||
|
||||
Syntax:
|
||||
- program
|
||||
- device
|
||||
- [action]
|
||||
- [action args]
|
||||
|
||||
this script will always return with an exitcode 0 (true), if "check" is the only argument
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
import subprocess
|
||||
import pwd
|
||||
import grp
|
||||
import types
|
||||
|
||||
allowedProgs = {
|
||||
"sfdisk": "/sbin/sfdisk",
|
||||
"cryptsetup": "/sbin/cryptsetup",
|
||||
"mount": "/bin/mount",
|
||||
"umount": "/bin/umount",
|
||||
"blkid": "/sbin/blkid",
|
||||
}
|
||||
|
||||
|
||||
DEV_TYPES = { "pipe":1, "char":2, "dir":4, "block":6, "file":8, "link":10, "socket":12}
|
||||
|
||||
|
||||
def checkIfPluginIsSafe(plugin):
|
||||
"""check if the plugin and its parents are only writeable for root"""
|
||||
#FIXME: for now we may skip this test - but users will not like it this way :)
|
||||
return True
|
||||
props = os.stat(plugin)
|
||||
## check if it is owned by non-root
|
||||
if props.st_uid != 0: return False
|
||||
## check group-write permission if gid is not zero
|
||||
if (props.st_gid != 0) and (props.st_mode % 32 / 16 > 0): return False
|
||||
## check if it is world-writeable
|
||||
if props.st_mode % 4 / 2 > 0: return False
|
||||
## are we at root-level (directory-wise)? If yes, then we are ok ...
|
||||
if plugin == os.path.sep: return True
|
||||
## check if the parent directory is ok - recursively :)
|
||||
return checkIfPluginIsSafe(os.path.dirname(os.path.abspath(plugin)))
|
||||
|
||||
|
||||
def checkIfPluginIsValid(plugin):
|
||||
import imp
|
||||
try:
|
||||
x = imp.load_source("cbox_plugin",plugin)
|
||||
except Exception:
|
||||
return False
|
||||
try:
|
||||
if getattr(x, "PLUGIN_TYPE") == "cryptobox":
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
except Exception:
|
||||
return False
|
||||
|
||||
|
||||
def call_plugin(args):
|
||||
"""check if the plugin may be called - and do it finally ..."""
|
||||
plugin = os.path.abspath(args[0])
|
||||
del args[0]
|
||||
## check existence and excutability
|
||||
if not os.access(plugin, os.X_OK):
|
||||
raise Exception, "could not find executable plugin (%s)" % plugin
|
||||
## check if the plugin (and its parents) are only writeable for root
|
||||
if not checkIfPluginIsSafe(plugin):
|
||||
raise Exception, "the plugin (%s) was not safe - check its (and its parents') permissions" % plugin
|
||||
## check if the plugin is a python program, that is marked as a cryptobox plugin
|
||||
if not checkIfPluginIsValid(plugin):
|
||||
raise Exception, "the plugin (%s) is not a correctly marked python script" % plugin
|
||||
args.insert(0,plugin)
|
||||
proc = subprocess.Popen(
|
||||
shell = False,
|
||||
args = args)
|
||||
proc.wait()
|
||||
return proc.returncode == 0
|
||||
|
||||
|
||||
def isWriteable(device, force_dev_type=None):
|
||||
"""check if the calling user (not root!) has write access to the device/file
|
||||
|
||||
the real (not the effictive) user id is used for the check
|
||||
additionally the permissions of the default groups of the real uid are checked
|
||||
this check works nicely together with "super", as it changes (by default) only
|
||||
the effective uid (not the real uid)
|
||||
"""
|
||||
# first check, if the device/file exists
|
||||
if not os.path.exists(device):
|
||||
return False
|
||||
# check the type of the device - if necessary
|
||||
if not force_dev_type is None:
|
||||
dev_type = os.stat(device).st_mode % 65536 / 4096
|
||||
if dev_type != force_dev_type: return False
|
||||
# retrieve the information for the real user id
|
||||
(trustUserName, trustUID, groupsOfTrustUser) = getUserInfo(os.getuid())
|
||||
# set the default groups of the caller for the check (restore them later)
|
||||
savedGroups = os.getgroups()
|
||||
os.setgroups(groupsOfTrustUser)
|
||||
# check permissions
|
||||
result = os.access(device, os.W_OK) and os.access(device, os.R_OK)
|
||||
# reset the groups of this process
|
||||
os.setgroups(savedGroups)
|
||||
return result
|
||||
|
||||
|
||||
def run_cryptsetup(args):
|
||||
"""execute cryptsetup as root
|
||||
|
||||
@args: list of arguments - they will be treated accordingly to the first element
|
||||
of this list (the action)"""
|
||||
if not args: raise "WrongArguments", "no action for cryptsetup supplied"
|
||||
if type(args) != types.ListType: raise "WrongArguments", "invalid arguments supplied: %s" % (args, )
|
||||
try:
|
||||
action = args[0]
|
||||
del args[0]
|
||||
device = None
|
||||
cmd_args = []
|
||||
if action == "luksFormat":
|
||||
device = args[0]; del args[0]
|
||||
cmd_args.append(action)
|
||||
cmd_args.append(device)
|
||||
elif action == "luksUUID":
|
||||
device = args[0]; del args[0]
|
||||
cmd_args.append(action)
|
||||
cmd_args.append(device)
|
||||
elif action == "luksOpen":
|
||||
if len(args) < 2: raise "WrongArguments", "missing arguments"
|
||||
device = args[0]; del args[0]
|
||||
destination = args[0]; del args[0]
|
||||
cmd_args.append(action)
|
||||
cmd_args.append(device)
|
||||
cmd_args.append(destination)
|
||||
elif action == "luksClose":
|
||||
if len(args) < 1: raise "WrongArguments", "missing arguments"
|
||||
destination = args[0]; del args[0]
|
||||
# maybe add a check for the mapped device's permissions?
|
||||
# dmsetup deps self.device
|
||||
cmd_args.append(action)
|
||||
cmd_args.append(destination)
|
||||
elif action == "luksAddKey":
|
||||
device = args[0]; del args[0]
|
||||
cmd_args.append(action)
|
||||
cmd_args.append(device)
|
||||
elif action == "luksDelKey":
|
||||
if len(cs_args) < 2: raise "WrongArguments", "missing arguments"
|
||||
device = args[0]; del args[0]
|
||||
cmd_args.insert(-1, action)
|
||||
cmd_args.insert(-1, device)
|
||||
elif action == "isLuks":
|
||||
device = args[0]; del args[0]
|
||||
cmd_args.append(action)
|
||||
cmd_args.append(device)
|
||||
else: raise "WrongArguments", "invalid action supplied: %s" % (action, )
|
||||
# check if a device was defined - and check it
|
||||
if (not device is None) and (not isWriteable(device, DEV_TYPES["block"])):
|
||||
raise "WrongArguments", "%s is not a writeable block device" % (device, )
|
||||
cs_args = [allowedProgs["cryptsetup"]]
|
||||
cs_args.extend(args)
|
||||
cs_args.extend(cmd_args)
|
||||
except (TypeError, IndexError):
|
||||
raise "WrongArguments", "invalid arguments supplied: %s" % (args, )
|
||||
# execute cryptsetup with the given parameters
|
||||
proc = subprocess.Popen(
|
||||
shell = False,
|
||||
args = cs_args)
|
||||
proc.wait()
|
||||
## chown the devmapper block device to the cryptobox user
|
||||
if (proc.returncode == 0) and (action == "luksOpen"):
|
||||
os.chown(os.path.join(os.path.sep, "dev", "mapper", destination), os.getuid(), os.getgid())
|
||||
return proc.returncode == 0
|
||||
|
||||
|
||||
def run_sfdisk(args):
|
||||
"""execute sfdisk for partitioning
|
||||
|
||||
not implemented yet"""
|
||||
print "ok - you are free to call sfdisk ..."
|
||||
print " not yet implemented ..."
|
||||
return True
|
||||
|
||||
|
||||
def getFSType(device):
|
||||
"""get the filesystem type of a device"""
|
||||
proc = subprocess.Popen(
|
||||
shell = False,
|
||||
stdout = subprocess.PIPE,
|
||||
args = [ allowedProgs["blkid"],
|
||||
"-s", "TYPE",
|
||||
"-o", "value",
|
||||
"-c", os.devnull,
|
||||
"-w", os.devnull,
|
||||
device])
|
||||
(stdout, stderr) = proc.communicate()
|
||||
if proc.returncode != 0:
|
||||
return None
|
||||
return stdout.strip()
|
||||
|
||||
|
||||
def run_mount(args):
|
||||
"""execute mount
|
||||
"""
|
||||
if not args: raise "WrongArguments", "no destination for mount supplied"
|
||||
if type(args) != types.ListType: raise "WrongArguments", "invalid arguments supplied: %s" % (args, )
|
||||
try:
|
||||
device = args[0]
|
||||
del args[0]
|
||||
destination = args[0]
|
||||
del args[0]
|
||||
# check permissions for the device
|
||||
if not isWriteable(device, DEV_TYPES["block"]):
|
||||
raise "WrongArguments", "%s is not a writeable block device" % (device, )
|
||||
## check permissions for the mountpoint
|
||||
if not isWriteable(destination, DEV_TYPES["dir"]):
|
||||
raise "WrongArguments", "the mountpoint (%s) is not writeable" % (destination, )
|
||||
# check for additional (not allowed) arguments
|
||||
if len(args) != 0:
|
||||
raise "WrongArguments", "too many arguments for 'mount': %s" % (args, )
|
||||
except TypeError:
|
||||
raise "WrongArguments", "invalid arguments supplied: %s" % (args, )
|
||||
# execute mount with the given parameters
|
||||
# first overwrite the real uid, as 'mount' wants this to be zero (root)
|
||||
savedUID = os.getuid()
|
||||
os.setuid(os.geteuid())
|
||||
## we have to change the permissions of the mounted directory - otherwise it will
|
||||
## not be writeable for the cryptobox user
|
||||
## for 'vfat' we have to do this during mount
|
||||
## for ext2/3 we have to do it afterward
|
||||
## first: get the user/group of the target
|
||||
(trustUserName, trustUID, groupsOfTrustUser) = getUserInfo(savedUID)
|
||||
trustGID = groupsOfTrustUser[0]
|
||||
fsType = getFSType(device)
|
||||
## define arguments
|
||||
if fsType == "vfat":
|
||||
## add the "uid/gid" arguments to the mount call
|
||||
mount_args = [allowedProgs["mount"],
|
||||
"-o", "uid=%d,gid=%d" % (trustUID, trustGID),
|
||||
device,
|
||||
destination]
|
||||
else:
|
||||
## all other filesystem types will be handled after mount
|
||||
mount_args = [allowedProgs["mount"], device, destination]
|
||||
# execute mount
|
||||
proc = subprocess.Popen(
|
||||
shell = False,
|
||||
args = mount_args)
|
||||
proc.wait()
|
||||
## return in case of an error
|
||||
if proc.returncode != 0:
|
||||
return False
|
||||
## for vfat: we are done
|
||||
if fsType == "vfat": return True
|
||||
## for all other filesystem types: chown the mount directory
|
||||
try:
|
||||
os.chown(destination, trustUID, groupsOfTrustUser[0])
|
||||
except OSError, errMsg:
|
||||
sys.stderr.write("could not chown the mount destination (%s) to the specified user (%d/%d): %s\n" % (destination, trustUID, groupsOfTrustUser[0], errMsg))
|
||||
sys.stderr.write("UID: %d\n" % (os.geteuid(),))
|
||||
return False
|
||||
## BEWARE: it would be nice, if we could restore the previous uid (not euid) but
|
||||
## this would also override the euid (see 'man 2 setuid') - any ideas?
|
||||
return True
|
||||
|
||||
|
||||
def run_umount(args):
|
||||
"""execute mount
|
||||
"""
|
||||
if not args: raise "WrongArguments", "no mountpoint for umount supplied"
|
||||
if type(args) != types.ListType: raise "WrongArguments", "invalid arguments supplied"
|
||||
try:
|
||||
destination = args[0]
|
||||
del args[0]
|
||||
# check permissions for the destination
|
||||
if not isWriteable(os.path.dirname(destination), DEV_TYPES["dir"]):
|
||||
raise "WrongArguments", "the parent of the mountpoint (%s) is not writeable" % (destination, )
|
||||
if len(args) != 0: raise "WrongArguments", "umount does not allow arguments"
|
||||
except TypeError:
|
||||
raise "WrongArguments", "invalid arguments supplied"
|
||||
# execute umount with the given parameters
|
||||
# first overwrite the real uid, as 'umount' wants this to be zero (root)
|
||||
savedUID = os.getuid()
|
||||
os.setuid(os.geteuid())
|
||||
# execute umount (with the parameter '-l' - lazy umount)
|
||||
proc = subprocess.Popen(
|
||||
shell = False,
|
||||
args = [allowedProgs["umount"], "-l", destination])
|
||||
proc.wait()
|
||||
# restore previous real uid
|
||||
os.setuid(savedUID)
|
||||
return proc.returncode == 0
|
||||
|
||||
|
||||
def getUserInfo(user):
|
||||
"""return information about the specified user
|
||||
|
||||
@user: (uid or name)
|
||||
@return: tuple of (name, uid, (groups))
|
||||
"""
|
||||
if user is None: raise "KeyError", "no user supplied"
|
||||
# first check, if 'user' contains an id - then check for a name
|
||||
try:
|
||||
userinfo = pwd.getpwuid(user)
|
||||
except TypeError:
|
||||
# if a KeyError is raised again, then the supplied user was invalid
|
||||
userinfo = pwd.getpwnam(user)
|
||||
u_groups =[one_group.gr_gid
|
||||
for one_group in grp.getgrall()
|
||||
if userinfo.pw_name in one_group.gr_mem]
|
||||
if not userinfo.pw_gid in u_groups: u_groups.append(userinfo.pw_gid)
|
||||
return (userinfo.pw_name, userinfo.pw_uid, u_groups)
|
||||
|
||||
|
||||
# **************** main **********************
|
||||
|
||||
# prevent import
|
||||
if __name__ == "__main__":
|
||||
|
||||
# do we have root privileges (effective uid is zero)?
|
||||
if os.geteuid() != 0:
|
||||
sys.stderr.write("the effective uid is not zero - you should use 'super' to call this script (%s)" % sys.argv[0])
|
||||
sys.exit(100)
|
||||
|
||||
# remove program name
|
||||
args = sys.argv[1:]
|
||||
|
||||
# do not allow to use root permissions (real uid may not be zero)
|
||||
if os.getuid() == 0:
|
||||
sys.stderr.write("the uid of the caller is zero (root) - this is not allowed\n")
|
||||
sys.exit(100)
|
||||
|
||||
# check if there were arguments
|
||||
if (len(args) == 0):
|
||||
sys.stderr.write("No arguments supplied\n")
|
||||
sys.exit(100)
|
||||
|
||||
# did the user call the "check" action?
|
||||
if (len(args) == 1) and (args[0].lower() == "check"):
|
||||
# exit silently
|
||||
sys.exit(0)
|
||||
|
||||
if args[0].lower() == "plugin":
|
||||
del args[0]
|
||||
try:
|
||||
isOK = call_plugin(args)
|
||||
except Exception, errMsg:
|
||||
sys.stderr.write("Execution of plugin failed: %s\n" % errMsg)
|
||||
sys.exit(100)
|
||||
if isOK:
|
||||
sys.exit(0)
|
||||
else:
|
||||
sys.exit(1)
|
||||
|
||||
# check parameters count
|
||||
if len(args) < 2:
|
||||
sys.stderr.write("Not enough arguments supplied (%s)!\n" % " ".join(args))
|
||||
sys.exit(100)
|
||||
|
||||
progRequest = args[0]
|
||||
del args[0]
|
||||
|
||||
if not progRequest in allowedProgs.keys():
|
||||
sys.stderr.write("Invalid program requested: %s\n" % progRequest)
|
||||
sys.exit(100)
|
||||
|
||||
if progRequest == "cryptsetup": runner = run_cryptsetup
|
||||
elif progRequest == "sfdisk": runner = run_sfdisk
|
||||
elif progRequest == "mount": runner = run_mount
|
||||
elif progRequest == "umount": runner = run_umount
|
||||
else:
|
||||
sys.stderr.write("The interface for this program (%s) is not yet implemented!\n" % progRequest)
|
||||
sys.exit(100)
|
||||
try:
|
||||
if runner(args):
|
||||
sys.exit(0)
|
||||
else:
|
||||
sys.exit(1)
|
||||
except "WrongArguments", errstr:
|
||||
sys.stderr.write("Execution failed: %s\n" % errstr)
|
||||
sys.exit(100)
|
||||
|
481
bin/CryptoBoxSettings.py
Normal file
|
@ -0,0 +1,481 @@
|
|||
import logging
|
||||
try:
|
||||
import validate
|
||||
except:
|
||||
raise CryptoBoxExceptions.CBEnvironmentError("couldn't import 'validate'! Try 'apt-get install python-formencode'.")
|
||||
import os
|
||||
import CryptoBoxExceptions
|
||||
import subprocess
|
||||
try:
|
||||
import configobj ## needed for reading and writing of the config file
|
||||
except:
|
||||
raise CryptoBoxExceptions.CBEnvironmentError("couldn't import 'configobj'! Try 'apt-get install python-configobj'.")
|
||||
|
||||
|
||||
|
||||
class CryptoBoxSettings:
|
||||
|
||||
CONF_LOCATIONS = [
|
||||
"./cryptobox.conf",
|
||||
"~/.cryptobox.conf",
|
||||
"/etc/cryptobox/cryptobox.conf"]
|
||||
|
||||
NAMEDB_FILE = "cryptobox_names.db"
|
||||
PLUGINCONF_FILE = "cryptobox_plugins.conf"
|
||||
USERDB_FILE = "cryptobox_users.db"
|
||||
|
||||
|
||||
def __init__(self, config_file=None):
|
||||
self.log = logging.getLogger("CryptoBox")
|
||||
config_file = self.__getConfigFileName(config_file)
|
||||
self.log.info("loading config file: %s" % config_file)
|
||||
self.prefs = self.__getPreferences(config_file)
|
||||
self.__validateConfig()
|
||||
self.__configureLogHandler()
|
||||
self.__checkUnknownPreferences()
|
||||
self.preparePartition()
|
||||
self.nameDB = self.__getNameDatabase()
|
||||
self.pluginConf = self.__getPluginConfig()
|
||||
self.userDB = self.__getUserDB()
|
||||
self.misc_files = self.__getMiscFiles()
|
||||
|
||||
|
||||
def write(self):
|
||||
"""
|
||||
write all local setting files including the content of the "misc" subdirectory
|
||||
"""
|
||||
ok = True
|
||||
try:
|
||||
self.nameDB.write()
|
||||
except IOError:
|
||||
self.log.warn("could not save the name database")
|
||||
ok = False
|
||||
try:
|
||||
self.pluginConf.write()
|
||||
except IOError:
|
||||
self.log.warn("could not save the plugin configuration")
|
||||
ok = False
|
||||
try:
|
||||
self.userDB.write()
|
||||
except IOError:
|
||||
self.log.warn("could not save the user database")
|
||||
ok = False
|
||||
for misc_file in self.misc_files:
|
||||
if not misc_file.save():
|
||||
self.log.warn("could not save a misc setting file (%s)" % misc_file.filename)
|
||||
ok = False
|
||||
return ok
|
||||
|
||||
|
||||
def requiresPartition(self):
|
||||
return bool(self.prefs["Main"]["UseConfigPartition"])
|
||||
|
||||
|
||||
def getActivePartition(self):
|
||||
settings_dir = self.prefs["Locations"]["SettingsDir"]
|
||||
if not os.path.ismount(settings_dir): return None
|
||||
for line in file("/proc/mounts"):
|
||||
fields = line.split(" ")
|
||||
mount_dir = fields[1]
|
||||
try:
|
||||
if os.path.samefile(mount_dir, settings_dir): return fields[0]
|
||||
except OSError:
|
||||
pass
|
||||
## no matching entry found
|
||||
return None
|
||||
|
||||
|
||||
def mountPartition(self):
|
||||
self.log.debug("trying to mount configuration partition")
|
||||
if not self.requiresPartition():
|
||||
self.log.warn("mountConfigPartition: configuration partition is not required - mounting anyway")
|
||||
if self.getActivePartition():
|
||||
self.log.warn("mountConfigPartition: configuration partition already mounted - not mounting again")
|
||||
return False
|
||||
confPartitions = self.getAvailablePartitions()
|
||||
if not confPartitions:
|
||||
self.log.error("no configuration partitions found - you have to create it first")
|
||||
return False
|
||||
partition = confPartitions[0]
|
||||
proc = subprocess.Popen(
|
||||
shell = False,
|
||||
stdout = subprocess.PIPE,
|
||||
stderr = subprocess.PIPE,
|
||||
args = [
|
||||
self.prefs["Programs"]["super"],
|
||||
self.prefs["Programs"]["CryptoBoxRootActions"],
|
||||
"mount",
|
||||
partition,
|
||||
self.prefs["Locations"]["SettingsDir"]])
|
||||
(stdout, stderr) = proc.communicate()
|
||||
if proc.returncode != 0:
|
||||
self.log.error("failed to mount the configuration partition: %s" % partition)
|
||||
self.log.error("output of mount: %s" % (stderr,))
|
||||
return False
|
||||
self.log.info("configuration partition mounted: %s" % partition)
|
||||
return True
|
||||
|
||||
|
||||
def umountPartition(self):
|
||||
if not self.getActivePartition():
|
||||
self.log.warn("umountConfigPartition: no configuration partition mounted")
|
||||
return False
|
||||
proc = subprocess.Popen(
|
||||
shell = False,
|
||||
stdout = subprocess.PIPE,
|
||||
stderr = subprocess.PIPE,
|
||||
args = [
|
||||
self.prefs["Programs"]["super"],
|
||||
self.prefs["Programs"]["CryptoBoxRootActions"],
|
||||
"umount",
|
||||
self.prefs["Locations"]["SettingsDir"]])
|
||||
(stdout, stderr) = proc.communicate()
|
||||
if proc.returncode != 0:
|
||||
self.log.error("failed to unmount the configuration partition")
|
||||
self.log.error("output of mount: %s" % (stderr,))
|
||||
return False
|
||||
self.log.info("configuration partition unmounted")
|
||||
return True
|
||||
|
||||
|
||||
def getAvailablePartitions(self):
|
||||
"""returns a sequence of found config partitions"""
|
||||
proc = subprocess.Popen(
|
||||
shell = False,
|
||||
stdout = subprocess.PIPE,
|
||||
args = [
|
||||
self.prefs["Programs"]["blkid"],
|
||||
"-c", os.path.devnull,
|
||||
"-t", "LABEL=%s" % self.prefs["Main"]["ConfigVolumeLabel"] ])
|
||||
(output, error) = proc.communicate()
|
||||
if output:
|
||||
return [e.strip().split(":",1)[0] for e in output.splitlines()]
|
||||
else:
|
||||
return []
|
||||
|
||||
|
||||
def preparePartition(self):
|
||||
if self.requiresPartition() and not self.getActivePartition():
|
||||
self.mountPartition()
|
||||
|
||||
|
||||
def __getitem__(self, key):
|
||||
"""redirect all requests to the 'prefs' attribute"""
|
||||
return self.prefs[key]
|
||||
|
||||
|
||||
def __getPreferences(self, config_file):
|
||||
import StringIO
|
||||
config_rules = StringIO.StringIO(self.validation_spec)
|
||||
try:
|
||||
prefs = configobj.ConfigObj(config_file, configspec=config_rules)
|
||||
if prefs:
|
||||
self.log.info("found config: %s" % prefs.items())
|
||||
else:
|
||||
raise CryptoBoxExceptions.CBConfigUnavailableError("failed to load the config file: %s" % config_file)
|
||||
except IOError:
|
||||
raise CryptoBoxExceptions.CBConfigUnavailableError("unable to open the config file: %s" % config_file)
|
||||
return prefs
|
||||
|
||||
|
||||
def __validateConfig(self):
|
||||
result = self.prefs.validate(CryptoBoxSettingsValidator(), preserve_errors=True)
|
||||
error_list = configobj.flatten_errors(self.prefs, result)
|
||||
if not error_list: return
|
||||
errorMsgs = []
|
||||
for sections, key, text in error_list:
|
||||
section_name = "->".join(sections)
|
||||
if not text:
|
||||
errorMsg = "undefined configuration value (%s) in section '%s'" % (key, section_name)
|
||||
else:
|
||||
errorMsg = "invalid configuration value (%s) in section '%s': %s" % (key, section_name, text)
|
||||
errorMsgs.append(errorMsg)
|
||||
raise CryptoBoxExceptions.CBConfigError, "\n".join(errorMsgs)
|
||||
|
||||
|
||||
def __checkUnknownPreferences(self):
|
||||
import StringIO
|
||||
config_rules = configobj.ConfigObj(StringIO.StringIO(self.validation_spec), list_values=False)
|
||||
self.__recursiveConfigSectionCheck("", self.prefs, config_rules)
|
||||
|
||||
|
||||
def __recursiveConfigSectionCheck(self, section_path, section_config, section_rules):
|
||||
"""should be called by '__checkUnknownPreferences' for every section
|
||||
sends a warning message to the logger for every undefined (see validation_spec)
|
||||
configuration setting
|
||||
"""
|
||||
for e in section_config.keys():
|
||||
element_path = section_path + e
|
||||
if e in section_rules.keys():
|
||||
if isinstance(section_config[e], configobj.Section):
|
||||
if isinstance(section_rules[e], configobj.Section):
|
||||
self.__recursiveConfigSectionCheck(element_path + "->", section_config[e], section_rules[e])
|
||||
else:
|
||||
self.log.warn("configuration setting should be a value instead of a section name: %s" % element_path)
|
||||
else:
|
||||
if not isinstance(section_rules[e], configobj.Section):
|
||||
pass # good - the setting is valid
|
||||
else:
|
||||
self.log.warn("configuration setting should be a section name instead of a value: %s" % element_path)
|
||||
else:
|
||||
self.log.warn("unknown configuration setting: %s" % element_path)
|
||||
|
||||
|
||||
def __getNameDatabase(self):
|
||||
try:
|
||||
try:
|
||||
nameDB_file = os.path.join(self.prefs["Locations"]["SettingsDir"], self.NAMEDB_FILE)
|
||||
except KeyError:
|
||||
raise CryptoBoxExceptions.CBConfigUndefinedError("Locations", "SettingsDir")
|
||||
except SyntaxError:
|
||||
raise CryptoBoxExceptions.CBConfigInvalidValueError("Locations", "SettingsDir", nameDB_file, "failed to interprete the filename of the name database correctly (%s)" % nameDB_file)
|
||||
## create nameDB if necessary
|
||||
if os.path.exists(nameDB_file):
|
||||
nameDB = configobj.ConfigObj(nameDB_file)
|
||||
else:
|
||||
nameDB = configobj.ConfigObj(nameDB_file, create_empty=True)
|
||||
## check if nameDB file was created successfully?
|
||||
if not os.path.exists(nameDB_file):
|
||||
raise CryptoBoxExceptions.CBEnvironmentError("failed to create name database (%s)" % nameDB_file)
|
||||
return nameDB
|
||||
|
||||
|
||||
def __getPluginConfig(self):
|
||||
import StringIO
|
||||
plugin_rules = StringIO.StringIO(self.pluginValidationSpec)
|
||||
try:
|
||||
try:
|
||||
pluginConf_file = os.path.join(self.prefs["Locations"]["SettingsDir"], self.PLUGINCONF_FILE)
|
||||
except KeyError:
|
||||
raise CryptoBoxExceptions.CBConfigUndefinedError("Locations", "SettingsDir")
|
||||
except SyntaxError:
|
||||
raise CryptoBoxExceptions.CBConfigInvalidValueError("Locations", "SettingsDir", pluginConf_file, "failed to interprete the filename of the plugin config file correctly (%s)" % pluginConf_file)
|
||||
## create pluginConf_file if necessary
|
||||
if os.path.exists(pluginConf_file):
|
||||
pluginConf = configobj.ConfigObj(pluginConf_file, configspec=plugin_rules)
|
||||
else:
|
||||
pluginConf = configobj.ConfigObj(pluginConf_file, configspec=plugin_rules, create_empty=True)
|
||||
## validate and convert values according to the spec
|
||||
pluginConf.validate(validate.Validator())
|
||||
## check if pluginConf_file file was created successfully?
|
||||
if not os.path.exists(pluginConf_file):
|
||||
raise CryptoBoxExceptions.CBEnvironmentError("failed to create plugin configuration file (%s)" % pluginConf_file)
|
||||
return pluginConf
|
||||
|
||||
|
||||
def __getUserDB(self):
|
||||
import StringIO, sha
|
||||
userDB_rules = StringIO.StringIO(self.userDatabaseSpec)
|
||||
try:
|
||||
try:
|
||||
userDB_file = os.path.join(self.prefs["Locations"]["SettingsDir"], self.USERDB_FILE)
|
||||
except KeyError:
|
||||
raise CryptoBoxExceptions.CBConfigUndefinedError("Locations", "SettingsDir")
|
||||
except SyntaxError:
|
||||
raise CryptoBoxExceptions.CBConfigInvalidValueError("Locations", "SettingsDir", userDB_file, "failed to interprete the filename of the users database file correctly (%s)" % userDB_file)
|
||||
## create userDB_file if necessary
|
||||
if os.path.exists(userDB_file):
|
||||
userDB = configobj.ConfigObj(userDB_file, configspec=userDB_rules)
|
||||
else:
|
||||
userDB = configobj.ConfigObj(userDB_file, configspec=userDB_rules, create_empty=True)
|
||||
## validate and set default value for "admin" user
|
||||
userDB.validate(validate.Validator())
|
||||
## check if userDB file was created successfully?
|
||||
if not os.path.exists(userDB_file):
|
||||
raise CryptoBoxExceptions.CBEnvironmentError("failed to create user database file (%s)" % userDB_file)
|
||||
## define password hash function - never use "sha" directly - SPOT
|
||||
userDB.getDigest = lambda password: sha.new(password).hexdigest()
|
||||
return userDB
|
||||
|
||||
|
||||
def __getMiscFiles(self):
|
||||
misc_dir = os.path.join(self.prefs["Locations"]["SettingsDir"], "misc")
|
||||
if (not os.path.isdir(misc_dir)) or (not os.access(misc_dir, os.X_OK)):
|
||||
return []
|
||||
return [MiscConfigFile(os.path.join(misc_dir, f), self.log)
|
||||
for f in os.listdir(misc_dir)
|
||||
if os.path.isfile(os.path.join(misc_dir, f))]
|
||||
|
||||
|
||||
def __getConfigFileName(self, config_file):
|
||||
# search for the configuration file
|
||||
import types
|
||||
if config_file is None:
|
||||
# no config file was specified - we will look for it in the ususal locations
|
||||
conf_file_list = [os.path.expanduser(f)
|
||||
for f in self.CONF_LOCATIONS
|
||||
if os.path.exists(os.path.expanduser(f))]
|
||||
if not conf_file_list:
|
||||
# no possible config file found in the usual locations
|
||||
raise CryptoBoxExceptions.CBConfigUnavailableError()
|
||||
config_file = conf_file_list[0]
|
||||
else:
|
||||
# a config file was specified (e.g. via command line)
|
||||
if type(config_file) != types.StringType:
|
||||
raise CryptoBoxExceptions.CBConfigUnavailableError("invalid config file specified: %s" % config_file)
|
||||
if not os.path.exists(config_file):
|
||||
raise CryptoBoxExceptions.CBConfigUnavailableError("could not find the specified configuration file (%s)" % config_file)
|
||||
return config_file
|
||||
|
||||
|
||||
def __configureLogHandler(self):
|
||||
try:
|
||||
log_level = self.prefs["Log"]["Level"].upper()
|
||||
log_level_avail = ["DEBUG", "INFO", "WARN", "ERROR"]
|
||||
if not log_level in log_level_avail:
|
||||
raise TypeError
|
||||
except KeyError:
|
||||
raise CryptoBoxExceptions.CBConfigUndefinedError("Log", "Level")
|
||||
except TypeError:
|
||||
raise CryptoBoxExceptions.CBConfigInvalidValueError("Log", "Level", log_level, "invalid log level: only %s are allowed" % log_level_avail)
|
||||
try:
|
||||
try:
|
||||
log_handler = logging.FileHandler(self.prefs["Log"]["Details"])
|
||||
except KeyError:
|
||||
raise CryptoBoxExceptions.CBConfigUndefinedError("Log", "Details")
|
||||
except IOError:
|
||||
raise CryptoBoxExceptions.CBEnvironmentError("could not create the log file (%s)" % self.prefs["Log"]["Details"])
|
||||
log_handler.setFormatter(logging.Formatter('%(asctime)s CryptoBox %(levelname)s: %(message)s'))
|
||||
cbox_log = logging.getLogger("CryptoBox")
|
||||
## remove previous handlers
|
||||
cbox_log.handlers = []
|
||||
## add new one
|
||||
cbox_log.addHandler(log_handler)
|
||||
## do not call parent's handlers
|
||||
cbox_log.propagate = False
|
||||
## 'log_level' is a string -> use 'getattr'
|
||||
cbox_log.setLevel(getattr(logging,log_level))
|
||||
## the logger named "CryptoBox" is configured now
|
||||
|
||||
|
||||
validation_spec = """
|
||||
[Main]
|
||||
AllowedDevices = list(min=1)
|
||||
DefaultVolumePrefix = string(min=1)
|
||||
DefaultCipher = string(default="aes-cbc-essiv:sha256")
|
||||
ConfigVolumeLabel = string(min=1, default="cbox_config")
|
||||
UseConfigPartition = integer(min=0, max=1, default=0)
|
||||
|
||||
[Locations]
|
||||
MountParentDir = directoryExists(default="/var/cache/cryptobox/mnt")
|
||||
SettingsDir = directoryExists(default="/var/cache/cryptobox/settings")
|
||||
TemplateDir = directoryExists(default="/usr/share/cryptobox/template")
|
||||
LangDir = directoryExists(default="/usr/share/cryptobox/lang")
|
||||
DocDir = directoryExists(default="/usr/share/doc/cryptobox/html")
|
||||
PluginDir = directoryExists(default="/usr/share/cryptobox/plugins")
|
||||
|
||||
[Log]
|
||||
Level = option("debug", "info", "warn", "error", default="warn")
|
||||
Destination = option("file", default="file")
|
||||
Details = string(min=1)
|
||||
|
||||
[WebSettings]
|
||||
Stylesheet = string(min=1)
|
||||
Language = string(min=1, default="en")
|
||||
|
||||
[Programs]
|
||||
cryptsetup = fileExecutable(default="/sbin/cryptsetup")
|
||||
mkfs-data = fileExecutable(default="/sbin/mkfs.ext3")
|
||||
blkid = fileExecutable(default="/sbin/blkid")
|
||||
blockdev = fileExecutable(default="/sbin/blockdev")
|
||||
mount = fileExecutable(default="/bin/mount")
|
||||
umount = fileExecutable(default="/bin/umount")
|
||||
super = fileExecutable(default="/usr/bin/super")
|
||||
# this is the "program" name as defined in /etc/super.tab
|
||||
CryptoBoxRootActions = string(min=1)
|
||||
"""
|
||||
|
||||
pluginValidationSpec = """
|
||||
[__many__]
|
||||
enabled = boolean(default=None)
|
||||
requestAuth = boolean(default=None)
|
||||
rank = integer(default=None)
|
||||
"""
|
||||
|
||||
userDatabaseSpec = """
|
||||
[admins]
|
||||
admin = string(default=d033e22ae348aeb5660fc2140aec35850c4da997)
|
||||
"""
|
||||
|
||||
|
||||
class CryptoBoxSettingsValidator(validate.Validator):
|
||||
|
||||
def __init__(self):
|
||||
validate.Validator.__init__(self)
|
||||
self.functions["directoryExists"] = self.check_directoryExists
|
||||
self.functions["fileExecutable"] = self.check_fileExecutable
|
||||
self.functions["fileWriteable"] = self.check_fileWriteable
|
||||
|
||||
|
||||
def check_directoryExists(self, value):
|
||||
dir_path = os.path.abspath(value)
|
||||
if not os.path.isdir(dir_path):
|
||||
raise validate.VdtValueError("%s (not found)" % value)
|
||||
if not os.access(dir_path, os.X_OK):
|
||||
raise validate.VdtValueError("%s (access denied)" % value)
|
||||
return dir_path
|
||||
|
||||
|
||||
def check_fileExecutable(self, value):
|
||||
file_path = os.path.abspath(value)
|
||||
if not os.path.isfile(file_path):
|
||||
raise validate.VdtValueError("%s (not found)" % value)
|
||||
if not os.access(file_path, os.X_OK):
|
||||
raise validate.VdtValueError("%s (access denied)" % value)
|
||||
return file_path
|
||||
|
||||
|
||||
def check_fileWriteable(self, value):
|
||||
file_path = os.path.abspath(value)
|
||||
if os.path.isfile(file_path):
|
||||
if not os.access(file_path, os.W_OK):
|
||||
raise validate.VdtValueError("%s (not found)" % value)
|
||||
else:
|
||||
parent_dir = os.path.dirname(file_path)
|
||||
if os.path.isdir(parent_dir) and os.access(parent_dir, os.W_OK):
|
||||
return file_path
|
||||
raise validate.VdtValueError("%s (directory does not exist)" % value)
|
||||
return file_path
|
||||
|
||||
|
||||
|
||||
class MiscConfigFile:
|
||||
|
||||
maxSize = 20480
|
||||
|
||||
def __init__(self, filename, logger):
|
||||
self.filename = filename
|
||||
self.log = logger
|
||||
self.load()
|
||||
|
||||
|
||||
def load(self):
|
||||
fd = open(self.filename, "rb")
|
||||
## limit the maximum size
|
||||
self.content = fd.read(self.maxSize)
|
||||
if fd.tell() == self.maxSize:
|
||||
self.log.warn("file in misc settings directory (%s) is bigger than allowed (%s)" % (self.filename, self.maxSize))
|
||||
fd.close()
|
||||
|
||||
|
||||
def save(self):
|
||||
save_dir = os.path.dirname(self.filename)
|
||||
## create the directory, if necessary
|
||||
if not os.path.isdir(save_dir):
|
||||
try:
|
||||
os.mkdir(save_dir)
|
||||
except IOError:
|
||||
return False
|
||||
## save the content of the file
|
||||
try:
|
||||
fd = open(self.filename, "wb")
|
||||
except IOError:
|
||||
return False
|
||||
try:
|
||||
fd.write(self.content)
|
||||
fd.close()
|
||||
return True
|
||||
except IOError:
|
||||
fd.close()
|
||||
return False
|
||||
|
186
bin/CryptoBoxTools.py
Normal file
|
@ -0,0 +1,186 @@
|
|||
import logging
|
||||
import os
|
||||
import re
|
||||
|
||||
logger = logging.getLogger("CryptoBox")
|
||||
|
||||
|
||||
def getAvailablePartitions():
|
||||
"retrieve a list of all available containers"
|
||||
ret_list = []
|
||||
try:
|
||||
"the following reads all lines of /proc/partitions and adds the mentioned devices"
|
||||
fpart = open("/proc/partitions", "r")
|
||||
try:
|
||||
line = fpart.readline()
|
||||
while line:
|
||||
p_details = line.split()
|
||||
if (len(p_details) == 4):
|
||||
"the following code prevents double entries like /dev/hda and /dev/hda1"
|
||||
(p_major, p_minor, p_size, p_device) = p_details
|
||||
## ignore lines with: invalid minor/major or extend partitions (size=1)
|
||||
if re.search('^[0-9]*$', p_major) and re.search('^[0-9]*$', p_minor) and (p_size != "1"):
|
||||
p_parent = re.sub('[1-9]?[0-9]$', '', p_device)
|
||||
if p_parent == p_device:
|
||||
if [e for e in ret_list if re.search('^' + p_parent + '[1-9]?[0-9]$', e)]:
|
||||
"major partition - its children are already in the list"
|
||||
pass
|
||||
else:
|
||||
"major partition - but there are no children for now"
|
||||
ret_list.append(p_device)
|
||||
else:
|
||||
"minor partition - remove parent if necessary"
|
||||
if p_parent in ret_list: ret_list.remove(p_parent)
|
||||
ret_list.append(p_device)
|
||||
line = fpart.readline()
|
||||
finally:
|
||||
fpart.close()
|
||||
return map(getAbsoluteDeviceName, ret_list)
|
||||
except IOError:
|
||||
logger.warning("Could not read /proc/partitions")
|
||||
return []
|
||||
|
||||
|
||||
def getAbsoluteDeviceName(shortname):
|
||||
""" returns the absolute file name of a device (e.g.: "hda1" -> "/dev/hda1")
|
||||
this does also work for device mapper devices
|
||||
if the result is non-unique, one arbitrary value is returned"""
|
||||
if re.search('^/', shortname): return shortname
|
||||
default = os.path.join("/dev", shortname)
|
||||
if os.path.exists(default): return default
|
||||
result = findMajorMinorOfDevice(shortname)
|
||||
"if no valid major/minor was found -> exit"
|
||||
if not result: return default
|
||||
(major, minor) = result
|
||||
"for device-mapper devices (major == 254) ..."
|
||||
if major == 254:
|
||||
result = findMajorMinorDeviceName("/dev/mapper", major, minor)
|
||||
if result: return result[0]
|
||||
"now check all files in /dev"
|
||||
result = findMajorMinorDeviceName("/dev", major, minor)
|
||||
if result: return result[0]
|
||||
return default
|
||||
|
||||
|
||||
def findMajorMinorOfDevice(device):
|
||||
"return the major/minor numbers of a block device"
|
||||
if re.match("/", device) or not os.path.exists(os.path.join(os.path.sep,"sys","block",device)):
|
||||
## maybe it is an absolute device name
|
||||
if not os.path.exists(device): return None
|
||||
## okay - it seems to to a device node
|
||||
rdev = os.stat(device).st_rdev
|
||||
return (os.major(rdev), os.minor(rdev))
|
||||
blockdev_info_file = os.path.join(os.path.join(os.path.sep,"sys","block", device), "dev")
|
||||
try:
|
||||
f_blockdev_info = open(blockdev_info_file, "r")
|
||||
blockdev_info = f_blockdev_info.read()
|
||||
f_blockdev_info.close()
|
||||
(str_major, str_minor) = blockdev_info.split(":")
|
||||
"numeric conversion"
|
||||
try:
|
||||
major = int(str_major)
|
||||
minor = int(str_minor)
|
||||
return (major, minor)
|
||||
except ValueError:
|
||||
"unknown device numbers -> stop guessing"
|
||||
return None
|
||||
except IOError:
|
||||
pass
|
||||
return None
|
||||
|
||||
|
||||
def findMajorMinorDeviceName(dir, major, minor):
|
||||
"returns the names of devices with the specified major and minor number"
|
||||
collected = []
|
||||
try:
|
||||
subdirs = [os.path.join(dir, e) for e in os.listdir(dir) if (not os.path.islink(os.path.join(dir, e))) and os.path.isdir(os.path.join(dir, e))]
|
||||
"do a recursive call to parse the directory tree"
|
||||
for dirs in subdirs:
|
||||
collected.extend(findMajorMinorDeviceName(dirs, major, minor))
|
||||
"filter all device inodes in this directory"
|
||||
collected.extend([os.path.realpath(os.path.join(dir, e)) for e in os.listdir(dir) if (os.major(os.stat(os.path.join(dir, e)).st_rdev) == major) and (os.minor(os.stat(os.path.join(dir, e)).st_rdev) == minor)])
|
||||
## remove double entries
|
||||
result = []
|
||||
for e in collected:
|
||||
if e not in result: result.append(e)
|
||||
return result
|
||||
except OSError:
|
||||
return []
|
||||
|
||||
|
||||
def getParentBlockDevices():
|
||||
devs = []
|
||||
for line in file("/proc/partitions"):
|
||||
p_details = line.split()
|
||||
## we expect four values - otherwise continue with next iteration
|
||||
if len(p_details) != 4: continue
|
||||
(p_major, p_minor, p_size, p_device) = p_details
|
||||
## we expect numeric values in the first two columns
|
||||
if re.search(u'\D',p_major) or re.search(u'\D',p_minor): continue
|
||||
## now let us check, if it is a (parent) block device or a partition
|
||||
if not os.path.isdir(os.path.join(os.path.sep, "sys", "block", p_device)): continue
|
||||
devs.append(p_device)
|
||||
return map(getAbsoluteDeviceName, devs)
|
||||
|
||||
|
||||
def isPartOfBlockDevice(parent, subdevice):
|
||||
"""check if the given block device is a parent of 'subdevice'
|
||||
e.g. for checking if a partition belongs to a block device"""
|
||||
try:
|
||||
(par_major, par_minor) = findMajorMinorOfDevice(parent)
|
||||
(sub_major, sub_minor) = findMajorMinorOfDevice(subdevice)
|
||||
except TypeError:
|
||||
## at least one of these devices did not return a valid major/minor combination
|
||||
return False
|
||||
## search the entry below '/sys/block' belonging to the parent
|
||||
root = os.path.join(os.path.sep, 'sys', 'block')
|
||||
for bldev in os.listdir(root):
|
||||
blpath = os.path.join(root, bldev, 'dev')
|
||||
if os.access(blpath, os.R_OK):
|
||||
try:
|
||||
if (str(par_major), str(par_minor)) == tuple([e for e in file(blpath)][0].strip().split(":",1)):
|
||||
parent_path = os.path.join(root, bldev)
|
||||
break
|
||||
except IndexError, OSError:
|
||||
pass
|
||||
else:
|
||||
## no block device with this major/minor combination found below '/sys/block'
|
||||
return False
|
||||
for subbldev in os.listdir(parent_path):
|
||||
subblpath = os.path.join(parent_path, subbldev, "dev")
|
||||
if os.access(subblpath, os.R_OK):
|
||||
try:
|
||||
if (str(sub_major), str(sub_minor)) == tuple([e for e in file(subblpath)][0].strip().split(":",1)):
|
||||
## the name of the subdevice node is not important - we found it!
|
||||
return True
|
||||
except IndexError, OSError:
|
||||
pass
|
||||
return False
|
||||
|
||||
|
||||
def getBlockDeviceSize(device):
|
||||
if not device: return -1
|
||||
try:
|
||||
rdev = os.stat(device).st_rdev
|
||||
except OSError:
|
||||
return -1
|
||||
minor = os.minor(rdev)
|
||||
major = os.major(rdev)
|
||||
for f in file("/proc/partitions"):
|
||||
try:
|
||||
elements = f.split()
|
||||
if len(elements) != 4: continue
|
||||
if (int(elements[0]) == major) and (int(elements[1]) == minor):
|
||||
return int(elements[2])/1024
|
||||
except ValueError:
|
||||
pass
|
||||
return -1
|
||||
|
||||
|
||||
def getBlockDeviceSizeHumanly(device):
|
||||
size = getBlockDeviceSize(device)
|
||||
if size > 5120:
|
||||
return "%sGB" % size/1024
|
||||
else:
|
||||
return "%sMB" % size
|
||||
|
38
bin/CryptoBoxWebserver.py
Executable file
|
@ -0,0 +1,38 @@
|
|||
#!/usr/bin/env python2.4
|
||||
import os
|
||||
import WebInterfaceSites
|
||||
import sys
|
||||
|
||||
try:
|
||||
import cherrypy
|
||||
except:
|
||||
print "Could not import the cherrypy module! Try 'apt-get install python-cherrypy'."
|
||||
sys.exit(1)
|
||||
|
||||
class CryptoBoxWebserver:
|
||||
'''this class starts the cherryp webserver and serves the single sites'''
|
||||
|
||||
def __init__(self):
|
||||
cherrypy.root = WebInterfaceSites.WebInterfaceSites()
|
||||
#expose static content:
|
||||
#I currently have no idea how to cleanly extract the stylesheet path from
|
||||
#the config object without an extra CryptoBox.CryptoBoxProps instance.
|
||||
#perhaps put config handling into a seperate class in CryptoBox.py?
|
||||
#
|
||||
# the following manual mapping is necessary, as we may not use relative
|
||||
# paths in the config file
|
||||
cherrypy.config.configMap.update({
|
||||
"/cryptobox-misc": {
|
||||
"staticFilter.on" : True,
|
||||
"staticFilter.dir": os.path.abspath("../www-data" )}
|
||||
})
|
||||
|
||||
def start(self):
|
||||
# just use this config, when we're started directly
|
||||
cherrypy.config.update(file = "cryptoboxwebserver.conf")
|
||||
cherrypy.server.start()
|
||||
|
||||
if __name__ == "__main__":
|
||||
cbw = CryptoBoxWebserver()
|
||||
cbw.start()
|
||||
|
67
bin/Plugins.py
Normal file
|
@ -0,0 +1,67 @@
|
|||
# $Id$
|
||||
|
||||
import imp
|
||||
import os
|
||||
import logging
|
||||
|
||||
|
||||
class PluginManager:
|
||||
"""manage available plugins"""
|
||||
|
||||
def __init__(self, cbox, plugin_dirs="."):
|
||||
self.cbox = cbox
|
||||
self.log = logging.getLogger("CryptoBox")
|
||||
if hasattr(plugin_dirs, "__iter__"):
|
||||
self.plugin_dirs = [os.path.abspath(dir) for dir in plugin_dirs]
|
||||
else:
|
||||
self.plugin_dirs = [os.path.abspath(plugin_dirs)]
|
||||
self.pluginList = self.__getAllPlugins()
|
||||
|
||||
|
||||
def getPlugins(self):
|
||||
return self.pluginList[:]
|
||||
|
||||
|
||||
def getPlugin(self, name):
|
||||
for p in self.pluginList[:]:
|
||||
if p.getName() == name:
|
||||
return p
|
||||
return None
|
||||
|
||||
|
||||
def __getAllPlugins(self):
|
||||
list = []
|
||||
for plfile in self.__getPluginFiles():
|
||||
list.append(self.__getPluginClass(os.path.basename(plfile)[:-3]))
|
||||
return list
|
||||
|
||||
|
||||
def __getPluginClass(self, name):
|
||||
for plfile in self.__getPluginFiles():
|
||||
if name == os.path.basename(plfile)[:-3]:
|
||||
try:
|
||||
pl_class = getattr(imp.load_source(name, plfile), name)
|
||||
except AttributeError:
|
||||
return None
|
||||
return pl_class(self.cbox, os.path.dirname(plfile))
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
def __getPluginFiles(self):
|
||||
result = []
|
||||
for dir in [os.path.abspath(e) for e in self.plugin_dirs if os.access(e, os.R_OK) and os.path.isdir(e)]:
|
||||
for plname in [f for f in os.listdir(dir)]:
|
||||
pldir = os.path.join(dir, plname)
|
||||
plfile = os.path.join(pldir, plname + ".py")
|
||||
if os.path.isfile(plfile) and os.access(plfile, os.R_OK):
|
||||
result.append(plfile)
|
||||
return result
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
x = PluginManager(None, "../plugins")
|
||||
for a in x.getPlugins():
|
||||
if not a is None:
|
||||
print "Plugin: %s" % a.getName()
|
||||
|
136
bin/WebInterfaceDataset.py
Normal file
|
@ -0,0 +1,136 @@
|
|||
import os
|
||||
import CryptoBoxContainer
|
||||
import CryptoBoxTools
|
||||
|
||||
## useful constant for some functions
|
||||
CONT_TYPES = CryptoBoxContainer.CryptoBoxContainer.Types
|
||||
|
||||
class WebInterfaceDataset(dict):
|
||||
"""this class contains all data that should be available for the clearsilver
|
||||
templates
|
||||
"""
|
||||
|
||||
def __init__(self, cbox, prefs, plugins):
|
||||
self.prefs = prefs
|
||||
self.cbox = cbox
|
||||
self.__setConfigValues()
|
||||
self.plugins = plugins
|
||||
self.setCryptoBoxState()
|
||||
self.setPluginData()
|
||||
self.setContainersState()
|
||||
|
||||
|
||||
def setCryptoBoxState(self):
|
||||
import cherrypy
|
||||
self["Data.Version"] = self.cbox.VERSION
|
||||
langs = self.cbox.getAvailableLanguages()
|
||||
langs.sort()
|
||||
for (index, lang) in enumerate(langs):
|
||||
self.cbox.log.info("language loaded: %s" % lang)
|
||||
self["Data.Languages.%d.name" % index] = lang
|
||||
self["Data.Languages.%d.link" % index] = self.__getLanguageName(lang)
|
||||
try:
|
||||
self["Data.ScriptURL.Prot"] = cherrypy.request.scheme
|
||||
host = cherrypy.request.headers["Host"]
|
||||
self["Data.ScriptURL.Host"] = host.split(":",1)[0]
|
||||
complete_url = "%s://%s" % (self["Data.ScriptURL.Prot"], self["Data.ScriptURL.Host"])
|
||||
try:
|
||||
port = int(host.split(":",1)[1])
|
||||
complete_url += ":%s" % port
|
||||
except (IndexError, ValueError):
|
||||
if cherrypy.request.scheme == "http":
|
||||
port = 80
|
||||
elif cherrypy.request.scheme == "https":
|
||||
port = 443
|
||||
else:
|
||||
## unknown scheme -> port 0
|
||||
self.cbox.log.info("unknown protocol scheme used: %s" % (cherrypy.request.scheme,))
|
||||
port = 0
|
||||
self["Data.ScriptURL.Port"] = port
|
||||
## retrieve the relative address of the CGI (or the cherrypy base address)
|
||||
## remove the last part of the url and add a slash
|
||||
path = "/".join(cherrypy.request.path.split("/")[:-1]) + "/"
|
||||
self["Data.ScriptURL.Path"] = path
|
||||
complete_url += path
|
||||
self["Data.ScriptURL"] = complete_url
|
||||
except AttributeError:
|
||||
self["Data.ScriptURL"] = ""
|
||||
|
||||
|
||||
def setCurrentDiskState(self, device):
|
||||
for container in self.cbox.getContainerList():
|
||||
if container.getDevice() == device:
|
||||
isEncrypted = (container.getType() == CONT_TYPES["luks"]) and 1 or 0
|
||||
isPlain = (container.getType() == CONT_TYPES["plain"]) and 1 or 0
|
||||
isMounted = container.isMounted() and 1 or 0
|
||||
self["Data.CurrentDisk.device"] = container.getDevice()
|
||||
self["Data.CurrentDisk.name"] = container.getName()
|
||||
self["Data.CurrentDisk.encryption"] = isEncrypted
|
||||
self["Data.CurrentDisk.plaintext"] = isPlain
|
||||
self["Data.CurrentDisk.active"] = isMounted
|
||||
self["Data.CurrentDisk.size"] = CryptoBoxTools.getBlockDeviceSizeHumanly(container.getDevice())
|
||||
if isMounted:
|
||||
(size, avail, used) = container.getCapacity()
|
||||
percent = used / size
|
||||
self["Data.CurrentDisk.capacity.used"] = used
|
||||
self["Data.CurrentDisk.capacity.free"] = avail
|
||||
self["Data.CurrentDisk.capacity.size"] = size
|
||||
self["Data.CurrentDisk.capacity.percent"] = percent
|
||||
self["Settings.LinkAttrs.device"] = device
|
||||
|
||||
|
||||
def setContainersState(self):
|
||||
avail_counter = 0
|
||||
active_counter = 0
|
||||
for container in self.cbox.getContainerList():
|
||||
## useful if the container was changed during an action
|
||||
container.resetObject()
|
||||
isEncrypted = (container.getType() == CONT_TYPES["luks"]) and 1 or 0
|
||||
isPlain = (container.getType() == CONT_TYPES["plain"]) and 1 or 0
|
||||
isMounted = container.isMounted() and 1 or 0
|
||||
self["Data.Disks.%d.device" % avail_counter] = container.getDevice()
|
||||
self["Data.Disks.%d.name" % avail_counter] = container.getName()
|
||||
self["Data.Disks.%d.encryption" % avail_counter] = isEncrypted
|
||||
self["Data.Disks.%d.plaintext" % avail_counter] = isPlain
|
||||
self["Data.Disks.%d.active" % avail_counter] = isMounted
|
||||
self["Data.Disks.%d.size" % avail_counter] = CryptoBoxTools.getBlockDeviceSizeHumanly(container.getDevice())
|
||||
if isMounted: active_counter += 1
|
||||
avail_counter += 1
|
||||
self["Data.activeDisksCount"] = active_counter
|
||||
|
||||
|
||||
def setPluginData(self):
|
||||
for p in self.plugins:
|
||||
lang_data = p.getLanguageData()
|
||||
entryName = "Settings.PluginList." + p.getName()
|
||||
self[entryName] = p.getName()
|
||||
self[entryName + ".Link"] = lang_data.getValue("Link", p.getName())
|
||||
self[entryName + ".Rank"] = p.getRank()
|
||||
self[entryName + ".RequestAuth"] = p.isAuthRequired() and "1" or "0"
|
||||
self[entryName + ".Enabled"] = p.isEnabled() and "1" or "0"
|
||||
for a in p.pluginCapabilities:
|
||||
self[entryName + ".Types." + a] = "1"
|
||||
|
||||
|
||||
def __setConfigValues(self):
|
||||
self["Settings.TemplateDir"] = os.path.abspath(self.prefs["Locations"]["TemplateDir"])
|
||||
self["Settings.LanguageDir"] = os.path.abspath(self.prefs["Locations"]["LangDir"])
|
||||
self["Settings.DocDir"] = os.path.abspath(self.prefs["Locations"]["DocDir"])
|
||||
self["Settings.Stylesheet"] = self.prefs["WebSettings"]["Stylesheet"]
|
||||
self["Settings.Language"] = self.prefs["WebSettings"]["Language"]
|
||||
self["Settings.PluginDir"] = self.prefs["Locations"]["PluginDir"]
|
||||
self["Settings.SettingsDir"] = self.prefs["Locations"]["SettingsDir"]
|
||||
|
||||
|
||||
def __getLanguageName(self, lang):
|
||||
try:
|
||||
import neo_cgi, neo_util, neo_cs
|
||||
except:
|
||||
raise CryptoBoxExceptions.CBEnvironmentError("couldn't import 'neo_*'! Try 'apt-get install python-clearsilver'.")
|
||||
hdf_path = os.path.join(self.prefs["Locations"]["LangDir"], lang + ".hdf")
|
||||
hdf = neo_util.HDF()
|
||||
hdf.readFile(hdf_path)
|
||||
return hdf.getValue("Name",lang)
|
||||
|
||||
|
||||
|
427
bin/WebInterfaceSites.py
Executable file
|
@ -0,0 +1,427 @@
|
|||
import CryptoBox
|
||||
import WebInterfaceDataset
|
||||
import re
|
||||
import Plugins
|
||||
from CryptoBoxExceptions import *
|
||||
import cherrypy
|
||||
import types
|
||||
import os
|
||||
|
||||
try:
|
||||
import neo_cgi, neo_util, neo_cs
|
||||
except ImportError:
|
||||
errorMsg = "Could not import clearsilver module. Try 'apt-get install python-clearsilver'."
|
||||
self.log.error(errorMsg)
|
||||
sys.stderr.write(errorMsg)
|
||||
raise ImportError, errorMsg
|
||||
|
||||
|
||||
|
||||
class PluginIconHandler:
|
||||
|
||||
def __init__(self, plugins):
|
||||
for plugin in plugins.getPlugins():
|
||||
if not plugin: continue
|
||||
plname = plugin.getName()
|
||||
## expose the getIcon function of this plugin
|
||||
setattr(self, plname, plugin.getIcon)
|
||||
|
||||
|
||||
|
||||
class WebInterfaceSites:
|
||||
'''
|
||||
'''
|
||||
|
||||
## this template is used under strange circumstances
|
||||
defaultTemplate = "empty"
|
||||
|
||||
|
||||
def __init__(self):
|
||||
import logging
|
||||
self.cbox = CryptoBox.CryptoBoxProps()
|
||||
self.log = logging.getLogger("CryptoBox")
|
||||
self.prefs = self.cbox.prefs
|
||||
self.__resetDataset()
|
||||
|
||||
|
||||
def __resetDataset(self):
|
||||
"""this method has to be called at the beginning of every "site" action
|
||||
important: only at the beginning of an action (to not loose information)
|
||||
important: for _every_ "site" action (cherrypy is stateful)
|
||||
also take care for the plugins, as they also contain datasets
|
||||
"""
|
||||
self.__loadPlugins()
|
||||
self.dataset = WebInterfaceDataset.WebInterfaceDataset(self.cbox, self.prefs, self.pluginList.getPlugins())
|
||||
## publish plugin icons
|
||||
self.icons = PluginIconHandler(self.pluginList)
|
||||
self.icons.exposed = True
|
||||
## check, if a configuration partition has become available
|
||||
self.cbox.prefs.preparePartition()
|
||||
|
||||
|
||||
def __loadPlugins(self):
|
||||
self.pluginList = Plugins.PluginManager(self.cbox, self.prefs["Locations"]["PluginDir"])
|
||||
for plugin in self.pluginList.getPlugins():
|
||||
if not plugin: continue
|
||||
plname = plugin.getName()
|
||||
if plugin.isEnabled():
|
||||
self.cbox.log.info("Plugin '%s' loaded" % plname)
|
||||
## this should be the "easiest" way to expose all plugins as URLs
|
||||
setattr(self, plname, self.return_plugin_action(plugin))
|
||||
setattr(getattr(self, plname), "exposed", True)
|
||||
# TODO: check, if this really works - for now the "stream_response" feature seems to be broken
|
||||
#setattr(getattr(self, plname), "stream_respones", True)
|
||||
else:
|
||||
self.cbox.log.info("Plugin '%s' is disabled" % plname)
|
||||
## remove the plugin, if it was active before
|
||||
setattr(self, plname, None)
|
||||
|
||||
|
||||
## this is a function decorator to check authentication
|
||||
## it has to be defined before any page definition requiring authentification
|
||||
def __requestAuth(self=None):
|
||||
def check_credentials(site):
|
||||
def _inner_wrapper(self, *args, **kargs):
|
||||
import base64
|
||||
## define a "non-allowed" function
|
||||
user, password = None, None
|
||||
try:
|
||||
resp = cherrypy.request.headers["Authorization"][6:] # ignore "Basic "
|
||||
(user, password) = base64.b64decode(resp).split(":",1)
|
||||
except KeyError:
|
||||
## no "authorization" header was sent
|
||||
pass
|
||||
except TypeError:
|
||||
## invalid base64 string
|
||||
pass
|
||||
except AttributeError:
|
||||
## no cherrypy response header defined
|
||||
pass
|
||||
authDict = self.cbox.prefs.userDB["admins"]
|
||||
if user in authDict.keys():
|
||||
if self.cbox.prefs.userDB.getDigest(password) == authDict[user]:
|
||||
## ok: return the choosen page
|
||||
self.cbox.log.info("access granted for: %s" % user)
|
||||
return site(self, *args, **kargs)
|
||||
else:
|
||||
self.cbox.log.info("wrong password supplied for: %s" % user)
|
||||
else:
|
||||
self.cbox.log.info("unknown user: %s" % str(user))
|
||||
## wrong credentials: return "access denied"
|
||||
cherrypy.response.headers["WWW-Authenticate"] = '''Basic realm="CryptoBox"'''
|
||||
cherrypy.response.status = 401
|
||||
return self.__render("access_denied")
|
||||
return _inner_wrapper
|
||||
return check_credentials
|
||||
|
||||
|
||||
######################################################################
|
||||
## put real sites down here and don't forget to expose them at the end
|
||||
|
||||
|
||||
@cherrypy.expose
|
||||
def index(self, weblang=""):
|
||||
self.__resetDataset()
|
||||
self.__setWebLang(weblang)
|
||||
self.__checkEnvironment()
|
||||
## do not forget the language!
|
||||
param_dict = {"weblang":weblang}
|
||||
## render "disks" plugin by default
|
||||
return self.return_plugin_action(self.pluginList.getPlugin("disks"))(**param_dict)
|
||||
|
||||
|
||||
def return_plugin_action(self, plugin):
|
||||
def handler(self, **args):
|
||||
self.__resetDataset()
|
||||
self.__checkEnvironment()
|
||||
args_orig = dict(args)
|
||||
## set web interface language
|
||||
try:
|
||||
self.__setWebLang(args["weblang"])
|
||||
del args["weblang"]
|
||||
except KeyError:
|
||||
self.__setWebLang("")
|
||||
## we always read the "device" setting - otherwise volume-plugin links
|
||||
## would not work easily (see "volume_props" linking to "format_fs")
|
||||
## it will get ignored for non-volume plugins
|
||||
try:
|
||||
plugin.device = None
|
||||
if self.__setDevice(args["device"]):
|
||||
plugin.device = args["device"]
|
||||
del args["device"]
|
||||
except KeyError:
|
||||
pass
|
||||
## check the device argument of volume plugins
|
||||
if "volume" in plugin.pluginCapabilities:
|
||||
## initialize the dataset of the selected device if necessary
|
||||
if plugin.device:
|
||||
self.dataset.setCurrentDiskState(plugin.device)
|
||||
else:
|
||||
## invalid (or missing) device setting
|
||||
return self.__render(self.defaultTemplate)
|
||||
## check if there is a "redirect" setting - this will override the return
|
||||
## value of the doAction function (e.g. useful for umount-before-format)
|
||||
try:
|
||||
if args["redirect"]:
|
||||
override_nextTemplate = { "plugin":args["redirect"] }
|
||||
if "volume" in plugin.pluginCapabilities:
|
||||
override_nextTemplate["values"] = {"device":plugin.device}
|
||||
del args["redirect"]
|
||||
except KeyError:
|
||||
override_nextTemplate = None
|
||||
## call the plugin handler
|
||||
nextTemplate = plugin.doAction(**args)
|
||||
## for 'volume' plugins: reread the dataset of the current disk
|
||||
## additionally: set the default template for plugins
|
||||
if "volume" in plugin.pluginCapabilities:
|
||||
## maybe the state of the current volume was changed?
|
||||
self.dataset.setCurrentDiskState(plugin.device)
|
||||
if not nextTemplate: nextTemplate = { "plugin":"volume_mount", "values":{"device":plugin.device}}
|
||||
else:
|
||||
## maybe a non-volume plugin changed some plugin settings (e.g. plugin_manager)
|
||||
self.dataset.setPluginData()
|
||||
## update the container hdf-dataset (maybe a plugin changed the state of a container)
|
||||
self.dataset.setContainersState()
|
||||
## default page for non-volume plugins is the disk selection
|
||||
if not nextTemplate: nextTemplate = { "plugin":"disks", "values":{} }
|
||||
## was a redirect requested?
|
||||
if override_nextTemplate:
|
||||
nextTemplate = override_nextTemplate
|
||||
## if another plugins was choosen for 'nextTemplate', then do it!
|
||||
if isinstance(nextTemplate, types.DictType) \
|
||||
and "plugin" in nextTemplate.keys() \
|
||||
and "values" in nextTemplate.keys() \
|
||||
and self.pluginList.getPlugin(nextTemplate["plugin"]):
|
||||
valueDict = dict(nextTemplate["values"])
|
||||
## force the current weblang attribute - otherwise it gets lost
|
||||
valueDict["weblang"] = self.dataset["Settings.Language"]
|
||||
new_plugin = self.pluginList.getPlugin(nextTemplate["plugin"])
|
||||
return self.return_plugin_action(new_plugin)(**valueDict)
|
||||
## save the currently active plugin name
|
||||
self.dataset["Data.ActivePlugin"] = plugin.getName()
|
||||
return self.__render(nextTemplate, plugin)
|
||||
## apply authentication?
|
||||
if plugin.isAuthRequired():
|
||||
return lambda **args: self.__requestAuth()(handler)(self, **args)
|
||||
else:
|
||||
return lambda **args: handler(self, **args)
|
||||
|
||||
|
||||
## test authentication
|
||||
@cherrypy.expose
|
||||
@__requestAuth
|
||||
def test(self, weblang=""):
|
||||
self.__resetDataset()
|
||||
self.__setWebLang(weblang)
|
||||
self.__checkEnvironment()
|
||||
return "test passed"
|
||||
|
||||
|
||||
@cherrypy.expose
|
||||
def test_stream(self):
|
||||
"""just for testing purposes - to check if the "stream_response" feature
|
||||
actually works - for now (September 02006) it does not seem to be ok"""
|
||||
import time
|
||||
yield "<html><head><title>neu</title></head><body><p><ul>"
|
||||
for a in range(10):
|
||||
yield "<li>yes: %d - %s</li>" % (a, str(time.time()))
|
||||
time.sleep(1)
|
||||
yield "</ul></p></html>"
|
||||
|
||||
|
||||
|
||||
##################### input checker ##########################
|
||||
|
||||
def __checkEnvironment(self):
|
||||
"""here we should place all interesting checks to inform the user of problems
|
||||
|
||||
examples are: non-https, readonly-config, ...
|
||||
"""
|
||||
## TODO: maybe add an option "mount"?
|
||||
if self.cbox.prefs.requiresPartition() and not self.cbox.prefs.getActivePartition():
|
||||
self.dataset["Data.EnvironmentWarning"] = "ReadOnlyConfig"
|
||||
# TODO: turn this on soon (add "not") - for now it is annoying
|
||||
if self.__checkHTTPS():
|
||||
self.dataset["Data.EnvironmentWarning"] = "NoSSL"
|
||||
|
||||
|
||||
def __checkHTTPS(self):
|
||||
## check the request scheme
|
||||
if cherrypy.request.scheme == "https": return True
|
||||
## check an environment setting - this is quite common behind proxies
|
||||
try:
|
||||
if os.environ["HTTPS"]: return True
|
||||
except KeyError:
|
||||
pass
|
||||
## check http header TODO (check pound for the name)
|
||||
try:
|
||||
if cherrypy.request.headers["TODO"]: return True
|
||||
except KeyError:
|
||||
pass
|
||||
## the connection seems to be unencrypted
|
||||
return False
|
||||
|
||||
|
||||
def __setWebLang(self, value):
|
||||
guess = value
|
||||
availLangs = self.cbox.getAvailableLanguages()
|
||||
## no language specified: check browser language
|
||||
if not guess:
|
||||
guess = self.__getPreferredBrowserLanguage(availLangs)
|
||||
## no preferred language or invalid language?
|
||||
if not guess \
|
||||
or not guess in availLangs \
|
||||
or re.search(u'\W', guess):
|
||||
## warn only for invalid languages
|
||||
if not guess is None:
|
||||
self.cbox.log.info("invalid language choosen: %s" % guess)
|
||||
guess = self.prefs["WebSettings"]["Language"]
|
||||
## maybe the language is still not valid
|
||||
if not guess in availLangs:
|
||||
self.log.warn("the configured language is invalid: %s" % guess)
|
||||
guess = "en"
|
||||
## maybe there is no english dataset???
|
||||
if not guess in availLangs:
|
||||
self.log.warn("couldn't find the english dataset")
|
||||
guess = availLangs[0]
|
||||
self.dataset["Settings.Language"] = guess
|
||||
## we only have to save it, if it was specified correctly and explicitly
|
||||
if value == guess:
|
||||
self.dataset["Settings.LinkAttrs.weblang"] = guess
|
||||
|
||||
|
||||
def __getPreferredBrowserLanguage(self, availLangs):
|
||||
"""guess the preferred language of the user (as sent by the browser)
|
||||
take the first language, that is part of 'availLangs'
|
||||
"""
|
||||
try:
|
||||
pref_lang_header = cherrypy.request.headers["Accept-Language"]
|
||||
except KeyError:
|
||||
## no language header was specified
|
||||
return None
|
||||
## this could be a typical 'Accept-Language' header:
|
||||
## de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
|
||||
regex = re.compile(u"\w+(-\w+)?(;q=[\d\.]+)?$")
|
||||
pref_langs = [e.split(";",1)[0]
|
||||
for e in pref_lang_header.split(",")
|
||||
if regex.match(e)]
|
||||
## is one of these preferred languages available?
|
||||
for lang in pref_langs:
|
||||
if lang in availLangs: return lang
|
||||
## we try to be nice: also look for "de" if "de-de" was specified ...
|
||||
for lang in pref_langs:
|
||||
## use only the first part of the language
|
||||
short_lang = lang.split("-",1)[0]
|
||||
if short_lang in availLangs: return short_lang
|
||||
## we give up
|
||||
return None
|
||||
|
||||
|
||||
def __setDevice(self, device):
|
||||
if device and re.match(u'[\w /\-]+$', device) and self.cbox.getContainer(device):
|
||||
self.log.debug("select device: %s" % device)
|
||||
return True
|
||||
else:
|
||||
self.log.warn("invalid device: %s" % device)
|
||||
self.dataset["Data.Warning"] = "InvalidDevice"
|
||||
return False
|
||||
|
||||
|
||||
def __checkVolumeName(self, name):
|
||||
if name and re.match(u'[\w \-]+$', name):
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
|
||||
def __getLanguageValue(self, value):
|
||||
hdf = self.__getLanguageData(self.dataset["Settings.Language"])
|
||||
return hdf.getValue(value, "")
|
||||
|
||||
|
||||
def __getLanguageData(self, web_lang="en"):
|
||||
default_lang = "en"
|
||||
conf_lang = self.prefs["WebSettings"]["Language"]
|
||||
hdf = neo_util.HDF()
|
||||
langDir = os.path.abspath(self.prefs["Locations"]["LangDir"])
|
||||
langFiles = []
|
||||
## first: read default language (en)
|
||||
if (default_lang != conf_lang) and (default_lang != web_lang):
|
||||
langFiles.append(os.path.join(langDir, default_lang + ".hdf"))
|
||||
## second: read language as defined in the config file
|
||||
if (conf_lang != web_lang):
|
||||
langFiles.append(os.path.join(langDir, conf_lang + ".hdf"))
|
||||
## third: read language as configured via web interface
|
||||
langFiles.append(os.path.join(langDir, web_lang + ".hdf"))
|
||||
for langFile in langFiles:
|
||||
if os.access(langFile, os.R_OK):
|
||||
hdf.readFile(langFile)
|
||||
else:
|
||||
log.warn("Couldn't read language file: %s" % langFile)
|
||||
return hdf
|
||||
|
||||
|
||||
def __render(self, renderInfo, plugin=None):
|
||||
'''renders from clearsilver templates and returns the resulting html
|
||||
'''
|
||||
## is renderInfo a string (filename of the template) or a dictionary?
|
||||
if type(renderInfo) == types.DictType:
|
||||
template = renderInfo["template"]
|
||||
if renderInfo.has_key("generator"):
|
||||
generator = renderInfo["generator"]
|
||||
else:
|
||||
generator = False
|
||||
else:
|
||||
(template, generator) = (renderInfo, None)
|
||||
|
||||
## load the language data
|
||||
hdf = neo_util.HDF()
|
||||
hdf.copy("Lang", self.__getLanguageData(self.dataset["Settings.Language"]))
|
||||
|
||||
## first: assume, that the template file is in the global template directory
|
||||
self.dataset["Settings.TemplateFile"] = os.path.abspath(os.path.join(self.prefs["Locations"]["TemplateDir"], template + ".cs"))
|
||||
|
||||
if plugin:
|
||||
## check, if the plugin provides the template file -> overriding
|
||||
plugin_cs_file = plugin.getTemplateFileName(template)
|
||||
if plugin_cs_file:
|
||||
self.dataset["Settings.TemplateFile"] = plugin_cs_file
|
||||
|
||||
## add the current state of the plugins to the hdf dataset
|
||||
self.dataset["Data.Status.Plugins.%s" % plugin.getName()] = plugin.getStatus()
|
||||
## load the language data
|
||||
pl_lang = plugin.getLanguageData(self.dataset["Settings.Language"])
|
||||
if pl_lang:
|
||||
hdf.copy("Lang.Plugins.%s" % plugin.getName(), pl_lang)
|
||||
## load the dataset of the plugin
|
||||
plugin.loadDataSet(hdf)
|
||||
|
||||
self.log.info("rendering site: " + template)
|
||||
|
||||
cs_path = os.path.abspath(os.path.join(self.prefs["Locations"]["TemplateDir"], "main.cs"))
|
||||
if not os.access(cs_path, os.R_OK):
|
||||
log.error("Couldn't read clearsilver file: %s" % cs_path)
|
||||
yield "Couldn't read clearsilver file: %s" % cs_path
|
||||
return
|
||||
|
||||
self.log.debug(self.dataset)
|
||||
for key in self.dataset.keys():
|
||||
hdf.setValue(key,str(self.dataset[key]))
|
||||
cs = neo_cs.CS(hdf)
|
||||
cs.parseFile(cs_path)
|
||||
|
||||
## is there a generator containing additional information?
|
||||
if generator is None:
|
||||
## all content in one flush
|
||||
yield cs.render()
|
||||
else:
|
||||
content_generate = generator()
|
||||
dummy_line = """<!-- CONTENT_DUMMY -->"""
|
||||
## now we do it linewise - checking for the content marker
|
||||
for line in cs.render().splitlines():
|
||||
if line.find(dummy_line) != -1:
|
||||
yield line.replace(dummy_line, content_generate.next())
|
||||
else:
|
||||
yield line + "\n"
|
||||
|
||||
|
77
bin/WebInterfaceTestClass.py
Normal file
|
@ -0,0 +1,77 @@
|
|||
"""
|
||||
super class of all web interface unittests for the cryptobox
|
||||
|
||||
just inherit this class and add some test functions
|
||||
"""
|
||||
|
||||
import unittest
|
||||
import twill
|
||||
import cherrypy
|
||||
import WebInterfaceSites
|
||||
|
||||
## we do the following, for easy surfing
|
||||
## e.g. use: cbx.go(your_url)
|
||||
## commands api: http://twill.idyll.org/commands.html
|
||||
CBXHOST="localhost"
|
||||
CBXPORT=8081
|
||||
CBX_URL="http://%s:%d/" % (CBXHOST, CBXPORT)
|
||||
LOG_FILE="/tmp/twill.log"
|
||||
|
||||
class WebInterfaceTestClass(unittest.TestCase):
|
||||
'''this class checks the webserver, using "twill"
|
||||
|
||||
the tests in this class are from the browsers point of view, so not
|
||||
really unittests.
|
||||
fetch twill from: http://twill.idyll.org
|
||||
one way to manually run twill code is through the python
|
||||
interpreter commandline e.g.:
|
||||
|
||||
import twill
|
||||
twill.shell.main()
|
||||
go http://localhost:8080
|
||||
find "my very special html content"
|
||||
help
|
||||
'''
|
||||
|
||||
def setUp(self):
|
||||
'''configures the cherrypy server that it works nice with twill
|
||||
'''
|
||||
cherrypy.config.update({
|
||||
'server.logToScreen' : False,
|
||||
'autoreload.on': False,
|
||||
'server.threadPool': 1,
|
||||
'server.environment': 'production',
|
||||
})
|
||||
cherrypy.root = WebInterfaceSites.WebInterfaceSites()
|
||||
cherrypy.server.start(initOnly=True, serverClass=None)
|
||||
|
||||
from cherrypy._cpwsgi import wsgiApp
|
||||
twill.add_wsgi_intercept(CBXHOST, CBXPORT, lambda: wsgiApp)
|
||||
|
||||
# grab the output of twill commands
|
||||
self.output = open(LOG_FILE,"a")
|
||||
twill.set_output(self.output)
|
||||
self.cmd = twill.commands
|
||||
self.URL = CBX_URL
|
||||
self.cbox = cherrypy.root.cbox
|
||||
self.globals, self.locals = twill.namespaces.get_twill_glocals()
|
||||
|
||||
|
||||
def tearDown(self):
|
||||
'''clean up the room when leaving'''
|
||||
# remove intercept.
|
||||
twill.remove_wsgi_intercept(CBXHOST, CBXPORT)
|
||||
# shut down the cherrypy server.
|
||||
cherrypy.server.stop()
|
||||
self.output.close()
|
||||
|
||||
|
||||
def __get_soup():
|
||||
browser = twill.commands.get_browser()
|
||||
soup = BeautifulSoup(browser.get_html())
|
||||
return soup
|
||||
|
||||
|
||||
def register_auth(self, url, user="admin", password="admin"):
|
||||
self.cmd.add_auth("CryptoBox", url, user, password)
|
||||
|
18
bin/coding_guidelines.txt
Normal file
|
@ -0,0 +1,18 @@
|
|||
Maybe we can add some notes here to get a consistent coding experience :)
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
comments:
|
||||
- should be usable for pydoc
|
||||
- ''' or """ at the beginning of every class/method
|
||||
- ## for longterm comments, that are useful for understanding
|
||||
- #blabla for codelines, that are out for experimenting and might be used later again
|
||||
|
||||
error handling:
|
||||
- unspecific error handling is evil (try: "grep -r except: .")
|
||||
|
||||
unit testing:
|
||||
- first write a unittest and then write the relating code until the unittest stops failing :)
|
||||
- 'unittests.ClassName.py' should contain all tests for 'ClassName.py'
|
||||
- commits with broken unit tests are evil (fix or disable the code (not the test ;) ))
|
||||
|
83
bin/cryptobox.conf
Normal file
|
@ -0,0 +1,83 @@
|
|||
[Main]
|
||||
|
||||
# comma separated list of possible prefixes for accesible devices
|
||||
# beware: .e.g "/dev/hd" grants access to _all_ harddisks
|
||||
AllowedDevices = /dev/loop, /dev/ubdb
|
||||
|
||||
# use sepepate config partition? (1=yes / 0=no)
|
||||
UseConfigPartition = 1
|
||||
|
||||
# the default name prefix of not unnamed containers
|
||||
DefaultVolumePrefix = "Disk "
|
||||
|
||||
# which cipher should cryptsetup-luks use?
|
||||
#TODO: uml does not support this module - DefaultCipher = aes-cbc-essiv:sha256
|
||||
DefaultCipher = aes-plain
|
||||
|
||||
# label of the configuration partition (you should never change this)
|
||||
ConfigVolumeLabel = cbox_config
|
||||
|
||||
|
||||
[Locations]
|
||||
# where should we mount volumes?
|
||||
# this directory must be writeable by the cryptobox user (see above)
|
||||
MountParentDir = /var/cache/cryptobox/mnt
|
||||
|
||||
# settings directory: contains name database and plugin configuration
|
||||
SettingsDir = /var/cache/cryptobox/settings
|
||||
|
||||
# where are the clearsilver templates?
|
||||
#TemplateDir = /usr/share/cryptobox/templates
|
||||
TemplateDir = ../templates
|
||||
|
||||
# path to language files
|
||||
#LangDir = /usr/share/cryptobox/lang
|
||||
LangDir = ../lang
|
||||
|
||||
# path to documentation files
|
||||
#DocDir = /usr/share/doc/cryptobox/html
|
||||
DocDir = ../doc/html
|
||||
|
||||
# path to the plugin directory
|
||||
#PluginDir = /usr/share/cryptobox/plugins
|
||||
PluginDir = ../plugins
|
||||
|
||||
|
||||
|
||||
[Log]
|
||||
# possible values are "debug", "info", "warn" and "error" or numbers from
|
||||
# 0 (debug) to 7 (error)
|
||||
Level = debug
|
||||
|
||||
# where to write the log messages to?
|
||||
# possible values are: file
|
||||
# syslog support will be added later
|
||||
Destination = file
|
||||
|
||||
# depending on the choosen destination (see above) you may select
|
||||
# details. Possible values for the different destinations are:
|
||||
# file: $FILENAME
|
||||
# syslog: $LOG_FACILITY
|
||||
#Details = /var/log/cryptobox.log
|
||||
Details = ./cryptobox.log
|
||||
|
||||
|
||||
[WebSettings]
|
||||
# URL of default stylesheet
|
||||
Stylesheet = /cryptobox-misc/cryptobox.css
|
||||
|
||||
# default language
|
||||
Language = de
|
||||
|
||||
|
||||
[Programs]
|
||||
cryptsetup = /sbin/cryptsetup
|
||||
mkfs-data = /sbin/mkfs.ext3
|
||||
blkid = /sbin/blkid
|
||||
blockdev = /sbin/blockdev
|
||||
mount = /bin/mount
|
||||
umount = /bin/umount
|
||||
super = /usr/bin/super
|
||||
# this is the "program" name as defined in /etc/super.tab
|
||||
CryptoBoxRootActions = CryptoBoxRootActions
|
||||
|
39
bin/cryptoboxd
Executable file
|
@ -0,0 +1,39 @@
|
|||
#!/bin/sh
|
||||
|
||||
#TODO: CBXPATH=/usr/lib/cryptobox
|
||||
CBXPATH=$(pwd)
|
||||
CBXSERVER=CryptoBoxWebserver.py
|
||||
PIDFILE=/var/run/cryptobox.pid
|
||||
DAEMON=/usr/bin/python2.4
|
||||
DAEMON_OPTS=${CBXPATH}/CryptoBoxWebserver.py
|
||||
NAME=cryptoboxd
|
||||
DESC="CryptoBox Daemon (webinterface)"
|
||||
#TODO: RUNAS=cryptobox
|
||||
RUNAS=$USERNAME
|
||||
|
||||
#test -x $DAEMON -a -f /etc/exports || exit 0
|
||||
|
||||
set -e
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
echo -n "Starting $DESC: "
|
||||
start-stop-daemon --background --chdir "$CBXPATH" --chuid "$RUNAS" --start --quiet --oknodo --user "$RUNAS" --make-pidfile --pidfile "$PIDFILE" --exec "$DAEMON" \
|
||||
-- $DAEMON_OPTS
|
||||
echo "$NAME."
|
||||
;;
|
||||
|
||||
stop)
|
||||
echo -n "Stopping $DESC: "
|
||||
#FIXME: this is the same as "killall python2.4"
|
||||
# using a pid file instead prevents problems, but does not kill children???
|
||||
start-stop-daemon --stop --oknodo --exec "$DAEMON"
|
||||
echo "$NAME."
|
||||
;;
|
||||
*)
|
||||
echo "Usage: $(basename $0) {start|stop}" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
17
bin/cryptoboxwebserver.conf
Normal file
|
@ -0,0 +1,17 @@
|
|||
[global]
|
||||
server.socketPort = 8080
|
||||
#server.environment = "production"
|
||||
server.environment = "development"
|
||||
server.logToScreen = True
|
||||
server.log_tracebacks = True
|
||||
server.threadPool = 1
|
||||
server.reverseDNS = False
|
||||
server.logFile = "cryptoboxwebserver.log"
|
||||
|
||||
[/favicon.ico]
|
||||
static_filter.on = True
|
||||
# TODO: use live-cd/live-cd-tree.d/var/www/favicon.ico
|
||||
static_filter.file = "/usr/share/doc/python-cherrypy/cherrypy/favicon.ico"
|
||||
|
||||
[/test_stream]
|
||||
stream_response = True
|
22
bin/do_unittests.sh
Executable file
|
@ -0,0 +1,22 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# run this script _before_ you do a commit and fix errors before uploading
|
||||
#
|
||||
|
||||
# check if /dev/loop1 is available - otherwise some tests will fail!
|
||||
if /sbin/losetup /dev/loop1 &>/dev/null
|
||||
then true
|
||||
else echo "misconfiguration detected: sorry - you need /dev/loop1 for the tests" >&2
|
||||
echo "just do the following:" >&2
|
||||
echo " dd if=/dev/zero of=test.img bs=1M count=1 seek=100" >&2
|
||||
echo " sudo /sbin/losetup /dev/loop1 test.img" >&2
|
||||
echo "then you can run the tests again ..." >&2
|
||||
echo >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# do the tests
|
||||
for a in unittests.*.py
|
||||
do testoob -v "$a"
|
||||
done
|
||||
|
2
bin/example-super.tab
Normal file
|
@ -0,0 +1,2 @@
|
|||
# adapt the following line to your local setup and add it to /etc/super.tab
|
||||
CryptoBoxRootActions /your/local/path/to/CryptoBoxRootActions.py yourUserName
|
116
bin/test.complete.CryptoBox.py
Executable file
|
@ -0,0 +1,116 @@
|
|||
#!/usr/bin/env python2.4
|
||||
|
||||
"""
|
||||
BEWARE: this script may overwrite the data of one of your loop devices. You
|
||||
should restrict the AllowedDevices directive in cryptobox.conf to exclude
|
||||
your precious black devices from being used by this script.
|
||||
|
||||
the following script runs a number of tests for different parts
|
||||
"""
|
||||
|
||||
from CryptoBox import CryptoBoxProps
|
||||
from CryptoBoxContainer import CryptoBoxContainer
|
||||
import sys
|
||||
|
||||
|
||||
def main():
|
||||
cb = CryptoBoxProps()
|
||||
|
||||
print "Confguration:"
|
||||
print "\tConfig file:\t\t%s" % (cb.prefs.prefs.filename, )
|
||||
print "\tAllowed devices:\t%s" % (cb.prefs["Main"]["AllowedDevices"], )
|
||||
|
||||
"""for e in cb.getContainerList(filterType=CryptoBoxContainer.Types["luks"]):"""
|
||||
for e in cb.getContainerList():
|
||||
print "\t\t%d\t\t%s - %s - %d" % (cb.getContainerList().index(e), e.getDevice(), e.getName(), e.getType())
|
||||
|
||||
if not cb.getContainerList() or len(cb.getContainerList()) < 1:
|
||||
print "no loop devices found for testing"
|
||||
sys.exit(1)
|
||||
|
||||
if len(cb.getContainerList()) > 1:
|
||||
print "I found more than one available loop device - I will stop now to avoid risking data loss."
|
||||
print "Please change the 'AllowedDevices' setting in 'cryptobox.conf' to reduce the number of allowed devices to only one."
|
||||
sys.exit(1)
|
||||
|
||||
testElement = cb.getContainerList()[0]
|
||||
print "\nRunning some tests now ..."
|
||||
if not plain_tests(testElement):
|
||||
print "some previous tests failed - we should stop now"
|
||||
sys.exit(1)
|
||||
luks_tests(testElement)
|
||||
|
||||
|
||||
" ***************** some functions ******************** "
|
||||
|
||||
def luks_tests(e):
|
||||
# umount if necessary
|
||||
try:
|
||||
e.umount()
|
||||
except "MountError":
|
||||
pass
|
||||
|
||||
e.create(e.Types["luks"], "alt")
|
||||
print "\tluks create:\tok"
|
||||
|
||||
e.changePassword("alt","neu")
|
||||
print "\tluks changepw:\tok"
|
||||
|
||||
e.setName("lalla")
|
||||
print "\tluks setName:\tok"
|
||||
|
||||
try:
|
||||
e.mount("neu")
|
||||
except "MountError":
|
||||
pass
|
||||
if e.isMounted(): print "\tluks mount:\tok"
|
||||
else: print "\tluks mount:\tfailed"
|
||||
|
||||
print "\tCapacity (size, free, used) [MB]:\t%s" % (e.getCapacity(), )
|
||||
|
||||
try:
|
||||
e.umount()
|
||||
except "MountError":
|
||||
pass
|
||||
if e.isMounted(): print "\tluks umount:\tfailed"
|
||||
else: print "\tluks umount:\tok"
|
||||
|
||||
if e.isMounted(): return False
|
||||
else: return True
|
||||
|
||||
|
||||
def plain_tests(e):
|
||||
# umount if necessary
|
||||
try:
|
||||
e.umount()
|
||||
except "MountError":
|
||||
pass
|
||||
|
||||
e.create(e.Types["plain"])
|
||||
print "\tplain create:\tok"
|
||||
|
||||
e.setName("plain-lili")
|
||||
print "\tplain setName:\tok"
|
||||
|
||||
try:
|
||||
e.mount()
|
||||
except "MountError":
|
||||
pass
|
||||
if e.isMounted(): print "\tplain mount:\tok"
|
||||
else: print "\tplain mount:\tfailed"
|
||||
|
||||
print "\tCapacity (size, free, used) [MB]:\t%s" % (e.getCapacity(), )
|
||||
|
||||
try:
|
||||
e.umount()
|
||||
except "MountError":
|
||||
pass
|
||||
if e.isMounted(): print "\tplain umount:\tfailed"
|
||||
else: print "\tplain umount:\tok"
|
||||
|
||||
if e.isMounted(): return False
|
||||
else: return True
|
||||
|
||||
# ************ main ****************
|
||||
|
||||
main()
|
23
bin/uml-setup.sh
Executable file
|
@ -0,0 +1,23 @@
|
|||
#!/bin/sh
|
||||
|
||||
ROOT_IMG=/home/lars/devel-stuff/devel-chroots/cryptobox.img
|
||||
TEST_IMG=test.img
|
||||
TEST_SIZE=256
|
||||
MEM_SIZE=128M
|
||||
|
||||
# Preparations:
|
||||
# echo "tun" >>/etc/modules
|
||||
# follow the instructions in /usr/share/doc/uml-utilities/README.Debian
|
||||
# add your user to the group 'uml-net'
|
||||
#
|
||||
|
||||
/sbin/ifconfig tap0 &>/dev/null || { echo "tap0 is not configured - read /usr/share/doc/uml-utilities/README.Debian for hints"; exit 1; }
|
||||
|
||||
|
||||
if [ ! -e "$TEST_IMG" ]
|
||||
then echo "Creating testing image file ..."
|
||||
dd if=/dev/zero of="$TEST_IMG" bs=1M count=$TEST_SIZE
|
||||
fi
|
||||
|
||||
linux ubd0="$ROOT_IMG" ubd1="$TEST_IMG" con=xterm hostfs=../ fakehd eth0=daemon mem=$MEM_SIZE
|
||||
|
138
bin/unittests.CryptoBox.py
Executable file
|
@ -0,0 +1,138 @@
|
|||
#!/usr/bin/env python2.4
|
||||
|
||||
import unittest
|
||||
import sys
|
||||
from CryptoBox import *
|
||||
from CryptoBoxExceptions import *
|
||||
import CryptoBoxSettings
|
||||
|
||||
class CryptoBoxPropsDeviceTests(unittest.TestCase):
|
||||
import CryptoBox
|
||||
cb = CryptoBox.CryptoBoxProps()
|
||||
|
||||
def testAllowedDevices(self):
|
||||
'''isDeviceAllowed should accept permitted devices'''
|
||||
self.assertTrue(self.cb.isDeviceAllowed("/dev/loop"))
|
||||
self.assertTrue(self.cb.isDeviceAllowed("/dev/loop1"))
|
||||
self.assertTrue(self.cb.isDeviceAllowed("/dev/loop/urgd"))
|
||||
self.assertTrue(self.cb.isDeviceAllowed("/dev/usb/../loop1"))
|
||||
|
||||
def testDeniedDevices(self):
|
||||
'''isDeviceAllowed should fail with not explicitly allowed devices'''
|
||||
self.assertFalse(self.cb.isDeviceAllowed("/dev/hda"))
|
||||
self.assertFalse(self.cb.isDeviceAllowed("/dev/loopa/../hda"))
|
||||
self.assertFalse(self.cb.isDeviceAllowed("/"))
|
||||
|
||||
|
||||
class CryptoBoxPropsConfigTests(unittest.TestCase):
|
||||
'''test here if everything with the config turns right'''
|
||||
import os
|
||||
import CryptoBox
|
||||
|
||||
files = {
|
||||
"configFileOK" : "cbox-test_ok.conf",
|
||||
"configFileBroken" : "cbox-test_broken.conf",
|
||||
"nameDBFile" : "cryptobox_names.db",
|
||||
"pluginConf" : "cryptobox_plugins.conf",
|
||||
"userDB" : "cryptobox_users.db",
|
||||
"logFile" : "cryptobox.log",
|
||||
"tmpdir" : "cryptobox-mnt" }
|
||||
tmpdirname = ""
|
||||
filenames = {}
|
||||
configContentOK = """
|
||||
[Main]
|
||||
AllowedDevices = /dev/loop
|
||||
DefaultVolumePrefix = "Data "
|
||||
DefaultCipher = aes-cbc-essiv:sha256
|
||||
[Locations]
|
||||
SettingsDir = %s
|
||||
MountParentDir = %s
|
||||
TemplateDir = ../templates
|
||||
LangDir = ../lang
|
||||
DocDir = ../doc/html
|
||||
PluginDir = ../plugins
|
||||
[Log]
|
||||
Level = debug
|
||||
Destination = file
|
||||
Details = %s/cryptobox.log
|
||||
[WebSettings]
|
||||
Stylesheet = /cryptobox-misc/cryptobox.css
|
||||
[Programs]
|
||||
blkid = /sbin/blkid
|
||||
cryptsetup = /sbin/cryptsetup
|
||||
super = /usr/bin/super
|
||||
CryptoBoxRootActions = CryptoBoxRootActions
|
||||
"""
|
||||
|
||||
|
||||
def setUp(self):
|
||||
'''generate all files in tmp and remember the names'''
|
||||
import tempfile
|
||||
os = self.os
|
||||
self.tmpdirname = tempfile.mkdtemp(prefix="cbox-")
|
||||
for file in self.files.keys():
|
||||
self.filenames[file] = os.path.join(self.tmpdirname, self.files[file])
|
||||
self.writeConfig()
|
||||
|
||||
|
||||
def tearDown(self):
|
||||
'''remove the created tmpfiles'''
|
||||
os = self.os
|
||||
# remove temp files
|
||||
for file in self.filenames.values():
|
||||
compl_name = os.path.join(self.tmpdirname, file)
|
||||
if os.path.exists(compl_name):
|
||||
os.remove(compl_name)
|
||||
# remove temp dir
|
||||
os.rmdir(self.tmpdirname)
|
||||
|
||||
|
||||
def testConfigInit(self):
|
||||
'''Check various branches of config file loading'''
|
||||
import os
|
||||
self.assertRaises(CBConfigUnavailableError, self.CryptoBox.CryptoBoxProps,"/invalid/path/to/config/file")
|
||||
self.assertRaises(CBConfigUnavailableError, self.CryptoBox.CryptoBoxProps,"/etc/shadow")
|
||||
""" check one of the following things:
|
||||
1) are we successfully using an existing config file?
|
||||
2) do we break, if no config file is there?
|
||||
depending on the existence of a config file, only one of these conditions
|
||||
can be checked - hints for more comprehensive tests are appreciated :) """
|
||||
for a in CryptoBoxSettings.CryptoBoxSettings.CONF_LOCATIONS:
|
||||
if os.path.exists(a):
|
||||
self.CryptoBox.CryptoBoxProps()
|
||||
break # this skips the 'else' clause
|
||||
else: self.assertRaises(CBConfigUnavailableError, self.CryptoBox.CryptoBoxProps)
|
||||
self.assertRaises(CBConfigUnavailableError, self.CryptoBox.CryptoBoxProps,[])
|
||||
|
||||
|
||||
def testBrokenConfigs(self):
|
||||
"""Check various broken configurations"""
|
||||
self.writeConfig("SettingsDir", "SettingsDir=/foo/bar", filename=self.filenames["configFileBroken"])
|
||||
self.assertRaises(CBConfigError, self.CryptoBox.CryptoBoxProps,self.filenames["configFileBroken"])
|
||||
self.writeConfig("Level", "Level = ho", filename=self.filenames["configFileBroken"])
|
||||
self.assertRaises(CBConfigError, self.CryptoBox.CryptoBoxProps,self.filenames["configFileBroken"])
|
||||
self.writeConfig("Details", "#out", filename=self.filenames["configFileBroken"])
|
||||
self.assertRaises(CBConfigError, self.CryptoBox.CryptoBoxProps,self.filenames["configFileBroken"])
|
||||
self.writeConfig("super", "super=/bin/invalid/no", filename=self.filenames["configFileBroken"])
|
||||
self.assertRaises(CBConfigError, self.CryptoBox.CryptoBoxProps,self.filenames["configFileBroken"])
|
||||
self.writeConfig("CryptoBoxRootActions", "#not here", filename=self.filenames["configFileBroken"])
|
||||
self.assertRaises(CBConfigError, self.CryptoBox.CryptoBoxProps,self.filenames["configFileBroken"])
|
||||
self.writeConfig("CryptoBoxRootActions", "CryptoBoxRootActions = /bin/false", filename=self.filenames["configFileBroken"])
|
||||
self.assertRaises(CBEnvironmentError, self.CryptoBox.CryptoBoxProps,self.filenames["configFileBroken"])
|
||||
|
||||
|
||||
def writeConfig(self, replace=None, newline=None, filename=None):
|
||||
"""write a config file and (optional) replace a line in it"""
|
||||
import re
|
||||
if not filename: filename = self.filenames["configFileOK"]
|
||||
content = self.configContentOK % (self.tmpdirname, self.tmpdirname, self.tmpdirname)
|
||||
if replace:
|
||||
pattern = re.compile('^' + replace + '\\s*=.*$', flags=re.M)
|
||||
content = re.sub(pattern, newline, content)
|
||||
cf = open(filename, "w")
|
||||
cf.write(content)
|
||||
cf.close()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
48
bin/unittests.CryptoBoxTools.py
Executable file
|
@ -0,0 +1,48 @@
|
|||
#!/usr/bin/env python2.4
|
||||
|
||||
import unittest
|
||||
import CryptoBoxTools
|
||||
import os
|
||||
|
||||
|
||||
class CryptoBoxToolsTests(unittest.TestCase):
|
||||
|
||||
def testGetAbsoluteDeviceName(self):
|
||||
func = CryptoBoxTools.getAbsoluteDeviceName
|
||||
self.assertTrue(func("hda") == "/dev/hda")
|
||||
self.assertTrue(func("loop0") == "/dev/loop0")
|
||||
self.assertTrue(func(os.path.devnull) == os.path.devnull)
|
||||
|
||||
|
||||
def testFindMajorMinorOfDevice(self):
|
||||
func = CryptoBoxTools.findMajorMinorOfDevice
|
||||
self.assertTrue(func("/dev/hda") == (3,0))
|
||||
self.assertTrue(func("/dev/hda1") == (3,1))
|
||||
self.assertTrue(func(os.path.devnull) == (1,3))
|
||||
self.assertTrue(func("/dev/nothere") is None)
|
||||
|
||||
|
||||
def testFindMajorMinorDeviceName(self):
|
||||
func = CryptoBoxTools.findMajorMinorDeviceName
|
||||
dir = os.path.join(os.path.sep, "dev")
|
||||
self.assertTrue(os.path.join(dir,"hda") in func(dir,3,0))
|
||||
self.assertTrue(os.path.devnull in func(dir,1,3))
|
||||
self.assertFalse(os.path.devnull in func(dir,2,3))
|
||||
|
||||
|
||||
def testIsPartOfBlockDevice(self):
|
||||
func = CryptoBoxTools.isPartOfBlockDevice
|
||||
self.assertTrue(func("/dev/hda", "/dev/hda1"))
|
||||
self.assertFalse(func("/dev/hda", "/dev/hda"))
|
||||
self.assertFalse(func("/dev/hda1", "/dev/hda"))
|
||||
self.assertFalse(func("/dev/hda1", "/dev/hda1"))
|
||||
self.assertFalse(func("/dev/hda", "/dev/hdb1"))
|
||||
self.assertFalse(func(None, "/dev/hdb1"))
|
||||
self.assertFalse(func("/dev/hda", None))
|
||||
self.assertFalse(func(None, ""))
|
||||
self.assertFalse(func("loop0", "loop1"))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
33
bin/unittests.Plugins.py
Executable file
|
@ -0,0 +1,33 @@
|
|||
#!/usr/bin/python2.4
|
||||
|
||||
import unittest
|
||||
import Plugins
|
||||
|
||||
class CheckForUndefinedTestCases(unittest.TestCase):
|
||||
"""here we will add failing test functions for every non-existing testcase"""
|
||||
|
||||
|
||||
def create_testcases():
|
||||
|
||||
plugins = Plugins.PluginManager(None, "../plugins").getPlugins()
|
||||
glob_dict = globals()
|
||||
loc_dict = locals()
|
||||
for pl in plugins:
|
||||
test_class = pl.getTestClass()
|
||||
if test_class:
|
||||
## add the testclass to the global dictionary
|
||||
glob_dict["unittest" + pl.getName()] = test_class
|
||||
else:
|
||||
subname = "test_existence_%s" % pl.getName()
|
||||
def test_existence(self):
|
||||
"""check if the plugin (%s) contains tests""" % pl.getName()
|
||||
self.fail("no tests defined for plugin: %s" % pl.getName())
|
||||
## add this function to the class above
|
||||
setattr(CheckForUndefinedTestCases, subname, test_existence)
|
||||
#FIXME: the failure output always contains the same name for all plugins
|
||||
|
||||
|
||||
create_testcases()
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
39
bin/unittests.WebSites.py
Executable file
|
@ -0,0 +1,39 @@
|
|||
#!/usr/bin/env python2.4
|
||||
|
||||
import unittest
|
||||
|
||||
## this makes assertRaises shorter
|
||||
from twill.errors import *
|
||||
from mechanize import BrowserStateError, LinkNotFoundError
|
||||
|
||||
## import the module of the common super class of all web interface test classes
|
||||
import WebInterfaceTestClass
|
||||
|
||||
|
||||
|
||||
class WebServer(WebInterfaceTestClass.WebInterfaceTestClass):
|
||||
|
||||
def test_is_server_running(self):
|
||||
'''the server should run under given name and port'''
|
||||
self.cmd.go(self.URL)
|
||||
## other URLs must not be checked, as we do not know, if they are valid
|
||||
|
||||
|
||||
class BuiltinPages(WebInterfaceTestClass.WebInterfaceTestClass):
|
||||
|
||||
|
||||
def test_goto_index(self):
|
||||
'''display all devices'''
|
||||
self.cmd.go(self.URL + "?weblang=en")
|
||||
self.cmd.find("The CryptoBox")
|
||||
self.cmd.go(self.URL + "?weblang=de")
|
||||
self.cmd.find("Die CryptoBox")
|
||||
self.cmd.go(self.URL + "?weblang=si")
|
||||
self.cmd.find("Privatnost v vsako vas")
|
||||
self.cmd.go(self.URL + "?weblang=fr")
|
||||
self.cmd.find("La CryptoBox")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
3
debian/README.Debian
vendored
|
@ -1,6 +1,5 @@
|
|||
CryptoBox for Debian - installation notes
|
||||
|
||||
be aware of two things:
|
||||
be aware of one thing:
|
||||
1) you need cryptsetup with luks support (for now only in unstable)
|
||||
2) the debian perl-clearsilver package is broken (at least until April 02006)
|
||||
|
||||
|
|
3
debian/control
vendored
|
@ -7,8 +7,7 @@ Standards-Version: 3.6.2
|
|||
|
||||
Package: cryptobox
|
||||
Architecture: any
|
||||
Depends: bash (>=2.0), sed (>=4.0), coreutils, grep (>=2.0), perl, httpd-cgi, hashalot, libconfigfile-perl, cryptsetup (>=20050111), dmsetup, pmount, initscripts, e2fsprogs (>= 1.27), adduser
|
||||
Recommends: perl-clearsilver
|
||||
Depends: bash (>=2.0), sed (>=4.0), coreutils, grep (>=2.0), httpd-cgi, hashalot, cryptsetup (>=20050111), dmsetup, initscripts, e2fsprogs (>= 1.27), adduser, python (>=2.4), python-clearsilver
|
||||
Suggests: cron, samba
|
||||
Description: Web interface for an encrypting fileserver
|
||||
This bundle of scripts and cgis allow you to manage an encrypted harddisk
|
||||
|
|
7
debian/rules
vendored
|
@ -74,19 +74,14 @@ binary-arch: build install
|
|||
# dh_installmenu
|
||||
# dh_installdebconf
|
||||
# dh_installlogrotate
|
||||
# dh_installemacsen
|
||||
# dh_installpam
|
||||
# dh_installmime
|
||||
dh_installinit
|
||||
# dh_installcron
|
||||
# dh_installinfo
|
||||
dh_installman
|
||||
dh_link
|
||||
dh_strip
|
||||
dh_compress
|
||||
dh_fixperms
|
||||
dh_perl
|
||||
# dh_python
|
||||
dh_python
|
||||
# dh_makeshlibs
|
||||
dh_installdeb
|
||||
dh_shlibdeps
|
||||
|
|
265
design/background_frame_corner.svg
Normal file
|
@ -0,0 +1,265 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="210mm"
|
||||
height="297mm"
|
||||
id="svg12523"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.44.1"
|
||||
sodipodi:docbase="/home/lars/subversion/cryptobox/branches/pythonrewrite/design"
|
||||
sodipodi:docname="background_frame_corner.svg"
|
||||
inkscape:export-filename="/home/lars/subversion/cryptobox/branches/pythonrewrite/www-data/background_frame_corner.png"
|
||||
inkscape:export-xdpi="76.669998"
|
||||
inkscape:export-ydpi="76.669998">
|
||||
<defs
|
||||
id="defs12525">
|
||||
<linearGradient
|
||||
id="linearGradient18003">
|
||||
<stop
|
||||
id="stop18005"
|
||||
offset="0"
|
||||
style="stop-color:#bbb;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop18007"
|
||||
offset="0.89510489"
|
||||
style="stop-color:#d6d6d6;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop18009"
|
||||
offset="1"
|
||||
style="stop-color:white;stop-opacity:0" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient6436">
|
||||
<stop
|
||||
id="stop6438"
|
||||
offset="0"
|
||||
style="stop-color:#bbb;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop6440"
|
||||
offset="0.79720283"
|
||||
style="stop-color:#d6d6d6;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop6442"
|
||||
offset="1"
|
||||
style="stop-color:white;stop-opacity:0" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2840">
|
||||
<stop
|
||||
id="stop2842"
|
||||
offset="0"
|
||||
style="stop-color:#ececec;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#dfdfdf;stop-opacity:1;"
|
||||
offset="0.15000001"
|
||||
id="stop2844" />
|
||||
<stop
|
||||
id="stop2846"
|
||||
offset="0.5"
|
||||
style="stop-color:#bbb;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop2848"
|
||||
offset="0.85000002"
|
||||
style="stop-color:#dfdfdf;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop2850"
|
||||
offset="1"
|
||||
style="stop-color:#ececec;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient13418">
|
||||
<stop
|
||||
style="stop-color:#bbb;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop19661" />
|
||||
<stop
|
||||
style="stop-color:#d6d6d6;stop-opacity:1;"
|
||||
offset="0.60000002"
|
||||
id="stop19659" />
|
||||
<stop
|
||||
style="stop-color:#e8e8e8;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop13422" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient13418"
|
||||
id="linearGradient14319"
|
||||
x1="146.42857"
|
||||
y1="295.93362"
|
||||
x2="602.14288"
|
||||
y2="615.21936"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.033937,0,0,0.470464,-111.0592,119.9379)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient13418"
|
||||
id="linearGradient16109"
|
||||
x1="-698.64288"
|
||||
y1="480.93362"
|
||||
x2="-212.78571"
|
||||
y2="480.93362"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-1.205649,0,0,-1,-80.86,1421.867)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient13418"
|
||||
id="linearGradient4644"
|
||||
x1="-552.84717"
|
||||
y1="342.28833"
|
||||
x2="-538.43823"
|
||||
y2="747.75262"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.000688,0,0,0.742585,0.284584,81.76713)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient6436"
|
||||
id="linearGradient9992"
|
||||
x1="-579.13184"
|
||||
y1="815.78918"
|
||||
x2="-449.77423"
|
||||
y2="861.64172"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient13418"
|
||||
id="linearGradient10889"
|
||||
x1="-458.1723"
|
||||
y1="815.36176"
|
||||
x2="-583.6474"
|
||||
y2="880.30389"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient6436"
|
||||
id="linearGradient11778"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-579.13184"
|
||||
y1="815.78918"
|
||||
x2="-449.77423"
|
||||
y2="861.64172"
|
||||
gradientTransform="translate(197.7436,-1.863711)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient13418"
|
||||
id="linearGradient11780"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-458.1723"
|
||||
y1="815.36176"
|
||||
x2="-583.6474"
|
||||
y2="880.30389"
|
||||
gradientTransform="translate(197.7436,-1.863711)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient13418"
|
||||
id="linearGradient15346"
|
||||
x1="269.42987"
|
||||
y1="-1149.713"
|
||||
x2="277.02573"
|
||||
y2="-889.35199"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.998222,0,0,1.625694,0.597727,563.6477)" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.45801722"
|
||||
inkscape:cx="132.53452"
|
||||
inkscape:cy="-117.51501"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
inkscape:window-width="1024"
|
||||
inkscape:window-height="693"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="26" />
|
||||
<metadata
|
||||
id="metadata12528">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Ebene 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<rect
|
||||
style="fill:white;stroke:url(#linearGradient14319);stroke-width:3.5587604;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1"
|
||||
id="rect12531"
|
||||
width="713.87738"
|
||||
height="431.0202"
|
||||
x="47.493656"
|
||||
y="262.41977"
|
||||
rx="4.4825716"
|
||||
ry="3.7824252"
|
||||
inkscape:export-filename="/home/lars/subversion/cryptobox/branches/pythonrewrite/www-data/background_frame_corner.png"
|
||||
inkscape:export-xdpi="75.269997"
|
||||
inkscape:export-ydpi="75.269997" />
|
||||
<path
|
||||
style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient16109);stroke-width:3.29406023;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 759.64935,940.93361 L 177.49352,940.93361"
|
||||
id="path15208"
|
||||
inkscape:export-filename="/home/lars/subversion/cryptobox/branches/pythonrewrite/www-data/footer_line.png"
|
||||
inkscape:export-xdpi="76"
|
||||
inkscape:export-ydpi="76" />
|
||||
<rect
|
||||
style="fill:white;fill-opacity:1;stroke:url(#linearGradient4644);stroke-width:3.06796598;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect3737"
|
||||
width="714.36841"
|
||||
height="320.06937"
|
||||
x="-770.91931"
|
||||
y="337.26691"
|
||||
rx="4.4856548"
|
||||
ry="2.8087742"
|
||||
inkscape:export-filename="/home/lars/subversion/cryptobox/branches/pythonrewrite/www-data/background_frame_top.png"
|
||||
inkscape:export-xdpi="87.809998"
|
||||
inkscape:export-ydpi="87.809998" />
|
||||
<rect
|
||||
style="fill:url(#linearGradient9992);fill-opacity:1;stroke:url(#linearGradient10889);stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect4648"
|
||||
width="118"
|
||||
height="48"
|
||||
x="-582.87494"
|
||||
y="812.25867"
|
||||
rx="10"
|
||||
ry="10" />
|
||||
<rect
|
||||
style="fill:url(#linearGradient11778);fill-opacity:1;stroke:url(#linearGradient11780);stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;opacity:0.5"
|
||||
id="rect11776"
|
||||
width="118"
|
||||
height="48"
|
||||
x="-385.13144"
|
||||
y="810.3949"
|
||||
rx="10"
|
||||
ry="10" />
|
||||
<rect
|
||||
style="opacity:0.4;fill:url(#linearGradient15346);fill-opacity:1.0;stroke:none;stroke-width:5.09556913;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect12667"
|
||||
width="614.90448"
|
||||
height="400"
|
||||
x="28.62841"
|
||||
y="-1302.1809"
|
||||
rx="10"
|
||||
ry="10"
|
||||
inkscape:export-filename="/home/lars/subversion/cryptobox/branches/pythonrewrite/www-data/volume_property_frame.png"
|
||||
inkscape:export-xdpi="102.45493"
|
||||
inkscape:export-ydpi="102.45493"
|
||||
transform="scale(-1,-1)" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 8.8 KiB |
92
design/icon_background_active.svg
Normal file
|
@ -0,0 +1,92 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="210mm"
|
||||
height="297mm"
|
||||
id="svg2"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.44.1"
|
||||
sodipodi:docbase="/home/lars/subversion/cryptobox/branches/pythonrewrite/design"
|
||||
sodipodi:docname="icon_background_active.svg"
|
||||
inkscape:export-filename="/home/lars/subversion/cryptobox/branches/pythonrewrite/www-data/icon_background_passive_100.png"
|
||||
inkscape:export-xdpi="22.5"
|
||||
inkscape:export-ydpi="22.5">
|
||||
<defs
|
||||
id="defs4">
|
||||
<linearGradient
|
||||
id="linearGradient2760">
|
||||
<stop
|
||||
style="stop-color:#9b9b9b;stop-opacity:0.22522523;"
|
||||
offset="0"
|
||||
id="stop2762" />
|
||||
<stop
|
||||
id="stop2768"
|
||||
offset="0.85314685"
|
||||
style="stop-color:#c8c8c8;stop-opacity:0.1891892;" />
|
||||
<stop
|
||||
style="stop-color:#e9e5e9;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2764" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2760"
|
||||
id="radialGradient2766"
|
||||
cx="308.57141"
|
||||
cy="383.79077"
|
||||
fx="308.57141"
|
||||
fy="383.79077"
|
||||
r="271.92856"
|
||||
gradientTransform="matrix(1.378293,-3.957684e-7,1.759598e-7,1.129975,-189.6586,-48.38559)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.35"
|
||||
inkscape:cx="350"
|
||||
inkscape:cy="524.28571"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
inkscape:window-width="1024"
|
||||
inkscape:window-height="693"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="26" />
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Ebene 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<rect
|
||||
style="fill:url(#radialGradient2766);fill-opacity:1;fill-rule:evenodd;stroke:#9c9c9c;stroke-width:2.55945635;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect1872"
|
||||
width="397.44052"
|
||||
height="437.44055"
|
||||
x="36.922581"
|
||||
y="166.57048"
|
||||
rx="3.6606367"
|
||||
ry="4.9709153" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.9 KiB |
245
design/icons/applications-system_tango.svg
Normal file
|
@ -0,0 +1,245 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="48.000000px"
|
||||
height="48.000000px"
|
||||
id="svg53383"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.43+devel"
|
||||
sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/categories"
|
||||
sodipodi:docname="applications-system.svg">
|
||||
<defs
|
||||
id="defs3">
|
||||
<linearGradient
|
||||
id="linearGradient3264">
|
||||
<stop
|
||||
style="stop-color:#c9c9c9;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3266" />
|
||||
<stop
|
||||
id="stop3276"
|
||||
offset="0.25"
|
||||
style="stop-color:#f8f8f8;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop3272"
|
||||
offset="0.5"
|
||||
style="stop-color:#e2e2e2;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#b0b0b0;stop-opacity:1;"
|
||||
offset="0.75"
|
||||
id="stop3274" />
|
||||
<stop
|
||||
style="stop-color:#c9c9c9;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop3268" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3264"
|
||||
id="linearGradient3281"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="14.462892"
|
||||
y1="12.284524"
|
||||
x2="34.534348"
|
||||
y2="39.684914"
|
||||
gradientTransform="matrix(1.241935,0,0,1.241935,-5.027508,-7.208988)" />
|
||||
<linearGradient
|
||||
id="linearGradient2300">
|
||||
<stop
|
||||
id="stop2302"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#000000;stop-opacity:0.32673267;" />
|
||||
<stop
|
||||
id="stop2304"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="aigrd1"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="99.7773"
|
||||
y1="15.4238"
|
||||
x2="153.0005"
|
||||
y2="248.6311">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#184375"
|
||||
id="stop53300" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#C8BDDC"
|
||||
id="stop53302" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#aigrd1"
|
||||
id="linearGradient53551"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="99.7773"
|
||||
y1="15.4238"
|
||||
x2="153.0005"
|
||||
y2="248.6311"
|
||||
gradientTransform="matrix(0.200685,0.000000,0.000000,0.200685,-0.585758,-1.050787)" />
|
||||
<radialGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
r="11.689870"
|
||||
fy="72.568001"
|
||||
fx="14.287618"
|
||||
cy="68.872971"
|
||||
cx="14.287618"
|
||||
gradientTransform="matrix(1.399258,-2.234445e-7,8.196178e-8,0.513264,4.365074,4.839285)"
|
||||
id="radialGradient2308"
|
||||
xlink:href="#linearGradient2300"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3264"
|
||||
id="linearGradient3760"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.241935,0,0,1.241935,-5.027508,-7.208988)"
|
||||
x1="14.462892"
|
||||
y1="12.284524"
|
||||
x2="34.534348"
|
||||
y2="39.684914" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#aigrd1"
|
||||
id="linearGradient3773"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.200685,0,0,0.200685,-54.33576,-1.050787)"
|
||||
x1="99.7773"
|
||||
y1="15.4238"
|
||||
x2="153.0005"
|
||||
y2="248.6311" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
inkscape:showpageshadow="false"
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="0.11764706"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="5.6568542"
|
||||
inkscape:cx="43.652227"
|
||||
inkscape:cy="21.164787"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:window-width="872"
|
||||
inkscape:window-height="697"
|
||||
inkscape:window-x="2398"
|
||||
inkscape:window-y="249" />
|
||||
<metadata
|
||||
id="metadata4">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>System Applications</dc:title>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Jakub Steiner</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:source>http://jimmac.musichall.cz/</dc:source>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>system</rdf:li>
|
||||
<rdf:li>applications</rdf:li>
|
||||
<rdf:li>group</rdf:li>
|
||||
<rdf:li>category</rdf:li>
|
||||
<rdf:li>admin</rdf:li>
|
||||
<rdf:li>root</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by/2.0/" />
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by/2.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="shadow"
|
||||
id="layer2"
|
||||
inkscape:groupmode="layer">
|
||||
<path
|
||||
transform="matrix(1.186380,0.000000,0.000000,1.186380,-4.539687,-7.794678)"
|
||||
d="M 44.285715 38.714287 A 19.928572 9.8372450 0 1 1 4.4285717,38.714287 A 19.928572 9.8372450 0 1 1 44.285715 38.714287 z"
|
||||
sodipodi:ry="9.8372450"
|
||||
sodipodi:rx="19.928572"
|
||||
sodipodi:cy="38.714287"
|
||||
sodipodi:cx="24.357143"
|
||||
id="path1538"
|
||||
style="color:#000000;fill:url(#radialGradient2308);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.50000042;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
|
||||
sodipodi:type="arc" />
|
||||
</g>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<path
|
||||
inkscape:r_cy="true"
|
||||
inkscape:r_cx="true"
|
||||
style="opacity:1;color:#000000;fill:url(#linearGradient3773);fill-opacity:1;fill-rule:nonzero;stroke:#3f4561;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 22.699525,0.94746963 C 22.22635,0.97984519 21.766437,1.0531317 21.301673,1.1063165 L 21.269903,1.1063165 L 20.157975,7.1742671 C 18.345621,7.5870046 16.640562,8.2874574 15.106644,9.2392765 L 10.118853,5.6493371 C 8.770521,6.6961412 7.543552,7.9170049 6.465374,9.2392765 L 9.928236,14.290607 C 8.876814,15.89739 8.086153,17.732094 7.640841,19.659632 C 7.640765,19.668743 7.640779,19.689813 7.640841,19.691401 L 1.60466,20.644482 C 1.494303,21.545851 1.445813,22.477386 1.445813,23.408418 C 1.445813,24.170171 1.466846,24.921747 1.541121,25.664043 L 7.577303,26.744202 C 8.0066,28.840363 8.822112,30.797987 9.960006,32.526228 L 6.370066,37.450482 C 7.398201,38.726866 8.585171,39.888962 9.864698,40.913343 L 14.947798,37.418712 C 16.724273,38.551956 18.707343,39.346604 20.856901,39.737877 L 21.809983,45.742288 C 22.487237,45.803935 23.181758,45.805827 23.874992,45.805827 C 24.853677,45.805826 25.788512,45.768738 26.734236,45.64698 L 27.877933,39.515491 C 29.91886,39.007587 31.836112,38.126493 33.501113,36.942172 L 38.393596,40.500342 C 39.662366,39.420897 40.822583,38.180154 41.824689,36.846863 L 38.266519,31.700225 C 39.230125,30.036028 39.897817,28.199859 40.23622,26.235892 L 46.240632,25.282811 C 46.29329,24.656221 46.30417,24.048546 46.30417,23.408418 C 46.30417,22.296018 46.174875,21.205317 46.018246,20.136172 L 39.918526,19.024244 C 39.440518,17.259164 38.656214,15.612364 37.662901,14.13176 L 41.25284,9.2075071 C 40.140075,7.8466524 38.870718,6.5895264 37.472284,5.5222596 L 32.293876,9.0804296 C 30.805549,8.200202 29.203897,7.5248159 27.464931,7.1424978 L 26.51185,1.1063165 C 25.644369,1.0042729 24.769749,0.94746963 23.874992,0.94746963 C 23.633166,0.94746964 23.384286,0.93986063 23.144296,0.94746963 C 23.027301,0.95117908 22.911525,0.94066346 22.794833,0.94746963 C 22.763228,0.94931296 22.73107,0.94531125 22.699525,0.94746963 z M 23.525529,16.387386 C 23.641592,16.381497 23.757473,16.387386 23.874992,16.387386 C 27.635598,16.387386 30.705408,19.457196 30.705408,23.217802 C 30.705409,26.978407 27.635597,30.016448 23.874992,30.016448 C 20.114387,30.016449 17.076346,26.978407 17.076346,23.217802 C 17.076347,19.574716 19.927558,16.569963 23.525529,16.387386 z "
|
||||
id="path3243" />
|
||||
<path
|
||||
inkscape:r_cy="true"
|
||||
inkscape:r_cx="true"
|
||||
sodipodi:type="arc"
|
||||
style="opacity:0.64772728;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1.62180054;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
id="path3283"
|
||||
sodipodi:cx="23.511301"
|
||||
sodipodi:cy="23.781593"
|
||||
sodipodi:rx="12.727922"
|
||||
sodipodi:ry="12.727922"
|
||||
d="M 36.239223 23.781593 A 12.727922 12.727922 0 1 1 10.783379,23.781593 A 12.727922 12.727922 0 1 1 36.239223 23.781593 z"
|
||||
transform="matrix(0.616598,0,0,0.616598,9.38202,8.539674)" />
|
||||
<path
|
||||
inkscape:r_cy="true"
|
||||
inkscape:r_cx="true"
|
||||
id="path3285"
|
||||
d="M 21.995808,2.1484671 L 21.103024,8.0235243 C 19.404254,8.4103946 16.279442,9.5936035 14.841657,10.485771 L 10.091975,6.9406268 C 8.828145,7.9218257 8.741474,7.9883656 7.730867,9.2277688 L 11.165063,14.320988 C 10.179537,15.827071 8.995796,18.510982 8.570778,20.42893 C 8.570778,20.42893 2.552988,21.443355 2.552988,21.443355 C 2.449547,22.288234 2.49926,24.096528 2.56888,24.792303 L 8.317097,25.82782 C 8.71949,27.79261 10.225324,30.955232 11.291904,32.575161 L 7.656902,37.377719 C 8.620601,38.57411 8.813474,38.683589 10.01281,39.64377 L 14.873441,36.082733 C 16.538581,37.144954 19.84373,38.437109 21.858571,38.80386 L 22.656299,44.604952 C 23.291109,44.662736 25.044829,44.824827 25.931283,44.710701 L 26.824066,38.671821 C 28.737084,38.195749 32.042539,36.838896 33.603191,35.728798 L 38.458624,39.236958 C 39.647878,38.225166 39.658533,38.072709 40.597835,36.822978 L 36.999815,31.708667 C 37.90303,30.148767 39.070902,27.098068 39.388097,25.257187 L 45.279046,24.279744 C 45.328399,23.692424 45.330802,22.054578 45.18399,21.052439 L 39.182092,20.016922 C 38.73404,18.362463 37.196418,15.381153 36.265359,13.993342 L 40.080075,9.1907857 C 39.037052,7.915218 38.64924,7.7402002 37.338448,6.7398212 L 32.313994,10.337839 C 30.918941,9.5127782 28.137095,8.2550417 26.507114,7.8966842 L 25.619528,2.1484671 C 24.806414,2.0528187 22.460488,2.0952921 21.995808,2.1484671 z "
|
||||
style="opacity:0.34659089;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.99999923;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
sodipodi:nodetypes="ccccccccccccccccccccccccccccccccc" />
|
||||
<path
|
||||
style="opacity:0.5;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 10.102903,6.2970655 C 8.7545689,7.3438694 8.1656464,7.9719226 7.0874684,9.2941942 L 10.489927,14.259153 C 9.4385072,15.857755 8.3316275,18.426114 8.1423859,19.987706 C 8.1423859,19.987706 2.0798859,21.0319 2.0798859,21.0319 C 2.0109129,21.595256 1.90625,22.884803 1.90625,22.884803 L 2.0830267,24.447303 C 2.5107567,24.535638 2.9231817,24.617818 3.3642767,24.666053 L 3.8642767,23.134803 C 4.2083177,23.163279 4.5439297,23.197303 4.8955267,23.197303 C 5.2467347,23.197303 5.6139847,23.163473 5.9580267,23.134803 L 6.4267767,24.666053 C 6.8680647,24.617818 7.3115487,24.535638 7.7392767,24.447303 L 7.7392767,22.884803 C 8.4250337,22.72518 9.0712777,22.497045 9.7080267,22.228553 L 10.645527,23.509803 C 11.047878,23.327709 11.421123,23.133984 11.801777,22.916053 L 11.301777,21.416053 C 11.89901,21.053803 12.463529,20.620706 12.989277,20.166053 L 14.270527,21.103553 C 14.596162,20.806973 14.91164,20.491691 15.208027,20.166053 L 14.270527,18.916053 C 14.725373,18.390305 15.127027,17.826171 15.489277,17.228553 L 16.989277,17.697303 C 17.207208,17.316456 17.432571,16.943209 17.614277,16.541053 L 16.333027,15.603553 C 16.601517,14.966804 16.798016,14.320561 16.958027,13.634803 L 18.551777,13.634803 C 18.640112,13.207076 18.691236,12.763591 18.739277,12.322303 L 17.239277,11.853553 C 17.268139,11.509705 17.301777,11.142456 17.301777,10.791053 C 17.301776,10.43965 17.267753,10.104039 17.239277,9.7598034 L 18.739277,9.2910534 C 18.69373,8.8711662 18.633686,8.4490548 18.551777,8.0410534 C 17.404349,8.4403544 15.999117,9.1941729 14.983265,9.8245243 L 10.102903,6.2970655 z "
|
||||
id="path3767"
|
||||
inkscape:r_cx="true"
|
||||
inkscape:r_cy="true"
|
||||
sodipodi:nodetypes="cccccccccsccccccccccccccccccccsccccc" />
|
||||
<path
|
||||
style="opacity:0.5;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 37.236641,17.217754 C 36.85286,17.39913 36.490003,17.603509 36.123236,17.813295 L 36.692886,19.548136 C 35.995792,19.970436 35.338156,20.467825 34.725008,20.998151 L 33.249099,19.910639 C 32.869013,20.256538 32.507327,20.618223 32.161588,20.998151 L 33.249099,22.474059 C 32.718773,23.087371 32.221547,23.745002 31.799084,24.441937 L 31.255328,24.260685 C 31.207646,24.960968 31.018949,25.62217 30.737466,26.228563 L 30.841038,26.306242 C 30.527881,27.048922 30.27649,27.83664 30.090137,28.636624 L 28.614229,28.636624 C 28.477946,28.722076 28.343676,28.821684 28.199938,28.895555 C 28.121568,29.310822 28.065026,29.712881 28.018687,30.138426 L 29.77942,30.708074 C 29.746033,31.10935 29.727633,31.515269 29.727633,31.925052 C 29.727631,32.334993 29.746034,32.740753 29.77942,33.142029 L 28.018687,33.711677 C 28.074705,34.226432 28.148678,34.740347 28.251725,35.239372 L 30.090137,35.213479 C 30.218255,35.763466 30.393202,36.320918 30.582107,36.844746 C 31.327023,36.557466 32.05594,36.214561 32.731236,35.809021 C 32.319649,34.59298 32.083908,33.279913 32.083908,31.925052 C 32.083909,26.727119 35.376289,22.288397 39.981313,20.583861 L 38.893802,20.402608 C 38.671014,19.579946 38.382478,18.774017 38.013435,18.020441 C 38.002581,17.998277 37.99851,17.96486 37.987542,17.942761 L 37.935756,17.890975 L 37.236641,17.217754 z "
|
||||
id="path3770"
|
||||
inkscape:r_cx="true"
|
||||
inkscape:r_cy="true" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 16 KiB |
738
design/icons/computer_tango.svg
Normal file
|
@ -0,0 +1,738 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="48.000000px"
|
||||
height="48.000000px"
|
||||
id="svg2327"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.42+devel"
|
||||
sodipodi:docbase="/home/jimmac/gfx/ximian/tango-icon-theme/scalable/devices"
|
||||
sodipodi:docname="computer.svg">
|
||||
<defs
|
||||
id="defs3">
|
||||
<linearGradient
|
||||
id="linearGradient2985"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop2987"
|
||||
offset="0"
|
||||
style="stop-color:#d8dfd6;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop2989"
|
||||
offset="1"
|
||||
style="stop-color:#d8dfd6;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2752">
|
||||
<stop
|
||||
id="stop2754"
|
||||
offset="0"
|
||||
style="stop-color:#9d9d9d;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop2756"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#b9b9b9;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2711">
|
||||
<stop
|
||||
id="stop2713"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#909090;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop2715"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#bebebe;stop-opacity:0.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2701">
|
||||
<stop
|
||||
id="stop2703"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#585956;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop2705"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#bbbeb8;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2691">
|
||||
<stop
|
||||
id="stop2693"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#868686;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop2695"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#e9e9e9;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2683"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop2685"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop2687"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2675">
|
||||
<stop
|
||||
id="stop2677"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#5b5b97;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop2679"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#1b1b43;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2667">
|
||||
<stop
|
||||
id="stop2669"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop2671"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#fcfcff;stop-opacity:0.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2635"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop2637"
|
||||
offset="0"
|
||||
style="stop-color:#f9fff5;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop2639"
|
||||
offset="1"
|
||||
style="stop-color:#f9fff5;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2623">
|
||||
<stop
|
||||
id="stop2625"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#dfdfde;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop2627"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#9d9f9a;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2454">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2456" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2458" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2415">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2417" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2419" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2379">
|
||||
<stop
|
||||
style="stop-color:#1a4876;stop-opacity:1.0000000;"
|
||||
offset="0.0000000"
|
||||
id="stop2381" />
|
||||
<stop
|
||||
style="stop-color:#3f54a3;stop-opacity:0.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop2383" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2328">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2330" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2332" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2307">
|
||||
<stop
|
||||
style="stop-color:#5a7aa4;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2309" />
|
||||
<stop
|
||||
style="stop-color:#5a7aa4;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2311" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2253">
|
||||
<stop
|
||||
style="stop-color:#8f8f8f;stop-opacity:1.0000000;"
|
||||
offset="0.0000000"
|
||||
id="stop2255" />
|
||||
<stop
|
||||
style="stop-color:#494949;stop-opacity:1.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop2257" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2245">
|
||||
<stop
|
||||
style="stop-color:#dde1d9;stop-opacity:1.0000000;"
|
||||
offset="0.0000000"
|
||||
id="stop2247" />
|
||||
<stop
|
||||
style="stop-color:#cacdc6;stop-opacity:1.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop2249" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2245"
|
||||
id="linearGradient2251"
|
||||
gradientTransform="matrix(1.129863,0.000000,0.000000,0.885063,-1.625000,-1.304372)"
|
||||
x1="8.6116238"
|
||||
y1="7.2293582"
|
||||
x2="34.784473"
|
||||
y2="33.339787"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2307"
|
||||
id="linearGradient2313"
|
||||
gradientTransform="matrix(1.208393,0.000000,0.000000,0.984410,-0.789284,-0.503380)"
|
||||
x1="16.851954"
|
||||
y1="9.3235140"
|
||||
x2="24.418941"
|
||||
y2="53.734985"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2328"
|
||||
id="linearGradient2334"
|
||||
gradientTransform="matrix(1.289166,0.000000,0.000000,0.922731,-0.789284,-0.503380)"
|
||||
x1="16.119127"
|
||||
y1="10.842293"
|
||||
x2="27.289009"
|
||||
y2="39.031910"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2415"
|
||||
id="linearGradient2421"
|
||||
gradientTransform="matrix(1.108069,0.000000,0.000000,0.902471,1.000000,1.000000)"
|
||||
x1="17.698339"
|
||||
y1="13.004725"
|
||||
x2="34.974548"
|
||||
y2="55.200756"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2379"
|
||||
id="linearGradient2445"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.027870,0.000000,0.000000,0.822296,1.523986,1.001198)"
|
||||
x1="21.356108"
|
||||
y1="30.078255"
|
||||
x2="19.994572"
|
||||
y2="-1.3221773" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2454"
|
||||
id="radialGradient2460"
|
||||
gradientTransform="scale(1.925808,0.519262)"
|
||||
cx="12.575710"
|
||||
cy="67.501709"
|
||||
fx="12.575710"
|
||||
fy="67.501709"
|
||||
r="8.7662794"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2454"
|
||||
id="radialGradient2464"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="scale(1.925808,0.519262)"
|
||||
cx="12.575710"
|
||||
cy="67.501709"
|
||||
fx="12.575710"
|
||||
fy="67.501709"
|
||||
r="8.7662794" />
|
||||
<linearGradient
|
||||
y2="92.570930"
|
||||
x2="10.728384"
|
||||
y1="84.029198"
|
||||
x1="10.728384"
|
||||
gradientTransform="scale(1.983556,0.504145)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient2653"
|
||||
xlink:href="#linearGradient2623"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
y2="74.098007"
|
||||
x2="8.6485014"
|
||||
y1="101.28460"
|
||||
x1="13.628710"
|
||||
gradientTransform="scale(2.143634,0.466498)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient2655"
|
||||
xlink:href="#linearGradient2635"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
r="8.7662794"
|
||||
fy="67.501709"
|
||||
fx="12.575710"
|
||||
cy="67.501709"
|
||||
cx="12.575710"
|
||||
gradientTransform="scale(1.925808,0.519262)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient2659"
|
||||
xlink:href="#linearGradient2454"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="26.729263"
|
||||
x2="17.199417"
|
||||
y1="1.6537577"
|
||||
x1="11.492236"
|
||||
gradientTransform="matrix(1.238977,0.000000,0.000000,0.895955,0.590553,-1.331524)"
|
||||
id="linearGradient2673"
|
||||
xlink:href="#linearGradient2667"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="8.8666229"
|
||||
x2="16.315819"
|
||||
y1="32.622238"
|
||||
x1="19.150396"
|
||||
gradientTransform="matrix(1.174139,0.000000,0.000000,0.945431,0.721825,-1.331524)"
|
||||
id="linearGradient2681"
|
||||
xlink:href="#linearGradient2675"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="162.45061"
|
||||
x2="3.7069974"
|
||||
y1="171.29134"
|
||||
x1="3.7069976"
|
||||
gradientTransform="matrix(5.705159,0.000000,0.000000,0.175280,1.000000,-0.679373)"
|
||||
id="linearGradient2689"
|
||||
xlink:href="#linearGradient2683"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="64.892525"
|
||||
x2="12.127711"
|
||||
y1="53.535141"
|
||||
x1="12.206709"
|
||||
gradientTransform="scale(1.816345,0.550556)"
|
||||
id="linearGradient2707"
|
||||
xlink:href="#linearGradient2701"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="3.8451097"
|
||||
x2="35.520542"
|
||||
y1="3.9384086"
|
||||
x1="34.300991"
|
||||
id="linearGradient2717"
|
||||
xlink:href="#linearGradient2711"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
y2="3.8451097"
|
||||
x2="35.520542"
|
||||
y1="3.9384086"
|
||||
x1="34.300991"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient2721"
|
||||
xlink:href="#linearGradient2711"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
y2="3.8451097"
|
||||
x2="35.520542"
|
||||
y1="3.9384086"
|
||||
x1="34.300991"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient2725"
|
||||
xlink:href="#linearGradient2711"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
y2="3.8451097"
|
||||
x2="35.520542"
|
||||
y1="3.9384086"
|
||||
x1="34.300991"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient2729"
|
||||
xlink:href="#linearGradient2711"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
y2="3.8451097"
|
||||
x2="35.520542"
|
||||
y1="3.9384086"
|
||||
x1="34.300991"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient2733"
|
||||
xlink:href="#linearGradient2711"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
y2="74.098007"
|
||||
x2="8.6485014"
|
||||
y1="101.28460"
|
||||
x1="13.628710"
|
||||
gradientTransform="matrix(2.143634,0.000000,0.000000,0.466498,1.000000,-0.508826)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient2741"
|
||||
xlink:href="#linearGradient2635"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="100.20015"
|
||||
x2="8.1134233"
|
||||
y1="88.509071"
|
||||
x1="8.1134243"
|
||||
gradientTransform="scale(2.309851,0.432928)"
|
||||
id="linearGradient2758"
|
||||
xlink:href="#linearGradient2752"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="31.246054"
|
||||
x2="32.536823"
|
||||
y1="5.3817744"
|
||||
x1="10.390738"
|
||||
gradientTransform="scale(1.104397,0.905471)"
|
||||
id="linearGradient2979"
|
||||
xlink:href="#linearGradient2253"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
y2="52.536461"
|
||||
x2="18.176752"
|
||||
y1="48.643234"
|
||||
x1="18.316999"
|
||||
gradientTransform="scale(1.129863,0.885063)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient2981"
|
||||
xlink:href="#linearGradient2245"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="44.878883"
|
||||
x2="-23.885700"
|
||||
y1="49.953003"
|
||||
x1="-23.885700"
|
||||
gradientTransform="scale(1.492875,0.669848)"
|
||||
id="linearGradient2991"
|
||||
xlink:href="#linearGradient2985"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
y2="100.20015"
|
||||
x2="8.1134233"
|
||||
y1="88.509071"
|
||||
x1="8.1134243"
|
||||
gradientTransform="scale(2.309851,0.432928)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient1409"
|
||||
xlink:href="#linearGradient2752"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
y2="100.20015"
|
||||
x2="8.1134233"
|
||||
y1="88.509071"
|
||||
x1="8.1134243"
|
||||
gradientTransform="scale(2.309851,0.432928)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient1411"
|
||||
xlink:href="#linearGradient2752"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
y2="31.246054"
|
||||
x2="32.536823"
|
||||
y1="5.3817744"
|
||||
x1="10.390738"
|
||||
gradientTransform="scale(1.104397,0.905471)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient1413"
|
||||
xlink:href="#linearGradient2253"
|
||||
inkscape:collect="always" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="0.12156863"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1"
|
||||
inkscape:cx="75.353821"
|
||||
inkscape:cy="12.176086"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:window-width="770"
|
||||
inkscape:window-height="576"
|
||||
inkscape:window-x="402"
|
||||
inkscape:window-y="25"
|
||||
inkscape:showpageshadow="false" />
|
||||
<metadata
|
||||
id="metadata4">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>Computer</dc:title>
|
||||
<dc:date>2005-03-08</dc:date>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Jakub Steiner</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>workstation</rdf:li>
|
||||
<rdf:li>computer</rdf:li>
|
||||
<rdf:li>node</rdf:li>
|
||||
<rdf:li>client</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
|
||||
<dc:source>http://jimmac.musichall.cz/</dc:source>
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="color:#000000;fill:url(#radialGradient2460);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.70063692;visibility:visible;display:inline;overflow:visible"
|
||||
id="path2452"
|
||||
sodipodi:cx="24.218407"
|
||||
sodipodi:cy="35.051105"
|
||||
sodipodi:rx="16.882174"
|
||||
sodipodi:ry="4.5520000"
|
||||
d="M 41.100580 35.051105 A 16.882174 4.5520000 0 1 1 7.3362331,35.051105 A 16.882174 4.5520000 0 1 1 41.100580 35.051105 z"
|
||||
transform="matrix(1.000000,0.000000,0.000000,1.368932,-1.978553,-13.61713)" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="color:#000000;fill:#adb0aa;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#4b4d4a;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
|
||||
id="path2407"
|
||||
sodipodi:cx="-35.658386"
|
||||
sodipodi:cy="29.716238"
|
||||
sodipodi:rx="9.3944187"
|
||||
sodipodi:ry="3.9395950"
|
||||
d="M -26.263968 29.716238 A 9.3944187 3.9395950 0 1 1 -45.052805,29.716238 A 9.3944187 3.9395950 0 1 1 -26.263968 29.716238 z"
|
||||
transform="translate(57.53339,3.203427)" />
|
||||
<path
|
||||
transform="matrix(0.940273,0.000000,0.000000,0.940273,55.40361,4.271194)"
|
||||
d="M -26.263968 29.716238 A 9.3944187 3.9395950 0 1 1 -45.052805,29.716238 A 9.3944187 3.9395950 0 1 1 -26.263968 29.716238 z"
|
||||
sodipodi:ry="3.9395950"
|
||||
sodipodi:rx="9.3944187"
|
||||
sodipodi:cy="29.716238"
|
||||
sodipodi:cx="-35.658386"
|
||||
id="path1825"
|
||||
style="color:#000000;fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#7b7f7a;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
|
||||
sodipodi:type="arc" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="color:#000000;fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:url(#linearGradient2991);stroke-width:0.68065339;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
|
||||
id="path2983"
|
||||
sodipodi:cx="-35.658386"
|
||||
sodipodi:cy="29.716238"
|
||||
sodipodi:rx="9.3944187"
|
||||
sodipodi:ry="3.9395950"
|
||||
d="M -26.263968 29.716238 A 9.3944187 3.9395950 0 1 1 -45.052805,29.716238 A 9.3944187 3.9395950 0 1 1 -26.263968 29.716238 z"
|
||||
transform="matrix(0.940273,0.000000,0.000000,0.940273,55.40361,3.521194)" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccccccccccccc"
|
||||
style="fill:#d0d0d0;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#979797;stroke-width:0.40000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
|
||||
d="M 25.687500,28.766243 L 25.625000,29.766243 C 25.625000,29.766243 29.949108,33.365409 34.625000,33.968750 C 36.962946,34.270420 39.378675,34.671162 41.375000,35.156250 C 43.371325,35.641338 44.963356,36.275856 45.500000,36.812500 C 45.810411,37.122911 45.951063,37.386139 46.000000,37.593750 C 46.048937,37.801361 46.038217,37.948565 45.906250,38.156250 C 45.642317,38.571620 44.826393,39.123902 43.437500,39.562500 C 40.659715,40.439695 35.717076,41.000000 28.875000,41.000000 L 28.875000,42.000000 C 35.770998,42.000000 40.738665,41.472329 43.718750,40.531250 C 45.208792,40.060710 46.243692,39.515563 46.750000,38.718750 C 47.003154,38.320344 47.107321,37.830301 47.000000,37.375000 C 46.892679,36.919699 46.615445,36.490445 46.218750,36.093750 C 45.341180,35.216180 43.681912,34.687310 41.625000,34.187500 C 39.568088,33.687690 37.109264,33.273171 34.750000,32.968750 C 30.031473,32.359908 25.687500,28.766243 25.687500,28.766243 z "
|
||||
id="path2411" />
|
||||
<path
|
||||
transform="matrix(1.000000,0.000000,0.000000,1.368932,-1.978553,-19.02126)"
|
||||
d="M 41.100580 35.051105 A 16.882174 4.5520000 0 1 1 7.3362331,35.051105 A 16.882174 4.5520000 0 1 1 41.100580 35.051105 z"
|
||||
sodipodi:ry="4.5520000"
|
||||
sodipodi:rx="16.882174"
|
||||
sodipodi:cy="35.051105"
|
||||
sodipodi:cx="24.218407"
|
||||
id="path2462"
|
||||
style="color:#000000;fill:url(#radialGradient2464);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.70063692;visibility:visible;display:inline;overflow:visible"
|
||||
sodipodi:type="arc" />
|
||||
<rect
|
||||
y="30.703611"
|
||||
x="17.472397"
|
||||
height="2.7400389"
|
||||
width="9.0396729"
|
||||
id="rect2699"
|
||||
style="color:#000000;fill:url(#linearGradient2707);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.60872948;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
|
||||
<path
|
||||
style="color:#000000;fill:url(#linearGradient2251);fill-opacity:1.0000000;fill-rule:evenodd;stroke:url(#linearGradient2979);stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 7.0809024,1.6956221 L 36.669097,1.6956221 C 37.580439,1.6956221 38.293244,2.2791039 38.335849,3.0972091 L 39.667893,28.675323 C 39.726102,29.793058 38.766837,30.695628 37.647588,30.695628 L 6.1024120,30.695628 C 4.9831629,30.695628 4.0238980,29.793058 4.0821068,28.675323 L 5.4141506,3.0972091 C 5.4544343,2.3236745 5.9616533,1.6956221 7.0809024,1.6956221 z "
|
||||
id="rect2404"
|
||||
sodipodi:nodetypes="cssssssss" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
id="path2377"
|
||||
d="M 8.4105348,4.3058272 L 7.1683398,26.351144 L 34.818729,26.351144 L 33.483712,4.3992558 L 8.4105348,4.3058272 z "
|
||||
style="fill:url(#linearGradient2681);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000079;stroke-width:0.50000000;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000" />
|
||||
<path
|
||||
style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:url(#linearGradient2689);stroke-width:0.99618119;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:0.24840762"
|
||||
d="M 6.1774331,28.735789 L 37.605910,28.735789"
|
||||
id="path2393" />
|
||||
<path
|
||||
sodipodi:nodetypes="cssssssss"
|
||||
id="path2397"
|
||||
d="M 6.9145985,2.7063396 L 36.760101,2.6685383 C 37.043798,2.6681790 37.319403,2.9057881 37.342206,3.3210821 L 38.704098,28.124330 C 38.762137,29.181361 38.164349,29.910201 37.105727,29.910201 L 6.5817583,29.910201 C 5.5231355,29.910201 4.9887439,29.181410 5.0458869,28.124330 L 6.3699773,3.6301633 C 6.4086732,2.9143326 6.5363627,2.7068187 6.9145985,2.7063396 z "
|
||||
style="color:#000000;fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:url(#linearGradient2421);stroke-width:0.99999964;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.70063692;visibility:visible;display:inline;overflow:visible" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
style="opacity:0.53142858;fill:url(#linearGradient2673);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
|
||||
d="M 8.7115364,4.7463626 L 7.9090069,22.616693 C 18.953645,20.216063 19.330470,12.124494 33.063039,9.4699426 L 32.901567,4.8124267 L 8.7115364,4.7463626 z "
|
||||
id="path2443" />
|
||||
<path
|
||||
transform="matrix(1.264398,0.000000,0.000000,1.291262,-6.216332,-4.000423)"
|
||||
d="M 41.100580 35.051105 A 16.882174 4.5520000 0 1 1 7.3362331,35.051105 A 16.882174 4.5520000 0 1 1 41.100580 35.051105 z"
|
||||
sodipodi:ry="4.5520000"
|
||||
sodipodi:rx="16.882174"
|
||||
sodipodi:cy="35.051105"
|
||||
sodipodi:cx="24.218407"
|
||||
id="path2657"
|
||||
style="color:#000000;fill:url(#radialGradient2659);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.70063692;visibility:visible;display:inline;overflow:visible"
|
||||
sodipodi:type="arc" />
|
||||
<path
|
||||
sodipodi:nodetypes="cssssssss"
|
||||
id="path2409"
|
||||
d="M 6.4621839,36.817452 L 37.464590,36.817452 C 38.583839,36.817452 38.441945,37.088890 38.556817,37.430298 L 41.391463,45.855108 C 41.506335,46.196517 41.418485,46.467954 40.299236,46.467954 L 3.6275382,46.467954 C 2.5082891,46.467954 2.4204387,46.196517 2.5353107,45.855108 L 5.3699564,37.430298 C 5.4848284,37.088889 5.3429348,36.817452 6.4621839,36.817452 z "
|
||||
style="opacity:1.0000000;color:#000000;fill:url(#linearGradient2981);fill-opacity:1.0000000;fill-rule:evenodd;stroke:url(#linearGradient1413);stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccccc"
|
||||
id="path2611"
|
||||
d="M 6.3916892,38.829113 L 4.6239223,43.955638 L 10.104000,43.955638 L 10.634330,41.922706 L 25.483572,41.922706 L 26.033251,43.997820 L 32.201086,43.997820 L 30.521708,38.829113 L 6.3916892,38.829113 z "
|
||||
style="fill:#7a7d77;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
|
||||
<path
|
||||
id="path2613"
|
||||
d="M 11.076272,42.276260 L 10.634330,43.955639 L 25.395184,43.955639 L 24.953242,42.187872 L 11.076272,42.276260 z "
|
||||
style="fill:#777874;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
|
||||
<path
|
||||
style="color:#000000;fill:#777a75;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 37.592776,38.829114 L 39.272155,43.867250 L 33.792077,43.778861 L 32.289475,38.917502 L 37.592776,38.829114 z "
|
||||
id="path2619" />
|
||||
<path
|
||||
id="path2615"
|
||||
d="M 37.592776,38.298786 L 39.272155,43.336922 L 33.792077,43.248533 L 32.289475,38.387174 L 37.592776,38.298786 z "
|
||||
style="opacity:1.0000000;color:#000000;fill:url(#linearGradient2758);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
|
||||
<path
|
||||
style="fill:url(#linearGradient1411);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
|
||||
d="M 6.3916892,38.210397 L 4.6239223,43.336922 L 10.104000,43.336922 L 10.634330,41.303990 L 25.483572,41.303990 L 26.033251,43.379104 L 32.201086,43.379104 L 30.521708,38.210397 L 6.3916892,38.210397 z "
|
||||
id="path2617"
|
||||
sodipodi:nodetypes="ccccccccc" />
|
||||
<path
|
||||
style="opacity:1.0000000;color:#000000;fill:url(#linearGradient1409);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 11.076272,41.745932 L 10.634330,43.425311 L 25.395184,43.425311 L 24.953242,41.657544 L 11.076272,41.745932 z "
|
||||
id="path2621" />
|
||||
<path
|
||||
style="color:#000000;fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:url(#linearGradient2741);stroke-width:0.50000000;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 6.1278189,37.578116 L 37.953634,37.578116 L 40.590813,45.670679 L 3.3297429,45.670679 L 6.1278189,37.578116 z "
|
||||
id="path2631"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
<path
|
||||
transform="matrix(1.331237,0.000000,0.000000,0.658449,-10.41933,2.853866)"
|
||||
d="M 35.620504 3.9384086 A 0.83968931 0.83968931 0 1 1 33.941126,3.9384086 A 0.83968931 0.83968931 0 1 1 35.620504 3.9384086 z"
|
||||
sodipodi:ry="0.83968931"
|
||||
sodipodi:rx="0.83968931"
|
||||
sodipodi:cy="3.9384086"
|
||||
sodipodi:cx="34.780815"
|
||||
id="path2709"
|
||||
style="color:#000000;fill:url(#linearGradient2717);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.50000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
|
||||
sodipodi:type="arc" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="color:#000000;fill:url(#linearGradient2721);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.50000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
|
||||
id="path2719"
|
||||
sodipodi:cx="34.780815"
|
||||
sodipodi:cy="3.9384086"
|
||||
sodipodi:rx="0.83968931"
|
||||
sodipodi:ry="0.83968931"
|
||||
d="M 35.620504 3.9384086 A 0.83968931 0.83968931 0 1 1 33.941126,3.9384086 A 0.83968931 0.83968931 0 1 1 35.620504 3.9384086 z"
|
||||
transform="matrix(1.331237,0.000000,0.000000,0.658449,-10.30573,4.959651)" />
|
||||
<path
|
||||
transform="matrix(1.331237,0.000000,0.000000,0.658449,-10.19213,6.959651)"
|
||||
d="M 35.620504 3.9384086 A 0.83968931 0.83968931 0 1 1 33.941126,3.9384086 A 0.83968931 0.83968931 0 1 1 35.620504 3.9384086 z"
|
||||
sodipodi:ry="0.83968931"
|
||||
sodipodi:rx="0.83968931"
|
||||
sodipodi:cy="3.9384086"
|
||||
sodipodi:cx="34.780815"
|
||||
id="path2723"
|
||||
style="color:#000000;fill:url(#linearGradient2725);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.50000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
|
||||
sodipodi:type="arc" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="color:#000000;fill:url(#linearGradient2729);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.50000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
|
||||
id="path2727"
|
||||
sodipodi:cx="34.780815"
|
||||
sodipodi:cy="3.9384086"
|
||||
sodipodi:rx="0.83968931"
|
||||
sodipodi:ry="0.83968931"
|
||||
d="M 35.620504 3.9384086 A 0.83968931 0.83968931 0 1 1 33.941126,3.9384086 A 0.83968931 0.83968931 0 1 1 35.620504 3.9384086 z"
|
||||
transform="matrix(1.331237,0.000000,0.000000,0.658449,-10.07853,8.959651)" />
|
||||
<path
|
||||
transform="matrix(1.331237,0.000000,0.000000,0.658449,-9.964930,10.95965)"
|
||||
d="M 35.620504 3.9384086 A 0.83968931 0.83968931 0 1 1 33.941126,3.9384086 A 0.83968931 0.83968931 0 1 1 35.620504 3.9384086 z"
|
||||
sodipodi:ry="0.83968931"
|
||||
sodipodi:rx="0.83968931"
|
||||
sodipodi:cy="3.9384086"
|
||||
sodipodi:cx="34.780815"
|
||||
id="path2731"
|
||||
style="color:#000000;fill:url(#linearGradient2733);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.50000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
|
||||
sodipodi:type="arc" />
|
||||
<path
|
||||
id="text2735"
|
||||
d="M 20.000000,27.317666 L 20.281716,27.317666 C 20.365481,27.317667 20.429701,27.336330 20.474376,27.373656 C 20.519345,27.410690 20.541829,27.463594 20.541830,27.532370 C 20.541829,27.601440 20.519345,27.654638 20.474376,27.691965 C 20.429701,27.728998 20.365481,27.747515 20.281716,27.747515 L 20.169735,27.747515 L 20.169735,27.975885 L 20.000000,27.975885 L 20.000000,27.317666 M 20.169735,27.440669 L 20.169735,27.624512 L 20.263640,27.624512 C 20.296558,27.624512 20.321982,27.616576 20.339911,27.600705 C 20.357839,27.584540 20.366804,27.561762 20.366804,27.532370 C 20.366804,27.502979 20.357839,27.480348 20.339911,27.464476 C 20.321982,27.448605 20.296558,27.440669 20.263640,27.440669 L 20.169735,27.440669 M 20.961979,27.428765 C 20.910250,27.428766 20.870131,27.447870 20.841621,27.486078 C 20.813112,27.524288 20.798857,27.578074 20.798857,27.647437 C 20.798857,27.716507 20.813112,27.770146 20.841621,27.808355 C 20.870131,27.846564 20.910250,27.865668 20.961979,27.865668 C 21.014001,27.865668 21.054267,27.846564 21.082778,27.808355 C 21.111287,27.770146 21.125541,27.716507 21.125542,27.647437 C 21.125541,27.578074 21.111287,27.524288 21.082778,27.486078 C 21.054267,27.447870 21.014001,27.428766 20.961979,27.428765 M 20.961979,27.305762 C 21.067787,27.305763 21.150671,27.336036 21.210630,27.396582 C 21.270588,27.457128 21.300567,27.540747 21.300568,27.647437 C 21.300567,27.753834 21.270588,27.837305 21.210630,27.897851 C 21.150671,27.958398 21.067787,27.988671 20.961979,27.988671 C 20.856464,27.988671 20.773580,27.958398 20.713328,27.897851 C 20.653370,27.837305 20.623391,27.753834 20.623391,27.647437 C 20.623391,27.540747 20.653370,27.457128 20.713328,27.396582 C 20.773580,27.336036 20.856464,27.305763 20.961979,27.305762 M 21.428420,27.317666 L 21.617994,27.317666 L 21.857387,27.769117 L 21.857387,27.317666 L 22.018305,27.317666 L 22.018305,27.975885 L 21.828730,27.975885 L 21.589338,27.524434 L 21.589338,27.975885 L 21.428420,27.975885 L 21.428420,27.317666 M 22.091489,27.317666 L 22.277095,27.317666 L 22.426991,27.552209 L 22.576887,27.317666 L 22.762935,27.317666 L 22.512079,27.698578 L 22.512079,27.975885 L 22.342344,27.975885 L 22.342344,27.698578 L 22.091489,27.317666"
|
||||
style="font-size:0.90290260;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;writing-mode:lr-tb;text-anchor:start;fill:#4a4a4a;fill-opacity:1.0000000;stroke:none;stroke-width:1.0000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;font-family:Bitstream Vera Sans" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 36 KiB |
316
design/icons/dialog-error_tango.svg
Normal file
|
@ -0,0 +1,316 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="48px"
|
||||
height="48px"
|
||||
id="svg1306"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.43+devel"
|
||||
sodipodi:docbase="/home/garrett/Source/tango-icon-theme/scalable/status"
|
||||
sodipodi:docname="dialog-error.svg">
|
||||
<defs
|
||||
id="defs1308">
|
||||
<linearGradient
|
||||
id="linearGradient3957">
|
||||
<stop
|
||||
style="stop-color:#fffeff;stop-opacity:0.33333334;"
|
||||
offset="0"
|
||||
id="stop3959" />
|
||||
<stop
|
||||
style="stop-color:#fffeff;stop-opacity:0.21568628;"
|
||||
offset="1"
|
||||
id="stop3961" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2536">
|
||||
<stop
|
||||
style="stop-color:#a40000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2538" />
|
||||
<stop
|
||||
style="stop-color:#ff1717;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop2540" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2479">
|
||||
<stop
|
||||
style="stop-color:#ffe69b;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2481" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop2483" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4126"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop4128"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop4130"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4126"
|
||||
id="radialGradient2169"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,0.500000,1.899196e-14,20.00000)"
|
||||
cx="23.857143"
|
||||
cy="40.000000"
|
||||
fx="23.857143"
|
||||
fy="40.000000"
|
||||
r="17.142857" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2479"
|
||||
id="linearGradient2485"
|
||||
x1="43.93581"
|
||||
y1="53.835983"
|
||||
x2="20.064686"
|
||||
y2="-8.5626707"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2536"
|
||||
id="linearGradient2542"
|
||||
x1="36.917976"
|
||||
y1="66.288063"
|
||||
x2="19.071495"
|
||||
y2="5.5410109"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2536"
|
||||
id="linearGradient3046"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="36.917976"
|
||||
y1="66.288063"
|
||||
x2="19.071495"
|
||||
y2="5.5410109" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2479"
|
||||
id="linearGradient3048"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="43.93581"
|
||||
y1="53.835983"
|
||||
x2="20.064686"
|
||||
y2="-8.5626707" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2536"
|
||||
id="linearGradient3064"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="36.917976"
|
||||
y1="66.288063"
|
||||
x2="19.071495"
|
||||
y2="5.5410109" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2479"
|
||||
id="linearGradient3066"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="43.93581"
|
||||
y1="53.835983"
|
||||
x2="20.064686"
|
||||
y2="-8.5626707" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3957"
|
||||
id="linearGradient3963"
|
||||
x1="21.993773"
|
||||
y1="33.955299"
|
||||
x2="20.917078"
|
||||
y2="15.814602"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4126"
|
||||
id="radialGradient3976"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.5,1.893048e-14,20)"
|
||||
cx="23.857143"
|
||||
cy="40.000000"
|
||||
fx="23.857143"
|
||||
fy="40.000000"
|
||||
r="17.142857" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2536"
|
||||
id="linearGradient3978"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="36.917976"
|
||||
y1="66.288063"
|
||||
x2="19.071495"
|
||||
y2="5.5410109" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2479"
|
||||
id="linearGradient3980"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="43.93581"
|
||||
y1="53.835983"
|
||||
x2="20.064686"
|
||||
y2="-8.5626707" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3957"
|
||||
id="linearGradient3982"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="21.993773"
|
||||
y1="33.955299"
|
||||
x2="20.917078"
|
||||
y2="15.814602" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="0.21568627"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1"
|
||||
inkscape:cx="27.043297"
|
||||
inkscape:cy="20.463852"
|
||||
inkscape:current-layer="layer2"
|
||||
showgrid="true"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:window-width="925"
|
||||
inkscape:window-height="846"
|
||||
inkscape:window-x="234"
|
||||
inkscape:window-y="52"
|
||||
inkscape:showpageshadow="false"
|
||||
fill="#ef2929"
|
||||
gridempspacing="4" />
|
||||
<metadata
|
||||
id="metadata1311">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Rodney Dawes</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:contributor>
|
||||
<cc:Agent>
|
||||
<dc:title>Jakub Steiner, Garrett LeSage</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:contributor>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
|
||||
<dc:title>Dialog Error</dc:title>
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer2"
|
||||
inkscape:label="Shadow">
|
||||
<path
|
||||
inkscape:r_cy="true"
|
||||
inkscape:r_cx="true"
|
||||
transform="matrix(1.070555,0,0,0.525,-0.892755,22.5)"
|
||||
d="M 41 40 A 17.142857 8.5714283 0 1 1 6.7142868,40 A 17.142857 8.5714283 0 1 1 41 40 z"
|
||||
sodipodi:ry="8.5714283"
|
||||
sodipodi:rx="17.142857"
|
||||
sodipodi:cy="40"
|
||||
sodipodi:cx="23.857143"
|
||||
id="path6548"
|
||||
style="opacity:0.6;color:#000000;fill:url(#radialGradient3976);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
|
||||
sodipodi:type="arc" />
|
||||
</g>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<g
|
||||
id="g4006">
|
||||
<path
|
||||
transform="matrix(0.920488,0,0,0.920488,2.368532,0.97408)"
|
||||
d="M 46.857143 23.928572 A 23.357143 23.357143 0 1 1 0.1428566,23.928572 A 23.357143 23.357143 0 1 1 46.857143 23.928572 z"
|
||||
sodipodi:ry="23.357143"
|
||||
sodipodi:rx="23.357143"
|
||||
sodipodi:cy="23.928572"
|
||||
sodipodi:cx="23.5"
|
||||
id="path1314"
|
||||
style="fill:url(#linearGradient3978);fill-opacity:1;fill-rule:nonzero;stroke:#b20000;stroke-width:1.08638;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
sodipodi:type="arc"
|
||||
inkscape:r_cx="true"
|
||||
inkscape:r_cy="true" />
|
||||
<path
|
||||
transform="matrix(0.856093,0,0,0.856093,1.818275,0.197769)"
|
||||
d="M 49.901535 26.635273 A 23.991123 23.991123 0 1 1 1.9192886,26.635273 A 23.991123 23.991123 0 1 1 49.901535 26.635273 z"
|
||||
sodipodi:ry="23.991123"
|
||||
sodipodi:rx="23.991123"
|
||||
sodipodi:cy="26.635273"
|
||||
sodipodi:cx="25.910412"
|
||||
id="path3560"
|
||||
style="opacity:0.34659089;fill:#cc0000;fill-opacity:0;stroke:url(#linearGradient3980);stroke-width:1.16809607;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
sodipodi:type="arc"
|
||||
inkscape:r_cx="true"
|
||||
inkscape:r_cy="true" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer3"
|
||||
inkscape:label="Error Box">
|
||||
<rect
|
||||
inkscape:r_cy="true"
|
||||
inkscape:r_cx="true"
|
||||
style="fill:#efefef;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.73876643;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.8627451"
|
||||
id="rect2070"
|
||||
width="27.836435"
|
||||
height="7.1735945"
|
||||
x="10.078821"
|
||||
y="19.164932"
|
||||
transform="matrix(1.005876,0,0,1.115201,-0.138045,-2.372708)" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer4"
|
||||
inkscape:label="Glossy Shine">
|
||||
<path
|
||||
transform="matrix(1.002994,0,0,1.002994,-7.185874e-2,1.968356e-2)"
|
||||
sodipodi:nodetypes="czssc"
|
||||
id="path3955"
|
||||
d="M 43.370686,21.715486 C 43.370686,32.546102 33.016357,15.449178 24.695948,22.101874 C 16.569626,28.599385 4.0989837,34.292422 4.0989837,23.461806 C 4.0989837,12.377753 12.79438,2.0948032 23.625,2.0948032 C 34.455619,2.0948032 43.370686,10.884868 43.370686,21.715486 z "
|
||||
style="fill:url(#linearGradient3982);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
|
||||
inkscape:r_cx="true"
|
||||
inkscape:r_cy="true" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 10 KiB |
1145
design/icons/dialog-information_tango.svg
Normal file
After Width: | Height: | Size: 44 KiB |
290
design/icons/dialog-warning_tango.svg
Normal file
|
@ -0,0 +1,290 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="48px"
|
||||
height="48px"
|
||||
id="svg1377"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.43+devel"
|
||||
sodipodi:docbase="/home/garrett/Source/tango-icon-theme/scalable/status"
|
||||
sodipodi:docname="dialog-warning.svg">
|
||||
<defs
|
||||
id="defs1379">
|
||||
<linearGradient
|
||||
y2="56.0523"
|
||||
x2="47.3197"
|
||||
y1="11.1133"
|
||||
x1="4.1914"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="aigrd1">
|
||||
<stop
|
||||
id="stop6490"
|
||||
style="stop-color:#D4D4D4"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop6492"
|
||||
style="stop-color:#E2E2E2"
|
||||
offset="0.3982" />
|
||||
<stop
|
||||
id="stop6494"
|
||||
style="stop-color:#FFFFFF"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
y2="56.0523"
|
||||
x2="47.3197"
|
||||
y1="11.1133"
|
||||
x1="4.1914"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient7451"
|
||||
xlink:href="#aigrd1"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
id="linearGradient4126"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop4128"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop4130"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="17.142857"
|
||||
fy="40.000000"
|
||||
fx="23.857143"
|
||||
cy="40.000000"
|
||||
cx="23.857143"
|
||||
gradientTransform="matrix(1,0,0,0.5,2.139286e-14,20)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient7449"
|
||||
xlink:href="#linearGradient4126"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient6525"
|
||||
id="linearGradient5250"
|
||||
x1="8.5469341"
|
||||
y1="30.281681"
|
||||
x2="30.85088"
|
||||
y2="48.301884"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.899009,0,0,0.934235,1.875108,1.193645)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#aigrd1"
|
||||
id="linearGradient3922"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="4.1914"
|
||||
y1="11.1133"
|
||||
x2="47.3197"
|
||||
y2="56.0523" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient6525"
|
||||
id="linearGradient3924"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.899009,0,0,0.934235,1.875108,1.193645)"
|
||||
x1="8.5469341"
|
||||
y1="30.281681"
|
||||
x2="30.85088"
|
||||
y2="48.301884" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient6525"
|
||||
id="linearGradient3933"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.899009,0,0,0.934235,1.875108,1.193645)"
|
||||
x1="8.5469341"
|
||||
y1="30.281681"
|
||||
x2="30.85088"
|
||||
y2="48.301884" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#aigrd1"
|
||||
id="linearGradient3935"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="4.1914"
|
||||
y1="11.1133"
|
||||
x2="47.3197"
|
||||
y2="56.0523" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#aigrd1"
|
||||
id="linearGradient3946"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="4.1914"
|
||||
y1="11.1133"
|
||||
x2="47.3197"
|
||||
y2="56.0523" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient6525"
|
||||
id="linearGradient3948"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.899009,0,0,0.934235,1.875108,1.193645)"
|
||||
x1="8.5469341"
|
||||
y1="30.281681"
|
||||
x2="30.85088"
|
||||
y2="48.301884" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="14.757891"
|
||||
inkscape:cx="24"
|
||||
inkscape:cy="24"
|
||||
inkscape:current-layer="g7435"
|
||||
showgrid="true"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:window-width="1105"
|
||||
inkscape:window-height="1084"
|
||||
inkscape:window-x="157"
|
||||
inkscape:window-y="16"
|
||||
gridempspacing="4" />
|
||||
<metadata
|
||||
id="metadata1382">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>Dialog Warning</dc:title>
|
||||
<dc:date>2005-10-14</dc:date>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Andreas Nilsson</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:contributor>
|
||||
<cc:Agent>
|
||||
<dc:title>Jakub Steiner, Garrett LeSage</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:contributor>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>dialog</rdf:li>
|
||||
<rdf:li>warning</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<g
|
||||
transform="matrix(1.566667,0.000000,0.000000,1.566667,-8.925566,-23.94764)"
|
||||
id="g7435">
|
||||
<path
|
||||
transform="matrix(0.817145,0,0,0.392908,1.555909,25.27761)"
|
||||
d="M 41 40 A 17.142857 8.5714283 0 1 1 6.7142868,40 A 17.142857 8.5714283 0 1 1 41 40 z"
|
||||
sodipodi:ry="8.5714283"
|
||||
sodipodi:rx="17.142857"
|
||||
sodipodi:cy="40"
|
||||
sodipodi:cx="23.857143"
|
||||
id="path6548"
|
||||
style="opacity:0.5;color:#000000;fill:url(#radialGradient7449);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
|
||||
sodipodi:type="arc"
|
||||
inkscape:r_cx="true"
|
||||
inkscape:r_cy="true" />
|
||||
<g
|
||||
id="g3937"
|
||||
transform="matrix(1,0,4.537846e-3,1,-0.138907,-1.394718e-15)"
|
||||
inkscape:r_cx="true"
|
||||
inkscape:r_cy="true">
|
||||
<path
|
||||
inkscape:r_cy="true"
|
||||
inkscape:r_cx="true"
|
||||
transform="matrix(1,0,-8.726683e-3,1,0.328074,1.276596)"
|
||||
id="path6485"
|
||||
d="M 33.282781,38.644744 L 22.407791,18.394765 C 22.095292,17.832266 21.532792,17.519767 20.907793,17.519767 C 20.282793,17.519767 19.720294,17.894765 19.407795,18.457265 L 8.7828048,38.707245 C 8.5328048,39.207244 8.5328048,39.894744 8.8453048,40.394743 C 9.1578038,40.894743 9.6578038,41.144742 10.282804,41.144742 L 31.782782,41.144742 C 32.407781,41.144742 32.97028,40.832243 33.220281,40.332243 C 33.53278,39.832243 33.53278,39.207244 33.282781,38.644744 z "
|
||||
style="fill:#cc0000;fill-rule:nonzero;stroke:#9f0000;stroke-width:0.6382978;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<g
|
||||
inkscape:r_cy="true"
|
||||
inkscape:r_cx="true"
|
||||
id="g6487"
|
||||
transform="matrix(0.625,0,-5.534934e-3,0.634254,6.164053,15.76055)"
|
||||
style="fill-rule:nonzero;stroke:#000000;stroke-miterlimit:4">
|
||||
<linearGradient
|
||||
y2="56.052299"
|
||||
x2="47.319698"
|
||||
y1="11.1133"
|
||||
x1="4.1914001"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient6525">
|
||||
<stop
|
||||
id="stop6529"
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop6531"
|
||||
style="stop-color:#ffffff;stop-opacity:0.34020618;"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<path
|
||||
inkscape:r_cy="true"
|
||||
inkscape:r_cx="true"
|
||||
id="path6496"
|
||||
d="M 9.5,37.6 C 9.2,38.1 9.5,38.5 10,38.5 L 38.2,38.5 C 38.7,38.5 39,38.1 38.7,37.6 L 24.4,11 C 24.1,10.5 23.7,10.5 23.5,11 L 9.5,37.6 z "
|
||||
style="fill:url(#linearGradient3946);stroke:none" />
|
||||
</g>
|
||||
<path
|
||||
inkscape:r_cy="true"
|
||||
inkscape:r_cx="true"
|
||||
transform="matrix(1,0,-8.726683e-3,1,0.318277,1.276596)"
|
||||
sodipodi:nodetypes="ccsccscccc"
|
||||
id="path1325"
|
||||
d="M 32.323106,38.183905 L 22.150271,19.265666 C 21.71698,18.45069 21.561698,18.189213 20.908406,18.189213 C 20.346525,18.189213 20.054127,18.57002 19.651305,19.339291 L 9.7489285,38.242296 C 9.1737649,39.303588 9.1128238,39.580228 9.3937644,40.047345 C 9.6747034,40.514462 10.032797,40.48902 11.356441,40.519491 L 30.974593,40.519491 C 32.206825,40.534726 32.483988,40.440837 32.70874,39.97372 C 32.989681,39.506602 32.867799,39.136 32.323106,38.183905 z "
|
||||
style="opacity:0.5;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3948);stroke-width:0.63829792;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
</g>
|
||||
<g
|
||||
style="fill-rule:nonzero;stroke:#000000;stroke-miterlimit:4"
|
||||
transform="matrix(0.555088,0,0,0.555052,7.749711,17.80196)"
|
||||
id="g6498"
|
||||
inkscape:r_cx="true"
|
||||
inkscape:r_cy="true">
|
||||
<path
|
||||
style="stroke:none"
|
||||
d="M 23.9,36.5 C 22.6,36.5 21.6,35.5 21.6,34.2 C 21.6,32.8 22.5,31.9 23.9,31.9 C 25.3,31.9 26.1,32.8 26.2,34.2 C 26.2,35.5 25.3,36.5 23.9,36.5 L 23.9,36.5 z M 22.5,30.6 L 21.9,19.1 L 25.9,19.1 L 25.3,30.6 L 22.4,30.6 L 22.5,30.6 z "
|
||||
id="path6500"
|
||||
inkscape:r_cx="true"
|
||||
inkscape:r_cy="true" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 10 KiB |
444
design/icons/drive-cdrom_tango.svg
Normal file
|
@ -0,0 +1,444 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
sodipodi:docname="drive-cdrom.svg"
|
||||
sodipodi:docbase="/home/tigert/cvs/freedesktop.org/tango-icon-theme/scalable/devices"
|
||||
inkscape:version="0.43+devel"
|
||||
sodipodi:version="0.32"
|
||||
id="svg2913"
|
||||
height="48px"
|
||||
width="48px"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape">
|
||||
<defs
|
||||
id="defs3">
|
||||
<linearGradient
|
||||
id="linearGradient2351"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop2353"
|
||||
offset="0"
|
||||
style="stop-color:#656565;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop2355"
|
||||
offset="1"
|
||||
style="stop-color:#656565;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2345">
|
||||
<stop
|
||||
style="stop-color:#d9d9d9;stop-opacity:1.0000000;"
|
||||
offset="0.0000000"
|
||||
id="stop2347" />
|
||||
<stop
|
||||
style="stop-color:#eeeeee;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2349" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2329">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2331" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2333" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2315">
|
||||
<stop
|
||||
style="stop-color:#656565;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2317" />
|
||||
<stop
|
||||
style="stop-color:#656565;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2319" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2165">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2167" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2169" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="aigrd1"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="14.9966"
|
||||
y1="11.1885"
|
||||
x2="32.511"
|
||||
y2="34.3075">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#EBEBEB"
|
||||
id="stop3034" />
|
||||
<stop
|
||||
offset="0.5"
|
||||
style="stop-color:#FFFFFF"
|
||||
id="stop3036" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#EBEBEB"
|
||||
id="stop3038" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient6036">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop6038" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop6040" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4264"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop4266"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop4268"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4254"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop4256"
|
||||
offset="0"
|
||||
style="stop-color:#ffffff;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop4258"
|
||||
offset="1"
|
||||
style="stop-color:#ffffff;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4244">
|
||||
<stop
|
||||
id="stop4246"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#e4e4e4;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop4248"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#d3d3d3;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4228">
|
||||
<stop
|
||||
id="stop4230"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#bbbbbb;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop4232"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#9f9f9f;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="40.943935"
|
||||
x2="36.183067"
|
||||
y1="28.481176"
|
||||
x1="7.6046205"
|
||||
id="linearGradient4234"
|
||||
xlink:href="#linearGradient4228"
|
||||
inkscape:collect="always"
|
||||
gradientTransform="translate(0.000000,-1.944537)" />
|
||||
<radialGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.286242,0.781698,-0.710782,1.169552,-2.354348,-6.821398)"
|
||||
r="20.935817"
|
||||
fy="2.9585190"
|
||||
fx="15.571491"
|
||||
cy="2.9585190"
|
||||
cx="15.571491"
|
||||
id="radialGradient4250"
|
||||
xlink:href="#linearGradient4244"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="47.620636"
|
||||
x2="44.096100"
|
||||
y1="4.4331360"
|
||||
x1="12.378357"
|
||||
id="linearGradient4260"
|
||||
xlink:href="#linearGradient4254"
|
||||
inkscape:collect="always"
|
||||
gradientTransform="translate(0.000000,-1.944537)" />
|
||||
<radialGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,0.651032,-5.289283e-16,9.455693)"
|
||||
r="23.555494"
|
||||
fy="27.096155"
|
||||
fx="23.201941"
|
||||
cy="27.096155"
|
||||
cx="23.201941"
|
||||
id="radialGradient4270"
|
||||
xlink:href="#linearGradient4264"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#aigrd1"
|
||||
id="linearGradient2155"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.952531,0.000000,0.000000,0.656725,1.345471,19.22026)"
|
||||
x1="14.9966"
|
||||
y1="11.1885"
|
||||
x2="32.511"
|
||||
y2="34.3075" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient6036"
|
||||
id="linearGradient2161"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.738933,0.000000,0.000000,0.509459,6.215767,21.99197)"
|
||||
x1="10.501720"
|
||||
y1="3.6100161"
|
||||
x2="48.798885"
|
||||
y2="54.698483" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2165"
|
||||
id="radialGradient2171"
|
||||
cx="24.218407"
|
||||
cy="33.769478"
|
||||
fx="24.218407"
|
||||
fy="33.769478"
|
||||
r="17.677670"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,0.695000,0.000000,10.29969)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2351"
|
||||
id="linearGradient2321"
|
||||
x1="24.306797"
|
||||
y1="33.693432"
|
||||
x2="24.306797"
|
||||
y2="37.609333"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2329"
|
||||
id="linearGradient2335"
|
||||
x1="23.375000"
|
||||
y1="28.433596"
|
||||
x2="23.375000"
|
||||
y2="32.938416"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2329"
|
||||
id="linearGradient2337"
|
||||
x1="23.375000"
|
||||
y1="28.433596"
|
||||
x2="23.375000"
|
||||
y2="32.938416"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2315"
|
||||
id="linearGradient2341"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,0.799429,-9.653736e-16,6.604619)"
|
||||
x1="24.306797"
|
||||
y1="32.790924"
|
||||
x2="24.306797"
|
||||
y2="34.201233" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2345"
|
||||
id="linearGradient2343"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.800126,0.000000,0.000000,0.551649,4.725541,20.59938)"
|
||||
x1="26.332899"
|
||||
y1="34.172115"
|
||||
x2="26.193645"
|
||||
y2="21.987923" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
inkscape:window-y="74"
|
||||
inkscape:window-x="294"
|
||||
inkscape:window-height="752"
|
||||
inkscape:window-width="810"
|
||||
inkscape:document-units="px"
|
||||
inkscape:grid-bbox="true"
|
||||
showgrid="false"
|
||||
inkscape:current-layer="layer2"
|
||||
inkscape:cy="20.858772"
|
||||
inkscape:cx="24.951242"
|
||||
inkscape:zoom="11.313708"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
borderopacity="0.17254902"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff"
|
||||
id="base"
|
||||
inkscape:showpageshadow="false" />
|
||||
<metadata
|
||||
id="metadata4">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>Drive - CD-ROM</dc:title>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Jakub Steiner</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>cdrom</rdf:li>
|
||||
<rdf:li>cd-rom</rdf:li>
|
||||
<rdf:li>optical</rdf:li>
|
||||
<rdf:li>drive</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
|
||||
<dc:identifier />
|
||||
<dc:source>http://jimmac.musichall.cz</dc:source>
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="pix"
|
||||
id="layer2"
|
||||
inkscape:groupmode="layer">
|
||||
<path
|
||||
transform="matrix(1.052533,0.000000,0.000000,0.363113,-0.511757,24.92528)"
|
||||
d="M 46.757435 27.096155 A 23.555494 15.335379 0 1 1 -0.35355377,27.096155 A 23.555494 15.335379 0 1 1 46.757435 27.096155 z"
|
||||
sodipodi:ry="15.335379"
|
||||
sodipodi:rx="23.555494"
|
||||
sodipodi:cy="27.096155"
|
||||
sodipodi:cx="23.201941"
|
||||
id="path4262"
|
||||
style="opacity:0.56000000;color:#000000;fill:url(#radialGradient4270);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
|
||||
sodipodi:type="arc" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccsccccccccc"
|
||||
id="path4196"
|
||||
d="M 11.285690,6.0180852 C 10.660690,6.0180852 10.254441,6.3082654 10.004442,6.8618382 C 10.004441,6.8618382 3.5356915,23.965402 3.5356915,23.965402 C 3.5356915,23.965402 3.2856915,24.636961 3.2856915,25.746652 C 3.2856915,25.746652 3.2856915,35.396620 3.2856915,35.396620 C 3.2856915,36.479233 3.9434770,37.021622 4.9419415,37.021620 L 43.504440,37.021620 C 44.489293,37.021620 45.098190,36.303440 45.098190,35.177870 L 45.098190,25.527902 C 45.098190,25.527902 45.204153,24.757479 45.004440,24.215402 L 38.285690,7.0180888 C 38.101165,6.5061820 37.648785,6.0299905 37.160690,6.0180852 L 11.285690,6.0180852 z "
|
||||
style="stroke-opacity:1.0000000;stroke-dasharray:none;stroke-miterlimit:4.0000000;stroke-linejoin:round;stroke-linecap:round;stroke-width:2.0000000;stroke:#535353;fill-rule:evenodd;fill-opacity:1.0000000;fill:none" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="opacity:0.56571429;color:#000000;fill:url(#radialGradient2171);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:0.42372879;visibility:visible;display:inline;overflow:visible"
|
||||
id="path2163"
|
||||
sodipodi:cx="24.218407"
|
||||
sodipodi:cy="33.769478"
|
||||
sodipodi:rx="17.677670"
|
||||
sodipodi:ry="12.285980"
|
||||
d="M 41.896076 33.769478 A 17.677670 12.285980 0 1 1 6.5407372,33.769478 A 17.677670 12.285980 0 1 1 41.896076 33.769478 z"
|
||||
transform="translate(0.883883,1.260942e-6)" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccccc"
|
||||
id="path4170"
|
||||
d="M 3.2735915,25.052276 L 4.0381936,24.360061 L 41.647883,24.422561 L 45.110290,24.739859 L 45.110290,35.178391 C 45.110290,36.303960 44.503272,37.021722 43.518419,37.021722 L 4.9354314,37.021722 C 3.9369667,37.021722 3.2735915,36.479671 3.2735915,35.397058 L 3.2735915,25.052276 z "
|
||||
style="fill:url(#linearGradient4234);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0204430px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
|
||||
<path
|
||||
sodipodi:nodetypes="csccccccs"
|
||||
id="path3093"
|
||||
d="M 3.5490842,23.969868 C 2.8347985,25.434154 3.5484686,26.362725 4.5847985,26.362725 C 4.5847985,26.362725 43.584797,26.362725 43.584797,26.362725 C 44.703844,26.338915 45.430035,25.350820 45.013368,24.219867 L 38.299082,7.0091618 C 38.114558,6.4972550 37.644320,6.0210632 37.156225,6.0091582 L 11.299083,6.0091582 C 10.674083,6.0091582 10.263369,6.3127314 10.013370,6.8663042 C 10.013370,6.8663042 3.5490842,23.969868 3.5490842,23.969868 z "
|
||||
style="fill:url(#radialGradient4250);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccccccc"
|
||||
id="path4201"
|
||||
d="M 44.796162,23.684152 C 44.859684,24.934126 44.382159,25.999992 43.474046,26.027902 C 43.474046,26.027902 5.3553296,26.027901 5.3553297,26.027902 C 4.0660978,26.027902 3.4875937,25.702955 3.2712790,25.159846 C 3.3630404,26.104178 4.0970964,26.809152 5.3553297,26.809152 C 5.3553296,26.809151 43.474046,26.809152 43.474046,26.809152 C 44.550053,26.776081 45.226851,25.385128 44.826210,23.814361 L 44.796162,23.684152 z "
|
||||
style="fill:#ffffff;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
|
||||
<path
|
||||
style="fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:url(#linearGradient4260);stroke-width:1.0000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000"
|
||||
d="M 11.642515,6.4711801 C 11.040823,6.4711801 10.649724,6.7505387 10.409049,7.2834674 C 10.409048,7.2834674 3.9940341,23.874196 3.9940341,23.874196 C 3.9940341,23.874196 3.7533573,24.520711 3.7533573,25.589019 C 3.7533573,25.589019 3.7533573,34.879115 3.7533573,34.879115 C 3.7533573,36.233855 4.1974134,36.506014 5.3478414,36.506014 L 43.034746,36.506014 C 44.357872,36.506014 44.569062,36.189617 44.569062,34.668522 L 44.569062,25.378426 C 44.569062,25.378426 44.671072,24.636735 44.478807,24.114873 L 37.885616,7.3088910 C 37.707973,6.8160745 37.334964,6.4826414 36.865071,6.4711801 L 11.642515,6.4711801 z "
|
||||
id="path4252"
|
||||
sodipodi:nodetypes="cccsccccccccc" />
|
||||
<g
|
||||
id="g2142"
|
||||
transform="matrix(0.933652,0.000000,0.000000,0.933652,1.612716,-0.367774)">
|
||||
<rect
|
||||
y="32.363384"
|
||||
x="5.3414402"
|
||||
height="3.8650389"
|
||||
width="37.930714"
|
||||
id="rect2151"
|
||||
style="overflow:visible;display:inline;visibility:visible;stroke-opacity:0.42372879;stroke-dashoffset:0.0000000;stroke-dasharray:none;stroke-miterlimit:4.0000000;marker-end:none;marker-mid:none;marker-start:none;marker:none;stroke-linejoin:round;stroke-linecap:square;stroke-width:1.0000000;stroke:none;fill-rule:evenodd;fill-opacity:1.0;fill:url(#linearGradient2321);color:#000000;opacity:1.0000000" />
|
||||
<path
|
||||
style="fill:url(#linearGradient2155);fill-rule:nonzero;stroke:none;stroke-miterlimit:4.0000000"
|
||||
d="M 7.9921136,31.810344 C 7.7171786,32.641366 7.5233636,33.513742 7.5233636,34.404094 C 7.5233626,40.774327 14.971312,45.872844 24.210863,45.872844 C 33.450413,45.872844 40.867114,40.774327 40.867114,34.404094 C 40.867114,33.517511 40.702291,32.638143 40.429614,31.810344 L 24.867113,31.810344 C 26.706930,32.055511 28.210863,33.069699 28.210863,34.404094 C 28.210863,35.914562 26.401684,37.154094 24.210863,37.154094 C 22.020041,37.154094 20.210863,35.914562 20.210863,34.404094 C 20.210864,33.069699 21.714796,32.055511 23.554613,31.810344 L 7.9921136,31.810344 z "
|
||||
id="path3040" />
|
||||
<path
|
||||
style="stroke-opacity:1.0000000;stroke-miterlimit:4.0000000;stroke:#808080;fill-rule:nonzero;fill:url(#linearGradient2343)"
|
||||
d="M 7.8358636,32.341594 C 7.6633096,33.007401 7.5233636,33.702881 7.5233636,34.404094 C 7.5233636,40.774327 14.971312,45.872844 24.210863,45.872844 C 33.450413,45.872844 40.867114,40.774327 40.867114,34.404094 C 40.867114,33.702881 40.727168,33.007401 40.554614,32.341594 L 7.8358636,32.341594 z "
|
||||
id="path3049"
|
||||
sodipodi:nodetypes="cccccc" />
|
||||
<path
|
||||
style="opacity:0.10999996;fill-rule:nonzero;stroke:none;stroke-miterlimit:4.0000000"
|
||||
d="M 16.572139,31.835312 C 15.798652,32.755289 15.247183,33.294631 15.247183,34.422908 C 15.247182,37.895941 19.357577,40.629280 24.277804,40.629280 C 29.315180,40.629279 33.308425,37.815173 33.308425,34.422908 C 33.308425,33.278057 32.722182,32.749858 31.948602,31.835312 L 26.571647,31.835312 C 28.249533,32.378741 29.194088,33.072249 29.194088,34.422908 C 29.194089,36.280577 26.972214,37.805032 24.277804,37.805032 C 21.583392,37.805032 19.361520,36.280577 19.361520,34.422908 C 19.361520,33.071466 20.280853,32.378317 21.960294,31.835312 L 16.572139,31.835312 z "
|
||||
id="path3051"
|
||||
sodipodi:nodetypes="ccccccccccc" />
|
||||
<path
|
||||
style="stroke-opacity:1.0000000;stroke-miterlimit:4.0000000;stroke:none;fill-rule:nonzero;fill-opacity:0.41807911;fill:#ffffff"
|
||||
d="M 18.573984,44.742880 L 22.362784,37.212044 C 21.485635,36.996354 20.814201,36.572930 20.390359,36.015734 L 10.011877,39.604017 C 11.761798,41.989464 14.806535,43.844478 18.573984,44.742880 z "
|
||||
id="path4214" />
|
||||
<path
|
||||
style="opacity:0.54644811;fill:none;fill-rule:nonzero;stroke:url(#linearGradient2161);stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
|
||||
d="M 8.9118137,32.267515 C 8.6630467,33.007387 8.5077732,33.947164 8.5077732,34.740917 C 8.5077732,40.331493 16.102156,44.813068 24.210871,44.813068 C 32.319587,44.813067 39.713147,40.331492 39.713147,34.740917 C 39.713146,33.946625 39.529342,33.007846 39.280247,32.267515 L 8.9118137,32.267515 z "
|
||||
id="path5264"
|
||||
sodipodi:nodetypes="cccccc" />
|
||||
<rect
|
||||
style="opacity:1.0000000;color:#000000;fill:url(#linearGradient2341);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:0.42372879;visibility:visible;display:inline;overflow:visible;font-family:Bitstream Vera Sans"
|
||||
id="rect4963"
|
||||
width="37.863773"
|
||||
height="1.1911809"
|
||||
x="5.3414402"
|
||||
y="31.627470" />
|
||||
</g>
|
||||
<path
|
||||
style="opacity:0.36000000;stroke-opacity:1.0000000;stroke-linejoin:miter;stroke-linecap:butt;stroke-width:1.0000000px;stroke:none;fill-rule:evenodd;fill-opacity:1.0;fill:url(#linearGradient2335)"
|
||||
d="M 26.312500,30.250000 L 40.062500,30.250000 C 40.062500,30.250000 40.603959,31.370993 40.000000,33.625000 C 40.000000,33.625000 26.687500,33.125000 26.687500,33.125000 C 28.537859,31.274641 26.312500,30.250000 26.312500,30.250000 z "
|
||||
id="path2325"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
id="path2327"
|
||||
d="M 22.098146,30.250000 L 8.3481460,30.250000 C 8.3481460,30.250000 7.8066870,31.370993 8.4106460,33.625000 C 8.4106460,33.625000 21.723146,33.125000 21.723146,33.125000 C 19.872787,31.274641 22.098146,30.250000 22.098146,30.250000 z "
|
||||
style="opacity:0.36000000;stroke-opacity:1.0000000;stroke-linejoin:miter;stroke-linecap:butt;stroke-width:1.0000000px;stroke:none;fill-rule:evenodd;fill-opacity:1.0;fill:url(#linearGradient2337)" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 21 KiB |
469
design/icons/drive-harddisk_tango.svg
Normal file
|
@ -0,0 +1,469 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
sodipodi:docname="drive-harddisk.svg"
|
||||
sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/devices"
|
||||
inkscape:version="0.43+devel"
|
||||
sodipodi:version="0.32"
|
||||
id="svg2913"
|
||||
height="48px"
|
||||
width="48px">
|
||||
<defs
|
||||
id="defs3">
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5060"
|
||||
id="radialGradient6719"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
|
||||
cx="605.71429"
|
||||
cy="486.64789"
|
||||
fx="605.71429"
|
||||
fy="486.64789"
|
||||
r="117.14286" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5060">
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5062" />
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop5064" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5060"
|
||||
id="radialGradient6717"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
|
||||
cx="605.71429"
|
||||
cy="486.64789"
|
||||
fx="605.71429"
|
||||
fy="486.64789"
|
||||
r="117.14286" />
|
||||
<linearGradient
|
||||
id="linearGradient5048">
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:0;"
|
||||
offset="0"
|
||||
id="stop5050" />
|
||||
<stop
|
||||
id="stop5056"
|
||||
offset="0.5"
|
||||
style="stop-color:black;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop5052" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5048"
|
||||
id="linearGradient6715"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
|
||||
x1="302.85715"
|
||||
y1="366.64789"
|
||||
x2="302.85715"
|
||||
y2="609.50507" />
|
||||
<linearGradient
|
||||
id="linearGradient2555">
|
||||
<stop
|
||||
id="stop2557"
|
||||
offset="0"
|
||||
style="stop-color:#ffffff;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#e6e6e6;stop-opacity:1.0000000;"
|
||||
offset="0.50000000"
|
||||
id="stop2561" />
|
||||
<stop
|
||||
id="stop2563"
|
||||
offset="0.75000000"
|
||||
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
style="stop-color:#e1e1e1;stop-opacity:1.0000000;"
|
||||
offset="0.84166664"
|
||||
id="stop2565" />
|
||||
<stop
|
||||
id="stop2559"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4274">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0.25490198;"
|
||||
offset="0.0000000"
|
||||
id="stop4276" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop4278" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4264"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop4266"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop4268"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4254"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop4256"
|
||||
offset="0"
|
||||
style="stop-color:#ffffff;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop4258"
|
||||
offset="1"
|
||||
style="stop-color:#ffffff;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4244">
|
||||
<stop
|
||||
id="stop4246"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#e4e4e4;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop4248"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#d3d3d3;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4236"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop4238"
|
||||
offset="0"
|
||||
style="stop-color:#eeeeee;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop4240"
|
||||
offset="1"
|
||||
style="stop-color:#eeeeee;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4228">
|
||||
<stop
|
||||
id="stop4230"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#bbbbbb;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop4232"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#9f9f9f;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4184">
|
||||
<stop
|
||||
id="stop4186"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#838383;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop4188"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#bbbbbb;stop-opacity:0.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
gradientTransform="translate(0.795493,-1.325821)"
|
||||
y2="35.281250"
|
||||
x2="24.687500"
|
||||
y1="35.281250"
|
||||
x1="7.0625000"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient4209"
|
||||
xlink:href="#linearGradient4184"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="40.943935"
|
||||
x2="36.183067"
|
||||
y1="28.481176"
|
||||
x1="7.6046205"
|
||||
id="linearGradient4234"
|
||||
xlink:href="#linearGradient4228"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="33.758667"
|
||||
x2="12.221823"
|
||||
y1="37.205811"
|
||||
x1="12.277412"
|
||||
id="linearGradient4242"
|
||||
xlink:href="#linearGradient4236"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.286242,0.781698,-0.710782,1.169552,-2.354348,-4.876862)"
|
||||
r="20.935817"
|
||||
fy="2.9585190"
|
||||
fx="15.571491"
|
||||
cy="2.9585190"
|
||||
cx="15.571491"
|
||||
id="radialGradient4250"
|
||||
xlink:href="#linearGradient4244"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="47.620636"
|
||||
x2="44.096100"
|
||||
y1="4.4331360"
|
||||
x1="12.378357"
|
||||
id="linearGradient4260"
|
||||
xlink:href="#linearGradient4254"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,0.651032,0.000000,9.455693)"
|
||||
r="23.555494"
|
||||
fy="27.096155"
|
||||
fx="23.201941"
|
||||
cy="27.096155"
|
||||
cx="23.201941"
|
||||
id="radialGradient4270"
|
||||
xlink:href="#linearGradient4264"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="26.357183"
|
||||
x2="23.688078"
|
||||
y1="11.318835"
|
||||
x1="23.688078"
|
||||
id="linearGradient4272"
|
||||
xlink:href="#linearGradient4274"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2555"
|
||||
id="linearGradient2553"
|
||||
x1="33.431175"
|
||||
y1="31.964777"
|
||||
x2="21.747974"
|
||||
y2="11.780679"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
inkscape:window-y="178"
|
||||
inkscape:window-x="462"
|
||||
inkscape:window-height="907"
|
||||
inkscape:window-width="999"
|
||||
inkscape:document-units="px"
|
||||
inkscape:grid-bbox="true"
|
||||
showgrid="false"
|
||||
inkscape:current-layer="layer2"
|
||||
inkscape:cy="16.661091"
|
||||
inkscape:cx="21.494618"
|
||||
inkscape:zoom="16"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
borderopacity="1.0"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff"
|
||||
id="base" />
|
||||
<metadata
|
||||
id="metadata4">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>Drive - Hard Disk</dc:title>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Jakub Steiner</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>hdd</rdf:li>
|
||||
<rdf:li>hard drive</rdf:li>
|
||||
<rdf:li>fixed</rdf:li>
|
||||
<rdf:li>media</rdf:li>
|
||||
<rdf:li>solid</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
|
||||
<dc:identifier />
|
||||
<dc:source>http://jimmac.musichall.cz</dc:source>
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="pix"
|
||||
id="layer2"
|
||||
inkscape:groupmode="layer">
|
||||
<g
|
||||
transform="matrix(2.45274e-2,0,0,2.086758e-2,45.69054,36.1536)"
|
||||
id="g6707">
|
||||
<rect
|
||||
style="opacity:0.40206185;color:black;fill:url(#linearGradient6715);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
id="rect6709"
|
||||
width="1339.6335"
|
||||
height="478.35718"
|
||||
x="-1559.2523"
|
||||
y="-150.69685" />
|
||||
<path
|
||||
style="opacity:0.40206185;color:black;fill:url(#radialGradient6717);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
|
||||
id="path6711"
|
||||
sodipodi:nodetypes="cccc" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccc"
|
||||
id="path6713"
|
||||
d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
|
||||
style="opacity:0.40206185;color:black;fill:url(#radialGradient6719);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
|
||||
</g>
|
||||
<path
|
||||
sodipodi:nodetypes="cccsccccccccc"
|
||||
id="path4196"
|
||||
d="M 11.285690,7.9626278 C 10.660690,7.9626278 10.254441,8.2528080 10.004442,8.8063808 C 10.004441,8.8063808 3.5356915,25.909938 3.5356915,25.909938 C 3.5356915,25.909938 3.2856915,26.581497 3.2856915,27.691188 C 3.2856915,27.691188 3.2856915,37.341156 3.2856915,37.341156 C 3.2856915,38.423769 3.9434770,38.966158 4.9419415,38.966156 L 43.504440,38.966156 C 44.489293,38.966156 45.098190,38.247976 45.098190,37.122406 L 45.098190,27.472438 C 45.098190,27.472438 45.204153,26.702015 45.004440,26.159938 L 38.285690,8.9626314 C 38.101165,8.4507246 37.648785,7.9745331 37.160690,7.9626278 L 11.285690,7.9626278 z "
|
||||
style="stroke-opacity:1.0000000;stroke-dasharray:none;stroke-miterlimit:4.0000000;stroke-linejoin:round;stroke-linecap:round;stroke-width:2.0000000;stroke:#535353;fill-rule:evenodd;fill-opacity:1.0000000;fill:none" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccccc"
|
||||
id="path4170"
|
||||
d="M 3.2735915,26.996812 L 4.0381936,26.304597 L 41.647883,26.367097 L 45.110290,26.684395 L 45.110290,37.122927 C 45.110290,38.248496 44.503272,38.966258 43.518419,38.966258 L 4.9354314,38.966258 C 3.9369667,38.966258 3.2735915,38.424207 3.2735915,37.341594 L 3.2735915,26.996812 z "
|
||||
style="fill:url(#linearGradient4234);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:1.0204430px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
|
||||
<path
|
||||
sodipodi:nodetypes="csccccccs"
|
||||
id="path3093"
|
||||
d="M 3.5490842,25.914404 C 2.8347985,27.378690 3.5484686,28.307261 4.5847985,28.307261 C 4.5847985,28.307261 43.584797,28.307261 43.584797,28.307261 C 44.703844,28.283451 45.430035,27.295356 45.013368,26.164403 L 38.299082,8.9537044 C 38.114558,8.4417976 37.644320,7.9656058 37.156225,7.9537008 L 11.299083,7.9537008 C 10.674083,7.9537008 10.263369,8.2572740 10.013370,8.8108468 C 10.013370,8.8108468 3.5490842,25.914404 3.5490842,25.914404 z "
|
||||
style="fill:url(#radialGradient4250);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
|
||||
<rect
|
||||
y="31.174183"
|
||||
x="7.8579960"
|
||||
height="5.5625000"
|
||||
width="17.625000"
|
||||
id="rect4174"
|
||||
style="opacity:1.0000000;color:#000000;fill:url(#linearGradient4209);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:2.4089999;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
|
||||
<path
|
||||
sodipodi:nodetypes="cscc"
|
||||
id="path4194"
|
||||
d="M 7.8579947,36.736680 C 7.8579947,36.736680 7.8579947,32.725195 7.8579947,32.725195 C 9.6935221,35.904421 16.154485,36.736680 20.795492,36.736680 C 20.795492,36.736680 7.8579947,36.736680 7.8579947,36.736680 z "
|
||||
style="opacity:0.81142857;stroke-opacity:1.0000000;stroke-linejoin:miter;stroke-linecap:butt;stroke-width:1.0000000px;stroke:none;fill-rule:evenodd;fill-opacity:1.0;fill:url(#linearGradient4242)" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccccccc"
|
||||
id="path4201"
|
||||
d="M 44.796162,25.628688 C 44.859684,26.878662 44.382159,27.944528 43.474046,27.972438 C 43.474046,27.972438 5.3553296,27.972437 5.3553297,27.972438 C 4.0660978,27.972438 3.4875937,27.647491 3.2712790,27.104382 C 3.3630404,28.048714 4.0970964,28.753688 5.3553297,28.753688 C 5.3553296,28.753687 43.474046,28.753688 43.474046,28.753688 C 44.550053,28.720617 45.226851,27.329664 44.826210,25.758897 L 44.796162,25.628688 z "
|
||||
style="fill:#ffffff;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
|
||||
<path
|
||||
id="path4211"
|
||||
d="M 10.968750 10.156250 C 10.922675 10.356571 10.781250 10.543047 10.781250 10.750000 C 10.781250 11.698605 11.372230 12.539474 12.125000 13.343750 C 12.365268 13.189675 12.490117 12.989342 12.750000 12.843750 C 11.809691 12.027746 11.196604 11.127168 10.968750 10.156250 z M 37.625000 10.156250 C 37.396273 11.125866 36.782988 12.028676 35.843750 12.843750 C 36.117894 12.997332 36.247738 13.211990 36.500000 13.375000 C 37.257262 12.568344 37.812500 11.701956 37.812500 10.750000 C 37.812500 10.543047 37.670906 10.356571 37.625000 10.156250 z M 39.812500 18.593750 C 39.198709 22.633861 32.513887 25.843750 24.281250 25.843750 C 16.068996 25.843751 9.4211001 22.650964 8.7812500 18.625000 C 8.7488928 18.822132 8.6562500 19.016882 8.6562500 19.218750 C 8.6562503 23.536697 15.645354 27.062501 24.281250 27.062500 C 32.917146 27.062500 39.937499 23.536698 39.937500 19.218750 C 39.937500 19.005826 39.848449 18.801394 39.812500 18.593750 z "
|
||||
style="opacity:0.69142857;color:#000000;fill:url(#linearGradient4272);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:2.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
|
||||
<path
|
||||
transform="translate(8.838843e-2,0.176776)"
|
||||
d="M 8.5736699 25.593554 A 1.3700194 1.0164660 0 1 1 5.8336310,25.593554 A 1.3700194 1.0164660 0 1 1 8.5736699 25.593554 z"
|
||||
sodipodi:ry="1.0164660"
|
||||
sodipodi:rx="1.3700194"
|
||||
sodipodi:cy="25.593554"
|
||||
sodipodi:cx="7.2036505"
|
||||
id="path4224"
|
||||
style="opacity:1.0000000;color:#000000;fill:#ffffff;fill-opacity:0.45762709;fill-rule:evenodd;stroke:none;stroke-width:2.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
|
||||
sodipodi:type="arc" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="opacity:1.0000000;color:#000000;fill:#ffffff;fill-opacity:0.45762709;fill-rule:evenodd;stroke:none;stroke-width:2.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
|
||||
id="path4226"
|
||||
sodipodi:cx="7.2036505"
|
||||
sodipodi:cy="25.593554"
|
||||
sodipodi:rx="1.3700194"
|
||||
sodipodi:ry="1.0164660"
|
||||
d="M 8.5736699 25.593554 A 1.3700194 1.0164660 0 1 1 5.8336310,25.593554 A 1.3700194 1.0164660 0 1 1 8.5736699 25.593554 z"
|
||||
transform="translate(33.96705,8.838804e-2)" />
|
||||
<path
|
||||
style="fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:url(#linearGradient4260);stroke-width:1.0000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000"
|
||||
d="M 11.642515,8.4157227 C 11.040823,8.4157227 10.649724,8.6950813 10.409049,9.2280100 C 10.409048,9.2280100 3.9940341,25.818732 3.9940341,25.818732 C 3.9940341,25.818732 3.7533573,26.465247 3.7533573,27.533555 C 3.7533573,27.533555 3.7533573,36.823651 3.7533573,36.823651 C 3.7533573,38.178391 4.1974134,38.450550 5.3478414,38.450550 L 43.034746,38.450550 C 44.357872,38.450550 44.569062,38.134153 44.569062,36.613058 L 44.569062,27.322962 C 44.569062,27.322962 44.671072,26.581271 44.478807,26.059409 L 37.885616,9.2534336 C 37.707973,8.7606171 37.334964,8.4271840 36.865071,8.4157227 L 11.642515,8.4157227 z "
|
||||
id="path4252"
|
||||
sodipodi:nodetypes="cccsccccccccc" />
|
||||
<path
|
||||
style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:0.42372882"
|
||||
d="M 40.500000,31.429166 L 40.500000,36.450101"
|
||||
id="path4282" />
|
||||
<path
|
||||
id="path4284"
|
||||
d="M 38.500000,31.488943 L 38.500000,36.509878"
|
||||
style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:0.42372882" />
|
||||
<path
|
||||
style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:0.42372882"
|
||||
d="M 36.500000,31.488943 L 36.500000,36.509878"
|
||||
id="path4286" />
|
||||
<path
|
||||
id="path4288"
|
||||
d="M 34.500000,31.488943 L 34.500000,36.509878"
|
||||
style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:0.42372882" />
|
||||
<path
|
||||
style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:0.42372882"
|
||||
d="M 32.500000,31.488943 L 32.500000,36.509878"
|
||||
id="path4290" />
|
||||
<path
|
||||
id="path4292"
|
||||
d="M 30.500000,31.488943 L 30.500000,36.509878"
|
||||
style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:0.42372882" />
|
||||
<path
|
||||
id="path4294"
|
||||
d="M 39.500000,31.479065 L 39.500000,36.500000"
|
||||
style="opacity:0.097142857;fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1.0000000" />
|
||||
<path
|
||||
style="opacity:0.097142857;fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1.0000000"
|
||||
d="M 37.500000,31.538842 L 37.500000,36.559777"
|
||||
id="path4296" />
|
||||
<path
|
||||
id="path4298"
|
||||
d="M 35.500000,31.538842 L 35.500000,36.559777"
|
||||
style="opacity:0.097142857;fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1.0000000" />
|
||||
<path
|
||||
style="opacity:0.097142857;fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1.0000000"
|
||||
d="M 33.500000,31.538842 L 33.500000,36.559777"
|
||||
id="path4300" />
|
||||
<path
|
||||
id="path4302"
|
||||
d="M 31.500000,31.538842 L 31.500000,36.559777"
|
||||
style="opacity:0.097142857;fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.0000005px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1.0000000" />
|
||||
<path
|
||||
id="path4572"
|
||||
d="M 7.8750000,31.187500 L 7.8750000,36.718750 L 20.437500,36.718750 L 8.2187500,36.375000 L 7.8750000,31.187500 z "
|
||||
style="opacity:0.44000000;fill:#ffffff;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="opacity:0.20571424;color:#000000;fill:url(#linearGradient2553);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.93365198;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:0.42372879;visibility:visible;display:inline;overflow:visible"
|
||||
id="path2545"
|
||||
sodipodi:cx="25.000000"
|
||||
sodipodi:cy="19.562500"
|
||||
sodipodi:rx="14.875000"
|
||||
sodipodi:ry="6.6875000"
|
||||
d="M 39.875000 19.562500 A 14.875000 6.6875000 0 1 1 10.125000,19.562500 A 14.875000 6.6875000 0 1 1 39.875000 19.562500 z"
|
||||
transform="matrix(1.037815,0.000000,0.000000,1.060747,-1.632878,-2.094626)" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 23 KiB |
390
design/icons/drive-removable-media_tango.svg
Normal file
|
@ -0,0 +1,390 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
sodipodi:docname="drive-removable-media.svg"
|
||||
sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/devices"
|
||||
inkscape:version="0.43+devel"
|
||||
sodipodi:version="0.32"
|
||||
id="svg2913"
|
||||
height="48px"
|
||||
width="48px">
|
||||
<defs
|
||||
id="defs3">
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5060"
|
||||
id="radialGradient6719"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
|
||||
cx="605.71429"
|
||||
cy="486.64789"
|
||||
fx="605.71429"
|
||||
fy="486.64789"
|
||||
r="117.14286" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5060">
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5062" />
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop5064" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5060"
|
||||
id="radialGradient6717"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
|
||||
cx="605.71429"
|
||||
cy="486.64789"
|
||||
fx="605.71429"
|
||||
fy="486.64789"
|
||||
r="117.14286" />
|
||||
<linearGradient
|
||||
id="linearGradient5048">
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:0;"
|
||||
offset="0"
|
||||
id="stop5050" />
|
||||
<stop
|
||||
id="stop5056"
|
||||
offset="0.5"
|
||||
style="stop-color:black;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop5052" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5048"
|
||||
id="linearGradient6715"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
|
||||
x1="302.85715"
|
||||
y1="366.64789"
|
||||
x2="302.85715"
|
||||
y2="609.50507" />
|
||||
<linearGradient
|
||||
id="linearGradient5699">
|
||||
<stop
|
||||
id="stop5701"
|
||||
offset="0"
|
||||
style="stop-color:#7a7a7a;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop5703"
|
||||
offset="1"
|
||||
style="stop-color:#a5a5a5;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2681">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0.47524753;"
|
||||
offset="0.0000000"
|
||||
id="stop2683" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2685" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2673">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2675" />
|
||||
<stop
|
||||
style="stop-color:#6f6f6f;stop-opacity:1.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop2677" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4264"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop4266"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop4268"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4254"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop4256"
|
||||
offset="0"
|
||||
style="stop-color:#ffffff;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop4258"
|
||||
offset="1"
|
||||
style="stop-color:#ffffff;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4244">
|
||||
<stop
|
||||
id="stop4246"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#e4e4e4;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop4248"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#d3d3d3;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4228">
|
||||
<stop
|
||||
id="stop4230"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#bbbbbb;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop4232"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#9f9f9f;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="40.943935"
|
||||
x2="36.183067"
|
||||
y1="28.481176"
|
||||
x1="7.6046205"
|
||||
id="linearGradient4234"
|
||||
xlink:href="#linearGradient4228"
|
||||
inkscape:collect="always"
|
||||
gradientTransform="translate(0.000000,5.546300e-2)" />
|
||||
<radialGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.286242,0.781698,-0.710782,1.169552,-2.354348,-4.821398)"
|
||||
r="20.935817"
|
||||
fy="2.9585190"
|
||||
fx="15.571491"
|
||||
cy="2.9585190"
|
||||
cx="15.571491"
|
||||
id="radialGradient4250"
|
||||
xlink:href="#linearGradient4244"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="47.620636"
|
||||
x2="44.096100"
|
||||
y1="4.4331360"
|
||||
x1="12.378357"
|
||||
id="linearGradient4260"
|
||||
xlink:href="#linearGradient4254"
|
||||
inkscape:collect="always"
|
||||
gradientTransform="translate(0.000000,5.546300e-2)" />
|
||||
<radialGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,0.651032,-6.731815e-16,9.455693)"
|
||||
r="23.555494"
|
||||
fy="27.096155"
|
||||
fx="23.201941"
|
||||
cy="27.096155"
|
||||
cx="23.201941"
|
||||
id="radialGradient4270"
|
||||
xlink:href="#linearGradient4264"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2673"
|
||||
id="radialGradient2679"
|
||||
cx="40.796875"
|
||||
cy="33.734375"
|
||||
fx="40.796875"
|
||||
fy="33.734375"
|
||||
r="0.98437500"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.253968,-7.218212e-15,7.218212e-15,1.253968,-10.36111,-8.567460)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2681"
|
||||
id="linearGradient2687"
|
||||
x1="25.785229"
|
||||
y1="32.363384"
|
||||
x2="25.785229"
|
||||
y2="35.670216"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2681"
|
||||
id="linearGradient2689"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="25.785229"
|
||||
y1="32.363384"
|
||||
x2="25.785229"
|
||||
y2="35.670216" />
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="10.596288"
|
||||
x2="16.127340"
|
||||
y1="22.705490"
|
||||
x1="34.420757"
|
||||
id="linearGradient5705"
|
||||
xlink:href="#linearGradient5699"
|
||||
inkscape:collect="always" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
fill="#f57900"
|
||||
inkscape:showpageshadow="false"
|
||||
inkscape:window-y="163"
|
||||
inkscape:window-x="275"
|
||||
inkscape:window-height="683"
|
||||
inkscape:window-width="872"
|
||||
inkscape:document-units="px"
|
||||
inkscape:grid-bbox="true"
|
||||
showgrid="false"
|
||||
inkscape:current-layer="layer2"
|
||||
inkscape:cy="10.253819"
|
||||
inkscape:cx="89.378036"
|
||||
inkscape:zoom="2.8284271"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
borderopacity="0.36078431"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff"
|
||||
id="base" />
|
||||
<metadata
|
||||
id="metadata4">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>Drive - Removable</dc:title>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Jakub Steiner</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>media</rdf:li>
|
||||
<rdf:li>removable</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
|
||||
<dc:identifier />
|
||||
<dc:source>http://jimmac.musichall.cz</dc:source>
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="pix"
|
||||
id="layer2"
|
||||
inkscape:groupmode="layer">
|
||||
<g
|
||||
transform="matrix(2.45274e-2,0,0,2.086758e-2,45.69054,36.1536)"
|
||||
id="g6707">
|
||||
<rect
|
||||
style="opacity:0.40206185;color:black;fill:url(#linearGradient6715);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
id="rect6709"
|
||||
width="1339.6335"
|
||||
height="478.35718"
|
||||
x="-1559.2523"
|
||||
y="-150.69685" />
|
||||
<path
|
||||
style="opacity:0.40206185;color:black;fill:url(#radialGradient6717);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
|
||||
id="path6711"
|
||||
sodipodi:nodetypes="cccc" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccc"
|
||||
id="path6713"
|
||||
d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
|
||||
style="opacity:0.40206185;color:black;fill:url(#radialGradient6719);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
|
||||
</g>
|
||||
<path
|
||||
sodipodi:nodetypes="cccsccccccccc"
|
||||
id="path4196"
|
||||
d="M 11.285690,8.0180850 C 10.660690,8.0180850 10.254441,8.3082650 10.004442,8.8618380 C 10.004441,8.8618380 3.5356915,25.965402 3.5356915,25.965402 C 3.5356915,25.965402 3.2856915,26.636961 3.2856915,27.746652 C 3.2856915,27.746652 3.2856915,37.396620 3.2856915,37.396620 C 3.2856915,38.479233 3.9434770,39.021622 4.9419415,39.021620 L 43.504440,39.021620 C 44.489293,39.021620 45.098190,38.303440 45.098190,37.177870 L 45.098190,27.527902 C 45.098190,27.527902 45.204153,26.757479 45.004440,26.215402 L 38.285690,9.0180890 C 38.101165,8.5061820 37.648785,8.0299910 37.160690,8.0180850 L 11.285690,8.0180850 z "
|
||||
style="fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#535353;stroke-width:2.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccccc"
|
||||
id="path4170"
|
||||
d="M 3.2735915,27.052276 L 4.0381936,26.360061 L 41.647883,26.422561 L 45.110290,26.739859 L 45.110290,37.178391 C 45.110290,38.303960 44.503272,39.021722 43.518419,39.021722 L 4.9354314,39.021722 C 3.9369667,39.021722 3.2735915,38.479671 3.2735915,37.397058 L 3.2735915,27.052276 z "
|
||||
style="fill:url(#linearGradient4234);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0204430px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
|
||||
<path
|
||||
sodipodi:nodetypes="csccccccs"
|
||||
id="path3093"
|
||||
d="M 3.5490842,25.969868 C 2.8347985,27.434154 3.5484686,28.362725 4.5847985,28.362725 C 4.5847985,28.362725 43.584797,28.362725 43.584797,28.362725 C 44.703844,28.338915 45.430035,27.350820 45.013368,26.219867 L 38.299082,9.0091620 C 38.114558,8.4972550 37.644320,8.0210630 37.156225,8.0091580 L 11.299083,8.0091580 C 10.674083,8.0091580 10.263369,8.3127310 10.013370,8.8663040 C 10.013370,8.8663040 3.5490842,25.969868 3.5490842,25.969868 z "
|
||||
style="fill:url(#radialGradient4250);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccc"
|
||||
id="path4201"
|
||||
d="M 43.562434,27.674347 C 43.562434,27.674347 5.4437179,27.674346 5.4437180,27.674347 C 4.1544861,27.674347 3.5317878,27.437788 3.3154731,26.894679 C 3.4072345,27.839011 4.1854847,28.455597 5.4437180,28.455597 C 5.4437179,28.455596 43.562434,28.455597 43.562434,28.455597 C 44.638441,28.422526 45.301832,27.596846 45.047181,26.300495 C 44.913133,27.142077 44.470547,27.646437 43.562434,27.674347 z "
|
||||
style="opacity:1.0000000;fill:#ffffff;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccccc"
|
||||
id="path5637"
|
||||
d="M 38.344670,9.2120874 C 38.344670,9.2120874 44.500000,24.750000 44.500000,24.750000 C 43.881282,24.352252 43.618718,24.036612 43.000000,24.125000 L 5.2500000,24.125000 C 4.5428932,24.125000 3.8383883,24.875000 3.8383883,24.875000 L 10.125000,8.8750000 C 10.258882,8.3753463 10.748699,8.0732233 11.411612,8.0732233 L 36.830806,7.9848350 C 38.156631,8.1616117 38.123699,8.5933690 38.344670,9.2120874 z "
|
||||
style="opacity:1;color:#000000;fill:url(#linearGradient5705);fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
|
||||
<path
|
||||
style="stroke-opacity:1.0000000;stroke-linejoin:miter;stroke-linecap:butt;stroke-width:1.0000000px;stroke:none;fill-rule:evenodd;fill-opacity:1;fill:#686868"
|
||||
d="M 44.707773,25.362009 C 44.373548,25.128501 44.072800,25.167489 43.518240,25.139579 C 43.518240,25.139579 4.7366112,24.874414 4.7366112,24.874414 C 4.1620870,24.918608 3.4957121,25.684093 3.4957121,25.684093 C 3.4957121,25.684093 4.0667741,24.284062 4.0667741,24.284062 C 4.0667741,24.284062 4.4064556,23.120892 5.6646889,23.120892 C 5.6646888,23.120893 42.855327,23.120892 42.855327,23.120892 C 43.577781,23.153963 44.022560,23.550547 44.207491,24.016460 L 44.707773,25.362009 z "
|
||||
id="path5697"
|
||||
sodipodi:nodetypes="cccsccccc" />
|
||||
<path
|
||||
style="fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:url(#linearGradient4260);stroke-width:1.0000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000"
|
||||
d="M 11.642515,8.4711800 C 11.040823,8.4711800 10.649724,8.7505390 10.409049,9.2834670 C 10.409048,9.2834670 3.9940341,25.874196 3.9940341,25.874196 C 3.9940341,25.874196 3.7533573,26.520711 3.7533573,27.589019 C 3.7533573,27.589019 3.7533573,36.879115 3.7533573,36.879115 C 3.7533573,38.233855 4.1974134,38.506014 5.3478414,38.506014 L 43.034746,38.506014 C 44.357872,38.506014 44.569062,38.189617 44.569062,36.668522 L 44.569062,27.378426 C 44.569062,27.378426 44.671072,26.636735 44.478807,26.114873 L 37.885616,9.3088910 C 37.707973,8.8160750 37.334964,8.4826410 36.865071,8.4711800 L 11.642515,8.4711800 z "
|
||||
id="path4252"
|
||||
sodipodi:nodetypes="cccsccccccccc" />
|
||||
<g
|
||||
id="g2142"
|
||||
transform="matrix(0.828197,0.000000,0.000000,0.610240,4.176000,11.16143)"
|
||||
style="fill:url(#linearGradient2687);fill-opacity:1.0000000">
|
||||
<rect
|
||||
y="32.363384"
|
||||
x="5.3414402"
|
||||
height="3.8650389"
|
||||
width="37.930714"
|
||||
id="rect2151"
|
||||
style="opacity:1.0000000;color:#000000;fill:url(#linearGradient2689);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:0.42372879;visibility:visible;display:inline;overflow:visible" />
|
||||
</g>
|
||||
<path
|
||||
style="opacity:0.71428573;fill:#ffffff;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
|
||||
d="M 8.6250000,33.250000 C 8.6250000,33.250000 9.0696486,34.066942 9.8651437,34.022748 C 9.8651437,34.022748 40.715385,34.000000 40.715385,34.000000 C 40.671191,31.569320 40.027885,30.881430 40.027885,30.881430 L 40.062500,33.312500 L 8.6250000,33.250000 z "
|
||||
id="path1899"
|
||||
sodipodi:nodetypes="cccccc" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="opacity:1.0000000;color:#000000;fill:url(#radialGradient2679);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0204430px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible;font-family:Bitstream Vera Sans"
|
||||
id="path2671"
|
||||
sodipodi:cx="41.015625"
|
||||
sodipodi:cy="33.984375"
|
||||
sodipodi:rx="0.98437500"
|
||||
sodipodi:ry="0.98437500"
|
||||
d="M 42.000000 33.984375 A 0.98437500 0.98437500 0 1 1 40.031250,33.984375 A 0.98437500 0.98437500 0 1 1 42.000000 33.984375 z"
|
||||
transform="matrix(1.380952,0.000000,0.000000,1.380952,-15.62500,-10.94643)" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 18 KiB |
512
design/icons/globe-lips.svg
Normal file
After Width: | Height: | Size: 28 KiB |
1004
design/icons/gnome-dev-removable-usb_nuvola.svg
Normal file
After Width: | Height: | Size: 41 KiB |
1195
design/icons/gnome-globe_nuvola.svg
Normal file
After Width: | Height: | Size: 72 KiB |
433
design/icons/gtk-zoom-in_nuvola.svg
Normal file
|
@ -0,0 +1,433 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
|
||||
xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.0"
|
||||
width="48pt"
|
||||
height="48pt"
|
||||
viewBox="0 0 256 256"
|
||||
id="svg2"
|
||||
xml:space="preserve"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.42+devel"
|
||||
sodipodi:docname="gtk-zoom-in.svg"
|
||||
sodipodi:docbase="/home/cschalle/gnome/gnome-themes-extras/Nuvola/icons/scalable/stock"><metadata
|
||||
id="metadata72"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><sodipodi:namedview
|
||||
inkscape:cy="417.84947"
|
||||
inkscape:cx="305.25953"
|
||||
inkscape:zoom="0.43415836"
|
||||
inkscape:window-height="563"
|
||||
inkscape:window-width="822"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
borderopacity="1.0"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff"
|
||||
id="base"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="30"
|
||||
inkscape:current-layer="svg2" /><defs
|
||||
id="defs125" />
|
||||
|
||||
<g
|
||||
id="switch6">
|
||||
<foreignObject
|
||||
id="foreignObject8"
|
||||
height="1"
|
||||
width="1"
|
||||
y="0"
|
||||
x="0"
|
||||
requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/">
|
||||
<i:pgfRef
|
||||
xlink:href="#adobe_illustrator_pgf">
|
||||
</i:pgfRef>
|
||||
</foreignObject>
|
||||
<g
|
||||
id="g10">
|
||||
<g
|
||||
id="Layer_1">
|
||||
<g
|
||||
id="g13">
|
||||
<linearGradient
|
||||
x1="15.1685"
|
||||
y1="99.097702"
|
||||
x2="183.0273"
|
||||
y2="99.097702"
|
||||
id="XMLID_14_"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
style="stop-color:#494949;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop16" />
|
||||
<stop
|
||||
style="stop-color:#616161;stop-opacity:1"
|
||||
offset="0.5"
|
||||
id="stop18" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop20" />
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</linearGradient>
|
||||
<path
|
||||
d="M 39.521,39.521 L 39.521,39.521 C 7.05,71.993 7.05,124.83 39.521,157.302 C 53.626,171.407 72.322,179.987 92.166,181.459 C 111.368,182.884 130.468,177.538 146.195,166.466 C 148.178,168.45 160.082,180.353 160.082,180.353 C 164.44,184.711 172.085,183.641 177.863,177.863 C 181.257,174.468 183.027,170.43 183.027,166.793 C 183.027,164.237 182.153,161.88 180.355,160.082 C 180.355,160.082 168.451,148.178 166.466,146.193 C 176.357,132.146 181.687,115.413 181.687,98.31 C 181.687,96.265 181.612,94.215 181.459,92.164 C 179.985,72.322 171.406,53.626 157.302,39.52 C 124.83,7.051 71.994,7.051 39.521,39.521 z "
|
||||
style="fill:url(#XMLID_14_)"
|
||||
id="path22" />
|
||||
<linearGradient
|
||||
x1="196.70509"
|
||||
y1="248.7227"
|
||||
x2="196.70509"
|
||||
y2="149.4514"
|
||||
id="XMLID_15_"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
style="stop-color:#7c0000;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop25" />
|
||||
<stop
|
||||
style="stop-color:#cf0000;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop27" />
|
||||
|
||||
|
||||
|
||||
</linearGradient>
|
||||
<path
|
||||
d="M 160.184,160.188 C 155.228,165.142 152.578,171.192 152.578,176.548 C 152.578,179.695 153.493,182.605 155.395,184.909 L 155.457,184.983 L 155.515,185.132 L 207.64,237.259 C 213.674,243.291 224.906,241.513 233.21,233.21 C 241.515,224.904 243.293,213.672 237.261,207.64 L 185.07,155.449 L 184.952,155.429 C 178.726,150.247 168.079,152.292 160.184,160.188 z "
|
||||
style="fill:url(#XMLID_15_)"
|
||||
id="path29" />
|
||||
<linearGradient
|
||||
x1="17.168501"
|
||||
y1="99.1045"
|
||||
x2="181.0253"
|
||||
y2="99.1045"
|
||||
id="XMLID_16_"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
style="stop-color:#a2a2a2;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop32" />
|
||||
<stop
|
||||
style="stop-color:#494949;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop34" />
|
||||
|
||||
|
||||
|
||||
</linearGradient>
|
||||
<path
|
||||
d="M 42.35,42.35 C 27.4,57.301 19.167,77.211 19.167,98.412 C 19.167,119.613 27.4,139.523 42.35,154.475 C 55.779,167.903 73.575,176.07 92.462,177.471 C 111.29,178.868 130.04,173.472 145.258,162.276 L 146.643,161.258 L 162.911,177.526 C 165.657,180.272 170.87,179.202 175.036,175.036 C 179.201,170.869 180.272,165.656 177.528,162.911 L 161.258,146.641 L 162.276,145.257 C 173.473,130.039 178.87,111.289 177.471,92.462 C 176.069,73.574 167.902,55.777 154.475,42.35 C 123.562,11.438 73.263,11.438 42.35,42.35 z "
|
||||
style="fill:url(#XMLID_16_)"
|
||||
id="path36" />
|
||||
|
||||
<linearGradient
|
||||
x1="47.964802"
|
||||
y1="190.2119"
|
||||
x2="69.606903"
|
||||
y2="211.8539"
|
||||
id="XMLID_17_"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-1.000000,0.000000,0.000000,1.000000,258.0000,0.000000)">
|
||||
<stop
|
||||
style="stop-color:#ffc957;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop39" />
|
||||
<stop
|
||||
style="stop-color:#ff6d00;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop41" />
|
||||
|
||||
|
||||
|
||||
</linearGradient>
|
||||
<path
|
||||
d="M 181.85,160.041 L 233.354,211.545 C 237.139,215.332 235.325,223.281 229.303,229.303 C 223.28,235.326 215.332,237.139 211.545,233.352 L 160.041,181.848 L 181.85,160.041 z "
|
||||
style="fill:url(#XMLID_17_)"
|
||||
id="path43" />
|
||||
|
||||
<linearGradient
|
||||
x1="48.526901"
|
||||
y1="194.8232"
|
||||
x2="64.114403"
|
||||
y2="210.4108"
|
||||
id="XMLID_18_"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-1.224300,-0.128800,0.128800,1.224300,243.0516,-40.91190)">
|
||||
<stop
|
||||
style="stop-color:#ffff66;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop46" />
|
||||
<stop
|
||||
style="stop-color:#ff6d00;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop48" />
|
||||
|
||||
|
||||
|
||||
</linearGradient>
|
||||
<path
|
||||
d="M 181.08,162.141 L 231.274,212.335 C 234.962,216.025 234.101,222.867 229.349,227.617 C 224.597,232.369 217.757,233.228 214.067,229.542 L 163.873,179.348 L 181.08,162.141 z "
|
||||
style="fill:url(#XMLID_18_)"
|
||||
id="path50" />
|
||||
<linearGradient
|
||||
x1="182.1367"
|
||||
y1="182.1357"
|
||||
x2="164.09219"
|
||||
y2="164.09129"
|
||||
id="XMLID_19_"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
style="stop-color:#ffd700;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop53" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop55" />
|
||||
|
||||
|
||||
|
||||
</linearGradient>
|
||||
<path
|
||||
d="M 181.85,160.041 C 185.635,163.826 183.821,171.777 177.797,177.799 C 171.776,183.82 163.828,185.635 160.041,181.848 C 156.256,178.063 158.068,170.116 164.092,164.092 C 170.113,158.07 178.063,156.256 181.85,160.041 z "
|
||||
style="fill:url(#XMLID_19_)"
|
||||
id="path57" />
|
||||
|
||||
<linearGradient
|
||||
x1="131.58591"
|
||||
y1="-4.0268998"
|
||||
x2="131.58591"
|
||||
y2="210.97231"
|
||||
id="XMLID_20_"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-0.707100,0.707100,0.707100,0.707100,148.8760,-37.21400)">
|
||||
<stop
|
||||
style="stop-color:#dadada;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop60" />
|
||||
<stop
|
||||
style="stop-color:#949494;stop-opacity:1"
|
||||
offset="0.6124"
|
||||
id="stop62" />
|
||||
<stop
|
||||
style="stop-color:#dadada;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop64" />
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</linearGradient>
|
||||
<path
|
||||
d="M 43.43,153.396 C 13.063,123.028 13.063,73.793 43.43,43.428 C 73.795,13.061 123.03,13.061 153.397,43.428 C 181.657,71.687 183.61,116.282 159.272,146.812 L 176.448,163.988 C 178.514,166.052 177.397,170.515 173.958,173.957 C 170.517,177.396 166.054,178.514 163.989,176.447 L 146.813,159.273 C 116.283,183.611 71.688,181.656 43.43,153.396 z "
|
||||
style="fill:url(#XMLID_20_)"
|
||||
id="path66" />
|
||||
|
||||
<linearGradient
|
||||
x1="134.8213"
|
||||
y1="149.9229"
|
||||
x2="124.5826"
|
||||
y2="149.9229"
|
||||
id="XMLID_21_"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-0.707100,0.707100,0.582600,0.582600,169.5297,-16.56120)">
|
||||
<stop
|
||||
style="stop-color:#b2b2b2;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop69" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop71" />
|
||||
|
||||
|
||||
|
||||
</linearGradient>
|
||||
<path
|
||||
d="M 159.183,149.769 C 159.183,149.769 176.389,166.976 177.37,167.954 C 177.063,168.708 176.214,170.158 174.519,171.85 L 174.519,171.85 C 172.822,173.547 171.373,174.397 170.621,174.701 C 169.643,173.723 152.436,156.513 152.436,156.513 L 159.183,149.769 z "
|
||||
style="fill:url(#XMLID_21_)"
|
||||
id="path73" />
|
||||
<linearGradient
|
||||
x1="27.7358"
|
||||
y1="98.412102"
|
||||
x2="169.0889"
|
||||
y2="98.412102"
|
||||
id="XMLID_22_"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop76" />
|
||||
<stop
|
||||
style="stop-color:#494949;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop78" />
|
||||
|
||||
|
||||
|
||||
</linearGradient>
|
||||
<path
|
||||
d="M 148.412,48.412 C 175.98,75.982 175.982,120.842 148.412,148.412 C 120.84,175.982 75.982,175.98 48.412,148.412 C 20.844,120.842 20.844,75.982 48.412,48.412 C 75.982,20.843 120.842,20.843 148.412,48.412 z "
|
||||
style="fill:url(#XMLID_22_)"
|
||||
id="path80" />
|
||||
|
||||
<radialGradient
|
||||
cx="92.632797"
|
||||
cy="20.0571"
|
||||
r="176.5367"
|
||||
fx="92.632797"
|
||||
fy="20.0571"
|
||||
id="XMLID_23_"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-0.707100,0.707100,0.707100,0.707100,148.8760,-37.21400)">
|
||||
<stop
|
||||
style="stop-color:#0035ed;stop-opacity:1"
|
||||
offset="0.0056"
|
||||
id="stop83" />
|
||||
<stop
|
||||
style="stop-color:#94caff;stop-opacity:1"
|
||||
offset="0.56739998"
|
||||
id="stop85" />
|
||||
<stop
|
||||
style="stop-color:#c9e6ff;stop-opacity:1"
|
||||
offset="0.70789999"
|
||||
id="stop87" />
|
||||
<stop
|
||||
style="stop-color:#034cfe;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop89" />
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</radialGradient>
|
||||
<path
|
||||
d="M 145.92,50.905 C 172.115,77.1 172.115,119.722 145.92,145.92 C 119.723,172.115 77.102,172.115 50.906,145.92 C 24.709,119.722 24.711,77.1 50.906,50.905 C 77.102,24.709 119.723,24.709 145.92,50.905 z "
|
||||
style="fill:url(#XMLID_23_)"
|
||||
id="path91" />
|
||||
|
||||
<radialGradient
|
||||
cx="92.957001"
|
||||
cy="19.922899"
|
||||
r="176.53951"
|
||||
fx="92.957001"
|
||||
fy="19.922899"
|
||||
id="XMLID_24_"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1"
|
||||
offset="0.0056"
|
||||
id="stop94" />
|
||||
<stop
|
||||
style="stop-color:#94caff;stop-opacity:1"
|
||||
offset="0.44999999"
|
||||
id="stop96" />
|
||||
<stop
|
||||
style="stop-color:#c9e6ff;stop-opacity:1"
|
||||
offset="0.60000002"
|
||||
id="stop98" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop100" />
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</radialGradient>
|
||||
<path
|
||||
d="M 53.735,53.733 L 53.735,53.733 C 41.821,65.647 35.26,81.515 35.259,98.412 C 35.259,115.309 41.821,131.177 53.736,143.092 C 78.371,167.727 118.456,167.727 143.092,143.092 C 167.727,118.454 167.727,78.369 143.092,53.734 C 118.455,29.098 78.37,29.098 53.735,53.733 z "
|
||||
style="fill:url(#XMLID_24_)"
|
||||
id="path102" />
|
||||
</g>
|
||||
<rect
|
||||
width="256"
|
||||
height="256"
|
||||
x="0"
|
||||
y="0"
|
||||
style="fill:none"
|
||||
id="_x3C_Slice_x3E_" />
|
||||
<polyline
|
||||
id="_x3C_Slice_x3E__1_"
|
||||
i:knockout="Off"
|
||||
points="0,256 0,0 256,0 256,256 "
|
||||
style="fill:none" />
|
||||
<g
|
||||
id="g106">
|
||||
<linearGradient
|
||||
x1="201.1055"
|
||||
y1="191"
|
||||
x2="17.3937"
|
||||
y2="191"
|
||||
id="XMLID_25_"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
style="stop-color:#003333;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop109" />
|
||||
<stop
|
||||
style="stop-color:#006a00;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop111" />
|
||||
|
||||
|
||||
|
||||
</linearGradient>
|
||||
<path
|
||||
d="M 125,163 L 113,163 L 113,151 C 113,142.729 106.271,136 98,136 L 72,136 C 63.729,136 57,142.729 57,151 L 57,163 L 45,163 C 36.729,163 30,169.729 30,178 L 30,204 C 30,212.271 36.729,219 45,219 L 57,219 L 57,231 C 57,239.271 63.729,246 72,246 L 98,246 C 106.271,246 113,239.271 113,231 L 113,219 L 125,219 C 133.271,219 140,212.271 140,204 L 140,178 C 140,169.729 133.271,163 125,163 z "
|
||||
style="fill:url(#XMLID_25_)"
|
||||
id="path113" />
|
||||
<path
|
||||
d="M 125,168 L 108,168 L 108,151 C 108,145.478 103.522,141 98,141 L 72,141 C 66.478,141 62,145.478 62,151 L 62,168 L 45,168 C 39.478,168 35,172.478 35,178 L 35,204 C 35,209.522 39.478,214 45,214 L 62,214 L 62,231 C 62,236.522 66.478,241 72,241 L 98,241 C 103.522,241 108,236.522 108,231 L 108,214 L 125,214 C 130.522,214 135,209.522 135,204 L 135,178 C 135,172.478 130.522,168 125,168 z "
|
||||
style="fill:#ffffff"
|
||||
id="path115" />
|
||||
<linearGradient
|
||||
x1="201.1035"
|
||||
y1="191"
|
||||
x2="17.3915"
|
||||
y2="191"
|
||||
id="XMLID_26_"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
style="stop-color:#33cc33;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop118" />
|
||||
<stop
|
||||
style="stop-color:#006a00;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop120" />
|
||||
|
||||
|
||||
|
||||
</linearGradient>
|
||||
<polygon
|
||||
points="125,178 98,178 98,151 72,151 72,178 45,178 45,204 72,204 72,231 98,231 98,204 125,204 125,178 "
|
||||
style="fill:url(#XMLID_26_)"
|
||||
id="polygon122" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 13 KiB |
701
design/icons/help_contents.svg
Normal file
|
@ -0,0 +1,701 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
inkscape:export-ydpi="240.00000"
|
||||
inkscape:export-xdpi="240.00000"
|
||||
inkscape:export-filename="/home/jimmac/gfx/novell/pdes/trunk/docs/BIGmime-text.png"
|
||||
sodipodi:docname="help-contents.svg"
|
||||
sodipodi:docbase="/home/tigert/cvs/freedesktop.org/tango-icon-theme/scalable/actions"
|
||||
inkscape:version="0.43+devel"
|
||||
sodipodi:version="0.32"
|
||||
id="svg249"
|
||||
height="48.000000px"
|
||||
width="48.000000px"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape">
|
||||
<defs
|
||||
id="defs3">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient4542">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop4544" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop4546" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient15662">
|
||||
<stop
|
||||
id="stop15664"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop15666"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#f8f8f8;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
id="aigrd3"
|
||||
cx="20.8921"
|
||||
cy="64.5679"
|
||||
r="5.257"
|
||||
fx="20.8921"
|
||||
fy="64.5679"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#F0F0F0"
|
||||
id="stop15573" />
|
||||
<stop
|
||||
offset="1.0000000"
|
||||
style="stop-color:#9a9a9a;stop-opacity:1.0000000;"
|
||||
id="stop15575" />
|
||||
</radialGradient>
|
||||
<radialGradient
|
||||
id="aigrd2"
|
||||
cx="20.8921"
|
||||
cy="114.5684"
|
||||
r="5.256"
|
||||
fx="20.8921"
|
||||
fy="114.5684"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#F0F0F0"
|
||||
id="stop15566" />
|
||||
<stop
|
||||
offset="1.0000000"
|
||||
style="stop-color:#9a9a9a;stop-opacity:1.0000000;"
|
||||
id="stop15568" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="linearGradient269">
|
||||
<stop
|
||||
id="stop270"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#a3a3a3;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop271"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#4c4c4c;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient259">
|
||||
<stop
|
||||
id="stop260"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#fafafa;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop261"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#bbbbbb;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient269"
|
||||
id="radialGradient15656"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.968273,0.000000,0.000000,1.032767,3.353553,0.646447)"
|
||||
cx="8.8244190"
|
||||
cy="3.7561285"
|
||||
fx="8.8244190"
|
||||
fy="3.7561285"
|
||||
r="37.751713" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient259"
|
||||
id="radialGradient15658"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="scale(0.960493,1.041132)"
|
||||
cx="33.966679"
|
||||
cy="35.736916"
|
||||
fx="33.966679"
|
||||
fy="35.736916"
|
||||
r="86.708450" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient15662"
|
||||
id="radialGradient15668"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.968273,0.000000,0.000000,1.032767,3.353553,0.646447)"
|
||||
cx="8.1435566"
|
||||
cy="7.2678967"
|
||||
fx="8.1435566"
|
||||
fy="7.2678967"
|
||||
r="38.158695" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4542"
|
||||
id="radialGradient4548"
|
||||
cx="24.306795"
|
||||
cy="42.07798"
|
||||
fx="24.306795"
|
||||
fy="42.07798"
|
||||
r="15.821514"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,0.284916,0.000000,30.08928)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<radialGradient
|
||||
id="aigrd8"
|
||||
cx="37.6357"
|
||||
cy="-29.6997"
|
||||
r="12.8245"
|
||||
fx="37.6357"
|
||||
fy="-29.6997"
|
||||
gradientTransform="matrix(0 1 -1 0 -17.6563 -25.5215)"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
offset="0.0000000"
|
||||
style="stop-color:#210101;stop-opacity:1.0000000;"
|
||||
id="stop2061" />
|
||||
<stop
|
||||
id="stop3650"
|
||||
style="stop-color:#ff747e;stop-opacity:1.0000000;"
|
||||
offset="0.50000000" />
|
||||
<stop
|
||||
offset="1.0000000"
|
||||
style="stop-color:#830000;stop-opacity:1.0000000;"
|
||||
id="stop2079" />
|
||||
</radialGradient>
|
||||
<radialGradient
|
||||
id="aigrd5"
|
||||
cx="11.5034"
|
||||
cy="11.3452"
|
||||
r="9.2994"
|
||||
fx="11.5034"
|
||||
fy="11.3452"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#C5C5C5"
|
||||
id="stop1990" />
|
||||
<stop
|
||||
offset="0.237"
|
||||
style="stop-color:#C8C8C8"
|
||||
id="stop1992" />
|
||||
<stop
|
||||
offset="0.4082"
|
||||
style="stop-color:#D1D1D1"
|
||||
id="stop1994" />
|
||||
<stop
|
||||
offset="0.5587"
|
||||
style="stop-color:#E1E1E1"
|
||||
id="stop1996" />
|
||||
<stop
|
||||
offset="0.6964"
|
||||
style="stop-color:#F7F7F7"
|
||||
id="stop1998" />
|
||||
<stop
|
||||
offset="0.736"
|
||||
style="stop-color:#FFFFFF"
|
||||
id="stop2000" />
|
||||
<stop
|
||||
offset="0.8191"
|
||||
style="stop-color:#FCFCFC"
|
||||
id="stop2002" />
|
||||
<stop
|
||||
offset="0.8812"
|
||||
style="stop-color:#F2F2F2"
|
||||
id="stop2004" />
|
||||
<stop
|
||||
offset="0.9364"
|
||||
style="stop-color:#E2E2E2"
|
||||
id="stop2006" />
|
||||
<stop
|
||||
offset="0.9875"
|
||||
style="stop-color:#CCCCCC"
|
||||
id="stop2008" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#C5C5C5"
|
||||
id="stop2010" />
|
||||
</radialGradient>
|
||||
<radialGradient
|
||||
id="aigrd4"
|
||||
cx="18.1523"
|
||||
cy="5.6528"
|
||||
r="3.5497"
|
||||
fx="18.1523"
|
||||
fy="5.6528"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#3C3C3C"
|
||||
id="stop1957" />
|
||||
<stop
|
||||
offset="0.3633"
|
||||
style="stop-color:#3E3E3E"
|
||||
id="stop1959" />
|
||||
<stop
|
||||
offset="0.4942"
|
||||
style="stop-color:#454545"
|
||||
id="stop1961" />
|
||||
<stop
|
||||
offset="0.5875"
|
||||
style="stop-color:#505050"
|
||||
id="stop1963" />
|
||||
<stop
|
||||
offset="0.6629"
|
||||
style="stop-color:#616161"
|
||||
id="stop1965" />
|
||||
<stop
|
||||
offset="0.7276"
|
||||
style="stop-color:#777777"
|
||||
id="stop1967" />
|
||||
<stop
|
||||
offset="0.7848"
|
||||
style="stop-color:#939393"
|
||||
id="stop1969" />
|
||||
<stop
|
||||
offset="0.8353"
|
||||
style="stop-color:#B2B2B2"
|
||||
id="stop1971" />
|
||||
<stop
|
||||
offset="0.8764"
|
||||
style="stop-color:#D2D2D2"
|
||||
id="stop1973" />
|
||||
<stop
|
||||
offset="0.8998"
|
||||
style="stop-color:#CECECE"
|
||||
id="stop1975" />
|
||||
<stop
|
||||
offset="0.9223"
|
||||
style="stop-color:#C3C3C3"
|
||||
id="stop1977" />
|
||||
<stop
|
||||
offset="0.9446"
|
||||
style="stop-color:#AFAFAF"
|
||||
id="stop1979" />
|
||||
<stop
|
||||
offset="0.9666"
|
||||
style="stop-color:#949494"
|
||||
id="stop1981" />
|
||||
<stop
|
||||
offset="0.9884"
|
||||
style="stop-color:#717171"
|
||||
id="stop1983" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#5B5B5B"
|
||||
id="stop1985" />
|
||||
</radialGradient>
|
||||
<radialGradient
|
||||
id="aigrd1"
|
||||
cx="18.1523"
|
||||
cy="18.3291"
|
||||
r="3.5495"
|
||||
fx="18.1523"
|
||||
fy="18.3291"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#3C3C3C"
|
||||
id="stop1852" />
|
||||
<stop
|
||||
offset="0.3633"
|
||||
style="stop-color:#3E3E3E"
|
||||
id="stop1854" />
|
||||
<stop
|
||||
offset="0.4942"
|
||||
style="stop-color:#454545"
|
||||
id="stop1856" />
|
||||
<stop
|
||||
offset="0.5875"
|
||||
style="stop-color:#505050"
|
||||
id="stop1858" />
|
||||
<stop
|
||||
offset="0.6629"
|
||||
style="stop-color:#616161"
|
||||
id="stop1860" />
|
||||
<stop
|
||||
offset="0.7276"
|
||||
style="stop-color:#777777"
|
||||
id="stop1862" />
|
||||
<stop
|
||||
offset="0.7848"
|
||||
style="stop-color:#939393"
|
||||
id="stop1864" />
|
||||
<stop
|
||||
offset="0.8353"
|
||||
style="stop-color:#B2B2B2"
|
||||
id="stop1866" />
|
||||
<stop
|
||||
offset="0.8764"
|
||||
style="stop-color:#D2D2D2"
|
||||
id="stop1868" />
|
||||
<stop
|
||||
offset="0.8998"
|
||||
style="stop-color:#CECECE"
|
||||
id="stop1870" />
|
||||
<stop
|
||||
offset="0.9223"
|
||||
style="stop-color:#C3C3C3"
|
||||
id="stop1872" />
|
||||
<stop
|
||||
offset="0.9446"
|
||||
style="stop-color:#AFAFAF"
|
||||
id="stop1874" />
|
||||
<stop
|
||||
offset="0.9666"
|
||||
style="stop-color:#949494"
|
||||
id="stop1876" />
|
||||
<stop
|
||||
offset="0.9884"
|
||||
style="stop-color:#717171"
|
||||
id="stop1878" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#5B5B5B"
|
||||
id="stop1880" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3640"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop3642"
|
||||
offset="0"
|
||||
style="stop-color:#ffffff;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop3644"
|
||||
offset="1"
|
||||
style="stop-color:#ffffff;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#aigrd1"
|
||||
id="radialGradient5534"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.132196,0.000000,0.000000,2.132196,-97.11122,15.26563)"
|
||||
cx="18.1523"
|
||||
cy="18.3291"
|
||||
fx="18.1523"
|
||||
fy="18.3291"
|
||||
r="3.5495" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#aigrd2"
|
||||
id="radialGradient5536"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.132196,0.000000,0.000000,2.132196,-91.44192,15.26563)"
|
||||
cx="5.7334"
|
||||
cy="18.3291"
|
||||
fx="5.7334"
|
||||
fy="18.3291"
|
||||
r="3.5495" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#aigrd3"
|
||||
id="radialGradient5538"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.132196,0.000000,0.000000,2.132196,-91.44192,20.93492)"
|
||||
cx="5.7334"
|
||||
cy="5.6528"
|
||||
fx="5.7334"
|
||||
fy="5.6528"
|
||||
r="3.5497" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#aigrd4"
|
||||
id="radialGradient5540"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.132196,0.000000,0.000000,2.132196,-97.11122,20.93492)"
|
||||
cx="18.1523"
|
||||
cy="5.6528"
|
||||
fx="18.1523"
|
||||
fy="5.6528"
|
||||
r="3.5497" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#aigrd5"
|
||||
id="radialGradient5542"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.132196,0.000000,0.000000,2.132196,-94.27657,18.10027)"
|
||||
cx="11.586308"
|
||||
cy="11.676833"
|
||||
fx="11.586308"
|
||||
fy="11.676833"
|
||||
r="9.2994" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#aigrd8"
|
||||
id="radialGradient5544"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.000000,-1.995477,1.995477,0.000000,-40.29889,-16.87378)"
|
||||
cx="-30.104782"
|
||||
cy="-14.617684"
|
||||
fx="-30.104782"
|
||||
fy="-14.617684"
|
||||
r="12.822400" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#aigrd8"
|
||||
id="radialGradient5546"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-2.020236,0.000000,0.000000,-2.018756,-72.22632,-71.13473)"
|
||||
cx="-1.3652747"
|
||||
cy="-56.636044"
|
||||
fx="-1.3652747"
|
||||
fy="-56.636044"
|
||||
r="12.826500" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#aigrd8"
|
||||
id="radialGradient5548"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.000000,1.975946,-1.975946,0.000000,-126.5395,-31.17259)"
|
||||
cx="37.638786"
|
||||
cy="-28.883039"
|
||||
fx="37.638786"
|
||||
fy="-28.883039"
|
||||
r="12.8245" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#aigrd8"
|
||||
id="radialGradient5550"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.995477,0.000000,0.000000,1.995477,-93.26485,19.11199)"
|
||||
cx="11.925323"
|
||||
cy="12.071112"
|
||||
fx="11.925323"
|
||||
fy="12.071112"
|
||||
r="12.824500" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3640"
|
||||
id="linearGradient5552"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(-92.27870,19.84228)"
|
||||
x1="15.737945"
|
||||
y1="9.1388483"
|
||||
x2="51.313351"
|
||||
y2="64.278435" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3640"
|
||||
id="linearGradient5554"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(-92.27870,19.84228)"
|
||||
x1="27.426350"
|
||||
y1="30.840612"
|
||||
x2="15.759552"
|
||||
y2="13.170511" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
inkscape:window-y="1001"
|
||||
inkscape:window-x="338"
|
||||
inkscape:window-height="747"
|
||||
inkscape:window-width="839"
|
||||
inkscape:document-units="px"
|
||||
inkscape:grid-bbox="true"
|
||||
showgrid="false"
|
||||
inkscape:current-layer="layer5"
|
||||
inkscape:cy="31.232715"
|
||||
inkscape:cx="41.233954"
|
||||
inkscape:zoom="1"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
borderopacity="0.25490196"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff"
|
||||
id="base"
|
||||
inkscape:showpageshadow="false" />
|
||||
<metadata
|
||||
id="metadata4">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>Help Contents</dc:title>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>help</rdf:li>
|
||||
<rdf:li>index</rdf:li>
|
||||
<rdf:li>contents</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Jakub Steiner</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:source>http://jimmac.musichall.cz</dc:source>
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by/2.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer6"
|
||||
inkscape:label="Shadow">
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="opacity:0.7836257;color:#000000;fill:url(#radialGradient4548);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
id="path3667"
|
||||
sodipodi:cx="24.306795"
|
||||
sodipodi:cy="42.07798"
|
||||
sodipodi:rx="15.821514"
|
||||
sodipodi:ry="4.5078058"
|
||||
d="M 40.128309 42.07798 A 15.821514 4.5078058 0 1 1 8.485281,42.07798 A 15.821514 4.5078058 0 1 1 40.128309 42.07798 z"
|
||||
transform="translate(0.000000,0.707108)" />
|
||||
</g>
|
||||
<g
|
||||
style="display:inline"
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="Base"
|
||||
id="layer1">
|
||||
<rect
|
||||
style="color:#000000;fill:url(#radialGradient15658);fill-opacity:1.0000000;fill-rule:nonzero;stroke:url(#radialGradient15656);stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible"
|
||||
id="rect15391"
|
||||
width="34.875000"
|
||||
height="40.920494"
|
||||
x="6.6035528"
|
||||
y="3.6464462"
|
||||
ry="1.1490486" />
|
||||
<rect
|
||||
style="color:#000000;fill:none;fill-opacity:1.0000000;fill-rule:nonzero;stroke:url(#radialGradient15668);stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible"
|
||||
id="rect15660"
|
||||
width="32.775887"
|
||||
height="38.946384"
|
||||
x="7.6660538"
|
||||
y="4.5839462"
|
||||
ry="0.14904857"
|
||||
rx="0.14904857" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer5"
|
||||
inkscape:label="Text"
|
||||
style="display:inline">
|
||||
<g
|
||||
transform="matrix(0.909091,0.000000,0.000000,1.000000,2.363628,0.000000)"
|
||||
id="g2253">
|
||||
<rect
|
||||
style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970759;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.081871338;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible"
|
||||
id="rect15686"
|
||||
width="22.000004"
|
||||
height="1.0000000"
|
||||
x="15.000002"
|
||||
y="9.0000000"
|
||||
rx="0.15156493"
|
||||
ry="0.065390877" />
|
||||
<rect
|
||||
style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970759;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.081871338;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible"
|
||||
id="rect15690"
|
||||
width="22.000004"
|
||||
height="1.0000000"
|
||||
x="15.000002"
|
||||
y="13.000000"
|
||||
rx="0.15156493"
|
||||
ry="0.065390877" />
|
||||
<rect
|
||||
style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970759;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.081871338;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible"
|
||||
id="rect15694"
|
||||
width="22.000004"
|
||||
height="1.0000000"
|
||||
x="15.000002"
|
||||
y="17.000000"
|
||||
rx="0.15156493"
|
||||
ry="0.065390877" />
|
||||
<rect
|
||||
style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970759;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.081871338;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible"
|
||||
id="rect15698"
|
||||
width="22.000004"
|
||||
height="1.0000000"
|
||||
x="15.000002"
|
||||
y="21.000000"
|
||||
rx="0.15156493"
|
||||
ry="0.065390877" />
|
||||
<rect
|
||||
style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970759;fill-rule:nonzero;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:0.081871338;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:block;overflow:visible"
|
||||
id="rect15732"
|
||||
width="9.9000053"
|
||||
height="1.0000000"
|
||||
x="14.999992"
|
||||
y="25.000000"
|
||||
rx="0.068204239"
|
||||
ry="0.065390877" />
|
||||
</g>
|
||||
<g
|
||||
id="g5499"
|
||||
transform="matrix(0.857951,0.000000,0.000000,0.857951,89.46235,-7.004529)">
|
||||
<path
|
||||
style="fill:url(#radialGradient5534);fill-rule:nonzero;stroke:none;stroke-width:0.85650003;stroke-miterlimit:4"
|
||||
d="M -58.092025,46.608913 C -62.356416,46.608913 -65.98115,50.233647 -65.98115,54.498038 C -65.98115,58.762431 -62.356416,62.387164 -58.092025,62.387164 C -53.827633,62.387164 -50.202899,58.762431 -50.202899,54.498038 C -50.202899,50.233647 -53.827633,46.608913 -58.092025,46.608913 z M -58.092025,60.681408 C -61.503539,60.681408 -64.275393,57.909553 -64.275393,54.498038 C -64.275393,51.086525 -61.503539,48.31467 -58.092025,48.31467 C -54.68051,48.31467 -51.908656,51.086525 -51.908656,54.498038 C -51.908656,57.909553 -54.68051,60.681408 -58.092025,60.681408 z "
|
||||
id="path1882" />
|
||||
<path
|
||||
style="fill:url(#radialGradient5536);fill-rule:nonzero;stroke:none;stroke-width:0.85650003;stroke-miterlimit:4"
|
||||
d="M -78.861965,46.608913 C -83.126357,46.608913 -86.751091,50.233647 -86.751091,54.498038 C -86.751091,58.762431 -83.126357,62.387164 -78.861965,62.387164 C -74.597572,62.387164 -70.972839,58.762431 -70.972839,54.498038 C -70.972839,50.233647 -74.597572,46.608913 -78.861965,46.608913 L -78.861965,46.608913 z M -78.861965,60.681408 C -82.273479,60.681408 -85.045334,57.909553 -85.045334,54.498038 C -85.045334,51.086525 -82.273479,48.31467 -78.861965,48.31467 C -75.450451,48.31467 -72.678596,51.086525 -72.678596,54.498038 C -72.678596,57.909553 -75.450451,60.681408 -78.861965,60.681408 L -78.861965,60.681408 z "
|
||||
id="path1917" />
|
||||
<path
|
||||
style="fill:url(#radialGradient5538);fill-rule:nonzero;stroke:none;stroke-width:0.85650003;stroke-miterlimit:4"
|
||||
d="M -78.861965,25.199314 C -83.126357,25.199314 -86.751091,28.824047 -86.751091,33.08844 C -86.751091,37.352831 -83.126357,40.977565 -78.861965,40.977565 C -74.597572,40.977565 -70.972839,37.352831 -70.972839,33.08844 C -70.972839,28.824047 -74.597572,25.199314 -78.861965,25.199314 L -78.861965,25.199314 z M -78.861965,39.271808 C -82.273479,39.271808 -85.045334,36.499953 -85.045334,33.08844 C -85.045334,29.676926 -82.273479,26.905071 -78.861965,26.905071 C -75.450451,26.905071 -72.678596,29.676926 -72.678596,33.08844 C -72.678596,36.499953 -75.66367,39.271808 -78.861965,39.271808 z "
|
||||
id="path1952" />
|
||||
<path
|
||||
style="fill:url(#radialGradient5540);fill-rule:nonzero;stroke:none;stroke-width:0.85650003;stroke-miterlimit:4"
|
||||
d="M -58.092025,41.190784 C -53.827633,41.190784 -50.202899,37.566052 -50.202899,33.301659 C -50.202899,29.037267 -53.827633,25.412533 -58.092025,25.412533 C -62.356416,25.412533 -65.98115,29.037267 -65.98115,33.301659 C -65.98115,37.566052 -62.356416,41.190784 -58.092025,41.190784 z M -58.092025,27.11829 C -54.68051,27.11829 -51.908656,29.890145 -51.908656,33.301659 C -51.908656,36.713173 -54.68051,39.485028 -58.092025,39.485028 C -61.503539,39.485028 -64.275393,36.713173 -64.275393,33.301659 C -64.275393,29.890145 -61.503539,27.11829 -58.092025,27.11829 L -58.092025,27.11829 z "
|
||||
id="path1987" />
|
||||
<path
|
||||
style="fill:url(#radialGradient5542);fill-rule:nonzero;stroke:#606060;stroke-width:0.99830979;stroke-miterlimit:4;stroke-opacity:1"
|
||||
d="M -87.453541,43.899849 C -87.453541,54.34761 -78.924756,62.876395 -68.476995,62.876395 C -58.029234,62.876395 -49.500449,54.34761 -49.500449,43.899849 C -49.500449,33.452087 -58.029234,24.923303 -68.476995,24.923303 C -78.924756,24.923303 -87.453541,33.452087 -87.453541,43.899849 L -87.453541,43.899849 z M -75.939682,43.899849 C -75.939682,39.848676 -72.528167,36.437162 -68.476995,36.437162 C -64.425823,36.437162 -61.014308,39.848676 -61.014308,43.899849 C -61.014308,47.951021 -64.425823,51.362535 -68.476995,51.362535 C -72.528167,51.362535 -75.939682,47.951021 -75.939682,43.899849 z "
|
||||
id="path2012" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccccc"
|
||||
style="fill:url(#radialGradient5544);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.85650003;stroke-miterlimit:4"
|
||||
d="M -84.883844,52.723884 L -75.536351,47.336095 C -74.538612,49.132025 -73.802921,49.773966 -72.144039,50.822157 L -76.702387,60.506246 C -79.695604,59.30896 -83.686558,55.318005 -84.883844,52.723884 L -84.883844,52.723884 z "
|
||||
id="path2033" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccccc"
|
||||
style="fill:url(#radialGradient5546);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.85650003;stroke-miterlimit:4"
|
||||
d="M -59.511565,60.324218 L -64.93495,50.898568 C -63.304238,49.98294 -62.464893,49.112937 -61.469299,47.435433 L -51.632647,52.04732 C -52.844788,55.075455 -56.885259,59.112966 -59.511565,60.324218 L -59.511565,60.324218 z "
|
||||
id="path2058" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
style="fill:url(#radialGradient5548);fill-rule:nonzero;stroke:none;stroke-width:0.85650003;stroke-miterlimit:4"
|
||||
d="M -52.132645,35.064095 L -61.419592,40.399149 C -62.438815,38.683298 -63.291694,37.955419 -64.7787,37.04004 L -60.234024,27.357905 C -57.270105,28.543473 -53.318213,32.29777 -52.132645,35.064095 z "
|
||||
id="path2081" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
style="fill:url(#radialGradient5550);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.85650003;stroke-miterlimit:4"
|
||||
d="M -77.30103,27.493 L -71.913242,36.871743 C -73.709171,37.869482 -74.507362,38.605173 -75.399303,40.232805 L -85.083392,35.674457 C -83.886106,32.68124 -80.094699,28.690286 -77.30103,27.493 z "
|
||||
id="path2098" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccccc"
|
||||
id="path3636"
|
||||
d="M -86.476208,43.899847 C -86.476208,53.809524 -78.386675,61.899058 -68.476997,61.899058 C -58.567319,61.899058 -50.477785,53.809524 -50.477785,43.899847 C -50.477785,33.990168 -58.567319,25.900636 -68.476997,25.900636 C -78.386675,25.900636 -86.476208,33.990168 -86.476208,43.899847 L -86.476208,43.899847 z "
|
||||
style="fill:none;fill-rule:nonzero;stroke:url(#linearGradient5552);stroke-width:1.16556895;stroke-miterlimit:4;stroke-opacity:1" />
|
||||
<path
|
||||
style="color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient5554);stroke-width:1.16556895;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
d="M -76.812037,43.899853 C -76.812037,48.488813 -73.065946,52.234903 -68.476987,52.234903 C -63.888027,52.234903 -60.141936,48.488813 -60.141936,43.899853 C -60.141936,39.310893 -63.888027,35.564803 -68.476987,35.564803 C -73.065946,35.564803 -76.812037,39.310893 -76.812037,43.899853 L -76.812037,43.899853 z "
|
||||
id="path3638"
|
||||
sodipodi:nodetypes="cccccc" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 27 KiB |
357
design/icons/inaccessible_tango_emblem-unreadable.svg
Normal file
|
@ -0,0 +1,357 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
inkscape:export-ydpi="90.000000"
|
||||
inkscape:export-xdpi="90.000000"
|
||||
inkscape:export-filename="/home/jimmac/Desktop/wi-fi.png"
|
||||
width="48px"
|
||||
height="48px"
|
||||
id="svg11300"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.43+devel"
|
||||
sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/emblems"
|
||||
sodipodi:docname="emblem-unreadable.svg">
|
||||
<defs
|
||||
id="defs3">
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5060"
|
||||
id="radialGradient6719"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
|
||||
cx="605.71429"
|
||||
cy="486.64789"
|
||||
fx="605.71429"
|
||||
fy="486.64789"
|
||||
r="117.14286" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5060">
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5062" />
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop5064" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5060"
|
||||
id="radialGradient6717"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
|
||||
cx="605.71429"
|
||||
cy="486.64789"
|
||||
fx="605.71429"
|
||||
fy="486.64789"
|
||||
r="117.14286" />
|
||||
<linearGradient
|
||||
id="linearGradient5048">
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:0;"
|
||||
offset="0"
|
||||
id="stop5050" />
|
||||
<stop
|
||||
id="stop5056"
|
||||
offset="0.5"
|
||||
style="stop-color:black;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop5052" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5048"
|
||||
id="linearGradient6715"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
|
||||
x1="302.85715"
|
||||
y1="366.64789"
|
||||
x2="302.85715"
|
||||
y2="609.50507" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2719">
|
||||
<stop
|
||||
style="stop-color:#cc0000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2721" />
|
||||
<stop
|
||||
style="stop-color:#cc0000;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2723" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2711">
|
||||
<stop
|
||||
style="stop-color:#f34e4e;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2713" />
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2715" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient11327">
|
||||
<stop
|
||||
style="stop-color:#7d6400;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop11329" />
|
||||
<stop
|
||||
style="stop-color:#be9700;stop-opacity:1.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop11331" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2092">
|
||||
<stop
|
||||
id="stop2094"
|
||||
offset="0"
|
||||
style="stop-color:#fff7b0;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#ffec41;stop-opacity:1.0000000;"
|
||||
offset="0.20999999"
|
||||
id="stop2098" />
|
||||
<stop
|
||||
id="stop2293"
|
||||
offset="0.83999997"
|
||||
style="stop-color:#e2cc00;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop2100"
|
||||
offset="1"
|
||||
style="stop-color:#c3af00;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient11335">
|
||||
<stop
|
||||
style="stop-color:#6f716d;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop11337" />
|
||||
<stop
|
||||
style="stop-color:#9ea09c;stop-opacity:1.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop11339" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient10591">
|
||||
<stop
|
||||
style="stop-color:#cad0c6;stop-opacity:1.0000000;"
|
||||
offset="0.0000000"
|
||||
id="stop10593" />
|
||||
<stop
|
||||
id="stop10599"
|
||||
offset="0.50000000"
|
||||
style="stop-color:#eaece9;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
style="stop-color:#c5cbc0;stop-opacity:1.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop10595" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient11520">
|
||||
<stop
|
||||
id="stop11522"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop11524"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#dcdcdc;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient11508"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop11510"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop11512"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient11508"
|
||||
id="radialGradient1348"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,0.338462,-1.435476e-15,29.48178)"
|
||||
cx="30.203562"
|
||||
cy="44.565483"
|
||||
fx="30.203562"
|
||||
fy="44.565483"
|
||||
r="6.5659914" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient11520"
|
||||
id="radialGradient1366"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.995058,-1.651527e-32,0.000000,1.995058,-24.32488,-35.70087)"
|
||||
cx="24.445690"
|
||||
cy="35.878170"
|
||||
fx="24.445690"
|
||||
fy="35.878170"
|
||||
r="20.530962" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2719"
|
||||
id="radialGradient2725"
|
||||
cx="24.445681"
|
||||
cy="46.957848"
|
||||
fx="24.445681"
|
||||
fy="46.957848"
|
||||
r="16.554319"
|
||||
gradientTransform="matrix(2.670835,-1.66183e-17,1.650931e-17,2.653312,-40.84471,-77.78951)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
stroke="#eeeeec"
|
||||
fill="#cc0000"
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="0.25490196"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1"
|
||||
inkscape:cx="49.436623"
|
||||
inkscape:cy="35.750047"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:showpageshadow="false"
|
||||
inkscape:window-width="1002"
|
||||
inkscape:window-height="955"
|
||||
inkscape:window-x="436"
|
||||
inkscape:window-y="77" />
|
||||
<metadata
|
||||
id="metadata4">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Jakub Steiner</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:source>http://jimmac.musichall.cz</dc:source>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
|
||||
<dc:title>Unreadable</dc:title>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>emblem</rdf:li>
|
||||
<rdf:li>access</rdf:li>
|
||||
<rdf:li>denied</rdf:li>
|
||||
<rdf:li>unreadable</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<g
|
||||
transform="matrix(2.304988e-2,0,0,2.086758e-2,45.00013,40.24675)"
|
||||
id="g6707">
|
||||
<rect
|
||||
style="opacity:0.40206185;color:black;fill:url(#linearGradient6715);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
id="rect6709"
|
||||
width="1339.6335"
|
||||
height="478.35718"
|
||||
x="-1559.2523"
|
||||
y="-150.69685" />
|
||||
<path
|
||||
style="opacity:0.40206185;color:black;fill:url(#radialGradient6717);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
|
||||
id="path6711"
|
||||
sodipodi:nodetypes="cccc" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccc"
|
||||
id="path6713"
|
||||
d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
|
||||
style="opacity:0.40206185;color:black;fill:url(#radialGradient6719);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
|
||||
</g>
|
||||
<rect
|
||||
ry="5.4548240"
|
||||
rx="5.4548240"
|
||||
y="3.5233452"
|
||||
x="4.4147282"
|
||||
height="40.061924"
|
||||
width="40.061924"
|
||||
id="rect11518"
|
||||
style="opacity:1.0000000;color:#000000;fill:url(#radialGradient1366);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#9b9b9b;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10.000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
|
||||
<rect
|
||||
style="opacity:1.0000000;color:#000000;fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10.000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
|
||||
id="rect11528"
|
||||
width="37.696587"
|
||||
height="37.696587"
|
||||
x="5.5973887"
|
||||
y="4.7060070"
|
||||
rx="4.2426391"
|
||||
ry="4.2426391" />
|
||||
<rect
|
||||
style="opacity:1;color:#000000;fill:url(#radialGradient2725);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:0.99999946;stroke-linecap:butt;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
id="rect2707"
|
||||
width="33.108639"
|
||||
height="32.891403"
|
||||
x="7.8913612"
|
||||
y="7.1085968"
|
||||
rx="2.7440348"
|
||||
ry="2.7440348"
|
||||
inkscape:r_cx="true"
|
||||
inkscape:r_cy="true" />
|
||||
<g
|
||||
id="g2703"
|
||||
transform="matrix(0.717647,0,0,0.717647,6.882353,6.6)"
|
||||
inkscape:r_cx="true"
|
||||
inkscape:r_cy="true"
|
||||
style="stroke:#eeeeec">
|
||||
<path
|
||||
inkscape:r_cy="true"
|
||||
inkscape:r_cx="true"
|
||||
id="path2698"
|
||||
d="M 16.25,15.25 L 32.5,31.5"
|
||||
style="opacity:1;color:#000000;fill:#204a87;fill-opacity:1;fill-rule:nonzero;stroke:#eeeeec;stroke-width:6.96721315;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible" />
|
||||
<path
|
||||
style="opacity:1;color:#000000;fill:#204a87;fill-opacity:1;fill-rule:nonzero;stroke:#eeeeec;stroke-width:6.96721315;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
|
||||
d="M 32.5,15.25 L 16.25,31.5"
|
||||
id="path2700"
|
||||
inkscape:r_cx="true"
|
||||
inkscape:r_cy="true" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 13 KiB |
BIN
design/icons/language.png
Normal file
After Width: | Height: | Size: 3.4 KiB |
298
design/icons/locked_tango-emblem-readonly.svg
Normal file
|
@ -0,0 +1,298 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
inkscape:export-ydpi="90.000000"
|
||||
inkscape:export-xdpi="90.000000"
|
||||
inkscape:export-filename="/home/jimmac/Desktop/wi-fi.png"
|
||||
width="48px"
|
||||
height="48px"
|
||||
id="svg11300"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.43+devel"
|
||||
sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/emblems"
|
||||
sodipodi:docname="emblem-readonly.svg">
|
||||
<defs
|
||||
id="defs3">
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5060"
|
||||
id="radialGradient6719"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
|
||||
cx="605.71429"
|
||||
cy="486.64789"
|
||||
fx="605.71429"
|
||||
fy="486.64789"
|
||||
r="117.14286" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5060">
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5062" />
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop5064" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5060"
|
||||
id="radialGradient6717"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
|
||||
cx="605.71429"
|
||||
cy="486.64789"
|
||||
fx="605.71429"
|
||||
fy="486.64789"
|
||||
r="117.14286" />
|
||||
<linearGradient
|
||||
id="linearGradient5048">
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:0;"
|
||||
offset="0"
|
||||
id="stop5050" />
|
||||
<stop
|
||||
id="stop5056"
|
||||
offset="0.5"
|
||||
style="stop-color:black;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop5052" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5048"
|
||||
id="linearGradient6715"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
|
||||
x1="302.85715"
|
||||
y1="366.64789"
|
||||
x2="302.85715"
|
||||
y2="609.50507" />
|
||||
<linearGradient
|
||||
id="linearGradient11327">
|
||||
<stop
|
||||
style="stop-color:#7d6400;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop11329" />
|
||||
<stop
|
||||
style="stop-color:#be9700;stop-opacity:1.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop11331" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2092">
|
||||
<stop
|
||||
id="stop2094"
|
||||
offset="0"
|
||||
style="stop-color:#fff7b0;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#ffec41;stop-opacity:1.0000000;"
|
||||
offset="0.20999999"
|
||||
id="stop2098" />
|
||||
<stop
|
||||
id="stop2293"
|
||||
offset="0.83999997"
|
||||
style="stop-color:#e2cc00;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop2100"
|
||||
offset="1"
|
||||
style="stop-color:#c3af00;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient11335">
|
||||
<stop
|
||||
style="stop-color:#6f716d;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop11337" />
|
||||
<stop
|
||||
style="stop-color:#9ea09c;stop-opacity:1.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop11339" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient10591">
|
||||
<stop
|
||||
style="stop-color:#cad0c6;stop-opacity:1.0000000;"
|
||||
offset="0.0000000"
|
||||
id="stop10593" />
|
||||
<stop
|
||||
id="stop10599"
|
||||
offset="0.50000000"
|
||||
style="stop-color:#eaece9;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
style="stop-color:#c5cbc0;stop-opacity:1.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop10595" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient11520">
|
||||
<stop
|
||||
id="stop11522"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop11524"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#dcdcdc;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient11508"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop11510"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop11512"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient11508"
|
||||
id="radialGradient1348"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,0.338462,-1.435476e-15,29.48178)"
|
||||
cx="30.203562"
|
||||
cy="44.565483"
|
||||
fx="30.203562"
|
||||
fy="44.565483"
|
||||
r="6.5659914" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient11520"
|
||||
id="radialGradient1366"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.995058,-1.651527e-32,0.000000,1.995058,-24.32488,-35.70087)"
|
||||
cx="24.445690"
|
||||
cy="35.878170"
|
||||
fx="24.445690"
|
||||
fy="35.878170"
|
||||
r="20.530962" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
stroke="#ef2929"
|
||||
fill="#729fcf"
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="0.25490196"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1"
|
||||
inkscape:cx="24.194962"
|
||||
inkscape:cy="-13.983676"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:showpageshadow="false"
|
||||
inkscape:window-width="872"
|
||||
inkscape:window-height="707"
|
||||
inkscape:window-x="155"
|
||||
inkscape:window-y="230" />
|
||||
<metadata
|
||||
id="metadata4">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Jakub Steiner</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:source>http://jimmac.musichall.cz</dc:source>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
|
||||
<dc:title>Read Only Emblem</dc:title>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>emblem</rdf:li>
|
||||
<rdf:li>read-only</rdf:li>
|
||||
<rdf:li>nowrite</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<g
|
||||
transform="matrix(2.243788e-2,0,0,2.086758e-2,44.06795,40.547)"
|
||||
id="g6707">
|
||||
<rect
|
||||
style="opacity:0.40206185;color:black;fill:url(#linearGradient6715);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
id="rect6709"
|
||||
width="1339.6335"
|
||||
height="478.35718"
|
||||
x="-1559.2523"
|
||||
y="-150.69685" />
|
||||
<path
|
||||
style="opacity:0.40206185;color:black;fill:url(#radialGradient6717);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
|
||||
id="path6711"
|
||||
sodipodi:nodetypes="cccc" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccc"
|
||||
id="path6713"
|
||||
d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
|
||||
style="opacity:0.40206185;color:black;fill:url(#radialGradient6719);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
|
||||
</g>
|
||||
<rect
|
||||
ry="5.4548240"
|
||||
rx="5.4548240"
|
||||
y="3.5233452"
|
||||
x="4.4147282"
|
||||
height="40.061924"
|
||||
width="40.061924"
|
||||
id="rect11518"
|
||||
style="opacity:1.0000000;color:#000000;fill:url(#radialGradient1366);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#9b9b9b;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10.000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
|
||||
<rect
|
||||
style="opacity:1.0000000;color:#000000;fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10.000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
|
||||
id="rect11528"
|
||||
width="37.696587"
|
||||
height="37.696587"
|
||||
x="5.5973887"
|
||||
y="4.7060070"
|
||||
rx="4.2426391"
|
||||
ry="4.2426391" />
|
||||
<path
|
||||
style="opacity:0.69886361;color:#000000;fill:#888a85;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.9999997;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
|
||||
d="M 23.906254,10.878347 C 19.835833,11.005873 17.137508,12.963117 17.137508,17.000087 L 17.137508,21.120489 L 16.221429,21.120489 C 15.54928,21.120489 15,21.583436 15,22.163203 L 15,32.993974 C 15,33.573741 15.54928,34.036689 16.221429,34.036688 L 32.795528,34.036688 C 33.467687,34.036688 34,33.57374 34,32.993974 L 34,22.163203 C 34,21.583437 33.467687,21.120489 32.795528,21.120489 L 31.862492,21.120489 L 31.87946,17.067359 C 31.87946,12.782023 28.950269,10.931241 24.516968,10.878347 C 24.310278,10.875868 24.10644,10.872076 23.906254,10.878347 z M 24.313392,13.58604 C 24.388241,13.584353 24.4735,13.58604 24.550894,13.58604 C 29.469737,13.58604 29.092541,17.084436 29.165175,18.126891 L 29.165175,21.120489 L 19.902675,21.120489 L 19.902675,18.143709 C 19.885214,17.109531 19.597992,13.692412 24.313392,13.58604 z "
|
||||
id="path2086"
|
||||
inkscape:r_cx="true"
|
||||
inkscape:r_cy="true" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 12 KiB |
4405
design/icons/multimedia-dell-dj-pocket_tango.svg
Normal file
After Width: | Height: | Size: 150 KiB |
4126
design/icons/multimedia-player-ipod-mini-blue_tango.svg
Normal file
After Width: | Height: | Size: 141 KiB |
1025
design/icons/multimedia-player-motorola-rokr_tango.svg
Normal file
After Width: | Height: | Size: 50 KiB |
1041
design/icons/network-transmit-receive_design.svg
Normal file
After Width: | Height: | Size: 61 KiB |
BIN
design/icons/pile_of_devices.png
Normal file
After Width: | Height: | Size: 17 KiB |
22002
design/icons/pile_of_devices.svg
Normal file
After Width: | Height: | Size: 779 KiB |
828
design/icons/preferences-desktop-locale_tango.svg
Normal file
|
@ -0,0 +1,828 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
inkscape:export-ydpi="90.000000"
|
||||
inkscape:export-xdpi="90.000000"
|
||||
inkscape:export-filename="/home/jimmac/Desktop/wi-fi.png"
|
||||
width="48px"
|
||||
height="48px"
|
||||
id="svg11300"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.43+devel"
|
||||
sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/apps"
|
||||
sodipodi:docname="preferences-desktop-locale.svg">
|
||||
<defs
|
||||
id="defs3">
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5060"
|
||||
id="radialGradient6719"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
|
||||
cx="605.71429"
|
||||
cy="486.64789"
|
||||
fx="605.71429"
|
||||
fy="486.64789"
|
||||
r="117.14286" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5060">
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5062" />
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop5064" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5060"
|
||||
id="radialGradient6717"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
|
||||
cx="605.71429"
|
||||
cy="486.64789"
|
||||
fx="605.71429"
|
||||
fy="486.64789"
|
||||
r="117.14286" />
|
||||
<linearGradient
|
||||
id="linearGradient5048">
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:0;"
|
||||
offset="0"
|
||||
id="stop5050" />
|
||||
<stop
|
||||
id="stop5056"
|
||||
offset="0.5"
|
||||
style="stop-color:black;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop5052" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5048"
|
||||
id="linearGradient6715"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
|
||||
x1="302.85715"
|
||||
y1="366.64789"
|
||||
x2="302.85715"
|
||||
y2="609.50507" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient3289">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3291" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop3293" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient16542">
|
||||
<stop
|
||||
style="stop-color:#2e3436;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop16544" />
|
||||
<stop
|
||||
id="stop16550"
|
||||
offset="0.27272728"
|
||||
style="stop-color:#505a5d;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#141717;stop-opacity:1;"
|
||||
offset="0.63636363"
|
||||
id="stop16554" />
|
||||
<stop
|
||||
style="stop-color:#2e3436;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop16546" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient16532">
|
||||
<stop
|
||||
style="stop-color:#cc0000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop16534" />
|
||||
<stop
|
||||
id="stop16540"
|
||||
offset="0.24242425"
|
||||
style="stop-color:#ff4747;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#9b1212;stop-opacity:1;"
|
||||
offset="0.6097337"
|
||||
id="stop16552" />
|
||||
<stop
|
||||
style="stop-color:#cc0000;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop16536" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient16522">
|
||||
<stop
|
||||
style="stop-color:#edd400;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop16524" />
|
||||
<stop
|
||||
id="stop16530"
|
||||
offset="0.27272728"
|
||||
style="stop-color:#fff491;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#edd400;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop16526" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient16514">
|
||||
<stop
|
||||
id="stop16516"
|
||||
offset="0"
|
||||
style="stop-color:#ffffff;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#bebebe;stop-opacity:1;"
|
||||
offset="0.42424244"
|
||||
id="stop16518" />
|
||||
<stop
|
||||
id="stop16520"
|
||||
offset="1"
|
||||
style="stop-color:#ebebeb;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient16494">
|
||||
<stop
|
||||
style="stop-color:#204a87;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop16496" />
|
||||
<stop
|
||||
id="stop16502"
|
||||
offset="0.21212122"
|
||||
style="stop-color:#3f7bd2;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#204a87;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop16498" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient16468">
|
||||
<stop
|
||||
style="stop-color:#cc0000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop16470" />
|
||||
<stop
|
||||
id="stop16476"
|
||||
offset="0.15151516"
|
||||
style="stop-color:#ff3737;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#b41414;stop-opacity:1;"
|
||||
offset="0.57575756"
|
||||
id="stop16478" />
|
||||
<stop
|
||||
style="stop-color:#ff4c4c;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop16472" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient16451">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop16453" />
|
||||
<stop
|
||||
id="stop16459"
|
||||
offset="0.42424244"
|
||||
style="stop-color:#bebebe;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#ebebeb;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop16455" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient11520">
|
||||
<stop
|
||||
id="stop11522"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop11524"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#dcdcdc;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient11508"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop11510"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop11512"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient11494"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop11496"
|
||||
offset="0"
|
||||
style="stop-color:#ef2929;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop11498"
|
||||
offset="1"
|
||||
style="stop-color:#ef2929;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient11415">
|
||||
<stop
|
||||
id="stop11417"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#204a87;stop-opacity:0.0000000;" />
|
||||
<stop
|
||||
style="stop-color:#204a87;stop-opacity:1.0000000;"
|
||||
offset="0.50000000"
|
||||
id="stop11423" />
|
||||
<stop
|
||||
id="stop11419"
|
||||
offset="1"
|
||||
style="stop-color:#204a87;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient11399"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop11401"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop11403"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
gradientTransform="translate(-60.28571,-0.285714)"
|
||||
y2="34.462429"
|
||||
x2="43.615788"
|
||||
y1="3.7744560"
|
||||
x1="15.828360"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient11425"
|
||||
xlink:href="#linearGradient11415"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientTransform="translate(-60.57143,0.000000)"
|
||||
y2="39.033859"
|
||||
x2="35.679932"
|
||||
y1="9.3458843"
|
||||
x1="9.6957054"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient11427"
|
||||
xlink:href="#linearGradient11415"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
y2="33.462429"
|
||||
x2="26.758644"
|
||||
y1="19.774456"
|
||||
x1="13.267134"
|
||||
gradientTransform="translate(-60.85714,0.428571)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient11439"
|
||||
xlink:href="#linearGradient11415"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
r="8.5000000"
|
||||
fy="39.142857"
|
||||
fx="12.071428"
|
||||
cy="39.142857"
|
||||
cx="12.071428"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,0.487395,0.000000,20.06483)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient11441"
|
||||
xlink:href="#linearGradient11399"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
gradientTransform="matrix(1.243453,2.106784e-16,-2.106784e-16,1.243453,-6.713754,-3.742847)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
r="3.8335034"
|
||||
fy="15.048258"
|
||||
fx="27.577173"
|
||||
cy="15.048258"
|
||||
cx="27.577173"
|
||||
id="radialGradient11500"
|
||||
xlink:href="#linearGradient11494"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
r="3.8335034"
|
||||
fy="16.049133"
|
||||
fx="27.577173"
|
||||
cy="16.049133"
|
||||
cx="27.577173"
|
||||
gradientTransform="matrix(1.243453,2.106784e-16,-2.106784e-16,1.243453,-6.713754,-3.742847)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient11504"
|
||||
xlink:href="#linearGradient11494"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,0.338462,2.166583e-14,29.48178)"
|
||||
r="6.5659914"
|
||||
fy="44.565483"
|
||||
fx="30.203562"
|
||||
cy="44.565483"
|
||||
cx="30.203562"
|
||||
id="radialGradient11514"
|
||||
xlink:href="#linearGradient11508"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
gradientTransform="matrix(1.995058,-1.651527e-32,0.000000,1.995058,-24.32488,-35.70087)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
r="20.530962"
|
||||
fy="35.878170"
|
||||
fx="24.445690"
|
||||
cy="35.878170"
|
||||
cx="24.445690"
|
||||
id="radialGradient11526"
|
||||
xlink:href="#linearGradient11520"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
r="6.5659914"
|
||||
fy="44.565483"
|
||||
fx="30.203562"
|
||||
cy="44.565483"
|
||||
cx="30.203562"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,0.338462,3.185827e-15,29.48178)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient11532"
|
||||
xlink:href="#linearGradient11508"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient11508"
|
||||
id="radialGradient1348"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,0.338462,-1.353344e-14,29.48178)"
|
||||
cx="30.203562"
|
||||
cy="44.565483"
|
||||
fx="30.203562"
|
||||
fy="44.565483"
|
||||
r="6.5659914" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient11520"
|
||||
id="radialGradient1350"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.995058,-1.651527e-32,0.000000,1.995058,-24.32488,-35.70087)"
|
||||
cx="24.445690"
|
||||
cy="35.878170"
|
||||
fx="24.445690"
|
||||
fy="35.878170"
|
||||
r="20.530962" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient11494"
|
||||
id="radialGradient1352"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.243453,2.106784e-16,-2.106784e-16,1.243453,-6.713754,-3.742847)"
|
||||
cx="27.577173"
|
||||
cy="16.049133"
|
||||
fx="27.577173"
|
||||
fy="16.049133"
|
||||
r="3.8335034" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient11494"
|
||||
id="radialGradient1354"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.243453,2.106784e-16,-2.106784e-16,1.243453,-6.713754,-3.742847)"
|
||||
cx="27.577173"
|
||||
cy="15.048258"
|
||||
fx="27.577173"
|
||||
fy="15.048258"
|
||||
r="3.8335034" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient11508"
|
||||
id="radialGradient1356"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,0.338462,2.220359e-14,29.48178)"
|
||||
cx="30.203562"
|
||||
cy="44.565483"
|
||||
fx="30.203562"
|
||||
fy="44.565483"
|
||||
r="6.5659914" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient11520"
|
||||
id="radialGradient1366"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.049266,-1.696401e-32,0.000000,2.049266,-25.65002,-37.31089)"
|
||||
cx="24.445690"
|
||||
cy="35.878170"
|
||||
fx="24.445690"
|
||||
fy="35.878170"
|
||||
r="20.530962" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient16451"
|
||||
id="linearGradient16457"
|
||||
x1="0.91421354"
|
||||
y1="16.710525"
|
||||
x2="37.623106"
|
||||
y2="16.710525"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient16451"
|
||||
id="linearGradient16464"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="0.91421354"
|
||||
y1="16.710525"
|
||||
x2="37.623106"
|
||||
y2="16.710525"
|
||||
gradientTransform="matrix(0.98006,0,0,1,0.116103,0)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient16468"
|
||||
id="linearGradient16474"
|
||||
x1="2"
|
||||
y1="23.791154"
|
||||
x2="36"
|
||||
y2="23.791154"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient16468"
|
||||
id="linearGradient16482"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="2"
|
||||
y1="23.791154"
|
||||
x2="36"
|
||||
y2="23.791154"
|
||||
gradientTransform="translate(0,-5.624133)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient16468"
|
||||
id="linearGradient16486"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(0,-11.24827)"
|
||||
x1="2"
|
||||
y1="23.791154"
|
||||
x2="36"
|
||||
y2="23.791154" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient16468"
|
||||
id="linearGradient16490"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(0,-16.8724)"
|
||||
x1="2"
|
||||
y1="23.791154"
|
||||
x2="36"
|
||||
y2="23.791154" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient16494"
|
||||
id="linearGradient16500"
|
||||
x1="2"
|
||||
y1="8.5017858"
|
||||
x2="19"
|
||||
y2="8.5017858"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient16522"
|
||||
id="linearGradient16528"
|
||||
x1="11.002116"
|
||||
y1="29.756583"
|
||||
x2="46.998972"
|
||||
y2="29.756583"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient16532"
|
||||
id="linearGradient16538"
|
||||
x1="11.976621"
|
||||
y1="29.748671"
|
||||
x2="46.138718"
|
||||
y2="29.748671"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient16542"
|
||||
id="linearGradient16548"
|
||||
x1="11.976621"
|
||||
y1="21.723522"
|
||||
x2="46.138718"
|
||||
y2="21.723522"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient16522"
|
||||
id="linearGradient16562"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="11.002116"
|
||||
y1="29.756583"
|
||||
x2="46.998972"
|
||||
y2="29.756583" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient16542"
|
||||
id="linearGradient16564"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="11.976621"
|
||||
y1="21.723522"
|
||||
x2="46.138718"
|
||||
y2="21.723522" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient16532"
|
||||
id="linearGradient16566"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="11.976621"
|
||||
y1="29.748671"
|
||||
x2="46.138718"
|
||||
y2="29.748671" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient16451"
|
||||
id="linearGradient16577"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.98006,0,0,1,0.116103,0)"
|
||||
x1="0.91421354"
|
||||
y1="16.710525"
|
||||
x2="37.623106"
|
||||
y2="16.710525" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient16468"
|
||||
id="linearGradient16579"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="2"
|
||||
y1="23.791154"
|
||||
x2="36"
|
||||
y2="23.791154" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient16468"
|
||||
id="linearGradient16581"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(0,-11.24827)"
|
||||
x1="2"
|
||||
y1="23.791154"
|
||||
x2="36"
|
||||
y2="23.791154" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient16468"
|
||||
id="linearGradient16583"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(0,-5.624133)"
|
||||
x1="2"
|
||||
y1="23.791154"
|
||||
x2="36"
|
||||
y2="23.791154" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient16468"
|
||||
id="linearGradient16585"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(0,-16.8724)"
|
||||
x1="2"
|
||||
y1="23.791154"
|
||||
x2="36"
|
||||
y2="23.791154" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient16494"
|
||||
id="linearGradient16587"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="2"
|
||||
y1="8.5017858"
|
||||
x2="19"
|
||||
y2="8.5017858" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3289"
|
||||
id="linearGradient3295"
|
||||
x1="29.017775"
|
||||
y1="40.347282"
|
||||
x2="29.017775"
|
||||
y2="17.189533"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5048"
|
||||
id="linearGradient6761"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
|
||||
x1="302.85715"
|
||||
y1="366.64789"
|
||||
x2="302.85715"
|
||||
y2="609.50507" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5060"
|
||||
id="radialGradient6763"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
|
||||
cx="605.71429"
|
||||
cy="486.64789"
|
||||
fx="605.71429"
|
||||
fy="486.64789"
|
||||
r="117.14286" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5060"
|
||||
id="radialGradient6765"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
|
||||
cx="605.71429"
|
||||
cy="486.64789"
|
||||
fx="605.71429"
|
||||
fy="486.64789"
|
||||
r="117.14286" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
stroke="#ef2929"
|
||||
fill="#edd400"
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="0.25490196"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1"
|
||||
inkscape:cx="70.23153"
|
||||
inkscape:cy="24.653308"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:showpageshadow="false"
|
||||
inkscape:window-width="872"
|
||||
inkscape:window-height="659"
|
||||
inkscape:window-x="612"
|
||||
inkscape:window-y="466" />
|
||||
<metadata
|
||||
id="metadata4">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Jakub Steiner</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:source>http://jimmac.musichall.cz</dc:source>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
|
||||
<dc:title>Locale Preferences</dc:title>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>locale preferences</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<g
|
||||
id="g6753"
|
||||
transform="matrix(1.971468e-2,0,0,3.343226e-2,38.92492,24.71253)">
|
||||
<rect
|
||||
y="-150.69685"
|
||||
x="-1559.2523"
|
||||
height="478.35718"
|
||||
width="1339.6335"
|
||||
id="rect6755"
|
||||
style="opacity:0.40206185;color:black;fill:url(#linearGradient6761);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccc"
|
||||
id="path6757"
|
||||
d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
|
||||
style="opacity:0.40206185;color:black;fill:url(#radialGradient6763);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
|
||||
<path
|
||||
style="opacity:0.40206185;color:black;fill:url(#radialGradient6765);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
|
||||
id="path6759"
|
||||
sodipodi:nodetypes="cccc" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(1.971468e-2,0,0,3.343226e-2,46.17276,35.14236)"
|
||||
id="g6707">
|
||||
<rect
|
||||
style="opacity:0.40206185;color:black;fill:url(#linearGradient6715);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
id="rect6709"
|
||||
width="1339.6335"
|
||||
height="478.35718"
|
||||
x="-1559.2523"
|
||||
y="-150.69685" />
|
||||
<path
|
||||
style="opacity:0.40206185;color:black;fill:url(#radialGradient6717);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
|
||||
id="path6711"
|
||||
sodipodi:nodetypes="cccc" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccc"
|
||||
id="path6713"
|
||||
d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
|
||||
style="opacity:0.40206185;color:black;fill:url(#radialGradient6719);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
|
||||
</g>
|
||||
<g
|
||||
id="g16568"
|
||||
transform="translate(2.121318,2.032932)">
|
||||
<path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
id="rect15576"
|
||||
d="M 1.5021165,4.1593795 C 10.684459,-2.3813582 27.143377,6.1039232 36.498972,4.1593795 L 36.498972,29.261671 C 27.489881,32.266875 11.897222,22.89771 1.5021165,29.261671 L 1.5021165,4.1593795 z "
|
||||
style="color:#000000;fill:url(#linearGradient16577);fill-opacity:1;fill-rule:evenodd;stroke:#555753;stroke-width:0.9999994;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
id="path16466"
|
||||
d="M 2,26 C 11.0625,19.9375 29.8125,29.25 36,26 L 36,23 C 29.3125,26.4375 11,16.8125 2,23 L 2,26 z "
|
||||
style="opacity:1;color:#000000;fill:url(#linearGradient16579);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
id="path16484"
|
||||
d="M 2,14.751733 C 11.0625,8.6892331 29.8125,18.001733 36,14.751733 L 36,11.751733 C 29.3125,15.189233 11,5.5642331 2,11.751733 L 2,14.751733 z "
|
||||
style="opacity:1;color:#000000;fill:url(#linearGradient16581);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible" />
|
||||
<path
|
||||
style="opacity:1;color:#000000;fill:url(#linearGradient16583);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
|
||||
d="M 2,20.375867 C 11.0625,14.313367 29.8125,23.625867 36,20.375867 L 36,17.375867 C 29.3125,20.813367 11,11.188367 2,17.375867 L 2,20.375867 z "
|
||||
id="path16480"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
<path
|
||||
style="opacity:1;color:#000000;fill:url(#linearGradient16585);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
|
||||
d="M 2,9.1276014 C 11.0625,3.0651012 29.8125,12.377601 36,9.1276014 L 36,6.1276014 C 29.3125,9.5651014 11,-0.059898803 2,6.1276014 L 2,9.1276014 z "
|
||||
id="path16488"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
<path
|
||||
style="opacity:0.5;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.99999988;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
|
||||
d="M 2.4999999,4.7703293 C 10.477148,-0.95790769 26.333595,6.7148733 35.535549,5.2703293 L 35.410549,28.560121 C 28.595705,30.752825 12.672841,22.855685 2.5624999,27.435121 L 2.4999999,4.7703293 z "
|
||||
id="path16462"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
id="path16492"
|
||||
d="M 2,4.4999999 C 2,4.4999999 2,14.875 2,14.875 C 4.125,13 9.8125,11.625 19,13.5 L 19,3 C 15.375,2.125 5.5,1.0624999 2,4.4999999 z "
|
||||
style="opacity:1;color:#000000;fill:url(#linearGradient16587);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible" />
|
||||
</g>
|
||||
<g
|
||||
id="g16556"
|
||||
transform="translate(-0.972274,-1.06066)">
|
||||
<path
|
||||
style="color:#000000;fill:url(#linearGradient16562);fill-opacity:1;fill-rule:evenodd;stroke:#555753;stroke-width:0.9999994;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
|
||||
d="M 11.502116,18.15938 C 20.684459,11.618642 37.143377,20.103923 46.498972,18.15938 L 46.498972,43.261671 C 37.489881,46.266875 21.897222,36.89771 11.502116,43.261671 L 11.502116,18.15938 z "
|
||||
id="path16504"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
id="path16510"
|
||||
d="M 11.976621,18.478292 L 12.020815,26.61002 C 19.975766,21.612175 38.890874,29.350058 46.05033,26.963573 L 46.05033,18.522486 C 38.095378,20.599612 19.666407,12.202719 11.976621,18.478292 z "
|
||||
style="opacity:1;color:#000000;fill:url(#linearGradient16564);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible" />
|
||||
<path
|
||||
style="opacity:1;color:#000000;fill:url(#linearGradient16566);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
|
||||
d="M 11.976621,26.61002 L 12.020815,34.564971 C 20.682873,27.759068 37.476659,38.719223 46.050329,35.095301 L 46.050329,26.830991 C 37.918601,29.084894 20.73963,19.831845 11.976621,26.61002 z "
|
||||
id="path16512"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
id="path16506"
|
||||
d="M 12.5,18.681941 C 20.477148,12.953704 36.333595,20.626485 45.535549,19.181941 L 45.410549,42.560121 C 38.595705,44.752825 22.672841,36.855685 12.5625,41.435121 L 12.5,18.681941 z "
|
||||
style="opacity:0.62921348;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3295);stroke-width:0.99999988;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 32 KiB |
396
design/icons/preferences-system_tango.svg
Normal file
|
@ -0,0 +1,396 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
inkscape:export-ydpi="90.000000"
|
||||
inkscape:export-xdpi="90.000000"
|
||||
inkscape:export-filename="/home/jimmac/Desktop/wi-fi.png"
|
||||
width="48px"
|
||||
height="48px"
|
||||
id="svg11300"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.43+devel"
|
||||
sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/categories"
|
||||
sodipodi:docname="preferences-system.svg">
|
||||
<defs
|
||||
id="defs3">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2250">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2252" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2254" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2265">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2267" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2269" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2257">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2259" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2261" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3087">
|
||||
<stop
|
||||
style="stop-color:#3465a4;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3089" />
|
||||
<stop
|
||||
id="stop3095"
|
||||
offset="0"
|
||||
style="stop-color:#9fbce1;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#6b95ca;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2242" />
|
||||
<stop
|
||||
id="stop2244"
|
||||
offset="0.75"
|
||||
style="stop-color:#3d6aa5;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#386eb4;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop3091" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3077">
|
||||
<stop
|
||||
style="stop-color:#98a0a9;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3079" />
|
||||
<stop
|
||||
style="stop-color:#c3d0dd;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop3081" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3061">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3063" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop3065" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3049">
|
||||
<stop
|
||||
style="stop-color:#b6b6b6;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3051" />
|
||||
<stop
|
||||
id="stop2262"
|
||||
offset="0.5"
|
||||
style="stop-color:#f2f2f2;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#fafafa;stop-opacity:1;"
|
||||
offset="0.67612958"
|
||||
id="stop2264" />
|
||||
<stop
|
||||
id="stop2268"
|
||||
offset="0.84051722"
|
||||
style="stop-color:#d8d8d8;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop2266"
|
||||
offset="0.875"
|
||||
style="stop-color:#f2f2f2;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#dbdbdb;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop3053" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient3041">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3043" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop3045" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3041"
|
||||
id="radialGradient3047"
|
||||
cx="24.8125"
|
||||
cy="39.125"
|
||||
fx="24.8125"
|
||||
fy="39.125"
|
||||
r="17.6875"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,0.374558,7.194333e-15,24.47041)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3049"
|
||||
id="linearGradient3055"
|
||||
x1="19.648342"
|
||||
y1="42.253601"
|
||||
x2="20.631224"
|
||||
y2="6.7758031"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.878270,0.000000,0.000000,0.878270,2.536988,4.967681)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3061"
|
||||
id="linearGradient3067"
|
||||
x1="50.152931"
|
||||
y1="-3.6324477"
|
||||
x2="25.291086"
|
||||
y2="-4.3002653"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.878270,-1.375944e-15,1.375944e-15,0.878270,5.328299,1.650243)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3077"
|
||||
id="linearGradient3083"
|
||||
x1="38.227654"
|
||||
y1="13.602527"
|
||||
x2="37.53537"
|
||||
y2="6.6285896"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.878270,0.000000,0.000000,0.878270,2.847503,5.588712)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3087"
|
||||
id="linearGradient3093"
|
||||
x1="9.7503242"
|
||||
y1="32.28376"
|
||||
x2="16.915297"
|
||||
y2="39.443218"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.878270,0.000000,0.000000,0.878270,2.536988,4.967681)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2257"
|
||||
id="linearGradient2263"
|
||||
x1="12.004697"
|
||||
y1="35.688461"
|
||||
x2="10.650805"
|
||||
y2="33.194965"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.007254,-2.636526e-2,2.636526e-2,1.007254,1.593411,7.919100e-2)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2265"
|
||||
id="linearGradient2271"
|
||||
x1="14.017542"
|
||||
y1="36.942543"
|
||||
x2="15.415793"
|
||||
y2="38.268368"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.878099,-1.732370e-2,1.732370e-2,0.878099,2.163687,4.067899)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2250"
|
||||
id="linearGradient2256"
|
||||
x1="31.177404"
|
||||
y1="19.821514"
|
||||
x2="40.859177"
|
||||
y2="9.6568537"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3041"
|
||||
id="radialGradient2260"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,0.374558,7.272829e-15,24.47041)"
|
||||
cx="24.8125"
|
||||
cy="39.125"
|
||||
fx="24.8125"
|
||||
fy="39.125"
|
||||
r="17.6875" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
stroke="#204a87"
|
||||
fill="#3465a4"
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="0.25490196"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="4"
|
||||
inkscape:cx="19.425317"
|
||||
inkscape:cy="26.37487"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:showpageshadow="false"
|
||||
inkscape:window-width="1034"
|
||||
inkscape:window-height="1010"
|
||||
inkscape:window-x="296"
|
||||
inkscape:window-y="83" />
|
||||
<metadata
|
||||
id="metadata4">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Jakub Steiner</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:source>http://jimmac.musichall.cz</dc:source>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
|
||||
<dc:title>Preferences System</dc:title>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>preferences</rdf:li>
|
||||
<rdf:li>settings</rdf:li>
|
||||
<rdf:li>control panel</rdf:li>
|
||||
<rdf:li>tweaks</rdf:li>
|
||||
<rdf:li>system</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<path
|
||||
transform="matrix(0.751118,0.000000,0.000000,0.578703,17.04087,19.36341)"
|
||||
d="M 42.5 39.125 A 17.6875 6.625 0 1 1 7.125,39.125 A 17.6875 6.625 0 1 1 42.5 39.125 z"
|
||||
sodipodi:ry="6.625"
|
||||
sodipodi:rx="17.6875"
|
||||
sodipodi:cy="39.125"
|
||||
sodipodi:cx="24.8125"
|
||||
id="path2258"
|
||||
style="opacity:0.19886367;color:#000000;fill:url(#radialGradient2260);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
sodipodi:type="arc" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="opacity:0.3125;color:#000000;fill:url(#radialGradient3047);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
id="path3039"
|
||||
sodipodi:cx="24.8125"
|
||||
sodipodi:cy="39.125"
|
||||
sodipodi:rx="17.6875"
|
||||
sodipodi:ry="6.625"
|
||||
d="M 42.5 39.125 A 17.6875 6.625 0 1 1 7.125,39.125 A 17.6875 6.625 0 1 1 42.5 39.125 z"
|
||||
transform="matrix(0.836071,0.000000,0.000000,0.685436,-7.959607,15.71781)" />
|
||||
<path
|
||||
style="opacity:1;color:#000000;fill:url(#linearGradient3055);fill-opacity:1;fill-rule:nonzero;stroke:#888a85;stroke-width:0.9999997;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 17.906713,21.215676 L 36.899302,40.6474 C 37.667788,41.52567 40.102812,42.204461 41.729787,40.6474 C 43.300913,39.143787 42.937408,37.024536 41.400436,35.487563 L 23.176333,15.946056 C 25.426333,9.696056 20.872444,4.446488 14.997444,5.571488 L 13.73493,6.7242174 L 17.687145,10.456865 L 17.906713,13.750381 L 14.955871,16.443984 L 11.429472,16.05584 L 7.8066086,12.652544 C 7.8066086,12.652544 6.5364873,13.907448 6.5364873,13.907448 C 5.9457238,19.548765 11.844213,24.590676 17.906713,21.215676 z "
|
||||
id="path2140"
|
||||
sodipodi:nodetypes="cczcccccccccsc" />
|
||||
<path
|
||||
sodipodi:nodetypes="cczccccccccccc"
|
||||
id="path3057"
|
||||
d="M 18.117385,19.9401 L 37.320267,39.967712 C 37.915174,40.647605 39.800194,41.173077 41.059681,39.967712 C 42.275934,38.803723 41.994534,37.163152 40.804721,35.973338 L 22.313189,16.352183 C 23.813189,9.852183 20.454401,6.3475455 15.454401,6.4725455 L 15.18427,6.7459223 L 18.787193,9.982189 L 18.917359,14.163983 L 15.303442,17.462466 L 11.061136,17.004257 L 7.8845536,14.012776 L 7.5319165,14.442835 C 7.2194165,20.411585 14.023635,23.1276 18.117385,19.9401 z "
|
||||
style="opacity:0.42613639;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.99999917;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
|
||||
<rect
|
||||
style="opacity:0.17045456;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3067);stroke-width:0.9999972;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
id="rect3059"
|
||||
width="23.268276"
|
||||
height="2.0554912"
|
||||
x="28.185335"
|
||||
y="-2.6184492"
|
||||
rx="0.88388073"
|
||||
ry="0.88388073"
|
||||
transform="matrix(0.697938,0.716158,-0.716158,0.697938,0.000000,0.000000)" />
|
||||
<path
|
||||
style="opacity:1;color:#000000;fill:url(#linearGradient3083);fill-opacity:1;fill-rule:nonzero;stroke:#878f9d;stroke-width:0.9999997;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 22.498794,30.12538 C 23.332335,29.410917 35.782628,16.676871 35.782628,16.676871 L 38.856573,16.457303 L 43.687058,9.7604906 L 39.662731,6.1752987 L 33.405057,11.554705 L 33.405057,14.628651 L 20.670142,27.857593 C 20.066332,28.461403 21.730308,30.784082 22.498794,30.12538 z "
|
||||
id="path2144"
|
||||
sodipodi:nodetypes="ccccccccc" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccccc"
|
||||
id="path3085"
|
||||
d="M 22.401987,29.085455 C 23.04876,28.531078 35.426388,15.855648 35.426388,15.855648 L 38.354971,15.607649 L 42.568887,9.945584 L 39.679156,7.3965946 L 34.202578,12.114067 L 34.357836,14.965022 L 21.681731,28.257345 C 21.213213,28.725863 21.805692,29.596565 22.401987,29.085455 z "
|
||||
style="opacity:0.53977272;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient2256);stroke-width:1.00000024;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
|
||||
<path
|
||||
style="color:#000000;fill:url(#linearGradient3093);fill-opacity:1;fill-rule:nonzero;stroke:#204a87;stroke-width:0.9999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 8.4653111,43.611561 C 9.7818986,45.07679 13.438996,45.739726 15.060755,42.901647 C 15.767862,41.664211 17.154698,38.198845 23.341883,32.630379 C 24.381029,31.696208 25.481792,29.559241 24.54863,28.406512 L 22.133387,25.991269 C 21.145334,24.893432 18.398973,25.40552 17.272212,26.942145 C 13.913455,31.538339 8.4261393,35.197025 7.1887023,35.638967 C 4.8207828,36.484652 5.0872917,39.975116 6.6538792,41.635454 L 8.4653111,43.611561 z "
|
||||
id="path2142"
|
||||
sodipodi:nodetypes="ccccccscc" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="opacity:1;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#a1a1a1;stroke-width:1.13860166;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
id="path2146"
|
||||
sodipodi:cx="41.875"
|
||||
sodipodi:cy="37.5"
|
||||
sodipodi:rx="1.375"
|
||||
sodipodi:ry="1.375"
|
||||
d="M 43.25 37.5 A 1.375 1.375 0 1 1 40.5,37.5 A 1.375 1.375 0 1 1 43.25 37.5 z"
|
||||
transform="matrix(0.878270,0.000000,0.000000,0.878270,2.427204,5.077464)" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="opacity:0.60227272;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
id="path3101"
|
||||
sodipodi:cx="19.003494"
|
||||
sodipodi:cy="28.20101"
|
||||
sodipodi:rx="1.767767"
|
||||
sodipodi:ry="1.767767"
|
||||
d="M 20.771261 28.20101 A 1.767767 1.767767 0 1 1 17.235727,28.20101 A 1.767767 1.767767 0 1 1 20.771261 28.20101 z"
|
||||
transform="matrix(0.570876,0.000000,0.000000,0.570876,9.154848,11.25111)" />
|
||||
<path
|
||||
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient2263);stroke-width:2.29450917;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 18.678905,29.624807 C 18.678905,29.624807 11.509014,36.92442 8.1502573,38.161857"
|
||||
id="path3103"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
sodipodi:nodetypes="csccccscc"
|
||||
id="path2270"
|
||||
d="M 8.8060013,42.48669 C 10.247267,44.232307 13.405535,44.647919 14.397161,42.116101 C 15.078468,40.376589 17.730783,36.450314 22.594745,32.072748 C 23.411654,31.338363 24.277003,29.658419 23.543411,28.752218 L 21.644704,26.853511 C 20.867961,25.990463 18.708951,26.393033 17.823164,27.601028 C 15.182728,31.214257 9.3398194,35.940582 7.9274145,36.406654 C 5.7406198,37.128264 6.1504221,39.627953 7.3819713,40.933203 L 8.8060013,42.48669 z "
|
||||
style="color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.99999946;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;opacity:0.19886364" />
|
||||
<path
|
||||
style="opacity:0.27840911;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient2271);stroke-width:2.29450917;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 20.824602,31.261024 C 20.824602,31.261024 13.501839,37.878429 11.910849,42.121069"
|
||||
id="path2247"
|
||||
sodipodi:nodetypes="cc" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 19 KiB |
1904
design/icons/redhat-config-users_wasp.svg
Normal file
After Width: | Height: | Size: 80 KiB |
1250
design/icons/seahorse-preferences_gnome.svg
Normal file
After Width: | Height: | Size: 48 KiB |
60
design/icons/spherecrystal_help.svg
Normal file
|
@ -0,0 +1,60 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<!-- Created with Sodipodi ("http://www.sodipodi.com/") -->
|
||||
<svg
|
||||
xml:space="preserve"
|
||||
width="24pt"
|
||||
height="24pt"
|
||||
viewBox="0 0 507.946 507.946"
|
||||
id="svg49"
|
||||
sodipodi:version="0.31.1"
|
||||
sodipodi:docname="/home/cschalle/spherecrystal/SphereCrystal/icons/scalable/stock/help.svg"
|
||||
sodipodi:docbase="/home/cschalle/spherecrystal/SphereCrystal/icons/scalable/stock/"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:xml="http://www.w3.org/XML/1998/namespace"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs
|
||||
id="defs62">
|
||||
<radialGradient
|
||||
id="aigrd1"
|
||||
cx="218.9404"
|
||||
cy="219.7715"
|
||||
r="150.7063"
|
||||
fx="218.9404"
|
||||
fy="219.7715"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
style="stroke:#000000;stroke-opacity:0.986014;stroke-width:0.981612;">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#73ffff;stroke:#000000;stroke-opacity:0.986014;stroke-width:0.981612;"
|
||||
id="stop53" />
|
||||
<stop
|
||||
offset="0.2809"
|
||||
style="stop-color:#2EA6B9;stroke:#000000;stroke-opacity:0.986014;stroke-width:0.981612;"
|
||||
id="stop54" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#006b8b;stroke:#000000;stroke-opacity:0.986014;stroke-width:0.981612;"
|
||||
id="stop55" />
|
||||
</radialGradient>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base" />
|
||||
<path
|
||||
style="font-size:12;stroke:none;stroke-width:0.979268;stroke-opacity:0.986014;fill:#a4c9ee;fill-opacity:0.7;"
|
||||
d="M134.757,263.776c0,66.739,54.298,121.04,121.039,121.04c66.739,0,121.039-54.301,121.039-121.04c0-66.741-54.3-121.039-121.039-121.039c-66.741,0-121.039,54.298-121.039,121.039z"
|
||||
id="path51"
|
||||
transform="matrix(2.02625,0,0,2.03038,-263.417,-279.103)" />
|
||||
<path
|
||||
style="font-size:12;fill:url(#aigrd1);fill-rule:evenodd;stroke:#1c6671;stroke-width:7.73106;stroke-opacity:0.988235;"
|
||||
d="M356.643,263.366c0,57.027-46.23,103.257-103.256,103.257c-57.027,0-103.256-46.229-103.256-103.257c0-57.027,46.229-103.256,103.256-103.256 c57.025,0,103.256,46.229,103.256,103.256z"
|
||||
id="path56"
|
||||
transform="matrix(2.18599,0,0,2.17069,-298.588,-314.939)" />
|
||||
<path
|
||||
d="M243.23,133.176c-0.09-2.664,1.26-4.104,4.05-4.104c2.376,0,3.906,1.242,3.906,3.258c0,1.224-0.414,2.016-1.854,3.222c-1.224,1.026-1.548,1.584-1.529,2.394v0.378h-1.314c-0.126-1.062,0.145-2.016,0.811-2.718c1.764-1.89,2.321-2.232,2.321-3.204 c0-1.134-0.863-2.034-2.357-2.034c-1.638,0-2.538,0.918-2.466,2.808h-1.566z M246.236,141.978v-1.962h1.782v1.962h-1.782z"
|
||||
id="path249"
|
||||
style="font-size:12;stroke:#0c6772;stroke-opacity:0.988235;stroke-width:0.532547;fill:#ffffff;fill-opacity:0.99;"
|
||||
transform="matrix(37.6767,0.405146,0,29.1071,-9057.92,-3782.63)" />
|
||||
</svg>
|
After Width: | Height: | Size: 2.9 KiB |
362
design/icons/system-log-out_tango.svg
Normal file
|
@ -0,0 +1,362 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
inkscape:export-ydpi="90.000000"
|
||||
inkscape:export-xdpi="90.000000"
|
||||
inkscape:export-filename="/home/jimmac/Desktop/wi-fi.png"
|
||||
width="48px"
|
||||
height="48px"
|
||||
id="svg11300"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.43+devel"
|
||||
sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/actions"
|
||||
sodipodi:docname="system-log-out.svg">
|
||||
<defs
|
||||
id="defs3">
|
||||
<linearGradient
|
||||
id="linearGradient9896">
|
||||
<stop
|
||||
id="stop9898"
|
||||
offset="0"
|
||||
style="stop-color:#cecece;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop9900"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#9e9e9e;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient9888"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop9890"
|
||||
offset="0"
|
||||
style="stop-color:#ffffff;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop9892"
|
||||
offset="1"
|
||||
style="stop-color:#ffffff;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient9880"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop9882"
|
||||
offset="0"
|
||||
style="stop-color:#525252;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop9884"
|
||||
offset="1"
|
||||
style="stop-color:#525252;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient9868">
|
||||
<stop
|
||||
style="stop-color:#4e4e4e;stop-opacity:1.0000000;"
|
||||
offset="0.0000000"
|
||||
id="stop9870" />
|
||||
<stop
|
||||
style="stop-color:#616161;stop-opacity:0.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop9872" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient9854">
|
||||
<stop
|
||||
id="stop9856"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#4e4e4e;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop9858"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#ababab;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient9842"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop9844"
|
||||
offset="0"
|
||||
style="stop-color:#727e0a;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop9846"
|
||||
offset="1"
|
||||
style="stop-color:#727e0a;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient9830">
|
||||
<stop
|
||||
id="stop9832"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#505050;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop9834"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#181818;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient8662">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop8664" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop8666" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient8650">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop8652" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop8654" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient8650"
|
||||
id="radialGradient8656"
|
||||
cx="19.701141"
|
||||
cy="2.8969381"
|
||||
fx="19.701141"
|
||||
fy="2.8969381"
|
||||
r="17.171415"
|
||||
gradientTransform="matrix(1.253442,-2.296195e-16,1.747460e-16,0.953900,-15.47908,11.27663)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<radialGradient
|
||||
r="15.644737"
|
||||
fy="36.421127"
|
||||
fx="24.837126"
|
||||
cy="36.421127"
|
||||
cx="24.837126"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,0.536723,1.673575e-15,16.87306)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient9826"
|
||||
xlink:href="#linearGradient8662"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.017991,4.461116e-16,-5.888254e-16,2.64016,-144.5498,-62.03367)"
|
||||
r="16.321514"
|
||||
fy="40.545052"
|
||||
fx="93.780037"
|
||||
cy="40.545052"
|
||||
cx="93.780037"
|
||||
id="radialGradient9836"
|
||||
xlink:href="#linearGradient9830"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientTransform="matrix(1.025512,0,0,0.648342,-0.865496,15.63026)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="28.112619"
|
||||
x2="30.935921"
|
||||
y1="43.757359"
|
||||
x1="30.935921"
|
||||
id="linearGradient9848"
|
||||
xlink:href="#linearGradient9842"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="27.759069"
|
||||
x2="18.031221"
|
||||
y1="19.804117"
|
||||
x1="46.845825"
|
||||
id="linearGradient9864"
|
||||
xlink:href="#linearGradient9854"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.565823,5.084556e-18,-2.416266e-14,1.403262,-37.78323,-9.483303)"
|
||||
r="9.7227182"
|
||||
fy="7.1396070"
|
||||
fx="27.883883"
|
||||
cy="7.1396070"
|
||||
cx="27.883883"
|
||||
id="radialGradient9876"
|
||||
xlink:href="#linearGradient9868"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientTransform="translate(-1.116120,0.000000)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="24.764584"
|
||||
x2="34.007416"
|
||||
y1="19.107729"
|
||||
x1="31.852951"
|
||||
id="linearGradient9886"
|
||||
xlink:href="#linearGradient9880"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="43.449947"
|
||||
x2="19.755548"
|
||||
y1="13.663074"
|
||||
x1="8.7600641"
|
||||
id="linearGradient9894"
|
||||
xlink:href="#linearGradient9888"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
y2="18.064039"
|
||||
x2="33.710651"
|
||||
y1="21.511185"
|
||||
x1="31.078955"
|
||||
id="linearGradient9902"
|
||||
xlink:href="#linearGradient9896"
|
||||
inkscape:collect="always" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
stroke="#a40000"
|
||||
fill="#727e0a"
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="0.25490196"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1"
|
||||
inkscape:cx="20.295477"
|
||||
inkscape:cy="1.9717815"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:showpageshadow="false"
|
||||
inkscape:window-width="1039"
|
||||
inkscape:window-height="938"
|
||||
inkscape:window-x="485"
|
||||
inkscape:window-y="137" />
|
||||
<metadata
|
||||
id="metadata4">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Jakub Steiner</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:source>http://jimmac.musichall.cz</dc:source>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
|
||||
<dc:title>System Log Out</dc:title>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>log out</rdf:li>
|
||||
<rdf:li>logout</rdf:li>
|
||||
<rdf:li>exit</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<rect
|
||||
ry="0.7071048"
|
||||
rx="0.70710522"
|
||||
y="2.5692098"
|
||||
x="13.501722"
|
||||
height="41.942028"
|
||||
width="31.99555"
|
||||
id="rect9828"
|
||||
style="opacity:1;color:#000000;fill:url(#radialGradient9836);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000048;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
inkscape:r_cx="true"
|
||||
inkscape:r_cy="true" />
|
||||
<rect
|
||||
y="31.736542"
|
||||
x="14"
|
||||
height="12.263458"
|
||||
width="30.999998"
|
||||
id="rect9840"
|
||||
style="opacity:1;color:#000000;fill:url(#linearGradient9848);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
inkscape:r_cx="true"
|
||||
inkscape:r_cy="true" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
id="path9852"
|
||||
d="M 14.037662,43.944859 L 13.998829,3.0545252 L 33.941125,3.0987194 L 33.985319,33.018175 L 14.037662,43.944859 z "
|
||||
style="overflow:visible;display:inline;visibility:visible;stroke-opacity:1.0000000;stroke-dashoffset:0.0000000;stroke-dasharray:none;stroke-miterlimit:10.000000;marker-end:none;marker-mid:none;marker-start:none;marker:none;stroke-linejoin:miter;stroke-linecap:butt;stroke-width:1.0000000;stroke:none;fill-rule:evenodd;fill-opacity:1.0;fill:url(#linearGradient9864);color:#000000;opacity:1.0000000" />
|
||||
<path
|
||||
style="opacity:0.42222222;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
|
||||
d="M 13.969801,43.944859 L 34.117903,33.062369 L 15.556349,41.989592 L 15.556349,3.0103306 L 13.985886,3.0103306 L 13.969801,43.944859 z "
|
||||
id="path1360"
|
||||
inkscape:r_cx="true"
|
||||
inkscape:r_cy="true"
|
||||
sodipodi:nodetypes="cccccc" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="opacity:0.29946521;color:#000000;fill:url(#radialGradient9826);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10.000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
|
||||
id="path8660"
|
||||
sodipodi:cx="24.837126"
|
||||
sodipodi:cy="36.421127"
|
||||
sodipodi:rx="15.644737"
|
||||
sodipodi:ry="8.3968935"
|
||||
d="M 40.481863 36.421127 A 15.644737 8.3968935 0 1 1 9.1923885,36.421127 A 15.644737 8.3968935 0 1 1 40.481863 36.421127 z"
|
||||
transform="matrix(0.778490,0.000000,0.000000,0.778490,-7.579815,1.598139)" />
|
||||
<path
|
||||
style="opacity:1.0000000;color:#000000;fill:#cc0000;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#a40000;stroke-width:0.99999982;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10.000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 1.7317981,17.593819 L 1.7317981,30.355364 L 9.6641034,30.355364 L 9.6641034,36.176147 L 21.887745,23.952503 L 9.5913424,11.656101 L 9.5913424,17.597067 L 1.7317981,17.593819 z "
|
||||
id="path8643"
|
||||
sodipodi:nodetypes="cccccccc" />
|
||||
<path
|
||||
style="opacity:0.50802141;color:#000000;fill:url(#radialGradient8656);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10.000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 9.9240084,12.478043 L 9.9240084,17.865661 L 2.0746151,17.865661 L 2.0746151,24.531440 C 12.332521,20.703863 11.954992,27.773987 21.294280,23.946410 L 9.9240084,12.478043 z "
|
||||
id="path8645"
|
||||
sodipodi:nodetypes="cccccc" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccccccc"
|
||||
id="path8658"
|
||||
d="M 2.7193259,18.399985 L 2.7193259,29.536029 L 10.553144,29.536029 L 10.553144,33.793979 L 20.404597,23.948406 L 10.488577,13.684714 L 10.488577,18.402867 L 2.7193259,18.399985 z "
|
||||
style="overflow:visible;display:inline;visibility:visible;stroke-opacity:1.0000000;stroke-dashoffset:0.0000000;stroke-dasharray:none;stroke-miterlimit:10.000000;marker-end:none;marker-mid:none;marker-start:none;marker:none;stroke-linejoin:miter;stroke-linecap:butt;stroke-width:1.0000000;stroke:url(#linearGradient9894);fill-rule:evenodd;fill-opacity:1.0000000;fill:none;color:#000000;opacity:0.48128340" />
|
||||
<path
|
||||
style="opacity:1;color:#000000;fill:url(#radialGradient9876);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 14.044811,43.757359 L 14,3.0545252 L 33.941125,3.0545252 L 33.761879,33.681088 L 14.044811,43.757359 z "
|
||||
id="path9866"
|
||||
sodipodi:nodetypes="ccccc"
|
||||
inkscape:r_cx="true"
|
||||
inkscape:r_cy="true" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccsscc"
|
||||
id="path9878"
|
||||
d="M 29.643025,18.456195 L 31.565472,20.908971 L 30.107064,25.726136 C 30.107064,25.726136 30.372229,27.228738 31.145627,26.212272 C 31.919025,25.195806 34.118082,22.630218 33.730986,20.754291 C 33.443724,19.362175 32.648229,18.699263 32.648229,18.699263 L 29.643025,18.456195 z "
|
||||
style="opacity:1.0000000;color:#000000;fill:url(#linearGradient9886);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10.000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
|
||||
<path
|
||||
sodipodi:nodetypes="csccscs"
|
||||
id="path9862"
|
||||
d="M 31.477084,17.351340 C 31.477084,17.351340 33.640354,18.353058 33.708889,19.229593 C 33.810670,20.531315 29.466248,24.665476 29.466248,24.665476 C 28.958015,25.284194 28.118326,24.731767 28.582365,24.135146 C 28.582365,24.135146 32.048969,20.017173 31.830637,19.693631 C 31.557026,19.288174 29.863996,18.655068 29.863996,18.655068 C 28.847530,17.903768 30.131617,16.349605 31.477084,17.351340 z "
|
||||
style="overflow:visible;display:inline;visibility:visible;stroke-opacity:1.0000000;stroke-dashoffset:0.0000000;stroke-dasharray:none;stroke-miterlimit:10.000000;marker-end:none;marker-mid:none;marker-start:none;marker:none;stroke-linejoin:miter;stroke-linecap:butt;stroke-width:1.0000000;stroke:none;fill-rule:evenodd;fill-opacity:1.0;fill:url(#linearGradient9902);color:#000000;opacity:1.0000000" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 16 KiB |
515
design/icons/unlocked_clavdia.svg
Normal file
|
@ -0,0 +1,515 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
inkscape:export-ydpi="90.000000"
|
||||
inkscape:export-xdpi="90.000000"
|
||||
inkscape:export-filename="/home/jimmac/Desktop/wi-fi.png"
|
||||
width="48px"
|
||||
height="48px"
|
||||
id="svg11300"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.44.1"
|
||||
sodipodi:docbase="/home/lars/subversion/cryptobox/branches/pythonrewrite/design/icons"
|
||||
sodipodi:docname="unlocked_clavdia.svg">
|
||||
<defs
|
||||
id="defs3">
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5060"
|
||||
id="radialGradient6719"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
|
||||
cx="605.71429"
|
||||
cy="486.64789"
|
||||
fx="605.71429"
|
||||
fy="486.64789"
|
||||
r="117.14286" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5060">
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5062" />
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop5064" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5060"
|
||||
id="radialGradient6717"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
|
||||
cx="605.71429"
|
||||
cy="486.64789"
|
||||
fx="605.71429"
|
||||
fy="486.64789"
|
||||
r="117.14286" />
|
||||
<linearGradient
|
||||
id="linearGradient5048">
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:0;"
|
||||
offset="0"
|
||||
id="stop5050" />
|
||||
<stop
|
||||
id="stop5056"
|
||||
offset="0.5"
|
||||
style="stop-color:black;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop5052" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5048"
|
||||
id="linearGradient6715"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
|
||||
x1="302.85715"
|
||||
y1="366.64789"
|
||||
x2="302.85715"
|
||||
y2="609.50507" />
|
||||
<linearGradient
|
||||
id="linearGradient11327">
|
||||
<stop
|
||||
style="stop-color:#7d6400;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop11329" />
|
||||
<stop
|
||||
style="stop-color:#be9700;stop-opacity:1.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop11331" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2092">
|
||||
<stop
|
||||
id="stop2094"
|
||||
offset="0"
|
||||
style="stop-color:#fff7b0;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#ffec41;stop-opacity:1.0000000;"
|
||||
offset="0.20999999"
|
||||
id="stop2098" />
|
||||
<stop
|
||||
id="stop2293"
|
||||
offset="0.83999997"
|
||||
style="stop-color:#e2cc00;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop2100"
|
||||
offset="1"
|
||||
style="stop-color:#c3af00;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient11335">
|
||||
<stop
|
||||
style="stop-color:#6f716d;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop11337" />
|
||||
<stop
|
||||
style="stop-color:#9ea09c;stop-opacity:1.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop11339" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient10591">
|
||||
<stop
|
||||
style="stop-color:#cad0c6;stop-opacity:1.0000000;"
|
||||
offset="0.0000000"
|
||||
id="stop10593" />
|
||||
<stop
|
||||
id="stop10599"
|
||||
offset="0.50000000"
|
||||
style="stop-color:#eaece9;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
style="stop-color:#c5cbc0;stop-opacity:1.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop10595" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient11520">
|
||||
<stop
|
||||
id="stop11522"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop11524"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#dcdcdc;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient11508"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop11510"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop11512"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient11508"
|
||||
id="radialGradient1348"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,0.338462,-1.435476e-15,29.48178)"
|
||||
cx="30.203562"
|
||||
cy="44.565483"
|
||||
fx="30.203562"
|
||||
fy="44.565483"
|
||||
r="6.5659914" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient11520"
|
||||
id="radialGradient1366"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.995058,-1.651527e-32,0.000000,1.995058,-24.32488,-35.70087)"
|
||||
cx="24.445690"
|
||||
cy="35.878170"
|
||||
fx="24.445690"
|
||||
fy="35.878170"
|
||||
r="20.530962" />
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath99374">
|
||||
<rect
|
||||
style="opacity:0.8;fill:#e0e0ab;fill-opacity:1;stroke:none;stroke-width:4;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect99364"
|
||||
width="22.180567"
|
||||
height="18.34363"
|
||||
x="-51.015305"
|
||||
y="21.246235" />
|
||||
</clipPath>
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath99379">
|
||||
<rect
|
||||
style="opacity:0.8;fill:#e0e0ab;fill-opacity:1;stroke:none;stroke-width:4;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect99377"
|
||||
width="25.435051"
|
||||
height="16.428865"
|
||||
x="-30.086597"
|
||||
y="5.2453609" />
|
||||
</clipPath>
|
||||
<radialGradient
|
||||
r="20.530962"
|
||||
fy="35.878170"
|
||||
fx="24.445690"
|
||||
cy="35.878170"
|
||||
cx="24.445690"
|
||||
gradientTransform="matrix(1.995058,-1.651527e-32,0.000000,1.995058,-24.32488,-35.70087)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient99656"
|
||||
xlink:href="#linearGradient11520"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
r="6.5659914"
|
||||
fy="44.565483"
|
||||
fx="30.203562"
|
||||
cy="44.565483"
|
||||
cx="30.203562"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,0.338462,-1.435476e-15,29.48178)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient99654"
|
||||
xlink:href="#linearGradient11508"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
id="linearGradient99642">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1.0000000;"
|
||||
offset="0.0000000"
|
||||
id="stop99644" />
|
||||
<stop
|
||||
style="stop-color:#dcdcdc;stop-opacity:1.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop99646" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient99634">
|
||||
<stop
|
||||
id="stop99636"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#cad0c6;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
style="stop-color:#eaece9;stop-opacity:1.0000000;"
|
||||
offset="0.50000000"
|
||||
id="stop99638" />
|
||||
<stop
|
||||
id="stop99640"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#c5cbc0;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient99628">
|
||||
<stop
|
||||
id="stop99630"
|
||||
offset="0"
|
||||
style="stop-color:#6f716d;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop99632"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#9ea09c;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient99618">
|
||||
<stop
|
||||
style="stop-color:#fff7b0;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop99620" />
|
||||
<stop
|
||||
id="stop99622"
|
||||
offset="0.20999999"
|
||||
style="stop-color:#ffec41;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
style="stop-color:#e2cc00;stop-opacity:1;"
|
||||
offset="0.83999997"
|
||||
id="stop99624" />
|
||||
<stop
|
||||
style="stop-color:#c3af00;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop99626" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient99612">
|
||||
<stop
|
||||
id="stop99614"
|
||||
offset="0"
|
||||
style="stop-color:#7d6400;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop99616"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#be9700;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
y2="609.50507"
|
||||
x2="302.85715"
|
||||
y1="366.64789"
|
||||
x1="302.85715"
|
||||
gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient99610"
|
||||
xlink:href="#linearGradient5048"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
id="linearGradient99602">
|
||||
<stop
|
||||
id="stop99604"
|
||||
offset="0"
|
||||
style="stop-color:black;stop-opacity:0;" />
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:1;"
|
||||
offset="0.5"
|
||||
id="stop99606" />
|
||||
<stop
|
||||
id="stop99608"
|
||||
offset="1"
|
||||
style="stop-color:black;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="117.14286"
|
||||
fy="486.64789"
|
||||
fx="605.71429"
|
||||
cy="486.64789"
|
||||
cx="605.71429"
|
||||
gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient99600"
|
||||
xlink:href="#linearGradient5060"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
r="117.14286"
|
||||
fy="486.64789"
|
||||
fx="605.71429"
|
||||
cy="486.64789"
|
||||
cx="605.71429"
|
||||
gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient99592"
|
||||
xlink:href="#linearGradient5060"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5048"
|
||||
id="linearGradient99674"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
|
||||
x1="302.85715"
|
||||
y1="366.64789"
|
||||
x2="302.85715"
|
||||
y2="609.50507" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5060"
|
||||
id="radialGradient99676"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
|
||||
cx="605.71429"
|
||||
cy="486.64789"
|
||||
fx="605.71429"
|
||||
fy="486.64789"
|
||||
r="117.14286" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5060"
|
||||
id="radialGradient99678"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
|
||||
cx="605.71429"
|
||||
cy="486.64789"
|
||||
fx="605.71429"
|
||||
fy="486.64789"
|
||||
r="117.14286" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient11520"
|
||||
id="radialGradient99680"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.995058,0,0,1.995058,-24.32488,-35.70087)"
|
||||
cx="24.445690"
|
||||
cy="35.878170"
|
||||
fx="24.445690"
|
||||
fy="35.878170"
|
||||
r="20.530962" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
stroke="#ef2929"
|
||||
fill="#729fcf"
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="0.25490196"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="10.91805"
|
||||
inkscape:cx="34.197982"
|
||||
inkscape:cy="22.826448"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:showpageshadow="false"
|
||||
inkscape:window-width="1024"
|
||||
inkscape:window-height="693"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="26" />
|
||||
<metadata
|
||||
id="metadata4">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Jakub Steiner</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:source>http://jimmac.musichall.cz</dc:source>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
|
||||
<dc:title>Read Only Emblem</dc:title>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>emblem</rdf:li>
|
||||
<rdf:li>read-only</rdf:li>
|
||||
<rdf:li>nowrite</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://web.resource.org/cc/ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<g
|
||||
transform="matrix(2.243788e-2,0,0,2.086758e-2,44.06795,40.547)"
|
||||
id="g6707">
|
||||
<rect
|
||||
style="opacity:0.40206185;color:black;fill:url(#linearGradient6715);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
id="rect6709"
|
||||
width="1339.6335"
|
||||
height="478.35718"
|
||||
x="-1559.2523"
|
||||
y="-150.69685" />
|
||||
<path
|
||||
style="opacity:0.40206185;color:black;fill:url(#radialGradient6717);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
|
||||
id="path6711"
|
||||
sodipodi:nodetypes="cccc" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccc"
|
||||
id="path6713"
|
||||
d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
|
||||
style="opacity:0.40206185;color:black;fill:url(#radialGradient6719);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
|
||||
</g>
|
||||
<rect
|
||||
ry="5.4548240"
|
||||
rx="5.4548240"
|
||||
y="3.5233452"
|
||||
x="4.4147282"
|
||||
height="40.061924"
|
||||
width="40.061924"
|
||||
id="rect11518"
|
||||
style="opacity:1.0000000;color:#000000;fill:url(#radialGradient1366);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#9b9b9b;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10.000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
|
||||
<rect
|
||||
style="opacity:1.0000000;color:#000000;fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10.000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
|
||||
id="rect11528"
|
||||
width="37.696587"
|
||||
height="37.696587"
|
||||
x="5.5973887"
|
||||
y="4.7060070"
|
||||
rx="4.2426391"
|
||||
ry="4.2426391" />
|
||||
<g
|
||||
id="g99382"
|
||||
transform="translate(64.17496,5.12349e-2)">
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccsccsccccc"
|
||||
transform="matrix(0.822017,-0.569462,0.569462,0.822017,-37.20671,-9.737911)"
|
||||
clip-path="url(#clipPath99379)"
|
||||
inkscape:r_cy="true"
|
||||
inkscape:r_cx="true"
|
||||
id="path2086"
|
||||
d="M -19.068594,11.432861 C -23.139015,11.560387 -25.83734,13.517631 -25.83734,17.554601 L -25.879035,19.763437 L -23.048301,21.743968 L -11.112355,21.675003 L -11.095387,17.621873 C -11.095387,13.336537 -14.024578,11.485755 -18.45788,11.432861 C -18.66457,11.430382 -18.868408,11.42659 -19.068594,11.432861 z M -18.661456,14.140554 C -18.586607,14.138867 -18.501348,14.140554 -18.423954,14.140554 C -13.50511,14.140554 -13.882306,17.63895 -13.809672,18.681405 L -13.809672,21.675003 L -23.018207,23.137007 L -23.072173,18.698223 C -23.089634,17.664045 -23.376856,14.246926 -18.661456,14.140554 z "
|
||||
style="opacity:0.69886361;color:black;fill:#888a85;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.9999997;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible" />
|
||||
<path
|
||||
clip-path="url(#clipPath99374)"
|
||||
inkscape:transform-center-y="5.5451416"
|
||||
inkscape:transform-center-x="-2.4028947"
|
||||
inkscape:r_cy="true"
|
||||
inkscape:r_cx="true"
|
||||
id="path99362"
|
||||
d="M -40.333928,11.007309 C -44.404349,11.134835 -47.102674,13.092079 -47.102674,17.129049 L -47.102674,21.249451 L -48.018753,21.249451 C -48.690902,21.249451 -49.240182,21.712398 -49.240182,22.292165 L -49.240182,33.122936 C -49.240182,33.702703 -48.690902,34.165651 -48.018753,34.16565 L -31.444653,34.16565 C -30.772494,34.16565 -30.240181,33.702702 -30.240181,33.122936 L -30.240181,22.292165 C -30.240181,21.712399 -30.772494,21.249451 -31.444653,21.249451 L -32.377689,21.249451 L -32.360721,17.196321 C -32.360721,12.910985 -35.289912,11.060203 -39.723214,11.007309 C -39.929904,11.00483 -40.133742,11.001038 -40.333928,11.007309 z M -39.92679,13.715002 C -39.851941,13.713315 -39.766682,13.715002 -39.689288,13.715002 C -34.770444,13.715002 -35.14764,17.213398 -35.075006,18.255853 L -35.075006,21.249451 L -44.337507,21.249451 L -44.337507,18.272671 C -44.354968,17.238493 -44.64219,13.821374 -39.92679,13.715002 z "
|
||||
style="opacity:0.69886361;color:black;fill:#888a85;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.9999997;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 20 KiB |
1198
design/icons/unlocked_lars.svg
Normal file
After Width: | Height: | Size: 49 KiB |
1
doc/html/fr
Symbolic link
|
@ -0,0 +1 @@
|
|||
en
|
1
doc/html/si
Symbolic link
|
@ -0,0 +1 @@
|
|||
en
|
4
known_problems
Normal file
|
@ -0,0 +1,4 @@
|
|||
Bug-Report: twill/other-modules/ClientForm.py: uncomment line 846 ("XHTMLCompatibleFormParser" instead of default parser) - this solves an eternal loop-problem caused by line 958 ("fp.feed(ch)")
|
||||
|
||||
Bug-Report: testoob - loading of a TestSuite (as advertised by the commandline help) does not work (due to unittest.py/loadTestsFromModule)
|
||||
|
31
lang/README
|
@ -3,26 +3,35 @@ $Id$
|
|||
You may want to translate the CryptoBox into another language?
|
||||
Most welcome!
|
||||
|
||||
Existing translation can be found in the .hdf files. There are three
|
||||
easy steps, that won't take longer than one hour to go through:
|
||||
Existing translations can be found in the .hdf files in the
|
||||
language directory (online available as
|
||||
https://systemausfall.org/svn/cryptobox/trunk/lang/).
|
||||
|
||||
1.) Download one .hdf in your preferred language (e.g. en.hdf if you're a native english speaker).
|
||||
There are three easy steps, that won't take longer than one hour
|
||||
to go through, if you want to translate the cryptobox into a
|
||||
language of your choice:
|
||||
|
||||
2.) Start to change the text behind the equal sign line for line.
|
||||
1.) Download one .hdf in your preferred language (e.g. "en.hdf"
|
||||
if you're a native english speaker).
|
||||
|
||||
2.) Start to change the text following the equal signs line by line.
|
||||
|
||||
3.) Send us your changed .hdf file. That's it - thank you!
|
||||
|
||||
|
||||
Hints:
|
||||
We are available via mail (cryptobox@systemausfall.org) for any questions. Don't worry to ask us if
|
||||
something is vague. We prefer "utf" encoded hdf-files. If you don't
|
||||
know what udf means - just don't care, send us your file and
|
||||
everything else will be fine. You don't have to translate the whole
|
||||
file, some minor parts are enough to send back. The community will do
|
||||
the rest. ;)
|
||||
We are available via mail (cryptobox@systemausfall.org) for any
|
||||
questions. Don't worry to ask us if something is vague.
|
||||
|
||||
We prefer "utf" encoded hdf-files. If you don't know what utf
|
||||
means - just don't care, send us your file and everything else
|
||||
will be fine.
|
||||
|
||||
You don't have to translate the whole file - some minor parts are
|
||||
enough to send back. The community will do the rest. ;)
|
||||
|
||||
Again, thanks for your help! We do the Cryptobox things in our
|
||||
freetime for fun and to provide an open source solution for this
|
||||
free time for fun and to provide an open source solution for this
|
||||
special purpose. By helping us, you're taking part in this
|
||||
development.
|
||||
|
||||
|
|
|
@ -9,6 +9,8 @@ help!
|
|||
- SuccessMessage.InitRunning contains only the first sentence
|
||||
- SuccessMessage.ReBoot: add a hint for automatic redirection (3rd sentence)
|
||||
- EmptyCryptoPassword: change 'Text' accordingly to English string.
|
||||
- Button.System: is in eglish
|
||||
- ErrorMessage.NoDocumentation: is in english
|
||||
|
||||
Below are some smaller changes in English sentences. Someone may change it accordingly.
|
||||
- MountFailed: add 'Pleasy try again' to the end of the string.
|
||||
|
|
403
lang/de.hdf
|
@ -1,215 +1,230 @@
|
|||
Lang {
|
||||
Name = Deutsch
|
||||
|
||||
Name = deutsch
|
||||
Status = $Id$
|
||||
|
||||
Status = $Id$
|
||||
Title {
|
||||
Top = Die CryptoBox
|
||||
Slogan = ... und 1984 war gestern!
|
||||
Init = Initialisierung der CryptoBox
|
||||
Mount = Aktivierung des Containers
|
||||
Umount = Deaktivierung des Containers
|
||||
Config = Konfiguration der CryptoBox
|
||||
System = System
|
||||
Status = Status der CryptoBox
|
||||
Volume = Eigenschaften von
|
||||
}
|
||||
|
||||
Title {
|
||||
Top = Die CryptoBox
|
||||
Slogan = ... und 1984 war gestern!
|
||||
Init = Initialisierung der CryptoBox
|
||||
Mount = Aktivierung der Crypto-Daten
|
||||
Umount = Deaktivierung der Crypto-Daten
|
||||
Config = Konfiguration der CryptoBox
|
||||
Log = Protokoll der CryptoBox
|
||||
System = System
|
||||
Status = Status der CryptoBox
|
||||
|
||||
Text {
|
||||
EnterCurrentCryptoPassword = Das Crypto-Passwort eingeben
|
||||
EnterNewCryptoPassword = Das neue Crypto-Passwort eingeben
|
||||
EnterSameCryptoPassword = Das Crypto-Passwort wiederholen
|
||||
EnterCurrentAdminPassword = Das aktuelle Admin-Passwort eingeben:
|
||||
EnterNewAdminPassword = Das neue Admin-Passwort eingeben:
|
||||
EnterSameAdminPassword = Das neue Admin-Passwort wiederholen:
|
||||
InitWarning = Bei der Initialisierung werden ALLE DATEN auf der Festplatte GELÖSCHT!
|
||||
ConfirmInitHint = Um zu bestätigen, dass du weisst, was du tust, tippe hier bitte exakt Folgendes ein:
|
||||
ConfirmInit = Ja, loesche alle Daten!
|
||||
PartitionInfo = Derzeitige Partitionierung der Festplatte:
|
||||
IPAddress = Netzwerk-Adresse (IP) der CryptoBox:
|
||||
TimeOut = Zeitabschaltung des Crypto-Dateisystems (in Minuten):
|
||||
SelectLanguage = Spracheinstellung:
|
||||
RedirectNote = Klicke hier, falls dein Browser die automatische Weiterleitung nicht unterstützt.
|
||||
ProjectHomePage = Projekt-Seite
|
||||
ProjectNote = Die CryptoBox ist ein Projekt von
|
||||
DoUmount = Deaktivierung des verschlüsselten Dateisystems
|
||||
DoMount = Aktivierung des verschlüsselten Dateisystems
|
||||
Configuration = Einstellungen
|
||||
CryptoIsActive = Die Crypto-Daten sind verfügbar.
|
||||
CryptoIsDown = Die Crypto-Daten sind vor jedem Zugriff geschützt.
|
||||
ChoosePartition = Welchen Daten-Container möchtest du auswählen?
|
||||
ChosenPartition = Der aktuelle Daten-Container ist
|
||||
ActivePartitions = Die folgenden Daten-Container sind derzeit aktiv
|
||||
PassivePartitions = Die folgenden Daten-Container sind derzeit inaktiv
|
||||
ContainerName = Der Name des Daten-Containers
|
||||
ContainerEncryption = Aktiviere Verschlüsselung
|
||||
}
|
||||
|
||||
|
||||
Button {
|
||||
DoInit = Initialisierung
|
||||
SaveConfig = Speichere Konfiguration
|
||||
Update = Aktualisieren
|
||||
Mount = Container aktivieren
|
||||
Umount = Container deaktivieren
|
||||
Config = Einstellungen
|
||||
PowerOff = ausschalten
|
||||
ReBoot = neu starten
|
||||
Documentation = Hilfe
|
||||
Status = Status
|
||||
System = System
|
||||
ContainerNameSet = Setze den neuen Namen
|
||||
InitContainer = Reinitialisiere den Container
|
||||
}
|
||||
|
||||
|
||||
WarningMessage {
|
||||
InitNotConfirmed {
|
||||
Title = Bestätigung schlug fehl
|
||||
Text = Der Bestätigungssatz muss exakt eingegeben werden!
|
||||
}
|
||||
|
||||
|
||||
Text {
|
||||
EnterCurrentCryptoPassword = Das Crypto-Passwort eingeben:
|
||||
EnterNewCryptoPassword = Das neue Crypto-Passwort eingeben:
|
||||
EnterSameCryptoPassword = Das Crypto-Passwort wiederholen:
|
||||
EnterCurrentAdminPassword = Das aktuelle Admin-Passwort eingeben:
|
||||
EnterNewAdminPassword = Das neue Admin-Passwort eingeben:
|
||||
EnterSameAdminPassword = Das neue Admin-Passwort wiederholen:
|
||||
InitWarning = Bei der Initialisierung werden ALLE DATEN auf der Festplatte GELÖSCHT!
|
||||
ConfirmInitHint = Um zu bestätigen, dass du weisst, was du tust, tippe hier bitte exakt Folgendes ein:
|
||||
ConfirmInit = Ja, loesche alle Daten!
|
||||
PartitionInfo = Derzeitige Partitionierung der Festplatte:
|
||||
IPAddress = Netzwerk-Adresse (IP) der CryptoBox:
|
||||
TimeOut = Zeitabschaltung des Crypto-Dateisystems (in Minuten):
|
||||
EmptyLog = Das Logbuch der CryptoBox ist leer.
|
||||
SelectLanguage = Spracheinstellung:
|
||||
RedirectNote = Klicke hier, falls dein Browser die automatische Weiterleitung nicht unterstützt.
|
||||
ProjectHomePage = Projekt-Seite
|
||||
ProjectNote = Die CryptoBox ist ein Projekt von
|
||||
DoUmount = Deaktivierung des verschlüsselten Dateisystems
|
||||
DoMount = Aktivierung des verschlüsselten Dateisystems
|
||||
Configuration = Einstellungen
|
||||
CryptoIsActive = Die Crypto-Daten sind verfügbar.
|
||||
CryptoIsDown = Die Crypto-Daten sind vor jedem Zugriff geschützt.
|
||||
EmptyCryptoPassword {
|
||||
Title = Ungültiges Crypto-Passwort
|
||||
Text = Du musst ein Crypto-Passwort eingeben!
|
||||
}
|
||||
|
||||
|
||||
Button {
|
||||
DoInit = Initialisierung
|
||||
SaveConfig = Speichere Konfiguration
|
||||
Update = Aktualisieren
|
||||
Mount = Crypto-Daten aktivieren
|
||||
Umount = Crypto-Daten deaktivieren
|
||||
Config = Einstellungen
|
||||
PowerOff = ausschalten
|
||||
ReBoot = neu starten
|
||||
Protocol = Protokoll anzeigen
|
||||
Documentation = Hilfe
|
||||
Status = Status
|
||||
DifferentCryptoPasswords {
|
||||
Title = Ungleiche Crypto-Passworte
|
||||
Text = Die beiden Passworte müssen identisch sein, um Eingabefehler zu verhindern.
|
||||
}
|
||||
|
||||
|
||||
WarningMessage {
|
||||
InitNotConfirmed {
|
||||
Title = Bestätigung schlug fehl
|
||||
Text = Der Bestätigungssatz muss exakt eingegeben werden!
|
||||
}
|
||||
|
||||
EmptyCryptoPassword {
|
||||
Title = Ungültiges Crypto-Passwort
|
||||
Text = Du musst ein Crypto-Passwort eingeben!
|
||||
}
|
||||
|
||||
DifferentCryptoPasswords {
|
||||
Title = Ungleiche Crypto-Passworte
|
||||
Text = Die beiden Passworte müssen identisch sein, um Eingabefehler zu verhindern.
|
||||
}
|
||||
|
||||
DifferentAdminPasswords {
|
||||
Title = Ungleiche Administrations-Passworte
|
||||
Text = Die beiden Passworte müssen identisch sein, um Eingabefehler zu verhindern.
|
||||
}
|
||||
|
||||
WrongAdminPassword {
|
||||
Title = Falsches Administrations-Passwort
|
||||
Text = Das eingegebene Administrations-Passwort ist falsch. Versuche es noch einmal.
|
||||
}
|
||||
|
||||
MountFailed {
|
||||
Title = Aktivierung schlug fehl
|
||||
Text = Das verschlüsselte Dateisystem konnte nicht aktiviert werden. Wahrscheinlich war das Passwort falsch. Versuche es noch einmal.
|
||||
}
|
||||
|
||||
UmountFailed {
|
||||
Title = Deaktivierung schlug fehl
|
||||
Text = Das verschlüsselte Dateisystem konnte nicht abgeschaltet werden. Wahrscheinlich sind noch Dateien geöffnet. Schließe alle potentiell unsauberen Programme (beispielsweise die weitverbreitete Textverarbeitung). Notfalls einfach die CryptoBox ausschalten!
|
||||
}
|
||||
|
||||
NotInitialized {
|
||||
Title = Keine Konfiguration gefunden
|
||||
Text = Die CryptoBox wurde noch nicht eingerichtet.
|
||||
}
|
||||
|
||||
InitNotFinished {
|
||||
Title = Initalisierung noch nicht abgeschlossen
|
||||
Text = Die Initialisierung wird in wenigen Minuten beendet sein. Erst danach ist diese Aktion möglich.
|
||||
}
|
||||
|
||||
IsMounted {
|
||||
Title = Bereits aktiv
|
||||
Text = Das verschlüsselte Dateisystem ist bereits aktiv.
|
||||
}
|
||||
|
||||
NotMounted {
|
||||
Title = Nicht aktiv
|
||||
Text = Das verschlüsselte Dateisystem ist derzeit nicht aktiv.
|
||||
}
|
||||
|
||||
AlreadyConfigured {
|
||||
Title = Konfiguration gefunden
|
||||
Text = Die CryptoBox wurde bereits eingerichtet. Bei einer erneuten Initialisierung werden alle Daten gelöscht!
|
||||
}
|
||||
|
||||
InvalidLanguage {
|
||||
Title = Ungültige Sprache
|
||||
Text = Die ausgewählte Sprache ist nicht verfügbar!
|
||||
}
|
||||
|
||||
InvalidIP {
|
||||
Title = Ungültige IP
|
||||
Text = Die ausgewählte Netzwerkadresse ist nicht gültig!
|
||||
}
|
||||
|
||||
InvalidTimeOut {
|
||||
Title = Ungültige Zeitabschaltung
|
||||
Text = Der ausgewählte Wert der Zeitabschaltung ist nicht gültig!
|
||||
}
|
||||
|
||||
ConfigTimeOutFailed {
|
||||
Title = Fehler beim Ändern der Zeitabschaltung
|
||||
Text = Der Wert der Zeitabschaltung konnte nicht geändert werden!
|
||||
}
|
||||
|
||||
ConfigLanguageFailed {
|
||||
Title = Fehler beim Ändern der Spracheinstellung
|
||||
Text = Die Spracheinstellung konnte nicht geändert werden!
|
||||
}
|
||||
|
||||
ConfigIPFailed {
|
||||
Title = Fehler beim Ändern der Netzwerkadresse
|
||||
Text = Die Netzwerkadresse konnte nicht geändert werden!
|
||||
}
|
||||
|
||||
IPAddressChanged {
|
||||
Title = Änderung der Netzwerk-Adresse
|
||||
Text = Die Netzwerk-Adresse der CryptoBox wurde verändert. In wenigen Sekunden werden sie zu der neuen Adresse umgeleitet.
|
||||
}
|
||||
DifferentAdminPasswords {
|
||||
Title = Ungleiche Administrations-Passworte
|
||||
Text = Die beiden Passworte müssen identisch sein, um Eingabefehler zu verhindern.
|
||||
}
|
||||
|
||||
|
||||
SuccessMessage {
|
||||
InitRunning {
|
||||
Title = Initialisierung läuft
|
||||
Text = Die Initialisierung der CryptoBox wird im Hintergrund abgeschlossen. Du kannst die CryptoBox nun konfigurieren und das verschlüsselte Dateisystem in ein paar Minuten aktivieren.
|
||||
}
|
||||
|
||||
ConfigSaved {
|
||||
Title = Konfiguration gespeichert
|
||||
Text = Die neuen Einstellungen der CryptoBox wurden übernommem.
|
||||
}
|
||||
|
||||
MountDone {
|
||||
Title = Crypto-Daten aktiviert
|
||||
Text = Das verschlüsselte Dateisystem ist nun verfügbar.
|
||||
}
|
||||
|
||||
UmountDone {
|
||||
Title = Crypto-Daten deaktiviert
|
||||
Text = Das verschlüsselte Dateisystem ist nun vor jedem Zugriff geschützt.
|
||||
}
|
||||
|
||||
PowerOff {
|
||||
Title = Abschaltung
|
||||
Text = Die CryptoBox wird gerade heruntergefahren. In wenigen Sekunden kannst du sie ausschalten (falls dies nicht automatisch geschieht).
|
||||
}
|
||||
|
||||
ReBoot {
|
||||
Title = Neustart
|
||||
Text = Die CryptoBox wird gerade neu gestartet. In wenigen Sekunden ist sie wieder verfügbar. Bitte warte solange - du wirst automatisch weitergeleitet.
|
||||
}
|
||||
WrongAdminPassword {
|
||||
Title = Falsches Administrations-Passwort
|
||||
Text = Das eingegebene Administrations-Passwort ist falsch. Versuche es noch einmal.
|
||||
}
|
||||
|
||||
MountFailed {
|
||||
Title = Aktivierung schlug fehl
|
||||
Text = Das verschlüsselte Dateisystem konnte nicht aktiviert werden. Wahrscheinlich war das Passwort falsch. Versuche es noch einmal.
|
||||
}
|
||||
|
||||
ErrorMessage {
|
||||
UmountFailed {
|
||||
Title = Deaktivierung schlug fehl
|
||||
Text = Das verschlüsselte Dateisystem konnte nicht abgeschaltet werden. Wahrscheinlich sind noch Dateien geöffnet. Schließe alle potentiell unsauberen Programme (beispielsweise die weitverbreitete Textverarbeitung). Notfalls einfach die CryptoBox ausschalten!
|
||||
}
|
||||
|
||||
UnknownAction {
|
||||
Title = Unbekannte Aktion
|
||||
Text = Du hast eine undefinierte Aktion angefordert.
|
||||
}
|
||||
NotInitialized {
|
||||
Title = Keine Konfiguration gefunden
|
||||
Text = Die CryptoBox wurde noch nicht eingerichtet.
|
||||
}
|
||||
|
||||
NoSSL {
|
||||
Title = Unverschlüsselte Verbindung
|
||||
Text = Die CryptoBox akzeptiert nur verschlüsselte Verbindungen (https). So bleibt das Passwort vor neugierigen Augen geschützt. In wenigen Sekunden wird eine verschlüsselte Verbindung hergestellt.
|
||||
}
|
||||
InitNotFinished {
|
||||
Title = Initalisierung noch nicht abgeschlossen
|
||||
Text = Die Initialisierung wird in wenigen Minuten beendet sein. Erst danach ist diese Aktion möglich.
|
||||
}
|
||||
|
||||
InitFailed {
|
||||
Title = Initialisierung fehlgeschlagen
|
||||
Text = Sende bitte den Inhalt des Protokolls (siehe oben) an die Entwickler der CryptoBox (cryptobox@systemausfall.org).
|
||||
}
|
||||
IsMounted {
|
||||
Title = Bereits aktiv
|
||||
Text = Das verschlüsselte Dateisystem ist bereits aktiv.
|
||||
}
|
||||
|
||||
NoHardDisk {
|
||||
Title = Keine Festplatte
|
||||
Text = Es wurde kein Datenträger gefunden, der zur Speicherung der verschlüsselten Daten geeignet ist. Prüfe bitte, ob beim Anschalten des Computers eine Festplatte vom BIOS erkannt wurde.
|
||||
}
|
||||
NotMounted {
|
||||
Title = Nicht aktiv
|
||||
Text = Das verschlüsselte Dateisystem ist derzeit nicht aktiv.
|
||||
}
|
||||
|
||||
AlreadyConfigured {
|
||||
Title = Konfiguration gefunden
|
||||
Text = Die CryptoBox wurde bereits eingerichtet. Bei einer erneuten Initialisierung werden alle Daten gelöscht!
|
||||
}
|
||||
|
||||
InvalidLanguage {
|
||||
Title = Ungültige Sprache
|
||||
Text = Die ausgewählte Sprache ist nicht verfügbar!
|
||||
}
|
||||
|
||||
ConfigLanguageFailed {
|
||||
Title = Fehler beim Ändern der Spracheinstellung
|
||||
Text = Die Spracheinstellung konnte nicht geändert werden!
|
||||
}
|
||||
|
||||
NoDiskAvailableForMount {
|
||||
Title = Kein Daten-Container verfügbar
|
||||
Text = Es ist kein inaktiver Daten-Container verfügbar. Vielleicht sind bereits alle Container aktiv?
|
||||
}
|
||||
|
||||
NoDiskAvailableForUmount {
|
||||
Title = Kein Daten-Container verfügbar
|
||||
Text = Kein Daten-Container ist aktiv. Vielleicht wurden alle Container deaktiviert.
|
||||
}
|
||||
|
||||
InvalidDevice {
|
||||
Title = Ungültiger Container
|
||||
Text = Der angegebene Daten-Container ist nicht zulässig.
|
||||
}
|
||||
|
||||
InvalidVolumeName {
|
||||
Title = Umbenennung fehlgeschlagen
|
||||
Text = Der gewählte neue Name des Containers ist ungültig. Versuche es erneut.
|
||||
}
|
||||
|
||||
SetVolumeNameFailed {
|
||||
Title = Umbenennung fehlgeschlagen
|
||||
Text = Die Umbenennung des Containers schlug fehl. Details findest du in der Log-Datei.
|
||||
}
|
||||
|
||||
VolumeMayNotBeMounted {
|
||||
Title = Der Container ist derzeit aktiv
|
||||
Text = Die gewünschte Aktion kann nicht durchgeführt werden, solange der Container aktiv ist.
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
SuccessMessage {
|
||||
InitRunning {
|
||||
Title = Initialisierung läuft
|
||||
Text = Die Initialisierung der CryptoBox wird im Hintergrund abgeschlossen. Du kannst die CryptoBox nun konfigurieren und das verschlüsselte Dateisystem in ein paar Minuten aktivieren.
|
||||
}
|
||||
|
||||
ConfigSaved {
|
||||
Title = Konfiguration gespeichert
|
||||
Text = Die neuen Einstellungen der CryptoBox wurden übernommem.
|
||||
}
|
||||
|
||||
MountDone {
|
||||
Title = Crypto-Daten aktiviert
|
||||
Text = Das verschlüsselte Dateisystem ist nun verfügbar.
|
||||
}
|
||||
|
||||
UmountDone {
|
||||
Title = Crypto-Daten deaktiviert
|
||||
Text = Das verschlüsselte Dateisystem ist nun vor jedem Zugriff geschützt.
|
||||
}
|
||||
|
||||
PowerOff {
|
||||
Title = Abschaltung
|
||||
Text = Die CryptoBox wird gerade heruntergefahren. In wenigen Sekunden kannst du sie ausschalten (falls dies nicht automatisch geschieht).
|
||||
}
|
||||
|
||||
ReBoot {
|
||||
Title = Neustart
|
||||
Text = Die CryptoBox wird gerade neu gestartet. In wenigen Sekunden ist sie wieder verfügbar. Bitte warte solange - du wirst automatisch weitergeleitet.
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ErrorMessage {
|
||||
|
||||
UnknownAction {
|
||||
Title = Unbekannte Aktion
|
||||
Text = Du hast eine undefinierte Aktion angefordert.
|
||||
}
|
||||
|
||||
NoSSL {
|
||||
Title = Unverschlüsselte Verbindung
|
||||
Text = Die CryptoBox akzeptiert nur verschlüsselte Verbindungen (https). So bleibt das Passwort vor neugierigen Augen geschützt. In wenigen Sekunden wird eine verschlüsselte Verbindung hergestellt.
|
||||
}
|
||||
|
||||
InitFailed {
|
||||
Title = Initialisierung fehlgeschlagen
|
||||
Text = Sende bitte den Inhalt des Protokolls (siehe oben) an die Entwickler der CryptoBox (cryptobox@systemausfall.org).
|
||||
}
|
||||
|
||||
NoHardDisk {
|
||||
Title = Keine Festplatte
|
||||
Text = Es wurde kein Datenträger gefunden, der zur Speicherung der verschlüsselten Daten geeignet ist. Prüfe bitte, ob beim Anschalten des Computers eine Festplatte vom BIOS erkannt wurde.
|
||||
}
|
||||
|
||||
NoDocumentation {
|
||||
Title = Keine Hilfeseiten
|
||||
Text = Es sind keine Hilfeseiten verfügbar!
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
436
lang/en.hdf
|
@ -1,255 +1,187 @@
|
|||
Lang {
|
||||
Name = English
|
||||
|
||||
Name = english
|
||||
|
||||
Status = $Id$
|
||||
|
||||
Title {
|
||||
Top = The CryptoBox
|
||||
Slogan = Privacy for the rest of us.
|
||||
Init = CryptoBox initialization
|
||||
Mount = Activation of encrypted data
|
||||
Umount = Deactivation of encrypted data
|
||||
Config = CryptoBox configuration
|
||||
Log = CryptoBox logfiles
|
||||
System = System
|
||||
Status = Status
|
||||
Volume = Properties of
|
||||
}
|
||||
|
||||
|
||||
Text {
|
||||
EnterCurrentCryptoPassword = Enter the crypto password:
|
||||
EnterNewCryptoPassword = Enter the new crypto password:
|
||||
EnterSameCryptoPassword = Repeat the new crypto password:
|
||||
EnterCurrentAdminPassword = Enter the current administration password:
|
||||
EnterNewAdminPassword = Enter the new administration password:
|
||||
EnterSameAdminPassword = Repeat the new administration password:
|
||||
InitWarning = During the process of initialization ALL DATA on the disk WILL BE DELETED!
|
||||
ConfirmInitHint = To confirm that you know what you are doing, please enter exactly the following sequence:
|
||||
ConfirmInit = Yes, delete all data!
|
||||
PartitionInfo = Current partioning of the disk:
|
||||
IPAddress = Network address (IP) of the CryptoBox:
|
||||
TimeOut = Timeout for deactivation of the encrypted filesystem (in minutes):
|
||||
EmptyLog = The logfiles of the CryptoBox are empty.
|
||||
SelectLanguage = Language preferences:
|
||||
RedirectNote = Click here if your browser does not support automatic redirection.
|
||||
ProjectHomePage = Website of project
|
||||
ProjectNote = The CryptoBox is a project of
|
||||
DoUmount = Deactivation of the encrypted filesystem
|
||||
DoMount = Activation of the encrypted filesystem
|
||||
Configuration = Configuration
|
||||
CryptoIsActive = The encrypted data is accessible.
|
||||
CryptoIsDown = The encrypted data is protected from any access.
|
||||
ChoosePartition = Which container do you want to enable?
|
||||
ChosenPartition = The chosen container is
|
||||
ActivePartitions = The following containers are enabled
|
||||
PassivePartitions = The following containers are disabled
|
||||
ContainerName = Container's name:
|
||||
ContainerEncryption = Enable encryption
|
||||
}
|
||||
|
||||
|
||||
Button {
|
||||
DoInit = Initialization
|
||||
SaveConfig = Save configuration
|
||||
Update = Refresh
|
||||
Mount = Activate filesystem
|
||||
Umount = Deactivate filesystem
|
||||
Config = Configuration
|
||||
PowerOff = Shutdown
|
||||
ReBoot = Reboot
|
||||
Protocol = Show logfiles
|
||||
Documentation = Help
|
||||
Status = Status
|
||||
System = System
|
||||
ContainerNameSet = Change name
|
||||
InitContainer = Initialize container
|
||||
}
|
||||
|
||||
|
||||
WarningMessage {
|
||||
InitNotConfirmed {
|
||||
Title = Confirmation failed
|
||||
Text = The sentence has to be entered exactly as shown!
|
||||
}
|
||||
|
||||
EmptyCryptoPassword {
|
||||
Title = Invalid crypto password
|
||||
Text = You have to enter a crypto password!
|
||||
}
|
||||
|
||||
DifferentCryptoPasswords {
|
||||
Title = Crypto passwords do not match
|
||||
Text = Both entered passwords have to be identical to ensure this is the desired password.
|
||||
}
|
||||
|
||||
DifferentAdminPasswords {
|
||||
Title = Administration passwords do not match
|
||||
Text = Both entered passwords have to be identical to ensure this is the desired password.
|
||||
}
|
||||
|
||||
WrongAdminPassword {
|
||||
Title = Wrong Administration password
|
||||
Text = The entered administration password is wrong. Please try again.
|
||||
}
|
||||
|
||||
MountFailed {
|
||||
Title = Activation failed
|
||||
Text = The encrypted filesystem could not be activated. Probably the given password was wrong. Please try again.
|
||||
}
|
||||
|
||||
UmountFailed {
|
||||
Title = Deactivation failed
|
||||
Text = The encrypted filesystem could not be deactivated. Probably some files are still in use. Close all unclean programs (for example that widely used word processor). In case of emergency just shut down the CryptoBox!
|
||||
}
|
||||
|
||||
NotInitialized {
|
||||
Title = No configuration found
|
||||
Text = The CryptoBox has not yet been configured.
|
||||
}
|
||||
|
||||
InitNotFinished {
|
||||
Title = Initialization not yet completed
|
||||
Text = Initialization will be completed in a few minutes. After completed initialization this action will become available.
|
||||
}
|
||||
|
||||
IsMounted {
|
||||
Title = Already active
|
||||
Text = The encrypted filesystem has already been activated.
|
||||
}
|
||||
|
||||
NotMounted {
|
||||
Title = Inactive
|
||||
Text = The encrypted filesystem is currently not active.
|
||||
}
|
||||
|
||||
AlreadyConfigured {
|
||||
Title = Configuration found
|
||||
Text = The CryptoBox has already been configured. If you initialize again, all data will be deleted!
|
||||
}
|
||||
|
||||
InvalidLanguage {
|
||||
Title = Invalid language
|
||||
Text = The selected language is not available!
|
||||
}
|
||||
|
||||
InvalidIP {
|
||||
Title = Invalid IP address
|
||||
Text = The selected network address is not valid!
|
||||
}
|
||||
|
||||
InvalidTimeOut {
|
||||
Title = Invalid timeout
|
||||
Text = The selected timeout is not valid!
|
||||
}
|
||||
|
||||
ConfigTimeOutFailed {
|
||||
Title = Error during change of timeout
|
||||
Text = The timeout value could not be changed!
|
||||
}
|
||||
|
||||
ConfigLanguageFailed {
|
||||
Title = Error during change of language preferences
|
||||
Text = The language preferences could not be changed!
|
||||
}
|
||||
|
||||
ConfigIPFailed {
|
||||
Title = Error during change of network address
|
||||
Text = The network address could not be changed!
|
||||
}
|
||||
|
||||
IPAddressChanged {
|
||||
Title = Change of network address
|
||||
Text = The network address has been changed. In a few seconds you will get redirected to the new address.
|
||||
}
|
||||
|
||||
NoDiskAvailableForMount {
|
||||
Title = No partition available
|
||||
Text = There is no unused container available. Maybe all containers are already mounted?
|
||||
}
|
||||
|
||||
NoDiskAvailableForUmount {
|
||||
Title = No partition available
|
||||
Text = There is no active container available for turning off. Maybe there is no active container?
|
||||
}
|
||||
|
||||
InvalidDevice {
|
||||
Title = Invalid device
|
||||
Text = The device you have chosen is invalid!
|
||||
}
|
||||
|
||||
InvalidVolumeName {
|
||||
Title = Changing of container's name failed
|
||||
Text = The supplied new name of the container was invalid. Please try again!
|
||||
}
|
||||
|
||||
SetVolumeNameFailed {
|
||||
Title = Changing of container's name failed
|
||||
Text = Could not change the name of the container. Take a look at the log files for details.
|
||||
}
|
||||
|
||||
VolumeMayNotBeMounted {
|
||||
Title = The container is mounted
|
||||
Text = This action is not available while the container is active. Please turn it off first.
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
SuccessMessage {
|
||||
InitRunning {
|
||||
Title = Initialization running
|
||||
Text = The initialization will be completed in background. You may configure it now and activate the encrypted filesystem in a few minutes.
|
||||
}
|
||||
|
||||
ConfigSaved {
|
||||
Title = Configuration saved
|
||||
Text = The new settings have been accepted.
|
||||
}
|
||||
|
||||
MountDone {
|
||||
Title = Encrypted filesystem activated
|
||||
Text = The encrypted filesystem is now available.
|
||||
}
|
||||
|
||||
UmountDone {
|
||||
Title = Encrypted filesystem deactivated
|
||||
Text = The encrypted filesystem is now secured from all forms of access.
|
||||
}
|
||||
|
||||
PowerOff {
|
||||
Title = Shutdown
|
||||
Text = The CryptoBox is currently going to halt. In a few seconds you can power it off (in case this does not happen automatically).
|
||||
}
|
||||
|
||||
ReBoot {
|
||||
Title = Reboot
|
||||
Text = The CryptoBox is currently rebooting. In a few seconds it will be available again. Please wait - you will get redirected, when the reboot has finished.
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ErrorMessage {
|
||||
|
||||
UnknownAction {
|
||||
Title = Unknown action
|
||||
Text = You have requested an undefined action.
|
||||
}
|
||||
|
||||
NoSSL {
|
||||
Title = Unencrypted connection
|
||||
Text = The CryptoBox only accepts encrypted connections (https), so the password is safe from curious eyes. The encrypted connection will be established in a few seconds.
|
||||
}
|
||||
|
||||
InitFailed {
|
||||
Title = Initialization failed
|
||||
Text = Please send the logfiles (see above) to the developers of the CryptoBox (cryptobox@systemausfall.org).
|
||||
}
|
||||
|
||||
NoHardDisk {
|
||||
Title = No hard disk
|
||||
Text = No disk suitable for an encrypted filesystem found. Please ensure the BIOS detected the disk during power-on of the computer.
|
||||
}
|
||||
}
|
||||
Status = $Id$
|
||||
|
||||
Title {
|
||||
Top = The CryptoBox
|
||||
Slogan = Privacy for the rest of us.
|
||||
Init = CryptoBox initialization
|
||||
Config = CryptoBox configuration
|
||||
System = System
|
||||
Status = Status
|
||||
Volume = Volume
|
||||
AccessDenied = Access denied
|
||||
}
|
||||
|
||||
|
||||
Text {
|
||||
AccessDenied = Sorry - you are not allowed to do this!
|
||||
EnterCurrentPassword = Enter the password
|
||||
EnterNewPassword = Enter new password
|
||||
EnterSamePassword = Repeat new password
|
||||
TimeOut = Timeout for deactivation of the encrypted filesystem (in minutes):
|
||||
SelectLanguage = Language preferences:
|
||||
RedirectNote = Click here if your browser does not support automatic redirection.
|
||||
ProjectHomePage = Website of project
|
||||
ProjectNote = The CryptoBox is a project of
|
||||
Configuration = Configuration
|
||||
CryptoIsActive = The encrypted data is accessible.
|
||||
CryptoIsDown = The encrypted data is protected from any access.
|
||||
ChoosePartition = Which container do you want to enable?
|
||||
ChosenPartition = The chosen container is
|
||||
ActivePartitions = The following containers are enabled
|
||||
PassivePartitions = The following containers are disabled
|
||||
ContainerName = Container's name
|
||||
ContainerEncryption = Enable encryption
|
||||
}
|
||||
|
||||
|
||||
Button {
|
||||
DoInit = Initialization
|
||||
SaveConfig = Save configuration
|
||||
Update = Refresh
|
||||
Config = Configuration
|
||||
Documentation = Help
|
||||
Status = Status
|
||||
System = System
|
||||
InitContainer = Initialize container
|
||||
SelectLanguage = Select language
|
||||
HelpForForm = Get help
|
||||
}
|
||||
|
||||
|
||||
WarningMessage {
|
||||
|
||||
EmptyPassword {
|
||||
Title = Missing password
|
||||
Text = You have to enter a password!
|
||||
}
|
||||
|
||||
EmptyNewPassword {
|
||||
Title = Missing new password
|
||||
Text = You have to enter a new password!
|
||||
}
|
||||
|
||||
DifferentPasswords {
|
||||
Title = Different passwords
|
||||
Text = The passwords you entered did not match.
|
||||
}
|
||||
|
||||
NotInitialized {
|
||||
Title = No configuration found
|
||||
Text = The CryptoBox has not yet been configured.
|
||||
}
|
||||
|
||||
InitNotFinished {
|
||||
Title = Initialization not yet completed
|
||||
Text = Initialization will be completed in a few minutes. After completed initialization this action will become available.
|
||||
}
|
||||
|
||||
AlreadyConfigured {
|
||||
Title = Configuration found
|
||||
Text = The CryptoBox has already been configured. If you initialize again, all data will be deleted!
|
||||
}
|
||||
|
||||
InvalidLanguage {
|
||||
Title = Invalid language
|
||||
Text = The selected language is not available!
|
||||
}
|
||||
|
||||
|
||||
ConfigLanguageFailed {
|
||||
Title = Error during change of language preferences
|
||||
Text = The language preferences could not be changed!
|
||||
}
|
||||
|
||||
|
||||
NoDiskAvailableForMount {
|
||||
Title = No partition available
|
||||
Text = There is no unused container available. Maybe all containers are already mounted?
|
||||
}
|
||||
|
||||
NoDiskAvailableForUmount {
|
||||
Title = No partition available
|
||||
Text = There is no active container available for turning off. Maybe there is no active container?
|
||||
}
|
||||
|
||||
InvalidDevice {
|
||||
Title = Invalid device
|
||||
Text = The device you have chosen is invalid!
|
||||
}
|
||||
|
||||
|
||||
InvalidType {
|
||||
Title = Unknown type
|
||||
Text = The type of this volume is unknown.
|
||||
}
|
||||
|
||||
VolumeMayNotBeMounted {
|
||||
Title = The container is mounted
|
||||
Text = This action is not available while the container is active. Please turn it off first.
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
SuccessMessage {
|
||||
InitRunning {
|
||||
Title = Initialization running
|
||||
Text = The initialization will be completed in background. You may configure it now and activate the encrypted filesystem in a few minutes.
|
||||
}
|
||||
|
||||
ConfigSaved {
|
||||
Title = Configuration saved
|
||||
Text = The new settings have been accepted.
|
||||
}
|
||||
|
||||
PowerOff {
|
||||
Title = Shutdown
|
||||
Text = The CryptoBox is currently going to halt. In a few seconds you can power it off (in case this does not happen automatically).
|
||||
}
|
||||
|
||||
ReBoot {
|
||||
Title = Reboot
|
||||
Text = The CryptoBox is currently rebooting. In a few seconds it will be available again. Please wait - you will get redirected, when the reboot has finished.
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
EnvironmentWarning {
|
||||
|
||||
ReadOnlyConfig {
|
||||
Text = Read-only setup detected - probably you should create a configuration partition.
|
||||
Link.Text = Initialize partition
|
||||
Link.Rel = partition
|
||||
}
|
||||
|
||||
NoSSL {
|
||||
Text = The connection is not encrypted - passwords can be easily intercepted.
|
||||
Link.Text = Use encrypted connection
|
||||
Link.Prot = https
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ErrorMessage {
|
||||
|
||||
UnknownAction {
|
||||
Title = Unknown action
|
||||
Text = You have requested an undefined action.
|
||||
}
|
||||
|
||||
InitFailed {
|
||||
Title = Initialization failed
|
||||
Text = Please send the logfiles (see above) to the developers of the CryptoBox (cryptobox@systemausfall.org).
|
||||
}
|
||||
|
||||
NoHardDisk {
|
||||
Title = No hard disk
|
||||
Text = No disk suitable for an encrypted filesystem found. Please ensure the BIOS detected the disk during power-on of the computer.
|
||||
}
|
||||
|
||||
NoDocumentation {
|
||||
Title = No documentation
|
||||
Text = There is no documentation available!
|
||||
}
|
||||
}
|
||||
|
||||
|
|
476
lang/fr.hdf
|
@ -1,256 +1,254 @@
|
|||
Lang {
|
||||
Name = Francais
|
||||
|
||||
Name = francais
|
||||
Status = $Id$
|
||||
|
||||
Status = $Id$
|
||||
Title {
|
||||
Top = La CryptoBox
|
||||
Slogan = La vie privée pour nous autres.
|
||||
Init = Initialisation CryptoBox
|
||||
Mount = Activation des données cryptées
|
||||
Umount = Déactivation des données cryptées
|
||||
Config = CryptoBox configuration
|
||||
Log = fichiers log CryptoBox
|
||||
System = Système
|
||||
Status = Statut
|
||||
Volume = Propriétés de
|
||||
}
|
||||
|
||||
Title {
|
||||
Top = La CryptoBox
|
||||
Slogan = La vie privée pour nous autres.
|
||||
Init = Initialisation CryptoBox
|
||||
Mount = Activation des données cryptées
|
||||
Umount = Déactivation des données cryptées
|
||||
Config = CryptoBox configuration
|
||||
Log = fichiers log CryptoBox
|
||||
System = Système
|
||||
Status = Statut
|
||||
Volume = Propriétés de
|
||||
|
||||
Text {
|
||||
EnterCurrentCryptoPassword = Entrez le mot de passe crypto :
|
||||
EnterNewCryptoPassword = Entrez le nouveau mot de passe crypto :
|
||||
EnterSameCryptoPassword = Répétez le nouveau mot de passe crypto :
|
||||
EnterCurrentAdminPassword = Entrez le mot de passe administrateur actuel:
|
||||
EnterNewAdminPassword = Entrez le nouveau mot de passe administrateur :
|
||||
EnterSameAdminPassword = Répétez le nouveau mot de passe administrateur :
|
||||
InitWarning = Pendant le procès d'initialisation TOUTES LES DONNÉES sur le disque vont être SUPPRIMÉES !
|
||||
ConfirmInitHint = Pour confirmer que vous sachiez exactement ce que vous faites, veuillez taper exactement la phrase suivante :
|
||||
ConfirmInit = Oui, supprimer toutes les données !
|
||||
PartitionInfo = Partitionnement actuel du disque :
|
||||
IPAddress = Adresse réseau (IP) de la CryptoBox :
|
||||
TimeOut = Timeout pour la désactivation du système de fichiers crypté (en minutes):
|
||||
EmptyLog = Les fichiers log de la CryptoBox sont vides.
|
||||
SelectLanguage = Préférences de langue :
|
||||
RedirectNote = Cliquez ici si votre navigateur ne supporte pas la redirection automatique.
|
||||
ProjectHomePage = Site web du projet
|
||||
ProjectNote = La CryptoBox est un projet de
|
||||
DoUmount = Déactivation du système de fichiers crypté
|
||||
DoMount = Activation du système de fichiers crypté
|
||||
Configuration = Configuration
|
||||
CryptoIsActive = Les données cryptées sont accessibles.
|
||||
CryptoIsDown = Les données cryptées sont protégés de tout accès.
|
||||
ChoosePartition = Quel conteneur voulez-vous activer ?
|
||||
ChosenPartition = Le conteneur que vous avez choisi est
|
||||
ActivePartitions = Les conteneurs suivants sont activés
|
||||
PassivePartitions = Les conteneurs suivants sont désactivés
|
||||
ContainerName = Nom du conteneur :
|
||||
ContainerEncryption = Aciver le cryptage
|
||||
}
|
||||
|
||||
|
||||
Button {
|
||||
DoInit = Initialisation
|
||||
SaveConfig = Sauvegarder la configuration
|
||||
Update = Recharger
|
||||
Mount = Activer système de fichiers
|
||||
Umount = Déactiver système de fichiers
|
||||
Config = Configuration
|
||||
PowerOff = Arrêt
|
||||
ReBoot = Redémarrage
|
||||
Protocol = Montrer fichiers log
|
||||
Documentation = Aide
|
||||
Status = Status
|
||||
System = Système
|
||||
ContainerNameSet = Changer nom
|
||||
InitContainer = Initialiser conteneur
|
||||
}
|
||||
|
||||
|
||||
WarningMessage {
|
||||
InitNotConfirmed {
|
||||
Title = Echec de la confirmation
|
||||
Text = La phrase n'a pas été tapé exactement !
|
||||
}
|
||||
|
||||
|
||||
Text {
|
||||
EnterCurrentCryptoPassword = Entrez le mot de passe crypto :
|
||||
EnterNewCryptoPassword = Entrez le nouveau mot de passe crypto :
|
||||
EnterSameCryptoPassword = Répétez le nouveau mot de passe crypto :
|
||||
EnterCurrentAdminPassword = Entrez le mot de passe administrateur actuel:
|
||||
EnterNewAdminPassword = Entrez le nouveau mot de passe administrateur :
|
||||
EnterSameAdminPassword = Répétez le nouveau mot de passe administrateur :
|
||||
InitWarning = Pendant le procès d'initialisation TOUTES LES DONNÉES sur le disque vont être SUPPRIMÉES !
|
||||
ConfirmInitHint = Pour confirmer que vous sachiez exactement ce que vous faites, veuillez taper exactement la phrase suivante :
|
||||
ConfirmInit = Oui, supprimer toutes les données !
|
||||
PartitionInfo = Partitionnement actuel du disque :
|
||||
IPAddress = Adresse réseau (IP) de la CryptoBox :
|
||||
TimeOut = Timeout pour la désactivation du système de fichiers crypté (en minutes):
|
||||
EmptyLog = Les fichiers log de la CryptoBox sont vides.
|
||||
SelectLanguage = Préférences de langue :
|
||||
RedirectNote = Cliquez ici si votre navigateur ne supporte pas la redirection automatique.
|
||||
ProjectHomePage = Site web du projet
|
||||
ProjectNote = La CryptoBox est un projet de
|
||||
DoUmount = Déactivation du système de fichiers crypté
|
||||
DoMount = Activation du système de fichiers crypté
|
||||
Configuration = Configuration
|
||||
CryptoIsActive = Les données cryptées sont accessibles.
|
||||
CryptoIsDown = Les données cryptées sont protégés de tout accès.
|
||||
ChoosePartition = Quel conteneur voulez-vous activer ?
|
||||
ChosenPartition = Le conteneur que vous avez choisi est
|
||||
ActivePartitions = Les conteneurs suivants sont activés
|
||||
PassivePartitions = Les conteneurs suivants sont désactivés
|
||||
ContainerName = Nom du conteneur :
|
||||
ContainerEncryption = Aciver le cryptage
|
||||
EmptyCryptoPassword {
|
||||
Title = Mot de passe crypto invalide
|
||||
Text = Vous devez entrer un mot de passe crypto !
|
||||
}
|
||||
|
||||
|
||||
Button {
|
||||
DoInit = Initialisation
|
||||
SaveConfig = Sauvegarder la configuration
|
||||
Update = Recharger
|
||||
Mount = Activer système de fichiers
|
||||
Umount = Déactiver système de fichiers
|
||||
Config = Configuration
|
||||
PowerOff = Arrêt
|
||||
ReBoot = Redémarrage
|
||||
Protocol = Montrer fichiers log
|
||||
Documentation = Aide
|
||||
Status = Status
|
||||
System = Système
|
||||
ContainerNameSet = Changer nom
|
||||
InitContainer = Initialiser conteneur
|
||||
DifferentCryptoPasswords {
|
||||
Title = Les mots de passe crypto ne correspondent pas
|
||||
Text = Les deux mots de passe rentrés doivent être identiques afin de vérifier que ce mot de passe soit celui qui est désiré.
|
||||
}
|
||||
|
||||
|
||||
WarningMessage {
|
||||
InitNotConfirmed {
|
||||
Title = Echec de la confirmation
|
||||
Text = La phrase n'a pas été tapé exactement !
|
||||
}
|
||||
|
||||
EmptyCryptoPassword {
|
||||
Title = Mot de passe crypto invalide
|
||||
Text = Vous devez entrer un mot de passe crypto !
|
||||
}
|
||||
|
||||
DifferentCryptoPasswords {
|
||||
Title = Les mots de passe crypto ne correspondent pas
|
||||
Text = Les deux mots de passe rentrés doivent être identiques afin de vérifier que ce mot de passe soit celui qui est désiré.
|
||||
}
|
||||
|
||||
DifferentAdminPasswords {
|
||||
Title = Les mots de passe administrateur ne correspondent pas
|
||||
Text = Les deux mots de passe rentrés doivent être identiques afin de vérifier que ce mot de passe soit celui qui est désiré.
|
||||
}
|
||||
|
||||
WrongAdminPassword {
|
||||
Title = Mot de passe administrateur erroné
|
||||
Text = Le mot de passe administrateur que vous avez rentré est erroné. Veuillez réessayer.
|
||||
}
|
||||
|
||||
MountFailed {
|
||||
Title = Echec de l'activation
|
||||
Text = Le sytème de fichiers crypté n'a pu être activé. Probablement le mot de passe que vous avez fourni était erroné. Veuillez réessayer.
|
||||
}
|
||||
|
||||
UmountFailed {
|
||||
Title = Echec de la désactivation
|
||||
Text = Le système de fichiers crypté n'a pu être désactivé. Probablement certains fichiers sont en cours d'utilisation. Fermez tous les programmes. En cas d'urgence, éteignez la CryptoBox !
|
||||
}
|
||||
|
||||
NotInitialized {
|
||||
Title = Aucune configuration trouvée
|
||||
Text = La CryptoBox n'a pas encore été configurée.
|
||||
}
|
||||
|
||||
InitNotFinished {
|
||||
Title = L'initialisation n'est pas encore complétée
|
||||
Text = L'initialisation va être complétée en quelques minutes. Après comlpétion de l'initialisation cette action va être disponible.
|
||||
}
|
||||
|
||||
IsMounted {
|
||||
Title = Déjà actif
|
||||
Text = Le système de fichiers crypté a déjà été activé.
|
||||
}
|
||||
|
||||
NotMounted {
|
||||
Title = Inactif
|
||||
Text = Le système de fichiers crypté n'est pas actif actuellement.
|
||||
}
|
||||
|
||||
AlreadyConfigured {
|
||||
Title = Configuration trouvé
|
||||
Text = La CryptoBox a déjà été configurée. Si vous réinitialisez une nouvelle fois, toutes les données seront perdues !
|
||||
}
|
||||
|
||||
InvalidLanguage {
|
||||
Title = Langue invalide
|
||||
Text = La langue choisie n'est pas disponible !
|
||||
}
|
||||
|
||||
InvalidIP {
|
||||
Title = Addresse IP invalide
|
||||
Text = L'adresse réseau sélectionnée n'est pas valide !
|
||||
}
|
||||
|
||||
InvalidTimeOut {
|
||||
Title = Timeout invalide
|
||||
Text = Le timeout sélectionné n'est pas valide !
|
||||
}
|
||||
|
||||
ConfigTimeOutFailed {
|
||||
Title = Erreur pendant le changement du timeout
|
||||
Text = La valeur du timeout n'a pas pu être changé !
|
||||
}
|
||||
|
||||
ConfigLanguageFailed {
|
||||
Title = Erreur pendant le changement des préférences de langue
|
||||
Text = Les préférences de langue n'ont pu être changées !
|
||||
}
|
||||
|
||||
ConfigIPFailed {
|
||||
Title = Erreur pendant le changement de l'adresse réseau
|
||||
Text = L'adresse réseau n'a pas pu être changée !
|
||||
}
|
||||
|
||||
IPAddressChanged {
|
||||
Title = Changement de l'adresse réseau
|
||||
Text = L'adresse réseau a été changée. dans quelques secondes vous allez être redirigés vers la nouvelle adresse.
|
||||
}
|
||||
|
||||
NoDiskAvailableForMount {
|
||||
Title = Aucune partition disponible
|
||||
Text = Il n'y a pas de conteneur inutilisé disponible. Peut-être tous les conteneur sont déjà montés ?
|
||||
}
|
||||
|
||||
NoDiskAvailableForUmount {
|
||||
Title = Aucune partition disponible
|
||||
Text = Il n'y a pas de conteneur actif qui peut être éteint. Peut-être n y a-t-il pas de conteneur actif ?
|
||||
}
|
||||
|
||||
InvalidDevice {
|
||||
Title = Device invalide
|
||||
Text = Le device que vous avez choisi est invalide !
|
||||
}
|
||||
|
||||
InvalidVolumeName {
|
||||
Title = Echec du changement du nom du conteneur
|
||||
Text = Le nouveau nom du conteneur était invalide. Veuillez réessayer !
|
||||
}
|
||||
|
||||
SetVolumeNameFailed {
|
||||
Title = Echec lors du changmenent du nom du conteneur
|
||||
Text = Le nom du conteneur n'a pas pu être changé. Veuillez regarder les fichiers log pour plus de détails.
|
||||
}
|
||||
|
||||
VolumeMayNotBeMounted {
|
||||
Title = Le conteneur est monté
|
||||
Text = Cette action n'est pas disponible pendant que le conteneur est actif. Désactivez-le d'abord.
|
||||
}
|
||||
DifferentAdminPasswords {
|
||||
Title = Les mots de passe administrateur ne correspondent pas
|
||||
Text = Les deux mots de passe rentrés doivent être identiques afin de vérifier que ce mot de passe soit celui qui est désiré.
|
||||
}
|
||||
|
||||
|
||||
SuccessMessage {
|
||||
InitRunning {
|
||||
Title = Initialisation en cours
|
||||
Text = L'initialisation va être complétée en tant que tâche de fond. Vous pouvez configurer maintenant et le système de fichiers crypté dans quelques minutes.
|
||||
}
|
||||
|
||||
ConfigSaved {
|
||||
Title = Configuration sauvegardée
|
||||
Text = Les nouveaux paramètres ont été acceptés.
|
||||
}
|
||||
|
||||
MountDone {
|
||||
Title = Système de fichiers crypté activé
|
||||
Text = Le système de fichiers crypté est maintenant disponible.
|
||||
}
|
||||
|
||||
UmountDone {
|
||||
Title = Système de fichiers crypté déactivé
|
||||
Text = Le système de fichiers crypté est maintenant sécurisé de toute forme d'accès.
|
||||
}
|
||||
|
||||
PowerOff {
|
||||
Title = Arrêt
|
||||
Text = La CryptoBox va maintenant s'éteindre. Dans quelques secondes vous pouvez l'éteindre (au cas où ceci ne se passe pas automatiquement).
|
||||
}
|
||||
|
||||
ReBoot {
|
||||
Title = Redémarrage
|
||||
Text = La CryptoBox est en train de redémarrer. Dans quelques secondes elle va à nouveau être disponible. Veuillez attendre - vous allez être redirigés quand le redémarrage est accomplie.
|
||||
}
|
||||
WrongAdminPassword {
|
||||
Title = Mot de passe administrateur erroné
|
||||
Text = Le mot de passe administrateur que vous avez rentré est erroné. Veuillez réessayer.
|
||||
}
|
||||
|
||||
|
||||
ErrorMessage {
|
||||
|
||||
UnknownAction {
|
||||
Title = Action inconnue
|
||||
Text = Vous avez demandé une action indéfinie.
|
||||
}
|
||||
|
||||
NoSSL {
|
||||
Title = Connexion non cryptée
|
||||
Text = La CryptoBox accepte seulement des connexions cryptées (https), afin que le mot de passe ne soit pas visible pour des yeux curieux. La connexion cryptée va être établie dans quelques secondes.
|
||||
}
|
||||
|
||||
InitFailed {
|
||||
Title = Initialisation échouée
|
||||
Text = Veuillez envoyer les fichiers log (voir ci-dessus) aux développeurs de la CryptoBox (cryptobox@systemausfall.org).
|
||||
}
|
||||
|
||||
NoHardDisk {
|
||||
Title = Aucun disque dur
|
||||
Text = Aucun disque utilisable pour un système de fichier crypté a été trouvé. Veuillez vérifier que le BIOS a détecté le disque pendant le démarrage de l'ordinateur.
|
||||
}
|
||||
MountFailed {
|
||||
Title = Echec de l'activation
|
||||
Text = Le sytème de fichiers crypté n'a pu être activé. Probablement le mot de passe que vous avez fourni était erroné. Veuillez réessayer.
|
||||
}
|
||||
|
||||
UmountFailed {
|
||||
Title = Echec de la désactivation
|
||||
Text = Le système de fichiers crypté n'a pu être désactivé. Probablement certains fichiers sont en cours d'utilisation. Fermez tous les programmes. En cas d'urgence, éteignez la CryptoBox !
|
||||
}
|
||||
|
||||
NotInitialized {
|
||||
Title = Aucune configuration trouvée
|
||||
Text = La CryptoBox n'a pas encore été configurée.
|
||||
}
|
||||
|
||||
InitNotFinished {
|
||||
Title = L'initialisation n'est pas encore complétée
|
||||
Text = L'initialisation va être complétée en quelques minutes. Après comlpétion de l'initialisation cette action va être disponible.
|
||||
}
|
||||
|
||||
IsMounted {
|
||||
Title = Déjà actif
|
||||
Text = Le système de fichiers crypté a déjà été activé.
|
||||
}
|
||||
|
||||
NotMounted {
|
||||
Title = Inactif
|
||||
Text = Le système de fichiers crypté n'est pas actif actuellement.
|
||||
}
|
||||
|
||||
AlreadyConfigured {
|
||||
Title = Configuration trouvé
|
||||
Text = La CryptoBox a déjà été configurée. Si vous réinitialisez une nouvelle fois, toutes les données seront perdues !
|
||||
}
|
||||
|
||||
InvalidLanguage {
|
||||
Title = Langue invalide
|
||||
Text = La langue choisie n'est pas disponible !
|
||||
}
|
||||
|
||||
InvalidIP {
|
||||
Title = Addresse IP invalide
|
||||
Text = L'adresse réseau sélectionnée n'est pas valide !
|
||||
}
|
||||
|
||||
InvalidTimeOut {
|
||||
Title = Timeout invalide
|
||||
Text = Le timeout sélectionné n'est pas valide !
|
||||
}
|
||||
|
||||
ConfigTimeOutFailed {
|
||||
Title = Erreur pendant le changement du timeout
|
||||
Text = La valeur du timeout n'a pas pu être changé !
|
||||
}
|
||||
|
||||
ConfigLanguageFailed {
|
||||
Title = Erreur pendant le changement des préférences de langue
|
||||
Text = Les préférences de langue n'ont pu être changées !
|
||||
}
|
||||
|
||||
ConfigIPFailed {
|
||||
Title = Erreur pendant le changement de l'adresse réseau
|
||||
Text = L'adresse réseau n'a pas pu être changée !
|
||||
}
|
||||
|
||||
IPAddressChanged {
|
||||
Title = Changement de l'adresse réseau
|
||||
Text = L'adresse réseau a été changée. dans quelques secondes vous allez être redirigés vers la nouvelle adresse.
|
||||
}
|
||||
|
||||
NoDiskAvailableForMount {
|
||||
Title = Aucune partition disponible
|
||||
Text = Il n'y a pas de conteneur inutilisé disponible. Peut-être tous les conteneur sont déjà montés ?
|
||||
}
|
||||
|
||||
NoDiskAvailableForUmount {
|
||||
Title = Aucune partition disponible
|
||||
Text = Il n'y a pas de conteneur actif qui peut être éteint. Peut-être n y a-t-il pas de conteneur actif ?
|
||||
}
|
||||
|
||||
InvalidDevice {
|
||||
Title = Device invalide
|
||||
Text = Le device que vous avez choisi est invalide !
|
||||
}
|
||||
|
||||
InvalidVolumeName {
|
||||
Title = Echec du changement du nom du conteneur
|
||||
Text = Le nouveau nom du conteneur était invalide. Veuillez réessayer !
|
||||
}
|
||||
|
||||
SetVolumeNameFailed {
|
||||
Title = Echec lors du changmenent du nom du conteneur
|
||||
Text = Le nom du conteneur n'a pas pu être changé. Veuillez regarder les fichiers log pour plus de détails.
|
||||
}
|
||||
|
||||
VolumeMayNotBeMounted {
|
||||
Title = Le conteneur est monté
|
||||
Text = Cette action n'est pas disponible pendant que le conteneur est actif. Désactivez-le d'abord.
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
SuccessMessage {
|
||||
InitRunning {
|
||||
Title = Initialisation en cours
|
||||
Text = L'initialisation va être complétée en tant que tâche de fond. Vous pouvez configurer maintenant et le système de fichiers crypté dans quelques minutes.
|
||||
}
|
||||
|
||||
ConfigSaved {
|
||||
Title = Configuration sauvegardée
|
||||
Text = Les nouveaux paramètres ont été acceptés.
|
||||
}
|
||||
|
||||
MountDone {
|
||||
Title = Système de fichiers crypté activé
|
||||
Text = Le système de fichiers crypté est maintenant disponible.
|
||||
}
|
||||
|
||||
UmountDone {
|
||||
Title = Système de fichiers crypté déactivé
|
||||
Text = Le système de fichiers crypté est maintenant sécurisé de toute forme d'accès.
|
||||
}
|
||||
|
||||
PowerOff {
|
||||
Title = Arrêt
|
||||
Text = La CryptoBox va maintenant s'éteindre. Dans quelques secondes vous pouvez l'éteindre (au cas où ceci ne se passe pas automatiquement).
|
||||
}
|
||||
|
||||
ReBoot {
|
||||
Title = Redémarrage
|
||||
Text = La CryptoBox est en train de redémarrer. Dans quelques secondes elle va à nouveau être disponible. Veuillez attendre - vous allez être redirigés quand le redémarrage est accomplie.
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ErrorMessage {
|
||||
|
||||
UnknownAction {
|
||||
Title = Action inconnue
|
||||
Text = Vous avez demandé une action indéfinie.
|
||||
}
|
||||
|
||||
NoSSL {
|
||||
Title = Connexion non cryptée
|
||||
Text = La CryptoBox accepte seulement des connexions cryptées (https), afin que le mot de passe ne soit pas visible pour des yeux curieux. La connexion cryptée va être établie dans quelques secondes.
|
||||
}
|
||||
|
||||
InitFailed {
|
||||
Title = Initialisation échouée
|
||||
Text = Veuillez envoyer les fichiers log (voir ci-dessus) aux développeurs de la CryptoBox (cryptobox@systemausfall.org).
|
||||
}
|
||||
|
||||
NoHardDisk {
|
||||
Title = Aucun disque dur
|
||||
Text = Aucun disque utilisable pour un système de fichier crypté a été trouvé. Veuillez vérifier que le BIOS a détecté le disque pendant le démarrage de l'ordinateur.
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
24
lang/language_specification.txt
Normal file
|
@ -0,0 +1,24 @@
|
|||
Some important notes regarding the language files:
|
||||
|
||||
1) language file informations
|
||||
|
||||
The toplevel attribute "Name" is mandatory and should represent the local name of
|
||||
the language (e.g.: English, German, French, ...).
|
||||
|
||||
|
||||
2) warning/success messages
|
||||
|
||||
Attributes:
|
||||
Title - title of the message
|
||||
Text - text of the message
|
||||
Link.Text - textual representation of a link
|
||||
Link.Abs - absolute URL e.g. http://cryptobox.org/trac
|
||||
Link.Prot - http|https
|
||||
Link.Rel - relative url (based on the cgi root)
|
||||
|
||||
All values are optional, but you should follow these rules:
|
||||
- at least one of "Title" and "Text" should be defined
|
||||
- if there are "Link" attributes, then you should also define "Link.Text"
|
||||
- "Link.Abs" can not be combined with "Link.Prot" or "Link.Rel"
|
||||
- "Link.Rel" and "Link.Prot" may be used together
|
||||
|
402
lang/si.hdf
|
@ -1,215 +1,193 @@
|
|||
Lang {
|
||||
Name = Slovenščina
|
||||
|
||||
Name = slovenščina
|
||||
|
||||
Status = $Id$
|
||||
|
||||
Title {
|
||||
Top = The CryptoBox
|
||||
Slogan = Privatnost v vsako vas!
|
||||
Init = CryptoBox zagon
|
||||
Mount = Aktivacija kriptiranih podatkov
|
||||
Umount = Deaktivacija kriptiranih podatkov
|
||||
Config = CryptoBox konfiguracija
|
||||
Log = CryptoBox dnevnik
|
||||
ShutDown = Ugasni
|
||||
Status = Stanje
|
||||
}
|
||||
|
||||
|
||||
Text {
|
||||
EnterCurrentCryptoPassword = Vpišite geslo:
|
||||
EnterNewCryptoPassword = Vpišite novo geslo:
|
||||
EnterSameCryptoPassword = Ponovite novo geslo:
|
||||
EnterCurrentAdminPassword = Vnesite trenutno obstoječe geslo administratorja/ke:
|
||||
EnterNewAdminPassword = Vnesite novo geslo administratorja/ke:
|
||||
EnterSameAdminPassword = Ponovite novo geslo administratorja/ke:
|
||||
InitWarning = Med incializacijo bodo VSI PODATKI z vašega trdega diska IZBRISANI!
|
||||
ConfirmInitHint = Vsled potrditve vaših dejanj vpišite naslednje besedilo:
|
||||
ConfirmInit = Da, zbirši vse podatke!
|
||||
PartitionInfo = trenutna porazdelitev trdega diska:
|
||||
IPAddress = IP CryptoBoxa:
|
||||
TimeOut = Čas preklica deaktivacije kriptiranega datotečnega sistema:(v minutah)
|
||||
EmptyLog = Dnevnik CryptoBoxa je prazen.
|
||||
SelectLanguage = Jezikovne nastavitve:
|
||||
RedirectNote = Kliknite če vaš iskalnik ne podpira avtomatične preusmeritve.
|
||||
ProjectHomePage = Spletna stran projekta
|
||||
ProjectNote = CryptoBox je projekt
|
||||
DoUmount = Deaktivacija kriptiranega datotečnega sistema
|
||||
DoMount = Aktivacija kriptiranega datotečnega sistema
|
||||
Configuration = Konfiguracija
|
||||
CryptoIsActive = Kriptirani podatki so dostopni.
|
||||
CryptoIsDown = Kriptirani podatki soso zaèiteni pred kakr nimkoli dostopom.
|
||||
}
|
||||
|
||||
|
||||
Button {
|
||||
DoInit = Zagon CryptoBoxa
|
||||
SaveConfig = Shrani konfiguracijo
|
||||
Update = Osveži
|
||||
Mount = Aktivacija kriptiranega datotečnega sistema
|
||||
Umount = Deaktivacija kriptiranega datotečnega sistema
|
||||
Config = Konfiguracija
|
||||
PowerOff = Ugasni
|
||||
ReBoot = Ponovni zagon
|
||||
Protocol = Dnevnik
|
||||
Documentation = Priročnik
|
||||
Status = Stanje
|
||||
}
|
||||
|
||||
|
||||
WarningMessage {
|
||||
InitNotConfirmed {
|
||||
Title = Potrditev ni uspela
|
||||
Text = Besedilo mora biti vpisano natanko kot je prikazano!
|
||||
}
|
||||
|
||||
EmptyCryptoPassword {
|
||||
Title = Nepravilno geslo
|
||||
Text = Geslo ne sme biti prazno!
|
||||
}
|
||||
|
||||
DifferentCryptoPasswords {
|
||||
Title = Gesli se ne ujemata!
|
||||
Text = Obe vnešeni gesli morata biti identični, v zagotovilo, da je vpisano željeno geslo.
|
||||
}
|
||||
|
||||
DifferentAdminPasswords {
|
||||
Title = Administracijski gesli se ne ujemata
|
||||
Text = Obe vnešeni gesli morata biti identični, v zagotovilo da je vpisano željeno geslo.
|
||||
}
|
||||
|
||||
WrongAdminPassword {
|
||||
Title = Napačno administracijsko geslo!
|
||||
Text = Vnešeno administracijsko geslo je nepravilno. Prosimo poskusite znova!
|
||||
}
|
||||
|
||||
MountFailed {
|
||||
Title = Aktivacija ni uspela
|
||||
Text = Kriptiran datotečni sistem se ni aktiviral.Po vsej verjetnosti je bilo geslo napačno.
|
||||
}
|
||||
|
||||
UmountFailed {
|
||||
Title = Deaktivacija ni uspela
|
||||
Text = Kriptiran datotečni sistem se ni aktiviral.Datoteke so morda v uporabi. Zaprite vse programe. (naprimer ta nadvse razširjen urejevalnik besedil). V primeru nuje ugasnite CryptoBox!
|
||||
}
|
||||
|
||||
NotInitialized {
|
||||
Title = Konfiguracija ni najdena
|
||||
Text = CryptoBox še ni bil konfiguriran.
|
||||
}
|
||||
|
||||
InitNotFinished {
|
||||
Title = Zagon še ni dovršen
|
||||
Text = Zagon bo dovršen v nekaj minutah. Po končanem zagonu bo ta možnost omogočena.
|
||||
}
|
||||
|
||||
IsMounted {
|
||||
Title = Že aktivno
|
||||
Text = Kriptiran datotečni sistem je že aktiviran.
|
||||
}
|
||||
|
||||
NotMounted {
|
||||
Title = Onemogočeno
|
||||
Text = Kriptiran datotečni sistem trenutno ni aktiven.
|
||||
}
|
||||
|
||||
AlreadyConfigured {
|
||||
Title = Konfiguracija uspela
|
||||
Text = CryptoBox je đe bil konfiguriran. Če ponovno zaženete bodo vsi podatki izbrisani!
|
||||
}
|
||||
|
||||
InvalidLanguage {
|
||||
Title = Nepravilna izbira jezika
|
||||
Text = Izbrani jezik ni na voljo!
|
||||
}
|
||||
|
||||
InvalidIP {
|
||||
Title = Napačen IP naslov
|
||||
Text = Izbran omrežni naslov ni veljaven!
|
||||
}
|
||||
|
||||
InvalidTimeOut {
|
||||
Title = Nepravilen čas preklica
|
||||
Text = Izbran čas preklica ni veljaven!
|
||||
}
|
||||
|
||||
ConfigTimeOutFailed {
|
||||
Title = Napaka med spremembo časa preklica
|
||||
Text = Časa preklica ne morete spremeniti!
|
||||
}
|
||||
|
||||
ConfigLanguageFailed {
|
||||
Title = Napaka med spremembo jezikovnih nastavitev
|
||||
Text = Spreminjanje jezikovnih nastavitev ni mogoče.
|
||||
}
|
||||
|
||||
ConfigIPFailed {
|
||||
Title = Napaka med spreminjanjem omrežnega naslova.
|
||||
Text = Spreminjanje omrežnega naslova ni mogoče.
|
||||
}
|
||||
|
||||
IPAddressChanged {
|
||||
Title = Sprememba omrežnega naslova
|
||||
Text = Omrežni naslov je spremenjen. V nekaj sekundah boste preusmerjeni na nov naslov.
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
SuccessMessage {
|
||||
InitRunning {
|
||||
Title = Zagon poteka
|
||||
Text = Zagon bo dokončan v ozadju.
|
||||
}
|
||||
|
||||
ConfigSaved {
|
||||
Title = Konfiguracija spravljena
|
||||
Text = Nove nastavitve so sprejete.
|
||||
}
|
||||
|
||||
MountDone {
|
||||
Title = Kriptiran datotečni sistem aktiviran
|
||||
Text = Kriptiran datotečni sistem je na voljo.
|
||||
}
|
||||
|
||||
UmountDone {
|
||||
Title = Kriptiran datotečni sistem deaktiviran.
|
||||
Text = Kriptiran datotečni sistem je varovan pred vstopom.
|
||||
}
|
||||
|
||||
PowerOff {
|
||||
Title = Ugasni
|
||||
Text = CryptoBox se zaustavlja. V nekaj sekundah ga lahko izklopite.(v kolikor se to ne zgodi avtomatično).
|
||||
}
|
||||
|
||||
ReBoot {
|
||||
Title = Ponovni zagon
|
||||
Text = CryptoBox se zaganja. V nekaj sekundah bo zopet na voljo.
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ErrorMessage {
|
||||
|
||||
UnknownAction {
|
||||
Title = Neznan zahtevek
|
||||
Text = Podali ste nedefiniran zahtevek.
|
||||
}
|
||||
|
||||
NoSSL {
|
||||
Title = Nekriptirana povezava
|
||||
Text = CryptoBox sprejme le kriptirane povezave (https), da je geslo zaščiteno pred radovednimi očmi. V nekaj sekundah bo kriptirana povezava vzpostavljena.
|
||||
}
|
||||
|
||||
InitFailed {
|
||||
Title = Zagon ni uspel
|
||||
Text = Prosim pošljite dnevnik (poglejte zgoraj) razvijalcem CryptoBoxa (cryptobox@systemausfall.org).
|
||||
}
|
||||
|
||||
NoHardDisk {
|
||||
Title = Ni trdega diska
|
||||
Text = Primeren trdi disk za shranjenje kriptiranega datotečnega sistema ni zaznan. Poskrbite da bo med zagonom BIOS zaznal trdi disk.
|
||||
}
|
||||
}
|
||||
Status = $Id$
|
||||
|
||||
Title {
|
||||
Top = The CryptoBox
|
||||
Slogan = Privatnost v vsako vas!
|
||||
Init = CryptoBox zagon
|
||||
Mount = Aktivacija kriptiranih podatkov
|
||||
Umount = Deaktivacija kriptiranih podatkov
|
||||
Config = CryptoBox konfiguracija
|
||||
Log = CryptoBox dnevnik
|
||||
ShutDown = Ugasni
|
||||
Status = Stanje
|
||||
}
|
||||
|
||||
|
||||
Text {
|
||||
EnterCurrentCryptoPassword = Vpišite geslo:
|
||||
EnterNewCryptoPassword = Vpišite novo geslo:
|
||||
EnterSameCryptoPassword = Ponovite novo geslo:
|
||||
EnterCurrentAdminPassword = Vnesite trenutno obstoječe geslo administratorja/ke:
|
||||
EnterNewAdminPassword = Vnesite novo geslo administratorja/ke:
|
||||
EnterSameAdminPassword = Ponovite novo geslo administratorja/ke:
|
||||
InitWarning = Med incializacijo bodo VSI PODATKI z vašega trdega diska IZBRISANI!
|
||||
ConfirmInitHint = Vsled potrditve vaših dejanj vpišite naslednje besedilo:
|
||||
ConfirmInit = Da, zbirši vse podatke!
|
||||
PartitionInfo = trenutna porazdelitev trdega diska:
|
||||
IPAddress = IP CryptoBoxa:
|
||||
TimeOut = Čas preklica deaktivacije kriptiranega datotečnega sistema:(v minutah)
|
||||
EmptyLog = Dnevnik CryptoBoxa je prazen.
|
||||
SelectLanguage = Jezikovne nastavitve:
|
||||
RedirectNote = Kliknite če vaš iskalnik ne podpira avtomatične preusmeritve.
|
||||
ProjectHomePage = Spletna stran projekta
|
||||
ProjectNote = CryptoBox je projekt
|
||||
DoUmount = Deaktivacija kriptiranega datotečnega sistema
|
||||
DoMount = Aktivacija kriptiranega datotečnega sistema
|
||||
Configuration = Konfiguracija
|
||||
CryptoIsActive = Kriptirani podatki so dostopni.
|
||||
CryptoIsDown = Kriptirani podatki soso zaèiteni pred kakr nimkoli dostopom.
|
||||
}
|
||||
|
||||
|
||||
Button {
|
||||
DoInit = Zagon CryptoBoxa
|
||||
SaveConfig = Shrani konfiguracijo
|
||||
Update = Osveži
|
||||
Mount = Aktivacija kriptiranega datotečnega sistema
|
||||
Umount = Deaktivacija kriptiranega datotečnega sistema
|
||||
Config = Konfiguracija
|
||||
PowerOff = Ugasni
|
||||
ReBoot = Ponovni zagon
|
||||
Protocol = Dnevnik
|
||||
Documentation = Priročnik
|
||||
Status = Stanje
|
||||
System = System
|
||||
}
|
||||
|
||||
|
||||
WarningMessage {
|
||||
InitNotConfirmed {
|
||||
Title = Potrditev ni uspela
|
||||
Text = Besedilo mora biti vpisano natanko kot je prikazano!
|
||||
}
|
||||
|
||||
EmptyCryptoPassword {
|
||||
Title = Nepravilno geslo
|
||||
Text = Geslo ne sme biti prazno!
|
||||
}
|
||||
|
||||
DifferentCryptoPasswords {
|
||||
Title = Gesli se ne ujemata!
|
||||
Text = Obe vnešeni gesli morata biti identični, v zagotovilo, da je vpisano željeno geslo.
|
||||
}
|
||||
|
||||
DifferentAdminPasswords {
|
||||
Title = Administracijski gesli se ne ujemata
|
||||
Text = Obe vnešeni gesli morata biti identični, v zagotovilo da je vpisano željeno geslo.
|
||||
}
|
||||
|
||||
WrongAdminPassword {
|
||||
Title = Napačno administracijsko geslo!
|
||||
Text = Vnešeno administracijsko geslo je nepravilno. Prosimo poskusite znova!
|
||||
}
|
||||
|
||||
MountFailed {
|
||||
Title = Aktivacija ni uspela
|
||||
Text = Kriptiran datotečni sistem se ni aktiviral.Po vsej verjetnosti je bilo geslo napačno.
|
||||
}
|
||||
|
||||
UmountFailed {
|
||||
Title = Deaktivacija ni uspela
|
||||
Text = Kriptiran datotečni sistem se ni aktiviral.Datoteke so morda v uporabi. Zaprite vse programe. (naprimer ta nadvse razširjen urejevalnik besedil). V primeru nuje ugasnite CryptoBox!
|
||||
}
|
||||
|
||||
NotInitialized {
|
||||
Title = Konfiguracija ni najdena
|
||||
Text = CryptoBox še ni bil konfiguriran.
|
||||
}
|
||||
|
||||
InitNotFinished {
|
||||
Title = Zagon še ni dovršen
|
||||
Text = Zagon bo dovršen v nekaj minutah. Po končanem zagonu bo ta možnost omogočena.
|
||||
}
|
||||
|
||||
IsMounted {
|
||||
Title = Že aktivno
|
||||
Text = Kriptiran datotečni sistem je že aktiviran.
|
||||
}
|
||||
|
||||
NotMounted {
|
||||
Title = Onemogočeno
|
||||
Text = Kriptiran datotečni sistem trenutno ni aktiven.
|
||||
}
|
||||
|
||||
AlreadyConfigured {
|
||||
Title = Konfiguracija uspela
|
||||
Text = CryptoBox je đe bil konfiguriran. Če ponovno zaženete bodo vsi podatki izbrisani!
|
||||
}
|
||||
|
||||
InvalidLanguage {
|
||||
Title = Nepravilna izbira jezika
|
||||
Text = Izbrani jezik ni na voljo!
|
||||
}
|
||||
|
||||
ConfigLanguageFailed {
|
||||
Title = Napaka med spremembo jezikovnih nastavitev
|
||||
Text = Spreminjanje jezikovnih nastavitev ni mogoče.
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
SuccessMessage {
|
||||
InitRunning {
|
||||
Title = Zagon poteka
|
||||
Text = Zagon bo dokončan v ozadju.
|
||||
}
|
||||
|
||||
ConfigSaved {
|
||||
Title = Konfiguracija spravljena
|
||||
Text = Nove nastavitve so sprejete.
|
||||
}
|
||||
|
||||
MountDone {
|
||||
Title = Kriptiran datotečni sistem aktiviran
|
||||
Text = Kriptiran datotečni sistem je na voljo.
|
||||
}
|
||||
|
||||
UmountDone {
|
||||
Title = Kriptiran datotečni sistem deaktiviran.
|
||||
Text = Kriptiran datotečni sistem je varovan pred vstopom.
|
||||
}
|
||||
|
||||
PowerOff {
|
||||
Title = Ugasni
|
||||
Text = CryptoBox se zaustavlja. V nekaj sekundah ga lahko izklopite.(v kolikor se to ne zgodi avtomatično).
|
||||
}
|
||||
|
||||
ReBoot {
|
||||
Title = Ponovni zagon
|
||||
Text = CryptoBox se zaganja. V nekaj sekundah bo zopet na voljo.
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ErrorMessage {
|
||||
|
||||
UnknownAction {
|
||||
Title = Neznan zahtevek
|
||||
Text = Podali ste nedefiniran zahtevek.
|
||||
}
|
||||
|
||||
NoSSL {
|
||||
Title = Nekriptirana povezava
|
||||
Text = CryptoBox sprejme le kriptirane povezave (https), da je geslo zaščiteno pred radovednimi očmi. V nekaj sekundah bo kriptirana povezava vzpostavljena.
|
||||
}
|
||||
|
||||
InitFailed {
|
||||
Title = Zagon ni uspel
|
||||
Text = Prosim pošljite dnevnik (poglejte zgoraj) razvijalcem CryptoBoxa (cryptobox@systemausfall.org).
|
||||
}
|
||||
|
||||
NoHardDisk {
|
||||
Title = Ni trdega diska
|
||||
Text = Primeren trdi disk za shranjenje kriptiranega datotečnega sistema ni zaznan. Poskrbite da bo med zagonom BIOS zaznal trdi disk.
|
||||
}
|
||||
|
||||
NoDocumentation {
|
||||
Title = No documentation
|
||||
Text = There is no documentation available!
|
||||
}
|
||||
}
|
||||
|
||||
|
|
69
plugins/date/date.py
Normal file
|
@ -0,0 +1,69 @@
|
|||
import CryptoBoxPlugin
|
||||
|
||||
|
||||
class date(CryptoBoxPlugin.CryptoBoxPlugin):
|
||||
|
||||
pluginCapabilities = [ "system" ]
|
||||
requestAuth = False
|
||||
rank = 10
|
||||
|
||||
def doAction(self, store=None, year=None, month=None, day=None, hour=None, minute=None):
|
||||
import datetime
|
||||
if store:
|
||||
try:
|
||||
year, month, day = int(year), int(month), int(day)
|
||||
hour, minute = int(hour), int(minute)
|
||||
new_date = datetime.datetime(year, month, day, hour, minute)
|
||||
except ValueError:
|
||||
self.hdf["Data.Warning"] = "Plugins.date.InvalidDate"
|
||||
self.__prepareFormData()
|
||||
return "form_date"
|
||||
date = "%02d%02d%02d%02d%d" % (month, day, hour, minute, year)
|
||||
if self.__setDate(date):
|
||||
self.cbox.log.info("changed date to: %s" % date)
|
||||
self.hdf["Data.Success"] = "Plugins.date.DateChanged"
|
||||
return None
|
||||
else:
|
||||
## a failure should usually be an invalid date (we do not check it really)
|
||||
self.cbox.log.info("failed to set date: %s" % date)
|
||||
self.hdf["Data.Warning"] = "Plugins.date.InvalidDate"
|
||||
self.__prepareFormData()
|
||||
return "form_date"
|
||||
else:
|
||||
self.__prepareFormData()
|
||||
return "form_date"
|
||||
|
||||
|
||||
def getStatus(self):
|
||||
now = self.__getCurrentDate()
|
||||
return "%d/%d/%d/%d/%d/%d" % (now.year, now.month, now.day, now.hour, now.minute, now.second)
|
||||
|
||||
|
||||
def __prepareFormData(self):
|
||||
date = self.__getCurrentDate()
|
||||
self.hdf[self.hdf_prefix + "year"] = date.year
|
||||
self.hdf[self.hdf_prefix + "month"] = date.month
|
||||
self.hdf[self.hdf_prefix + "day"] = date.day
|
||||
self.hdf[self.hdf_prefix + "hour"] = date.hour
|
||||
self.hdf[self.hdf_prefix + "minute"] = date.minute
|
||||
|
||||
|
||||
def __getCurrentDate(self):
|
||||
import datetime
|
||||
return datetime.datetime(2000,1,1).now()
|
||||
|
||||
|
||||
def __setDate(self, date):
|
||||
import subprocess
|
||||
import os
|
||||
proc = subprocess.Popen(
|
||||
shell = False,
|
||||
args = [
|
||||
self.cbox.prefs["Programs"]["super"],
|
||||
self.cbox.prefs["Programs"]["CryptoBoxRootActions"],
|
||||
"plugin",
|
||||
os.path.join(self.pluginDir, "root_action.py"),
|
||||
date])
|
||||
proc.wait()
|
||||
return proc.returncode == 0
|
||||
|
44
plugins/date/form_date.cs
Normal file
|
@ -0,0 +1,44 @@
|
|||
<?cs # $Id$ ?>
|
||||
|
||||
<h1><?cs var:html_escape(Lang.Plugins.date.Title.ConfigDate) ?></h1>
|
||||
|
||||
<?cs call:handle_messages() ?>
|
||||
|
||||
<?cs call:print_form_header("set_date", "date") ?>
|
||||
|
||||
<p><label for="date"><?cs var:html_escape(Lang.Plugins.date.Text.Date) ?>: </label><br/>
|
||||
<select id="date" name="day" tabindex="1" size="0"><?cs
|
||||
loop: x = #1, #31, #1 ?>
|
||||
<?cs if:x == Data.Plugins.date.day ?><option selected="selected"><?cs
|
||||
else ?><option><?cs /if ?><?cs var:x ?></option><?cs /loop ?>
|
||||
</select>
|
||||
<select name="month" tabindex="2" size="0"><?cs
|
||||
loop: x = #1, #12, #1 ?>
|
||||
<?cs if:x == Data.Plugins.date.month ?><option selected="selected" <?cs
|
||||
else ?><option <?cs /if ?>value="<?cs var:x ?>"><?cs
|
||||
var:html_escape(Lang.Plugins.date.Text.Months[x]) ?></option><?cs /loop ?>
|
||||
</select>
|
||||
<select name="year" tabindex="3" size="0"><?cs
|
||||
loop: x = #2006, #2025, #1 ?>
|
||||
<?cs if:x == Data.Plugins.date.year ?><option selected="selected"><?cs
|
||||
else ?><option><?cs /if ?><?cs var:x ?></option><?cs /loop ?>
|
||||
</select></p>
|
||||
|
||||
<p><label for="time"><?cs var:html_escape(Lang.Plugins.date.Text.Time) ?>: </label><br/>
|
||||
<select id="time" name="hour" tabindex="4" size="0"><?cs
|
||||
loop: x = #0, #23, #1 ?>
|
||||
<?cs if:x == Data.Plugins.date.hour ?><option selected="selected"><?cs
|
||||
else ?><option><?cs /if ?><?cs if:x<10 ?>0<?cs /if ?><?cs var:x ?></option><?cs /loop ?>
|
||||
</select> :
|
||||
<select name="minute" tabindex="5" size="0"><?cs
|
||||
loop: x = #0, #59, #1 ?>
|
||||
<?cs if:x == Data.Plugins.date.minute ?><option selected="selected"><?cs
|
||||
else ?><option><?cs /if ?><?cs if:x<10 ?>0<?cs /if ?><?cs var:x ?></option><?cs /loop ?>
|
||||
</select></p>
|
||||
|
||||
<input type="hidden" name="store" value="yes" />
|
||||
|
||||
<button type="submit" tabindex="6"><?cs var:html_escape(Lang.Plugins.date.Button.ConfigDate) ?></button>
|
||||
|
||||
</form>
|
||||
|
35
plugins/date/lang/en.hdf
Normal file
|
@ -0,0 +1,35 @@
|
|||
Name = Change date and time
|
||||
Link = Set date/time
|
||||
|
||||
Title.ConfigDate = Date and time setting
|
||||
|
||||
Button.ConfigDate = Set date and time
|
||||
|
||||
Text.Date = Date
|
||||
Text.Time = Time
|
||||
Text.Months {
|
||||
1 = January
|
||||
2 = February
|
||||
3 = March
|
||||
4 = April
|
||||
5 = May
|
||||
6 = June
|
||||
7 = July
|
||||
8 = August
|
||||
9 = September
|
||||
10 = October
|
||||
11 = November
|
||||
12 = December
|
||||
}
|
||||
|
||||
SuccessMessage.DateChanged {
|
||||
Title = Date changed
|
||||
Text = The date was changed successfully.
|
||||
}
|
||||
|
||||
WarningMessage {
|
||||
InvalidDate {
|
||||
Title = Invalid value
|
||||
Text = An invalid value for date or time was supplied. Please try again.
|
||||
}
|
||||
}
|
BIN
plugins/date/plugin_icon.png
Normal file
After Width: | Height: | Size: 3.2 KiB |
36
plugins/date/root_action.py
Executable file
|
@ -0,0 +1,36 @@
|
|||
#!/usr/bin/env python2.4
|
||||
|
||||
## necessary: otherwise CryptoBoxRootActions.py will refuse to execute this script
|
||||
PLUGIN_TYPE = "cryptobox"
|
||||
|
||||
DATE_BIN = "/bin/date"
|
||||
|
||||
import subprocess
|
||||
import re
|
||||
import sys
|
||||
import os
|
||||
|
||||
if __name__ == "__main__":
|
||||
args = sys.argv[1:]
|
||||
|
||||
self_bin = sys.argv[0]
|
||||
|
||||
if len(args) > 1:
|
||||
sys.stderr.write("%s: too many arguments (%s)\n" % (self_bin, args))
|
||||
sys.exit(1)
|
||||
|
||||
if len(args) == 0:
|
||||
sys.stderr.write("%s: no argument supplied\n" % self_bin)
|
||||
sys.exit(1)
|
||||
|
||||
if re.search(u'\D', args[0]):
|
||||
sys.stderr.write("%s: illegal argument (%s)\n" % (self_bin, args[0]))
|
||||
sys.exit(1)
|
||||
|
||||
proc = subprocess.Popen(
|
||||
shell = False,
|
||||
stdout = subprocess.PIPE,
|
||||
args = [DATE_BIN, args[0]])
|
||||
proc.wait()
|
||||
sys.exit(proc.returncode)
|
||||
|
60
plugins/date/unittests.py
Normal file
|
@ -0,0 +1,60 @@
|
|||
import WebInterfaceTestClass
|
||||
|
||||
class unittests(WebInterfaceTestClass.WebInterfaceTestClass):
|
||||
|
||||
def test_get_date(self):
|
||||
date = self._getCurrentDate()
|
||||
|
||||
|
||||
def test_change_date(self):
|
||||
now = self._getCurrentDate()
|
||||
## copy current time
|
||||
new_date = dict(now)
|
||||
## move three minutes forward (more is not nice because of screensavers)
|
||||
new_date["minute"] = (now["minute"] + 3) % 60
|
||||
## in case of minute-overflow we also have to move the hour a little bit forward
|
||||
new_date["hour"] = now["hour"] + ((now["minute"] + 3) / 60)
|
||||
## move forward ...
|
||||
self._setDate(new_date)
|
||||
self.assertEquals(new_date, self._getCurrentDate())
|
||||
## ... and backward
|
||||
self._setDate(now)
|
||||
self.assertEquals(now, self._getCurrentDate())
|
||||
|
||||
|
||||
def _getCurrentDate(self):
|
||||
date_url = self.URL + "date"
|
||||
self.register_auth(date_url)
|
||||
self.cmd.go(date_url)
|
||||
self.cmd.find("Data.Status.Plugins.date=([0-9]+/[0-9]+/[0-9]+/[0-9]+/[0-9]+/[0-9]+)$", "m")
|
||||
dateNumbers = self.locals["__match__"].split("/")
|
||||
self.assertEquals(len(dateNumbers), 6)
|
||||
## we ignore seconds
|
||||
dateField = {
|
||||
"year" : int(dateNumbers[0]),
|
||||
"month" : int(dateNumbers[1]),
|
||||
"day" : int(dateNumbers[2]),
|
||||
"hour" : int(dateNumbers[3]),
|
||||
"minute" : int(dateNumbers[4])}
|
||||
return dateField
|
||||
|
||||
|
||||
def _setDate(self, date):
|
||||
"""for now we have to use this function instead of the one below"""
|
||||
date_url = self.URL + "date?store=1&year=%d&month=%d&day=%d&hour=%d&minute=%d" % (date["year"], date["month"], date["day"], date["hour"], date["minute"])
|
||||
self.register_auth(date_url)
|
||||
self.cmd.go(date_url)
|
||||
|
||||
|
||||
def _setDateBroken(self, date):
|
||||
"""this should work, but the parsing of twill seems to be broken"""
|
||||
date_url = self.URL + "date"
|
||||
self.register_auth(date_url)
|
||||
self.cmd.go(date_url)
|
||||
self.cmd.formvalue("set_date", "year", str(date["year"]))
|
||||
self.cmd.formvalue("set_date", "month", str(date["month"]))
|
||||
self.cmd.formvalue("set_date", "day", str(date["day"]))
|
||||
self.cmd.formvalue("set_date", "hour", str(date["hour"]))
|
||||
self.cmd.formvalue("set_date", "minute", str(date["minute"]))
|
||||
self.cmd.submit()
|
||||
|
17
plugins/disks/disks.cs
Normal file
|
@ -0,0 +1,17 @@
|
|||
<?cs # $Id$ ?>
|
||||
|
||||
<h1><?cs var:html_escape(Lang.Plugins.disks.Title.Disks) ?></h1>
|
||||
|
||||
<?cs call:handle_messages() ?>
|
||||
|
||||
<?cs # TODO: add no-disks-available warning ?>
|
||||
|
||||
<?cs if:subcount(Data.Disks) == 0 ?>
|
||||
<?cs call:hint(Lang.Plugins.disks.Text.NoDisksAvailable) ?>
|
||||
<?cs else ?>
|
||||
<?cs # we use "loop" instead of "each" to keep the order of the disks ?>
|
||||
<?cs loop: index = #0, subcount(Data.Disks)-1, #1 ?>
|
||||
<?cs call:show_volume(Data.Disks[index]) ?>
|
||||
<?cs /loop ?>
|
||||
<?cs /if ?>
|
||||
|
17
plugins/disks/disks.py
Normal file
|
@ -0,0 +1,17 @@
|
|||
import CryptoBoxPlugin
|
||||
|
||||
class disks(CryptoBoxPlugin.CryptoBoxPlugin):
|
||||
|
||||
pluginCapabilities = [ "menu" ]
|
||||
requestAuth = False
|
||||
rank = 10
|
||||
|
||||
def doAction(self):
|
||||
self.cbox.reReadContainerList()
|
||||
return "disks"
|
||||
|
||||
|
||||
def getStatus(self):
|
||||
return "TODO"
|
||||
|
||||
|
6
plugins/disks/lang/de.hdf
Normal file
|
@ -0,0 +1,6 @@
|
|||
Name = Datenträger-Übersicht
|
||||
Link = Datenträger
|
||||
|
||||
Title.Disks = Verfügbare Datenträger
|
||||
|
||||
Text.NoDisksAvailable = Es sind keine Datenträger verfügbar!
|
6
plugins/disks/lang/en.hdf
Normal file
|
@ -0,0 +1,6 @@
|
|||
Name = Disk overview
|
||||
Link = Disks
|
||||
|
||||
Title.Disks = Available disks
|
||||
|
||||
Text.NoDisksAvailable = No available disks were found!
|
BIN
plugins/disks/plugin_icon.png
Normal file
After Width: | Height: | Size: 6.1 KiB |
9
plugins/disks/unittests.py
Normal file
|
@ -0,0 +1,9 @@
|
|||
import WebInterfaceTestClass
|
||||
|
||||
class unittests(WebInterfaceTestClass.WebInterfaceTestClass):
|
||||
|
||||
def test_read_form(self):
|
||||
'''display all devices'''
|
||||
self.cmd.go(self.URL + "disks?weblang=en")
|
||||
self.cmd.find("Disks")
|
||||
|
95
plugins/format_fs/format_fs.py
Normal file
|
@ -0,0 +1,95 @@
|
|||
import CryptoBoxPlugin
|
||||
from CryptoBoxExceptions import *
|
||||
|
||||
class format_fs(CryptoBoxPlugin.CryptoBoxPlugin):
|
||||
|
||||
pluginCapabilities = [ "volume" ]
|
||||
requestAuth = True
|
||||
rank = 60
|
||||
|
||||
## map filesystem types to the appropriate arguments for 'mkfs'
|
||||
fsTypes = {
|
||||
"windows": "vfat",
|
||||
"linux": "ext3" }
|
||||
|
||||
containerTypes = [ "luks", "plain" ]
|
||||
|
||||
|
||||
def doAction(self, store=None, fs_type="windows", container_type="luks", crypto_password=None, crypto_password2=None, confirm=None):
|
||||
if not fs_type in self.fsTypes.keys():
|
||||
self.cbox.info
|
||||
return "format_volume"
|
||||
self.hdf[self.hdf_prefix + "fs_type"] = fs_type
|
||||
self.hdf[self.hdf_prefix + "container_type"] = container_type
|
||||
for t in self.fsTypes.keys():
|
||||
self.hdf[self.hdf_prefix + "fs_types." + t] = t
|
||||
if store == "step1":
|
||||
if not confirm:
|
||||
self.cbox.log.warn("missing confirmation for formatting of filesystem: %s" % self.device)
|
||||
self.hdf["Data.Warning"] = "Plugins.format_fs.FormatNotConfirmed"
|
||||
return "volume_format"
|
||||
if container_type == "luks":
|
||||
return "volume_format_luks"
|
||||
elif container_type == "plain":
|
||||
return self.__format_plain(fs_type)
|
||||
elif store == "step2":
|
||||
if container_type == "luks":
|
||||
return self.__format_luks(fs_type, crypto_password, crypto_password2)
|
||||
else:
|
||||
self.cbox.log.info("invalid input value for 'container_type': %s" % container_type)
|
||||
return "volume_format"
|
||||
elif store:
|
||||
self.cbox.log.info("invalid input value for 'store': %s" % store)
|
||||
return "volume_format"
|
||||
else:
|
||||
return "volume_format"
|
||||
|
||||
|
||||
def getStatus(self):
|
||||
return "no status"
|
||||
|
||||
|
||||
def __format_plain(self, fsType):
|
||||
try:
|
||||
container = self.cbox.getContainer(self.device)
|
||||
container.create(container.Types["plain"])
|
||||
except CBVolumeIsActive:
|
||||
self.hdf["Data.Warning"] = "VolumeMayNotBeMounted"
|
||||
self.cbox.log.info("initialization is not possible as long as the device (%s) is mounted" % self.device)
|
||||
return None
|
||||
except CBContainerError, errMsg:
|
||||
self.hdf["Data.Warning"] = "Plugins.format_fs.FormatFailed"
|
||||
self.cbox.log.warn("initialization of device '%s' failed" % self.device)
|
||||
self.cbox.log.warn("reason: %s" % errMsg)
|
||||
return "volume_format"
|
||||
else:
|
||||
self.cbox.log.info("successfully initialized device '%s'" % self.device)
|
||||
return None
|
||||
|
||||
|
||||
def __format_luks(self, fsType, pw, pw2):
|
||||
if not pw:
|
||||
self.hdf["Data.Warning"] = "EmptyPassword"
|
||||
self.cbox.log.warn("no crypto password was supplied for initialization of device '%s'" % self.device)
|
||||
return "volume_format"
|
||||
if pw != pw2:
|
||||
self.hdf["Data.Warning"] = "DifferentPasswords"
|
||||
self.cbox.log.warn("the crypto password was not repeated correctly for initialization of device '%s'" % self.device)
|
||||
return "volume_format"
|
||||
container = self.cbox.getContainer(self.device)
|
||||
try:
|
||||
container.create(container.Types["luks"], pw)
|
||||
except CBVolumeIsActive:
|
||||
self.hdf["Data.Warning"] = "VolumeMayNotBeMounted"
|
||||
self.cbox.log.info("initialization is not possible as long as the device (%s) is mounted" % self.device)
|
||||
return None
|
||||
except CBContainerError, errMsg:
|
||||
self.hdf["Data.Warning"] = "Plugins.format_fs.FormatFailed"
|
||||
self.cbox.log.warn("initialization of device '%s' failed" % self.device)
|
||||
self.cbox.log.warn("reason: %s" % errMsg)
|
||||
return "volume_format"
|
||||
else:
|
||||
self.hdf["Data.Success"] = "Plugins.format_fs.FormatSuccess"
|
||||
self.cbox.log.info("successfully initialized device '%s'" % self.device)
|
||||
return None
|
||||
|
49
plugins/format_fs/lang/en.hdf
Normal file
|
@ -0,0 +1,49 @@
|
|||
Name = Create filesystems
|
||||
Link = Format
|
||||
|
||||
Title.Format = Initializing filesystem
|
||||
|
||||
Button.Format = Initialize filesystem
|
||||
|
||||
Text {
|
||||
Confirm = Yes, I know what I am doing!
|
||||
FSType = Filesystem type
|
||||
IsEncrypted = Encryption
|
||||
Yes = Yes
|
||||
No = No
|
||||
}
|
||||
|
||||
AdviceMessage {
|
||||
FormatWarning {
|
||||
Text = All data of the selected filesystem will get lost!
|
||||
}
|
||||
|
||||
UnmountBeforeInit {
|
||||
Text = You must deactivate this volume before you may initialize it.
|
||||
Link.Text = Deactive volume now
|
||||
Link.Rel = volume_mount
|
||||
Link.Attr1.name = action
|
||||
Link.Attr1.value = umount
|
||||
Link.Attr2.name = redirect
|
||||
Link.Attr2.value = format_fs
|
||||
}
|
||||
}
|
||||
|
||||
SuccessMessage {
|
||||
FormatSuccess {
|
||||
Title = Formatting successful
|
||||
Text = The selected filesystem was successfully formatted.
|
||||
}
|
||||
}
|
||||
|
||||
WarningMessage {
|
||||
FormatNotConfirmed {
|
||||
Title = Confirmation missing
|
||||
Text = You did not confirm this action by activating the checkbox.
|
||||
}
|
||||
|
||||
FormatFailed {
|
||||
Title = Formatting failed
|
||||
Text = Formatting of the selected filesystem failed for unknown reasons - sorry!
|
||||
}
|
||||
}
|
BIN
plugins/format_fs/plugin_icon.png
Normal file
After Width: | Height: | Size: 6.2 KiB |
10
plugins/format_fs/unittests.py
Normal file
|
@ -0,0 +1,10 @@
|
|||
import WebInterfaceTestClass
|
||||
|
||||
class unittests(WebInterfaceTestClass.WebInterfaceTestClass):
|
||||
|
||||
def test_read_form(self):
|
||||
url = self.URL + "format_fs?weblang=en&device=%2Fdev%2Floop1"
|
||||
self.register_auth(url)
|
||||
self.cmd.go(url)
|
||||
self.cmd.find('Initializing filesystem')
|
||||
|
37
plugins/format_fs/volume_format.cs
Normal file
|
@ -0,0 +1,37 @@
|
|||
<?cs # $Id$ ?>
|
||||
|
||||
<?cs include:Settings.TemplateDir + "/show_volume_header.cs" ?>
|
||||
|
||||
<h2><?cs var:html_escape(Lang.Plugins.format_fs.Title.Format) ?></h2>
|
||||
|
||||
<?cs call:handle_messages() ?>
|
||||
|
||||
<?cs if:Data.CurrentDisk.active ?>
|
||||
<?cs call:hint("Plugins.format_fs.UnmountBeforeInit") ?>
|
||||
<?cs else ?>
|
||||
|
||||
<?cs call:hint("Plugins.format_fs.FormatWarning") ?>
|
||||
|
||||
<?cs call:print_form_header("set_type", "format_fs") ?>
|
||||
<p><label for="fs_type"><?cs var:html_escape(Lang.Plugins.format_fs.Text.FSType)
|
||||
?>: </label><select name="fs_type" id="fs_type" size="0">
|
||||
<?cs each:x = Data.Plugins.format_fs.fs_types ?>
|
||||
<option <?cs if:x == "windows" ?>selected="selected"<?cs /if ?>><?cs var:html_escape(x) ?></option><?cs /each ?>
|
||||
</select></p>
|
||||
|
||||
<p><label for="container_type"><?cs var:html_escape(Lang.Plugins.format_fs.Text.IsEncrypted)
|
||||
?>: </label><select name="container_type" id="container_type">
|
||||
<option value="luks" <?cs if:Data.Plugins.format_fs.container_type != "plain" ?>selected="selected"<?cs /if ?>><?cs var:html_escape(Lang.Plugins.format_fs.Text.Yes) ?></option>
|
||||
<option value="plain" <?cs if:Data.Plugins.format_fs.container_type == "plain" ?>selected="selected"<?cs /if ?>><?cs var:html_escape(Lang.Plugins.format_fs.Text.No) ?></option>
|
||||
</select></p>
|
||||
|
||||
<p><input type="checkbox" name="confirm" value="1" id="confirm" /><label for="confirm"><?cs var:html_escape(Lang.Plugins.format_fs.Text.Confirm) ?></label></p>
|
||||
|
||||
<input type="hidden" name="device" value="<?cs var:Data.CurrentDisk.device ?>" />
|
||||
<input type="hidden" name="store" value="step1" />
|
||||
<button type="submit"><?cs var:html_escape(Lang.Plugins.format_fs.Button.Format) ?></button>
|
||||
</form>
|
||||
|
||||
<?cs /if ?>
|
||||
|
||||
<?cs include:Settings.TemplateDir + "/show_volume_footer.cs" ?>
|
32
plugins/format_fs/volume_format_luks.cs
Normal file
|
@ -0,0 +1,32 @@
|
|||
<?cs # $Id$ ?>
|
||||
|
||||
<?cs include:Settings.TemplateDir + "/show_volume_header.cs" ?>
|
||||
|
||||
<h2><?cs var:html_escape(Lang.Plugins.format_fs.Title.Format) ?></h2>
|
||||
|
||||
<?cs call:handle_messages() ?>
|
||||
|
||||
<?cs if:Data.CurrentDisk.active ?>
|
||||
<?cs call:hint("Plugins.format_fs.UnmountBeforeInit") ?>
|
||||
<?cs else ?>
|
||||
|
||||
<?cs call:hint("Plugins.format_fs.FormatWarning") ?>
|
||||
|
||||
<?cs call:print_form_header("set_luks", "format_fs") ?>
|
||||
<p><?cs var:html_escape(Lang.Plugins.format_fs.Text.FSType) ?>: <?cs var:html_escape(Data.Plugins.format_fs.fs_type) ?></p>
|
||||
<p><?cs var:html_escape(Lang.Plugins.format_fs.Text.IsEncrypted) ?>: <?cs if:Data.Plugins.format_fs.container_type == "luks" ?><?cs
|
||||
var:html_escape(Lang.Plugins.format_fs.Text.Yes) ?><?cs else ?><?cs
|
||||
var:html_escape(Lang.Plugins.format_fs.Text.No) ?><?cs /if ?></p>
|
||||
|
||||
<p><label for="crypto_password"><?cs var:html_escape(Lang.Text.EnterNewPassword) ?>: </label> <input type="password" id="crypto_password" name="crypto_password" /></p>
|
||||
<p><label for="crypto_password2"><?cs var:html_escape(Lang.Text.EnterSamePassword) ?>: </label> <input type="password" id="crypto_password2" name="crypto_password2" /></p>
|
||||
<input type="hidden" name="device" value="<?cs var:Data.CurrentDisk.device ?>" />
|
||||
<input type="hidden" name="fs_type" value="<?cs var:html_escape(Data.Plugins.format_fs.fs_type) ?>" />
|
||||
<input type="hidden" name="container_type" value="<?cs var:html_escape(Data.Plugins.format_fs.container_type) ?>" />
|
||||
<input type="hidden" name="store" value="step2" />
|
||||
<button type="submit"><?cs var:html_escape(Lang.Plugins.format_fs.Button.Format) ?></button>
|
||||
</form>
|
||||
|
||||
<?cs /if ?>
|
||||
|
||||
<?cs include:Settings.TemplateDir + "/show_volume_footer.cs" ?>
|
9
plugins/help/doc.cs
Normal file
|
@ -0,0 +1,9 @@
|
|||
<?cs # $Id$ ?>
|
||||
|
||||
<div id="doc">
|
||||
|
||||
<?cs call:handle_messages() ?>
|
||||
|
||||
<?cs include:Settings.DocDir + '/' + Settings.Language + '/' + Data.Plugins.help.Page + '.html' ?>
|
||||
|
||||
</div>
|
25
plugins/help/help.py
Normal file
|
@ -0,0 +1,25 @@
|
|||
import CryptoBoxPlugin
|
||||
|
||||
class help(CryptoBoxPlugin.CryptoBoxPlugin):
|
||||
|
||||
pluginCapabilities = [ "menu" ]
|
||||
requestAuth = False
|
||||
rank = 80
|
||||
|
||||
def doAction(self, page=""):
|
||||
'''prints the offline wikipage
|
||||
'''
|
||||
import re
|
||||
## check for invalid characters
|
||||
if page and not re.search(u'\W', page):
|
||||
self.hdf[self.hdf_prefix + "Page"] = page
|
||||
else:
|
||||
## display this page as default help page
|
||||
self.hdf[self.hdf_prefix + "Page"] ="CryptoBoxUser"
|
||||
return "doc"
|
||||
|
||||
|
||||
def getStatus(self):
|
||||
return "TODO"
|
||||
|
||||
|
5
plugins/help/lang/en.hdf
Normal file
|
@ -0,0 +1,5 @@
|
|||
Name = User manual
|
||||
Link = Help
|
||||
|
||||
Title.Help = User manual
|
||||
|
BIN
plugins/help/plugin_icon.png
Normal file
After Width: | Height: | Size: 12 KiB |
29
plugins/help/unittests.py
Normal file
|
@ -0,0 +1,29 @@
|
|||
import WebInterfaceTestClass
|
||||
from twill.errors import *
|
||||
|
||||
class unittests(WebInterfaceTestClass.WebInterfaceTestClass):
|
||||
|
||||
def test_help_pages(self):
|
||||
'''help pages should be available in different languages'''
|
||||
|
||||
## check english help pages
|
||||
self.cmd.go(self.URL + "help?weblang=en")
|
||||
self.cmd.find("Table of Contents")
|
||||
self.cmd.find("Getting started")
|
||||
|
||||
self.cmd.go(self.URL + "help?weblang=de")
|
||||
self.cmd.find("Table of Contents")
|
||||
self.cmd.find("Wie geht es los")
|
||||
|
||||
self.cmd.go(self.URL + "help?weblang=si")
|
||||
self.assertRaises(TwillAssertionError, self.cmd.notfind, "Table of Contents")
|
||||
#TODO: add a slovene text here, as soon as the help is translated
|
||||
|
||||
self.cmd.go(self.URL + "help?weblang=fr")
|
||||
self.assertRaises(TwillAssertionError, self.cmd.notfind, "Table of Contents")
|
||||
#TODO: add a french text here, as soon as the help is translated
|
||||
|
||||
## test a random language - it should fall back to english
|
||||
self.cmd.go(self.URL + "help?weblang=foobar")
|
||||
self.assertRaises(TwillAssertionError, self.cmd.notfind, "Table of Contents")
|
||||
|
5
plugins/language_selection/lang/en.hdf
Normal file
|
@ -0,0 +1,5 @@
|
|||
Name = Choose interface language
|
||||
Link = Languages
|
||||
|
||||
Title.Language = Choose an interface language
|
||||
|
15
plugins/language_selection/language_selection.cs
Normal file
|
@ -0,0 +1,15 @@
|
|||
<?cs # $Id$ ?>
|
||||
|
||||
<h1><?cs var:html_escape(Lang.Plugins.language_selection.Title.Language) ?></h1>
|
||||
|
||||
<?cs call:handle_messages() ?>
|
||||
|
||||
<div id="lang">
|
||||
<ul>
|
||||
<?cs loop:index = #0, subcount(Data.Languages)-1, #1 ?>
|
||||
<li><a href="<?cs
|
||||
call:link("disks", 'weblang', Data.Languages[index].name, '','') ?>" title="<?cs
|
||||
var:html_escape(Data.Languages[index].link) ?>" /><?cs
|
||||
var:html_escape(Data.Languages[index].link) ?></a></li><?cs /loop ?>
|
||||
</ul>
|
||||
</div>
|