674
LICENSE
Normal file
@@ -0,0 +1,674 @@
|
|||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
Version 3, 29 June 2007
|
||||||
|
|
||||||
|
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
Preamble
|
||||||
|
|
||||||
|
The GNU General Public License is a free, copyleft license for
|
||||||
|
software and other kinds of works.
|
||||||
|
|
||||||
|
The licenses for most software and other practical works are designed
|
||||||
|
to take away your freedom to share and change the works. By contrast,
|
||||||
|
the GNU General Public License is intended to guarantee your freedom to
|
||||||
|
share and change all versions of a program--to make sure it remains free
|
||||||
|
software for all its users. We, the Free Software Foundation, use the
|
||||||
|
GNU General Public License for most of our software; it applies also to
|
||||||
|
any other work released this way by its authors. You can apply it to
|
||||||
|
your programs, too.
|
||||||
|
|
||||||
|
When we speak of free software, we are referring to freedom, not
|
||||||
|
price. Our General Public Licenses are designed to make sure that you
|
||||||
|
have the freedom to distribute copies of free software (and charge for
|
||||||
|
them if you wish), that you receive source code or can get it if you
|
||||||
|
want it, that you can change the software or use pieces of it in new
|
||||||
|
free programs, and that you know you can do these things.
|
||||||
|
|
||||||
|
To protect your rights, we need to prevent others from denying you
|
||||||
|
these rights or asking you to surrender the rights. Therefore, you have
|
||||||
|
certain responsibilities if you distribute copies of the software, or if
|
||||||
|
you modify it: responsibilities to respect the freedom of others.
|
||||||
|
|
||||||
|
For example, if you distribute copies of such a program, whether
|
||||||
|
gratis or for a fee, you must pass on to the recipients the same
|
||||||
|
freedoms that you received. You must make sure that they, too, receive
|
||||||
|
or can get the source code. And you must show them these terms so they
|
||||||
|
know their rights.
|
||||||
|
|
||||||
|
Developers that use the GNU GPL protect your rights with two steps:
|
||||||
|
(1) assert copyright on the software, and (2) offer you this License
|
||||||
|
giving you legal permission to copy, distribute and/or modify it.
|
||||||
|
|
||||||
|
For the developers' and authors' protection, the GPL clearly explains
|
||||||
|
that there is no warranty for this free software. For both users' and
|
||||||
|
authors' sake, the GPL requires that modified versions be marked as
|
||||||
|
changed, so that their problems will not be attributed erroneously to
|
||||||
|
authors of previous versions.
|
||||||
|
|
||||||
|
Some devices are designed to deny users access to install or run
|
||||||
|
modified versions of the software inside them, although the manufacturer
|
||||||
|
can do so. This is fundamentally incompatible with the aim of
|
||||||
|
protecting users' freedom to change the software. The systematic
|
||||||
|
pattern of such abuse occurs in the area of products for individuals to
|
||||||
|
use, which is precisely where it is most unacceptable. Therefore, we
|
||||||
|
have designed this version of the GPL to prohibit the practice for those
|
||||||
|
products. If such problems arise substantially in other domains, we
|
||||||
|
stand ready to extend this provision to those domains in future versions
|
||||||
|
of the GPL, as needed to protect the freedom of users.
|
||||||
|
|
||||||
|
Finally, every program is threatened constantly by software patents.
|
||||||
|
States should not allow patents to restrict development and use of
|
||||||
|
software on general-purpose computers, but in those that do, we wish to
|
||||||
|
avoid the special danger that patents applied to a free program could
|
||||||
|
make it effectively proprietary. To prevent this, the GPL assures that
|
||||||
|
patents cannot be used to render the program non-free.
|
||||||
|
|
||||||
|
The precise terms and conditions for copying, distribution and
|
||||||
|
modification follow.
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
0. Definitions.
|
||||||
|
|
||||||
|
"This License" refers to version 3 of the GNU General Public License.
|
||||||
|
|
||||||
|
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||||
|
works, such as semiconductor masks.
|
||||||
|
|
||||||
|
"The Program" refers to any copyrightable work licensed under this
|
||||||
|
License. Each licensee is addressed as "you". "Licensees" and
|
||||||
|
"recipients" may be individuals or organizations.
|
||||||
|
|
||||||
|
To "modify" a work means to copy from or adapt all or part of the work
|
||||||
|
in a fashion requiring copyright permission, other than the making of an
|
||||||
|
exact copy. The resulting work is called a "modified version" of the
|
||||||
|
earlier work or a work "based on" the earlier work.
|
||||||
|
|
||||||
|
A "covered work" means either the unmodified Program or a work based
|
||||||
|
on the Program.
|
||||||
|
|
||||||
|
To "propagate" a work means to do anything with it that, without
|
||||||
|
permission, would make you directly or secondarily liable for
|
||||||
|
infringement under applicable copyright law, except executing it on a
|
||||||
|
computer or modifying a private copy. Propagation includes copying,
|
||||||
|
distribution (with or without modification), making available to the
|
||||||
|
public, and in some countries other activities as well.
|
||||||
|
|
||||||
|
To "convey" a work means any kind of propagation that enables other
|
||||||
|
parties to make or receive copies. Mere interaction with a user through
|
||||||
|
a computer network, with no transfer of a copy, is not conveying.
|
||||||
|
|
||||||
|
An interactive user interface displays "Appropriate Legal Notices"
|
||||||
|
to the extent that it includes a convenient and prominently visible
|
||||||
|
feature that (1) displays an appropriate copyright notice, and (2)
|
||||||
|
tells the user that there is no warranty for the work (except to the
|
||||||
|
extent that warranties are provided), that licensees may convey the
|
||||||
|
work under this License, and how to view a copy of this License. If
|
||||||
|
the interface presents a list of user commands or options, such as a
|
||||||
|
menu, a prominent item in the list meets this criterion.
|
||||||
|
|
||||||
|
1. Source Code.
|
||||||
|
|
||||||
|
The "source code" for a work means the preferred form of the work
|
||||||
|
for making modifications to it. "Object code" means any non-source
|
||||||
|
form of a work.
|
||||||
|
|
||||||
|
A "Standard Interface" means an interface that either is an official
|
||||||
|
standard defined by a recognized standards body, or, in the case of
|
||||||
|
interfaces specified for a particular programming language, one that
|
||||||
|
is widely used among developers working in that language.
|
||||||
|
|
||||||
|
The "System Libraries" of an executable work include anything, other
|
||||||
|
than the work as a whole, that (a) is included in the normal form of
|
||||||
|
packaging a Major Component, but which is not part of that Major
|
||||||
|
Component, and (b) serves only to enable use of the work with that
|
||||||
|
Major Component, or to implement a Standard Interface for which an
|
||||||
|
implementation is available to the public in source code form. A
|
||||||
|
"Major Component", in this context, means a major essential component
|
||||||
|
(kernel, window system, and so on) of the specific operating system
|
||||||
|
(if any) on which the executable work runs, or a compiler used to
|
||||||
|
produce the work, or an object code interpreter used to run it.
|
||||||
|
|
||||||
|
The "Corresponding Source" for a work in object code form means all
|
||||||
|
the source code needed to generate, install, and (for an executable
|
||||||
|
work) run the object code and to modify the work, including scripts to
|
||||||
|
control those activities. However, it does not include the work's
|
||||||
|
System Libraries, or general-purpose tools or generally available free
|
||||||
|
programs which are used unmodified in performing those activities but
|
||||||
|
which are not part of the work. For example, Corresponding Source
|
||||||
|
includes interface definition files associated with source files for
|
||||||
|
the work, and the source code for shared libraries and dynamically
|
||||||
|
linked subprograms that the work is specifically designed to require,
|
||||||
|
such as by intimate data communication or control flow between those
|
||||||
|
subprograms and other parts of the work.
|
||||||
|
|
||||||
|
The Corresponding Source need not include anything that users
|
||||||
|
can regenerate automatically from other parts of the Corresponding
|
||||||
|
Source.
|
||||||
|
|
||||||
|
The Corresponding Source for a work in source code form is that
|
||||||
|
same work.
|
||||||
|
|
||||||
|
2. Basic Permissions.
|
||||||
|
|
||||||
|
All rights granted under this License are granted for the term of
|
||||||
|
copyright on the Program, and are irrevocable provided the stated
|
||||||
|
conditions are met. This License explicitly affirms your unlimited
|
||||||
|
permission to run the unmodified Program. The output from running a
|
||||||
|
covered work is covered by this License only if the output, given its
|
||||||
|
content, constitutes a covered work. This License acknowledges your
|
||||||
|
rights of fair use or other equivalent, as provided by copyright law.
|
||||||
|
|
||||||
|
You may make, run and propagate covered works that you do not
|
||||||
|
convey, without conditions so long as your license otherwise remains
|
||||||
|
in force. You may convey covered works to others for the sole purpose
|
||||||
|
of having them make modifications exclusively for you, or provide you
|
||||||
|
with facilities for running those works, provided that you comply with
|
||||||
|
the terms of this License in conveying all material for which you do
|
||||||
|
not control copyright. Those thus making or running the covered works
|
||||||
|
for you must do so exclusively on your behalf, under your direction
|
||||||
|
and control, on terms that prohibit them from making any copies of
|
||||||
|
your copyrighted material outside their relationship with you.
|
||||||
|
|
||||||
|
Conveying under any other circumstances is permitted solely under
|
||||||
|
the conditions stated below. Sublicensing is not allowed; section 10
|
||||||
|
makes it unnecessary.
|
||||||
|
|
||||||
|
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||||
|
|
||||||
|
No covered work shall be deemed part of an effective technological
|
||||||
|
measure under any applicable law fulfilling obligations under article
|
||||||
|
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||||
|
similar laws prohibiting or restricting circumvention of such
|
||||||
|
measures.
|
||||||
|
|
||||||
|
When you convey a covered work, you waive any legal power to forbid
|
||||||
|
circumvention of technological measures to the extent such circumvention
|
||||||
|
is effected by exercising rights under this License with respect to
|
||||||
|
the covered work, and you disclaim any intention to limit operation or
|
||||||
|
modification of the work as a means of enforcing, against the work's
|
||||||
|
users, your or third parties' legal rights to forbid circumvention of
|
||||||
|
technological measures.
|
||||||
|
|
||||||
|
4. Conveying Verbatim Copies.
|
||||||
|
|
||||||
|
You may convey verbatim copies of the Program's source code as you
|
||||||
|
receive it, in any medium, provided that you conspicuously and
|
||||||
|
appropriately publish on each copy an appropriate copyright notice;
|
||||||
|
keep intact all notices stating that this License and any
|
||||||
|
non-permissive terms added in accord with section 7 apply to the code;
|
||||||
|
keep intact all notices of the absence of any warranty; and give all
|
||||||
|
recipients a copy of this License along with the Program.
|
||||||
|
|
||||||
|
You may charge any price or no price for each copy that you convey,
|
||||||
|
and you may offer support or warranty protection for a fee.
|
||||||
|
|
||||||
|
5. Conveying Modified Source Versions.
|
||||||
|
|
||||||
|
You may convey a work based on the Program, or the modifications to
|
||||||
|
produce it from the Program, in the form of source code under the
|
||||||
|
terms of section 4, provided that you also meet all of these conditions:
|
||||||
|
|
||||||
|
a) The work must carry prominent notices stating that you modified
|
||||||
|
it, and giving a relevant date.
|
||||||
|
|
||||||
|
b) The work must carry prominent notices stating that it is
|
||||||
|
released under this License and any conditions added under section
|
||||||
|
7. This requirement modifies the requirement in section 4 to
|
||||||
|
"keep intact all notices".
|
||||||
|
|
||||||
|
c) You must license the entire work, as a whole, under this
|
||||||
|
License to anyone who comes into possession of a copy. This
|
||||||
|
License will therefore apply, along with any applicable section 7
|
||||||
|
additional terms, to the whole of the work, and all its parts,
|
||||||
|
regardless of how they are packaged. This License gives no
|
||||||
|
permission to license the work in any other way, but it does not
|
||||||
|
invalidate such permission if you have separately received it.
|
||||||
|
|
||||||
|
d) If the work has interactive user interfaces, each must display
|
||||||
|
Appropriate Legal Notices; however, if the Program has interactive
|
||||||
|
interfaces that do not display Appropriate Legal Notices, your
|
||||||
|
work need not make them do so.
|
||||||
|
|
||||||
|
A compilation of a covered work with other separate and independent
|
||||||
|
works, which are not by their nature extensions of the covered work,
|
||||||
|
and which are not combined with it such as to form a larger program,
|
||||||
|
in or on a volume of a storage or distribution medium, is called an
|
||||||
|
"aggregate" if the compilation and its resulting copyright are not
|
||||||
|
used to limit the access or legal rights of the compilation's users
|
||||||
|
beyond what the individual works permit. Inclusion of a covered work
|
||||||
|
in an aggregate does not cause this License to apply to the other
|
||||||
|
parts of the aggregate.
|
||||||
|
|
||||||
|
6. Conveying Non-Source Forms.
|
||||||
|
|
||||||
|
You may convey a covered work in object code form under the terms
|
||||||
|
of sections 4 and 5, provided that you also convey the
|
||||||
|
machine-readable Corresponding Source under the terms of this License,
|
||||||
|
in one of these ways:
|
||||||
|
|
||||||
|
a) Convey the object code in, or embodied in, a physical product
|
||||||
|
(including a physical distribution medium), accompanied by the
|
||||||
|
Corresponding Source fixed on a durable physical medium
|
||||||
|
customarily used for software interchange.
|
||||||
|
|
||||||
|
b) Convey the object code in, or embodied in, a physical product
|
||||||
|
(including a physical distribution medium), accompanied by a
|
||||||
|
written offer, valid for at least three years and valid for as
|
||||||
|
long as you offer spare parts or customer support for that product
|
||||||
|
model, to give anyone who possesses the object code either (1) a
|
||||||
|
copy of the Corresponding Source for all the software in the
|
||||||
|
product that is covered by this License, on a durable physical
|
||||||
|
medium customarily used for software interchange, for a price no
|
||||||
|
more than your reasonable cost of physically performing this
|
||||||
|
conveying of source, or (2) access to copy the
|
||||||
|
Corresponding Source from a network server at no charge.
|
||||||
|
|
||||||
|
c) Convey individual copies of the object code with a copy of the
|
||||||
|
written offer to provide the Corresponding Source. This
|
||||||
|
alternative is allowed only occasionally and noncommercially, and
|
||||||
|
only if you received the object code with such an offer, in accord
|
||||||
|
with subsection 6b.
|
||||||
|
|
||||||
|
d) Convey the object code by offering access from a designated
|
||||||
|
place (gratis or for a charge), and offer equivalent access to the
|
||||||
|
Corresponding Source in the same way through the same place at no
|
||||||
|
further charge. You need not require recipients to copy the
|
||||||
|
Corresponding Source along with the object code. If the place to
|
||||||
|
copy the object code is a network server, the Corresponding Source
|
||||||
|
may be on a different server (operated by you or a third party)
|
||||||
|
that supports equivalent copying facilities, provided you maintain
|
||||||
|
clear directions next to the object code saying where to find the
|
||||||
|
Corresponding Source. Regardless of what server hosts the
|
||||||
|
Corresponding Source, you remain obligated to ensure that it is
|
||||||
|
available for as long as needed to satisfy these requirements.
|
||||||
|
|
||||||
|
e) Convey the object code using peer-to-peer transmission, provided
|
||||||
|
you inform other peers where the object code and Corresponding
|
||||||
|
Source of the work are being offered to the general public at no
|
||||||
|
charge under subsection 6d.
|
||||||
|
|
||||||
|
A separable portion of the object code, whose source code is excluded
|
||||||
|
from the Corresponding Source as a System Library, need not be
|
||||||
|
included in conveying the object code work.
|
||||||
|
|
||||||
|
A "User Product" is either (1) a "consumer product", which means any
|
||||||
|
tangible personal property which is normally used for personal, family,
|
||||||
|
or household purposes, or (2) anything designed or sold for incorporation
|
||||||
|
into a dwelling. In determining whether a product is a consumer product,
|
||||||
|
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||||
|
product received by a particular user, "normally used" refers to a
|
||||||
|
typical or common use of that class of product, regardless of the status
|
||||||
|
of the particular user or of the way in which the particular user
|
||||||
|
actually uses, or expects or is expected to use, the product. A product
|
||||||
|
is a consumer product regardless of whether the product has substantial
|
||||||
|
commercial, industrial or non-consumer uses, unless such uses represent
|
||||||
|
the only significant mode of use of the product.
|
||||||
|
|
||||||
|
"Installation Information" for a User Product means any methods,
|
||||||
|
procedures, authorization keys, or other information required to install
|
||||||
|
and execute modified versions of a covered work in that User Product from
|
||||||
|
a modified version of its Corresponding Source. The information must
|
||||||
|
suffice to ensure that the continued functioning of the modified object
|
||||||
|
code is in no case prevented or interfered with solely because
|
||||||
|
modification has been made.
|
||||||
|
|
||||||
|
If you convey an object code work under this section in, or with, or
|
||||||
|
specifically for use in, a User Product, and the conveying occurs as
|
||||||
|
part of a transaction in which the right of possession and use of the
|
||||||
|
User Product is transferred to the recipient in perpetuity or for a
|
||||||
|
fixed term (regardless of how the transaction is characterized), the
|
||||||
|
Corresponding Source conveyed under this section must be accompanied
|
||||||
|
by the Installation Information. But this requirement does not apply
|
||||||
|
if neither you nor any third party retains the ability to install
|
||||||
|
modified object code on the User Product (for example, the work has
|
||||||
|
been installed in ROM).
|
||||||
|
|
||||||
|
The requirement to provide Installation Information does not include a
|
||||||
|
requirement to continue to provide support service, warranty, or updates
|
||||||
|
for a work that has been modified or installed by the recipient, or for
|
||||||
|
the User Product in which it has been modified or installed. Access to a
|
||||||
|
network may be denied when the modification itself materially and
|
||||||
|
adversely affects the operation of the network or violates the rules and
|
||||||
|
protocols for communication across the network.
|
||||||
|
|
||||||
|
Corresponding Source conveyed, and Installation Information provided,
|
||||||
|
in accord with this section must be in a format that is publicly
|
||||||
|
documented (and with an implementation available to the public in
|
||||||
|
source code form), and must require no special password or key for
|
||||||
|
unpacking, reading or copying.
|
||||||
|
|
||||||
|
7. Additional Terms.
|
||||||
|
|
||||||
|
"Additional permissions" are terms that supplement the terms of this
|
||||||
|
License by making exceptions from one or more of its conditions.
|
||||||
|
Additional permissions that are applicable to the entire Program shall
|
||||||
|
be treated as though they were included in this License, to the extent
|
||||||
|
that they are valid under applicable law. If additional permissions
|
||||||
|
apply only to part of the Program, that part may be used separately
|
||||||
|
under those permissions, but the entire Program remains governed by
|
||||||
|
this License without regard to the additional permissions.
|
||||||
|
|
||||||
|
When you convey a copy of a covered work, you may at your option
|
||||||
|
remove any additional permissions from that copy, or from any part of
|
||||||
|
it. (Additional permissions may be written to require their own
|
||||||
|
removal in certain cases when you modify the work.) You may place
|
||||||
|
additional permissions on material, added by you to a covered work,
|
||||||
|
for which you have or can give appropriate copyright permission.
|
||||||
|
|
||||||
|
Notwithstanding any other provision of this License, for material you
|
||||||
|
add to a covered work, you may (if authorized by the copyright holders of
|
||||||
|
that material) supplement the terms of this License with terms:
|
||||||
|
|
||||||
|
a) Disclaiming warranty or limiting liability differently from the
|
||||||
|
terms of sections 15 and 16 of this License; or
|
||||||
|
|
||||||
|
b) Requiring preservation of specified reasonable legal notices or
|
||||||
|
author attributions in that material or in the Appropriate Legal
|
||||||
|
Notices displayed by works containing it; or
|
||||||
|
|
||||||
|
c) Prohibiting misrepresentation of the origin of that material, or
|
||||||
|
requiring that modified versions of such material be marked in
|
||||||
|
reasonable ways as different from the original version; or
|
||||||
|
|
||||||
|
d) Limiting the use for publicity purposes of names of licensors or
|
||||||
|
authors of the material; or
|
||||||
|
|
||||||
|
e) Declining to grant rights under trademark law for use of some
|
||||||
|
trade names, trademarks, or service marks; or
|
||||||
|
|
||||||
|
f) Requiring indemnification of licensors and authors of that
|
||||||
|
material by anyone who conveys the material (or modified versions of
|
||||||
|
it) with contractual assumptions of liability to the recipient, for
|
||||||
|
any liability that these contractual assumptions directly impose on
|
||||||
|
those licensors and authors.
|
||||||
|
|
||||||
|
All other non-permissive additional terms are considered "further
|
||||||
|
restrictions" within the meaning of section 10. If the Program as you
|
||||||
|
received it, or any part of it, contains a notice stating that it is
|
||||||
|
governed by this License along with a term that is a further
|
||||||
|
restriction, you may remove that term. If a license document contains
|
||||||
|
a further restriction but permits relicensing or conveying under this
|
||||||
|
License, you may add to a covered work material governed by the terms
|
||||||
|
of that license document, provided that the further restriction does
|
||||||
|
not survive such relicensing or conveying.
|
||||||
|
|
||||||
|
If you add terms to a covered work in accord with this section, you
|
||||||
|
must place, in the relevant source files, a statement of the
|
||||||
|
additional terms that apply to those files, or a notice indicating
|
||||||
|
where to find the applicable terms.
|
||||||
|
|
||||||
|
Additional terms, permissive or non-permissive, may be stated in the
|
||||||
|
form of a separately written license, or stated as exceptions;
|
||||||
|
the above requirements apply either way.
|
||||||
|
|
||||||
|
8. Termination.
|
||||||
|
|
||||||
|
You may not propagate or modify a covered work except as expressly
|
||||||
|
provided under this License. Any attempt otherwise to propagate or
|
||||||
|
modify it is void, and will automatically terminate your rights under
|
||||||
|
this License (including any patent licenses granted under the third
|
||||||
|
paragraph of section 11).
|
||||||
|
|
||||||
|
However, if you cease all violation of this License, then your
|
||||||
|
license from a particular copyright holder is reinstated (a)
|
||||||
|
provisionally, unless and until the copyright holder explicitly and
|
||||||
|
finally terminates your license, and (b) permanently, if the copyright
|
||||||
|
holder fails to notify you of the violation by some reasonable means
|
||||||
|
prior to 60 days after the cessation.
|
||||||
|
|
||||||
|
Moreover, your license from a particular copyright holder is
|
||||||
|
reinstated permanently if the copyright holder notifies you of the
|
||||||
|
violation by some reasonable means, this is the first time you have
|
||||||
|
received notice of violation of this License (for any work) from that
|
||||||
|
copyright holder, and you cure the violation prior to 30 days after
|
||||||
|
your receipt of the notice.
|
||||||
|
|
||||||
|
Termination of your rights under this section does not terminate the
|
||||||
|
licenses of parties who have received copies or rights from you under
|
||||||
|
this License. If your rights have been terminated and not permanently
|
||||||
|
reinstated, you do not qualify to receive new licenses for the same
|
||||||
|
material under section 10.
|
||||||
|
|
||||||
|
9. Acceptance Not Required for Having Copies.
|
||||||
|
|
||||||
|
You are not required to accept this License in order to receive or
|
||||||
|
run a copy of the Program. Ancillary propagation of a covered work
|
||||||
|
occurring solely as a consequence of using peer-to-peer transmission
|
||||||
|
to receive a copy likewise does not require acceptance. However,
|
||||||
|
nothing other than this License grants you permission to propagate or
|
||||||
|
modify any covered work. These actions infringe copyright if you do
|
||||||
|
not accept this License. Therefore, by modifying or propagating a
|
||||||
|
covered work, you indicate your acceptance of this License to do so.
|
||||||
|
|
||||||
|
10. Automatic Licensing of Downstream Recipients.
|
||||||
|
|
||||||
|
Each time you convey a covered work, the recipient automatically
|
||||||
|
receives a license from the original licensors, to run, modify and
|
||||||
|
propagate that work, subject to this License. You are not responsible
|
||||||
|
for enforcing compliance by third parties with this License.
|
||||||
|
|
||||||
|
An "entity transaction" is a transaction transferring control of an
|
||||||
|
organization, or substantially all assets of one, or subdividing an
|
||||||
|
organization, or merging organizations. If propagation of a covered
|
||||||
|
work results from an entity transaction, each party to that
|
||||||
|
transaction who receives a copy of the work also receives whatever
|
||||||
|
licenses to the work the party's predecessor in interest had or could
|
||||||
|
give under the previous paragraph, plus a right to possession of the
|
||||||
|
Corresponding Source of the work from the predecessor in interest, if
|
||||||
|
the predecessor has it or can get it with reasonable efforts.
|
||||||
|
|
||||||
|
You may not impose any further restrictions on the exercise of the
|
||||||
|
rights granted or affirmed under this License. For example, you may
|
||||||
|
not impose a license fee, royalty, or other charge for exercise of
|
||||||
|
rights granted under this License, and you may not initiate litigation
|
||||||
|
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||||
|
any patent claim is infringed by making, using, selling, offering for
|
||||||
|
sale, or importing the Program or any portion of it.
|
||||||
|
|
||||||
|
11. Patents.
|
||||||
|
|
||||||
|
A "contributor" is a copyright holder who authorizes use under this
|
||||||
|
License of the Program or a work on which the Program is based. The
|
||||||
|
work thus licensed is called the contributor's "contributor version".
|
||||||
|
|
||||||
|
A contributor's "essential patent claims" are all patent claims
|
||||||
|
owned or controlled by the contributor, whether already acquired or
|
||||||
|
hereafter acquired, that would be infringed by some manner, permitted
|
||||||
|
by this License, of making, using, or selling its contributor version,
|
||||||
|
but do not include claims that would be infringed only as a
|
||||||
|
consequence of further modification of the contributor version. For
|
||||||
|
purposes of this definition, "control" includes the right to grant
|
||||||
|
patent sublicenses in a manner consistent with the requirements of
|
||||||
|
this License.
|
||||||
|
|
||||||
|
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||||
|
patent license under the contributor's essential patent claims, to
|
||||||
|
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||||
|
propagate the contents of its contributor version.
|
||||||
|
|
||||||
|
In the following three paragraphs, a "patent license" is any express
|
||||||
|
agreement or commitment, however denominated, not to enforce a patent
|
||||||
|
(such as an express permission to practice a patent or covenant not to
|
||||||
|
sue for patent infringement). To "grant" such a patent license to a
|
||||||
|
party means to make such an agreement or commitment not to enforce a
|
||||||
|
patent against the party.
|
||||||
|
|
||||||
|
If you convey a covered work, knowingly relying on a patent license,
|
||||||
|
and the Corresponding Source of the work is not available for anyone
|
||||||
|
to copy, free of charge and under the terms of this License, through a
|
||||||
|
publicly available network server or other readily accessible means,
|
||||||
|
then you must either (1) cause the Corresponding Source to be so
|
||||||
|
available, or (2) arrange to deprive yourself of the benefit of the
|
||||||
|
patent license for this particular work, or (3) arrange, in a manner
|
||||||
|
consistent with the requirements of this License, to extend the patent
|
||||||
|
license to downstream recipients. "Knowingly relying" means you have
|
||||||
|
actual knowledge that, but for the patent license, your conveying the
|
||||||
|
covered work in a country, or your recipient's use of the covered work
|
||||||
|
in a country, would infringe one or more identifiable patents in that
|
||||||
|
country that you have reason to believe are valid.
|
||||||
|
|
||||||
|
If, pursuant to or in connection with a single transaction or
|
||||||
|
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||||
|
covered work, and grant a patent license to some of the parties
|
||||||
|
receiving the covered work authorizing them to use, propagate, modify
|
||||||
|
or convey a specific copy of the covered work, then the patent license
|
||||||
|
you grant is automatically extended to all recipients of the covered
|
||||||
|
work and works based on it.
|
||||||
|
|
||||||
|
A patent license is "discriminatory" if it does not include within
|
||||||
|
the scope of its coverage, prohibits the exercise of, or is
|
||||||
|
conditioned on the non-exercise of one or more of the rights that are
|
||||||
|
specifically granted under this License. You may not convey a covered
|
||||||
|
work if you are a party to an arrangement with a third party that is
|
||||||
|
in the business of distributing software, under which you make payment
|
||||||
|
to the third party based on the extent of your activity of conveying
|
||||||
|
the work, and under which the third party grants, to any of the
|
||||||
|
parties who would receive the covered work from you, a discriminatory
|
||||||
|
patent license (a) in connection with copies of the covered work
|
||||||
|
conveyed by you (or copies made from those copies), or (b) primarily
|
||||||
|
for and in connection with specific products or compilations that
|
||||||
|
contain the covered work, unless you entered into that arrangement,
|
||||||
|
or that patent license was granted, prior to 28 March 2007.
|
||||||
|
|
||||||
|
Nothing in this License shall be construed as excluding or limiting
|
||||||
|
any implied license or other defenses to infringement that may
|
||||||
|
otherwise be available to you under applicable patent law.
|
||||||
|
|
||||||
|
12. No Surrender of Others' Freedom.
|
||||||
|
|
||||||
|
If conditions are imposed on you (whether by court order, agreement or
|
||||||
|
otherwise) that contradict the conditions of this License, they do not
|
||||||
|
excuse you from the conditions of this License. If you cannot convey a
|
||||||
|
covered work so as to satisfy simultaneously your obligations under this
|
||||||
|
License and any other pertinent obligations, then as a consequence you may
|
||||||
|
not convey it at all. For example, if you agree to terms that obligate you
|
||||||
|
to collect a royalty for further conveying from those to whom you convey
|
||||||
|
the Program, the only way you could satisfy both those terms and this
|
||||||
|
License would be to refrain entirely from conveying the Program.
|
||||||
|
|
||||||
|
13. Use with the GNU Affero General Public License.
|
||||||
|
|
||||||
|
Notwithstanding any other provision of this License, you have
|
||||||
|
permission to link or combine any covered work with a work licensed
|
||||||
|
under version 3 of the GNU Affero General Public License into a single
|
||||||
|
combined work, and to convey the resulting work. The terms of this
|
||||||
|
License will continue to apply to the part which is the covered work,
|
||||||
|
but the special requirements of the GNU Affero General Public License,
|
||||||
|
section 13, concerning interaction through a network will apply to the
|
||||||
|
combination as such.
|
||||||
|
|
||||||
|
14. Revised Versions of this License.
|
||||||
|
|
||||||
|
The Free Software Foundation may publish revised and/or new versions of
|
||||||
|
the GNU General Public License from time to time. Such new versions will
|
||||||
|
be similar in spirit to the present version, but may differ in detail to
|
||||||
|
address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the
|
||||||
|
Program specifies that a certain numbered version of the GNU General
|
||||||
|
Public License "or any later version" applies to it, you have the
|
||||||
|
option of following the terms and conditions either of that numbered
|
||||||
|
version or of any later version published by the Free Software
|
||||||
|
Foundation. If the Program does not specify a version number of the
|
||||||
|
GNU General Public License, you may choose any version ever published
|
||||||
|
by the Free Software Foundation.
|
||||||
|
|
||||||
|
If the Program specifies that a proxy can decide which future
|
||||||
|
versions of the GNU General Public License can be used, that proxy's
|
||||||
|
public statement of acceptance of a version permanently authorizes you
|
||||||
|
to choose that version for the Program.
|
||||||
|
|
||||||
|
Later license versions may give you additional or different
|
||||||
|
permissions. However, no additional obligations are imposed on any
|
||||||
|
author or copyright holder as a result of your choosing to follow a
|
||||||
|
later version.
|
||||||
|
|
||||||
|
15. Disclaimer of Warranty.
|
||||||
|
|
||||||
|
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||||
|
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||||
|
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||||
|
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||||
|
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||||
|
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||||
|
|
||||||
|
16. Limitation of Liability.
|
||||||
|
|
||||||
|
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||||
|
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||||
|
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||||
|
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||||
|
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||||
|
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||||
|
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||||
|
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||||
|
SUCH DAMAGES.
|
||||||
|
|
||||||
|
17. Interpretation of Sections 15 and 16.
|
||||||
|
|
||||||
|
If the disclaimer of warranty and limitation of liability provided
|
||||||
|
above cannot be given local legal effect according to their terms,
|
||||||
|
reviewing courts shall apply local law that most closely approximates
|
||||||
|
an absolute waiver of all civil liability in connection with the
|
||||||
|
Program, unless a warranty or assumption of liability accompanies a
|
||||||
|
copy of the Program in return for a fee.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
How to Apply These Terms to Your New Programs
|
||||||
|
|
||||||
|
If you develop a new program, and you want it to be of the greatest
|
||||||
|
possible use to the public, the best way to achieve this is to make it
|
||||||
|
free software which everyone can redistribute and change under these terms.
|
||||||
|
|
||||||
|
To do so, attach the following notices to the program. It is safest
|
||||||
|
to attach them to the start of each source file to most effectively
|
||||||
|
state the exclusion of warranty; and each file should have at least
|
||||||
|
the "copyright" line and a pointer to where the full notice is found.
|
||||||
|
|
||||||
|
<one line to give the program's name and a brief idea of what it does.>
|
||||||
|
Copyright (C) <year> <name of author>
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
|
If the program does terminal interaction, make it output a short
|
||||||
|
notice like this when it starts in an interactive mode:
|
||||||
|
|
||||||
|
<program> Copyright (C) <year> <name of author>
|
||||||
|
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||||
|
This is free software, and you are welcome to redistribute it
|
||||||
|
under certain conditions; type `show c' for details.
|
||||||
|
|
||||||
|
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||||
|
parts of the General Public License. Of course, your program's commands
|
||||||
|
might be different; for a GUI interface, you would use an "about box".
|
||||||
|
|
||||||
|
You should also get your employer (if you work as a programmer) or school,
|
||||||
|
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||||
|
For more information on this, and how to apply and follow the GNU GPL, see
|
||||||
|
<https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
The GNU General Public License does not permit incorporating your program
|
||||||
|
into proprietary programs. If your program is a subroutine library, you
|
||||||
|
may consider it more useful to permit linking proprietary applications with
|
||||||
|
the library. If this is what you want to do, use the GNU Lesser General
|
||||||
|
Public License instead of this License. But first, please read
|
||||||
|
<https://www.gnu.org/licenses/why-not-lgpl.html>.
|
||||||
1
Mockup/DashboardWindow.drawio
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<mxfile host="app.diagrams.net" modified="2021-04-05T17:56:31.091Z" agent="5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36" etag="PkWOBFN9b-EQ_Y8mwpEL" version="14.5.7" type="device"><diagram id="UBeI6YBNYhGgj7EGWcJK" name="Page-1">7VxbU+s2EP41mWkfyNiWb3nMhUA75Zwzpac9b4xiK4mKbaW2ckL49ZV8i20pYILtAAYYiFfyJfvtt6tdbRiAqf9wFcLN+oa4yBtoivswALOBpulAZ7+5YJ8IgGUlglWI3USkHgS3+BGlQiWVbrGLotJESohH8aYsdEgQIIeWZDAMya48bUm88l03cIUEwa0DPVH6D3bpOpHamnWQXyO8Wmd3Vs1RMuLDbHL6TqI1dMmuIAKXAzANCaHJK/9hijyuu0wvyXnzI6P5g4UooHVO+Pn1LppYuy+6ZW/gV0Uh4HF3kV7lJ/S26RtOH5buMw2EZBu4iF9EGYDJbo0put1Ah4/uGORMtqa+x45U9nJJAjolHgnjc8Ey/uJy7HkFuW4YY1Nn8oiG5B4VRhRlMh8b+Uimc6atycqDUZQ+RnSPqLPODjLN8gNRLdl7RCFFDwVRqqYrRHxEwz2bkhltilhmshmCu4MBqJqSCtcF9O1MCFOrW+XXPgDDXqTYvAAnrWGcynoPSIC4gkPoYvQ8gOn0BjRdVbWuSFStyFRtaW2pGkhUbXo0Ne7Y1WTqMf/bcvYyTYCFzb+LogI2mZBf4CKKfdyYTWDKeyieYa743x/Z7djTJ3dM5K8k5pMEzGjGZ25QiJkmUcgvhoNVRjKZxTRgAgcmPUE3XWIBoC0D0BsygAy25NxoA4PTjeKuYBTJlcpX74mtqNYbsxWjFb9cVLFUlxWEDN28tMbtBD9DGvxUUcdGWzo234SONRNowG5Fx7KoJ11ftBf0rJN8nqIsltAQvdU0RJAidlaAduz3DEbrBYGh+3Jvpb4UTu0J5I4vNhvA1Khgqkp4Y0swbY02dqOQzpCHYkhhXwG1zg3oqFFAL11MewqlAc4NZeYcjmP57DpRtcvrxCOr0iX/FtG/RSFT3yn4M5XTGrkk9PAqYIceWvLpHCvsQG+cin3suvyKUgMqR/Pm8QeaUQ//1sKtJsO/ouhoDTf8JfbjElVR41VtUrIpSP+AC+R9IxGmmPDRBaGU+GyCxwcm0LlfxRqWpfnxzcbRJimlcfXD7GCJHzgmk/R5ZmtKeQ1uzDWhzR03UIbYIcESM+zCocPuqM1dSFm8mHN5xP6iKGIgYuhF3JnNVY3FqPnd3S2ilCUP0QUTDDc8i6iYQKnAc7wM9IJaUjvljKqdGaKdybITvTUzk5X3TgkZNdPW2L9UPM0EBVv6iMIA+qijGHPcECSwZ44qTPAom1fR7kq2xh8/LVZrDTkpVTEr5mNKwpTVZXarydLbju1nRpzoLduNwxBnkfSMhjOqFkUMe2iJnkcW4IA2NNqynRppuySkHQ1egr5rRDN5nKwFvK3MBSBdtlYqxqQ4PPsPK77xNcQksuIAGA23UfyA5Rh2NGxJbOtc3gV06lyaqjmcWlO9wvR6u/j0LU+ZjW2/Sd8iq228Cq8XLDBLy8iKxquLCRF1MJpcVlFvuIKrVeKBLkl3c/aXEWuN62Lt4i8UcY7niegNcbcMu1emmzljXpFw1jOGKvSVne+Jzb+Ph6n0uZNRErKU6enyM7B0S583YyBAqWEgsvpzE4nKfrl/9E1/512pi7FpbO5//P27pA0ht4vfvp1qE0841tdXJQrwq2YOi4CBBKn6vB2JsLRVpZCiogmoXJOIfikkckc3NdPQzYNvuFrAX9gjsh/2GIr01a+DNGApceReQh97++R0nwQkipEoTTkEd2lsH2hGtSfJYO+cS+OOm/wo04QR64JJZvw1fzCDv3mDFzeemavmczOwT7qMdrhMovF8JOOCkbAhm5VoPZ8Vs4IdJbzgYjU+LHKDS2Mq8IEDP0rihCNclDpTLiwzhQ+mXOGDBbbwkZgvXJ4xhguV5JYZa+LHM2NZ4W0n7Kmj2Hwo1+mBTwZn1EGt1gEEZX+Qx+zK5AnD8jG7MJQy7XC9whhjXC5fFe5fRTw+zGEvCsvGmM4TrPbJrf9PDn5y8JOD5+JgP5cmhmR3u9Olidik931DsX9y/vDuAZEs4TsFRGya+3rLjvmCsbeYSFqnOsVErN7fUki30WuT7Oa1X0l2J2A+N1tCxZI1W2ldwiLWPdWRNlRNe6gO1b6QBVj6s8nuyOwQFbGkyBNdVQN9RUQW4ztFRKwZMuqCsWqzX7pY8O0LLJJI3ykskt4lJ9x7GA50xYfBvzAkvcVG2izdKThiJXX8E2IPLk6vrb93VGQRv2NUauyFP7sBLt/MLm9ilXakFzDCznANveWdg0MnBqSq7gqQIWELxOS+F7wjrl5rvMK+ptNmwDO08nJNtyXurtOtCdk29cfBbjrl6LWDncwddouduKibfvvegh9sYtuxBU8oACL5uJQMkPYcobimu+o1ILKsp9MtvhqNyO/Yu1XaKl6HHTDKkUmCnbSrojXsanx4/xM7KXaGpPmtW+w0Abs/0YrrqCeLdKFYKvl4VbfNDuKWwhUKWUK77wskQjZ7dkjETYUZ2nhkP4s/XdoPVASinL0rSNxWUNQL9qOORqO+oCJwRYZKlyUGSbv9113AOwf6AUiVJua5d6gl7e3zEAb3THSD9v0BpsoUGTCd1q8lzePftgsPO4NeN5uePdiLpQFTH9rqUNWUoZjYfFBYhG1RCSydsiXLgD5oktlm+VPq6bosf4LPAsGpBQJTUinttEAAJAWC8U0LbvCdVErNmnsJ7TlC2f8F/DhkanMPzzz3Hh4QCwnXs1kbvVbvhE3WuTeCQI1/nPeO2dRqaGpv32GQNsMfxgpt8ODyfw==</diagram></mxfile>
|
||||||
@@ -1 +1,4 @@
|
|||||||
# Server-Dashboard
|
# Server-Dashboard
|
||||||
|
A dashboard to overview your servers and remote manage them.
|
||||||
|
|
||||||
|
Currently in early development.
|
||||||
|
|||||||
34
Server Dashboard Socket/EchoServer.cs
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
using System;
|
||||||
|
using System.Net;
|
||||||
|
using System.Net.Sockets;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Server_Dashboard_Socket {
|
||||||
|
public class EchoServer {
|
||||||
|
public void Start(int port = 9565) {
|
||||||
|
IPEndPoint endPoint = new IPEndPoint(IPAddress.Loopback, port);
|
||||||
|
Socket socket = new Socket(endPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
|
||||||
|
socket.Bind(endPoint);
|
||||||
|
socket.Listen(128);
|
||||||
|
_ = Task.Run(() => DoEcho(socket));
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task DoEcho(Socket socket) {
|
||||||
|
while (true) {
|
||||||
|
Socket clientSocket = await Task.Factory.FromAsync(
|
||||||
|
new Func<AsyncCallback, object, IAsyncResult>(socket.BeginAccept),
|
||||||
|
new Func<IAsyncResult, Socket>(socket.EndAccept),
|
||||||
|
null).ConfigureAwait(false);
|
||||||
|
using(NetworkStream stream = new NetworkStream(clientSocket, true)) {
|
||||||
|
byte[] buffer = new byte[1024];
|
||||||
|
while (true) {
|
||||||
|
int bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length).ConfigureAwait(false);
|
||||||
|
if (bytesRead == 0)
|
||||||
|
break;
|
||||||
|
await stream.WriteAsync(buffer, 0, bytesRead).ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
8
Server Dashboard Socket/Server Dashboard Socket.csproj
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>netcoreapp3.1</TargetFramework>
|
||||||
|
<RootNamespace>Server_Dashboard_Socket</RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"runtimeTarget": {
|
||||||
|
"name": ".NETCoreApp,Version=v3.1",
|
||||||
|
"signature": ""
|
||||||
|
},
|
||||||
|
"compilationOptions": {},
|
||||||
|
"targets": {
|
||||||
|
".NETCoreApp,Version=v3.1": {
|
||||||
|
"Server Dashboard Socket/1.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"Server Dashboard Socket.dll": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"libraries": {
|
||||||
|
"Server Dashboard Socket/1.0.0": {
|
||||||
|
"type": "project",
|
||||||
|
"serviceable": false,
|
||||||
|
"sha512": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
// <autogenerated />
|
||||||
|
using System;
|
||||||
|
using System.Reflection;
|
||||||
|
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v3.1", FrameworkDisplayName = "")]
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Runtime Version:4.0.30319.42000
|
||||||
|
//
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Reflection;
|
||||||
|
|
||||||
|
[assembly: System.Reflection.AssemblyCompanyAttribute("Server Dashboard Socket")]
|
||||||
|
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||||
|
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||||
|
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
|
||||||
|
[assembly: System.Reflection.AssemblyProductAttribute("Server Dashboard Socket")]
|
||||||
|
[assembly: System.Reflection.AssemblyTitleAttribute("Server Dashboard Socket")]
|
||||||
|
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||||
|
|
||||||
|
// Generated by the MSBuild WriteCodeFragment class.
|
||||||
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
6e726691478e3d9c2ac99cb5832bdd0702cbb2d8
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
40cb88c995736b43b2440aaa34383fa2c95563ea
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
C:\Users\Crylia\Documents\Git\Server Dashboard\Server Dashboard Socket\bin\Debug\netcoreapp3.1\Server Dashboard Socket.deps.json
|
||||||
|
C:\Users\Crylia\Documents\Git\Server Dashboard\Server Dashboard Socket\bin\Debug\netcoreapp3.1\Server Dashboard Socket.dll
|
||||||
|
C:\Users\Crylia\Documents\Git\Server Dashboard\Server Dashboard Socket\bin\Debug\netcoreapp3.1\Server Dashboard Socket.pdb
|
||||||
|
C:\Users\Crylia\Documents\Git\Server Dashboard\Server Dashboard Socket\obj\Debug\netcoreapp3.1\Server Dashboard Socket.AssemblyInfoInputs.cache
|
||||||
|
C:\Users\Crylia\Documents\Git\Server Dashboard\Server Dashboard Socket\obj\Debug\netcoreapp3.1\Server Dashboard Socket.AssemblyInfo.cs
|
||||||
|
C:\Users\Crylia\Documents\Git\Server Dashboard\Server Dashboard Socket\obj\Debug\netcoreapp3.1\Server Dashboard Socket.csproj.CoreCompileInputs.cache
|
||||||
|
C:\Users\Crylia\Documents\Git\Server Dashboard\Server Dashboard Socket\obj\Debug\netcoreapp3.1\Server Dashboard Socket.dll
|
||||||
|
C:\Users\Crylia\Documents\Git\Server Dashboard\Server Dashboard Socket\obj\Debug\netcoreapp3.1\Server Dashboard Socket.pdb
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
{
|
||||||
|
"format": 1,
|
||||||
|
"restore": {
|
||||||
|
"C:\\Users\\Crylia\\Documents\\Git\\Server Dashboard\\Server Dashboard Socket\\Server Dashboard Socket.csproj": {}
|
||||||
|
},
|
||||||
|
"projects": {
|
||||||
|
"C:\\Users\\Crylia\\Documents\\Git\\Server Dashboard\\Server Dashboard Socket\\Server Dashboard Socket.csproj": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"restore": {
|
||||||
|
"projectUniqueName": "C:\\Users\\Crylia\\Documents\\Git\\Server Dashboard\\Server Dashboard Socket\\Server Dashboard Socket.csproj",
|
||||||
|
"projectName": "Server Dashboard Socket",
|
||||||
|
"projectPath": "C:\\Users\\Crylia\\Documents\\Git\\Server Dashboard\\Server Dashboard Socket\\Server Dashboard Socket.csproj",
|
||||||
|
"packagesPath": "C:\\Users\\Crylia\\.nuget\\packages\\",
|
||||||
|
"outputPath": "C:\\Users\\Crylia\\Documents\\Git\\Server Dashboard\\Server Dashboard Socket\\obj\\",
|
||||||
|
"projectStyle": "PackageReference",
|
||||||
|
"fallbackFolders": [
|
||||||
|
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
|
||||||
|
],
|
||||||
|
"configFilePaths": [
|
||||||
|
"C:\\Users\\Crylia\\AppData\\Roaming\\NuGet\\NuGet.Config",
|
||||||
|
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
|
||||||
|
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
|
||||||
|
],
|
||||||
|
"originalTargetFrameworks": [
|
||||||
|
"netcoreapp3.1"
|
||||||
|
],
|
||||||
|
"sources": {
|
||||||
|
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
|
||||||
|
"https://api.nuget.org/v3/index.json": {}
|
||||||
|
},
|
||||||
|
"frameworks": {
|
||||||
|
"netcoreapp3.1": {
|
||||||
|
"targetAlias": "netcoreapp3.1",
|
||||||
|
"projectReferences": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"warningProperties": {
|
||||||
|
"warnAsError": [
|
||||||
|
"NU1605"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"frameworks": {
|
||||||
|
"netcoreapp3.1": {
|
||||||
|
"targetAlias": "netcoreapp3.1",
|
||||||
|
"imports": [
|
||||||
|
"net461",
|
||||||
|
"net462",
|
||||||
|
"net47",
|
||||||
|
"net471",
|
||||||
|
"net472",
|
||||||
|
"net48"
|
||||||
|
],
|
||||||
|
"assetTargetFallback": true,
|
||||||
|
"warn": true,
|
||||||
|
"frameworkReferences": {
|
||||||
|
"Microsoft.NETCore.App": {
|
||||||
|
"privateAssets": "all"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\5.0.201\\RuntimeIdentifierGraph.json"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||||
|
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||||
|
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
|
||||||
|
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
|
||||||
|
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
|
||||||
|
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
|
||||||
|
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\Crylia\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages</NuGetPackageFolders>
|
||||||
|
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
|
||||||
|
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">5.9.1</NuGetToolVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||||
|
<SourceRoot Include="C:\Users\Crylia\.nuget\packages\" />
|
||||||
|
<SourceRoot Include="C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages\" />
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
|
||||||
|
</PropertyGroup>
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||||
|
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
|
||||||
|
</PropertyGroup>
|
||||||
|
</Project>
|
||||||
72
Server Dashboard Socket/obj/project.assets.json
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
{
|
||||||
|
"version": 3,
|
||||||
|
"targets": {
|
||||||
|
".NETCoreApp,Version=v3.1": {}
|
||||||
|
},
|
||||||
|
"libraries": {},
|
||||||
|
"projectFileDependencyGroups": {
|
||||||
|
".NETCoreApp,Version=v3.1": []
|
||||||
|
},
|
||||||
|
"packageFolders": {
|
||||||
|
"C:\\Users\\Crylia\\.nuget\\packages\\": {},
|
||||||
|
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {}
|
||||||
|
},
|
||||||
|
"project": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"restore": {
|
||||||
|
"projectUniqueName": "C:\\Users\\Crylia\\Documents\\Git\\Server Dashboard\\Server Dashboard Socket\\Server Dashboard Socket.csproj",
|
||||||
|
"projectName": "Server Dashboard Socket",
|
||||||
|
"projectPath": "C:\\Users\\Crylia\\Documents\\Git\\Server Dashboard\\Server Dashboard Socket\\Server Dashboard Socket.csproj",
|
||||||
|
"packagesPath": "C:\\Users\\Crylia\\.nuget\\packages\\",
|
||||||
|
"outputPath": "C:\\Users\\Crylia\\Documents\\Git\\Server Dashboard\\Server Dashboard Socket\\obj\\",
|
||||||
|
"projectStyle": "PackageReference",
|
||||||
|
"fallbackFolders": [
|
||||||
|
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
|
||||||
|
],
|
||||||
|
"configFilePaths": [
|
||||||
|
"C:\\Users\\Crylia\\AppData\\Roaming\\NuGet\\NuGet.Config",
|
||||||
|
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
|
||||||
|
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
|
||||||
|
],
|
||||||
|
"originalTargetFrameworks": [
|
||||||
|
"netcoreapp3.1"
|
||||||
|
],
|
||||||
|
"sources": {
|
||||||
|
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
|
||||||
|
"https://api.nuget.org/v3/index.json": {}
|
||||||
|
},
|
||||||
|
"frameworks": {
|
||||||
|
"netcoreapp3.1": {
|
||||||
|
"targetAlias": "netcoreapp3.1",
|
||||||
|
"projectReferences": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"warningProperties": {
|
||||||
|
"warnAsError": [
|
||||||
|
"NU1605"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"frameworks": {
|
||||||
|
"netcoreapp3.1": {
|
||||||
|
"targetAlias": "netcoreapp3.1",
|
||||||
|
"imports": [
|
||||||
|
"net461",
|
||||||
|
"net462",
|
||||||
|
"net47",
|
||||||
|
"net471",
|
||||||
|
"net472",
|
||||||
|
"net48"
|
||||||
|
],
|
||||||
|
"assetTargetFallback": true,
|
||||||
|
"warn": true,
|
||||||
|
"frameworkReferences": {
|
||||||
|
"Microsoft.NETCore.App": {
|
||||||
|
"privateAssets": "all"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\5.0.201\\RuntimeIdentifierGraph.json"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
8
Server Dashboard Socket/obj/project.nuget.cache
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"version": 2,
|
||||||
|
"dgSpecHash": "TThsag+xtSY7ctBsPwAhUX7uLjuhld1ipCW1nP987HRzxMfYvczqncYfdca/U4IfbiniWP3eJFeh7yA09+/gGA==",
|
||||||
|
"success": true,
|
||||||
|
"projectFilePath": "C:\\Users\\Crylia\\Documents\\Git\\Server Dashboard\\Server Dashboard Socket\\Server Dashboard Socket.csproj",
|
||||||
|
"expectedPackageFiles": [],
|
||||||
|
"logs": []
|
||||||
|
}
|
||||||
@@ -3,7 +3,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00
|
|||||||
# Visual Studio Version 16
|
# Visual Studio Version 16
|
||||||
VisualStudioVersion = 16.0.31129.286
|
VisualStudioVersion = 16.0.31129.286
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Server Dashboard", "Server Dashboard\Server Dashboard.csproj", "{1183B3CA-7F78-4749-B571-0BCF52EA4FCD}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Server Dashboard", "Server Dashboard\Server Dashboard.csproj", "{1183B3CA-7F78-4749-B571-0BCF52EA4FCD}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Server Dashboard Socket", "Server Dashboard Socket\Server Dashboard Socket.csproj", "{426A7389-BB4B-498B-B405-3ADCB0353A80}"
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
@@ -15,6 +17,10 @@ Global
|
|||||||
{1183B3CA-7F78-4749-B571-0BCF52EA4FCD}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{1183B3CA-7F78-4749-B571-0BCF52EA4FCD}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{1183B3CA-7F78-4749-B571-0BCF52EA4FCD}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{1183B3CA-7F78-4749-B571-0BCF52EA4FCD}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{1183B3CA-7F78-4749-B571-0BCF52EA4FCD}.Release|Any CPU.Build.0 = Release|Any CPU
|
{1183B3CA-7F78-4749-B571-0BCF52EA4FCD}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{426A7389-BB4B-498B-B405-3ADCB0353A80}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{426A7389-BB4B-498B-B405-3ADCB0353A80}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{426A7389-BB4B-498B-B405-3ADCB0353A80}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{426A7389-BB4B-498B-B405-3ADCB0353A80}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|||||||
21
Server Dashboard/App.config
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<configuration>
|
||||||
|
<configSections>
|
||||||
|
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System.Configuration.ConfigurationManager, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51" >
|
||||||
|
<section name="Server_Dashboard.Properties.Settings" type="System.Configuration.ClientSettingsSection, System.Configuration.ConfigurationManager, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
|
||||||
|
</sectionGroup>
|
||||||
|
</configSections>
|
||||||
|
<connectionStrings>
|
||||||
|
<add name="ServerDashboardDB" connectionString="Server=localhost;Database=ServerDashboardDB;User Id=SA;Password=Me262HG3;"/>
|
||||||
|
</connectionStrings>
|
||||||
|
<startup>
|
||||||
|
<supportedRuntime version="v3.1.13" sku=".NETFramework,Version=v4.7.2" />
|
||||||
|
</startup>
|
||||||
|
<userSettings>
|
||||||
|
<Server_Dashboard.Properties.Settings>
|
||||||
|
<setting name="Username" serializeAs="String">
|
||||||
|
<value />
|
||||||
|
</setting>
|
||||||
|
</Server_Dashboard.Properties.Settings>
|
||||||
|
</userSettings>
|
||||||
|
</configuration>
|
||||||
@@ -2,124 +2,354 @@
|
|||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:local="clr-namespace:Server_Dashboard"
|
xmlns:local="clr-namespace:Server_Dashboard"
|
||||||
StartupUri="MainWindow.xaml">
|
xmlns:views="clr-namespace:Server_Dashboard.Views.DashboardPages"
|
||||||
|
xmlns:modulescrud="clr-namespace:Server_Dashboard.Views.DashboardPages.ModuleCRUD"
|
||||||
|
StartupUri="LoginWindow.xaml">
|
||||||
<Application.Resources>
|
<Application.Resources>
|
||||||
|
|
||||||
<RadialGradientBrush x:Key="LoginBackground" GradientOrigin="0.5, 0.5" Center="0.5, 0.5">
|
<!--View Templates-->
|
||||||
<RadialGradientBrush.GradientStops>
|
<DataTemplate x:Key="MainDashboardView" DataType="{x:Type local:DashboardViewModel}">
|
||||||
<GradientStop Color="#2A2D30" Offset="1"/>
|
<views:MainDashboardPage/>
|
||||||
<GradientStop Color="#444C4E" Offset="0"/>
|
</DataTemplate>
|
||||||
</RadialGradientBrush.GradientStops>
|
<DataTemplate x:Key="CreateModuleView" DataType="{x:Type local:DashboardViewModel}">
|
||||||
</RadialGradientBrush>
|
<modulescrud:CreateModulePopup/>
|
||||||
|
</DataTemplate>
|
||||||
|
|
||||||
<SolidColorBrush x:Key="Background" Color="#141424"/>
|
<!--Visibility converter for the login inputs-->
|
||||||
<!--A700 Teal-->
|
<BooleanToVisibilityConverter x:Key="UserNameVisibillity"/>
|
||||||
<SolidColorBrush x:Key="Green" Color="#00BFA5"/>
|
<BooleanToVisibilityConverter x:Key="PasswordVisibillity"/>
|
||||||
<!--600 Light Blue-->
|
|
||||||
<SolidColorBrush x:Key="Blue" Color="#039BE5"/>
|
|
||||||
<!--800 Light Blue-->
|
|
||||||
<SolidColorBrush x:Key="PressedBlue" Color="#0277BD"/>
|
|
||||||
<!--500 Yellow-->
|
|
||||||
<SolidColorBrush x:Key="Yellow" Color="#FFEB3B"/>
|
|
||||||
<!--700 Yellow-->
|
|
||||||
<SolidColorBrush x:Key="PressedYellow" Color="#FBC02D"/>
|
|
||||||
|
|
||||||
<Style x:Key="loginButtonStyle" TargetType="Button">
|
<!--Fonts-->
|
||||||
<Setter Property="Background" Value="#25AEA6"/>
|
<FontFamily x:Key="Fontstyle" >Open Sans</FontFamily>
|
||||||
<Setter Property="Template">
|
<!--#region Colors-->
|
||||||
<Setter.Value>
|
<!--
|
||||||
<ControlTemplate TargetType="{x:Type Button}">
|
Material Rules:
|
||||||
<Border CornerRadius="4" Background="{TemplateBinding Background}">
|
Percentages:
|
||||||
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
4% = 0A
|
||||||
</Border>
|
8% = 14
|
||||||
</ControlTemplate>
|
10% = 19
|
||||||
</Setter.Value>
|
12% = 1E
|
||||||
</Setter>
|
24% = 3D
|
||||||
<Style.Triggers>
|
38% = 60
|
||||||
|
60% = 99
|
||||||
|
87% = DD
|
||||||
|
Button:
|
||||||
|
Enabled = Default
|
||||||
|
Hovered = Overlay 4%
|
||||||
|
Focused = Overlay 12% + Stroke Overlay Color 100%
|
||||||
|
Pressed = Ripple Overlay color 10%
|
||||||
|
Dragged = Overlay 8% + Shadow 08dp
|
||||||
|
-->
|
||||||
|
<!--Material Colors-->
|
||||||
|
<SolidColorBrush x:Key="BackgroundSurface_00dp" Color="#121212"/>
|
||||||
|
<SolidColorBrush x:Key="BackgroundSurface_01dp" Color="#1D1D1D"/>
|
||||||
|
<SolidColorBrush x:Key="BackgroundSurface_02dp" Color="#202020"/>
|
||||||
|
<SolidColorBrush x:Key="BackgroundSurface_03dp" Color="#252525"/>
|
||||||
|
<SolidColorBrush x:Key="BackgroundSurface_04dp" Color="#262626"/>
|
||||||
|
<SolidColorBrush x:Key="BackgroundSurface_06dp" Color="#2C2C2C"/>
|
||||||
|
<SolidColorBrush x:Key="BackgroundSurface_08dp" Color="#2D2D2D"/>
|
||||||
|
<SolidColorBrush x:Key="BackgroundSurface_12dp" Color="#323232"/>
|
||||||
|
<SolidColorBrush x:Key="BackgroundSurface_16dp" Color="#343434"/>
|
||||||
|
<SolidColorBrush x:Key="BackgroundSurface_24dp" Color="#363636"/>
|
||||||
|
<SolidColorBrush x:Key="OnPrimarySecondaryError" Color="#000000"/>
|
||||||
|
<SolidColorBrush x:Key="White" Color="#FFFFFFFF"/><!--0%-->
|
||||||
|
<SolidColorBrush x:Key="White12" Color="#1EFFFFFF"/><!--12%-->
|
||||||
|
<SolidColorBrush x:Key="White38" Color="#60FFFFFF"/><!--38%-->
|
||||||
|
<SolidColorBrush x:Key="White60" Color="#99FFFFFF"/><!--60%-->
|
||||||
|
<SolidColorBrush x:Key="White87" Color="#DEFFFFFF"/><!--87%-->
|
||||||
|
<SolidColorBrush x:Key="ErrorRed" Color="#CF6679"/>
|
||||||
|
|
||||||
</Style.Triggers>
|
<!--Indigo-->
|
||||||
</Style>
|
<SolidColorBrush x:Key="Indigo_50 " Color="#E8EAF6"/>
|
||||||
|
<SolidColorBrush x:Key="Indigo_100" Color="#C5CAE9"/>
|
||||||
|
<SolidColorBrush x:Key="Indigo_200" Color="#9FA8DA"/>
|
||||||
|
<SolidColorBrush x:Key="Indigo_300" Color="#7986CB"/>
|
||||||
|
<SolidColorBrush x:Key="Indigo_400" Color="#5C6BC0"/>
|
||||||
|
<SolidColorBrush x:Key="Indigo_500" Color="#3F51B5"/>
|
||||||
|
<SolidColorBrush x:Key="Indigo_600" Color="#3949AB"/>
|
||||||
|
<SolidColorBrush x:Key="Indigo_700" Color="#303F9F"/>
|
||||||
|
<SolidColorBrush x:Key="Indigo_800" Color="#283593"/>
|
||||||
|
<SolidColorBrush x:Key="Indigo_900" Color="#1A237E"/>
|
||||||
|
<SolidColorBrush x:Key="Indigo_A100" Color="#8C9EFF"/>
|
||||||
|
<SolidColorBrush x:Key="Indigo_A200" Color="#536DFE"/>
|
||||||
|
<SolidColorBrush x:Key="Indigo_A400" Color="#3D5AFE"/>
|
||||||
|
<SolidColorBrush x:Key="Indigo_A700" Color="#304FFE"/>
|
||||||
|
|
||||||
<Style x:Key="LoginViewBorder" TargetType="{x:Type Border}">
|
<!--Yellow-->
|
||||||
<Setter Property="BorderBrush" Value="#25AEA6"/>
|
<SolidColorBrush x:Key="Yellow_50 " Color="#FFFDE7"/>
|
||||||
<Setter Property="CornerRadius" Value="4"/>
|
<SolidColorBrush x:Key="Yellow_100" Color="#FFF9C4"/>
|
||||||
<Setter Property="BorderThickness" Value="2"/>
|
<SolidColorBrush x:Key="Yellow_200" Color="#FFF59D"/>
|
||||||
<Setter Property="Background" Value="{StaticResource LoginBackground}"/>
|
<SolidColorBrush x:Key="Yellow_300" Color="#FFF176"/>
|
||||||
</Style>
|
<SolidColorBrush x:Key="Yellow_400" Color="#FFEE58"/>
|
||||||
|
<SolidColorBrush x:Key="Yellow_500" Color="#FFEB3B"/>
|
||||||
|
<SolidColorBrush x:Key="Yellow_600" Color="#FDD835"/>
|
||||||
|
<SolidColorBrush x:Key="Yellow_700" Color="#FBC02D"/>
|
||||||
|
<SolidColorBrush x:Key="Yellow_800" Color="#F9A825"/>
|
||||||
|
<SolidColorBrush x:Key="Yellow_900" Color="#F57F17"/>
|
||||||
|
<SolidColorBrush x:Key="Yellow_A100" Color="#FFFF8D"/>
|
||||||
|
<SolidColorBrush x:Key="Yellow_A200" Color="#FFFF00"/>
|
||||||
|
<SolidColorBrush x:Key="Yellow_A400" Color="#FFEA00"/>
|
||||||
|
<SolidColorBrush x:Key="Yellow_A700" Color="#FFD600"/>
|
||||||
|
|
||||||
<Style x:Key="LoginFormsBorder" TargetType="{x:Type Border}">
|
<!--Deep Purple-->
|
||||||
<Setter Property="BorderBrush" Value="#1B1C20"/>
|
<SolidColorBrush x:Key="DeepPurple_50 " Color="#EDE7F6"/>
|
||||||
<Setter Property="CornerRadius" Value="4"/>
|
<SolidColorBrush x:Key="DeepPurple_100" Color="#D1C4E9"/>
|
||||||
<Setter Property="BorderThickness" Value="1"/>
|
<SolidColorBrush x:Key="DeepPurple_200" Color="#B39DDB"/><!--Primary-->
|
||||||
<Setter Property="Width" Value="350"/>
|
<SolidColorBrush x:Key="DeepPurple_300" Color="#9575CD"/>
|
||||||
<Setter Property="Height" Value="60"/>
|
<SolidColorBrush x:Key="DeepPurple_400" Color="#7E57C2"/>
|
||||||
<Setter Property="Background" Value="#1B1C20"/>
|
<SolidColorBrush x:Key="DeepPurple_500" Color="#673AB7"/><!--Primary Variant-->
|
||||||
</Style>
|
<SolidColorBrush x:Key="DeepPurple_600" Color="#5E35B1"/>
|
||||||
|
<SolidColorBrush x:Key="DeepPurple_700" Color="#512DA8"/>
|
||||||
|
<SolidColorBrush x:Key="DeepPurple_800" Color="#4527A0"/>
|
||||||
|
<SolidColorBrush x:Key="DeepPurple_900" Color="#311B92"/>
|
||||||
|
<SolidColorBrush x:Key="DeepPurple_A100" Color="#B388FF"/>
|
||||||
|
<SolidColorBrush x:Key="DeepPurple_A200" Color="#7C4DFF"/>
|
||||||
|
<SolidColorBrush x:Key="DeepPurple_A400" Color="#651FFF"/>
|
||||||
|
<SolidColorBrush x:Key="DeepPurple_A700" Color="#6200EA"/>
|
||||||
|
|
||||||
<Style x:Name="LoginFormHint" x:Key="LoginFormTooltip" TargetType="{x:Type Label}">
|
<!--Deep Purple-->
|
||||||
<Setter Property="Foreground" Value="#40AAAAAA"/>
|
<SolidColorBrush x:Key="Teal_50 " Color="#E0F2F1"/>
|
||||||
<Setter Property="FontFamily" Value="Arial"/>
|
<SolidColorBrush x:Key="Teal_100" Color="#B2DFDB"/>
|
||||||
|
<SolidColorBrush x:Key="Teal_200" Color="#80CBC4"/>
|
||||||
|
<SolidColorBrush x:Key="Teal_300" Color="#4DB6AC"/>
|
||||||
|
<SolidColorBrush x:Key="Teal_400" Color="#26A69A"/>
|
||||||
|
<SolidColorBrush x:Key="Teal_500" Color="#009688"/>
|
||||||
|
<SolidColorBrush x:Key="Teal_600" Color="#00897B"/>
|
||||||
|
<SolidColorBrush x:Key="Teal_700" Color="#00796B"/>
|
||||||
|
<SolidColorBrush x:Key="Teal_800" Color="#00695C"/>
|
||||||
|
<SolidColorBrush x:Key="Teal_900" Color="#004D40"/>
|
||||||
|
<SolidColorBrush x:Key="Teal_A100" Color="#A7FFEB"/>
|
||||||
|
<SolidColorBrush x:Key="Teal_A200" Color="#64FFDA"/>
|
||||||
|
<SolidColorBrush x:Key="Teal_A400" Color="#1DE9B6"/>
|
||||||
|
<SolidColorBrush x:Key="Teal_A700" Color="#00BFA5"/>
|
||||||
|
<!--#endregion-->
|
||||||
|
|
||||||
|
<!--=================-->
|
||||||
|
<!--=DEFAULT DESIGNS=-->
|
||||||
|
<!--=================-->
|
||||||
|
|
||||||
|
<!--Textblock default design-->
|
||||||
|
<Style TargetType="{x:Type TextBlock}">
|
||||||
<Setter Property="FontSize" Value="20"/>
|
<Setter Property="FontSize" Value="20"/>
|
||||||
<Setter Property="VerticalAlignment" Value="Center"/>
|
<Setter Property="Foreground" Value="{StaticResource White}"/>
|
||||||
<Setter Property="HorizontalAlignment" Value="Left"/>
|
<Setter Property="FontFamily" Value="{StaticResource Fontstyle}"/>
|
||||||
</Style>
|
</Style>
|
||||||
|
|
||||||
<Style x:Key="LoginFormsInputBorder" TargetType="{x:Type Border}">
|
<!--Button default design-->
|
||||||
<Setter Property="BorderBrush" Value="#1B1C20"/>
|
<Style TargetType="{x:Type Button}">
|
||||||
<Setter Property="BorderThickness" Value="1"/>
|
|
||||||
</Style>
|
|
||||||
|
|
||||||
<Style x:Key="LoginFormInput" TargetType="{x:Type TextBox}">
|
|
||||||
<Setter Property="CaretBrush" Value="#BBBBBB"/>
|
|
||||||
<Setter Property="VerticalContentAlignment" Value="Center"/>
|
|
||||||
<Setter Property="FontFamily" Value="Arial"/>
|
|
||||||
<Setter Property="FontSize" Value="20"/>
|
|
||||||
<Setter Property="Foreground" Value="#878787"/>
|
|
||||||
<Setter Property="VerticalAlignment" Value="Center"/>
|
|
||||||
<Setter Property="HorizontalAlignment" Value="Center"/>
|
|
||||||
<Setter Property="Width" Value="290"/>
|
|
||||||
<Setter Property="Height" Value="60"/>
|
|
||||||
<Setter Property="BorderBrush" Value="Transparent"/>
|
|
||||||
<Setter Property="Background" Value="Transparent"/>
|
|
||||||
</Style>
|
|
||||||
|
|
||||||
<Style x:Key="LoginFormPassword" TargetType="{x:Type PasswordBox}">
|
|
||||||
<Setter Property="PasswordChar" Value="*"/>
|
|
||||||
<Setter Property="CaretBrush" Value="#BBBBBB"/>
|
|
||||||
<Setter Property="VerticalContentAlignment" Value="Center"/>
|
|
||||||
<Setter Property="FontFamily" Value="Arial"/>
|
|
||||||
<Setter Property="FontSize" Value="20"/>
|
|
||||||
<Setter Property="Foreground" Value="#878787"/>
|
|
||||||
<Setter Property="VerticalAlignment" Value="Center"/>
|
|
||||||
<Setter Property="HorizontalAlignment" Value="Center"/>
|
|
||||||
<Setter Property="Width" Value="290"/>
|
|
||||||
<Setter Property="Height" Value="60"/>
|
|
||||||
<Setter Property="BorderBrush" Value="Transparent"/>
|
|
||||||
<Setter Property="Background" Value="Transparent"/>
|
|
||||||
</Style>
|
|
||||||
|
|
||||||
<Style x:Key="LoginFormButton" TargetType="{x:Type Button}">
|
|
||||||
<Setter Property="Width" Value="350"/>
|
|
||||||
<Setter Property="Height" Value="60"/>
|
|
||||||
<Setter Property="Background" Value="#25AEA6"/>
|
|
||||||
<Setter Property="BorderBrush" Value="Transparent"/>
|
|
||||||
<Setter Property="BorderThickness" Value="0"/>
|
|
||||||
<Setter Property="Foreground" Value="{StaticResource Background}"/>
|
|
||||||
<Setter Property="FontSize" Value="25"/>
|
|
||||||
<Setter Property="FontFamily" Value="Arial"/>
|
|
||||||
<Setter Property="Cursor" Value="Hand"/>
|
<Setter Property="Cursor" Value="Hand"/>
|
||||||
|
<Setter Property="Background" Value="{StaticResource BackgroundSurface_01dp}"/>
|
||||||
|
<Setter Property="FontSize" Value="20"/>
|
||||||
|
<Setter Property="FontFamily" Value="{StaticResource Fontstyle}"/>
|
||||||
|
<Setter Property="Foreground" Value="{StaticResource DeepPurple_A100}"/>
|
||||||
|
<Setter Property="BorderThickness" Value="2"/>
|
||||||
|
<Setter Property="BorderBrush" Value="Transparent"/>
|
||||||
|
<Setter Property="SnapsToDevicePixels" Value="True"/>
|
||||||
<Setter Property="Template">
|
<Setter Property="Template">
|
||||||
<Setter.Value>
|
<Setter.Value>
|
||||||
<ControlTemplate TargetType="{x:Type Button}">
|
<ControlTemplate TargetType="{x:Type Button}">
|
||||||
<Border CornerRadius="4" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
|
<Border x:Name="Border" CornerRadius="5" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="0">
|
||||||
<TextBlock TextAlignment="Center" Padding="5" TextWrapping="Wrap" Text="{TemplateBinding Content}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
|
<Border.Effect>
|
||||||
|
<DropShadowEffect Direction="0" ShadowDepth="0" BlurRadius="5"/>
|
||||||
|
</Border.Effect>
|
||||||
|
<Border x:Name="BackgroundOverlay" CornerRadius="4" Background="Transparent" BorderThickness="{TemplateBinding BorderThickness}">
|
||||||
|
<Border.BorderBrush>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.12"/>
|
||||||
|
</Border.BorderBrush>
|
||||||
|
<TextBlock FontSize="{TemplateBinding FontSize}" TextAlignment="Center" Padding="0" TextWrapping="Wrap" Text="{TemplateBinding Content}" Foreground="{TemplateBinding Foreground}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
|
||||||
|
</Border>
|
||||||
</Border>
|
</Border>
|
||||||
<ControlTemplate.Triggers>
|
<ControlTemplate.Triggers>
|
||||||
<Trigger Property="IsMouseOver" Value="True">
|
<Trigger Property="IsMouseOver" Value="True">
|
||||||
<Setter Property="Background" Value="#35bEb6"/>
|
<Setter TargetName="BackgroundOverlay" Property="Background">
|
||||||
|
<Setter.Value>
|
||||||
|
<SolidColorBrush Color="#B388FF" Opacity="0.04"/>
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsFocused" Value="True">
|
||||||
</Trigger>
|
</Trigger>
|
||||||
<Trigger Property="IsPressed" Value="True">
|
<Trigger Property="IsPressed" Value="True">
|
||||||
<Setter Property="Background" Value="#159E96"/>
|
<Setter TargetName="BackgroundOverlay" Property="Background">
|
||||||
|
<Setter.Value>
|
||||||
|
<SolidColorBrush Color="#B388FF" Opacity="0.12"/>
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>
|
||||||
|
<Setter TargetName="BackgroundOverlay" Property="BorderBrush">
|
||||||
|
<Setter.Value>
|
||||||
|
<SolidColorBrush Color="#B388FF" Opacity=".87"/>
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>
|
||||||
|
</Trigger>
|
||||||
|
</ControlTemplate.Triggers>
|
||||||
|
</ControlTemplate>
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<!--Textbox default design-->
|
||||||
|
<Style TargetType="{x:Type TextBox}">
|
||||||
|
<Setter Property="CaretBrush">
|
||||||
|
<Setter.Value>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.64"/>
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>
|
||||||
|
<Setter Property="VerticalContentAlignment" Value="Center"/>
|
||||||
|
<Setter Property="FontFamily" Value="{StaticResource Fontstyle}"/>
|
||||||
|
<Setter Property="FontSize" Value="20"/>
|
||||||
|
<Setter Property="SnapsToDevicePixels" Value="True"/>
|
||||||
|
<Setter Property="Foreground">
|
||||||
|
<Setter.Value>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.64"/>
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>
|
||||||
|
<Setter Property="Background" Value="{StaticResource BackgroundSurface_01dp}"/>
|
||||||
|
<Setter Property="BorderThickness" Value="0"/>
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<!--Passwordbox default design-->
|
||||||
|
<Style TargetType="{x:Type PasswordBox}">
|
||||||
|
<Setter Property="PasswordChar" Value="*"/>
|
||||||
|
<Setter Property="CaretBrush">
|
||||||
|
<Setter.Value>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.64"/>
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>
|
||||||
|
<Setter Property="VerticalContentAlignment" Value="Center"/>
|
||||||
|
<Setter Property="FontFamily" Value="Arial"/>
|
||||||
|
<Setter Property="FontSize" Value="20"/>
|
||||||
|
<Setter Property="SnapsToDevicePixels" Value="True"/>
|
||||||
|
<Setter Property="Foreground">
|
||||||
|
<Setter.Value>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.64"/>
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>
|
||||||
|
<Setter Property="VerticalAlignment" Value="Center"/>
|
||||||
|
<Setter Property="HorizontalAlignment" Value="Center"/>
|
||||||
|
<Setter Property="BorderBrush">
|
||||||
|
<Setter.Value>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.12"/>
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>
|
||||||
|
<Setter Property="Background" Value="{StaticResource BackgroundSurface_01dp}"/>
|
||||||
|
<Setter Property="BorderThickness" Value="0"/>
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<!--Checkbox default design-->
|
||||||
|
<Style TargetType="{x:Type CheckBox}">
|
||||||
|
<Setter Property="SnapsToDevicePixels" Value="true"/>
|
||||||
|
<Setter Property="OverridesDefaultStyle" Value="true"/>
|
||||||
|
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
|
||||||
|
<Setter Property="Foreground" Value="White"/>
|
||||||
|
<Setter Property="SnapsToDevicePixels" Value="True"/>
|
||||||
|
<Setter Property="Cursor" Value="Hand"/>
|
||||||
|
<Setter Property="Effect">
|
||||||
|
<Setter.Value>
|
||||||
|
<DropShadowEffect Direction="0" ShadowDepth="0" BlurRadius="5"/>
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>
|
||||||
|
<Setter Property="Template">
|
||||||
|
<Setter.Value>
|
||||||
|
<ControlTemplate TargetType="CheckBox">
|
||||||
|
<BulletDecorator Background="Transparent">
|
||||||
|
<BulletDecorator.Bullet>
|
||||||
|
<Border Width="20" Height="20" CornerRadius="2" Background="#FF1B1B1B" BorderThickness="0">
|
||||||
|
<Border x:Name="Border" Width="20" Height="20" CornerRadius="2" Background="Transparent" BorderThickness="0">
|
||||||
|
<Path Width="9" Height="9" x:Name="CheckMark" SnapsToDevicePixels="False" Stroke="{StaticResource DeepPurple_A100}" StrokeThickness="2" Data="M 0 4 L 3 8 8 0" />
|
||||||
|
</Border>
|
||||||
|
</Border>
|
||||||
|
</BulletDecorator.Bullet>
|
||||||
|
<ContentPresenter Margin="4,0,0,0" VerticalAlignment="Center" HorizontalAlignment="Left" RecognizesAccessKey="True"/>
|
||||||
|
</BulletDecorator>
|
||||||
|
<ControlTemplate.Triggers>
|
||||||
|
<Trigger Property="IsChecked" Value="false">
|
||||||
|
<Setter TargetName="CheckMark" Property="Visibility" Value="Collapsed"/>
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsChecked" Value="{x:Null}">
|
||||||
|
<Setter TargetName="CheckMark" Property="Data" Value="M 0 20 L 20 0" />
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsMouseOver" Value="True">
|
||||||
|
<Setter TargetName="Border" Property="Background">
|
||||||
|
<Setter.Value>
|
||||||
|
<SolidColorBrush Color="#B388FF" Opacity="0.04"/>
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsEnabled" Value="false">
|
||||||
|
<Setter TargetName="CheckMark" Property="Stroke" Value="#FF6C6C6C"/>
|
||||||
|
<Setter Property="Foreground" Value="Gray"/>
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsPressed" Value="True">
|
||||||
|
<Setter TargetName="Border" Property="Background">
|
||||||
|
<Setter.Value>
|
||||||
|
<SolidColorBrush Color="#B388FF" Opacity="0.12"/>
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>
|
||||||
|
</Trigger>
|
||||||
|
</ControlTemplate.Triggers>
|
||||||
|
</ControlTemplate>
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<!--Hyperlink default design-->
|
||||||
|
<Style TargetType="{x:Type Hyperlink}">
|
||||||
|
<Setter Property="TextDecorations" Value="None"/>
|
||||||
|
<Setter Property="Cursor" Value="Hand"/>
|
||||||
|
<Setter Property="Foreground">
|
||||||
|
<Setter.Value>
|
||||||
|
<SolidColorBrush Color="#64FFDA" Opacity="0.64"/>
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>
|
||||||
|
<Style.Triggers>
|
||||||
|
<Trigger Property="IsMouseOver" Value="True">
|
||||||
|
<Setter Property="Foreground">
|
||||||
|
<Setter.Value>
|
||||||
|
<SolidColorBrush Color="#64FFDA" Opacity="0.87"/>
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>
|
||||||
|
</Trigger>
|
||||||
|
</Style.Triggers>
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<!--Border default design (Makes text rendering in it crystal clear)-->
|
||||||
|
<Style TargetType="Border">
|
||||||
|
<Setter Property="SnapsToDevicePixels" Value="True"/>
|
||||||
|
<Setter Property="UseLayoutRounding" Value="True"/>
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<!--Grid default design (Makes text rendering in it crystal clear)-->
|
||||||
|
<Style TargetType="Grid">
|
||||||
|
<Setter Property="SnapsToDevicePixels" Value="True"/>
|
||||||
|
<Setter Property="UseLayoutRounding" Value="True"/>
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<!--================-->
|
||||||
|
<!--=CUSTOM DESIGNS=-->
|
||||||
|
<!--================-->
|
||||||
|
|
||||||
|
<!--Close button design-->
|
||||||
|
<Style x:Key="CloseButton" TargetType="{x:Type Button}">
|
||||||
|
<Setter Property="Cursor" Value="Hand"/>
|
||||||
|
<Setter Property="Background" Value="Transparent"/>
|
||||||
|
<Setter Property="SnapsToDevicePixels" Value="True"/>
|
||||||
|
<Setter Property="Foreground">
|
||||||
|
<Setter.Value>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.12"/>
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>
|
||||||
|
<Setter Property="BorderThickness" Value="0"/>
|
||||||
|
<Setter Property="FontSize" Value="20"/>
|
||||||
|
<Setter Property="Template">
|
||||||
|
<Setter.Value>
|
||||||
|
<ControlTemplate TargetType="{x:Type Button}">
|
||||||
|
<Border x:Name="Border" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
|
||||||
|
<TextBlock TextAlignment="Center" Padding="0" TextWrapping="Wrap" Text="{TemplateBinding Content}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
|
||||||
|
</Border>
|
||||||
|
<ControlTemplate.Triggers>
|
||||||
|
<Trigger Property="IsMouseOver" Value="True">
|
||||||
|
<Setter Property="Background" Value="Red"/>
|
||||||
|
<Setter Property="Foreground" Value="{StaticResource BackgroundSurface_00dp}"/>
|
||||||
</Trigger>
|
</Trigger>
|
||||||
</ControlTemplate.Triggers>
|
</ControlTemplate.Triggers>
|
||||||
</ControlTemplate>
|
</ControlTemplate>
|
||||||
|
|||||||
BIN
Server Dashboard/Assets/Fonts/OpenSans/OpenSans-Bold.ttf
Normal file
BIN
Server Dashboard/Assets/Fonts/OpenSans/OpenSans-BoldItalic.ttf
Normal file
BIN
Server Dashboard/Assets/Fonts/OpenSans/OpenSans-ExtraBold.ttf
Normal file
BIN
Server Dashboard/Assets/Fonts/OpenSans/OpenSans-Italic.ttf
Normal file
BIN
Server Dashboard/Assets/Fonts/OpenSans/OpenSans-Light.ttf
Normal file
BIN
Server Dashboard/Assets/Fonts/OpenSans/OpenSans-LightItalic.ttf
Normal file
BIN
Server Dashboard/Assets/Fonts/OpenSans/OpenSans-Regular.ttf
Normal file
BIN
Server Dashboard/Assets/Fonts/OpenSans/OpenSans-SemiBold.ttf
Normal file
BIN
Server Dashboard/Assets/Images/Docs.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
11
Server Dashboard/Assets/Images/Docs.svg
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
<svg width="48.00000000000001" height="48.00000000000001" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
|
||||||
|
<g>
|
||||||
|
<title>background</title>
|
||||||
|
<rect fill="none" id="canvas_background" height="402" width="582" y="-1" x="-1"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<title>Layer 1</title>
|
||||||
|
<path fill="#ffffff" id="svg_1" fill-rule="evenodd" d="m37,47l-26,0c-2.209,0 -4,-1.791 -4,-4l0,-38c0,-2.209 1.791,-4 4,-4l18.973,0c0.002,0 0.005,0 0.007,0l0.02,0l0,0c0.32,0 0.593,0.161 0.776,0.395l9.829,9.829c0.235,0.183 0.395,0.456 0.395,0.776l0,0l0,0.021c0,0.002 0,0.003 0,0.005l0,30.974c0,2.209 -1.791,4 -4,4zm-6,-42.619l0,6.619l6.619,0l-6.619,-6.619zm8,8.619l-9,0c-0.553,0 -1,-0.448 -1,-1l0,-9l-18,0c-1.104,0 -2,0.896 -2,2l0,38c0,1.104 0.896,2 2,2l26,0c1.104,0 2,-0.896 2,-2l0,-30zm-6,26l-18,0c-0.553,0 -1,-0.447 -1,-1c0,-0.552 0.447,-1 1,-1l18,0c0.553,0 1,0.448 1,1c0,0.553 -0.447,1 -1,1zm0,-8l-18,0c-0.553,0 -1,-0.447 -1,-1c0,-0.552 0.447,-1 1,-1l18,0c0.553,0 1,0.448 1,1c0,0.553 -0.447,1 -1,1zm0,-8l-18,0c-0.553,0 -1,-0.447 -1,-1c0,-0.552 0.447,-1 1,-1l18,0c0.553,0 1,0.448 1,1c0,0.553 -0.447,1 -1,1z" clip-rule="evenodd"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.1 KiB |
BIN
Server Dashboard/Assets/Images/DocsLight.png
Normal file
|
After Width: | Height: | Size: 7.6 KiB |
483
Server Dashboard/Assets/Images/GitHub-Mark.svg
Normal file
@@ -0,0 +1,483 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
version="1.1"
|
||||||
|
id="svg2"
|
||||||
|
xml:space="preserve"
|
||||||
|
width="707.96399"
|
||||||
|
height="735.98132"
|
||||||
|
viewBox="0 0 707.96399 735.98132"
|
||||||
|
sodipodi:docname="GitHub-Mark.ai"><metadata
|
||||||
|
id="metadata8"><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><defs
|
||||||
|
id="defs6"><clipPath
|
||||||
|
clipPathUnits="userSpaceOnUse"
|
||||||
|
id="clipPath20"><path
|
||||||
|
d="M 0,551.986 H 530.973 V 0 H 0 Z"
|
||||||
|
id="path18" /></clipPath></defs><sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="640"
|
||||||
|
inkscape:window-height="480"
|
||||||
|
id="namedview4" /><g
|
||||||
|
id="g10"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
inkscape:label="GitHub-Mark"
|
||||||
|
transform="matrix(1.3333333,0,0,-1.3333333,0,735.98133)"><path
|
||||||
|
d="M 0,0 H 530.973 V 275.986 H 0 Z"
|
||||||
|
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path12" /><g
|
||||||
|
id="g14"><g
|
||||||
|
id="g16"
|
||||||
|
clip-path="url(#clipPath20)"><g
|
||||||
|
id="g22"
|
||||||
|
transform="translate(152.6083,444.5454)"><path
|
||||||
|
d="m 0,0 c -8.995,0 -16.288,-7.293 -16.288,-16.29 0,-7.197 4.667,-13.302 11.14,-15.457 0.815,-0.149 1.112,0.354 1.112,0.786 0,0.386 -0.014,1.411 -0.022,2.77 -4.531,-0.984 -5.487,2.184 -5.487,2.184 -0.741,1.881 -1.809,2.382 -1.809,2.382 -1.479,1.011 0.112,0.991 0.112,0.991 1.635,-0.116 2.495,-1.679 2.495,-1.679 1.453,-2.489 3.813,-1.77 4.741,-1.354 0.148,1.053 0.568,1.771 1.034,2.178 -3.617,0.411 -7.42,1.809 -7.42,8.051 0,1.778 0.635,3.232 1.677,4.371 -0.168,0.412 -0.727,2.068 0.159,4.311 0,0 1.368,0.438 4.48,-1.67 1.299,0.361 2.693,0.542 4.078,0.548 1.383,-0.006 2.777,-0.187 4.078,-0.548 3.11,2.108 4.475,1.67 4.475,1.67 0.889,-2.243 0.33,-3.899 0.162,-4.311 1.044,-1.139 1.675,-2.593 1.675,-4.371 0,-6.258 -3.809,-7.635 -7.438,-8.038 0.585,-0.503 1.106,-1.497 1.106,-3.017 0,-2.177 -0.02,-3.934 -0.02,-4.468 0,-0.436 0.293,-0.943 1.12,-0.784 6.468,2.159 11.131,8.26 11.131,15.455 C 16.291,-7.293 8.997,0 0,0"
|
||||||
|
style="fill:#1b1817;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||||
|
id="path24" /></g><g
|
||||||
|
id="g26"
|
||||||
|
transform="translate(350.6088,493.5547)"><path
|
||||||
|
d="m 0,0 c -33.347,0 -60.388,-27.035 -60.388,-60.388 0,-26.68 17.303,-49.316 41.297,-57.301 3.018,-0.559 4.126,1.31 4.126,2.905 0,1.439 -0.056,6.197 -0.082,11.243 -16.8,-3.653 -20.345,7.125 -20.345,7.125 -2.747,6.979 -6.705,8.836 -6.705,8.836 -5.479,3.748 0.413,3.671 0.413,3.671 6.064,-0.426 9.257,-6.224 9.257,-6.224 5.386,-9.231 14.127,-6.562 17.573,-5.019 0.543,3.902 2.107,6.567 3.834,8.075 -13.413,1.526 -27.513,6.705 -27.513,29.844 0,6.592 2.359,11.98 6.222,16.209 -0.627,1.521 -2.694,7.663 0.586,15.981 0,0 5.071,1.622 16.61,-6.191 4.817,1.338 9.983,2.009 15.115,2.033 5.132,-0.024 10.302,-0.695 15.128,-2.033 11.526,7.813 16.59,6.191 16.59,6.191 3.287,-8.318 1.22,-14.46 0.593,-15.981 3.872,-4.229 6.214,-9.617 6.214,-16.209 0,-23.195 -14.127,-28.301 -27.574,-29.796 2.166,-1.874 4.096,-5.549 4.096,-11.183 0,-8.08 -0.069,-14.583 -0.069,-16.572 0,-1.608 1.086,-3.49 4.147,-2.898 23.982,7.994 41.263,30.622 41.263,57.294 C 60.388,-27.035 33.351,0 0,0"
|
||||||
|
style="fill:#1b1817;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||||
|
id="path28" /></g><g
|
||||||
|
id="g30"
|
||||||
|
transform="translate(313.0932,406.8515)"><path
|
||||||
|
d="m 0,0 c -0.133,-0.301 -0.605,-0.391 -1.035,-0.185 -0.439,0.198 -0.684,0.607 -0.542,0.908 0.13,0.308 0.602,0.394 1.04,0.188 C -0.099,0.714 0.151,0.301 0,0"
|
||||||
|
style="fill:#1b1817;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path32" /></g><g
|
||||||
|
id="g34"
|
||||||
|
transform="translate(315.5395,404.123)"><path
|
||||||
|
d="M 0,0 C -0.288,-0.267 -0.852,-0.143 -1.233,0.279 -1.629,0.7 -1.702,1.264 -1.41,1.534 -1.113,1.801 -0.567,1.676 -0.172,1.255 0.224,0.829 0.301,0.271 0,0"
|
||||||
|
style="fill:#1b1817;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path36" /></g><g
|
||||||
|
id="g38"
|
||||||
|
transform="translate(317.9204,400.6455)"><path
|
||||||
|
d="M 0,0 C -0.37,-0.258 -0.976,-0.017 -1.35,0.52 -1.72,1.058 -1.72,1.702 -1.341,1.96 -0.967,2.218 -0.37,1.985 0.009,1.453 0.378,0.907 0.378,0.263 0,0"
|
||||||
|
style="fill:#1b1817;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path40" /></g><g
|
||||||
|
id="g42"
|
||||||
|
transform="translate(321.1821,397.2851)"><path
|
||||||
|
d="M 0,0 C -0.331,-0.365 -1.036,-0.267 -1.552,0.232 -2.08,0.718 -2.227,1.409 -1.896,1.774 -1.56,2.14 -0.851,2.037 -0.331,1.543 0.193,1.057 0.352,0.361 0,0"
|
||||||
|
style="fill:#1b1817;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path44" /></g><g
|
||||||
|
id="g46"
|
||||||
|
transform="translate(325.6821,395.334)"><path
|
||||||
|
d="m 0,0 c -0.147,-0.473 -0.825,-0.687 -1.509,-0.486 -0.683,0.207 -1.13,0.76 -0.992,1.238 0.142,0.476 0.824,0.7 1.513,0.485 C -0.306,1.031 0.142,0.481 0,0"
|
||||||
|
style="fill:#1b1817;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path48" /></g><g
|
||||||
|
id="g50"
|
||||||
|
transform="translate(330.6245,394.9726)"><path
|
||||||
|
d="m 0,0 c 0.017,-0.498 -0.563,-0.911 -1.281,-0.92 -0.722,-0.016 -1.307,0.387 -1.315,0.877 0,0.503 0.568,0.911 1.289,0.924 C -0.589,0.895 0,0.494 0,0"
|
||||||
|
style="fill:#1b1817;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path52" /></g><g
|
||||||
|
id="g54"
|
||||||
|
transform="translate(335.2231,395.7549)"><path
|
||||||
|
d="m 0,0 c 0.086,-0.485 -0.413,-0.984 -1.126,-1.117 -0.701,-0.129 -1.35,0.172 -1.439,0.653 -0.087,0.498 0.42,0.997 1.121,1.126 C -0.73,0.786 -0.091,0.494 0,0"
|
||||||
|
style="fill:#1b1817;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path56" /></g><g
|
||||||
|
id="g58"
|
||||||
|
transform="translate(224.8979,499.4882)"><path
|
||||||
|
d="M 0,0 V -0.5"
|
||||||
|
style="fill:none;stroke:#3a7fc3;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="path60" /></g><g
|
||||||
|
id="g62"
|
||||||
|
transform="translate(224.8979,496.9882)"><path
|
||||||
|
d="M 0,0 V -133.993"
|
||||||
|
style="fill:none;stroke:#3a7fc3;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:1, 2;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="path64" /></g><g
|
||||||
|
id="g66"
|
||||||
|
transform="translate(224.8979,361.9951)"><path
|
||||||
|
d="M 0,0 V -0.5"
|
||||||
|
style="fill:none;stroke:#3a7fc3;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="path68" /></g><g
|
||||||
|
id="g70"
|
||||||
|
transform="translate(133.2758,347.4795)"><path
|
||||||
|
d="m 0,0 c -0.38,0.276 -0.866,0.414 -1.458,0.414 -0.24,0 -0.476,-0.024 -0.708,-0.071 -0.232,-0.049 -0.438,-0.129 -0.618,-0.24 -0.18,-0.114 -0.324,-0.263 -0.432,-0.452 -0.108,-0.187 -0.162,-0.421 -0.162,-0.701 0,-0.264 0.078,-0.478 0.234,-0.642 0.156,-0.165 0.364,-0.298 0.624,-0.402 0.26,-0.104 0.554,-0.19 0.882,-0.259 0.328,-0.067 0.662,-0.141 1.002,-0.22 0.34,-0.08 0.674,-0.175 1.002,-0.284 C 0.694,-2.964 0.988,-3.11 1.248,-3.294 1.508,-3.478 1.716,-3.71 1.872,-3.989 2.028,-4.27 2.106,-4.622 2.106,-5.046 2.106,-5.502 2.004,-5.892 1.8,-6.216 1.596,-6.54 1.334,-6.804 1.014,-7.008 0.694,-7.212 0.336,-7.36 -0.06,-7.452 -0.456,-7.544 -0.85,-7.59 -1.242,-7.59 c -0.48,0 -0.934,0.06 -1.362,0.18 -0.428,0.12 -0.804,0.302 -1.128,0.546 -0.324,0.244 -0.58,0.556 -0.768,0.936 -0.188,0.38 -0.282,0.829 -0.282,1.35 h 1.08 c 0,-0.361 0.07,-0.67 0.21,-0.93 0.14,-0.261 0.324,-0.474 0.552,-0.642 0.228,-0.167 0.494,-0.292 0.798,-0.372 0.304,-0.081 0.616,-0.12 0.936,-0.12 0.256,0 0.514,0.024 0.774,0.073 0.26,0.047 0.494,0.129 0.702,0.246 0.208,0.115 0.376,0.273 0.504,0.472 0.128,0.201 0.192,0.457 0.192,0.769 0,0.296 -0.078,0.536 -0.234,0.72 -0.156,0.183 -0.364,0.334 -0.624,0.45 -0.26,0.116 -0.554,0.21 -0.882,0.282 -0.328,0.072 -0.662,0.147 -1.002,0.223 -0.34,0.075 -0.674,0.163 -1.002,0.263 -0.328,0.1 -0.622,0.232 -0.882,0.396 -0.26,0.164 -0.468,0.376 -0.624,0.636 -0.156,0.259 -0.234,0.586 -0.234,0.978 0,0.432 0.088,0.806 0.264,1.122 0.176,0.316 0.41,0.575 0.702,0.78 0.292,0.204 0.624,0.356 0.996,0.456 0.372,0.1 0.754,0.15 1.146,0.15 0.44,0 0.848,-0.053 1.224,-0.156 C 0.19,1.114 0.52,0.95 0.804,0.725 1.088,0.502 1.312,0.22 1.476,-0.12 1.64,-0.46 1.73,-0.866 1.746,-1.338 H 0.666 C 0.602,-0.722 0.38,-0.276 0,0"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path72" /></g><g
|
||||||
|
id="g74"
|
||||||
|
transform="translate(137.5537,346.2851)"><path
|
||||||
|
d="m 0,0 v -0.912 h 0.024 c 0.464,0.705 1.132,1.057 2.004,1.057 0.384,0 0.732,-0.08 1.044,-0.241 0.312,-0.16 0.532,-0.431 0.66,-0.816 0.208,0.336 0.482,0.596 0.822,0.78 0.34,0.185 0.714,0.277 1.122,0.277 0.312,0 0.594,-0.035 0.846,-0.102 0.252,-0.068 0.468,-0.175 0.648,-0.318 0.18,-0.145 0.32,-0.33 0.42,-0.559 0.1,-0.227 0.15,-0.502 0.15,-0.822 V -6.203 H 6.72 v 4.067 c 0,0.193 -0.016,0.372 -0.048,0.54 -0.032,0.168 -0.092,0.315 -0.18,0.438 -0.088,0.125 -0.21,0.223 -0.366,0.295 -0.156,0.072 -0.358,0.107 -0.606,0.107 -0.504,0 -0.9,-0.143 -1.188,-0.431 C 4.044,-1.476 3.9,-1.859 3.9,-2.34 V -6.203 H 2.88 v 4.067 c 0,0.201 -0.018,0.384 -0.054,0.552 -0.036,0.168 -0.098,0.314 -0.186,0.438 -0.088,0.125 -0.206,0.22 -0.354,0.289 -0.148,0.068 -0.338,0.101 -0.57,0.101 -0.296,0 -0.55,-0.059 -0.762,-0.179 C 0.742,-1.056 0.57,-1.199 0.438,-1.367 0.306,-1.535 0.21,-1.709 0.15,-1.89 0.09,-2.07 0.06,-2.22 0.06,-2.34 V -6.203 H -0.96 V 0 Z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path76" /></g><g
|
||||||
|
id="g78"
|
||||||
|
transform="translate(150.1655,343.0761)"><path
|
||||||
|
d="m 0,0 c -0.208,-0.045 -0.426,-0.08 -0.654,-0.108 -0.228,-0.029 -0.458,-0.06 -0.69,-0.097 -0.232,-0.035 -0.44,-0.094 -0.624,-0.174 -0.184,-0.08 -0.334,-0.193 -0.45,-0.342 -0.116,-0.148 -0.174,-0.349 -0.174,-0.605 0,-0.168 0.034,-0.311 0.102,-0.426 0.068,-0.117 0.156,-0.211 0.264,-0.283 0.108,-0.071 0.236,-0.123 0.384,-0.155 0.148,-0.033 0.298,-0.048 0.45,-0.048 0.336,0 0.624,0.045 0.864,0.137 0.24,0.092 0.436,0.208 0.588,0.349 0.152,0.139 0.264,0.291 0.336,0.455 0.072,0.164 0.108,0.318 0.108,0.463 V 0.209 C 0.376,0.113 0.208,0.043 0,0 m 1.428,-3.127 c -0.264,0 -0.474,0.074 -0.63,0.223 -0.156,0.147 -0.234,0.389 -0.234,0.725 -0.28,-0.336 -0.606,-0.578 -0.978,-0.725 -0.372,-0.149 -0.774,-0.223 -1.206,-0.223 -0.28,0 -0.544,0.03 -0.792,0.09 -0.248,0.06 -0.466,0.16 -0.654,0.301 -0.188,0.139 -0.336,0.319 -0.444,0.539 -0.108,0.22 -0.162,0.486 -0.162,0.799 0,0.351 0.06,0.639 0.18,0.863 0.12,0.224 0.278,0.406 0.474,0.547 0.196,0.139 0.42,0.246 0.672,0.318 0.252,0.071 0.51,0.131 0.774,0.18 0.28,0.055 0.546,0.097 0.798,0.125 0.252,0.028 0.474,0.068 0.666,0.121 0.192,0.051 0.344,0.127 0.456,0.227 0.112,0.101 0.168,0.246 0.168,0.439 0,0.223 -0.042,0.403 -0.126,0.539 -0.084,0.137 -0.192,0.24 -0.324,0.312 -0.132,0.073 -0.28,0.121 -0.444,0.145 -0.164,0.023 -0.326,0.035 -0.486,0.035 -0.432,0 -0.792,-0.082 -1.08,-0.246 -0.288,-0.164 -0.444,-0.474 -0.468,-0.93 h -1.02 c 0.016,0.384 0.096,0.708 0.24,0.973 0.144,0.264 0.336,0.478 0.576,0.642 0.24,0.163 0.516,0.282 0.828,0.354 0.312,0.071 0.64,0.108 0.984,0.108 0.28,0 0.558,-0.02 0.834,-0.061 C 0.306,3.254 0.556,3.172 0.78,3.047 1.004,2.924 1.184,2.749 1.32,2.525 1.456,2.301 1.524,2.01 1.524,1.649 v -3.192 c 0,-0.24 0.014,-0.416 0.042,-0.527 0.028,-0.113 0.122,-0.168 0.282,-0.168 0.088,0 0.192,0.019 0.312,0.059 V -2.971 C 1.984,-3.074 1.74,-3.127 1.428,-3.127"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path80" /></g><path
|
||||||
|
d="m 154.354,340.082 h -1.02 v 8.567 h 1.02 z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path82" /><path
|
||||||
|
d="m 157.017,340.082 h -1.02 v 8.567 h 1.02 z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path84" /><g
|
||||||
|
id="g86"
|
||||||
|
transform="translate(101.854,330.9863)"><path
|
||||||
|
d="m 0,0 v 0.899 h 1.044 v 0.924 c 0,0.504 0.146,0.886 0.438,1.146 0.292,0.26 0.718,0.39 1.278,0.39 0.096,0 0.206,-0.007 0.33,-0.023 C 3.214,3.319 3.324,3.295 3.42,3.264 V 2.375 C 3.332,2.407 3.236,2.43 3.132,2.441 3.028,2.453 2.932,2.459 2.844,2.459 2.596,2.459 2.404,2.411 2.268,2.315 2.132,2.219 2.064,2.035 2.064,1.764 V 0.899 h 1.2 V 0 h -1.2 V -5.305 H 1.044 V 0 Z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path88" /></g><g
|
||||||
|
id="g90"
|
||||||
|
transform="translate(106.9238,327.7754)"><path
|
||||||
|
d="m 0,0 c 0.1,-0.292 0.238,-0.535 0.414,-0.732 0.176,-0.196 0.382,-0.346 0.618,-0.45 0.236,-0.103 0.486,-0.156 0.75,-0.156 0.264,0 0.514,0.053 0.75,0.156 0.236,0.104 0.442,0.254 0.618,0.45 0.176,0.197 0.314,0.44 0.414,0.732 0.1,0.292 0.15,0.626 0.15,1.002 0,0.377 -0.05,0.71 -0.15,1.002 C 3.464,2.297 3.326,2.542 3.15,2.742 2.974,2.941 2.768,3.094 2.532,3.198 2.296,3.303 2.046,3.355 1.782,3.355 1.518,3.355 1.268,3.303 1.032,3.198 0.796,3.094 0.59,2.941 0.414,2.742 0.238,2.542 0.1,2.297 0,2.004 -0.1,1.712 -0.15,1.379 -0.15,1.002 -0.15,0.626 -0.1,0.292 0,0 m -1.038,2.28 c 0.128,0.396 0.32,0.74 0.576,1.033 0.256,0.291 0.572,0.521 0.948,0.689 0.376,0.168 0.808,0.252 1.296,0.252 0.496,0 0.93,-0.084 1.302,-0.252 C 3.456,3.834 3.77,3.604 4.026,3.313 4.282,3.02 4.474,2.676 4.602,2.28 4.73,1.885 4.794,1.458 4.794,1.002 4.794,0.547 4.73,0.122 4.602,-0.27 4.474,-0.662 4.282,-1.004 4.026,-1.296 3.77,-1.588 3.456,-1.816 3.084,-1.98 2.712,-2.144 2.278,-2.226 1.782,-2.226 c -0.488,0 -0.92,0.082 -1.296,0.246 -0.376,0.164 -0.692,0.392 -0.948,0.684 -0.256,0.292 -0.448,0.634 -0.576,1.026 -0.128,0.392 -0.192,0.817 -0.192,1.272 0,0.456 0.064,0.883 0.192,1.278"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path92" /></g><g
|
||||||
|
id="g94"
|
||||||
|
transform="translate(113.8417,331.8857)"><path
|
||||||
|
d="m 0,0 v -1.308 h 0.024 c 0.248,0.504 0.552,0.875 0.912,1.116 0.36,0.24 0.816,0.351 1.368,0.336 V -0.937 C 1.896,-0.937 1.548,-0.992 1.26,-1.105 0.972,-1.216 0.74,-1.38 0.564,-1.597 0.388,-1.812 0.26,-2.074 0.18,-2.382 0.1,-2.69 0.06,-3.044 0.06,-3.444 v -2.76 H -0.96 V 0 Z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path96" /></g><g
|
||||||
|
id="g98"
|
||||||
|
transform="translate(122.7333,325.6816)"><path
|
||||||
|
d="m 0,0 v 6.096 h -2.208 v 0.816 c 0.288,0 0.568,0.022 0.84,0.066 0.272,0.043 0.518,0.125 0.738,0.247 0.22,0.119 0.406,0.283 0.558,0.491 C 0.08,7.924 0.184,8.188 0.24,8.508 H 1.02 L 1.02,0 Z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path100" /></g><g
|
||||||
|
id="g102"
|
||||||
|
transform="translate(128.8295,330.1035)"><path
|
||||||
|
d="m 0,0 c -0.216,-0.1 -0.4,-0.236 -0.552,-0.408 -0.152,-0.172 -0.266,-0.376 -0.341,-0.611 -0.077,-0.237 -0.115,-0.487 -0.115,-0.75 0,-0.264 0.04,-0.512 0.12,-0.745 0.08,-0.232 0.194,-0.431 0.342,-0.599 0.148,-0.168 0.332,-0.303 0.552,-0.403 0.22,-0.1 0.47,-0.15 0.75,-0.15 0.28,0 0.526,0.05 0.738,0.15 0.212,0.1 0.39,0.239 0.534,0.414 0.144,0.176 0.254,0.378 0.33,0.606 0.076,0.228 0.114,0.467 0.114,0.715 0,0.263 -0.034,0.513 -0.102,0.75 C 2.302,-0.796 2.196,-0.592 2.052,-0.42 1.908,-0.248 1.728,-0.109 1.512,-0.006 1.296,0.098 1.044,0.15 0.756,0.15 0.468,0.15 0.216,0.1 0,0 M 1.848,2.838 C 1.6,3.07 1.272,3.186 0.864,3.186 0.432,3.186 0.084,3.08 -0.18,2.868 -0.444,2.656 -0.65,2.389 -0.798,2.064 -0.946,1.74 -1.048,1.391 -1.104,1.014 -1.16,0.639 -1.192,0.286 -1.2,-0.042 l 0.024,-0.024 c 0.24,0.392 0.538,0.675 0.894,0.852 0.356,0.176 0.766,0.265 1.23,0.265 0.408,0 0.774,-0.07 1.098,-0.211 C 2.37,0.7 2.642,0.506 2.862,0.258 3.082,0.01 3.253,-0.281 3.372,-0.617 3.492,-0.954 3.552,-1.318 3.552,-1.71 3.552,-2.021 3.504,-2.346 3.408,-2.682 3.312,-3.018 3.154,-3.324 2.934,-3.6 2.714,-3.876 2.422,-4.103 2.058,-4.283 1.694,-4.464 1.244,-4.554 0.708,-4.554 c -0.632,0 -1.14,0.128 -1.524,0.384 -0.384,0.256 -0.68,0.584 -0.888,0.984 -0.208,0.4 -0.346,0.84 -0.414,1.321 -0.068,0.479 -0.102,0.943 -0.102,1.391 0,0.583 0.05,1.15 0.15,1.699 0.1,0.547 0.27,1.033 0.511,1.457 C -1.32,3.106 -1,3.445 -0.6,3.702 -0.2,3.958 0.304,4.086 0.912,4.086 1.616,4.086 2.176,3.9 2.592,3.528 3.008,3.156 3.248,2.618 3.312,1.914 H 2.292 C 2.244,2.299 2.096,2.606 1.848,2.838"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path104" /></g><g
|
||||||
|
id="g106"
|
||||||
|
transform="translate(138.3159,329.6836)"><path
|
||||||
|
d="m 0,0 c -0.076,0.275 -0.192,0.521 -0.348,0.738 -0.156,0.216 -0.356,0.388 -0.6,0.516 -0.244,0.128 -0.531,0.192 -0.858,0.192 -0.344,0 -0.636,-0.068 -0.876,-0.204 -0.24,-0.137 -0.436,-0.314 -0.588,-0.534 -0.152,-0.22 -0.262,-0.47 -0.33,-0.75 -0.069,-0.28 -0.102,-0.563 -0.102,-0.853 0,-0.303 0.036,-0.597 0.108,-0.88 0.071,-0.286 0.186,-0.536 0.341,-0.75 0.157,-0.217 0.358,-0.391 0.607,-0.523 0.247,-0.132 0.548,-0.198 0.9,-0.198 0.351,0 0.646,0.068 0.882,0.204 0.236,0.136 0.425,0.315 0.569,0.54 0.145,0.224 0.249,0.481 0.312,0.768 0.064,0.289 0.097,0.584 0.097,0.888 C 0.114,-0.559 0.076,-0.275 0,0 M -3.666,2.202 V 1.361 h 0.024 c 0.168,0.345 0.431,0.595 0.792,0.75 0.36,0.157 0.756,0.235 1.188,0.235 0.48,0 0.898,-0.088 1.254,-0.264 C -0.052,1.906 0.244,1.668 0.48,1.368 0.716,1.068 0.893,0.722 1.014,0.33 c 0.12,-0.392 0.18,-0.809 0.18,-1.248 0,-0.439 -0.058,-0.855 -0.175,-1.248 C 0.904,-2.559 0.727,-2.9 0.492,-3.191 0.256,-3.484 -0.041,-3.714 -0.396,-3.882 -0.753,-4.05 -1.167,-4.134 -1.638,-4.134 c -0.153,0 -0.323,0.017 -0.511,0.048 -0.188,0.032 -0.374,0.084 -0.557,0.156 -0.184,0.073 -0.359,0.17 -0.522,0.294 -0.164,0.124 -0.302,0.279 -0.414,0.462 h -0.024 v -3.191 h -1.02 v 8.567 z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path108" /></g><g
|
||||||
|
id="g110"
|
||||||
|
transform="translate(140.2172,331.8857)"><path
|
||||||
|
d="M 0,0 H 1.308 L 2.796,-2.172 4.344,0 h 1.224 l -2.136,-2.856 2.4,-3.348 H 4.524 L 2.796,-3.636 1.068,-6.204 H -0.168 L 2.16,-2.94 Z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path112" /></g><path
|
||||||
|
d="m 150.225,328.537 h -3.468 v 0.961 h 3.468 z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path114" /><g
|
||||||
|
id="g116"
|
||||||
|
transform="translate(154.0771,325.6816)"><path
|
||||||
|
d="m 0,0 v 6.096 h -2.208 v 0.816 c 0.288,0 0.568,0.022 0.84,0.066 0.272,0.043 0.518,0.125 0.738,0.247 0.22,0.119 0.406,0.283 0.558,0.491 C 0.08,7.924 0.184,8.188 0.24,8.508 H 1.02 L 1.02,0 Z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path118" /></g><g
|
||||||
|
id="g120"
|
||||||
|
transform="translate(158.1572,332.3769)"><path
|
||||||
|
d="m 0,0 c 0.112,0.369 0.286,0.686 0.522,0.955 0.236,0.268 0.53,0.478 0.882,0.629 0.352,0.152 0.752,0.228 1.2,0.228 0.368,0 0.714,-0.053 1.038,-0.162 C 3.966,1.543 4.248,1.387 4.488,1.183 4.728,0.979 4.918,0.725 5.058,0.421 5.198,0.117 5.268,-0.235 5.268,-0.635 5.268,-1.012 5.21,-1.344 5.094,-1.631 4.977,-1.92 4.824,-2.178 4.632,-2.405 4.44,-2.633 4.22,-2.84 3.972,-3.023 3.724,-3.207 3.468,-3.383 3.204,-3.551 2.94,-3.711 2.676,-3.869 2.412,-4.025 2.148,-4.182 1.906,-4.348 1.686,-4.523 1.466,-4.699 1.278,-4.889 1.122,-5.094 0.966,-5.297 0.864,-5.531 0.816,-5.795 h 4.368 v -0.9 h -5.556 c 0.04,0.504 0.13,0.933 0.27,1.29 0.14,0.356 0.318,0.666 0.534,0.93 0.216,0.264 0.46,0.496 0.732,0.696 0.272,0.199 0.556,0.387 0.852,0.564 0.36,0.224 0.676,0.43 0.948,0.617 0.272,0.188 0.498,0.379 0.678,0.571 0.18,0.191 0.316,0.4 0.408,0.624 0.092,0.223 0.138,0.483 0.138,0.78 0,0.231 -0.045,0.441 -0.132,0.63 C 3.968,0.194 3.85,0.357 3.702,0.492 3.554,0.629 3.38,0.732 3.18,0.805 2.98,0.877 2.768,0.912 2.544,0.912 2.247,0.912 1.994,0.851 1.782,0.727 1.57,0.603 1.396,0.441 1.26,0.24 1.124,0.041 1.026,-0.185 0.966,-0.437 0.906,-0.689 0.88,-0.943 0.888,-1.199 h -1.02 C -0.156,-0.768 -0.112,-0.367 0,0"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path122" /></g><g
|
||||||
|
id="g124"
|
||||||
|
transform="translate(165.7832,328.7949)"><path
|
||||||
|
d="m 0,0 c 0.02,-0.395 0.084,-0.768 0.192,-1.115 0.108,-0.348 0.282,-0.643 0.522,-0.882 0.24,-0.24 0.576,-0.36 1.008,-0.36 0.432,0 0.768,0.12 1.008,0.36 0.24,0.239 0.414,0.534 0.522,0.882 0.108,0.347 0.172,0.72 0.192,1.115 0.02,0.397 0.03,0.755 0.03,1.074 0,0.209 -0.002,0.439 -0.006,0.691 C 3.464,2.017 3.444,2.268 3.408,2.521 3.372,2.773 3.32,3.018 3.252,3.259 3.184,3.498 3.084,3.709 2.952,3.889 2.82,4.068 2.654,4.215 2.454,4.326 2.254,4.439 2.01,4.494 1.722,4.494 1.434,4.494 1.19,4.439 0.99,4.326 0.79,4.215 0.624,4.068 0.492,3.889 0.36,3.709 0.26,3.498 0.192,3.259 0.124,3.018 0.072,2.773 0.036,2.521 0,2.268 -0.02,2.017 -0.024,1.765 -0.028,1.513 -0.03,1.283 -0.03,1.074 -0.03,0.755 -0.02,0.397 0,0 m -1.086,2.035 c 0.016,0.336 0.056,0.664 0.12,0.983 0.064,0.32 0.156,0.625 0.276,0.913 0.12,0.288 0.284,0.54 0.492,0.756 C 0.01,4.902 0.272,5.074 0.588,5.203 0.904,5.33 1.282,5.395 1.722,5.395 2.162,5.395 2.54,5.33 2.856,5.203 3.172,5.074 3.434,4.902 3.642,4.687 3.85,4.471 4.014,4.219 4.134,3.931 4.254,3.643 4.346,3.338 4.41,3.018 4.474,2.699 4.514,2.371 4.53,2.035 4.546,1.699 4.554,1.375 4.554,1.062 4.554,0.75 4.546,0.427 4.53,0.091 4.514,-0.245 4.474,-0.573 4.41,-0.893 4.346,-1.213 4.254,-1.516 4.134,-1.799 4.014,-2.084 3.85,-2.334 3.642,-2.549 3.434,-2.766 3.174,-2.936 2.862,-3.059 2.55,-3.184 2.17,-3.245 1.722,-3.245 c -0.44,0 -0.818,0.061 -1.134,0.186 -0.316,0.123 -0.578,0.293 -0.786,0.51 -0.208,0.215 -0.372,0.465 -0.492,0.75 -0.12,0.283 -0.212,0.586 -0.276,0.906 -0.064,0.32 -0.104,0.648 -0.12,0.984 -0.016,0.336 -0.024,0.659 -0.024,0.971 0,0.313 0.008,0.637 0.024,0.973"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path126" /></g><g
|
||||||
|
id="g128"
|
||||||
|
transform="translate(176.3315,329.6836)"><path
|
||||||
|
d="m 0,0 c -0.076,0.275 -0.192,0.521 -0.348,0.738 -0.156,0.216 -0.356,0.388 -0.6,0.516 -0.244,0.128 -0.531,0.192 -0.858,0.192 -0.344,0 -0.636,-0.068 -0.876,-0.204 -0.24,-0.137 -0.436,-0.314 -0.588,-0.534 -0.152,-0.22 -0.262,-0.47 -0.33,-0.75 -0.069,-0.28 -0.102,-0.563 -0.102,-0.853 0,-0.303 0.036,-0.597 0.108,-0.88 0.071,-0.286 0.186,-0.536 0.342,-0.75 0.156,-0.217 0.357,-0.391 0.606,-0.523 0.248,-0.132 0.548,-0.198 0.9,-0.198 0.351,0 0.646,0.068 0.882,0.204 0.236,0.136 0.425,0.315 0.57,0.54 0.144,0.224 0.248,0.481 0.312,0.768 0.063,0.289 0.096,0.584 0.096,0.888 C 0.114,-0.559 0.076,-0.275 0,0 M -3.666,2.202 V 1.361 h 0.024 c 0.168,0.345 0.431,0.595 0.792,0.75 0.36,0.157 0.756,0.235 1.188,0.235 0.48,0 0.898,-0.088 1.254,-0.264 C -0.052,1.906 0.244,1.668 0.48,1.368 0.716,1.068 0.893,0.722 1.014,0.33 1.134,-0.062 1.194,-0.479 1.194,-0.918 1.194,-1.357 1.136,-1.773 1.02,-2.166 0.904,-2.559 0.727,-2.9 0.492,-3.191 0.256,-3.484 -0.04,-3.714 -0.396,-3.882 -0.752,-4.05 -1.167,-4.134 -1.638,-4.134 c -0.152,0 -0.323,0.017 -0.51,0.048 -0.188,0.032 -0.375,0.084 -0.558,0.156 -0.184,0.073 -0.358,0.17 -0.522,0.294 -0.164,0.124 -0.302,0.279 -0.414,0.462 h -0.024 v -3.191 h -1.02 v 8.567 z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path130" /></g><g
|
||||||
|
id="g132"
|
||||||
|
transform="translate(178.2329,331.8857)"><path
|
||||||
|
d="M 0,0 H 1.308 L 2.796,-2.172 4.344,0 h 1.224 l -2.136,-2.856 2.4,-3.348 H 4.524 L 2.796,-3.636 1.068,-6.204 H -0.168 L 2.16,-2.94 Z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path134" /></g><g
|
||||||
|
id="g136"
|
||||||
|
transform="translate(335.6333,348.6504)"><path
|
||||||
|
d="M 0,0 V -7.607 H 4.536 V -8.568 H -1.14 l 0,8.568 z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path138" /></g><g
|
||||||
|
id="g140"
|
||||||
|
transform="translate(344.3334,343.0761)"><path
|
||||||
|
d="m 0,0 c -0.209,-0.044 -0.426,-0.08 -0.654,-0.107 -0.229,-0.029 -0.459,-0.061 -0.691,-0.096 -0.231,-0.037 -0.44,-0.095 -0.624,-0.174 -0.183,-0.08 -0.334,-0.195 -0.449,-0.343 -0.117,-0.147 -0.174,-0.35 -0.174,-0.606 0,-0.168 0.034,-0.31 0.102,-0.426 0.067,-0.115 0.156,-0.209 0.264,-0.281 0.107,-0.072 0.236,-0.125 0.384,-0.156 0.148,-0.033 0.297,-0.049 0.45,-0.049 0.335,0 0.624,0.047 0.864,0.138 0.239,0.092 0.435,0.208 0.588,0.348 0.151,0.141 0.264,0.293 0.336,0.457 0.071,0.163 0.108,0.317 0.108,0.461 V 0.211 C 0.375,0.114 0.207,0.045 0,0 m 1.428,-3.125 c -0.264,0 -0.475,0.073 -0.631,0.221 -0.155,0.148 -0.233,0.39 -0.233,0.726 -0.281,-0.336 -0.607,-0.578 -0.978,-0.726 -0.373,-0.148 -0.774,-0.221 -1.207,-0.221 -0.279,0 -0.543,0.029 -0.791,0.09 -0.248,0.059 -0.467,0.16 -0.654,0.299 -0.188,0.14 -0.336,0.32 -0.444,0.541 -0.109,0.219 -0.162,0.486 -0.162,0.798 0,0.351 0.06,0.639 0.18,0.864 0.119,0.223 0.277,0.405 0.474,0.545 0.196,0.14 0.419,0.246 0.671,0.318 0.252,0.072 0.511,0.133 0.775,0.18 0.279,0.056 0.546,0.098 0.798,0.127 0.252,0.027 0.473,0.067 0.666,0.119 0.192,0.053 0.343,0.129 0.456,0.228 0.111,0.1 0.168,0.246 0.168,0.438 0,0.224 -0.042,0.404 -0.126,0.541 C 0.306,2.098 0.197,2.202 0.066,2.274 -0.066,2.346 -0.215,2.395 -0.379,2.418 -0.543,2.442 -0.705,2.455 -0.864,2.455 -1.297,2.455 -1.656,2.372 -1.944,2.209 -2.232,2.045 -2.389,1.734 -2.412,1.278 h -1.021 c 0.017,0.384 0.097,0.708 0.241,0.972 0.143,0.264 0.336,0.479 0.575,0.643 0.24,0.164 0.517,0.281 0.828,0.353 0.313,0.072 0.641,0.108 0.984,0.108 0.281,0 0.559,-0.02 0.834,-0.059 C 0.306,3.254 0.556,3.172 0.779,3.049 1.004,2.924 1.184,2.75 1.319,2.526 1.455,2.303 1.524,2.01 1.524,1.65 v -3.191 c 0,-0.24 0.013,-0.416 0.042,-0.529 0.028,-0.112 0.122,-0.168 0.282,-0.168 0.088,0 0.191,0.02 0.312,0.06 V -2.97 C 1.983,-3.074 1.74,-3.125 1.428,-3.125"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path142" /></g><g
|
||||||
|
id="g144"
|
||||||
|
transform="translate(348.3647,346.2871)"><path
|
||||||
|
d="m 0,0 v -1.309 h 0.023 c 0.249,0.504 0.553,0.876 0.913,1.117 0.36,0.239 0.816,0.351 1.369,0.335 v -1.08 C 1.897,-0.937 1.549,-0.992 1.26,-1.105 0.973,-1.217 0.74,-1.381 0.565,-1.597 0.389,-1.812 0.26,-2.074 0.18,-2.383 0.1,-2.691 0.061,-3.045 0.061,-3.445 v -2.76 H -0.96 V 0 Z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path146" /></g><g
|
||||||
|
id="g148"
|
||||||
|
transform="translate(354.4545,341.1211)"><path
|
||||||
|
d="M 0,0 C 0.236,0.139 0.426,0.323 0.57,0.551 0.715,0.779 0.82,1.037 0.889,1.325 0.956,1.613 0.99,1.901 0.99,2.189 0.99,2.461 0.959,2.729 0.895,2.994 0.83,3.258 0.729,3.496 0.588,3.707 0.448,3.92 0.266,4.09 0.043,4.217 -0.182,4.346 -0.453,4.41 -0.773,4.41 -1.102,4.41 -1.382,4.348 -1.613,4.224 -1.846,4.1 -2.035,3.934 -2.184,3.725 -2.332,3.518 -2.439,3.277 -2.508,3.006 -2.576,2.733 -2.609,2.449 -2.609,2.153 c 0,-0.28 0.027,-0.559 0.084,-0.84 0.055,-0.28 0.152,-0.534 0.287,-0.762 0.136,-0.228 0.316,-0.412 0.541,-0.551 0.223,-0.141 0.504,-0.211 0.84,-0.211 0.336,0 0.621,0.07 0.857,0.211 M 1.303,-2.791 C 0.838,-3.295 0.11,-3.547 -0.881,-3.547 c -0.289,0 -0.582,0.032 -0.883,0.096 -0.299,0.064 -0.572,0.168 -0.816,0.312 -0.244,0.145 -0.445,0.332 -0.606,0.565 -0.16,0.232 -0.248,0.515 -0.263,0.851 h 1.019 c 0.008,-0.183 0.067,-0.34 0.174,-0.467 0.109,-0.128 0.24,-0.232 0.397,-0.312 0.156,-0.08 0.326,-0.139 0.509,-0.175 0.184,-0.036 0.36,-0.053 0.528,-0.053 0.337,0 0.621,0.058 0.852,0.173 0.232,0.117 0.425,0.276 0.576,0.481 0.152,0.203 0.262,0.449 0.331,0.738 0.067,0.287 0.102,0.604 0.102,0.947 V 0.018 H 1.015 C 0.838,-0.367 0.572,-0.648 0.217,-0.828 -0.14,-1.009 -0.518,-1.099 -0.918,-1.099 c -0.464,0 -0.867,0.084 -1.211,0.252 -0.345,0.168 -0.633,0.394 -0.865,0.679 -0.231,0.283 -0.406,0.615 -0.522,0.996 -0.116,0.379 -0.173,0.781 -0.173,1.205 0,0.368 0.047,0.746 0.144,1.135 0.096,0.387 0.256,0.739 0.48,1.056 0.223,0.315 0.52,0.575 0.887,0.78 0.368,0.203 0.821,0.306 1.356,0.306 0.392,0 0.752,-0.087 1.08,-0.259 0.328,-0.172 0.584,-0.43 0.768,-0.774 h 0.013 v 0.889 h 0.959 v -5.677 c 0,-1.015 -0.232,-1.776 -0.695,-2.28"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path150" /></g><g
|
||||||
|
id="g152"
|
||||||
|
transform="translate(362.1342,344.4629)"><path
|
||||||
|
d="M 0,0 C -0.092,0.216 -0.215,0.402 -0.371,0.558 -0.527,0.714 -0.712,0.838 -0.924,0.93 -1.136,1.021 -1.369,1.068 -1.625,1.068 -1.89,1.068 -2.128,1.021 -2.34,0.93 -2.552,0.838 -2.734,0.711 -2.886,0.552 -3.037,0.392 -3.158,0.205 -3.246,-0.006 -3.334,-0.219 -3.386,-0.444 -3.401,-0.685 H 0.162 C 0.147,-0.444 0.092,-0.217 0,0 m 0.246,-3.984 c -0.464,-0.352 -1.048,-0.528 -1.752,-0.528 -0.496,0 -0.926,0.08 -1.289,0.24 -0.365,0.16 -0.671,0.383 -0.918,0.671 -0.248,0.288 -0.434,0.632 -0.558,1.033 -0.125,0.4 -0.195,0.836 -0.21,1.308 0,0.471 0.071,0.904 0.215,1.295 0.145,0.393 0.346,0.733 0.606,1.021 0.26,0.288 0.568,0.511 0.925,0.672 0.355,0.16 0.745,0.24 1.17,0.24 0.551,0 1.009,-0.114 1.374,-0.343 C 0.172,1.397 0.465,1.107 0.685,0.756 0.904,0.403 1.057,0.02 1.141,-0.396 1.225,-0.812 1.258,-1.209 1.242,-1.584 h -4.643 c -0.009,-0.272 0.024,-0.53 0.095,-0.774 0.073,-0.245 0.189,-0.46 0.349,-0.648 0.159,-0.188 0.363,-0.338 0.611,-0.451 0.248,-0.111 0.54,-0.168 0.876,-0.168 0.433,0 0.786,0.1 1.062,0.301 0.277,0.199 0.459,0.504 0.547,0.912 H 1.147 C 1.01,-3.108 0.711,-3.633 0.246,-3.984"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path154" /></g><g
|
||||||
|
id="g156"
|
||||||
|
transform="translate(365.3569,346.2871)"><path
|
||||||
|
d="m 0,0 v -1.309 h 0.023 c 0.248,0.504 0.553,0.876 0.912,1.117 0.36,0.239 0.817,0.351 1.369,0.335 v -1.08 C 1.895,-0.937 1.548,-0.992 1.26,-1.105 0.972,-1.217 0.739,-1.381 0.563,-1.597 0.388,-1.812 0.26,-2.074 0.18,-2.383 0.1,-2.691 0.06,-3.045 0.06,-3.445 v -2.76 H -0.961 V 0 Z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path158" /></g><g
|
||||||
|
id="g160"
|
||||||
|
transform="translate(318.2573,330.9863)"><path
|
||||||
|
d="m 0,0 v 0.9 h 1.044 v 0.924 c 0,0.504 0.145,0.887 0.438,1.147 C 1.773,3.23 2.199,3.36 2.76,3.36 2.855,3.36 2.966,3.352 3.09,3.336 3.214,3.32 3.324,3.297 3.42,3.264 V 2.377 C 3.332,2.408 3.236,2.43 3.132,2.442 3.027,2.454 2.932,2.461 2.844,2.461 2.596,2.461 2.404,2.412 2.268,2.316 2.132,2.221 2.064,2.036 2.064,1.764 V 0.9 h 1.2 V 0 h -1.2 V -5.304 H 1.044 V 0 Z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path162" /></g><g
|
||||||
|
id="g164"
|
||||||
|
transform="translate(323.3276,327.7773)"><path
|
||||||
|
d="m 0,0 c 0.1,-0.293 0.237,-0.537 0.414,-0.732 0.176,-0.197 0.381,-0.346 0.617,-0.451 0.237,-0.104 0.487,-0.156 0.75,-0.156 0.264,0 0.514,0.052 0.75,0.156 0.237,0.105 0.442,0.254 0.618,0.451 0.176,0.195 0.314,0.439 0.415,0.732 0.1,0.291 0.149,0.625 0.149,1.002 0,0.375 -0.049,0.709 -0.149,1.002 C 3.463,2.295 3.325,2.541 3.149,2.741 2.973,2.941 2.768,3.094 2.531,3.197 2.295,3.301 2.045,3.353 1.781,3.353 1.518,3.353 1.268,3.301 1.031,3.197 0.795,3.094 0.59,2.941 0.414,2.741 0.237,2.541 0.1,2.295 0,2.004 -0.101,1.711 -0.15,1.377 -0.15,1.002 -0.15,0.625 -0.101,0.291 0,0 m -1.039,2.279 c 0.129,0.397 0.32,0.741 0.576,1.032 0.256,0.292 0.572,0.523 0.948,0.691 0.376,0.168 0.808,0.252 1.296,0.252 0.496,0 0.93,-0.084 1.303,-0.252 C 3.455,3.834 3.77,3.603 4.025,3.311 4.281,3.02 4.473,2.676 4.602,2.279 4.73,1.883 4.793,1.457 4.793,1.002 4.793,0.545 4.73,0.121 4.602,-0.271 4.473,-0.662 4.281,-1.005 4.025,-1.297 3.77,-1.589 3.455,-1.816 3.084,-1.98 2.711,-2.145 2.277,-2.227 1.781,-2.227 c -0.488,0 -0.92,0.082 -1.296,0.247 -0.376,0.164 -0.692,0.391 -0.948,0.683 -0.256,0.292 -0.447,0.635 -0.576,1.026 -0.127,0.392 -0.191,0.816 -0.191,1.273 0,0.455 0.064,0.881 0.191,1.277"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path166" /></g><g
|
||||||
|
id="g168"
|
||||||
|
transform="translate(330.2456,331.8867)"><path
|
||||||
|
d="m 0,0 v -1.309 h 0.023 c 0.248,0.504 0.553,0.877 0.913,1.118 0.359,0.239 0.816,0.351 1.368,0.336 V -0.936 C 1.896,-0.936 1.548,-0.992 1.26,-1.103 0.972,-1.217 0.739,-1.38 0.563,-1.596 0.388,-1.812 0.26,-2.074 0.18,-2.383 0.1,-2.689 0.06,-3.044 0.06,-3.444 v -2.76 H -0.961 V 0 Z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path170" /></g><g
|
||||||
|
id="g172"
|
||||||
|
transform="translate(339.1362,325.6826)"><path
|
||||||
|
d="m 0,0 v 6.097 h -2.207 v 0.815 c 0.287,0 0.567,0.023 0.84,0.066 0.271,0.044 0.517,0.127 0.738,0.246 0.219,0.121 0.405,0.284 0.558,0.492 C 0.08,7.924 0.185,8.189 0.24,8.508 H 1.02 V 0 Z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path174" /></g><g
|
||||||
|
id="g176"
|
||||||
|
transform="translate(343.2172,332.3789)"><path
|
||||||
|
d="M 0,0 C 0.112,0.367 0.286,0.685 0.522,0.953 0.758,1.222 1.052,1.432 1.403,1.584 1.756,1.735 2.155,1.811 2.604,1.811 2.972,1.811 3.317,1.758 3.642,1.65 3.966,1.541 4.248,1.386 4.487,1.182 4.728,0.978 4.918,0.724 5.058,0.42 5.198,0.115 5.269,-0.236 5.269,-0.637 5.269,-1.012 5.21,-1.344 5.094,-1.633 4.978,-1.92 4.823,-2.178 4.632,-2.406 4.44,-2.635 4.22,-2.84 3.972,-3.024 3.724,-3.209 3.468,-3.385 3.204,-3.553 2.94,-3.713 2.676,-3.87 2.411,-4.026 2.147,-4.182 1.905,-4.349 1.687,-4.524 1.466,-4.7 1.278,-4.891 1.122,-5.094 0.966,-5.299 0.864,-5.532 0.815,-5.797 h 4.37 v -0.899 h -5.557 c 0.04,0.504 0.13,0.934 0.269,1.29 0.141,0.355 0.319,0.666 0.535,0.929 0.215,0.264 0.46,0.497 0.732,0.697 0.272,0.2 0.556,0.387 0.852,0.563 0.36,0.225 0.676,0.431 0.948,0.619 0.271,0.188 0.498,0.377 0.678,0.57 0.179,0.192 0.316,0.399 0.408,0.624 0.092,0.224 0.139,0.484 0.139,0.779 0,0.232 -0.045,0.443 -0.133,0.631 C 3.968,0.193 3.85,0.355 3.702,0.492 3.554,0.627 3.38,0.732 3.18,0.804 2.979,0.875 2.768,0.912 2.544,0.912 2.247,0.912 1.993,0.85 1.782,0.726 1.569,0.602 1.396,0.439 1.26,0.24 1.124,0.039 1.026,-0.186 0.966,-0.439 0.905,-0.691 0.88,-0.944 0.888,-1.2 h -1.02 C -0.156,-0.768 -0.112,-0.368 0,0"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path178" /></g><g
|
||||||
|
id="g180"
|
||||||
|
transform="translate(350.8432,328.7968)"><path
|
||||||
|
d="m 0,0 c 0.02,-0.396 0.084,-0.768 0.191,-1.116 0.109,-0.349 0.283,-0.642 0.523,-0.882 0.239,-0.24 0.575,-0.36 1.008,-0.36 0.432,0 0.768,0.12 1.008,0.36 0.24,0.24 0.414,0.533 0.522,0.882 0.107,0.348 0.172,0.72 0.191,1.116 0.02,0.396 0.031,0.754 0.031,1.074 0,0.207 -0.002,0.438 -0.006,0.69 C 3.463,2.016 3.443,2.268 3.408,2.52 3.371,2.771 3.32,3.018 3.252,3.258 3.184,3.498 3.084,3.707 2.951,3.888 2.82,4.068 2.654,4.213 2.453,4.326 2.254,4.437 2.01,4.494 1.722,4.494 1.434,4.494 1.189,4.437 0.99,4.326 0.789,4.213 0.623,4.068 0.492,3.888 0.359,3.707 0.26,3.498 0.191,3.258 0.123,3.018 0.072,2.771 0.035,2.52 0,2.268 -0.021,2.016 -0.024,1.764 -0.028,1.512 -0.03,1.281 -0.03,1.074 -0.03,0.754 -0.021,0.396 0,0 m -1.086,2.033 c 0.016,0.336 0.056,0.664 0.119,0.985 0.065,0.32 0.156,0.624 0.277,0.912 0.12,0.288 0.284,0.54 0.492,0.756 C 0.01,4.902 0.271,5.074 0.588,5.201 0.904,5.33 1.281,5.394 1.722,5.394 2.162,5.394 2.539,5.33 2.855,5.201 3.172,5.074 3.434,4.902 3.642,4.686 3.85,4.47 4.014,4.218 4.134,3.93 4.254,3.642 4.346,3.338 4.41,3.018 4.474,2.697 4.514,2.369 4.529,2.033 4.546,1.697 4.554,1.373 4.554,1.062 4.554,0.75 4.546,0.426 4.529,0.09 4.514,-0.246 4.474,-0.574 4.41,-0.895 4.346,-1.215 4.254,-1.517 4.134,-1.801 4.014,-2.084 3.85,-2.334 3.642,-2.551 3.434,-2.766 3.174,-2.937 2.861,-3.061 2.55,-3.184 2.17,-3.246 1.722,-3.246 c -0.441,0 -0.818,0.062 -1.134,0.185 -0.317,0.124 -0.578,0.295 -0.786,0.51 -0.208,0.217 -0.372,0.467 -0.492,0.75 -0.121,0.284 -0.212,0.586 -0.277,0.906 -0.063,0.321 -0.103,0.649 -0.119,0.985 -0.017,0.336 -0.024,0.66 -0.024,0.972 0,0.311 0.007,0.635 0.024,0.971"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path182" /></g><g
|
||||||
|
id="g184"
|
||||||
|
transform="translate(361.3911,329.6845)"><path
|
||||||
|
d="m 0,0 c -0.076,0.276 -0.192,0.522 -0.349,0.738 -0.156,0.216 -0.355,0.388 -0.599,0.516 -0.244,0.128 -0.531,0.192 -0.858,0.192 -0.344,0 -0.636,-0.068 -0.877,-0.204 -0.24,-0.136 -0.435,-0.313 -0.588,-0.534 -0.152,-0.221 -0.261,-0.471 -0.33,-0.75 -0.068,-0.28 -0.101,-0.564 -0.101,-0.852 0,-0.304 0.036,-0.598 0.107,-0.882 0.073,-0.284 0.187,-0.534 0.342,-0.75 0.156,-0.216 0.358,-0.39 0.607,-0.522 0.248,-0.133 0.547,-0.198 0.9,-0.198 0.351,0 0.645,0.067 0.882,0.204 0.236,0.136 0.425,0.317 0.57,0.54 0.144,0.224 0.248,0.48 0.312,0.769 0.063,0.287 0.096,0.584 0.096,0.886 C 0.114,-0.558 0.075,-0.276 0,0 m -3.666,2.202 v -0.84 h 0.024 c 0.168,0.344 0.432,0.594 0.791,0.75 0.361,0.157 0.756,0.235 1.189,0.235 0.479,0 0.897,-0.089 1.254,-0.265 C -0.052,1.905 0.243,1.668 0.479,1.368 0.716,1.067 0.893,0.722 1.014,0.33 c 0.12,-0.392 0.18,-0.808 0.18,-1.248 0,-0.44 -0.058,-0.856 -0.174,-1.248 C 0.903,-2.558 0.728,-2.899 0.491,-3.192 0.256,-3.483 -0.04,-3.714 -0.396,-3.882 -0.753,-4.05 -1.167,-4.134 -1.638,-4.134 c -0.152,0 -0.322,0.016 -0.51,0.048 -0.189,0.032 -0.374,0.084 -0.558,0.155 -0.184,0.073 -0.358,0.17 -0.522,0.295 -0.164,0.123 -0.302,0.278 -0.414,0.462 h -0.024 v -3.192 h -1.021 v 8.568 z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path186" /></g><g
|
||||||
|
id="g188"
|
||||||
|
transform="translate(363.2924,331.8867)"><path
|
||||||
|
d="M 0,0 H 1.309 L 2.796,-2.172 4.344,0 h 1.224 l -2.136,-2.855 2.4,-3.349 H 4.523 L 2.796,-3.637 1.068,-6.204 h -1.236 l 2.328,3.265 z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path190" /></g><g
|
||||||
|
id="g192"
|
||||||
|
transform="translate(379.1928,329.1269)"><path
|
||||||
|
d="m 0,0 v -0.816 h -2.616 v -2.628 h -0.816 v 2.628 H -6.048 V 0 h 2.616 v 2.627 h 0.816 V 0 Z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path194" /></g><g
|
||||||
|
id="g196"
|
||||||
|
transform="translate(152.6083,168.5454)"><path
|
||||||
|
d="m 0,0 c -8.995,0 -16.288,-7.293 -16.288,-16.29 0,-7.197 4.667,-13.302 11.14,-15.457 0.815,-0.149 1.112,0.354 1.112,0.786 0,0.386 -0.014,1.411 -0.022,2.77 -4.531,-0.984 -5.487,2.184 -5.487,2.184 -0.741,1.882 -1.809,2.383 -1.809,2.383 -1.479,1.01 0.112,0.99 0.112,0.99 1.635,-0.115 2.495,-1.679 2.495,-1.679 1.453,-2.489 3.813,-1.77 4.741,-1.353 0.148,1.052 0.568,1.77 1.034,2.177 -3.617,0.411 -7.42,1.809 -7.42,8.051 0,1.778 0.635,3.232 1.677,4.371 -0.168,0.412 -0.727,2.068 0.159,4.311 0,0 1.368,0.438 4.48,-1.67 1.299,0.362 2.693,0.542 4.078,0.548 1.383,-0.006 2.777,-0.186 4.078,-0.548 3.11,2.108 4.475,1.67 4.475,1.67 0.889,-2.243 0.33,-3.899 0.162,-4.311 1.044,-1.139 1.675,-2.593 1.675,-4.371 0,-6.258 -3.809,-7.635 -7.438,-8.038 0.585,-0.503 1.106,-1.497 1.106,-3.017 0,-2.177 -0.02,-3.934 -0.02,-4.468 0,-0.436 0.293,-0.943 1.12,-0.784 6.468,2.159 11.131,8.26 11.131,15.455 C 16.291,-7.293 8.997,0 0,0"
|
||||||
|
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||||
|
id="path198" /></g><g
|
||||||
|
id="g200"
|
||||||
|
transform="translate(350.6088,217.5547)"><path
|
||||||
|
d="m 0,0 c -33.347,0 -60.388,-27.035 -60.388,-60.388 0,-26.68 17.303,-49.316 41.297,-57.301 3.018,-0.559 4.126,1.31 4.126,2.905 0,1.439 -0.056,6.197 -0.082,11.243 -16.8,-3.653 -20.345,7.125 -20.345,7.125 -2.747,6.979 -6.705,8.836 -6.705,8.836 -5.479,3.748 0.413,3.671 0.413,3.671 6.064,-0.426 9.257,-6.224 9.257,-6.224 5.386,-9.231 14.127,-6.562 17.573,-5.019 0.543,3.902 2.107,6.567 3.834,8.075 -13.413,1.526 -27.513,6.705 -27.513,29.844 0,6.592 2.359,11.979 6.222,16.208 -0.627,1.522 -2.694,7.664 0.586,15.982 0,0 5.071,1.622 16.61,-6.191 4.817,1.338 9.983,2.009 15.115,2.033 5.132,-0.024 10.302,-0.695 15.128,-2.033 11.526,7.813 16.59,6.191 16.59,6.191 3.287,-8.318 1.22,-14.46 0.593,-15.982 3.872,-4.229 6.214,-9.616 6.214,-16.208 0,-23.195 -14.127,-28.301 -27.574,-29.796 2.166,-1.874 4.096,-5.549 4.096,-11.183 0,-8.08 -0.069,-14.583 -0.069,-16.572 0,-1.608 1.086,-3.491 4.147,-2.898 23.982,7.994 41.263,30.622 41.263,57.294 C 60.388,-27.035 33.351,0 0,0"
|
||||||
|
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||||
|
id="path202" /></g><g
|
||||||
|
id="g204"
|
||||||
|
transform="translate(313.0932,130.8515)"><path
|
||||||
|
d="m 0,0 c -0.133,-0.301 -0.605,-0.391 -1.035,-0.184 -0.439,0.197 -0.684,0.606 -0.542,0.907 0.13,0.308 0.602,0.394 1.04,0.188 C -0.099,0.714 0.151,0.301 0,0"
|
||||||
|
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path206" /></g><g
|
||||||
|
id="g208"
|
||||||
|
transform="translate(315.5395,128.123)"><path
|
||||||
|
d="M 0,0 C -0.288,-0.267 -0.852,-0.143 -1.233,0.279 -1.629,0.7 -1.702,1.264 -1.41,1.534 -1.113,1.801 -0.567,1.676 -0.172,1.255 0.224,0.829 0.301,0.27 0,0"
|
||||||
|
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path210" /></g><g
|
||||||
|
id="g212"
|
||||||
|
transform="translate(317.9204,124.6455)"><path
|
||||||
|
d="M 0,0 C -0.37,-0.258 -0.976,-0.017 -1.35,0.52 -1.72,1.058 -1.72,1.702 -1.341,1.96 -0.967,2.218 -0.37,1.985 0.009,1.453 0.378,0.907 0.378,0.263 0,0"
|
||||||
|
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path214" /></g><g
|
||||||
|
id="g216"
|
||||||
|
transform="translate(321.1821,121.2851)"><path
|
||||||
|
d="M 0,0 C -0.331,-0.365 -1.036,-0.267 -1.552,0.231 -2.08,0.718 -2.227,1.409 -1.896,1.774 -1.56,2.14 -0.851,2.037 -0.331,1.543 0.193,1.057 0.352,0.361 0,0"
|
||||||
|
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path218" /></g><g
|
||||||
|
id="g220"
|
||||||
|
transform="translate(325.6821,119.334)"><path
|
||||||
|
d="m 0,0 c -0.147,-0.473 -0.825,-0.687 -1.509,-0.486 -0.683,0.207 -1.13,0.76 -0.992,1.238 0.142,0.477 0.824,0.7 1.513,0.485 C -0.306,1.031 0.142,0.481 0,0"
|
||||||
|
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path222" /></g><g
|
||||||
|
id="g224"
|
||||||
|
transform="translate(330.6245,118.9726)"><path
|
||||||
|
d="m 0,0 c 0.017,-0.498 -0.563,-0.911 -1.281,-0.92 -0.722,-0.017 -1.307,0.387 -1.315,0.877 0,0.503 0.568,0.911 1.289,0.924 C -0.589,0.895 0,0.494 0,0"
|
||||||
|
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path226" /></g><g
|
||||||
|
id="g228"
|
||||||
|
transform="translate(335.2231,119.7549)"><path
|
||||||
|
d="m 0,0 c 0.086,-0.485 -0.413,-0.984 -1.126,-1.117 -0.701,-0.129 -1.35,0.172 -1.439,0.653 -0.087,0.498 0.42,0.997 1.121,1.126 C -0.73,0.786 -0.091,0.494 0,0"
|
||||||
|
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path230" /></g><g
|
||||||
|
id="g232"
|
||||||
|
transform="translate(224.8979,223.4882)"><path
|
||||||
|
d="M 0,0 V -0.5"
|
||||||
|
style="fill:none;stroke:#3a7fc3;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="path234" /></g><g
|
||||||
|
id="g236"
|
||||||
|
transform="translate(224.8979,220.9882)"><path
|
||||||
|
d="M 0,0 V -133.993"
|
||||||
|
style="fill:none;stroke:#3a7fc3;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:1, 2;stroke-dashoffset:0;stroke-opacity:1"
|
||||||
|
id="path238" /></g><g
|
||||||
|
id="g240"
|
||||||
|
transform="translate(224.8979,85.9951)"><path
|
||||||
|
d="M 0,0 V -0.5"
|
||||||
|
style="fill:none;stroke:#3a7fc3;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="path242" /></g><g
|
||||||
|
id="g244"
|
||||||
|
transform="translate(133.2758,71.4795)"><path
|
||||||
|
d="m 0,0 c -0.38,0.276 -0.866,0.414 -1.458,0.414 -0.24,0 -0.476,-0.024 -0.708,-0.071 -0.232,-0.049 -0.438,-0.129 -0.618,-0.241 -0.18,-0.113 -0.324,-0.262 -0.432,-0.451 -0.108,-0.187 -0.162,-0.422 -0.162,-0.701 0,-0.264 0.078,-0.478 0.234,-0.642 0.156,-0.165 0.364,-0.298 0.624,-0.402 0.26,-0.104 0.554,-0.19 0.882,-0.259 0.328,-0.067 0.662,-0.141 1.002,-0.22 0.34,-0.08 0.674,-0.175 1.002,-0.284 C 0.694,-2.964 0.988,-3.11 1.248,-3.294 1.508,-3.478 1.716,-3.71 1.872,-3.989 2.028,-4.271 2.106,-4.622 2.106,-5.046 2.106,-5.502 2.004,-5.892 1.8,-6.216 1.596,-6.54 1.334,-6.804 1.014,-7.008 0.694,-7.212 0.336,-7.36 -0.06,-7.452 -0.456,-7.544 -0.85,-7.59 -1.242,-7.59 c -0.48,0 -0.934,0.06 -1.362,0.18 -0.428,0.12 -0.804,0.302 -1.128,0.546 -0.324,0.244 -0.58,0.556 -0.768,0.936 -0.188,0.38 -0.282,0.829 -0.282,1.35 h 1.08 c 0,-0.361 0.07,-0.67 0.21,-0.93 0.14,-0.261 0.324,-0.474 0.552,-0.642 0.228,-0.167 0.494,-0.292 0.798,-0.373 0.304,-0.08 0.616,-0.119 0.936,-0.119 0.256,0 0.514,0.024 0.774,0.073 0.26,0.046 0.494,0.128 0.702,0.246 0.208,0.115 0.376,0.273 0.504,0.472 0.128,0.201 0.192,0.457 0.192,0.769 0,0.296 -0.078,0.536 -0.234,0.72 -0.156,0.183 -0.364,0.334 -0.624,0.45 -0.26,0.116 -0.554,0.21 -0.882,0.282 -0.328,0.072 -0.662,0.147 -1.002,0.223 -0.34,0.075 -0.674,0.163 -1.002,0.263 -0.328,0.1 -0.622,0.232 -0.882,0.396 -0.26,0.164 -0.468,0.376 -0.624,0.636 -0.156,0.259 -0.234,0.586 -0.234,0.978 0,0.432 0.088,0.806 0.264,1.122 0.176,0.316 0.41,0.575 0.702,0.78 0.292,0.204 0.624,0.356 0.996,0.456 0.372,0.1 0.754,0.15 1.146,0.15 0.44,0 0.848,-0.053 1.224,-0.156 C 0.19,1.114 0.52,0.95 0.804,0.725 1.088,0.502 1.312,0.22 1.476,-0.12 1.64,-0.46 1.73,-0.866 1.746,-1.338 H 0.666 C 0.602,-0.722 0.38,-0.276 0,0"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path246" /></g><g
|
||||||
|
id="g248"
|
||||||
|
transform="translate(137.5537,70.2851)"><path
|
||||||
|
d="m 0,0 v -0.912 h 0.024 c 0.464,0.705 1.132,1.057 2.004,1.057 0.384,0 0.732,-0.081 1.044,-0.241 0.312,-0.16 0.532,-0.431 0.66,-0.816 0.208,0.336 0.482,0.596 0.822,0.78 0.34,0.185 0.714,0.277 1.122,0.277 0.312,0 0.594,-0.035 0.846,-0.102 0.252,-0.068 0.468,-0.175 0.648,-0.318 0.18,-0.145 0.32,-0.33 0.42,-0.559 0.1,-0.228 0.15,-0.502 0.15,-0.822 V -6.203 H 6.72 v 4.067 c 0,0.193 -0.016,0.372 -0.048,0.54 -0.032,0.168 -0.092,0.315 -0.18,0.438 -0.088,0.125 -0.21,0.222 -0.366,0.295 -0.156,0.072 -0.358,0.107 -0.606,0.107 -0.504,0 -0.9,-0.143 -1.188,-0.431 C 4.044,-1.476 3.9,-1.859 3.9,-2.34 V -6.203 H 2.88 v 4.067 c 0,0.2 -0.018,0.384 -0.054,0.552 -0.036,0.168 -0.098,0.314 -0.186,0.438 -0.088,0.125 -0.206,0.22 -0.354,0.289 -0.148,0.068 -0.338,0.101 -0.57,0.101 -0.296,0 -0.55,-0.059 -0.762,-0.18 C 0.742,-1.056 0.57,-1.199 0.438,-1.367 0.306,-1.535 0.21,-1.709 0.15,-1.89 0.09,-2.07 0.06,-2.22 0.06,-2.34 V -6.203 H -0.96 V 0 Z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path250" /></g><g
|
||||||
|
id="g252"
|
||||||
|
transform="translate(150.1655,67.0761)"><path
|
||||||
|
d="m 0,0 c -0.208,-0.045 -0.426,-0.08 -0.654,-0.108 -0.228,-0.029 -0.458,-0.06 -0.69,-0.097 -0.232,-0.035 -0.44,-0.094 -0.624,-0.174 -0.184,-0.08 -0.334,-0.193 -0.45,-0.342 -0.116,-0.148 -0.174,-0.349 -0.174,-0.605 0,-0.168 0.034,-0.311 0.102,-0.426 0.068,-0.117 0.156,-0.211 0.264,-0.283 0.108,-0.071 0.236,-0.123 0.384,-0.155 0.148,-0.033 0.298,-0.048 0.45,-0.048 0.336,0 0.624,0.045 0.864,0.137 0.24,0.092 0.436,0.208 0.588,0.349 0.152,0.139 0.264,0.291 0.336,0.455 0.072,0.164 0.108,0.318 0.108,0.463 V 0.209 C 0.376,0.113 0.208,0.043 0,0 m 1.428,-3.127 c -0.264,0 -0.474,0.074 -0.63,0.223 -0.156,0.147 -0.234,0.389 -0.234,0.725 -0.28,-0.336 -0.606,-0.578 -0.978,-0.725 -0.372,-0.149 -0.774,-0.223 -1.206,-0.223 -0.28,0 -0.544,0.03 -0.792,0.09 -0.248,0.06 -0.466,0.16 -0.654,0.301 -0.188,0.139 -0.336,0.319 -0.444,0.539 -0.108,0.22 -0.162,0.486 -0.162,0.799 0,0.351 0.06,0.639 0.18,0.863 0.12,0.224 0.278,0.406 0.474,0.547 0.196,0.139 0.42,0.246 0.672,0.318 0.252,0.071 0.51,0.131 0.774,0.18 0.28,0.055 0.546,0.097 0.798,0.125 0.252,0.028 0.474,0.068 0.666,0.121 0.192,0.051 0.344,0.127 0.456,0.227 0.112,0.101 0.168,0.246 0.168,0.439 0,0.223 -0.042,0.403 -0.126,0.539 -0.084,0.137 -0.192,0.24 -0.324,0.312 -0.132,0.073 -0.28,0.121 -0.444,0.145 -0.164,0.023 -0.326,0.035 -0.486,0.035 -0.432,0 -0.792,-0.082 -1.08,-0.246 -0.288,-0.164 -0.444,-0.474 -0.468,-0.93 h -1.02 c 0.016,0.384 0.096,0.708 0.24,0.973 0.144,0.264 0.336,0.478 0.576,0.642 0.24,0.163 0.516,0.282 0.828,0.354 0.312,0.071 0.64,0.108 0.984,0.108 0.28,0 0.558,-0.02 0.834,-0.061 C 0.306,3.254 0.556,3.172 0.78,3.047 1.004,2.924 1.184,2.749 1.32,2.525 1.456,2.301 1.524,2.01 1.524,1.649 v -3.192 c 0,-0.24 0.014,-0.416 0.042,-0.527 0.028,-0.113 0.122,-0.168 0.282,-0.168 0.088,0 0.192,0.019 0.312,0.059 V -2.971 C 1.984,-3.074 1.74,-3.127 1.428,-3.127"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path254" /></g><path
|
||||||
|
d="m 154.354,64.082 h -1.02 v 8.567 h 1.02 z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path256" /><path
|
||||||
|
d="m 157.017,64.082 h -1.02 v 8.567 h 1.02 z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path258" /><g
|
||||||
|
id="g260"
|
||||||
|
transform="translate(101.854,54.9863)"><path
|
||||||
|
d="m 0,0 v 0.899 h 1.044 v 0.924 c 0,0.504 0.146,0.886 0.438,1.146 0.292,0.26 0.718,0.39 1.278,0.39 0.096,0 0.206,-0.007 0.33,-0.023 C 3.214,3.319 3.324,3.295 3.42,3.264 V 2.375 C 3.332,2.407 3.236,2.43 3.132,2.441 3.028,2.453 2.932,2.459 2.844,2.459 2.596,2.459 2.404,2.411 2.268,2.315 2.132,2.219 2.064,2.035 2.064,1.764 V 0.899 h 1.2 V 0 h -1.2 V -5.305 H 1.044 V 0 Z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path262" /></g><g
|
||||||
|
id="g264"
|
||||||
|
transform="translate(106.9238,51.7754)"><path
|
||||||
|
d="m 0,0 c 0.1,-0.292 0.238,-0.535 0.414,-0.732 0.176,-0.196 0.382,-0.346 0.618,-0.45 0.236,-0.103 0.486,-0.156 0.75,-0.156 0.264,0 0.514,0.053 0.75,0.156 0.236,0.104 0.442,0.254 0.618,0.45 0.176,0.197 0.314,0.44 0.414,0.732 0.1,0.292 0.15,0.626 0.15,1.002 0,0.377 -0.05,0.71 -0.15,1.002 C 3.464,2.297 3.326,2.542 3.15,2.742 2.974,2.941 2.768,3.094 2.532,3.198 2.296,3.303 2.046,3.354 1.782,3.354 1.518,3.354 1.268,3.303 1.032,3.198 0.796,3.094 0.59,2.941 0.414,2.742 0.238,2.542 0.1,2.297 0,2.004 -0.1,1.712 -0.15,1.379 -0.15,1.002 -0.15,0.626 -0.1,0.292 0,0 m -1.038,2.28 c 0.128,0.396 0.32,0.74 0.576,1.033 0.256,0.291 0.572,0.521 0.948,0.689 0.376,0.168 0.808,0.252 1.296,0.252 0.496,0 0.93,-0.084 1.302,-0.252 C 3.456,3.834 3.77,3.604 4.026,3.313 4.282,3.02 4.474,2.676 4.602,2.28 4.73,1.885 4.794,1.458 4.794,1.002 4.794,0.547 4.73,0.122 4.602,-0.27 4.474,-0.662 4.282,-1.004 4.026,-1.296 3.77,-1.588 3.456,-1.816 3.084,-1.98 2.712,-2.144 2.278,-2.226 1.782,-2.226 c -0.488,0 -0.92,0.082 -1.296,0.246 -0.376,0.164 -0.692,0.392 -0.948,0.684 -0.256,0.292 -0.448,0.634 -0.576,1.026 -0.128,0.392 -0.192,0.817 -0.192,1.272 0,0.456 0.064,0.883 0.192,1.278"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path266" /></g><g
|
||||||
|
id="g268"
|
||||||
|
transform="translate(113.8417,55.8857)"><path
|
||||||
|
d="m 0,0 v -1.308 h 0.024 c 0.248,0.504 0.552,0.875 0.912,1.116 0.36,0.24 0.816,0.351 1.368,0.336 v -1.08 C 1.896,-0.936 1.548,-0.992 1.26,-1.104 0.972,-1.216 0.74,-1.38 0.564,-1.597 0.388,-1.811 0.26,-2.074 0.18,-2.382 0.1,-2.69 0.06,-3.044 0.06,-3.444 v -2.76 H -0.96 V 0 Z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path270" /></g><g
|
||||||
|
id="g272"
|
||||||
|
transform="translate(122.7333,49.6816)"><path
|
||||||
|
d="m 0,0 v 6.096 h -2.208 v 0.816 c 0.288,0 0.568,0.022 0.84,0.067 0.272,0.042 0.518,0.125 0.738,0.246 0.22,0.119 0.406,0.283 0.558,0.491 C 0.08,7.924 0.184,8.188 0.24,8.508 H 1.02 L 1.02,0 Z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path274" /></g><g
|
||||||
|
id="g276"
|
||||||
|
transform="translate(128.8295,54.1035)"><path
|
||||||
|
d="M 0,0 C -0.216,-0.1 -0.4,-0.236 -0.552,-0.408 -0.704,-0.58 -0.818,-0.784 -0.893,-1.02 -0.97,-1.256 -1.008,-1.506 -1.008,-1.77 c 0,-0.263 0.04,-0.511 0.12,-0.744 0.08,-0.232 0.194,-0.431 0.342,-0.599 0.148,-0.168 0.332,-0.303 0.552,-0.403 0.22,-0.1 0.47,-0.15 0.75,-0.15 0.28,0 0.526,0.05 0.738,0.15 0.212,0.1 0.39,0.239 0.534,0.414 0.144,0.176 0.254,0.378 0.33,0.606 0.076,0.228 0.114,0.467 0.114,0.715 0,0.263 -0.034,0.513 -0.102,0.75 C 2.302,-0.796 2.196,-0.592 2.052,-0.42 1.908,-0.248 1.728,-0.109 1.512,-0.006 1.296,0.098 1.044,0.15 0.756,0.15 0.468,0.15 0.216,0.1 0,0 M 1.848,2.838 C 1.6,3.07 1.272,3.186 0.864,3.186 0.432,3.186 0.084,3.08 -0.18,2.868 -0.444,2.656 -0.65,2.389 -0.798,2.064 -0.946,1.74 -1.048,1.391 -1.104,1.014 -1.16,0.639 -1.192,0.286 -1.2,-0.042 l 0.024,-0.024 c 0.24,0.392 0.538,0.675 0.894,0.852 0.356,0.176 0.766,0.265 1.23,0.265 C 1.356,1.051 1.722,0.98 2.046,0.84 2.37,0.7 2.642,0.506 2.862,0.258 3.082,0.01 3.253,-0.281 3.372,-0.617 3.492,-0.954 3.552,-1.318 3.552,-1.71 3.552,-2.021 3.504,-2.346 3.408,-2.682 3.312,-3.018 3.154,-3.324 2.934,-3.6 2.714,-3.876 2.422,-4.104 2.058,-4.283 1.694,-4.464 1.244,-4.554 0.708,-4.554 c -0.632,0 -1.14,0.128 -1.524,0.384 -0.384,0.256 -0.68,0.584 -0.888,0.984 -0.208,0.4 -0.346,0.84 -0.414,1.321 -0.068,0.479 -0.102,0.943 -0.102,1.391 0,0.583 0.05,1.15 0.15,1.699 0.1,0.546 0.27,1.033 0.511,1.457 C -1.32,3.105 -1,3.445 -0.6,3.702 -0.2,3.958 0.304,4.086 0.912,4.086 1.616,4.086 2.176,3.9 2.592,3.528 3.008,3.156 3.248,2.618 3.312,1.914 H 2.292 C 2.244,2.299 2.096,2.605 1.848,2.838"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path278" /></g><g
|
||||||
|
id="g280"
|
||||||
|
transform="translate(138.3159,53.6836)"><path
|
||||||
|
d="m 0,0 c -0.076,0.275 -0.192,0.521 -0.348,0.738 -0.156,0.216 -0.356,0.388 -0.6,0.516 -0.244,0.128 -0.531,0.192 -0.858,0.192 -0.344,0 -0.636,-0.068 -0.876,-0.204 -0.24,-0.137 -0.436,-0.314 -0.588,-0.534 -0.152,-0.22 -0.262,-0.47 -0.33,-0.75 -0.069,-0.28 -0.102,-0.564 -0.102,-0.853 0,-0.303 0.036,-0.597 0.108,-0.88 0.071,-0.286 0.186,-0.536 0.341,-0.75 0.157,-0.217 0.358,-0.391 0.607,-0.523 0.247,-0.132 0.548,-0.198 0.9,-0.198 0.351,0 0.646,0.068 0.882,0.204 0.236,0.136 0.425,0.315 0.569,0.54 0.145,0.224 0.249,0.481 0.312,0.768 0.064,0.289 0.097,0.584 0.097,0.888 C 0.114,-0.559 0.076,-0.275 0,0 M -3.666,2.202 V 1.361 h 0.024 c 0.168,0.345 0.431,0.595 0.792,0.75 0.36,0.156 0.756,0.235 1.188,0.235 0.48,0 0.898,-0.088 1.254,-0.264 C -0.052,1.906 0.244,1.668 0.48,1.368 0.716,1.068 0.893,0.722 1.014,0.33 c 0.12,-0.392 0.18,-0.809 0.18,-1.248 0,-0.44 -0.058,-0.856 -0.175,-1.248 C 0.904,-2.559 0.727,-2.9 0.492,-3.191 0.256,-3.484 -0.041,-3.714 -0.396,-3.882 -0.753,-4.05 -1.167,-4.134 -1.638,-4.134 c -0.153,0 -0.323,0.017 -0.511,0.048 -0.188,0.032 -0.374,0.084 -0.557,0.156 -0.184,0.072 -0.359,0.17 -0.522,0.294 -0.164,0.124 -0.302,0.278 -0.414,0.462 h -0.024 v -3.191 h -1.02 v 8.567 z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path282" /></g><g
|
||||||
|
id="g284"
|
||||||
|
transform="translate(140.2172,55.8857)"><path
|
||||||
|
d="M 0,0 H 1.308 L 2.796,-2.172 4.344,0 h 1.224 l -2.136,-2.856 2.4,-3.348 H 4.524 L 2.796,-3.636 1.068,-6.204 H -0.168 L 2.16,-2.94 Z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path286" /></g><path
|
||||||
|
d="m 150.225,52.537 h -3.468 v 0.961 h 3.468 z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path288" /><g
|
||||||
|
id="g290"
|
||||||
|
transform="translate(154.0771,49.6816)"><path
|
||||||
|
d="m 0,0 v 6.096 h -2.208 v 0.816 c 0.288,0 0.568,0.022 0.84,0.067 0.272,0.042 0.518,0.125 0.738,0.246 0.22,0.119 0.406,0.283 0.558,0.491 C 0.08,7.924 0.184,8.188 0.24,8.508 H 1.02 L 1.02,0 Z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path292" /></g><g
|
||||||
|
id="g294"
|
||||||
|
transform="translate(158.1572,56.3769)"><path
|
||||||
|
d="m 0,0 c 0.112,0.369 0.286,0.686 0.522,0.955 0.236,0.268 0.53,0.478 0.882,0.629 0.352,0.152 0.752,0.228 1.2,0.228 0.368,0 0.714,-0.053 1.038,-0.162 C 3.966,1.543 4.248,1.387 4.488,1.183 4.728,0.979 4.918,0.725 5.058,0.421 5.198,0.117 5.268,-0.235 5.268,-0.635 5.268,-1.012 5.21,-1.344 5.094,-1.631 4.977,-1.92 4.824,-2.178 4.632,-2.405 4.44,-2.633 4.22,-2.84 3.972,-3.023 3.724,-3.207 3.468,-3.383 3.204,-3.551 2.94,-3.711 2.676,-3.869 2.412,-4.025 2.148,-4.182 1.906,-4.348 1.686,-4.523 1.466,-4.699 1.278,-4.889 1.122,-5.094 0.966,-5.297 0.864,-5.531 0.816,-5.795 h 4.368 v -0.9 h -5.556 c 0.04,0.504 0.13,0.933 0.27,1.29 0.14,0.356 0.318,0.666 0.534,0.93 0.216,0.264 0.46,0.495 0.732,0.696 0.272,0.199 0.556,0.387 0.852,0.564 0.36,0.224 0.676,0.43 0.948,0.617 0.272,0.188 0.498,0.379 0.678,0.571 0.18,0.191 0.316,0.4 0.408,0.624 0.092,0.223 0.138,0.483 0.138,0.78 0,0.231 -0.045,0.441 -0.132,0.63 C 3.968,0.194 3.85,0.356 3.702,0.492 3.554,0.629 3.38,0.732 3.18,0.805 2.98,0.877 2.768,0.912 2.544,0.912 2.247,0.912 1.994,0.851 1.782,0.727 1.57,0.603 1.396,0.44 1.26,0.24 1.124,0.041 1.026,-0.186 0.966,-0.437 0.906,-0.689 0.88,-0.943 0.888,-1.199 h -1.02 C -0.156,-0.768 -0.112,-0.367 0,0"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path296" /></g><g
|
||||||
|
id="g298"
|
||||||
|
transform="translate(165.7832,52.7949)"><path
|
||||||
|
d="m 0,0 c 0.02,-0.396 0.084,-0.768 0.192,-1.115 0.108,-0.348 0.282,-0.643 0.522,-0.882 0.24,-0.24 0.576,-0.36 1.008,-0.36 0.432,0 0.768,0.12 1.008,0.36 0.24,0.239 0.414,0.534 0.522,0.882 0.108,0.347 0.172,0.719 0.192,1.115 0.02,0.396 0.03,0.755 0.03,1.074 0,0.209 -0.002,0.439 -0.006,0.691 C 3.464,2.017 3.444,2.268 3.408,2.52 3.372,2.773 3.32,3.018 3.252,3.259 3.184,3.498 3.084,3.709 2.952,3.889 2.82,4.068 2.654,4.215 2.454,4.326 2.254,4.438 2.01,4.494 1.722,4.494 1.434,4.494 1.19,4.438 0.99,4.326 0.79,4.215 0.624,4.068 0.492,3.889 0.36,3.709 0.26,3.498 0.192,3.259 0.124,3.018 0.072,2.773 0.036,2.52 0,2.268 -0.02,2.017 -0.024,1.765 -0.028,1.513 -0.03,1.283 -0.03,1.074 -0.03,0.755 -0.02,0.396 0,0 m -1.086,2.035 c 0.016,0.336 0.056,0.664 0.12,0.983 0.064,0.32 0.156,0.625 0.276,0.913 0.12,0.288 0.284,0.54 0.492,0.755 C 0.01,4.902 0.272,5.074 0.588,5.203 0.904,5.33 1.282,5.395 1.722,5.395 2.162,5.395 2.54,5.33 2.856,5.203 3.172,5.074 3.434,4.902 3.642,4.686 3.85,4.471 4.014,4.219 4.134,3.931 4.254,3.643 4.346,3.338 4.41,3.018 4.474,2.699 4.514,2.371 4.53,2.035 4.546,1.699 4.554,1.375 4.554,1.062 4.554,0.75 4.546,0.427 4.53,0.091 4.514,-0.245 4.474,-0.573 4.41,-0.893 4.346,-1.213 4.254,-1.516 4.134,-1.799 4.014,-2.084 3.85,-2.334 3.642,-2.549 3.434,-2.766 3.174,-2.936 2.862,-3.059 2.55,-3.184 2.17,-3.245 1.722,-3.245 c -0.44,0 -0.818,0.061 -1.134,0.186 -0.316,0.123 -0.578,0.293 -0.786,0.51 -0.208,0.215 -0.372,0.465 -0.492,0.75 -0.12,0.283 -0.212,0.586 -0.276,0.906 -0.064,0.32 -0.104,0.648 -0.12,0.984 -0.016,0.336 -0.024,0.659 -0.024,0.971 0,0.313 0.008,0.637 0.024,0.973"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path300" /></g><g
|
||||||
|
id="g302"
|
||||||
|
transform="translate(176.3315,53.6836)"><path
|
||||||
|
d="m 0,0 c -0.076,0.275 -0.192,0.521 -0.348,0.738 -0.156,0.216 -0.356,0.388 -0.6,0.516 -0.244,0.128 -0.531,0.192 -0.858,0.192 -0.344,0 -0.636,-0.068 -0.876,-0.204 -0.24,-0.137 -0.436,-0.314 -0.588,-0.534 -0.152,-0.22 -0.262,-0.47 -0.33,-0.75 -0.069,-0.28 -0.102,-0.564 -0.102,-0.853 0,-0.303 0.036,-0.597 0.108,-0.88 0.071,-0.286 0.186,-0.536 0.342,-0.75 0.156,-0.217 0.357,-0.391 0.606,-0.523 0.248,-0.132 0.548,-0.198 0.9,-0.198 0.351,0 0.646,0.068 0.882,0.204 0.236,0.136 0.425,0.315 0.57,0.54 0.144,0.224 0.248,0.481 0.312,0.768 0.063,0.289 0.096,0.584 0.096,0.888 C 0.114,-0.559 0.076,-0.275 0,0 M -3.666,2.202 V 1.361 h 0.024 c 0.168,0.345 0.431,0.595 0.792,0.75 0.36,0.156 0.756,0.235 1.188,0.235 0.48,0 0.898,-0.088 1.254,-0.264 C -0.052,1.906 0.244,1.668 0.48,1.368 0.716,1.068 0.893,0.722 1.014,0.33 c 0.12,-0.392 0.18,-0.809 0.18,-1.248 0,-0.44 -0.058,-0.856 -0.174,-1.248 C 0.904,-2.559 0.727,-2.9 0.492,-3.191 0.256,-3.484 -0.04,-3.714 -0.396,-3.882 -0.752,-4.05 -1.167,-4.134 -1.638,-4.134 c -0.152,0 -0.323,0.017 -0.51,0.048 -0.188,0.032 -0.375,0.084 -0.558,0.156 -0.184,0.072 -0.358,0.17 -0.522,0.294 -0.164,0.124 -0.302,0.278 -0.414,0.462 h -0.024 v -3.191 h -1.02 v 8.567 z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path304" /></g><g
|
||||||
|
id="g306"
|
||||||
|
transform="translate(178.2329,55.8857)"><path
|
||||||
|
d="M 0,0 H 1.308 L 2.796,-2.172 4.344,0 h 1.224 l -2.136,-2.856 2.4,-3.348 H 4.524 L 2.796,-3.636 1.068,-6.204 H -0.168 L 2.16,-2.94 Z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path308" /></g><g
|
||||||
|
id="g310"
|
||||||
|
transform="translate(335.6333,72.6504)"><path
|
||||||
|
d="M 0,0 V -7.607 H 4.536 V -8.568 H -1.14 l 0,8.568 z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path312" /></g><g
|
||||||
|
id="g314"
|
||||||
|
transform="translate(344.3334,67.0761)"><path
|
||||||
|
d="m 0,0 c -0.209,-0.044 -0.426,-0.08 -0.654,-0.107 -0.229,-0.029 -0.459,-0.061 -0.691,-0.096 -0.231,-0.037 -0.44,-0.095 -0.624,-0.174 -0.183,-0.08 -0.334,-0.195 -0.449,-0.343 -0.117,-0.147 -0.174,-0.35 -0.174,-0.606 0,-0.168 0.034,-0.31 0.102,-0.426 0.067,-0.115 0.156,-0.209 0.264,-0.281 0.107,-0.072 0.236,-0.125 0.384,-0.156 0.148,-0.033 0.297,-0.049 0.45,-0.049 0.335,0 0.624,0.047 0.864,0.138 0.239,0.092 0.435,0.208 0.588,0.348 0.151,0.141 0.264,0.293 0.336,0.457 0.071,0.163 0.108,0.317 0.108,0.461 V 0.211 C 0.375,0.114 0.207,0.045 0,0 m 1.428,-3.125 c -0.264,0 -0.475,0.073 -0.631,0.221 -0.155,0.148 -0.233,0.39 -0.233,0.726 -0.281,-0.336 -0.607,-0.578 -0.978,-0.726 -0.373,-0.148 -0.774,-0.221 -1.207,-0.221 -0.279,0 -0.543,0.029 -0.791,0.09 -0.248,0.059 -0.467,0.16 -0.654,0.299 -0.188,0.14 -0.336,0.32 -0.444,0.541 -0.109,0.219 -0.162,0.486 -0.162,0.798 0,0.351 0.06,0.639 0.18,0.864 0.119,0.223 0.277,0.405 0.474,0.545 0.196,0.14 0.419,0.246 0.671,0.318 0.252,0.072 0.511,0.133 0.775,0.18 0.279,0.056 0.546,0.098 0.798,0.127 0.252,0.027 0.473,0.067 0.666,0.119 0.192,0.053 0.343,0.129 0.456,0.228 0.111,0.1 0.168,0.246 0.168,0.438 0,0.224 -0.042,0.404 -0.126,0.541 C 0.306,2.098 0.197,2.202 0.066,2.274 -0.066,2.346 -0.215,2.395 -0.379,2.418 -0.543,2.442 -0.705,2.455 -0.864,2.455 -1.297,2.455 -1.656,2.372 -1.944,2.209 -2.232,2.045 -2.389,1.734 -2.412,1.278 h -1.021 c 0.017,0.384 0.097,0.708 0.241,0.972 0.143,0.264 0.336,0.479 0.575,0.643 0.24,0.164 0.517,0.281 0.828,0.353 0.313,0.072 0.641,0.108 0.984,0.108 0.281,0 0.559,-0.02 0.834,-0.059 C 0.306,3.254 0.556,3.172 0.779,3.049 1.004,2.924 1.184,2.75 1.319,2.526 1.455,2.303 1.524,2.01 1.524,1.65 v -3.191 c 0,-0.24 0.013,-0.416 0.042,-0.529 0.028,-0.112 0.122,-0.168 0.282,-0.168 0.088,0 0.191,0.02 0.312,0.06 V -2.97 C 1.983,-3.074 1.74,-3.125 1.428,-3.125"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path316" /></g><g
|
||||||
|
id="g318"
|
||||||
|
transform="translate(348.3647,70.2871)"><path
|
||||||
|
d="m 0,0 v -1.309 h 0.023 c 0.249,0.504 0.553,0.876 0.913,1.117 0.36,0.239 0.816,0.351 1.369,0.335 v -1.08 C 1.897,-0.937 1.549,-0.992 1.26,-1.105 0.973,-1.217 0.74,-1.381 0.565,-1.597 0.389,-1.812 0.26,-2.074 0.18,-2.383 0.1,-2.691 0.061,-3.045 0.061,-3.445 v -2.76 H -0.96 V 0 Z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path320" /></g><g
|
||||||
|
id="g322"
|
||||||
|
transform="translate(354.4545,65.1211)"><path
|
||||||
|
d="M 0,0 C 0.236,0.139 0.426,0.323 0.57,0.551 0.715,0.779 0.82,1.037 0.889,1.325 0.956,1.613 0.99,1.901 0.99,2.189 0.99,2.461 0.959,2.729 0.895,2.994 0.83,3.258 0.729,3.496 0.588,3.707 0.448,3.92 0.266,4.09 0.043,4.217 -0.182,4.346 -0.453,4.41 -0.773,4.41 -1.102,4.41 -1.382,4.348 -1.613,4.224 -1.846,4.1 -2.035,3.934 -2.184,3.725 -2.332,3.518 -2.439,3.277 -2.508,3.006 -2.576,2.733 -2.609,2.449 -2.609,2.153 c 0,-0.28 0.027,-0.559 0.084,-0.84 0.055,-0.28 0.152,-0.534 0.287,-0.762 0.136,-0.228 0.316,-0.412 0.541,-0.551 0.223,-0.141 0.504,-0.211 0.84,-0.211 0.336,0 0.621,0.07 0.857,0.211 M 1.303,-2.791 C 0.838,-3.295 0.11,-3.547 -0.881,-3.547 c -0.289,0 -0.582,0.032 -0.883,0.096 -0.299,0.064 -0.572,0.168 -0.816,0.312 -0.244,0.145 -0.445,0.332 -0.606,0.565 -0.16,0.232 -0.248,0.515 -0.263,0.851 h 1.019 c 0.008,-0.183 0.067,-0.34 0.174,-0.468 0.109,-0.127 0.24,-0.231 0.397,-0.311 0.156,-0.08 0.326,-0.139 0.509,-0.175 0.184,-0.036 0.36,-0.054 0.528,-0.054 0.337,0 0.621,0.059 0.852,0.174 0.232,0.116 0.425,0.276 0.576,0.481 0.152,0.203 0.262,0.449 0.331,0.738 0.067,0.287 0.102,0.604 0.102,0.947 V 0.018 H 1.015 C 0.838,-0.367 0.572,-0.648 0.217,-0.828 -0.14,-1.009 -0.518,-1.099 -0.918,-1.099 c -0.464,0 -0.867,0.084 -1.211,0.252 -0.345,0.168 -0.633,0.394 -0.865,0.679 -0.231,0.283 -0.406,0.615 -0.522,0.996 -0.116,0.379 -0.173,0.781 -0.173,1.205 0,0.368 0.047,0.746 0.144,1.135 0.096,0.387 0.256,0.739 0.48,1.056 0.223,0.315 0.52,0.575 0.887,0.78 0.368,0.203 0.821,0.305 1.356,0.305 0.392,0 0.752,-0.086 1.08,-0.258 0.328,-0.172 0.584,-0.43 0.768,-0.774 h 0.013 v 0.889 h 0.959 v -5.677 c 0,-1.015 -0.232,-1.776 -0.695,-2.28"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path324" /></g><g
|
||||||
|
id="g326"
|
||||||
|
transform="translate(362.1342,68.4629)"><path
|
||||||
|
d="M 0,0 C -0.092,0.216 -0.215,0.402 -0.371,0.558 -0.527,0.714 -0.712,0.838 -0.924,0.93 -1.136,1.021 -1.369,1.068 -1.625,1.068 -1.89,1.068 -2.128,1.021 -2.34,0.93 -2.552,0.838 -2.734,0.711 -2.886,0.552 -3.037,0.392 -3.158,0.205 -3.246,-0.006 -3.334,-0.219 -3.386,-0.444 -3.401,-0.685 H 0.162 C 0.147,-0.444 0.092,-0.217 0,0 m 0.246,-3.984 c -0.464,-0.352 -1.048,-0.528 -1.752,-0.528 -0.496,0 -0.926,0.08 -1.289,0.239 -0.365,0.161 -0.671,0.384 -0.918,0.672 -0.248,0.288 -0.434,0.632 -0.558,1.033 -0.125,0.4 -0.195,0.836 -0.21,1.308 0,0.471 0.071,0.903 0.215,1.295 0.145,0.393 0.346,0.733 0.606,1.021 0.26,0.288 0.568,0.511 0.925,0.671 0.355,0.161 0.745,0.241 1.17,0.241 0.551,0 1.009,-0.114 1.374,-0.343 C 0.172,1.397 0.465,1.107 0.685,0.756 0.904,0.403 1.057,0.02 1.141,-0.396 1.225,-0.812 1.258,-1.209 1.242,-1.584 h -4.643 c -0.009,-0.273 0.024,-0.53 0.095,-0.774 0.073,-0.245 0.189,-0.46 0.349,-0.648 0.159,-0.188 0.363,-0.338 0.611,-0.451 0.248,-0.111 0.54,-0.168 0.876,-0.168 0.433,0 0.786,0.1 1.062,0.301 0.277,0.199 0.459,0.504 0.547,0.912 H 1.147 C 1.01,-3.108 0.711,-3.633 0.246,-3.984"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path328" /></g><g
|
||||||
|
id="g330"
|
||||||
|
transform="translate(365.3569,70.2871)"><path
|
||||||
|
d="m 0,0 v -1.309 h 0.023 c 0.248,0.504 0.553,0.876 0.912,1.117 0.36,0.239 0.817,0.351 1.369,0.335 v -1.08 C 1.895,-0.937 1.548,-0.992 1.26,-1.105 0.972,-1.217 0.739,-1.381 0.563,-1.597 0.388,-1.812 0.26,-2.074 0.18,-2.383 0.1,-2.691 0.06,-3.045 0.06,-3.445 v -2.76 H -0.961 V 0 Z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path332" /></g><g
|
||||||
|
id="g334"
|
||||||
|
transform="translate(318.2573,54.9863)"><path
|
||||||
|
d="m 0,0 v 0.9 h 1.044 v 0.924 c 0,0.504 0.145,0.887 0.438,1.147 C 1.773,3.23 2.199,3.36 2.76,3.36 2.855,3.36 2.966,3.352 3.09,3.336 3.214,3.32 3.324,3.297 3.42,3.264 V 2.377 C 3.332,2.408 3.236,2.43 3.132,2.442 3.027,2.454 2.932,2.461 2.844,2.461 2.596,2.461 2.404,2.412 2.268,2.316 2.132,2.221 2.064,2.036 2.064,1.764 V 0.9 h 1.2 V 0 h -1.2 V -5.304 H 1.044 V 0 Z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path336" /></g><g
|
||||||
|
id="g338"
|
||||||
|
transform="translate(323.3276,51.7773)"><path
|
||||||
|
d="m 0,0 c 0.1,-0.293 0.237,-0.537 0.414,-0.732 0.176,-0.197 0.381,-0.346 0.617,-0.451 0.237,-0.104 0.487,-0.156 0.75,-0.156 0.264,0 0.514,0.052 0.75,0.156 0.237,0.105 0.442,0.254 0.618,0.451 0.176,0.195 0.314,0.439 0.415,0.732 0.1,0.291 0.149,0.625 0.149,1.002 0,0.375 -0.049,0.709 -0.149,1.002 C 3.463,2.295 3.325,2.541 3.149,2.741 2.973,2.941 2.768,3.094 2.531,3.197 2.295,3.301 2.045,3.354 1.781,3.354 1.518,3.354 1.268,3.301 1.031,3.197 0.795,3.094 0.59,2.941 0.414,2.741 0.237,2.541 0.1,2.295 0,2.004 -0.101,1.711 -0.15,1.377 -0.15,1.002 -0.15,0.625 -0.101,0.291 0,0 m -1.039,2.279 c 0.129,0.397 0.32,0.741 0.576,1.032 0.256,0.293 0.572,0.523 0.948,0.691 0.376,0.168 0.808,0.252 1.296,0.252 0.496,0 0.93,-0.084 1.303,-0.252 C 3.455,3.834 3.77,3.604 4.025,3.311 4.281,3.02 4.473,2.676 4.602,2.279 4.73,1.883 4.793,1.457 4.793,1.002 4.793,0.545 4.73,0.121 4.602,-0.27 4.473,-0.662 4.281,-1.005 4.025,-1.297 3.77,-1.589 3.455,-1.816 3.084,-1.98 2.711,-2.145 2.277,-2.227 1.781,-2.227 c -0.488,0 -0.92,0.082 -1.296,0.247 -0.376,0.164 -0.692,0.391 -0.948,0.683 -0.256,0.292 -0.447,0.635 -0.576,1.027 -0.127,0.391 -0.191,0.815 -0.191,1.272 0,0.455 0.064,0.881 0.191,1.277"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path340" /></g><g
|
||||||
|
id="g342"
|
||||||
|
transform="translate(330.2456,55.8867)"><path
|
||||||
|
d="m 0,0 v -1.309 h 0.023 c 0.248,0.504 0.553,0.877 0.913,1.118 0.359,0.239 0.816,0.351 1.368,0.336 V -0.936 C 1.896,-0.936 1.548,-0.992 1.26,-1.104 0.972,-1.217 0.739,-1.38 0.563,-1.596 0.388,-1.812 0.26,-2.074 0.18,-2.383 0.1,-2.689 0.06,-3.044 0.06,-3.444 v -2.76 H -0.961 V 0 Z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path344" /></g><g
|
||||||
|
id="g346"
|
||||||
|
transform="translate(339.1362,49.6826)"><path
|
||||||
|
d="m 0,0 v 6.097 h -2.207 v 0.815 c 0.287,0 0.567,0.023 0.84,0.065 0.271,0.045 0.517,0.128 0.738,0.247 0.219,0.121 0.405,0.284 0.558,0.492 C 0.08,7.924 0.185,8.189 0.24,8.508 H 1.02 V 0 Z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path348" /></g><g
|
||||||
|
id="g350"
|
||||||
|
transform="translate(343.2172,56.3789)"><path
|
||||||
|
d="M 0,0 C 0.112,0.367 0.286,0.686 0.522,0.953 0.758,1.222 1.052,1.432 1.403,1.584 1.756,1.735 2.155,1.811 2.604,1.811 2.972,1.811 3.317,1.758 3.642,1.65 3.966,1.541 4.248,1.386 4.487,1.182 4.728,0.977 4.918,0.724 5.058,0.42 5.198,0.115 5.269,-0.236 5.269,-0.637 5.269,-1.012 5.21,-1.344 5.094,-1.633 4.978,-1.92 4.823,-2.178 4.632,-2.406 4.44,-2.635 4.22,-2.84 3.972,-3.024 3.724,-3.209 3.468,-3.385 3.204,-3.553 2.94,-3.713 2.676,-3.87 2.411,-4.026 2.147,-4.182 1.905,-4.349 1.687,-4.524 1.466,-4.7 1.278,-4.891 1.122,-5.094 0.966,-5.299 0.864,-5.532 0.815,-5.797 h 4.37 v -0.899 h -5.557 c 0.04,0.504 0.13,0.934 0.269,1.29 0.141,0.355 0.319,0.666 0.535,0.929 0.215,0.264 0.46,0.497 0.732,0.697 0.272,0.2 0.556,0.387 0.852,0.563 0.36,0.225 0.676,0.431 0.948,0.619 0.271,0.188 0.498,0.377 0.678,0.57 0.179,0.192 0.316,0.399 0.408,0.624 0.092,0.224 0.139,0.484 0.139,0.779 0,0.232 -0.045,0.443 -0.133,0.631 C 3.968,0.193 3.85,0.355 3.702,0.492 3.554,0.627 3.38,0.732 3.18,0.804 2.979,0.875 2.768,0.912 2.544,0.912 2.247,0.912 1.993,0.85 1.782,0.726 1.569,0.602 1.396,0.439 1.26,0.24 1.124,0.039 1.026,-0.187 0.966,-0.439 0.905,-0.691 0.88,-0.944 0.888,-1.2 h -1.02 C -0.156,-0.768 -0.112,-0.368 0,0"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path352" /></g><g
|
||||||
|
id="g354"
|
||||||
|
transform="translate(350.8432,52.7968)"><path
|
||||||
|
d="m 0,0 c 0.02,-0.396 0.084,-0.768 0.191,-1.116 0.109,-0.349 0.283,-0.642 0.523,-0.882 0.239,-0.24 0.575,-0.36 1.008,-0.36 0.432,0 0.768,0.12 1.008,0.36 0.24,0.24 0.414,0.533 0.522,0.882 0.107,0.348 0.172,0.72 0.191,1.116 0.02,0.396 0.031,0.754 0.031,1.074 0,0.207 -0.002,0.438 -0.006,0.69 C 3.463,2.016 3.443,2.268 3.408,2.52 3.371,2.771 3.32,3.018 3.252,3.258 3.184,3.498 3.084,3.707 2.951,3.888 2.82,4.068 2.654,4.213 2.453,4.326 2.254,4.437 2.01,4.494 1.722,4.494 1.434,4.494 1.189,4.437 0.99,4.326 0.789,4.213 0.623,4.068 0.492,3.888 0.359,3.707 0.26,3.498 0.191,3.258 0.123,3.018 0.072,2.771 0.035,2.52 0,2.268 -0.021,2.016 -0.024,1.764 -0.028,1.512 -0.03,1.281 -0.03,1.074 -0.03,0.754 -0.021,0.396 0,0 m -1.086,2.033 c 0.016,0.336 0.056,0.664 0.119,0.985 0.065,0.32 0.156,0.624 0.277,0.912 0.12,0.288 0.284,0.54 0.492,0.756 C 0.01,4.902 0.271,5.074 0.588,5.201 0.904,5.33 1.281,5.394 1.722,5.394 2.162,5.394 2.539,5.33 2.855,5.201 3.172,5.074 3.434,4.902 3.642,4.686 3.85,4.47 4.014,4.218 4.134,3.93 4.254,3.642 4.346,3.338 4.41,3.018 4.474,2.697 4.514,2.369 4.529,2.033 4.546,1.697 4.554,1.373 4.554,1.062 4.554,0.75 4.546,0.426 4.529,0.09 4.514,-0.246 4.474,-0.574 4.41,-0.895 4.346,-1.215 4.254,-1.517 4.134,-1.801 4.014,-2.084 3.85,-2.334 3.642,-2.551 3.434,-2.766 3.174,-2.936 2.861,-3.061 2.55,-3.184 2.17,-3.246 1.722,-3.246 c -0.441,0 -0.818,0.062 -1.134,0.185 -0.317,0.125 -0.578,0.295 -0.786,0.51 -0.208,0.217 -0.372,0.467 -0.492,0.75 -0.121,0.284 -0.212,0.586 -0.277,0.906 -0.063,0.321 -0.103,0.649 -0.119,0.985 -0.017,0.336 -0.024,0.66 -0.024,0.972 0,0.311 0.007,0.635 0.024,0.971"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path356" /></g><g
|
||||||
|
id="g358"
|
||||||
|
transform="translate(361.3911,53.6845)"><path
|
||||||
|
d="m 0,0 c -0.076,0.276 -0.192,0.522 -0.349,0.738 -0.156,0.216 -0.355,0.388 -0.599,0.516 -0.244,0.128 -0.531,0.192 -0.858,0.192 -0.344,0 -0.636,-0.068 -0.877,-0.204 -0.24,-0.136 -0.435,-0.313 -0.588,-0.534 -0.152,-0.221 -0.261,-0.471 -0.33,-0.75 -0.068,-0.28 -0.101,-0.564 -0.101,-0.852 0,-0.304 0.036,-0.598 0.107,-0.882 0.073,-0.284 0.187,-0.534 0.342,-0.75 0.156,-0.216 0.358,-0.39 0.607,-0.522 0.248,-0.133 0.547,-0.198 0.9,-0.198 0.351,0 0.645,0.067 0.882,0.204 0.236,0.136 0.425,0.316 0.57,0.54 0.144,0.224 0.248,0.48 0.312,0.769 0.063,0.287 0.096,0.584 0.096,0.886 C 0.114,-0.558 0.075,-0.276 0,0 m -3.666,2.202 v -0.84 h 0.024 c 0.168,0.344 0.432,0.594 0.791,0.75 0.361,0.157 0.756,0.235 1.189,0.235 0.479,0 0.897,-0.089 1.254,-0.265 C -0.052,1.905 0.243,1.668 0.479,1.368 0.716,1.067 0.893,0.722 1.014,0.33 c 0.12,-0.392 0.18,-0.808 0.18,-1.248 0,-0.44 -0.058,-0.856 -0.174,-1.248 C 0.903,-2.558 0.728,-2.899 0.491,-3.192 0.256,-3.483 -0.04,-3.714 -0.396,-3.882 -0.753,-4.05 -1.167,-4.134 -1.638,-4.134 c -0.152,0 -0.322,0.016 -0.51,0.048 -0.189,0.032 -0.374,0.084 -0.558,0.155 -0.184,0.073 -0.358,0.17 -0.522,0.295 -0.164,0.123 -0.302,0.278 -0.414,0.462 h -0.024 v -3.192 h -1.021 v 8.568 z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path360" /></g><g
|
||||||
|
id="g362"
|
||||||
|
transform="translate(363.2924,55.8867)"><path
|
||||||
|
d="M 0,0 H 1.309 L 2.796,-2.172 4.344,0 h 1.224 l -2.136,-2.855 2.4,-3.349 H 4.523 L 2.796,-3.637 1.068,-6.204 h -1.236 l 2.328,3.265 z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path364" /></g><g
|
||||||
|
id="g366"
|
||||||
|
transform="translate(379.1928,53.1269)"><path
|
||||||
|
d="m 0,0 v -0.816 h -2.616 v -2.628 h -0.816 v 2.628 H -6.048 V 0 h 2.616 v 2.627 h 0.816 V 0 Z"
|
||||||
|
style="fill:#176fc1;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||||
|
id="path368" /></g></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 75 KiB |
BIN
Server Dashboard/Assets/Images/GitHub.png
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
Server Dashboard/Assets/Images/GitHubLight.png
Normal file
|
After Width: | Height: | Size: 3.9 KiB |
BIN
Server Dashboard/Assets/Images/PlaceHolderModule.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
Server Dashboard/Assets/Images/PlaceHolderModuleLight.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
13
Server Dashboard/Assets/Images/Settings.svg
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
<svg width="512" height="512" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<title/>
|
||||||
|
|
||||||
|
<g>
|
||||||
|
<title>background</title>
|
||||||
|
<rect fill="none" id="canvas_background" height="402" width="582" y="-1" x="-1"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<title>Layer 1</title>
|
||||||
|
<path fill="#ffffff" id="svg_1" d="m293.9,450l-60.37,0a15,15 0 0 1 -14.92,-13.42l-4.47,-42.09a152.77,152.77 0 0 1 -18.25,-7.56l-32.89,26.6a15,15 0 0 1 -20,-1.06l-42.69,-42.69a15,15 0 0 1 -1.06,-20l26.61,-32.93a152.15,152.15 0 0 1 -7.57,-18.25l-42.16,-4.5a15,15 0 0 1 -13.42,-14.91l0,-60.38a15,15 0 0 1 13.42,-14.91l42.09,-4.47a152.15,152.15 0 0 1 7.57,-18.25l-26.61,-32.93a15,15 0 0 1 1.06,-20l42.69,-42.69a15,15 0 0 1 20,-1.06l32.93,26.6a152.77,152.77 0 0 1 18.25,-7.56l4.47,-42.09a15,15 0 0 1 14.95,-13.45l60.37,0a15,15 0 0 1 14.92,13.42l4.46,42.09a152.91,152.91 0 0 1 18.26,7.56l32.92,-26.6a15,15 0 0 1 20,1.06l42.69,42.69a15,15 0 0 1 1.06,20l-26.61,32.93a153.8,153.8 0 0 1 7.57,18.25l42.09,4.47a15,15 0 0 1 13.41,14.91l0,60.38a15,15 0 0 1 -13.37,14.94l-42.09,4.47a153.8,153.8 0 0 1 -7.57,18.25l26.61,32.93a15,15 0 0 1 -1.06,20l-42.69,42.72a15,15 0 0 1 -20,1.06l-32.92,-26.6a152.91,152.91 0 0 1 -18.26,7.56l-4.46,42.09a15,15 0 0 1 -14.96,13.42zm-46.9,-30l33.39,0l4.09,-38.56a15,15 0 0 1 11.06,-12.91a123,123 0 0 0 30.16,-12.53a15,15 0 0 1 17,1.31l30.16,24.37l23.61,-23.61l-24.41,-30.07a15,15 0 0 1 -1.31,-17a122.63,122.63 0 0 0 12.49,-30.14a15,15 0 0 1 12.92,-11.06l38.55,-4.1l0,-33.39l-38.55,-4.1a15,15 0 0 1 -12.92,-11.06a122.63,122.63 0 0 0 -12.49,-30.15a15,15 0 0 1 1.31,-17l24.37,-30.16l-23.61,-23.61l-30.16,24.37a15,15 0 0 1 -17,1.31a123,123 0 0 0 -30.14,-12.49a15,15 0 0 1 -11.06,-12.91l-4.05,-38.51l-33.41,0l-4.09,38.56a15,15 0 0 1 -11.07,12.91a122.79,122.79 0 0 0 -30.11,12.53a15,15 0 0 1 -17,-1.31l-30.13,-24.41l-23.6,23.61l24.38,30.16a15,15 0 0 1 1.3,17a123.41,123.41 0 0 0 -12.49,30.14a15,15 0 0 1 -12.91,11.06l-38.56,4.1l0,33.38l38.56,4.1a15,15 0 0 1 12.91,11.06a123.41,123.41 0 0 0 12.48,30.11a15,15 0 0 1 -1.3,17l-24.37,30.11l23.61,23.61l30.17,-24.37a15,15 0 0 1 17,-1.31a122.79,122.79 0 0 0 30.13,12.49a15,15 0 0 1 11.07,12.91l4.02,38.56zm202.71,-140.81l0,0z"/>
|
||||||
|
<path fill="#ffffff" id="svg_2" d="m263.71,340.36a91.36,91.36 0 1 1 91.37,-91.36a91.46,91.46 0 0 1 -91.37,91.36zm0,-152.72a61.36,61.36 0 1 0 61.37,61.36a61.43,61.43 0 0 0 -61.37,-61.36z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.3 KiB |
12
Server Dashboard/Assets/Images/User.svg
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
<svg width="50" height="50" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
|
||||||
|
<g>
|
||||||
|
<title>background</title>
|
||||||
|
<rect fill="none" id="canvas_background" height="402" width="582" y="-1" x="-1"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<title>Layer 1</title>
|
||||||
|
<circle id="svg_1" stroke-width="2" stroke-miterlimit="10" stroke-linecap="round" stroke="#ffffff" r="24" fill="none" cy="25" cx="25"/>
|
||||||
|
<path id="svg_3" stroke-width="2" stroke-miterlimit="10" stroke-linecap="round" stroke="#ffffff" fill="none" d="m29.933,35.528c-0.146,-1.612 -0.09,-2.737 -0.09,-4.21c0.73,-0.383 2.038,-2.825 2.259,-4.888c0.574,-0.047 1.479,-0.607 1.744,-2.818c0.143,-1.187 -0.425,-1.855 -0.771,-2.065c0.934,-2.809 2.874,-11.499 -3.588,-12.397c-0.665,-1.168 -2.368,-1.759 -4.581,-1.759c-8.854,0.163 -9.922,6.686 -7.981,14.156c-0.345,0.21 -0.913,0.878 -0.771,2.065c0.266,2.211 1.17,2.771 1.744,2.818c0.22,2.062 1.58,4.505 2.312,4.888c0,1.473 0.055,2.598 -0.091,4.21c-1.261,3.39 -7.737,3.655 -11.473,6.924c3.906,3.933 10.236,6.746 16.916,6.746s14.532,-5.274 15.839,-6.713c-3.713,-3.299 -10.204,-3.555 -11.468,-6.957z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.0 KiB |
20
Server Dashboard/AttachedProperty/BaseAttachedProperty.cs
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using System.Windows;
|
||||||
|
|
||||||
|
namespace Server_Dashboard {
|
||||||
|
public abstract class BaseAttachedProperty<Parent, Property>
|
||||||
|
where Parent : BaseAttachedProperty<Parent, Property>, new() {
|
||||||
|
public event Action<DependencyObject, DependencyPropertyChangedEventArgs> ValueChanged = (sender, e) => { };
|
||||||
|
public static Parent Instance { get; private set; } = new Parent();
|
||||||
|
public static readonly DependencyProperty ValueProperty = DependencyProperty.RegisterAttached("Value", typeof(Property), typeof(BaseAttachedProperty<Parent, Property>), new PropertyMetadata(new PropertyChangedCallback(OnValuePropertyChanged)));
|
||||||
|
private static void OnValuePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) {
|
||||||
|
Instance.OnValueChanged(d, e);
|
||||||
|
Instance.ValueChanged(d, e);
|
||||||
|
}
|
||||||
|
public static Property GetValue(DependencyObject d) => (Property)d.GetValue(ValueProperty);
|
||||||
|
public static void SetValue(DependencyObject d, Property value) => d.SetValue(ValueProperty, value);
|
||||||
|
public virtual void OnValueChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) { }
|
||||||
|
}
|
||||||
|
}
|
||||||
37
Server Dashboard/AttachedProperty/HyperlinkProperties.cs
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Text;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Documents;
|
||||||
|
|
||||||
|
namespace Server_Dashboard
|
||||||
|
{
|
||||||
|
public static class HyperlinkExtensions {
|
||||||
|
public static bool GetIsExternal(DependencyObject obj) {
|
||||||
|
return (bool)obj.GetValue(IsExternalProperty);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void SetIsExternal(DependencyObject obj, bool value) {
|
||||||
|
obj.SetValue(IsExternalProperty, value);
|
||||||
|
}
|
||||||
|
public static readonly DependencyProperty IsExternalProperty =
|
||||||
|
DependencyProperty.RegisterAttached("IsExternal", typeof(bool), typeof(HyperlinkExtensions), new UIPropertyMetadata(false, OnIsExternalChanged));
|
||||||
|
|
||||||
|
private static void OnIsExternalChanged(object sender, DependencyPropertyChangedEventArgs args) {
|
||||||
|
var hyperlink = sender as Hyperlink;
|
||||||
|
|
||||||
|
if ((bool)args.NewValue)
|
||||||
|
hyperlink.RequestNavigate += Hyperlink_RequestNavigate;
|
||||||
|
else
|
||||||
|
hyperlink.RequestNavigate -= Hyperlink_RequestNavigate;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void Hyperlink_RequestNavigate(object sender, System.Windows.Navigation.RequestNavigateEventArgs e) {
|
||||||
|
try {
|
||||||
|
Process.Start(new ProcessStartInfo(e.Uri.AbsoluteUri) { UseShellExecute = true });
|
||||||
|
} catch { }
|
||||||
|
e.Handled = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
28
Server Dashboard/AttachedProperty/PasswordBoxProperties.cs
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
|
||||||
|
namespace Server_Dashboard {
|
||||||
|
public class MonitorPasswordProperty : BaseAttachedProperty<MonitorPasswordProperty, bool> {
|
||||||
|
public override void OnValueChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) {
|
||||||
|
var passwordBox = sender as PasswordBox;
|
||||||
|
if (passwordBox == null)
|
||||||
|
return;
|
||||||
|
passwordBox.PasswordChanged -= PasswordBox_PasswordChanged;
|
||||||
|
|
||||||
|
if ((bool)e.NewValue) {
|
||||||
|
HasTextProperty.SetValue(passwordBox);
|
||||||
|
passwordBox.PasswordChanged += PasswordBox_PasswordChanged;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void PasswordBox_PasswordChanged(object sender, RoutedEventArgs e) {
|
||||||
|
HasTextProperty.SetValue((PasswordBox)sender);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class HasTextProperty : BaseAttachedProperty<HasTextProperty, bool> {
|
||||||
|
public static void SetValue(DependencyObject sender) {
|
||||||
|
SetValue(sender, ((PasswordBox)sender).SecurePassword.Length < 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
17
Server Dashboard/AttachedProperty/WindowProperties.cs
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
using System.Windows;
|
||||||
|
|
||||||
|
namespace Server_Dashboard {
|
||||||
|
public class CloseProperty : BaseAttachedProperty<CloseProperty, bool> {
|
||||||
|
public override void OnValueChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) {
|
||||||
|
if (sender is Window window) {
|
||||||
|
window.Loaded += (s, e) => {
|
||||||
|
if (window.DataContext is IWindowHelper wh) {
|
||||||
|
wh.Close += () => {
|
||||||
|
window.Close();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,308 @@
|
|||||||
|
<Window x:Class="Server_Dashboard.Views.DashboardPages.ModuleCRUD.CreateModulePopup"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:local="clr-namespace:Server_Dashboard.Views.DashboardPages.ModuleCRUD"
|
||||||
|
xmlns:root="clr-namespace:Server_Dashboard" xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
|
||||||
|
d:DataContext="{d:DesignInstance Type=root:DashboardModuleViewModel}"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
ResizeMode="NoResize"
|
||||||
|
Height="700"
|
||||||
|
Width="500"
|
||||||
|
d:WindowStyle="None"
|
||||||
|
>
|
||||||
|
<WindowChrome.WindowChrome>
|
||||||
|
<WindowChrome CaptionHeight="0" ResizeBorderThickness="0"/>
|
||||||
|
</WindowChrome.WindowChrome>
|
||||||
|
<Border
|
||||||
|
Width="500"
|
||||||
|
Height="700"
|
||||||
|
>
|
||||||
|
<Border.Background>
|
||||||
|
<SolidColorBrush Color="#2D2D2D" Opacity="1"/>
|
||||||
|
</Border.Background>
|
||||||
|
<Grid>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="30"/>
|
||||||
|
<RowDefinition Height="*"/>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<Grid
|
||||||
|
Background="{StaticResource BackgroundSurface_04dp}"
|
||||||
|
Grid.Row="0"
|
||||||
|
>
|
||||||
|
<i:Interaction.Triggers>
|
||||||
|
<i:EventTrigger EventName="MouseDown">
|
||||||
|
<i:CallMethodAction MethodName="DragMove" TargetObject="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}"/>
|
||||||
|
</i:EventTrigger>
|
||||||
|
</i:Interaction.Triggers>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition/>
|
||||||
|
<ColumnDefinition Width="40"/>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<TextBlock
|
||||||
|
Grid.Column="0"
|
||||||
|
Text="Create a new Server"
|
||||||
|
Margin="5 0 0 0"
|
||||||
|
Foreground="{StaticResource DeepPurple_A100}"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
/>
|
||||||
|
<Button
|
||||||
|
Style="{StaticResource CloseButton}"
|
||||||
|
Grid.Column="2"
|
||||||
|
Content="✕"
|
||||||
|
Cursor="Hand"
|
||||||
|
>
|
||||||
|
<i:Interaction.Triggers>
|
||||||
|
<i:EventTrigger EventName="Click">
|
||||||
|
<i:CallMethodAction MethodName="Close" TargetObject="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}"/>
|
||||||
|
</i:EventTrigger>
|
||||||
|
</i:Interaction.Triggers>
|
||||||
|
</Button>
|
||||||
|
</Grid>
|
||||||
|
<Grid
|
||||||
|
Background="{StaticResource BackgroundSurface_04dp}"
|
||||||
|
Grid.Row="1"
|
||||||
|
Margin="20"
|
||||||
|
>
|
||||||
|
<Grid.Effect>
|
||||||
|
<DropShadowEffect Direction="0" BlurRadius="5" ShadowDepth="0"/>
|
||||||
|
</Grid.Effect>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition/>
|
||||||
|
<RowDefinition/>
|
||||||
|
<RowDefinition/>
|
||||||
|
<RowDefinition/>
|
||||||
|
<RowDefinition/>
|
||||||
|
<RowDefinition/>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<StackPanel VerticalAlignment="Center" Grid.Row="0" Margin="20 0 20 0">
|
||||||
|
<StackPanel Orientation="Horizontal">
|
||||||
|
<TextBlock
|
||||||
|
Text="Server Name"
|
||||||
|
FontSize="24"
|
||||||
|
Margin="0 0 0 5"
|
||||||
|
>
|
||||||
|
<TextBlock.Foreground>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.87"/>
|
||||||
|
</TextBlock.Foreground>
|
||||||
|
</TextBlock>
|
||||||
|
<TextBlock
|
||||||
|
Text="*"
|
||||||
|
Foreground="{StaticResource ErrorRed}"
|
||||||
|
FontSize="20"
|
||||||
|
/>
|
||||||
|
</StackPanel>
|
||||||
|
<Grid>
|
||||||
|
<Grid.Effect>
|
||||||
|
<DropShadowEffect Direction="0" BlurRadius="5" ShadowDepth="0"/>
|
||||||
|
</Grid.Effect>
|
||||||
|
<TextBox
|
||||||
|
Text="{Binding ServerName}"
|
||||||
|
Grid.Column="1"
|
||||||
|
Height="40"
|
||||||
|
FontSize="20"
|
||||||
|
x:Name="ServerName"
|
||||||
|
/>
|
||||||
|
<TextBlock
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
HorizontalAlignment="Left"
|
||||||
|
Text="My Awesome Server"
|
||||||
|
FontSize="20"
|
||||||
|
Visibility="{Binding ElementName=ServerName, Path=Text.IsEmpty, Converter={StaticResource UserNameVisibillity}}"
|
||||||
|
Grid.Column="1"
|
||||||
|
IsHitTestVisible="False"
|
||||||
|
Margin="5 0 0 0"
|
||||||
|
>
|
||||||
|
<TextBlock.Foreground>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.12"/>
|
||||||
|
</TextBlock.Foreground>
|
||||||
|
</TextBlock>
|
||||||
|
</Grid>
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel VerticalAlignment="Center" Grid.Row="1" Margin="20 0 20 0">
|
||||||
|
<StackPanel Orientation="Horizontal">
|
||||||
|
<TextBlock
|
||||||
|
Text="Password"
|
||||||
|
FontSize="24"
|
||||||
|
Margin="0 0 0 5"
|
||||||
|
>
|
||||||
|
<TextBlock.Foreground>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.87"/>
|
||||||
|
</TextBlock.Foreground>
|
||||||
|
</TextBlock>
|
||||||
|
<TextBlock
|
||||||
|
Text="*"
|
||||||
|
Foreground="{StaticResource ErrorRed}"
|
||||||
|
FontSize="20"
|
||||||
|
/>
|
||||||
|
</StackPanel>
|
||||||
|
<Grid>
|
||||||
|
<Grid.Effect>
|
||||||
|
<DropShadowEffect Direction="0" BlurRadius="5" ShadowDepth="0"/>
|
||||||
|
</Grid.Effect>
|
||||||
|
<PasswordBox
|
||||||
|
Width="420"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
HorizontalAlignment="Left"
|
||||||
|
root:MonitorPasswordProperty.Value="True"
|
||||||
|
Grid.Column="1"
|
||||||
|
FontSize="20"
|
||||||
|
x:Name="Password"
|
||||||
|
Height="40"
|
||||||
|
>
|
||||||
|
</PasswordBox>
|
||||||
|
<TextBlock
|
||||||
|
Visibility="{Binding ElementName=Password, Path=(root:HasTextProperty.Value), Converter={StaticResource UserNameVisibillity}}" x:Name="PasswordHint"
|
||||||
|
Text="********"
|
||||||
|
Grid.Column="1"
|
||||||
|
IsHitTestVisible="False"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
HorizontalAlignment="Left"
|
||||||
|
Margin="5 0 0 0"
|
||||||
|
FontSize="20"
|
||||||
|
>
|
||||||
|
<TextBlock.Foreground>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.12"/>
|
||||||
|
</TextBlock.Foreground>
|
||||||
|
</TextBlock>
|
||||||
|
</Grid>
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel VerticalAlignment="Center" Grid.Row="2" Margin="20 0 20 0">
|
||||||
|
<StackPanel Orientation="Horizontal">
|
||||||
|
<TextBlock
|
||||||
|
Text="Username"
|
||||||
|
FontSize="24"
|
||||||
|
Margin="0 0 0 5"
|
||||||
|
>
|
||||||
|
<TextBlock.Foreground>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.87"/>
|
||||||
|
</TextBlock.Foreground>
|
||||||
|
</TextBlock>
|
||||||
|
<TextBlock
|
||||||
|
Text="*"
|
||||||
|
Foreground="{StaticResource ErrorRed}"
|
||||||
|
FontSize="16"
|
||||||
|
/>
|
||||||
|
</StackPanel>
|
||||||
|
<Grid>
|
||||||
|
<Grid.Effect>
|
||||||
|
<DropShadowEffect Direction="0" BlurRadius="5" ShadowDepth="0"/>
|
||||||
|
</Grid.Effect>
|
||||||
|
<TextBox
|
||||||
|
Text="{Binding Username}"
|
||||||
|
Grid.Column="1"
|
||||||
|
Height="40"
|
||||||
|
FontSize="20"
|
||||||
|
x:Name="UserName"
|
||||||
|
/>
|
||||||
|
<TextBlock
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
HorizontalAlignment="Left"
|
||||||
|
Text="Name"
|
||||||
|
FontSize="20"
|
||||||
|
Visibility="{Binding ElementName=UserName, Path=Text.IsEmpty, Converter={StaticResource UserNameVisibillity}}"
|
||||||
|
Grid.Column="1"
|
||||||
|
IsHitTestVisible="False"
|
||||||
|
Margin="5 0 0 0"
|
||||||
|
>
|
||||||
|
<TextBlock.Foreground>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.12"/>
|
||||||
|
</TextBlock.Foreground>
|
||||||
|
</TextBlock>
|
||||||
|
</Grid>
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel VerticalAlignment="Center" Grid.Row="3" Margin="20 0 20 0">
|
||||||
|
<StackPanel Orientation="Horizontal">
|
||||||
|
<TextBlock
|
||||||
|
Text="IP Adress"
|
||||||
|
FontSize="24"
|
||||||
|
Margin="0 0 0 5"
|
||||||
|
>
|
||||||
|
<TextBlock.Foreground>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.87"/>
|
||||||
|
</TextBlock.Foreground>
|
||||||
|
</TextBlock>
|
||||||
|
<TextBlock
|
||||||
|
Text="*"
|
||||||
|
Foreground="{StaticResource ErrorRed}"
|
||||||
|
FontSize="16"
|
||||||
|
/>
|
||||||
|
</StackPanel>
|
||||||
|
<Grid>
|
||||||
|
<Grid.Effect>
|
||||||
|
<DropShadowEffect Direction="0" BlurRadius="5" ShadowDepth="0"/>
|
||||||
|
</Grid.Effect>
|
||||||
|
<TextBox
|
||||||
|
Text="{Binding IPAdress}"
|
||||||
|
Grid.Column="1"
|
||||||
|
Height="40"
|
||||||
|
FontSize="20"
|
||||||
|
x:Name="IPAdress"
|
||||||
|
/>
|
||||||
|
<TextBlock
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
HorizontalAlignment="Left"
|
||||||
|
Text="sample.ssh.com"
|
||||||
|
FontSize="20"
|
||||||
|
Visibility="{Binding ElementName=IPAdress, Path=Text.IsEmpty, Converter={StaticResource UserNameVisibillity}}"
|
||||||
|
Grid.Column="1"
|
||||||
|
IsHitTestVisible="False"
|
||||||
|
Margin="5 0 0 0"
|
||||||
|
>
|
||||||
|
<TextBlock.Foreground>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.12"/>
|
||||||
|
</TextBlock.Foreground>
|
||||||
|
</TextBlock>
|
||||||
|
</Grid>
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel VerticalAlignment="Center" Grid.Row="4" Margin="20 0 20 0">
|
||||||
|
<TextBlock
|
||||||
|
Text="Port"
|
||||||
|
FontSize="24"
|
||||||
|
Margin="0 0 0 5"
|
||||||
|
>
|
||||||
|
<TextBlock.Foreground>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.87"/>
|
||||||
|
</TextBlock.Foreground>
|
||||||
|
</TextBlock>
|
||||||
|
<Grid>
|
||||||
|
<Grid.Effect>
|
||||||
|
<DropShadowEffect Direction="0" BlurRadius="5" ShadowDepth="0"/>
|
||||||
|
</Grid.Effect>
|
||||||
|
<TextBox
|
||||||
|
Text="{Binding Port}"
|
||||||
|
Grid.Column="1"
|
||||||
|
Height="40"
|
||||||
|
FontSize="20"
|
||||||
|
x:Name="Port"
|
||||||
|
/>
|
||||||
|
<TextBlock
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
HorizontalAlignment="Left"
|
||||||
|
Text="22"
|
||||||
|
FontSize="20"
|
||||||
|
Visibility="{Binding ElementName=Port, Path=Text.IsEmpty, Converter={StaticResource UserNameVisibillity}}"
|
||||||
|
Grid.Column="1"
|
||||||
|
IsHitTestVisible="False"
|
||||||
|
Margin="5 0 0 0"
|
||||||
|
>
|
||||||
|
<TextBlock.Foreground>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.12"/>
|
||||||
|
</TextBlock.Foreground>
|
||||||
|
</TextBlock>
|
||||||
|
</Grid>
|
||||||
|
</StackPanel>
|
||||||
|
<Button
|
||||||
|
Height="60"
|
||||||
|
Width="350"
|
||||||
|
Command="{Binding CreateModuleCommand}"
|
||||||
|
CommandParameter="{Binding ElementName=CREATE_MODULE}"
|
||||||
|
Grid.Row="5"
|
||||||
|
Content="CREATE MODULE"
|
||||||
|
Grid.ColumnSpan="2"
|
||||||
|
/>
|
||||||
|
</Grid>
|
||||||
|
</Grid>
|
||||||
|
</Border>
|
||||||
|
</Window>
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
using System.Windows.Controls;
|
||||||
|
using System.Windows;
|
||||||
|
|
||||||
|
namespace Server_Dashboard.Views.DashboardPages.ModuleCRUD {
|
||||||
|
/// <summary>
|
||||||
|
/// Interaktionslogik für CreateModulePopup.xaml
|
||||||
|
/// </summary>
|
||||||
|
public partial class CreateModulePopup : Window {
|
||||||
|
public CreateModulePopup() {
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,94 @@
|
|||||||
|
<UserControl x:Class="Server_Dashboard.Controls.DoubleRoundProgressBar.DoubleRoundProgressBar"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:local="clr-namespace:Server_Dashboard.Controls.DoubleRoundProgressBar"
|
||||||
|
xmlns:ed="http://schemas.microsoft.com/expression/2010/drawing"
|
||||||
|
xmlns:root="clr-namespace:Server_Dashboard"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
x:Name="_this"
|
||||||
|
d:DesignHeight="50" d:DesignWidth="50">
|
||||||
|
<UserControl.Resources>
|
||||||
|
<root:ValueToAngleConverter x:Key="valueToAngle"/>
|
||||||
|
</UserControl.Resources>
|
||||||
|
<Grid>
|
||||||
|
<Ellipse
|
||||||
|
x:Name="Background"
|
||||||
|
|
||||||
|
Fill="{Binding
|
||||||
|
ElementName=_this,
|
||||||
|
Path=BackgroundBrush
|
||||||
|
}"
|
||||||
|
Margin="0"
|
||||||
|
Stroke="{Binding
|
||||||
|
ElementName=_this,
|
||||||
|
Path=BackgroundBrush
|
||||||
|
}"
|
||||||
|
/>
|
||||||
|
<ed:Arc
|
||||||
|
ArcThickness="8"
|
||||||
|
ArcThicknessUnit="Pixel"
|
||||||
|
EndAngle="{Binding
|
||||||
|
Converter={StaticResource valueToAngle},
|
||||||
|
ElementName=_this,
|
||||||
|
Path=ValueRead
|
||||||
|
}"
|
||||||
|
Fill="{Binding
|
||||||
|
ElementName=_this,
|
||||||
|
Path=ReadIndicatorBrush
|
||||||
|
}"
|
||||||
|
Stretch="None"
|
||||||
|
StartAngle="0"
|
||||||
|
/>
|
||||||
|
<Ellipse
|
||||||
|
x:Name="Seperator"
|
||||||
|
Fill="Transparent"
|
||||||
|
Margin="7"
|
||||||
|
Stroke="{Binding
|
||||||
|
ElementName=_this,
|
||||||
|
Path=ProgressBorderBrush
|
||||||
|
}"
|
||||||
|
Panel.ZIndex="1"
|
||||||
|
/>
|
||||||
|
<Ellipse
|
||||||
|
x:Name="Seperator2"
|
||||||
|
Fill="Transparent"
|
||||||
|
Margin="8"
|
||||||
|
Stroke="{Binding
|
||||||
|
ElementName=_this,
|
||||||
|
Path=ProgressBorderBrush
|
||||||
|
}"
|
||||||
|
Panel.ZIndex="1"
|
||||||
|
/>
|
||||||
|
<ed:Arc
|
||||||
|
Margin="8"
|
||||||
|
ArcThickness="8"
|
||||||
|
ArcThicknessUnit="Pixel"
|
||||||
|
EndAngle="{Binding
|
||||||
|
Converter={StaticResource valueToAngle},
|
||||||
|
ElementName=_this,
|
||||||
|
Path=ValueWrite
|
||||||
|
}"
|
||||||
|
Fill="{Binding
|
||||||
|
ElementName=_this,
|
||||||
|
Path=WriteIndicatorBrush
|
||||||
|
}"
|
||||||
|
Stretch="None"
|
||||||
|
StartAngle="0"
|
||||||
|
/>
|
||||||
|
<Ellipse
|
||||||
|
x:Name="Border"
|
||||||
|
Fill="{Binding
|
||||||
|
ElementName=_this,
|
||||||
|
Path=ProgressBorderBrush
|
||||||
|
}"
|
||||||
|
Margin="16"
|
||||||
|
Stroke="{Binding
|
||||||
|
ElementName=_this,
|
||||||
|
Path=ProgressBorderBrush
|
||||||
|
}"
|
||||||
|
|
||||||
|
/>
|
||||||
|
</Grid>
|
||||||
|
</UserControl>
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Globalization;
|
||||||
|
using System.Text;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Data;
|
||||||
|
using System.Windows.Documents;
|
||||||
|
using System.Windows.Input;
|
||||||
|
using System.Windows.Media;
|
||||||
|
using System.Windows.Media.Imaging;
|
||||||
|
using System.Windows.Navigation;
|
||||||
|
using System.Windows.Shapes;
|
||||||
|
|
||||||
|
namespace Server_Dashboard.Controls.DoubleRoundProgressBar {
|
||||||
|
public partial class DoubleRoundProgressBar : UserControl {
|
||||||
|
|
||||||
|
public static DependencyProperty ReadIndicatorBrushProperty = DependencyProperty.Register("ReadIndicatorBrush", typeof(Brush), typeof(DoubleRoundProgressBar));
|
||||||
|
public Brush ReadIndicatorBrush {
|
||||||
|
get { return (Brush)GetValue(ReadIndicatorBrushProperty); }
|
||||||
|
set { SetValue(ReadIndicatorBrushProperty, value); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public static DependencyProperty WriteIndicatorBrushProperty = DependencyProperty.Register("WriteIndicatorBrush", typeof(Brush), typeof(DoubleRoundProgressBar));
|
||||||
|
public Brush WriteIndicatorBrush {
|
||||||
|
get { return (Brush)GetValue(WriteIndicatorBrushProperty); }
|
||||||
|
set { SetValue(WriteIndicatorBrushProperty, value); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public static DependencyProperty BackgroundBrushProperty = DependencyProperty.Register("BackgroundBrush", typeof(Brush), typeof(DoubleRoundProgressBar));
|
||||||
|
public Brush BackgroundBrush {
|
||||||
|
get { return (Brush)GetValue(BackgroundBrushProperty); }
|
||||||
|
set { SetValue(BackgroundBrushProperty, value); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public static DependencyProperty ProgressBorderBrushProperty = DependencyProperty.Register("ProgressBorderBrush", typeof(Brush), typeof(DoubleRoundProgressBar));
|
||||||
|
public Brush ProgressBorderBrush {
|
||||||
|
get { return (Brush)GetValue(ProgressBorderBrushProperty); }
|
||||||
|
set { SetValue(ProgressBorderBrushProperty, value); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public static DependencyProperty ValueWriteProperty = DependencyProperty.Register("ValueWrite", typeof(int), typeof(DoubleRoundProgressBar));
|
||||||
|
public int ValueWrite {
|
||||||
|
get { return (int)GetValue(ValueWriteProperty); }
|
||||||
|
set { SetValue(ValueWriteProperty, value); }
|
||||||
|
}
|
||||||
|
public static DependencyProperty ValueReadProperty = DependencyProperty.Register("ValueRead", typeof(int), typeof(DoubleRoundProgressBar));
|
||||||
|
public int ValueRead {
|
||||||
|
get { return (int)GetValue(ValueReadProperty); }
|
||||||
|
set { SetValue(ValueReadProperty, value); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public DoubleRoundProgressBar() {
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
<UserControl x:Class="Server_Dashboard.Controls.HalfRoundProgressBar.HalfRoundProgressBar"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:local="clr-namespace:Server_Dashboard.Controls.HalfRoundProgressBar"
|
||||||
|
xmlns:ed="http://schemas.microsoft.com/expression/2010/drawing"
|
||||||
|
xmlns:root="clr-namespace:Server_Dashboard"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
x:Name="_this"
|
||||||
|
d:DesignHeight="50" d:DesignWidth="50">
|
||||||
|
<UserControl.Resources>
|
||||||
|
<root:ValueToAngleConverter x:Key="valueToAngle"/>
|
||||||
|
</UserControl.Resources>
|
||||||
|
<Grid>
|
||||||
|
<Ellipse
|
||||||
|
x:Name="Background"
|
||||||
|
Fill="{Binding
|
||||||
|
ElementName=_this,
|
||||||
|
Path=BackgroundBrush
|
||||||
|
}"
|
||||||
|
Margin="0"
|
||||||
|
Stroke="{Binding
|
||||||
|
ElementName=_this,
|
||||||
|
Path=BackgroundBrush
|
||||||
|
}"
|
||||||
|
/>
|
||||||
|
<ed:Arc
|
||||||
|
ArcThickness="8"
|
||||||
|
ArcThicknessUnit="Pixel"
|
||||||
|
EndAngle="{Binding
|
||||||
|
Converter={StaticResource valueToAngle},
|
||||||
|
ElementName=_this,
|
||||||
|
Path=Value
|
||||||
|
}"
|
||||||
|
Fill="{Binding
|
||||||
|
ElementName=_this,
|
||||||
|
Path=IndicatorBrush
|
||||||
|
}"
|
||||||
|
Stretch="None"
|
||||||
|
StartAngle="0"
|
||||||
|
/>
|
||||||
|
<Ellipse
|
||||||
|
x:Name="Border"
|
||||||
|
Fill="{Binding
|
||||||
|
ElementName=_this,
|
||||||
|
Path=ProgressBorderBrush
|
||||||
|
}"
|
||||||
|
Margin="8"
|
||||||
|
Stroke="{Binding
|
||||||
|
ElementName=_this,
|
||||||
|
Path=ProgressBorderBrush
|
||||||
|
}"
|
||||||
|
|
||||||
|
/>
|
||||||
|
</Grid>
|
||||||
|
</UserControl>
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Globalization;
|
||||||
|
using System.Text;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Data;
|
||||||
|
using System.Windows.Documents;
|
||||||
|
using System.Windows.Input;
|
||||||
|
using System.Windows.Media;
|
||||||
|
using System.Windows.Media.Imaging;
|
||||||
|
using System.Windows.Navigation;
|
||||||
|
using System.Windows.Shapes;
|
||||||
|
|
||||||
|
namespace Server_Dashboard.Controls.HalfRoundProgressBar {
|
||||||
|
public partial class HalfRoundProgressBar : UserControl {
|
||||||
|
|
||||||
|
public static DependencyProperty IndicatorBrushProperty = DependencyProperty.Register("IndicatorBrush", typeof(Brush), typeof(HalfRoundProgressBar));
|
||||||
|
public Brush IndicatorBrush {
|
||||||
|
get { return (Brush)GetValue(IndicatorBrushProperty); }
|
||||||
|
set { SetValue(IndicatorBrushProperty, value); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public static DependencyProperty BackgroundBrushProperty = DependencyProperty.Register("BackgroundBrush", typeof(Brush), typeof(HalfRoundProgressBar));
|
||||||
|
public Brush BackgroundBrush {
|
||||||
|
get { return (Brush)GetValue(BackgroundBrushProperty); }
|
||||||
|
set { SetValue(BackgroundBrushProperty, value); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public static DependencyProperty ProgressBorderBrushProperty = DependencyProperty.Register("ProgressBorderBrush", typeof(Brush), typeof(HalfRoundProgressBar));
|
||||||
|
public Brush ProgressBorderBrush {
|
||||||
|
get { return (Brush)GetValue(ProgressBorderBrushProperty); }
|
||||||
|
set { SetValue(ProgressBorderBrushProperty, value); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public static DependencyProperty ValueProperty = DependencyProperty.Register("Value", typeof(int), typeof(HalfRoundProgressBar));
|
||||||
|
public int Value {
|
||||||
|
get { return (int)GetValue(ValueProperty); }
|
||||||
|
set { SetValue(ValueProperty, value); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public HalfRoundProgressBar() {
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,76 @@
|
|||||||
|
<UserControl x:Class="Server_Dashboard.Controls.LoadingIndicator"
|
||||||
|
x:Name="control"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:local="clr-namespace:Server_Dashboard.Controls"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
>
|
||||||
|
<Grid DataContext="{Binding RelativeSource={RelativeSource Self}}">
|
||||||
|
<Path
|
||||||
|
Stroke="Transparent"
|
||||||
|
StrokeThickness=".5"
|
||||||
|
RenderTransformOrigin=".5,.5"
|
||||||
|
Width="60"
|
||||||
|
Height="60"
|
||||||
|
>
|
||||||
|
<Path.Effect>
|
||||||
|
<DropShadowEffect BlurRadius="5" ShadowDepth="0" Opacity="1" Color="#B388FF"/>
|
||||||
|
</Path.Effect>
|
||||||
|
<Path.Data>
|
||||||
|
<CombinedGeometry
|
||||||
|
GeometryCombineMode="Xor"
|
||||||
|
>
|
||||||
|
<CombinedGeometry.Geometry1>
|
||||||
|
<EllipseGeometry
|
||||||
|
RadiusX="30"
|
||||||
|
RadiusY="30"
|
||||||
|
Center="30,30"
|
||||||
|
/>
|
||||||
|
</CombinedGeometry.Geometry1>
|
||||||
|
<CombinedGeometry.Geometry2>
|
||||||
|
<EllipseGeometry
|
||||||
|
RadiusX="24"
|
||||||
|
RadiusY="24"
|
||||||
|
Center="30,30"
|
||||||
|
/>
|
||||||
|
</CombinedGeometry.Geometry2>
|
||||||
|
</CombinedGeometry>
|
||||||
|
</Path.Data>
|
||||||
|
<Path.Fill>
|
||||||
|
<LinearGradientBrush
|
||||||
|
StartPoint="0,0"
|
||||||
|
EndPoint="1,1"
|
||||||
|
>
|
||||||
|
<GradientStop
|
||||||
|
Color="#B388FF" Offset="0"
|
||||||
|
/>
|
||||||
|
<GradientStop
|
||||||
|
Color="#A7FFEB" Offset="1"
|
||||||
|
/>
|
||||||
|
</LinearGradientBrush>
|
||||||
|
</Path.Fill>
|
||||||
|
<Path.RenderTransform>
|
||||||
|
<RotateTransform/>
|
||||||
|
<!--This is necessary for the animation not to stop-->
|
||||||
|
</Path.RenderTransform>
|
||||||
|
<Path.Triggers>
|
||||||
|
<EventTrigger
|
||||||
|
RoutedEvent="Loaded"
|
||||||
|
>
|
||||||
|
<BeginStoryboard>
|
||||||
|
<Storyboard>
|
||||||
|
<DoubleAnimation
|
||||||
|
Storyboard.TargetProperty="(Rectangle.RenderTransform).(RotateTransform.Angle)"
|
||||||
|
To="360"
|
||||||
|
Duration="0:0:.8"
|
||||||
|
RepeatBehavior="Forever"
|
||||||
|
/>
|
||||||
|
</Storyboard>
|
||||||
|
</BeginStoryboard>
|
||||||
|
</EventTrigger>
|
||||||
|
</Path.Triggers>
|
||||||
|
</Path>
|
||||||
|
</Grid>
|
||||||
|
</UserControl>
|
||||||
@@ -1,8 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
using System.Windows.Data;
|
using System.Windows.Data;
|
||||||
@@ -13,12 +11,12 @@ using System.Windows.Media.Imaging;
|
|||||||
using System.Windows.Navigation;
|
using System.Windows.Navigation;
|
||||||
using System.Windows.Shapes;
|
using System.Windows.Shapes;
|
||||||
|
|
||||||
namespace Server_Dashboard {
|
namespace Server_Dashboard.Controls {
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Interaction logic for MainWindow.xaml
|
/// Interaction logic for LoadingIndicator.xaml
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public partial class MainWindow : Window {
|
public partial class LoadingIndicator : UserControl {
|
||||||
public MainWindow() {
|
public LoadingIndicator() {
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
263
Server Dashboard/Controls/ServerModules/ServerModule.xaml
Normal file
@@ -0,0 +1,263 @@
|
|||||||
|
<UserControl x:Class="Server_Dashboard.Controls.ServerModules.ServerModule"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:local="clr-namespace:Server_Dashboard.Controls.ServerModules"
|
||||||
|
xmlns:halfroundprogressbar="clr-namespace:Server_Dashboard.Controls.HalfRoundProgressBar"
|
||||||
|
xmlns:doubleroundprogressbar="clr-namespace:Server_Dashboard.Controls.DoubleRoundProgressBar"
|
||||||
|
mc:Ignorable="d">
|
||||||
|
<Border Background="{StaticResource BackgroundSurface_02dp}" MinHeight="100" MinWidth="300" Width="Auto" Height="Auto" Margin="10" CornerRadius="5">
|
||||||
|
<Border.Effect>
|
||||||
|
<DropShadowEffect BlurRadius="5" ShadowDepth="0"/>
|
||||||
|
</Border.Effect>
|
||||||
|
<Grid>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="40"/>
|
||||||
|
<RowDefinition Height="*"/>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<Border
|
||||||
|
CornerRadius="5 5 0 0"
|
||||||
|
Grid.Row="0"
|
||||||
|
Background="{StaticResource BackgroundSurface_08dp}"
|
||||||
|
>
|
||||||
|
<Grid>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="Auto"/>
|
||||||
|
<ColumnDefinition Width="Auto"/>
|
||||||
|
<ColumnDefinition Width="*"/>
|
||||||
|
<ColumnDefinition Width="Auto"/>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Image Grid.Column="0" Margin="7.5 0 7.5 0" Height="25" Width="25" Source="{Binding ModuleIcon}"/>
|
||||||
|
<TextBlock Foreground="{StaticResource DeepPurple_A100}" Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Left" Text="{Binding ModulName}"/>
|
||||||
|
<Border CornerRadius="0 5 0 0" Background="{Binding StatusIndicator}" Grid.Column="3">
|
||||||
|
<Grid>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition/>
|
||||||
|
<ColumnDefinition/>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<TextBlock Margin="7 0 30 0" VerticalAlignment="Center" HorizontalAlignment="Left" Grid.Column="0" FontSize="24" Text="Status">
|
||||||
|
<TextBlock.Foreground>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.87"/>
|
||||||
|
</TextBlock.Foreground>
|
||||||
|
</TextBlock>
|
||||||
|
<Border CornerRadius="0 5 0 0" Grid.Column="1" HorizontalAlignment="Right" Background="{Binding StatusIndicatorBG}" Padding="6">
|
||||||
|
<Ellipse Fill="{Binding StatusIndicator}" StrokeThickness="0" Width="25" Height="25"/>
|
||||||
|
</Border>
|
||||||
|
</Grid>
|
||||||
|
</Border>
|
||||||
|
</Grid>
|
||||||
|
</Border>
|
||||||
|
<Grid Grid.Row="2" Margin="20" Width="Auto">
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="1.5*"/>
|
||||||
|
<ColumnDefinition/>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Grid Grid.Row="1" Margin="0 0 25 0">
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="Auto"/>
|
||||||
|
<ColumnDefinition Width="Auto"/>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<StackPanel Grid.Column="0">
|
||||||
|
<TextBlock Text="Servername" FontSize="16" Margin="2 2 5 10">
|
||||||
|
<TextBlock.Foreground>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.60"/>
|
||||||
|
</TextBlock.Foreground>
|
||||||
|
</TextBlock>
|
||||||
|
<TextBlock Text="User" FontSize="16" Margin="2 2 5 10">
|
||||||
|
<TextBlock.Foreground>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.60"/>
|
||||||
|
</TextBlock.Foreground>
|
||||||
|
</TextBlock>
|
||||||
|
<TextBlock Text="Public IP" FontSize="16" Margin="2 2 5 10">
|
||||||
|
<TextBlock.Foreground>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.60"/>
|
||||||
|
</TextBlock.Foreground>
|
||||||
|
</TextBlock>
|
||||||
|
<TextBlock Text="Private IP" FontSize="16" Margin="2 2 5 10">
|
||||||
|
<TextBlock.Foreground>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.60"/>
|
||||||
|
</TextBlock.Foreground>
|
||||||
|
</TextBlock>
|
||||||
|
<TextBlock Text="Uptime" FontSize="16" Margin="2 2 5 10">
|
||||||
|
<TextBlock.Foreground>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.60"/>
|
||||||
|
</TextBlock.Foreground>
|
||||||
|
</TextBlock>
|
||||||
|
<TextBlock Text="Creation Date" FontSize="16" Margin="2 2 5 10">
|
||||||
|
<TextBlock.Foreground>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.60"/>
|
||||||
|
</TextBlock.Foreground>
|
||||||
|
</TextBlock>
|
||||||
|
<TextBlock Text="Creator" FontSize="16" Margin="2 2 5 10">
|
||||||
|
<TextBlock.Foreground>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.60"/>
|
||||||
|
</TextBlock.Foreground>
|
||||||
|
</TextBlock>
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel Grid.Column="1">
|
||||||
|
<TextBlock Text="{Binding ServerInfo.ServerName}" FontSize="16" Margin="5 2 2 10">
|
||||||
|
<TextBlock.Foreground>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.60"/>
|
||||||
|
</TextBlock.Foreground>
|
||||||
|
</TextBlock>
|
||||||
|
<TextBlock Text="{Binding ServerInfo.OSUserName}" FontSize="16" Margin="5 2 2 10">
|
||||||
|
<TextBlock.Foreground>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.60"/>
|
||||||
|
</TextBlock.Foreground>
|
||||||
|
</TextBlock>
|
||||||
|
<TextBlock Text="{Binding ServerInfo.PublicIpAdress}" FontSize="16" Margin="5 2 2 10">
|
||||||
|
<TextBlock.Foreground>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.60"/>
|
||||||
|
</TextBlock.Foreground>
|
||||||
|
</TextBlock>
|
||||||
|
<TextBlock Text="{Binding ServerInfo.PrivateIpAdress}" FontSize="16" Margin="5 2 2 10">
|
||||||
|
<TextBlock.Foreground>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.60"/>
|
||||||
|
</TextBlock.Foreground>
|
||||||
|
</TextBlock>
|
||||||
|
<TextBlock Text="{Binding ServerInfo.Uptime}" FontSize="16" Margin="5 2 2 10">
|
||||||
|
<TextBlock.Foreground>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.60"/>
|
||||||
|
</TextBlock.Foreground>
|
||||||
|
</TextBlock>
|
||||||
|
<TextBlock Text="{Binding CreationDate}" FontSize="16" Margin="5 2 2 10">
|
||||||
|
<TextBlock.Foreground>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.60"/>
|
||||||
|
</TextBlock.Foreground>
|
||||||
|
</TextBlock>
|
||||||
|
<TextBlock Text="{Binding Creator}" FontSize="16" Margin="5 2 2 10">
|
||||||
|
<TextBlock.Foreground>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.60"/>
|
||||||
|
</TextBlock.Foreground>
|
||||||
|
</TextBlock>
|
||||||
|
</StackPanel>
|
||||||
|
</Grid>
|
||||||
|
<Grid Grid.Row="1" Grid.Column="1">
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition/>
|
||||||
|
<ColumnDefinition/>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Grid Grid.Column="0">
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition/>
|
||||||
|
<RowDefinition/>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<halfroundprogressbar:HalfRoundProgressBar
|
||||||
|
Margin="5"
|
||||||
|
Grid.Row="0"
|
||||||
|
ProgressBorderBrush="{StaticResource BackgroundSurface_02dp}"
|
||||||
|
BackgroundBrush="{StaticResource BackgroundSurface_08dp}"
|
||||||
|
Height="100"
|
||||||
|
Width="100"
|
||||||
|
Value="{Binding ServerInfo.CpuUsage}"
|
||||||
|
IndicatorBrush="{StaticResource Teal_A100}"
|
||||||
|
/>
|
||||||
|
<TextBlock
|
||||||
|
Foreground="{StaticResource Teal_A100}"
|
||||||
|
Grid.Row="0"
|
||||||
|
Text="CPU"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
FontSize="18"
|
||||||
|
/>
|
||||||
|
<halfroundprogressbar:HalfRoundProgressBar
|
||||||
|
Margin="5"
|
||||||
|
Grid.Row="1"
|
||||||
|
ProgressBorderBrush="{StaticResource BackgroundSurface_02dp}"
|
||||||
|
BackgroundBrush="{StaticResource BackgroundSurface_08dp}"
|
||||||
|
Height="100"
|
||||||
|
Width="100"
|
||||||
|
Value="{Binding ServerInfo.GpuUsage}"
|
||||||
|
IndicatorBrush="{StaticResource Teal_A100}"
|
||||||
|
/>
|
||||||
|
<TextBlock
|
||||||
|
Foreground="{StaticResource Teal_A100}"
|
||||||
|
Grid.Row="1"
|
||||||
|
Text="GPU"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
FontSize="18"
|
||||||
|
/>
|
||||||
|
</Grid>
|
||||||
|
<Grid Grid.Column="1">
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition/>
|
||||||
|
<RowDefinition/>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<doubleroundprogressbar:DoubleRoundProgressBar
|
||||||
|
ValueRead="70"
|
||||||
|
ValueWrite="60"
|
||||||
|
ReadIndicatorBrush="{StaticResource DeepPurple_A100}"
|
||||||
|
WriteIndicatorBrush="{StaticResource Teal_A100}"
|
||||||
|
Margin="5"
|
||||||
|
Grid.Row="0"
|
||||||
|
ProgressBorderBrush="{StaticResource BackgroundSurface_02dp}"
|
||||||
|
BackgroundBrush="{StaticResource BackgroundSurface_08dp}"
|
||||||
|
Height="100"
|
||||||
|
Width="100"
|
||||||
|
/>
|
||||||
|
<StackPanel
|
||||||
|
Grid.Row="0"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
HorizontalAlignment="Center">
|
||||||
|
<TextBlock
|
||||||
|
Grid.Row="0"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
FontSize="18"
|
||||||
|
TextAlignment="Center"
|
||||||
|
Text="Read"
|
||||||
|
Foreground="{StaticResource DeepPurple_A100}"
|
||||||
|
/>
|
||||||
|
<TextBlock
|
||||||
|
Grid.Row="0"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
FontSize="18"
|
||||||
|
TextAlignment="Center"
|
||||||
|
Text="Write"
|
||||||
|
Foreground="{StaticResource Teal_A100}"
|
||||||
|
/>
|
||||||
|
</StackPanel>
|
||||||
|
<doubleroundprogressbar:DoubleRoundProgressBar
|
||||||
|
ValueRead="70"
|
||||||
|
ValueWrite="60"
|
||||||
|
ReadIndicatorBrush="{StaticResource DeepPurple_A100}"
|
||||||
|
WriteIndicatorBrush="{StaticResource Teal_A100}"
|
||||||
|
Margin="5"
|
||||||
|
Grid.Row="1"
|
||||||
|
ProgressBorderBrush="{StaticResource BackgroundSurface_02dp}"
|
||||||
|
BackgroundBrush="{StaticResource BackgroundSurface_08dp}"
|
||||||
|
Height="100"
|
||||||
|
Width="100"
|
||||||
|
/>
|
||||||
|
<StackPanel
|
||||||
|
Grid.Row="1"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
HorizontalAlignment="Center">
|
||||||
|
<TextBlock
|
||||||
|
Grid.Row="0"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
FontSize="18"
|
||||||
|
TextAlignment="Center"
|
||||||
|
Text="UP"
|
||||||
|
Foreground="{StaticResource DeepPurple_A100}"
|
||||||
|
/>
|
||||||
|
<TextBlock
|
||||||
|
Grid.Row="0"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
FontSize="18"
|
||||||
|
TextAlignment="Center"
|
||||||
|
Text="DOWN"
|
||||||
|
Foreground="{StaticResource Teal_A100}"
|
||||||
|
/>
|
||||||
|
</StackPanel>
|
||||||
|
</Grid>
|
||||||
|
</Grid>
|
||||||
|
</Grid>
|
||||||
|
</Grid>
|
||||||
|
</Border>
|
||||||
|
</UserControl>
|
||||||
23
Server Dashboard/Controls/ServerModules/ServerModule.xaml.cs
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Data;
|
||||||
|
using System.Windows.Documents;
|
||||||
|
using System.Windows.Input;
|
||||||
|
using System.Windows.Media;
|
||||||
|
using System.Windows.Media.Imaging;
|
||||||
|
using System.Windows.Navigation;
|
||||||
|
using System.Windows.Shapes;
|
||||||
|
|
||||||
|
namespace Server_Dashboard.Controls.ServerModules {
|
||||||
|
/// <summary>
|
||||||
|
/// Interaktionslogik für ServerModule.xaml
|
||||||
|
/// </summary>
|
||||||
|
public partial class ServerModule : UserControl {
|
||||||
|
public ServerModule() {
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,12 +4,19 @@ using System.Text;
|
|||||||
|
|
||||||
namespace Server_Dashboard {
|
namespace Server_Dashboard {
|
||||||
class DashboardModule {
|
class DashboardModule {
|
||||||
public string Name { get; set; }
|
public string ModuleName { get; set; }
|
||||||
public string Creator { get; set; }
|
public string Creator { get; set; }
|
||||||
public DateTime Uptime { get; set; }
|
public ServerInformation ServerInfo { get; set; }
|
||||||
public ModuleItem ModuleItem { get; set; }
|
public string StatusIndicator { get; set; }
|
||||||
public DashboardModule() {
|
public string StatusIndicatorBG { get; set; }
|
||||||
ModuleItem = new ModuleItem();
|
public bool ServerAvailable { get; set; }
|
||||||
|
public string ModuleIcon { get; set; }
|
||||||
|
public string CreationDate { get; set; }
|
||||||
|
|
||||||
|
public DashboardModule(bool serverAvailable) {
|
||||||
|
ServerAvailable = serverAvailable;
|
||||||
|
StatusIndicator = ServerAvailable ? "#20c657" : "#e53935";
|
||||||
|
StatusIndicatorBG = ServerAvailable ? "#94eeb0" : "#ef9a9a";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace Server_Dashboard {
|
|
||||||
class ModuleItem {
|
|
||||||
public string Name { get; set; }
|
|
||||||
public double CpuTemp { get; set; }
|
|
||||||
public double GpuTemp { get; set; }
|
|
||||||
public DateTime Uptime { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
12
Server Dashboard/DashboardModules/NewModuleInformation.cs
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace Server_Dashboard.DashboardModules {
|
||||||
|
class NewModuleInformation {
|
||||||
|
public string ServerName { get; set; }
|
||||||
|
public string Username { get; set; }
|
||||||
|
public string IPAdress { get; set; }
|
||||||
|
public int Port { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
19
Server Dashboard/DashboardModules/ServerInformation.cs
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Collections.ObjectModel;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace Server_Dashboard {
|
||||||
|
class ServerInformation {
|
||||||
|
public string ServerName { get; set; }
|
||||||
|
public string OSUserName { get; set; }
|
||||||
|
public string CpuTemp { get; set; }
|
||||||
|
public string GpuTemp { get; set; }
|
||||||
|
public string Uptime { get; set; }
|
||||||
|
public string DeployDate { get; set; }
|
||||||
|
public string PublicIpAdress { get; set; }
|
||||||
|
public string PrivateIpAdress { get; set; }
|
||||||
|
public string GpuUsage { get; set; }
|
||||||
|
public string CpuUsage { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,24 +2,101 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Configuration;
|
using System.Configuration;
|
||||||
|
using System.Data;
|
||||||
using System.Data.SqlClient;
|
using System.Data.SqlClient;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
|
||||||
namespace Server_Dashboard {
|
namespace Server_Dashboard {
|
||||||
class DatabaseHandler {
|
public static class DatabaseHandler {
|
||||||
|
|
||||||
|
public static DataTable GetServerInformation() {
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int CheckLogin(string uname, string passwd) {
|
||||||
|
using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ServerDashboardDB"].ConnectionString)) {
|
||||||
|
try {
|
||||||
|
con.Open();
|
||||||
|
string query = "EXEC ValidateUserLogin @Username = @uname, @Password = @passwd, @Valid = @valid OUTPUT";
|
||||||
|
using (SqlCommand com = new SqlCommand(query, con)) {
|
||||||
|
com.Parameters.AddWithValue("@uname", uname);
|
||||||
|
com.Parameters.AddWithValue("@passwd", passwd);
|
||||||
|
com.Parameters.Add("@valid", SqlDbType.NVarChar, 250);
|
||||||
|
com.Parameters["@valid"].Direction = ParameterDirection.Output;
|
||||||
|
com.ExecuteNonQuery();
|
||||||
|
return Convert.ToInt32(com.Parameters["@Valid"].Value);
|
||||||
|
}
|
||||||
|
} catch (SqlException ex) {
|
||||||
|
return ex.Number;
|
||||||
|
} finally {
|
||||||
|
con.Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool CheckCookie(string cookie, string username) {
|
||||||
|
string valid = "False";
|
||||||
|
ConnectToDatabase(con => {
|
||||||
|
string query = "EXEC CheckUserCookie @Cookie = @cookie, @UserName = @username, @Valid = @valid OUTPUT";
|
||||||
|
using (SqlCommand com = new SqlCommand(query, con)) {
|
||||||
|
com.Parameters.AddWithValue("@cookie", cookie);
|
||||||
|
com.Parameters.AddWithValue("@username", username);
|
||||||
|
com.Parameters.Add("@valid", SqlDbType.NVarChar, 250);
|
||||||
|
com.Parameters["@valid"].Direction = ParameterDirection.Output;
|
||||||
|
com.ExecuteNonQuery();
|
||||||
|
valid = Convert.ToString(com.Parameters["@Valid"].Value);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return Convert.ToBoolean(valid);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool DeleteCookie(string username) {
|
||||||
|
string valid = "False";
|
||||||
|
ConnectToDatabase(con => {
|
||||||
|
string query = "EXEC DeleteUserCookie @Username = @username, @ResponseMessage = @response OUTPUT";
|
||||||
|
using (SqlCommand com = new SqlCommand(query, con)) {
|
||||||
|
com.Parameters.AddWithValue("@username", username);
|
||||||
|
com.Parameters.Add("@response", SqlDbType.NVarChar, 250);
|
||||||
|
com.Parameters["@response"].Direction = ParameterDirection.Output;
|
||||||
|
com.ExecuteNonQuery();
|
||||||
|
valid = Convert.ToString(com.Parameters["@ResponseMessage"].Value);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return Convert.ToBoolean(valid);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool AddCookie(string cookie, string username) {
|
||||||
|
string valid = "False";
|
||||||
|
ConnectToDatabase(con => {
|
||||||
|
string query = "EXEC AddCookieToUser @Cookie = @cookie, @UserName = @username, @ResponseMessage = @response OUTPUT";
|
||||||
|
using (SqlCommand com = new SqlCommand(query, con)) {
|
||||||
|
com.Parameters.AddWithValue("@cookie", cookie);
|
||||||
|
com.Parameters.AddWithValue("@username", username);
|
||||||
|
com.Parameters.Add("@response", SqlDbType.NVarChar, 250);
|
||||||
|
com.Parameters["@response"].Direction = ParameterDirection.Output;
|
||||||
|
com.ExecuteNonQuery();
|
||||||
|
valid = Convert.ToString(com.Parameters["@ResponseMessage"].Value);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return Convert.ToBoolean(valid);
|
||||||
|
}
|
||||||
|
|
||||||
#region Private methods
|
#region Private methods
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Opens a database connection
|
/// Opens a database connection
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="callback">Callback type SqlConnection</param>
|
/// <param name="callback">Callback type SqlConnection</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
private SqlConnection ConnectToDatabase(Action<SqlConnection> callback) {
|
private static SqlConnection ConnectToDatabase(Action<SqlConnection> callback) {
|
||||||
using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["Co2AuswertungDB"].ConnectionString)) {
|
using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ServerDashboardDB"].ConnectionString)) {
|
||||||
try {
|
try {
|
||||||
con.Open();
|
con.Open();
|
||||||
callback(con);
|
callback(con);
|
||||||
con.Close();
|
con.Close();
|
||||||
} catch { return null; }
|
} catch (SqlException ex) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
10
Server Dashboard/Interfaces/IHavePassword.cs
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Security;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace Server_Dashboard {
|
||||||
|
public interface IHavePassword {
|
||||||
|
SecureString SecurePassword { get; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,6 +3,7 @@ using System.Collections.Generic;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace Server_Dashboard {
|
namespace Server_Dashboard {
|
||||||
class MainViewModel : BaseViewModel {
|
interface IWindowHelper {
|
||||||
|
Action Close { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
313
Server Dashboard/LoginWindow.xaml
Normal file
@@ -0,0 +1,313 @@
|
|||||||
|
<Window x:Class="Server_Dashboard.LoginWindow"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
|
||||||
|
xmlns:local="clr-namespace:Server_Dashboard"
|
||||||
|
xmlns:loading="clr-namespace:Server_Dashboard.Controls"
|
||||||
|
x:Name="Login"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
Title="Server Dashboard" Height="700" Width="500" WindowStyle="None" Background="Transparent" ResizeMode="CanResize" local:CloseProperty.Value="True">
|
||||||
|
<WindowChrome.WindowChrome>
|
||||||
|
<WindowChrome CaptionHeight="0" ResizeBorderThickness="0"/>
|
||||||
|
</WindowChrome.WindowChrome>
|
||||||
|
<Window.DataContext>
|
||||||
|
<local:LoginViewModel/>
|
||||||
|
</Window.DataContext>
|
||||||
|
|
||||||
|
<!--#region Login forms main container-->
|
||||||
|
<Border Background="{StaticResource BackgroundSurface_00dp}">
|
||||||
|
<Grid Grid.Row="0">
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="30"/>
|
||||||
|
<RowDefinition Height="*"/>
|
||||||
|
<RowDefinition Height="70"/>
|
||||||
|
<RowDefinition Height="80"/>
|
||||||
|
<RowDefinition Height="80"/>
|
||||||
|
<RowDefinition Height="80"/>
|
||||||
|
<RowDefinition Height="30"/>
|
||||||
|
<RowDefinition Height="30"/>
|
||||||
|
<RowDefinition Height="80"/>
|
||||||
|
<RowDefinition Height=".3*"/>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<i:Interaction.Triggers>
|
||||||
|
<i:EventTrigger EventName="MouseDown">
|
||||||
|
<i:CallMethodAction MethodName="DragMove" TargetObject="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}"/>
|
||||||
|
</i:EventTrigger>
|
||||||
|
</i:Interaction.Triggers>
|
||||||
|
|
||||||
|
<!--#region Custom title bar-->
|
||||||
|
<Grid Background="{StaticResource BackgroundSurface_04dp}" Grid.Row="0" Grid.ColumnSpan="2">
|
||||||
|
<Grid.Effect>
|
||||||
|
<DropShadowEffect Direction="270" ShadowDepth="0" BlurRadius="5"/>
|
||||||
|
</Grid.Effect>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="*"/>
|
||||||
|
<ColumnDefinition Width="40"/>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Label Grid.Column="0"/>
|
||||||
|
<Button Style="{StaticResource CloseButton}" Grid.Column="2" Content="✕">
|
||||||
|
<i:Interaction.Triggers>
|
||||||
|
<i:EventTrigger EventName="Click">
|
||||||
|
<i:CallMethodAction MethodName="Close" TargetObject="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}"/>
|
||||||
|
</i:EventTrigger>
|
||||||
|
</i:Interaction.Triggers>
|
||||||
|
</Button>
|
||||||
|
</Grid>
|
||||||
|
<!--#endregion-->
|
||||||
|
|
||||||
|
<!--#region Greeting text-->
|
||||||
|
<Border
|
||||||
|
Height="100"
|
||||||
|
BorderBrush="{StaticResource DeepPurple_400}"
|
||||||
|
BorderThickness="0 2 0 2"
|
||||||
|
Background="{StaticResource BackgroundSurface_00dp}"
|
||||||
|
Grid.Row="1"
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
VerticalAlignment="Bottom"
|
||||||
|
Grid.ColumnSpan="2"
|
||||||
|
Margin="0 0 0 10"
|
||||||
|
>
|
||||||
|
<StackPanel
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
Margin="0 0 0 5"
|
||||||
|
>
|
||||||
|
<TextBlock
|
||||||
|
Text="Server Dashboard"
|
||||||
|
FontSize="30"
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
>
|
||||||
|
<TextBlock.Foreground>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.64"/>
|
||||||
|
</TextBlock.Foreground>
|
||||||
|
</TextBlock>
|
||||||
|
<TextBlock
|
||||||
|
Text="Login"
|
||||||
|
FontSize="30"
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
>
|
||||||
|
<TextBlock.Foreground>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.64"/>
|
||||||
|
</TextBlock.Foreground>
|
||||||
|
</TextBlock>
|
||||||
|
</StackPanel>
|
||||||
|
</Border>
|
||||||
|
<UserControl Grid.Row="2" Visibility="{Binding Loading}">
|
||||||
|
<loading:LoadingIndicator/>
|
||||||
|
</UserControl>
|
||||||
|
<!--#endregion-->
|
||||||
|
|
||||||
|
<!--#region Username form-->
|
||||||
|
<Border
|
||||||
|
CornerRadius="4"
|
||||||
|
Margin="0 10 0 10"
|
||||||
|
Width="350"
|
||||||
|
Height="60"
|
||||||
|
Background="{StaticResource BackgroundSurface_01dp}"
|
||||||
|
Grid.Row="3"
|
||||||
|
Grid.ColumnSpan="2"
|
||||||
|
>
|
||||||
|
<Border.Effect>
|
||||||
|
<DropShadowEffect
|
||||||
|
Direction="0"
|
||||||
|
ShadowDepth="0"
|
||||||
|
BlurRadius="5"
|
||||||
|
/>
|
||||||
|
</Border.Effect>
|
||||||
|
<Grid Grid.Column="1">
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="60"/>
|
||||||
|
<ColumnDefinition/>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Image
|
||||||
|
Grid.Column="0"
|
||||||
|
Height="30"
|
||||||
|
Source="Assets/Images/userlogin.png"
|
||||||
|
/>
|
||||||
|
<TextBox
|
||||||
|
Text="{Binding Username}"
|
||||||
|
x:Name="UserName"
|
||||||
|
Grid.Column="1"
|
||||||
|
Margin="0 0 5 0"
|
||||||
|
/>
|
||||||
|
<TextBlock
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
HorizontalAlignment="Left"
|
||||||
|
Text="Username"
|
||||||
|
Visibility="{Binding ElementName=UserName, Path=Text.IsEmpty, Converter={StaticResource UserNameVisibillity}}"
|
||||||
|
Grid.Column="1"
|
||||||
|
IsHitTestVisible="False"
|
||||||
|
>
|
||||||
|
<TextBlock.Foreground>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.12"/>
|
||||||
|
</TextBlock.Foreground>
|
||||||
|
</TextBlock>
|
||||||
|
</Grid>
|
||||||
|
</Border>
|
||||||
|
<!--#endregion-->
|
||||||
|
|
||||||
|
<!--#region Password form-->
|
||||||
|
<Border
|
||||||
|
Margin="0 10 0 10"
|
||||||
|
Background="{StaticResource BackgroundSurface_01dp}"
|
||||||
|
Grid.Row="4"
|
||||||
|
Grid.ColumnSpan="2"
|
||||||
|
Width="350"
|
||||||
|
CornerRadius="4"
|
||||||
|
Padding="0 0 5 0"
|
||||||
|
>
|
||||||
|
<Border.Effect>
|
||||||
|
<DropShadowEffect Direction="0" ShadowDepth="0" BlurRadius="5"/>
|
||||||
|
</Border.Effect>
|
||||||
|
<Grid Grid.Column="1">
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="60"/>
|
||||||
|
<ColumnDefinition/>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Image Grid.Column="0" Height="30" Source="Assets/Images/userpasswd.png"/>
|
||||||
|
<PasswordBox
|
||||||
|
Width="290"
|
||||||
|
Height="60"
|
||||||
|
local:MonitorPasswordProperty.Value="True"
|
||||||
|
Grid.Column="1"
|
||||||
|
x:Name="Password"
|
||||||
|
>
|
||||||
|
<PasswordBox.InputBindings>
|
||||||
|
<KeyBinding
|
||||||
|
Key="Return"
|
||||||
|
Command="{Binding LoginCommand}"
|
||||||
|
CommandParameter="{Binding ElementName=Login}"
|
||||||
|
/>
|
||||||
|
</PasswordBox.InputBindings>
|
||||||
|
</PasswordBox>
|
||||||
|
<TextBlock
|
||||||
|
Visibility="{Binding ElementName=Password, Path=(local:HasTextProperty.Value), Converter={StaticResource UserNameVisibillity}}" x:Name="PasswordHint"
|
||||||
|
Text="Password"
|
||||||
|
Grid.Column="1"
|
||||||
|
IsHitTestVisible="False"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
HorizontalAlignment="Left"
|
||||||
|
>
|
||||||
|
<TextBlock.InputBindings>
|
||||||
|
<KeyBinding
|
||||||
|
Key="Return"
|
||||||
|
Command="{Binding LoginCommand}"
|
||||||
|
CommandParameter="{Binding ElementName=Login}"
|
||||||
|
/>
|
||||||
|
</TextBlock.InputBindings>
|
||||||
|
<TextBlock.Foreground>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.12"/>
|
||||||
|
</TextBlock.Foreground>
|
||||||
|
</TextBlock>
|
||||||
|
</Grid>
|
||||||
|
</Border>
|
||||||
|
<!--#endregion-->
|
||||||
|
|
||||||
|
<!--#region Login button-->
|
||||||
|
<Button
|
||||||
|
Height="60"
|
||||||
|
Width="350"
|
||||||
|
Command="{Binding LoginCommand}"
|
||||||
|
CommandParameter="{Binding ElementName=Login}"
|
||||||
|
Grid.Row="5"
|
||||||
|
Content="LOGIN"
|
||||||
|
Grid.ColumnSpan="2"
|
||||||
|
/>
|
||||||
|
<!--#endregion-->
|
||||||
|
|
||||||
|
<!--#region Error text-->
|
||||||
|
<TextBlock
|
||||||
|
Text="{Binding ErrorText}"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
Grid.Row="6"
|
||||||
|
Grid.Column="1"
|
||||||
|
Foreground="{StaticResource ErrorRed}"
|
||||||
|
FontSize="14"
|
||||||
|
/>
|
||||||
|
<!--#endregion-->
|
||||||
|
|
||||||
|
<!--#region Remember me and Password forgotten link-->
|
||||||
|
<Grid Grid.Row="7">
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="Auto"/>
|
||||||
|
<ColumnDefinition Width="*"/>
|
||||||
|
<ColumnDefinition Width="Auto"/>
|
||||||
|
<ColumnDefinition Width="Auto"/>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<CheckBox
|
||||||
|
IsChecked="{Binding RememberUser}"
|
||||||
|
Grid.Column="0"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
Margin="75 0 0 0"
|
||||||
|
/>
|
||||||
|
<TextBlock
|
||||||
|
Grid.Column="1"
|
||||||
|
Text="Remember me?"
|
||||||
|
FontSize="14"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
HorizontalAlignment="Left"
|
||||||
|
Margin="10 0 0 0"
|
||||||
|
>
|
||||||
|
<TextBlock.Foreground>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.64"/>
|
||||||
|
</TextBlock.Foreground>
|
||||||
|
</TextBlock>
|
||||||
|
<TextBlock
|
||||||
|
Grid.Column="3"
|
||||||
|
FontSize="14"
|
||||||
|
Margin="0 0 75 0"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
HorizontalAlignment="Right"
|
||||||
|
>
|
||||||
|
<!--Send recovery Email to user, probably replace with a button-->
|
||||||
|
<Hyperlink
|
||||||
|
NavigateUri="https://example.com"
|
||||||
|
local:HyperlinkExtensions.IsExternal="True"
|
||||||
|
>
|
||||||
|
Forgot password
|
||||||
|
</Hyperlink>
|
||||||
|
<TextBlock.Foreground>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.64"/>
|
||||||
|
</TextBlock.Foreground>
|
||||||
|
</TextBlock>
|
||||||
|
</Grid>
|
||||||
|
<!--#endregion-->
|
||||||
|
|
||||||
|
<!--#region Link to register form-->
|
||||||
|
<Grid Grid.Row="8">
|
||||||
|
<StackPanel
|
||||||
|
Orientation="Horizontal"
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
>
|
||||||
|
<TextBlock
|
||||||
|
Text="Don't have an account?"
|
||||||
|
FontSize="16"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
HorizontalAlignment="Right"
|
||||||
|
>
|
||||||
|
<TextBlock.Foreground>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.64"/>
|
||||||
|
</TextBlock.Foreground>
|
||||||
|
</TextBlock>
|
||||||
|
<Button
|
||||||
|
Command="{Binding RegisterCommand}"
|
||||||
|
Content="REGISTER"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
HorizontalAlignment="Left"
|
||||||
|
FontSize="12"
|
||||||
|
Height="30"
|
||||||
|
Width="80"
|
||||||
|
Margin="10 0 0 0"
|
||||||
|
/>
|
||||||
|
</StackPanel>
|
||||||
|
</Grid>
|
||||||
|
<!--#endregion-->
|
||||||
|
|
||||||
|
</Grid>
|
||||||
|
</Border>
|
||||||
|
<!--#endregion-->
|
||||||
|
|
||||||
|
</Window>
|
||||||
16
Server Dashboard/LoginWindow.xaml.cs
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
using System;
|
||||||
|
using System.Security;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Input;
|
||||||
|
|
||||||
|
namespace Server_Dashboard {
|
||||||
|
/// <summary>
|
||||||
|
/// Interaction logic for LoginWindow.xaml
|
||||||
|
/// </summary>
|
||||||
|
public partial class LoginWindow : Window, IHavePassword {
|
||||||
|
public LoginWindow() {
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
public SecureString SecurePassword => Password.SecurePassword;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,75 +0,0 @@
|
|||||||
<Window x:Class="Server_Dashboard.MainWindow"
|
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
|
||||||
xmlns:local="clr-namespace:Server_Dashboard"
|
|
||||||
mc:Ignorable="d"
|
|
||||||
Title="Server Dashboard" Height="600" Width="400">
|
|
||||||
<Border Style="{StaticResource LoginViewBorder}">
|
|
||||||
<Grid>
|
|
||||||
<Grid.RowDefinitions>
|
|
||||||
<RowDefinition Height="*"/>
|
|
||||||
<RowDefinition Height="80"/>
|
|
||||||
<RowDefinition Height="80"/>
|
|
||||||
<RowDefinition Height="80"/>
|
|
||||||
<RowDefinition Height=".5*"/>
|
|
||||||
</Grid.RowDefinitions>
|
|
||||||
<TextBlock Text="Login"/>
|
|
||||||
<Grid Grid.Row="1">
|
|
||||||
<Border Style="{StaticResource LoginFormsBorder}">
|
|
||||||
<Grid Grid.Column="1">
|
|
||||||
<Grid.ColumnDefinitions>
|
|
||||||
<ColumnDefinition Width="60"/>
|
|
||||||
<ColumnDefinition/>
|
|
||||||
</Grid.ColumnDefinitions>
|
|
||||||
<Image Grid.Column="0" Height="30" Source="Assets/Images/userlogin.png"/>
|
|
||||||
<Border Grid.Column="1" Style="{StaticResource LoginFormsInputBorder}">
|
|
||||||
<TextBox Grid.Column="1" Style="{StaticResource LoginFormInput}"/>
|
|
||||||
</Border>
|
|
||||||
</Grid>
|
|
||||||
</Border>
|
|
||||||
</Grid>
|
|
||||||
<Grid Grid.Row="2">
|
|
||||||
<Border Style="{StaticResource LoginFormsBorder}">
|
|
||||||
<Grid Grid.Column="1">
|
|
||||||
<Grid.ColumnDefinitions>
|
|
||||||
<ColumnDefinition Width="60"/>
|
|
||||||
<ColumnDefinition/>
|
|
||||||
</Grid.ColumnDefinitions>
|
|
||||||
<Image Grid.Column="0" Height="30" Source="Assets/Images/userpasswd.png"/>
|
|
||||||
<Border Grid.Column="1" Style="{StaticResource LoginFormsInputBorder}">
|
|
||||||
<PasswordBox Grid.Column="1" Style="{StaticResource LoginFormPassword}"/>
|
|
||||||
</Border>
|
|
||||||
</Grid>
|
|
||||||
</Border>
|
|
||||||
</Grid>
|
|
||||||
<Grid Grid.Row="3">
|
|
||||||
<Button Style="{StaticResource LoginFormButton}" Content="Anmelden"/>
|
|
||||||
</Grid>
|
|
||||||
<Grid Grid.Row="4">
|
|
||||||
<Grid.RowDefinitions>
|
|
||||||
<RowDefinition/>
|
|
||||||
<RowDefinition/>
|
|
||||||
</Grid.RowDefinitions>
|
|
||||||
<Grid Height="20" VerticalAlignment="Top" Grid.Row="0">
|
|
||||||
<TextBlock Grid.Column="1" HorizontalAlignment="Center" FontSize="14" FontFamily="Arial" Foreground="#878787">
|
|
||||||
Noch keinen Account? Klicke
|
|
||||||
<Hyperlink Foreground="#25AEA6" TextDecorations="none" NavigateUri="https://www.youtube.com/watch?v=dQw4w9WgXcQ">
|
|
||||||
hier
|
|
||||||
</Hyperlink>
|
|
||||||
um einen zu erstellen!
|
|
||||||
</TextBlock>
|
|
||||||
</Grid>
|
|
||||||
<Grid VerticalAlignment="Top" Height="20" Grid.Row="2">
|
|
||||||
<TextBlock HorizontalAlignment="Center" FontSize="14" FontFamily="Arial" Foreground="#878787">
|
|
||||||
Passwort
|
|
||||||
<Hyperlink Foreground="#25AEA6" TextDecorations="none" NavigateUri="https://www.youtube.com/watch?v=dQw4w9WgXcQ">
|
|
||||||
Vergessen?
|
|
||||||
</Hyperlink>
|
|
||||||
</TextBlock>
|
|
||||||
</Grid>
|
|
||||||
</Grid>
|
|
||||||
</Grid>
|
|
||||||
</Border>
|
|
||||||
</Window>
|
|
||||||
62
Server Dashboard/Properties/Settings.Designer.cs
generated
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Runtime Version:4.0.30319.42000
|
||||||
|
//
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace Server_Dashboard.Properties {
|
||||||
|
|
||||||
|
|
||||||
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.8.1.0")]
|
||||||
|
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
||||||
|
|
||||||
|
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||||
|
|
||||||
|
public static Settings Default {
|
||||||
|
get {
|
||||||
|
return defaultInstance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
|
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
||||||
|
public string Cookies {
|
||||||
|
get {
|
||||||
|
return ((string)(this["Cookies"]));
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this["Cookies"] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
|
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
||||||
|
public string Username {
|
||||||
|
get {
|
||||||
|
return ((string)(this["Username"]));
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this["Username"] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
|
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||||
|
public bool RememberMe {
|
||||||
|
get {
|
||||||
|
return ((bool)(this["RememberMe"]));
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this["RememberMe"] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
15
Server Dashboard/Properties/Settings.settings
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
|
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="Server_Dashboard.Properties" GeneratedClassName="Settings">
|
||||||
|
<Profiles />
|
||||||
|
<Settings>
|
||||||
|
<Setting Name="Cookies" Type="System.String" Scope="User">
|
||||||
|
<Value Profile="(Default)" />
|
||||||
|
</Setting>
|
||||||
|
<Setting Name="Username" Type="System.String" Scope="User">
|
||||||
|
<Value Profile="(Default)" />
|
||||||
|
</Setting>
|
||||||
|
<Setting Name="RememberMe" Type="System.Boolean" Scope="User">
|
||||||
|
<Value Profile="(Default)">False</Value>
|
||||||
|
</Setting>
|
||||||
|
</Settings>
|
||||||
|
</SettingsFile>
|
||||||
22
Server Dashboard/Security/SecureStringHelpers.cs
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Security;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace Server_Dashboard {
|
||||||
|
public static class SecureStringHelpers {
|
||||||
|
public static string Unsecure(this SecureString secureString) {
|
||||||
|
if (secureString == null)
|
||||||
|
return string.Empty;
|
||||||
|
var unmanagedString = IntPtr.Zero;
|
||||||
|
|
||||||
|
try {
|
||||||
|
unmanagedString = Marshal.SecureStringToGlobalAllocUnicode(secureString);
|
||||||
|
return Marshal.PtrToStringUni(unmanagedString);
|
||||||
|
} finally {
|
||||||
|
Marshal.ZeroFreeGlobalAllocUnicode(unmanagedString);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -8,21 +8,99 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<None Remove="Assets\Fonts\OpenSans\OpenSans-Bold.ttf" />
|
||||||
|
<None Remove="Assets\Fonts\OpenSans\OpenSans-BoldItalic.ttf" />
|
||||||
|
<None Remove="Assets\Fonts\OpenSans\OpenSans-ExtraBold.ttf" />
|
||||||
|
<None Remove="Assets\Fonts\OpenSans\OpenSans-ExtraBoldItalic.ttf" />
|
||||||
|
<None Remove="Assets\Fonts\OpenSans\OpenSans-Italic.ttf" />
|
||||||
|
<None Remove="Assets\Fonts\OpenSans\OpenSans-Light.ttf" />
|
||||||
|
<None Remove="Assets\Fonts\OpenSans\OpenSans-LightItalic.ttf" />
|
||||||
|
<None Remove="Assets\Fonts\OpenSans\OpenSans-Regular.ttf" />
|
||||||
|
<None Remove="Assets\Fonts\OpenSans\OpenSans-SemiBold.ttf" />
|
||||||
|
<None Remove="Assets\Fonts\OpenSans\OpenSans-SemiBoldItalic.ttf" />
|
||||||
|
<None Remove="Assets\Images\Docs.png" />
|
||||||
|
<None Remove="Assets\Images\Docs.svg" />
|
||||||
|
<None Remove="Assets\Images\DocsLight.png" />
|
||||||
|
<None Remove="Assets\Images\GitHub-Mark.zip" />
|
||||||
|
<None Remove="Assets\Images\GitHub.png" />
|
||||||
|
<None Remove="Assets\Images\GitHubLight.png" />
|
||||||
|
<None Remove="Assets\Images\GreenSettings.png" />
|
||||||
|
<None Remove="Assets\Images\PlaceHolderModule.png" />
|
||||||
|
<None Remove="Assets\Images\PlaceHolderModuleLight.png" />
|
||||||
|
<None Remove="Assets\Images\Settings.png" />
|
||||||
|
<None Remove="Assets\Images\Settings.svg" />
|
||||||
|
<None Remove="Assets\Images\SettingsLight.png" />
|
||||||
|
<None Remove="Assets\Images\User.png" />
|
||||||
|
<None Remove="Assets\Images\User.svg" />
|
||||||
|
<None Remove="Assets\Images\UserLight.png" />
|
||||||
<None Remove="Assets\Images\userlogin.png" />
|
<None Remove="Assets\Images\userlogin.png" />
|
||||||
<None Remove="Assets\Images\userpasswd.png" />
|
<None Remove="Assets\Images\userpasswd.png" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Folder Include="Views\" />
|
<PackageReference Include="Microsoft.Xaml.Behaviors.Wpf" Version="1.1.31" />
|
||||||
</ItemGroup>
|
<PackageReference Include="SharpVectors" Version="1.7.1" />
|
||||||
|
<PackageReference Include="SSH.NET" Version="2020.0.1" />
|
||||||
<ItemGroup>
|
|
||||||
<PackageReference Include="System.Data.SqlClient" Version="4.8.2" />
|
<PackageReference Include="System.Data.SqlClient" Version="4.8.2" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\Server Dashboard Socket\Server Dashboard Socket.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="Microsoft.Expression.Drawing">
|
||||||
|
<HintPath>..\..\..\..\..\..\Program Files (x86)\Microsoft SDKs\Expression\Blend\.NETFramework\v4.0\Libraries\Microsoft.Expression.Drawing.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Resource Include="Assets\Fonts\OpenSans\OpenSans-Bold.ttf" />
|
||||||
|
<Resource Include="Assets\Fonts\OpenSans\OpenSans-BoldItalic.ttf" />
|
||||||
|
<Resource Include="Assets\Fonts\OpenSans\OpenSans-ExtraBold.ttf" />
|
||||||
|
<Resource Include="Assets\Fonts\OpenSans\OpenSans-ExtraBoldItalic.ttf" />
|
||||||
|
<Resource Include="Assets\Fonts\OpenSans\OpenSans-Italic.ttf" />
|
||||||
|
<Resource Include="Assets\Fonts\OpenSans\OpenSans-Light.ttf" />
|
||||||
|
<Resource Include="Assets\Fonts\OpenSans\OpenSans-LightItalic.ttf" />
|
||||||
|
<Resource Include="Assets\Fonts\OpenSans\OpenSans-Regular.ttf" />
|
||||||
|
<Resource Include="Assets\Fonts\OpenSans\OpenSans-SemiBold.ttf" />
|
||||||
|
<Resource Include="Assets\Fonts\OpenSans\OpenSans-SemiBoldItalic.ttf" />
|
||||||
|
<Resource Include="Assets\Images\Docs.png" />
|
||||||
|
<Resource Include="Assets\Images\Docs.svg" />
|
||||||
|
<Resource Include="Assets\Images\DocsLight.png" />
|
||||||
|
<Resource Include="Assets\Images\GitHub.png" />
|
||||||
|
<Resource Include="Assets\Images\GitHubLight.png" />
|
||||||
|
<Resource Include="Assets\Images\PlaceHolderModule.png" />
|
||||||
|
<Resource Include="Assets\Images\PlaceHolderModuleLight.png" />
|
||||||
|
<Resource Include="Assets\Images\Settings.svg" />
|
||||||
|
<Resource Include="Assets\Images\User.svg" />
|
||||||
<Resource Include="Assets\Images\userlogin.png" />
|
<Resource Include="Assets\Images\userlogin.png" />
|
||||||
<Resource Include="Assets\Images\userpasswd.png" />
|
<Resource Include="Assets\Images\userpasswd.png" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Update="Controls\DoubleRoundProgressBar\DoubleRoundProgressBar.xaml.cs">
|
||||||
|
<SubType>Code</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Update="Properties\Settings.Designer.cs">
|
||||||
|
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DependentUpon>Settings.settings</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<None Update="Properties\Settings.settings">
|
||||||
|
<Generator>SettingsSingleFileGenerator</Generator>
|
||||||
|
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||||
|
</None>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Page Update="Controls\DoubleRoundProgressBar\DoubleRoundProgressBar.xaml">
|
||||||
|
<XamlRuntime>$(DefaultXamlRuntime)</XamlRuntime>
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</Page>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -1,13 +1,56 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<PropertyGroup />
|
<PropertyGroup>
|
||||||
|
<ShowAllFiles>false</ShowAllFiles>
|
||||||
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ApplicationDefinition Update="App.xaml">
|
<ApplicationDefinition Update="App.xaml">
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
</ApplicationDefinition>
|
</ApplicationDefinition>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Page Update="MainWindow.xaml">
|
<Compile Update="Controls\HalfRoundProgressBar\HalfRoundProgressBar.xaml.cs">
|
||||||
|
<SubType>Code</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Update="Controls\LoadingIndicator\LoadingIndicator.xaml.cs">
|
||||||
|
<SubType>Code</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Update="Controls\ServerModules\ServerModule.xaml.cs">
|
||||||
|
<SubType>Code</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Update="Views\DashboardPages\MainDashboardPage.xaml.cs">
|
||||||
|
<SubType>Code</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Update="Controls\Dashboard\CRUD Popup\CreateModulePopup.xaml.cs">
|
||||||
|
<SubType>Code</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Update="Views\DashboardWindow.xaml.cs">
|
||||||
|
<SubType>Code</SubType>
|
||||||
|
</Compile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Page Update="Controls\DoubleRoundProgressBar\DoubleRoundProgressBar.xaml">
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</Page>
|
||||||
|
<Page Update="Controls\HalfRoundProgressBar\HalfRoundProgressBar.xaml">
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</Page>
|
||||||
|
<Page Update="Controls\LoadingIndicator\LoadingIndicator.xaml">
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</Page>
|
||||||
|
<Page Update="Controls\ServerModules\ServerModule.xaml">
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</Page>
|
||||||
|
<Page Update="LoginWindow.xaml">
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</Page>
|
||||||
|
<Page Update="Views\DashboardPages\MainDashboardPage.xaml">
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</Page>
|
||||||
|
<Page Update="Controls\Dashboard\CRUD Popup\CreateModulePopup.xaml">
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</Page>
|
||||||
|
<Page Update="Views\DashboardWindow.xaml">
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
</Page>
|
</Page>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|||||||
14
Server Dashboard/ValueConverter/ValueToAngleConverter.cs
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Globalization;
|
||||||
|
using System.Text;
|
||||||
|
using System.Windows.Data;
|
||||||
|
|
||||||
|
namespace Server_Dashboard {
|
||||||
|
[ValueConversion(typeof(int), typeof(double))]
|
||||||
|
public class ValueToAngleConverter : IValueConverter {
|
||||||
|
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) => (int)value * 0.01 * 360;
|
||||||
|
|
||||||
|
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => (int)((double)value / 360);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Collections.ObjectModel;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace Server_Dashboard {
|
||||||
|
class DashboardModuleViewModel : BaseViewModel {
|
||||||
|
public ObservableCollection<DashboardModule> Modules { get; set; }
|
||||||
|
private int gpuUsage;
|
||||||
|
|
||||||
|
public int GPUUsage {
|
||||||
|
get { return gpuUsage; }
|
||||||
|
set {
|
||||||
|
if(value != gpuUsage)
|
||||||
|
gpuUsage = value;
|
||||||
|
OnPropertyChanged(nameof(gpuUsage));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public DashboardModuleViewModel() {
|
||||||
|
Modules = new ObservableCollection<DashboardModule>();
|
||||||
|
for (int i = 0; i < 10; i++) {
|
||||||
|
Modules.Add(new DashboardModule(true) {
|
||||||
|
ModuleName = "TestModule",
|
||||||
|
Creator = "Username",
|
||||||
|
ModuleIcon = "../../Assets/Images/PlaceHolderModuleLight.png",
|
||||||
|
CreationDate = DateTime.Now.ToString(),
|
||||||
|
ServerInfo = new ServerInformation() {
|
||||||
|
GpuUsage = "20",
|
||||||
|
CpuUsage = "20",
|
||||||
|
CpuTemp = "88.88",
|
||||||
|
DeployDate = DateTime.Now.ToString(),
|
||||||
|
GpuTemp = "69.69",
|
||||||
|
ServerName = "Ubuntu",
|
||||||
|
OSUserName = "crylia " + i,
|
||||||
|
PrivateIpAdress = "192.168.1.1",
|
||||||
|
PublicIpAdress = "85.69.102.58",
|
||||||
|
Uptime = DateTime.Now.ToString()
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
60
Server Dashboard/ViewModels/Dashboard/DashboardViewModel.cs
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
using Server_Dashboard.Views.DashboardPages.ModuleCRUD;
|
||||||
|
using System.Collections.ObjectModel;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Input;
|
||||||
|
using Server_Dashboard_Socket;
|
||||||
|
|
||||||
|
namespace Server_Dashboard {
|
||||||
|
class DashboardViewModel : BaseViewModel {
|
||||||
|
private string userName = "Username";
|
||||||
|
private DashboardModuleViewModel dmvm = new DashboardModuleViewModel();
|
||||||
|
|
||||||
|
public string UserName {
|
||||||
|
get { return userName; }
|
||||||
|
set {
|
||||||
|
if(userName != value)
|
||||||
|
userName = value;
|
||||||
|
OnPropertyChanged(nameof(userName));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private ObservableCollection<DashboardModule> modules;
|
||||||
|
|
||||||
|
public ObservableCollection<DashboardModule> Modules {
|
||||||
|
get { return modules; }
|
||||||
|
set {
|
||||||
|
if(value != modules)
|
||||||
|
modules = value;
|
||||||
|
OnPropertyChanged(nameof(modules));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public DashboardViewModel() {
|
||||||
|
EchoServer echoServer = new EchoServer();
|
||||||
|
echoServer.Start();
|
||||||
|
OpenLinkCommand = new RelayCommand(OpenLink);
|
||||||
|
OpenNewModuleWindowCommand = new RelayCommand(OpenNewModuleWindow);
|
||||||
|
CreateModuleCommand = new RelayCommand(CreateModule);
|
||||||
|
Modules = dmvm.Modules;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ICommand OpenLinkCommand { get; set; }
|
||||||
|
public ICommand OpenNewModuleWindowCommand { get; set; }
|
||||||
|
public ICommand CreateModuleCommand { get; set; }
|
||||||
|
private void OpenLink(object param) {
|
||||||
|
Process.Start(new ProcessStartInfo((string)param) { UseShellExecute = true });
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OpenNewModuleWindow(object param) {
|
||||||
|
CreateModulePopup cmp = new CreateModulePopup {
|
||||||
|
DataContext = this
|
||||||
|
};
|
||||||
|
cmp.WindowStartupLocation = WindowStartupLocation.CenterScreen;
|
||||||
|
cmp.ShowDialog();
|
||||||
|
}
|
||||||
|
private void CreateModule(object param) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Collections.ObjectModel;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace Server_Dashboard {
|
|
||||||
class DashboardModuleViewModel : BaseViewModel {
|
|
||||||
public ObservableCollection<DashboardModule> Modules = new ObservableCollection<DashboardModule>();
|
|
||||||
public DashboardModuleViewModel() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Dashboard CRUD
|
|
||||||
private void CreateDashboard() {
|
|
||||||
|
|
||||||
}
|
|
||||||
private void UpdateDashboard() {
|
|
||||||
|
|
||||||
}
|
|
||||||
private void GetDashboardInformation() {
|
|
||||||
|
|
||||||
}
|
|
||||||
private void DeleteDashboard() {
|
|
||||||
|
|
||||||
}
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
||||||
121
Server Dashboard/ViewModels/Login/LoginViewModel.cs
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
using Server_Dashboard.Views;
|
||||||
|
using Server_Dashboard.Properties;
|
||||||
|
using System;
|
||||||
|
using System.Windows.Input;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Server_Dashboard {
|
||||||
|
class LoginViewModel : BaseViewModel, IWindowHelper {
|
||||||
|
|
||||||
|
private string username;
|
||||||
|
|
||||||
|
public string Username {
|
||||||
|
get { return username; }
|
||||||
|
set {
|
||||||
|
if (username != value)
|
||||||
|
username = value;
|
||||||
|
OnPropertyChanged(nameof(username));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private string errorText;
|
||||||
|
|
||||||
|
public string ErrorText {
|
||||||
|
get { return errorText; }
|
||||||
|
set {
|
||||||
|
if (errorText != value)
|
||||||
|
errorText = value;
|
||||||
|
OnPropertyChanged(nameof(errorText));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool rememberUser;
|
||||||
|
|
||||||
|
public bool RememberUser {
|
||||||
|
get { return rememberUser; }
|
||||||
|
set {
|
||||||
|
if(value != rememberUser)
|
||||||
|
rememberUser = value;
|
||||||
|
OnPropertyChanged(nameof(rememberUser));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private string loading;
|
||||||
|
|
||||||
|
public string Loading {
|
||||||
|
get { return loading; }
|
||||||
|
set {
|
||||||
|
if (value != loading)
|
||||||
|
loading = value;
|
||||||
|
OnPropertyChanged(nameof(loading));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Action Close { get ; set; }
|
||||||
|
|
||||||
|
public LoginViewModel() {
|
||||||
|
Loading = "Hidden";
|
||||||
|
LoginCommand = new RelayCommand(LoginAsync);
|
||||||
|
if (!String.IsNullOrEmpty(Settings.Default.Username)) {
|
||||||
|
Username = Settings.Default.Username;
|
||||||
|
RememberUser = Settings.Default.RememberMe;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public ICommand LoginCommand { get; set; }
|
||||||
|
|
||||||
|
private async void LoginAsync(object parameter) {
|
||||||
|
if (!String.IsNullOrWhiteSpace(Username) && !String.IsNullOrWhiteSpace((parameter as IHavePassword).SecurePassword.Unsecure())) {
|
||||||
|
Loading = "Visible";
|
||||||
|
int result = await Task.Run(() => DatabaseHandler.CheckLogin(Username, (parameter as IHavePassword).SecurePassword.Unsecure()));
|
||||||
|
Loading = "Hidden";
|
||||||
|
switch (result) {
|
||||||
|
case 0:
|
||||||
|
ErrorText = "Username or password is wrong.";
|
||||||
|
return;
|
||||||
|
case 1:
|
||||||
|
if (RememberUser && !String.IsNullOrEmpty(Settings.Default.Cookies)) {
|
||||||
|
DatabaseHandler.CheckCookie(Settings.Default.Cookies, Username);
|
||||||
|
}
|
||||||
|
if (!RememberUser && !String.IsNullOrEmpty(Settings.Default.Cookies)) {
|
||||||
|
Settings.Default.Cookies = null;
|
||||||
|
Settings.Default.Username = "";
|
||||||
|
Settings.Default.RememberMe = false;
|
||||||
|
Settings.Default.Save();
|
||||||
|
DatabaseHandler.DeleteCookie(Username);
|
||||||
|
}
|
||||||
|
if (RememberUser && String.IsNullOrEmpty(Settings.Default.Cookies)) {
|
||||||
|
var guid = new Guid().ToString() + Username;
|
||||||
|
Settings.Default.Cookies = guid;
|
||||||
|
Settings.Default.Username = Username;
|
||||||
|
Settings.Default.RememberMe = true;
|
||||||
|
Settings.Default.Save();
|
||||||
|
DatabaseHandler.AddCookie(Username, guid);
|
||||||
|
}
|
||||||
|
DashboardWindow window = new DashboardWindow();
|
||||||
|
window.Show();
|
||||||
|
Close?.Invoke();
|
||||||
|
return;
|
||||||
|
case 2:
|
||||||
|
ErrorText = "Server unreachable, connection timeout.";
|
||||||
|
return;
|
||||||
|
default:
|
||||||
|
ErrorText = "An unknown error has occured";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else if (String.IsNullOrWhiteSpace(Username) && String.IsNullOrWhiteSpace((parameter as IHavePassword).SecurePassword.Unsecure())) {
|
||||||
|
ErrorText = "Please provide a username and password";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (String.IsNullOrWhiteSpace(Username)) {
|
||||||
|
ErrorText = "Username cannot be empty.";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (String.IsNullOrWhiteSpace((parameter as IHavePassword).SecurePassword.Unsecure())) {
|
||||||
|
ErrorText = "Password cannot be empty.";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ErrorText = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
75
Server Dashboard/Views/DashboardPages/MainDashboardPage.xaml
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
<UserControl x:Class="Server_Dashboard.Views.DashboardPages.MainDashboardPage"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:vm="clr-namespace:Server_Dashboard"
|
||||||
|
xmlns:local="clr-namespace:Server_Dashboard.Views.DashboardPages"
|
||||||
|
xmlns:modulescrud="clr-namespace:Server_Dashboard.Views.DashboardPages.ModuleCRUD"
|
||||||
|
xmlns:root="clr-namespace:Server_Dashboard"
|
||||||
|
xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
|
||||||
|
xmlns:controls="clr-namespace:Server_Dashboard.Controls.ServerModules"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
d:DesignHeight="920"
|
||||||
|
d:DesignWidth="1600"
|
||||||
|
>
|
||||||
|
<Grid Background="{StaticResource BackgroundSurface_00dp}">
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="*"/>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
|
||||||
|
<!--Dashboard and Options-->
|
||||||
|
<Grid Grid.Row="2">
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="200"/>
|
||||||
|
<ColumnDefinition Width="*"/>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Grid Grid.Column="0" Background="{StaticResource BackgroundSurface_02dp}">
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="Auto"/>
|
||||||
|
<RowDefinition Height="Auto"/>
|
||||||
|
<RowDefinition Height="Auto"/>
|
||||||
|
<RowDefinition Height="*"/>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<Button
|
||||||
|
Grid.Row="0"
|
||||||
|
Command="{Binding OpenNewModuleWindowCommand}"
|
||||||
|
Content="New Module"
|
||||||
|
Height="50"
|
||||||
|
Margin="5 10 5 0" Cursor="Hand"
|
||||||
|
x:Name="CreateModule"
|
||||||
|
/>
|
||||||
|
<Button
|
||||||
|
Grid.Row="1"
|
||||||
|
Command="{Binding OpenDeleteModuleWindowCommand}"
|
||||||
|
Content="Remove Module"
|
||||||
|
Height="50"
|
||||||
|
Margin="5 10 5 0"
|
||||||
|
/>
|
||||||
|
<Button
|
||||||
|
Grid.Row="2"
|
||||||
|
Command="{Binding OpenUpdateModuleWindowCommand}"
|
||||||
|
Content="Change Module"
|
||||||
|
Height="50"
|
||||||
|
Margin="5 10 5 0" Cursor="Hand"
|
||||||
|
/>
|
||||||
|
</Grid>
|
||||||
|
<Grid Grid.Column="1">
|
||||||
|
<ScrollViewer VerticalScrollBarVisibility="Hidden">
|
||||||
|
<ItemsControl ItemsSource="{Binding Modules}">
|
||||||
|
<ItemsControl.ItemsPanel>
|
||||||
|
<ItemsPanelTemplate>
|
||||||
|
<WrapPanel HorizontalAlignment="Center"/>
|
||||||
|
</ItemsPanelTemplate>
|
||||||
|
</ItemsControl.ItemsPanel>
|
||||||
|
<ItemsControl.ItemTemplate>
|
||||||
|
<DataTemplate>
|
||||||
|
<controls:ServerModule/>
|
||||||
|
</DataTemplate>
|
||||||
|
</ItemsControl.ItemTemplate>
|
||||||
|
</ItemsControl>
|
||||||
|
</ScrollViewer>
|
||||||
|
</Grid>
|
||||||
|
</Grid>
|
||||||
|
</Grid>
|
||||||
|
</UserControl>
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Data;
|
||||||
|
using System.Windows.Documents;
|
||||||
|
using System.Windows.Input;
|
||||||
|
using System.Windows.Media;
|
||||||
|
using System.Windows.Media.Imaging;
|
||||||
|
using System.Windows.Navigation;
|
||||||
|
using System.Windows.Shapes;
|
||||||
|
|
||||||
|
namespace Server_Dashboard.Views.DashboardPages {
|
||||||
|
/// <summary>
|
||||||
|
/// Interaktionslogik für MainDashboardPage.xaml
|
||||||
|
/// </summary>
|
||||||
|
public partial class MainDashboardPage : UserControl {
|
||||||
|
public MainDashboardPage() {
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
288
Server Dashboard/Views/DashboardWindow.xaml
Normal file
@@ -0,0 +1,288 @@
|
|||||||
|
<Window x:Class="Server_Dashboard.Views.DashboardWindow"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:local="clr-namespace:Server_Dashboard.Views"
|
||||||
|
xmlns:root="clr-namespace:Server_Dashboard"
|
||||||
|
xmlns:views="clr-namespace:Server_Dashboard.Views.DashboardPages"
|
||||||
|
xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
|
||||||
|
xmlns:svgc="http://sharpvectors.codeplex.com/svgc/"
|
||||||
|
Height="1000"
|
||||||
|
Width="Auto"
|
||||||
|
WindowStyle="None"
|
||||||
|
Background="Transparent"
|
||||||
|
ResizeMode="CanResize"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
d:Height="1000" d:Width="1900"
|
||||||
|
>
|
||||||
|
<WindowChrome.WindowChrome>
|
||||||
|
<WindowChrome CaptionHeight="0"/>
|
||||||
|
</WindowChrome.WindowChrome>
|
||||||
|
<Window.DataContext>
|
||||||
|
<root:DashboardViewModel/>
|
||||||
|
</Window.DataContext>
|
||||||
|
<Grid Background="{StaticResource BackgroundSurface_00dp}">
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="30"/>
|
||||||
|
<RowDefinition Height="50"/>
|
||||||
|
<RowDefinition Height="*"/>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<!--Window Title-->
|
||||||
|
<Grid Background="{StaticResource BackgroundSurface_06dp}" Grid.Row="0">
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="*"/>
|
||||||
|
<ColumnDefinition Width="40"/>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<i:Interaction.Triggers>
|
||||||
|
<i:EventTrigger EventName="MouseDown">
|
||||||
|
<i:CallMethodAction MethodName="DragMove" TargetObject="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}"/>
|
||||||
|
</i:EventTrigger>
|
||||||
|
</i:Interaction.Triggers>
|
||||||
|
<Label Grid.Column="0"/>
|
||||||
|
<Button Style="{StaticResource CloseButton}" Grid.Column="2" Content="✕" Cursor="Hand">
|
||||||
|
<i:Interaction.Triggers>
|
||||||
|
<i:EventTrigger EventName="Click">
|
||||||
|
<i:CallMethodAction MethodName="Close" TargetObject="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}"/>
|
||||||
|
</i:EventTrigger>
|
||||||
|
</i:Interaction.Triggers>
|
||||||
|
</Button>
|
||||||
|
</Grid>
|
||||||
|
<!--Settings, Docs, User, links etc-->
|
||||||
|
<Grid Background="{StaticResource BackgroundSurface_04dp}" Grid.Row="1" x:Name="TopBarGrid">
|
||||||
|
<Grid.Effect>
|
||||||
|
<DropShadowEffect Direction="270" BlurRadius="5"/>
|
||||||
|
</Grid.Effect>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="Auto"/>
|
||||||
|
<ColumnDefinition Width="*"/>
|
||||||
|
<ColumnDefinition Width="Auto"/>
|
||||||
|
<ColumnDefinition Width="Auto"/>
|
||||||
|
<ColumnDefinition Width="Auto"/>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Button Grid.Column="0" >
|
||||||
|
<Button.Template>
|
||||||
|
<ControlTemplate TargetType="{x:Type Button}">
|
||||||
|
<Border
|
||||||
|
x:Name="Border"
|
||||||
|
CornerRadius="4"
|
||||||
|
Padding="2"
|
||||||
|
Background="Transparent"
|
||||||
|
BorderBrush="Transparent"
|
||||||
|
BorderThickness="0"
|
||||||
|
>
|
||||||
|
<svgc:SvgViewbox
|
||||||
|
Source="../Assets/Images/Settings.svg"
|
||||||
|
Margin="5"
|
||||||
|
IsHitTestVisible="False"
|
||||||
|
Opacity="0.87"
|
||||||
|
/>
|
||||||
|
</Border>
|
||||||
|
<ControlTemplate.Triggers>
|
||||||
|
<Trigger Property="IsMouseOver" Value="True">
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsPressed" Value="True">
|
||||||
|
</Trigger>
|
||||||
|
</ControlTemplate.Triggers>
|
||||||
|
</ControlTemplate>
|
||||||
|
</Button.Template>
|
||||||
|
</Button>
|
||||||
|
<Button
|
||||||
|
Grid.Column="4"
|
||||||
|
Command="{Binding OpenLinkCommand}"
|
||||||
|
Content="{Binding UserName}"
|
||||||
|
Margin="10 0 10 0"
|
||||||
|
Height="40" Cursor="Hand"
|
||||||
|
>
|
||||||
|
<Button.Template>
|
||||||
|
<ControlTemplate TargetType="{x:Type Button}">
|
||||||
|
<Border x:Name="Border" CornerRadius="5" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="0">
|
||||||
|
<Border.Effect>
|
||||||
|
<DropShadowEffect Direction="0" ShadowDepth="0" BlurRadius="5"/>
|
||||||
|
</Border.Effect>
|
||||||
|
<Border x:Name="BackgroundOverlay" CornerRadius="4" Background="Transparent" BorderThickness="{TemplateBinding BorderThickness}">
|
||||||
|
<Border.BorderBrush>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.12"/>
|
||||||
|
</Border.BorderBrush>
|
||||||
|
<StackPanel Orientation="Horizontal">
|
||||||
|
<svgc:SvgViewbox
|
||||||
|
Source="../Assets/Images/User.svg"
|
||||||
|
Margin="5"
|
||||||
|
IsHitTestVisible="False"
|
||||||
|
Opacity="0.87"
|
||||||
|
/>
|
||||||
|
<TextBlock
|
||||||
|
FontSize="{TemplateBinding FontSize}"
|
||||||
|
TextAlignment="Center"
|
||||||
|
Padding="0"
|
||||||
|
TextWrapping="Wrap"
|
||||||
|
Text="{TemplateBinding Content}"
|
||||||
|
Foreground="{TemplateBinding Foreground}"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
Margin="5 0 10 0"
|
||||||
|
/>
|
||||||
|
</StackPanel>
|
||||||
|
</Border>
|
||||||
|
</Border>
|
||||||
|
<ControlTemplate.Triggers>
|
||||||
|
<Trigger Property="IsMouseOver" Value="True">
|
||||||
|
<Setter TargetName="BackgroundOverlay" Property="Background">
|
||||||
|
<Setter.Value>
|
||||||
|
<SolidColorBrush Color="#B388FF" Opacity="0.04"/>
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsFocused" Value="True">
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsPressed" Value="True">
|
||||||
|
<Setter TargetName="BackgroundOverlay" Property="Background">
|
||||||
|
<Setter.Value>
|
||||||
|
<SolidColorBrush Color="#B388FF" Opacity="0.12"/>
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>
|
||||||
|
<Setter TargetName="BackgroundOverlay" Property="BorderBrush">
|
||||||
|
<Setter.Value>
|
||||||
|
<SolidColorBrush Color="#B388FF" Opacity=".87"/>
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>
|
||||||
|
</Trigger>
|
||||||
|
</ControlTemplate.Triggers>
|
||||||
|
</ControlTemplate>
|
||||||
|
</Button.Template>
|
||||||
|
</Button>
|
||||||
|
<Button
|
||||||
|
Grid.Column="3"
|
||||||
|
Command="{Binding OpenLinkCommand}"
|
||||||
|
CommandParameter="https://github.com/Crylia/Server-Dashboard/wiki"
|
||||||
|
Content="Docs"
|
||||||
|
Margin="10 0 10 0"
|
||||||
|
Height="40"
|
||||||
|
>
|
||||||
|
<Button.Template>
|
||||||
|
<ControlTemplate TargetType="{x:Type Button}">
|
||||||
|
<Border x:Name="Border" CornerRadius="5" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="0">
|
||||||
|
<Border.Effect>
|
||||||
|
<DropShadowEffect Direction="0" ShadowDepth="0" BlurRadius="5"/>
|
||||||
|
</Border.Effect>
|
||||||
|
<Border x:Name="BackgroundOverlay" CornerRadius="4" Background="Transparent" BorderThickness="{TemplateBinding BorderThickness}">
|
||||||
|
<Border.BorderBrush>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.12"/>
|
||||||
|
</Border.BorderBrush>
|
||||||
|
<StackPanel Orientation="Horizontal">
|
||||||
|
<svgc:SvgViewbox
|
||||||
|
Source="../Assets/Images/Docs.svg"
|
||||||
|
Margin="5"
|
||||||
|
IsHitTestVisible="False"
|
||||||
|
Opacity="0.87"
|
||||||
|
/>
|
||||||
|
<TextBlock
|
||||||
|
FontSize="{TemplateBinding FontSize}"
|
||||||
|
TextAlignment="Center"
|
||||||
|
Padding="0"
|
||||||
|
TextWrapping="Wrap"
|
||||||
|
Text="{TemplateBinding Content}"
|
||||||
|
Foreground="{TemplateBinding Foreground}"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
Margin="5 0 10 0"
|
||||||
|
/>
|
||||||
|
</StackPanel>
|
||||||
|
</Border>
|
||||||
|
</Border>
|
||||||
|
<ControlTemplate.Triggers>
|
||||||
|
<Trigger Property="IsMouseOver" Value="True">
|
||||||
|
<Setter TargetName="BackgroundOverlay" Property="Background">
|
||||||
|
<Setter.Value>
|
||||||
|
<SolidColorBrush Color="#B388FF" Opacity="0.04"/>
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsFocused" Value="True">
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsPressed" Value="True">
|
||||||
|
<Setter TargetName="BackgroundOverlay" Property="Background">
|
||||||
|
<Setter.Value>
|
||||||
|
<SolidColorBrush Color="#B388FF" Opacity="0.12"/>
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>
|
||||||
|
<Setter TargetName="BackgroundOverlay" Property="BorderBrush">
|
||||||
|
<Setter.Value>
|
||||||
|
<SolidColorBrush Color="#B388FF" Opacity=".87"/>
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>
|
||||||
|
</Trigger>
|
||||||
|
</ControlTemplate.Triggers>
|
||||||
|
</ControlTemplate>
|
||||||
|
</Button.Template>
|
||||||
|
</Button>
|
||||||
|
<Button
|
||||||
|
Grid.Column="2"
|
||||||
|
Command="{Binding OpenLinkCommand}"
|
||||||
|
CommandParameter="https://github.com/Crylia/Server-Dashboard"
|
||||||
|
Content="GitHub"
|
||||||
|
Margin="10 0 10 0"
|
||||||
|
Height="40"
|
||||||
|
Opacity="0.87" Cursor="Hand"
|
||||||
|
>
|
||||||
|
<Button.Template>
|
||||||
|
<ControlTemplate TargetType="{x:Type Button}">
|
||||||
|
<Border x:Name="Border" CornerRadius="5" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="0">
|
||||||
|
<Border.Effect>
|
||||||
|
<DropShadowEffect Direction="0" ShadowDepth="0" BlurRadius="5"/>
|
||||||
|
</Border.Effect>
|
||||||
|
<Border x:Name="BackgroundOverlay" CornerRadius="4" Background="Transparent" BorderThickness="{TemplateBinding BorderThickness}">
|
||||||
|
<Border.BorderBrush>
|
||||||
|
<SolidColorBrush Color="White" Opacity="0.12"/>
|
||||||
|
</Border.BorderBrush>
|
||||||
|
<StackPanel Orientation="Horizontal">
|
||||||
|
<Image
|
||||||
|
Source="../Assets/Images/GitHubLight.png"
|
||||||
|
Margin="5"
|
||||||
|
/>
|
||||||
|
<TextBlock
|
||||||
|
FontSize="{TemplateBinding FontSize}"
|
||||||
|
TextAlignment="Center"
|
||||||
|
Padding="0"
|
||||||
|
TextWrapping="Wrap"
|
||||||
|
Text="{TemplateBinding Content}"
|
||||||
|
Foreground="{TemplateBinding Foreground}"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
Margin="5 0 10 0"
|
||||||
|
/>
|
||||||
|
</StackPanel>
|
||||||
|
</Border>
|
||||||
|
</Border>
|
||||||
|
<ControlTemplate.Triggers>
|
||||||
|
<Trigger Property="IsMouseOver" Value="True">
|
||||||
|
<Setter TargetName="BackgroundOverlay" Property="Background">
|
||||||
|
<Setter.Value>
|
||||||
|
<SolidColorBrush Color="#B388FF" Opacity="0.04"/>
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsFocused" Value="True">
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsPressed" Value="True">
|
||||||
|
<Setter TargetName="BackgroundOverlay" Property="Background">
|
||||||
|
<Setter.Value>
|
||||||
|
<SolidColorBrush Color="#B388FF" Opacity="0.12"/>
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>
|
||||||
|
<Setter TargetName="BackgroundOverlay" Property="BorderBrush">
|
||||||
|
<Setter.Value>
|
||||||
|
<SolidColorBrush Color="#B388FF" Opacity=".87"/>
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>
|
||||||
|
</Trigger>
|
||||||
|
</ControlTemplate.Triggers>
|
||||||
|
</ControlTemplate>
|
||||||
|
</Button.Template>
|
||||||
|
</Button>
|
||||||
|
</Grid>
|
||||||
|
<UserControl Grid.Row="3">
|
||||||
|
<views:MainDashboardPage/>
|
||||||
|
</UserControl>
|
||||||
|
</Grid>
|
||||||
|
</Window>
|
||||||
22
Server Dashboard/Views/DashboardWindow.xaml.cs
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Data;
|
||||||
|
using System.Windows.Documents;
|
||||||
|
using System.Windows.Input;
|
||||||
|
using System.Windows.Media;
|
||||||
|
using System.Windows.Media.Imaging;
|
||||||
|
using System.Windows.Shapes;
|
||||||
|
|
||||||
|
namespace Server_Dashboard.Views {
|
||||||
|
/// <summary>
|
||||||
|
/// Interaktionslogik für DashboardWindow.xaml
|
||||||
|
/// </summary>
|
||||||
|
public partial class DashboardWindow : Window {
|
||||||
|
public DashboardWindow() {
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
Server Dashboard/bin/Debug/netcoreapp3.1/Renci.SshNet.dll
Normal file
@@ -8,7 +8,11 @@
|
|||||||
".NETCoreApp,Version=v3.1": {
|
".NETCoreApp,Version=v3.1": {
|
||||||
"Server Dashboard/1.0.0": {
|
"Server Dashboard/1.0.0": {
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"System.Data.SqlClient": "4.8.2"
|
"Microsoft.Xaml.Behaviors.Wpf": "1.1.31",
|
||||||
|
"SSH.NET": "2020.0.1",
|
||||||
|
"SharpVectors": "1.7.1",
|
||||||
|
"System.Data.SqlClient": "4.8.2",
|
||||||
|
"Microsoft.Expression.Drawing": "4.0.0.0"
|
||||||
},
|
},
|
||||||
"runtime": {
|
"runtime": {
|
||||||
"Server Dashboard.dll": {}
|
"Server Dashboard.dll": {}
|
||||||
@@ -21,6 +25,14 @@
|
|||||||
"System.Security.Principal.Windows": "4.7.0"
|
"System.Security.Principal.Windows": "4.7.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"Microsoft.Xaml.Behaviors.Wpf/1.1.31": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netcoreapp3.1/Microsoft.Xaml.Behaviors.dll": {
|
||||||
|
"assemblyVersion": "1.1.0.0",
|
||||||
|
"fileVersion": "1.1.31.10800"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"runtime.native.System.Data.SqlClient.sni/4.7.0": {
|
"runtime.native.System.Data.SqlClient.sni/4.7.0": {
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"runtime.win-arm64.runtime.native.System.Data.SqlClient.sni": "4.4.0",
|
"runtime.win-arm64.runtime.native.System.Data.SqlClient.sni": "4.4.0",
|
||||||
@@ -55,6 +67,61 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"SharpVectors/1.7.1": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netcoreapp3.1/SharpVectors.Converters.Wpf.dll": {
|
||||||
|
"assemblyVersion": "1.7.1.0",
|
||||||
|
"fileVersion": "1.7.1.0"
|
||||||
|
},
|
||||||
|
"lib/netcoreapp3.1/SharpVectors.Core.dll": {
|
||||||
|
"assemblyVersion": "1.7.1.0",
|
||||||
|
"fileVersion": "1.7.1.0"
|
||||||
|
},
|
||||||
|
"lib/netcoreapp3.1/SharpVectors.Css.dll": {
|
||||||
|
"assemblyVersion": "1.7.1.0",
|
||||||
|
"fileVersion": "1.7.1.0"
|
||||||
|
},
|
||||||
|
"lib/netcoreapp3.1/SharpVectors.Dom.dll": {
|
||||||
|
"assemblyVersion": "1.7.1.0",
|
||||||
|
"fileVersion": "1.7.1.0"
|
||||||
|
},
|
||||||
|
"lib/netcoreapp3.1/SharpVectors.Model.dll": {
|
||||||
|
"assemblyVersion": "1.7.1.0",
|
||||||
|
"fileVersion": "1.7.1.0"
|
||||||
|
},
|
||||||
|
"lib/netcoreapp3.1/SharpVectors.Rendering.Gdi.dll": {
|
||||||
|
"assemblyVersion": "1.7.1.0",
|
||||||
|
"fileVersion": "1.7.1.0"
|
||||||
|
},
|
||||||
|
"lib/netcoreapp3.1/SharpVectors.Rendering.Wpf.dll": {
|
||||||
|
"assemblyVersion": "1.7.1.0",
|
||||||
|
"fileVersion": "1.7.1.0"
|
||||||
|
},
|
||||||
|
"lib/netcoreapp3.1/SharpVectors.Runtime.Wpf.dll": {
|
||||||
|
"assemblyVersion": "1.7.1.0",
|
||||||
|
"fileVersion": "1.7.1.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"SSH.NET/2020.0.1": {
|
||||||
|
"dependencies": {
|
||||||
|
"SshNet.Security.Cryptography": "1.3.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/Renci.SshNet.dll": {
|
||||||
|
"assemblyVersion": "2020.0.1.0",
|
||||||
|
"fileVersion": "2020.0.1.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"SshNet.Security.Cryptography/1.3.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/SshNet.Security.Cryptography.dll": {
|
||||||
|
"assemblyVersion": "1.3.0.0",
|
||||||
|
"fileVersion": "1.3.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"System.Data.SqlClient/4.8.2": {
|
"System.Data.SqlClient/4.8.2": {
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"Microsoft.Win32.Registry": "4.7.0",
|
"Microsoft.Win32.Registry": "4.7.0",
|
||||||
@@ -88,7 +155,20 @@
|
|||||||
"System.Security.Principal.Windows": "4.7.0"
|
"System.Security.Principal.Windows": "4.7.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"System.Security.Principal.Windows/4.7.0": {}
|
"System.Security.Principal.Windows/4.7.0": {},
|
||||||
|
"Server Dashboard Socket/1.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"Server Dashboard Socket.dll": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Expression.Drawing/4.0.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"Microsoft.Expression.Drawing.dll": {
|
||||||
|
"assemblyVersion": "4.0.0.0",
|
||||||
|
"fileVersion": "2.0.20520.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"libraries": {
|
"libraries": {
|
||||||
@@ -111,6 +191,13 @@
|
|||||||
"path": "microsoft.win32.registry/4.7.0",
|
"path": "microsoft.win32.registry/4.7.0",
|
||||||
"hashPath": "microsoft.win32.registry.4.7.0.nupkg.sha512"
|
"hashPath": "microsoft.win32.registry.4.7.0.nupkg.sha512"
|
||||||
},
|
},
|
||||||
|
"Microsoft.Xaml.Behaviors.Wpf/1.1.31": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-LZpuf82ACZWldmfMuv3CTUMDh3o0xo0uHUaybR5HgqVLDBJJ9RZLykplQ/bTJd0/VDt3EhD4iDgUgbdIUAM+Kg==",
|
||||||
|
"path": "microsoft.xaml.behaviors.wpf/1.1.31",
|
||||||
|
"hashPath": "microsoft.xaml.behaviors.wpf.1.1.31.nupkg.sha512"
|
||||||
|
},
|
||||||
"runtime.native.System.Data.SqlClient.sni/4.7.0": {
|
"runtime.native.System.Data.SqlClient.sni/4.7.0": {
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"serviceable": true,
|
"serviceable": true,
|
||||||
@@ -139,6 +226,27 @@
|
|||||||
"path": "runtime.win-x86.runtime.native.system.data.sqlclient.sni/4.4.0",
|
"path": "runtime.win-x86.runtime.native.system.data.sqlclient.sni/4.4.0",
|
||||||
"hashPath": "runtime.win-x86.runtime.native.system.data.sqlclient.sni.4.4.0.nupkg.sha512"
|
"hashPath": "runtime.win-x86.runtime.native.system.data.sqlclient.sni.4.4.0.nupkg.sha512"
|
||||||
},
|
},
|
||||||
|
"SharpVectors/1.7.1": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-kTiP4pkyW0qPQMxyIYsH7r9wl+cSAmk5ySynhQvc/Ma6bgH9pWWJtM6dvEIoRM4uV2C0QIhWDQeWcTN//0XP9g==",
|
||||||
|
"path": "sharpvectors/1.7.1",
|
||||||
|
"hashPath": "sharpvectors.1.7.1.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"SSH.NET/2020.0.1": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-DhVeQ8JzoS8Z25VwZfQ/9HEjTO8eWs4ldsMkcMsUFK7TFc8GnpxBeRBj3X8mc5+rwvzZNNmLDm08a8TpPZNF/g==",
|
||||||
|
"path": "ssh.net/2020.0.1",
|
||||||
|
"hashPath": "ssh.net.2020.0.1.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"SshNet.Security.Cryptography/1.3.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-5pBIXRjcSO/amY8WztpmNOhaaCNHY/B6CcYDI7FSTgqSyo/ZUojlLiKcsl+YGbxQuLX439qIkMfP0PHqxqJi/Q==",
|
||||||
|
"path": "sshnet.security.cryptography/1.3.0",
|
||||||
|
"hashPath": "sshnet.security.cryptography.1.3.0.nupkg.sha512"
|
||||||
|
},
|
||||||
"System.Data.SqlClient/4.8.2": {
|
"System.Data.SqlClient/4.8.2": {
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"serviceable": true,
|
"serviceable": true,
|
||||||
@@ -159,6 +267,16 @@
|
|||||||
"sha512": "sha512-ojD0PX0XhneCsUbAZVKdb7h/70vyYMDYs85lwEI+LngEONe/17A0cFaRFqZU+sOEidcVswYWikYOQ9PPfjlbtQ==",
|
"sha512": "sha512-ojD0PX0XhneCsUbAZVKdb7h/70vyYMDYs85lwEI+LngEONe/17A0cFaRFqZU+sOEidcVswYWikYOQ9PPfjlbtQ==",
|
||||||
"path": "system.security.principal.windows/4.7.0",
|
"path": "system.security.principal.windows/4.7.0",
|
||||||
"hashPath": "system.security.principal.windows.4.7.0.nupkg.sha512"
|
"hashPath": "system.security.principal.windows.4.7.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Server Dashboard Socket/1.0.0": {
|
||||||
|
"type": "project",
|
||||||
|
"serviceable": false,
|
||||||
|
"sha512": ""
|
||||||
|
},
|
||||||
|
"Microsoft.Expression.Drawing/4.0.0.0": {
|
||||||
|
"type": "reference",
|
||||||
|
"serviceable": false,
|
||||||
|
"sha512": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<configuration>
|
||||||
|
<configSections>
|
||||||
|
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System.Configuration.ConfigurationManager, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51" >
|
||||||
|
<section name="Server_Dashboard.Properties.Settings" type="System.Configuration.ClientSettingsSection, System.Configuration.ConfigurationManager, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
|
||||||
|
</sectionGroup>
|
||||||
|
</configSections>
|
||||||
|
<connectionStrings>
|
||||||
|
<add name="ServerDashboardDB" connectionString="Server=localhost;Database=ServerDashboardDB;User Id=SA;Password=Me262HG3;"/>
|
||||||
|
</connectionStrings>
|
||||||
|
<startup>
|
||||||
|
<supportedRuntime version="v3.1.13" sku=".NETFramework,Version=v4.7.2" />
|
||||||
|
</startup>
|
||||||
|
<userSettings>
|
||||||
|
<Server_Dashboard.Properties.Settings>
|
||||||
|
<setting name="Username" serializeAs="String">
|
||||||
|
<value />
|
||||||
|
</setting>
|
||||||
|
</Server_Dashboard.Properties.Settings>
|
||||||
|
</userSettings>
|
||||||
|
</configuration>
|
||||||