Compare commits
11 Commits
transcaffe
...
main
Author | SHA1 | Date | |
---|---|---|---|
ffe15b749e | |||
7006a0d0d4 | |||
5231284392 | |||
2d4bb8fc09 | |||
7e4578a058 | |||
2e04566f48 | |||
0cc6d88286 | |||
3a3b8c63ec | |||
e3db654a05 | |||
e0ed2e01c0 | |||
c6b069e882 |
@ -1,3 +0,0 @@
|
|||||||
parent=keycloak.v3
|
|
||||||
import=common/da47
|
|
||||||
logo=/img/antifa_coffee_cups.png
|
|
@ -1,3 +0,0 @@
|
|||||||
parent=keycloak.v2
|
|
||||||
import=common/da47
|
|
||||||
logo=/img/antifa_trans_pride.png
|
|
Before Width: | Height: | Size: 192 KiB |
Before Width: | Height: | Size: 166 KiB |
Before Width: | Height: | Size: 160 KiB |
Before Width: | Height: | Size: 434 KiB |
Before Width: | Height: | Size: 176 KiB |
Before Width: | Height: | Size: 61 KiB |
@ -1,28 +0,0 @@
|
|||||||
div.kc-logo-text {
|
|
||||||
background-image: url('../img/antifa_lesbian_pride.png');
|
|
||||||
background-size: 256px 256px;
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
height: 256px;
|
|
||||||
width: 256px;
|
|
||||||
margin: 0 auto;
|
|
||||||
}
|
|
||||||
div.kc-logo-text span {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.login-pf body {
|
|
||||||
background: url('../img/background.jpg') no-repeat center center fixed !important;
|
|
||||||
background-size: cover !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 767px) {
|
|
||||||
#kc-header-wrapper {
|
|
||||||
padding: 20px 0 60px 0 !important;
|
|
||||||
color: #ededed !important;
|
|
||||||
font-size: 29px !important;
|
|
||||||
font-weight: var(--pf-global--FontWeight--normal) !important;
|
|
||||||
letter-spacing: 3px !important;
|
|
||||||
line-height: 1.2em !important;
|
|
||||||
text-align: center !important;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,5 +0,0 @@
|
|||||||
parent=keycloak
|
|
||||||
import=common/da47
|
|
||||||
|
|
||||||
styles=styles=web_modules/@fontawesome/fontawesome-free/css/icons/all.css web_modules/@patternfly/react-core/dist/styles/base.css web_modules/@patternfly/react-core/dist/styles/app.css node_modules/patternfly/dist/css/patternfly.min.css node_modules/patternfly/dist/css/patternfly-additions.min.css css/login.css css/custom.css
|
|
||||||
logo=img/antifa_lesbian_pride.png
|
|
@ -1,130 +0,0 @@
|
|||||||
<!--
|
|
||||||
~ JBoss, Home of Professional Open Source.
|
|
||||||
~ Copyright (c) 2011, Red Hat, Inc., and individual contributors
|
|
||||||
~ as indicated by the @author tags. See the copyright.txt file in the
|
|
||||||
~ distribution for a full listing of individual contributors.
|
|
||||||
~
|
|
||||||
~ This is free software; you can redistribute it and/or modify it
|
|
||||||
~ under the terms of the GNU Lesser General Public License as
|
|
||||||
~ published by the Free Software Foundation; either version 2.1 of
|
|
||||||
~ the License, or (at your option) any later version.
|
|
||||||
~
|
|
||||||
~ This software is distributed in the hope that it will be useful,
|
|
||||||
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
~ Lesser General Public License for more details.
|
|
||||||
~
|
|
||||||
~ You should have received a copy of the GNU Lesser General Public
|
|
||||||
~ License along with this software; if not, write to the Free
|
|
||||||
~ Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
|
||||||
~ 02110-1301 USA, or see the FSF site: http://www.fsf.org.
|
|
||||||
-->
|
|
||||||
<!DOCTYPE html>
|
|
||||||
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>Welcome to ${productName}</title>
|
|
||||||
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
|
||||||
<meta name="robots" content="noindex, nofollow">
|
|
||||||
|
|
||||||
<link rel="shortcut icon" href="${resourcesPath}/img/favicon.ico" />
|
|
||||||
|
|
||||||
<#if properties.stylesCommon?has_content>
|
|
||||||
<#list properties.stylesCommon?split(' ') as style>
|
|
||||||
<link href="${resourcesCommonPath}/${style}" rel="stylesheet" />
|
|
||||||
</#list>
|
|
||||||
</#if>
|
|
||||||
<#if properties.styles?has_content>
|
|
||||||
<#list properties.styles?split(' ') as style>
|
|
||||||
<link href="${resourcesPath}/${style}" rel="stylesheet" />
|
|
||||||
</#list>
|
|
||||||
</#if>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<div class="container-fluid">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2">
|
|
||||||
<div class="welcome-header">
|
|
||||||
<img src="${resourcesPath}/logo.png" alt="${productName}" border="0" />
|
|
||||||
<h1>Welcome to <strong>auth.da47.net</strong></h1>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-xs-12 col-sm-4">
|
|
||||||
<div class="card-pf h-m">
|
|
||||||
<h3><a href="https://auth.da47.net/realms/durlacher-allee-47/account"><i class="fa fa-users link" aria-hidden="true"></i> Account Console <i class="fa fa-angle-right link" aria-hidden="true"></i></a></h3>
|
|
||||||
</div>
|
|
||||||
<#if adminConsoleEnabled>
|
|
||||||
<div class="card-pf h-m">
|
|
||||||
<#if successMessage?has_content>
|
|
||||||
<p class="alert success">${successMessage}</p>
|
|
||||||
<#elseif errorMessage?has_content>
|
|
||||||
<p class="alert error">${errorMessage}</p>
|
|
||||||
<h3><img src="welcome-content/user.png">Administration Console</h3>
|
|
||||||
<#elseif bootstrap>
|
|
||||||
<#if localUser>
|
|
||||||
<h3><img src="welcome-content/user.png">Administration Console</h3>
|
|
||||||
<p>Please create an initial admin user to get started.</p>
|
|
||||||
<#else>
|
|
||||||
<p class="welcome-message">
|
|
||||||
<img src="welcome-content/alert.png">You need local access to create the initial admin user. <br><br>Open <a href="${localAdminUrl}">${localAdminUrl}</a>
|
|
||||||
<br>${adminUserCreationMessage}.
|
|
||||||
</p>
|
|
||||||
</#if>
|
|
||||||
</#if>
|
|
||||||
|
|
||||||
<#if bootstrap && localUser>
|
|
||||||
<form method="post" class="welcome-form">
|
|
||||||
<p>
|
|
||||||
<label for="username">Username</label>
|
|
||||||
<input id="username" name="username" />
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
<label for="password">Password</label>
|
|
||||||
<input id="password" name="password" type="password" />
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
<label for="passwordConfirmation">Password confirmation</label>
|
|
||||||
<input id="passwordConfirmation" name="passwordConfirmation" type="password" />
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<input id="stateChecker" name="stateChecker" type="hidden" value="${stateChecker}" />
|
|
||||||
|
|
||||||
<button id="create-button" type="submit" class="btn btn-primary">Create</button>
|
|
||||||
</form>
|
|
||||||
</#if>
|
|
||||||
|
|
||||||
<div class="welcome-primary-link">
|
|
||||||
<h3><a href="https://auth.da47.net/admin/durlacher-allee-47/console"><i class="fa fa-wrench link" aria-hidden="true"></i> Administration Console <i class="fa fa-angle-right link" aria-hidden="true"></i></a></h3>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</#if> <#-- adminConsoleEnabled -->
|
|
||||||
<div class="col-xs-12 col-sm-4">
|
|
||||||
<div class="card-pf h-m">
|
|
||||||
<h3><a href="https://hass.home.da47.net"><i class="fa fa-home link" aria-hidden="true"></i> HomeAssistent <i class="fa fa-angle-right link" aria-hidden="true"></i></a></h3>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-xs-12 col-sm-4">
|
|
||||||
<#if properties.displayCommunityLinks = "true">
|
|
||||||
<div class="card-pf h-m">
|
|
||||||
<h3><a href="https://dcim.infra.da47.net"><i class="fa fa-database link" aria-hidden="true"></i> Netbox <i class="fa fa-angle-right link" aria-hidden="true"></i></a></h3>
|
|
||||||
</div>
|
|
||||||
<div class="card-pf h-m">
|
|
||||||
<h3><a href="https://groups.google.com/forum/#!forum/keycloak-user"><img src="welcome-content/mail.png">Mailing List <i class="fa fa-angle-right link" aria-hidden="true"></i></a></h3>
|
|
||||||
</div>
|
|
||||||
<div class="card-pf h-m">
|
|
||||||
<h3><a href="https://github.com/keycloak/keycloak/issues"><img src="welcome-content/bug.png">Report an issue <i class="fa fa-angle-right link" aria-hidden="true"></i></a></h3>
|
|
||||||
</div>
|
|
||||||
</#if>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
Before Width: | Height: | Size: 712 B |
Before Width: | Height: | Size: 6.0 KiB |
Before Width: | Height: | Size: 434 KiB |
Before Width: | Height: | Size: 1.4 KiB |
@ -1,149 +0,0 @@
|
|||||||
body {
|
|
||||||
background: #111 url(../bg.jpg) no-repeat center bottom fixed;
|
|
||||||
background-size: cover;
|
|
||||||
color: #ccc;
|
|
||||||
}
|
|
||||||
.welcome-header {
|
|
||||||
margin-top: 30px;
|
|
||||||
margin-bottom: 60px;
|
|
||||||
margin-left: -10px;
|
|
||||||
color: #ddd;
|
|
||||||
}
|
|
||||||
.welcome-header img {
|
|
||||||
width: 150px;
|
|
||||||
margin-bottom: 40px;
|
|
||||||
}
|
|
||||||
.welcome-header h1 {
|
|
||||||
font-weight: 500 !important;
|
|
||||||
}
|
|
||||||
.welcome-header h1 strong {
|
|
||||||
font-weight: 800 !important;
|
|
||||||
}
|
|
||||||
.welcome-message {
|
|
||||||
margin-top: 20px;
|
|
||||||
}
|
|
||||||
.h-l {
|
|
||||||
min-height: 370px;
|
|
||||||
padding: 10px 20px 10px;
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
.h-l h3 {
|
|
||||||
margin-bottom: 10px;
|
|
||||||
}
|
|
||||||
.h-m {
|
|
||||||
height: 110px;
|
|
||||||
padding-top: 23px;
|
|
||||||
}
|
|
||||||
.card-pf img {
|
|
||||||
width: 22px;
|
|
||||||
margin-right: 10px;
|
|
||||||
vertical-align: bottom;
|
|
||||||
}
|
|
||||||
img.doc-img {
|
|
||||||
width: auto;
|
|
||||||
height: 22px;
|
|
||||||
}
|
|
||||||
.link {
|
|
||||||
font-size: 16px;
|
|
||||||
vertical-align: baseline;
|
|
||||||
margin-left: 5px;
|
|
||||||
}
|
|
||||||
h3 {
|
|
||||||
font-weight: 550;
|
|
||||||
}
|
|
||||||
h3 a:link,
|
|
||||||
h3 a:visited {
|
|
||||||
color: #ddd;
|
|
||||||
font-weight: 550;
|
|
||||||
}
|
|
||||||
h3 a:hover,
|
|
||||||
h3 a:hover .link {
|
|
||||||
text-decoration: none;
|
|
||||||
color: #00659c;
|
|
||||||
}
|
|
||||||
.h-l h3 a img {
|
|
||||||
height: 30px;
|
|
||||||
width: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.description {
|
|
||||||
margin-top: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.card-pf {
|
|
||||||
border-top: 1px solid rgba(3, 3, 3, 0.1);
|
|
||||||
box-shadow: 0 1px 1px rgba(3, 3, 3, 0.275);
|
|
||||||
background: #222;
|
|
||||||
}
|
|
||||||
|
|
||||||
.welcome-form label,
|
|
||||||
.welcome-form input {
|
|
||||||
display: block;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.welcome-form label {
|
|
||||||
color: #828486;
|
|
||||||
font-weight: normal;
|
|
||||||
margin-top: 18px;
|
|
||||||
}
|
|
||||||
.welcome-form input {
|
|
||||||
border: 0;
|
|
||||||
border-bottom: solid 1px #cbcbcb;
|
|
||||||
}
|
|
||||||
.welcome-form input:focus {
|
|
||||||
border-bottom: solid 1px #5e99c6;
|
|
||||||
outline-width: 0;
|
|
||||||
}
|
|
||||||
.welcome-form button {
|
|
||||||
margin-top: 10px;
|
|
||||||
}
|
|
||||||
.error {
|
|
||||||
color: #c00;
|
|
||||||
border-color: #c00;
|
|
||||||
padding: 5px 10px;
|
|
||||||
}
|
|
||||||
.success {
|
|
||||||
color: #3f9c35;
|
|
||||||
border-color: #3f9c35;
|
|
||||||
padding: 5px 10px;
|
|
||||||
}
|
|
||||||
.welcome-form + .welcome-primary-link,
|
|
||||||
.welcome-message + .welcome-primary-link {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.footer img {
|
|
||||||
float: right;
|
|
||||||
width: 150px;
|
|
||||||
margin-top: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 768px) {
|
|
||||||
.welcome-header {
|
|
||||||
margin-top: 10px;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
}
|
|
||||||
.welcome-header img {
|
|
||||||
margin-bottom: 20px;
|
|
||||||
}
|
|
||||||
h3 {
|
|
||||||
margin-top: 10px;
|
|
||||||
}
|
|
||||||
.h-l,
|
|
||||||
.h-m {
|
|
||||||
height: auto;
|
|
||||||
min-height: auto;
|
|
||||||
padding: 5px 10px;
|
|
||||||
}
|
|
||||||
.h-l img {
|
|
||||||
display: inline;
|
|
||||||
margin-bottom: auto;
|
|
||||||
}
|
|
||||||
.description {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
.footer img {
|
|
||||||
margin-top: 10px;
|
|
||||||
}
|
|
||||||
}
|
|
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 166 KiB |
Before Width: | Height: | Size: 160 KiB |
Before Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 2.4 KiB |
@ -1,8 +0,0 @@
|
|||||||
styles=css/welcome.css
|
|
||||||
import=common/keycloak
|
|
||||||
|
|
||||||
stylesCommon=node_modules/patternfly/dist/css/patternfly.css node_modules/patternfly/dist/css/patternfly-additions.css
|
|
||||||
|
|
||||||
productName=auth.da47.net
|
|
||||||
documentationUrl=https://www.keycloak.org/documentation.html
|
|
||||||
displayCommunityLinks=true
|
|
2
finallycoffee/account/messages/messages_en.properties
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
lastName=Name
|
||||||
|
signingInSidebarTitle=Signing in & Security
|
277
finallycoffee/account/resources/css/account.css
Normal file
@ -0,0 +1,277 @@
|
|||||||
|
html {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
background-color: #F9F9F9;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
header .navbar {
|
||||||
|
margin-bottom: 0;
|
||||||
|
min-height: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header .container {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-title {
|
||||||
|
background-image: url('../img/logo.png');
|
||||||
|
height: 25px;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
width: 123px;
|
||||||
|
margin: 3px 10px 5px;
|
||||||
|
text-indent: -99999px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-pf .navbar-utility {
|
||||||
|
right: 20px;
|
||||||
|
top: -34px;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-pf .navbar-utility > li > a {
|
||||||
|
color: #fff !important;
|
||||||
|
padding-bottom: 12px;
|
||||||
|
padding-top: 11px;
|
||||||
|
border-left: medium none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content-area {
|
||||||
|
background-color: #fff;
|
||||||
|
border-color: #CECECE;
|
||||||
|
border-style: solid;
|
||||||
|
border-width: 0 1px;
|
||||||
|
height: 100%;
|
||||||
|
padding: 0 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.margin-bottom {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Sidebar */
|
||||||
|
|
||||||
|
.bs-sidebar {
|
||||||
|
background-color: #f9f9f9;
|
||||||
|
padding-top: 44px;
|
||||||
|
padding-right: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
z-index: 20;
|
||||||
|
}
|
||||||
|
.bs-sidebar ul {
|
||||||
|
list-style: none;
|
||||||
|
padding-left: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bs-sidebar ul li {
|
||||||
|
margin-bottom: 0.5em;
|
||||||
|
margin-left: -1em;
|
||||||
|
}
|
||||||
|
.bs-sidebar ul li a {
|
||||||
|
font-size: 14px;
|
||||||
|
padding-left: 25px;
|
||||||
|
color: #4d5258;
|
||||||
|
line-height: 28px;
|
||||||
|
display: block;
|
||||||
|
border-width: 1px 0 1px 1px;
|
||||||
|
border-style: solid;
|
||||||
|
border-color: #f9f9f9;
|
||||||
|
}
|
||||||
|
.bs-sidebar ul li a:hover,
|
||||||
|
.bs-sidebar ul li a:focus {
|
||||||
|
text-decoration: none;
|
||||||
|
color: #777777;
|
||||||
|
border-right: 2px solid #aaa;
|
||||||
|
}
|
||||||
|
.bs-sidebar ul li.active a {
|
||||||
|
background-color: #c7e5f0;
|
||||||
|
border-color: #56bae0;
|
||||||
|
font-weight: bold;
|
||||||
|
background-image: url(../img/icon-sidebar-active.png);
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: right center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bs-sidebar ul li.active a:hover {
|
||||||
|
border-right: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.content-area h2 {
|
||||||
|
font-family: "Open Sans", sans-serif;
|
||||||
|
font-weight: 100;
|
||||||
|
font-size: 24px;
|
||||||
|
margin-bottom: 25px;
|
||||||
|
margin-top: 25px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.subtitle {
|
||||||
|
text-align: right;
|
||||||
|
margin-top: 30px;
|
||||||
|
color: #909090;
|
||||||
|
}
|
||||||
|
|
||||||
|
.required {
|
||||||
|
color: #CB2915;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.alert {
|
||||||
|
margin-top: 30px;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.feedback-aligner .alert {
|
||||||
|
background-position: 1.27273em center;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
border-radius: 2px;
|
||||||
|
border-width: 1px;
|
||||||
|
color: #4D5258;
|
||||||
|
display: inline-block;
|
||||||
|
font-size: 1.1em;
|
||||||
|
line-height: 1.4em;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0.909091em 3.63636em;
|
||||||
|
position: relative;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
.alert.alert-success {
|
||||||
|
background-color: #E4F1E1;
|
||||||
|
border-color: #4B9E39;
|
||||||
|
}
|
||||||
|
.alert.alert-error {
|
||||||
|
background-color: #F8E7E7;
|
||||||
|
border-color: #B91415;
|
||||||
|
}
|
||||||
|
.alert.alert-warning {
|
||||||
|
background-color: #FEF1E9;
|
||||||
|
border-color: #F17528;
|
||||||
|
}
|
||||||
|
.alert.alert-info {
|
||||||
|
background-color: #E4F3FA;
|
||||||
|
border-color: #5994B2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-horizontal {
|
||||||
|
border-top: 1px solid #E9E8E8;
|
||||||
|
padding-top: 23px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-horizontal .control-label {
|
||||||
|
color: #909090;
|
||||||
|
line-height: 1.4em;
|
||||||
|
padding-top: 5px;
|
||||||
|
position: relative;
|
||||||
|
text-align: right;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-group {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-label + .required {
|
||||||
|
position: absolute;
|
||||||
|
right: -2px;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-form-buttons {
|
||||||
|
text-align: right;
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-form-buttons .btn-primary {
|
||||||
|
float: right;
|
||||||
|
margin-left: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Authenticator page */
|
||||||
|
|
||||||
|
ol {
|
||||||
|
padding-left: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol li {
|
||||||
|
font-size: 13px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol li img {
|
||||||
|
margin-top: 15px;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
border: 1px solid #eee;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr + .form-horizontal {
|
||||||
|
border: none;
|
||||||
|
padding-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.kc-dropdown{
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.kc-dropdown > a{
|
||||||
|
display:block;
|
||||||
|
padding: 11px 10px 12px;
|
||||||
|
line-height: 12px;
|
||||||
|
font-size: 12px;
|
||||||
|
color: #fff !important;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.kc-dropdown > a::after{
|
||||||
|
content: "\2c5";
|
||||||
|
margin-left: 4px;
|
||||||
|
}
|
||||||
|
.kc-dropdown:hover > a{
|
||||||
|
background-color: rgba(0,0,0,0.2);
|
||||||
|
}
|
||||||
|
.kc-dropdown ul li a{
|
||||||
|
padding: 1px 11px;
|
||||||
|
font-size: 12px;
|
||||||
|
color: #000 !important;
|
||||||
|
border: 1px solid #fff;
|
||||||
|
text-decoration: none;
|
||||||
|
display:block;
|
||||||
|
line-height: 20px;
|
||||||
|
}
|
||||||
|
.kc-dropdown ul li a:hover{
|
||||||
|
color: #4d5258;
|
||||||
|
background-color: #d4edfa;
|
||||||
|
border-color: #b3d3e7;
|
||||||
|
}
|
||||||
|
.kc-dropdown ul{
|
||||||
|
position: absolute;
|
||||||
|
z-index: 2000;
|
||||||
|
list-style:none;
|
||||||
|
display:none;
|
||||||
|
padding: 5px 0px;
|
||||||
|
margin: 0px;
|
||||||
|
background-color: #fff !important;
|
||||||
|
border: 1px solid #b6b6b6;
|
||||||
|
border-radius: 1px;
|
||||||
|
-webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
|
||||||
|
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
|
||||||
|
background-clip: padding-box;
|
||||||
|
min-width: 100px;
|
||||||
|
}
|
||||||
|
.kc-dropdown:hover ul{
|
||||||
|
display:block;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#kc-totp-secret-key {
|
||||||
|
border: 1px solid #eee;
|
||||||
|
font-size: 16px;
|
||||||
|
padding: 10px;
|
||||||
|
margin: 50px 0;
|
||||||
|
}
|
99
finallycoffee/account/resources/img/entropia.svg
Normal file
After Width: | Height: | Size: 53 KiB |
BIN
finallycoffee/account/resources/img/icon-sidebar-active.png
Normal file
After Width: | Height: | Size: 202 B |
BIN
finallycoffee/account/resources/img/keycloak-logo.png
Normal file
After Width: | Height: | Size: 5.1 KiB |
BIN
finallycoffee/account/resources/img/logo.png
Normal file
After Width: | Height: | Size: 4.1 KiB |
@ -1,3 +1,2 @@
|
|||||||
parent=keycloak.v3
|
parent=keycloak.v2
|
||||||
import=common/finallycoffee
|
logo=/img/antifa_coffee_cups.svg
|
||||||
logo=/img/antifa_coffee_cups.png
|
|
||||||
|
505
finallycoffee/admin/resources/css/styles.css
Executable file
@ -0,0 +1,505 @@
|
|||||||
|
html,body {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
form {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.required {
|
||||||
|
color: #f00;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tooltip-inner {
|
||||||
|
min-width: 200px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.margin-top {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.no-margin-top {
|
||||||
|
margin-top: 0px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.clip {
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
max-width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
th.w-10 {
|
||||||
|
width: 10%;
|
||||||
|
}
|
||||||
|
|
||||||
|
th.w-15 {
|
||||||
|
width: 15%;
|
||||||
|
}
|
||||||
|
|
||||||
|
th.w-20 {
|
||||||
|
width: 20%;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
th.w-25 {
|
||||||
|
width: 25%;
|
||||||
|
}
|
||||||
|
|
||||||
|
th.w-30 {
|
||||||
|
width: 30%;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
th.w-35 {
|
||||||
|
width: 35%;
|
||||||
|
}
|
||||||
|
|
||||||
|
th.w-40 {
|
||||||
|
width: 40%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********** Loading ***********/
|
||||||
|
|
||||||
|
.loading {
|
||||||
|
background-color: #f5f5f5;
|
||||||
|
border: 1px solid #eee;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0px;
|
||||||
|
left: 0px;
|
||||||
|
padding: 2px 200px 2px 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********** Feedback ***********/
|
||||||
|
|
||||||
|
.feedback-aligner {
|
||||||
|
position: fixed;
|
||||||
|
top: 15px;
|
||||||
|
text-align: center;
|
||||||
|
width: 100%;
|
||||||
|
height: 0;
|
||||||
|
z-index: 100;
|
||||||
|
}
|
||||||
|
.feedback-aligner .alert {
|
||||||
|
border-radius: 2px;
|
||||||
|
border-width: 1px;
|
||||||
|
display: inline-block;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********** On-Off Switch ***********/
|
||||||
|
|
||||||
|
.onoffswitch {
|
||||||
|
-moz-user-select: none;
|
||||||
|
height: 26px;
|
||||||
|
position: relative;
|
||||||
|
width: 62px;
|
||||||
|
}
|
||||||
|
.onoffswitch .onoffswitch-checkbox {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.onoffswitch .onoffswitch-label {
|
||||||
|
border: 1px solid #bbb;
|
||||||
|
border-radius: 2px;
|
||||||
|
cursor: pointer;
|
||||||
|
display: block;
|
||||||
|
overflow: hidden;
|
||||||
|
width: 62px;
|
||||||
|
}
|
||||||
|
.onoffswitch .onoffswitch-inner {
|
||||||
|
display: block;
|
||||||
|
margin-left: -100%;
|
||||||
|
transition: margin 0.3s ease-in 0s;
|
||||||
|
width: 200%;
|
||||||
|
}
|
||||||
|
.onoffswitch .onoffswitch-inner > span {
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
color: white;
|
||||||
|
float: left;
|
||||||
|
font-size: 11px;
|
||||||
|
font-family: "Open Sans", sans-serif;
|
||||||
|
font-weight: bold;
|
||||||
|
height: 24px;
|
||||||
|
line-height: 24px;
|
||||||
|
padding: 0;
|
||||||
|
width: 50%;
|
||||||
|
}
|
||||||
|
.onoffswitch .onoffswitch-switch {
|
||||||
|
background-image: linear-gradient(top, #fafafa 0%, #ededed 100%);
|
||||||
|
background-image: -o-linear-gradient(top, #fafafa 0%, #ededed 100%);
|
||||||
|
background-image: -moz-linear-gradient(top, #fafafa 0%, #ededed 100%);
|
||||||
|
background-image: -webkit-linear-gradient(top, #fafafa 0%, #ededed 100%);
|
||||||
|
background-image: -ms-linear-gradient(top, #fafafa 0%, #ededed 100%);
|
||||||
|
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fafafa), color-stop(1, 0, #ededed));
|
||||||
|
border: 1px solid #aaa;
|
||||||
|
border-radius: 2px;
|
||||||
|
bottom: 0;
|
||||||
|
margin: 0;
|
||||||
|
position: absolute;
|
||||||
|
right: 39px;
|
||||||
|
top: 0;
|
||||||
|
transition: all 0.3s ease-in 0s;
|
||||||
|
-webkit-transition: all 0.3s ease-in 0s;
|
||||||
|
width: 23px;
|
||||||
|
}
|
||||||
|
.onoffswitch .onoffswitch-inner .onoffswitch-active {
|
||||||
|
background-image: linear-gradient(top, #00a9ec 0%, #009bd3 100%);
|
||||||
|
background-image: -o-linear-gradient(top, #00a9ec 0%, #009bd3 100%);
|
||||||
|
background-image: -moz-linear-gradient(top, #00a9ec 0%, #009bd3 100%);
|
||||||
|
background-image: -webkit-linear-gradient(top, #00a9ec 0%, #009bd3 100%);
|
||||||
|
background-image: -ms-linear-gradient(top, #00a9ec 0%, #009bd3 100%);
|
||||||
|
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #00a9ec), color-stop(1, 0, #009bd3));
|
||||||
|
color: #FFFFFF;
|
||||||
|
padding-left: 10px;
|
||||||
|
}
|
||||||
|
.onoffswitch-checkbox:disabled + .onoffswitch-label .onoffswitch-inner .onoffswitch-active,
|
||||||
|
.onoffswitch-checkbox:disabled + .onoffswitch-label .onoffswitch-inner .onoffswitch-inactive {
|
||||||
|
background-image: none;
|
||||||
|
background-color: #e5e5e5;
|
||||||
|
color: #9d9fa1;
|
||||||
|
}
|
||||||
|
.onoffswitch .onoffswitch-inner .onoffswitch-inactive {
|
||||||
|
background: linear-gradient(#fefefe, #e8e8e8) repeat scroll 0 0 transparent;
|
||||||
|
color: #4d5258;
|
||||||
|
padding-right: 10px;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
.onoffswitch .onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-inner {
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
.onoffswitch .onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-switch {
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*********** Select 2 ***********/
|
||||||
|
|
||||||
|
.select2-container {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container-multi .select2-choices .select2-search-field {
|
||||||
|
height: 26px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container-single {
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container-single .form-group {
|
||||||
|
width: 100%;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container-single .form-group .input-group {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********** html select ********/
|
||||||
|
.overflow-select {
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*********** New Menu ***********/
|
||||||
|
|
||||||
|
|
||||||
|
.sidebar-pf-left{
|
||||||
|
background: #292e34;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-pf .nav-pills > li a i, .sidebar-pf .nav-pills > li a span{
|
||||||
|
color: #72767b;
|
||||||
|
display: inline-block;
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
.sidebar-pf .nav-pills > li > a{
|
||||||
|
color: #dbdada;
|
||||||
|
padding: 0px 20px 0 30px!important;
|
||||||
|
line-height: 30px;
|
||||||
|
border-left-width: 12px;
|
||||||
|
border-left-style: solid;
|
||||||
|
border-left-color: #292e34;
|
||||||
|
margin-left: -6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-pf .nav-pills > li > a:hover{
|
||||||
|
background: #393f44;
|
||||||
|
border-color:#292e34;
|
||||||
|
border-left-color: #393f44;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-pf .nav-pills > li > a:after{
|
||||||
|
display: none!important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.sidebar-pf .nav-pills > li.active > a {
|
||||||
|
color: #fff;
|
||||||
|
background: #393f44!important;
|
||||||
|
border-bottom: 1px solid #000!important;
|
||||||
|
border-top: 1px solid #000!important;
|
||||||
|
border-left-color: #39a5dc!important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-pf .nav-pills > li.active a i, .sidebar-pf .nav-pills > li.active a span{
|
||||||
|
color: #39a5dc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********** Realm selector ***********/
|
||||||
|
|
||||||
|
.realm-selector{
|
||||||
|
color: #fff;
|
||||||
|
margin: 0 -20px;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.realm-dropmenu{
|
||||||
|
display: none;
|
||||||
|
cursor: pointer;
|
||||||
|
position: absolute;
|
||||||
|
top: 60px;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
z-index: 999;
|
||||||
|
background: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.realm-selector:hover .realm-dropmenu{
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.realm-add{
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.realm-selector h2{
|
||||||
|
font-size: 16px;
|
||||||
|
line-height: 60px;
|
||||||
|
padding: 0 20px;
|
||||||
|
margin: 0;
|
||||||
|
border-bottom: 1px solid #d5d5d6;
|
||||||
|
}
|
||||||
|
|
||||||
|
.realm-selector h2 i{
|
||||||
|
display: inline-block;
|
||||||
|
float: right;
|
||||||
|
line-height: 60px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.realm-selector ul{
|
||||||
|
padding-left: 0;
|
||||||
|
margin: 0;
|
||||||
|
list-style: none;
|
||||||
|
max-height: 200px;
|
||||||
|
overflow-y:auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.realm-selector ul li a{
|
||||||
|
line-height: 60px;
|
||||||
|
padding: 0 20px;
|
||||||
|
border-bottom: 1px solid #d5d5d6;
|
||||||
|
line-height: 39px;
|
||||||
|
display: block;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*********** Overwrites header defaults ***********/
|
||||||
|
|
||||||
|
.navbar-pf{
|
||||||
|
border-top: none!important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-pf .navbar-brand {
|
||||||
|
padding: 0;
|
||||||
|
height: 56px;
|
||||||
|
line-height: 56px;
|
||||||
|
background-position: center center;
|
||||||
|
background-image: url('../img/keyclok-logo.png');
|
||||||
|
background-size: 148px 30px;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
width: 148px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-pf .navbar-utility .dropdown-toggle {
|
||||||
|
padding: 23px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.clickable {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 i {
|
||||||
|
color: #999999;
|
||||||
|
font-size: 18px;
|
||||||
|
margin-left: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Action cell */
|
||||||
|
.kc-action-cell {
|
||||||
|
background-color: #eeeeee;
|
||||||
|
background-image: linear-gradient(to bottom, #fafafa 0%, #ededed 100%);
|
||||||
|
background-repeat: repeat-x;
|
||||||
|
|
||||||
|
text-align: center;
|
||||||
|
vertical-align: middle;
|
||||||
|
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
|
||||||
|
cursor:pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.kc-action-cell:hover {
|
||||||
|
background-color: #eeeeee;
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.kc-action-cell-disabled {
|
||||||
|
background-color: #fafafa;
|
||||||
|
color: #8b8d8f;
|
||||||
|
background-image: none;
|
||||||
|
cursor: not-allowed;
|
||||||
|
}
|
||||||
|
|
||||||
|
.kc-sorter span {
|
||||||
|
margin-left: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Time selector */
|
||||||
|
|
||||||
|
.time-selector input {
|
||||||
|
display: inline-block;
|
||||||
|
width: 120px;
|
||||||
|
padding-right: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.time-selector select {
|
||||||
|
display: inline-block;
|
||||||
|
width: 80px;
|
||||||
|
margin-left: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ace_editor {
|
||||||
|
height: 600px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.kc-button-input-file input {
|
||||||
|
float: left;
|
||||||
|
width: 73%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.kc-button-input-file label {
|
||||||
|
float: left;
|
||||||
|
margin-left: 2%;
|
||||||
|
width: 25%;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.kc-authz-table-expanded {
|
||||||
|
margin-top: 0px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.no-gutter > [class*='col-'] {
|
||||||
|
padding-right:0!important;
|
||||||
|
padding-left:0!important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.password-conceal {
|
||||||
|
font-family: 'text-security-disc';
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-map input.form-control {
|
||||||
|
width: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Deactivation styles for user-group membership tree models */
|
||||||
|
|
||||||
|
div[tree-model] li .deactivate {
|
||||||
|
color: #4a5053;
|
||||||
|
opacity: 0.4;
|
||||||
|
}
|
||||||
|
|
||||||
|
div[tree-model] li .deactivate_selected {
|
||||||
|
background-color: #dcdcdc;
|
||||||
|
font-weight: bold;
|
||||||
|
padding: 1px 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* search highlighting */
|
||||||
|
|
||||||
|
div[tree-model] li .highlight {
|
||||||
|
background-color: #aaddff;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Manage credentials */
|
||||||
|
table.credentials-table {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.credentials-table td {
|
||||||
|
vertical-align: middle !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.credentials-table input[type='text'] {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.credential-arrows-cell {
|
||||||
|
width: 75px;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.credential-label-cell {
|
||||||
|
padding: 5px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.credential-action-cell {
|
||||||
|
padding: 0px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.credential-action-cell div.kc-action-cell {
|
||||||
|
width: 100%;
|
||||||
|
height: 36px;
|
||||||
|
line-height: 34px;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.credential-action-cell.expanded div.kc-action-cell {
|
||||||
|
border-bottom: 1px solid #d1d1d1;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.credential-data-table td {
|
||||||
|
word-break: break-all;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.credential-data-table tr:first-child td {
|
||||||
|
border-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.credential-data-table td:first-child {
|
||||||
|
width: 150px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.credential-data-table td.key {
|
||||||
|
text-align: right;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
BIN
finallycoffee/admin/resources/img/keyclok-logo.png
Normal file
After Width: | Height: | Size: 5.1 KiB |
194
finallycoffee/admin/resources/img/keyclok-logo.svg
Normal file
@ -0,0 +1,194 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px"
|
||||||
|
viewBox="-145.2 359 325.4 77.2" enable-background="new -145.2 359 325.4 77.2" xml:space="preserve">
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<path fill="none" stroke="#FFFFFF" stroke-width="7" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
|
||||||
|
M-79.1,393.1c-7.2,5-14.7,3.7-23.2-3.4c-4.9-4.1-11.2-2.8-15.4-1.5c-2.6,0.8-6.3,0.7-9.5,0.1c-14-2.9-10.9,6-8.3,14
|
||||||
|
c4.8,14.6-3.2,18-6,12.8c-1.8,6.6,7.1,8.6,10.9,7.7c6-1.4,14.1-2.2,19-0.6c9.5,2.9,13.1,0.5,11.5-2.6c-0.5-1-0.2-2.4,0.6-3.1
|
||||||
|
c2.8-2.4,5.3-0.4,8-1.9c2.1-1.2,2.1-3.9-1.2-5.5c-1.7-0.8-1.6-2.9,0.2-3.8c3.7-2,8.8-1,10-5.1C-81.9,398.7-80.7,395-79.1,393.1z"
|
||||||
|
/>
|
||||||
|
<path fill="none" stroke="#FFFFFF" stroke-width="7" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
|
||||||
|
M-112.4,367.4c-1.1-0.6-4.3-2.6-5.1-3.1c-0.8-0.5-2.7-1.9-4.8-1.9s-4,1.4-4.8,1.9c-0.8,0.5-4,2.5-5.1,3.1c-0.8,0.5-3.7,2-3.7,6.3
|
||||||
|
c0,1.3,0,3.6,0,4.5c0,2.8,1.6,5,4.5,6.4c1,0.5,1.8,1.3,1.8,3.5c0,0.9,0.4,1.2,0.9,1.2h0.7c0.6,0,1,0.2,1,1.3c0,0.6,0,2.1,0,2.1
|
||||||
|
v37.2l2.7,2.8h1.2l5.7-5.8v-34.2c0,0,0-1.5,0-2.1c0-1,0.3-1.3,1-1.3h0.7c0.6,0,0.9-0.2,0.9-1.2c0-2.1,0.8-3,1.8-3.5
|
||||||
|
c2.9-1.5,4.5-3.6,4.5-6.4c0-1,0-3.2,0-4.5C-108.7,369.5-111.6,367.9-112.4,367.4z"/>
|
||||||
|
</g>
|
||||||
|
|
||||||
|
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="-227.7191" y1="2220.7964" x2="-165.056" y2="2220.7964" gradientTransform="matrix(1 0 0 1 86 -1815.5)">
|
||||||
|
<stop offset="0" style="stop-color:#FDFDFD"/>
|
||||||
|
<stop offset="0.1452" style="stop-color:#F4F5F5"/>
|
||||||
|
<stop offset="0.6844" style="stop-color:#D9DBDB"/>
|
||||||
|
<stop offset="1" style="stop-color:#CFD1D1"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path fill="url(#SVGID_1_)" d="M-79.1,393.1c-7.2,5-14.7,3.7-23.2-3.4c-4.9-4.1-11.2-2.8-15.4-1.5c-2.6,0.8-6.3,0.7-9.5,0.1
|
||||||
|
c-14-2.9-10.9,6-8.3,14c4.8,14.6-3.2,18-6,12.8c-1.8,6.6,7.1,8.6,10.9,7.7c6-1.4,14.1-2.2,19-0.6c9.5,2.9,13.1,0.5,11.5-2.6
|
||||||
|
c-0.5-1-0.2-2.4,0.6-3.1c2.8-2.4,5.3-0.4,8-1.9c2.1-1.2,2.1-3.9-1.2-5.5c-1.7-0.8-1.6-2.9,0.2-3.8c3.7-2,8.8-1,10-5.1
|
||||||
|
C-81.9,398.7-80.7,395-79.1,393.1z"/>
|
||||||
|
|
||||||
|
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="192.3203" y1="1507.8835" x2="184.0467" y2="1507.8835" gradientTransform="matrix(1 0 0 1 -302 -1102)">
|
||||||
|
<stop offset="0" style="stop-color:#E6E6E6"/>
|
||||||
|
<stop offset="1" style="stop-color:#B2B3B3"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path fill="url(#SVGID_2_)" d="M-115,391.3c0,5,0.7,22.8,4.5,30.4l-8.7-0.2v-31.5L-115,391.3z"/>
|
||||||
|
|
||||||
|
<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="-200.8627" y1="2227.3811" x2="-193.8624" y2="2207.8804" gradientTransform="matrix(1 0 0 1 86 -1815.5)">
|
||||||
|
<stop offset="0" style="stop-color:#F6F6F6"/>
|
||||||
|
<stop offset="1" style="stop-color:#B2B3B3"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path fill="url(#SVGID_3_)" d="M-134.6,403.1c-2.8-7.5-6.5-16.6,7.5-13.7c3.2,0.7,6.9,0.7,9.5-0.1c4.3-1.3,10-2.4,14.5,1.5
|
||||||
|
c8.9,7.7,16.9,8.3,24.1,3.3c-1.6,1.9-3.1,5.6-3.3,7.1c-0.2,1.3-1.1,1.9-2.4,2.4c-18.5,7.5-15.4-5.3-21.4-9.5
|
||||||
|
c-3.2-2.2-7.7-2.1-11.2-0.8c-3.2,1.2-6.4,0.9-9.8-0.4C-132.9,390.8-136.7,391.9-134.6,403.1z"/>
|
||||||
|
<line fill="none" stroke="#FFFFFF" stroke-width="3.5" stroke-miterlimit="10" x1="-117.4" y1="421.8" x2="-117.4" y2="390.6"/>
|
||||||
|
<g opacity="0.75">
|
||||||
|
<path fill="#FFFFFF" d="M-110.3,389c2.7,0,4.9,0.7,6.8,2.3c5.5,4.6,10.6,6.8,15.6,6.8c1.5,0,2.9-0.2,4.4-0.6
|
||||||
|
c-0.3,0.9-0.6,1.6-0.7,2.1c-0.4,1.4-1.6,1.8-4.4,2.4c-1.5,0.3-3.1,0.7-4.7,1.5c-1.6,0.8-2.5,2.3-2.5,3.9c0,1.5,0.9,2.8,2.4,3.5
|
||||||
|
c1.2,0.5,1.5,1.1,1.5,1.4c0,0.3-0.3,0.5-0.5,0.6c-0.6,0.3-1.2,0.4-2.1,0.4c-0.2,0-0.3,0-0.5,0c-0.2,0-0.4,0-0.5,0
|
||||||
|
c-1.6,0-3.4,0.2-5.2,1.7c-1.5,1.3-2,3.7-1.1,5.6c0.1,0.3,0.1,0.4,0.1,0.4c-0.1,0.1-0.8,0.6-2.6,0.6c-1.8,0-4.1-0.4-6.7-1.2
|
||||||
|
c-2-0.6-4.5-0.9-7.5-0.9c-3.8,0-8.4,0.6-12.6,1.5c-0.4,0.1-0.9,0.1-1.5,0.1c-1.9,0-4.2-0.5-5.7-1.6c1.7,0,3.3-0.9,4.4-2.4
|
||||||
|
c1.3-1.8,3.2-6.3,0.2-15.3l-0.1-0.2c-1.3-3.9-2.9-8.8-1.5-10.7c0.5-0.7,1.6-1.1,3.4-1.1c1.2,0,2.6,0.2,4.3,0.5
|
||||||
|
c1.8,0.4,3.6,0.6,5.4,0.6c1.9,0,3.7-0.2,5.1-0.7C-115.4,389.7-112.9,389-110.3,389 M-110.3,387c-2.7,0-5.2,0.6-7.3,1.3
|
||||||
|
c-1.3,0.4-2.9,0.6-4.6,0.6c-1.6,0-3.4-0.2-5-0.5c-1.9-0.4-3.4-0.6-4.7-0.6c-8.5,0-5.9,7.7-3.6,14.6c3.4,10.4,0.3,15.1-2.7,15.1
|
||||||
|
c-1.2,0-2.5-0.8-3.3-2.3c-1.5,5.6,4.8,7.9,9,7.9c0.7,0,1.4-0.1,2-0.2c3.7-0.8,8.1-1.5,12.2-1.5c2.5,0,4.9,0.2,6.9,0.8
|
||||||
|
c3,0.9,5.5,1.3,7.3,1.3c4,0,5.3-1.8,4.2-3.9c-0.5-1-0.2-2.4,0.6-3.1c1.4-1.2,2.7-1.3,3.9-1.3c0.3,0,0.7,0,1,0c1,0,2-0.1,3.1-0.7
|
||||||
|
c2.1-1.2,2.1-3.9-1.2-5.5c-1.7-0.8-1.6-2.9,0.2-3.8c3.7-2,8.8-1,10-5.1c0.4-1.5,1.7-5.2,3.3-7.1c-2.9,2-5.9,3-8.9,3
|
||||||
|
c-4.5,0-9.2-2.2-14.3-6.4C-104.7,387.7-107.6,387-110.3,387L-110.3,387z M-79.1,393.1L-79.1,393.1L-79.1,393.1z"/>
|
||||||
|
</g>
|
||||||
|
<path fill="none" stroke="#034672" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
|
||||||
|
M-79.1,393.1c-7.2,5-14.7,3.7-23.2-3.4c-4.9-4.1-11.2-2.8-15.4-1.5c-2.6,0.8-6.3,0.7-9.5,0.1c-14-2.9-10.9,6-8.3,14
|
||||||
|
c4.8,14.6-3.2,18-6,12.8c-1.8,6.6,7.1,8.6,10.9,7.7c6-1.4,14.1-2.2,19-0.6c9.5,2.9,13.1,0.5,11.5-2.6c-0.5-1-0.2-2.4,0.6-3.1
|
||||||
|
c2.8-2.4,5.3-0.4,8-1.9c2.1-1.2,2.1-3.9-1.2-5.5c-1.7-0.8-1.6-2.9,0.2-3.8c3.7-2,8.8-1,10-5.1C-81.9,398.7-80.7,395-79.1,393.1z"/>
|
||||||
|
<path fill="#034672" d="M-134.6,402.1c-2.8-7.5-6.5-16.6,7.5-13.7c3.2,0.7,6.9,0.7,9.5-0.1c4.3-1.3,10-2.4,14.5,1.5
|
||||||
|
c8.9,7.7,16.9,8.3,24.1,3.3c-1.6,1.9-3.1,5.6-3.3,7.1c-0.2,1.3-1.1,1.9-2.4,2.4c-13.1,4.8-14.1-5.5-20.1-9.7
|
||||||
|
c-3.2-2.2-9-1.9-12.5-0.6c-3.2,1.2-6.4,0.9-9.8-0.4C-132.9,389.8-136.7,390.9-134.6,402.1z"/>
|
||||||
|
<path fill="#FFFFFF" d="M-112.4,367.4c-1.1-0.6-4.3-2.6-5.1-3.1c-0.8-0.5-2.7-1.9-4.8-1.9s-4,1.4-4.8,1.9c-0.8,0.5-4,2.5-5.1,3.1
|
||||||
|
c-0.8,0.5-3.7,2-3.7,6.3c0,1.3,0,3.6,0,4.5c0,2.8,1.6,5,4.5,6.4c1,0.5,1.8,1.3,1.8,3.5c0,0.9,0.4,1.2,0.9,1.2h0.7
|
||||||
|
c0.6,0,1,0.2,1,1.3c0,0.6,0,2.1,0,2.1v37.2l2.7,2.8h1.2l5.7-5.8v-34.2c0,0,0-1.5,0-2.1c0-1,0.3-1.3,1-1.3h0.7
|
||||||
|
c0.6,0,0.9-0.2,0.9-1.2c0-2.1,0.8-3,1.8-3.5c2.9-1.5,4.5-3.6,4.5-6.4c0-1,0-3.2,0-4.5C-108.7,369.5-111.6,367.9-112.4,367.4z"/>
|
||||||
|
|
||||||
|
<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="-217.9037" y1="2215.0122" x2="-187.068" y2="2207.345" gradientTransform="matrix(1 0 0 1 86 -1815.5)">
|
||||||
|
<stop offset="0" style="stop-color:#B8D7E9"/>
|
||||||
|
<stop offset="0.3324" style="stop-color:#CCE3F1"/>
|
||||||
|
<stop offset="0.6937" style="stop-color:#DAEBF7"/>
|
||||||
|
<stop offset="1" style="stop-color:#DFEEF9"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path fill="url(#SVGID_4_)" d="M-112.4,367.4c-1.1-0.6-4.3-2.6-5.1-3.1c-0.8-0.5-2.7-1.9-4.8-1.9v69.3l4.8-4.9v-34.2
|
||||||
|
c0,0,0-1.5,0-2.1c0-1,0.3-1.3,1-1.3h0.7c0.6,0,0.9-0.2,0.9-1.2c0-2.1,0.8-3,1.8-3.5c2.9-1.5,4.5-3.6,4.5-6.4c0-1,0-3.2,0-4.5
|
||||||
|
C-108.7,369.5-111.6,367.9-112.4,367.4z"/>
|
||||||
|
|
||||||
|
<linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="-214.9444" y1="2190.8406" x2="-206.3191" y2="2233.0925" gradientTransform="matrix(1 0 0 1 86 -1815.5)">
|
||||||
|
<stop offset="0" style="stop-color:#F1F9FE"/>
|
||||||
|
<stop offset="0.4254" style="stop-color:#E9F5FD"/>
|
||||||
|
<stop offset="1" style="stop-color:#E4F3FD"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path fill="url(#SVGID_5_)" d="M-122.3,362.5c-2.1,0-4,1.4-4.8,1.9c-0.8,0.5-4,2.5-5.1,3.1c-0.8,0.5-3.7,2-3.7,6.3
|
||||||
|
c0,1.3,0,3.6,0,4.5c0,2.8,1.6,5,4.5,6.4c1,0.5,1.8,1.3,1.8,3.5c0,0.9,0.4,1.2,0.9,1.2h0.7c0.6,0,1,0.2,1,1.3c0,0.6,0,2.1,0,2.1
|
||||||
|
v37.2l2.7,2.8h1.2l0.9-0.9L-122.3,362.5L-122.3,362.5z"/>
|
||||||
|
<path fill="none" stroke="#FFFFFF" stroke-width="2" stroke-miterlimit="10" d="M-122.6,362.5c1.9,0.9,3.4,2,4.2,2.4
|
||||||
|
c0.8,0.5,4,2.5,5.1,3.1c0.8,0.5,3.7,2,3.7,6.3c0,1.3,0,2.8,0,3.8c0,2.8-1.6,5-4.5,6.4c-1,0.5-1.8,1.4-1.8,3.6v1.2"/>
|
||||||
|
<path fill="none" stroke="#034672" stroke-width="2" stroke-miterlimit="10" d="M-112.4,367.4c-1.1-0.6-4.3-2.6-5.1-3.1
|
||||||
|
c-0.8-0.5-2.7-1.9-4.8-1.9s-4,1.4-4.8,1.9c-0.8,0.5-4,2.5-5.1,3.1c-0.8,0.5-3.7,2-3.7,6.3c0,1.3,0,3.6,0,4.5c0,2.8,1.6,5,4.5,6.4
|
||||||
|
c1,0.5,1.8,1.3,1.8,3.5c0,0.9,0.4,1.2,0.9,1.2h0.7c0.6,0,1,0.2,1,1.3c0,0.6,0,2.1,0,2.1v37.2l2.7,2.8h1.2l5.7-5.8v-34.2
|
||||||
|
c0,0,0-1.5,0-2.1c0-1,0.3-1.3,1-1.3h0.7c0.6,0,0.9-0.2,0.9-1.2c0-2.1,0.8-3,1.8-3.5c2.9-1.5,4.5-3.6,4.5-6.4c0-1,0-3.2,0-4.5
|
||||||
|
C-108.7,369.5-111.6,367.9-112.4,367.4z"/>
|
||||||
|
<path fill="#E9F6FE" stroke="#034672" stroke-width="2" stroke-miterlimit="10" d="M-107.5,392.7"/>
|
||||||
|
<g>
|
||||||
|
|
||||||
|
<linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="-106.4885" y1="2203.667" x2="-106.4885" y2="2254.552" gradientTransform="matrix(1 0 0 1 86 -1815.5)">
|
||||||
|
<stop offset="0" style="stop-color:#FFFFFE"/>
|
||||||
|
<stop offset="0.4815" style="stop-color:#F2F1F1"/>
|
||||||
|
<stop offset="1" style="stop-color:#E9E7E8"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path fill="url(#SVGID_6_)" d="M-14.5,407.6h-11.6c0.3,2.3,1,3.9,2.1,4.7s2.9,1.2,5.5,1.2c3.4,0,7.4-0.2,12-0.7l0.9,6
|
||||||
|
c-3.3,1.6-8,2.4-14,2.4c-6,0-10.3-1.3-12.9-3.9c-2.6-2.6-3.8-6.9-3.8-12.9c0-6.3,1.2-10.7,3.7-13.2c2.5-2.5,6.7-3.8,12.6-3.8
|
||||||
|
c5.3,0,9.2,0.9,11.6,2.8c2.4,1.8,3.6,4.7,3.6,8.4c0,3-0.8,5.2-2.3,6.7C-8.5,406.8-11,407.6-14.5,407.6z M-26.3,401.8h9.1
|
||||||
|
c1.2,0,2-0.3,2.4-0.8c0.4-0.6,0.6-1.4,0.6-2.5c0-1.5-0.4-2.6-1.2-3.2c-0.8-0.6-2.2-0.9-4.3-0.9c-2.5,0-4.2,0.5-5.1,1.5
|
||||||
|
C-25.6,396.9-26.1,398.8-26.3,401.8z"/>
|
||||||
|
|
||||||
|
<linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="-72.864" y1="2203.667" x2="-72.864" y2="2254.5503" gradientTransform="matrix(1 0 0 1 86 -1815.5)">
|
||||||
|
<stop offset="0" style="stop-color:#FFFFFE"/>
|
||||||
|
<stop offset="0.4815" style="stop-color:#F2F1F1"/>
|
||||||
|
<stop offset="1" style="stop-color:#E9E7E8"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path fill="url(#SVGID_7_)" d="M31,388.3l-11.4,32.6c-0.6,1.7-1.4,3.3-2.2,4.8c-0.9,1.5-2,2.9-3.4,4.3c-1.4,1.4-3.1,2.4-5.2,3
|
||||||
|
c-2.1,0.7-4.4,0.8-6.9,0.5L1,427.8c2.6-0.7,4.6-1.6,6.1-2.7c1.5-1.1,2.6-2.6,3.5-4.5l0.1-0.3H8.9c-1.6,0-2.6-0.8-3.1-2.3
|
||||||
|
l-10.5-29.8H5.6l6,20.8c0.4,1.5,0.7,3.1,1,4.8h0.8c0.1-0.5,0.3-1.3,0.7-2.4s0.5-1.9,0.7-2.4l5.9-20.8L31,388.3L31,388.3z"/>
|
||||||
|
|
||||||
|
<linearGradient id="SVGID_8_" gradientUnits="userSpaceOnUse" x1="-41.775" y1="2203.667" x2="-41.775" y2="2254.552" gradientTransform="matrix(1 0 0 1 86 -1815.5)">
|
||||||
|
<stop offset="0" style="stop-color:#FFFFFE"/>
|
||||||
|
<stop offset="0.4815" style="stop-color:#F2F1F1"/>
|
||||||
|
<stop offset="1" style="stop-color:#E9E7E8"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path fill="url(#SVGID_8_)" d="M57.6,412.8l0.9,6.3c-3.3,1.4-7.5,2.1-12.4,2.1c-5.9,0-10.1-1.3-12.5-3.8
|
||||||
|
c-2.4-2.5-3.6-6.9-3.6-13.1c0-6.2,1.2-10.6,3.6-13.1c2.4-2.5,6.6-3.8,12.6-3.8c4.9,0,8.8,0.7,11.9,2l-1,6
|
||||||
|
c-4.7-0.1-7.8-0.1-9.2-0.1c-3,0-5,0.6-6.1,1.9c-1.1,1.3-1.7,3.6-1.7,7.2c0,3.5,0.6,5.9,1.7,7.2c1.1,1.3,3.1,1.9,6.1,1.9
|
||||||
|
C51.6,413.4,54.9,413.2,57.6,412.8z"/>
|
||||||
|
|
||||||
|
<linearGradient id="SVGID_9_" gradientUnits="userSpaceOnUse" x1="8.9715" y1="2203.667" x2="8.9715" y2="2254.553" gradientTransform="matrix(1 0 0 1 86 -1815.5)">
|
||||||
|
<stop offset="0" style="stop-color:#FFFFFE"/>
|
||||||
|
<stop offset="0.4815" style="stop-color:#F2F1F1"/>
|
||||||
|
<stop offset="1" style="stop-color:#E9E7E8"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path fill="url(#SVGID_9_)" d="M95,387.4c6,0,10.2,1.3,12.7,3.9c2.5,2.6,3.7,7,3.7,13.1c0,6.2-1.2,10.5-3.7,13.1
|
||||||
|
c-2.5,2.5-6.7,3.8-12.7,3.8c-6,0-10.3-1.3-12.8-3.8c-2.5-2.5-3.7-6.9-3.7-13.1c0-6.2,1.2-10.6,3.7-13.2
|
||||||
|
C84.7,388.7,89,387.4,95,387.4z M95,394.6c-2.6,0-4.3,0.6-5.1,2c-0.9,1.3-1.3,3.9-1.3,7.8c0,3.8,0.4,6.4,1.3,7.7
|
||||||
|
c0.9,1.3,2.6,2,5.1,2c2.5,0,4.2-0.7,5.1-2c0.9-1.3,1.3-3.9,1.3-7.7c0-3.9-0.4-6.5-1.3-7.8C99.2,395.3,97.5,394.6,95,394.6z"/>
|
||||||
|
|
||||||
|
<linearGradient id="SVGID_10_" gradientUnits="userSpaceOnUse" x1="42.879" y1="2203.667" x2="42.879" y2="2254.552" gradientTransform="matrix(1 0 0 1 86 -1815.5)">
|
||||||
|
<stop offset="0" style="stop-color:#FFFFFE"/>
|
||||||
|
<stop offset="0.4815" style="stop-color:#F2F1F1"/>
|
||||||
|
<stop offset="1" style="stop-color:#E9E7E8"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path fill="url(#SVGID_10_)" d="M115.9,395.5l-0.9-6.5c5.8-1,11.4-1.6,16.7-1.6c4.3,0,7.5,0.9,9.6,2.6c2,1.8,3.1,4.8,3.1,9.2v21.2
|
||||||
|
h-7.6l-1-4.9c-3.2,3.8-7.2,5.7-11.9,5.7c-3.1,0-5.6-0.8-7.6-2.4s-2.9-3.9-2.9-6.8v-3.3c0-2.6,0.9-4.6,2.6-6
|
||||||
|
c1.7-1.4,4.1-2.1,7.2-2.1h11.5v-1.4c0-1.6-0.4-2.8-1.1-3.3c-0.7-0.6-2.1-0.8-4.1-0.8C125.9,394.9,121.4,395.1,115.9,395.5z
|
||||||
|
M122.9,409.4v1.2c0,2.2,1.3,3.3,3.8,3.3c2.6,0,5.3-1,8-3.1v-4.5H126C124,406.4,122.9,407.4,122.9,409.4z"/>
|
||||||
|
|
||||||
|
<linearGradient id="SVGID_11_" gradientUnits="userSpaceOnUse" x1="-136.063" y1="2203.667" x2="-136.063" y2="2254.5491" gradientTransform="matrix(1 0 0 1 86 -1815.5)">
|
||||||
|
<stop offset="0" style="stop-color:#FFFFFE"/>
|
||||||
|
<stop offset="0.4815" style="stop-color:#F2F1F1"/>
|
||||||
|
<stop offset="1" style="stop-color:#E9E7E8"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path fill="url(#SVGID_11_)" d="M-43.5,406.1c-0.9-1.6-1.9-2.7-3-3.5v-0.1c1.3-0.9,2.3-1.9,3-3.1l8.3-11.1H-46l-7.9,11.2h-3
|
||||||
|
c0.3-1.8,0.5-3.7,0.5-5.9v-18.8h-3l-6.7,9.5v36.1h9.6v-10.1c0-1.3-0.2-2.9-0.5-4.8h3.1l9,14.9H-34L-43.5,406.1z"/>
|
||||||
|
|
||||||
|
<linearGradient id="SVGID_12_" gradientUnits="userSpaceOnUse" x1="-16.68" y1="2203.667" x2="-16.68" y2="2254.551" gradientTransform="matrix(1 0 0 1 86 -1815.5)">
|
||||||
|
<stop offset="0" style="stop-color:#FFFFFE"/>
|
||||||
|
<stop offset="0.4815" style="stop-color:#F2F1F1"/>
|
||||||
|
<stop offset="1" style="stop-color:#E9E7E8"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path fill="url(#SVGID_12_)" d="M76.7,413.2h-2.6c-2.4,0-3.6-1.1-3.6-3.3v-35.1h-3l-6.6,9.4v28.2c0,2.8,0.8,5,2.5,6.5
|
||||||
|
c1.6,1.5,3.9,2.3,6.8,2.3c3.5,0,6-0.4,7.7-1.3L76.7,413.2z"/>
|
||||||
|
|
||||||
|
<linearGradient id="SVGID_13_" gradientUnits="userSpaceOnUse" x1="78.107" y1="2203.667" x2="78.107" y2="2254.5491" gradientTransform="matrix(1 0 0 1 86 -1815.5)">
|
||||||
|
<stop offset="0" style="stop-color:#FFFFFE"/>
|
||||||
|
<stop offset="0.4815" style="stop-color:#F2F1F1"/>
|
||||||
|
<stop offset="1" style="stop-color:#E9E7E8"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path fill="url(#SVGID_13_)" d="M170.7,406.1c-0.9-1.6-1.9-2.7-3-3.5v-0.1c1.3-0.9,2.3-1.9,3-3.1l8.3-11.1h-10.8l-7.9,11.2h-3
|
||||||
|
c0.3-1.8,0.5-3.7,0.5-5.9v-18.8h-3l-6.7,9.5v36.1h9.6v-10.1c0-1.3-0.2-2.9-0.5-4.8h3.1l9,14.9h10.8L170.7,406.1z"/>
|
||||||
|
</g>
|
||||||
|
|
||||||
|
<linearGradient id="SVGID_14_" gradientUnits="userSpaceOnUse" x1="-208.281" y1="2186.001" x2="-208.281" y2="2196.1689" gradientTransform="matrix(1 0 0 1 86 -1815.5)">
|
||||||
|
<stop offset="0" style="stop-color:#00639A"/>
|
||||||
|
<stop offset="0.2355" style="stop-color:#00578A"/>
|
||||||
|
<stop offset="0.507" style="stop-color:#004D7B"/>
|
||||||
|
<stop offset="0.7167" style="stop-color:#004773"/>
|
||||||
|
<stop offset="1" style="stop-color:#00446E"/>
|
||||||
|
</linearGradient>
|
||||||
|
<polygon fill="url(#SVGID_14_)" points="-122.3,372.4 -131.3,370.4 -132.3,374.1 -122.3,379.2 -112.2,374.1 -113.2,370.4 "/>
|
||||||
|
<polyline opacity="0.2" enable-background="new " points="-122.3,379.2 -112.2,374.1 -113.2,370.4 -122.3,372.4 "/>
|
||||||
|
<path fill="#034672" d="M-127.2,391.9c3.4,1.3,6.7,1.5,9.8,0.4l-0.3-2.2c-2.6,0.8-6.3,0.7-9.5,0.1L-127.2,391.9z"/>
|
||||||
|
<path fill="#034672" d="M-122.6,391.5c-0.4,2.8,1.9,4.7,1.9,7.6C-116.8,394.8-121.7,393.3-122.6,391.5z"/>
|
||||||
|
<path fill="#034672" d="M-122.6,391.7c-0.1,3.2-0.4,5.6-1.7,7.2C-126.8,394.2-123.7,392.6-122.6,391.7z"/>
|
||||||
|
<circle fill="#034672" cx="-122.6" cy="391.7" r="1.6"/>
|
||||||
|
|
||||||
|
<linearGradient id="SVGID_15_" gradientUnits="userSpaceOnUse" x1="-197.511" y1="2237.772" x2="-197.511" y2="2237.772" gradientTransform="matrix(1 0 0 1 86 -1815.5)">
|
||||||
|
<stop offset="0" style="stop-color:#F6F6F6"/>
|
||||||
|
<stop offset="0.5386" style="stop-color:#E4E4E4"/>
|
||||||
|
<stop offset="1" style="stop-color:#DADADA"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path fill="url(#SVGID_15_)" d="M-111.5,422.3"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 15 KiB |
BIN
finallycoffee/admin/resources/img/select-arrow.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
9
finallycoffee/admin/theme.properties
Normal file → Executable file
@ -1,3 +1,6 @@
|
|||||||
parent=keycloak.v2
|
parent=base
|
||||||
import=common/finallycoffee
|
import=common/keycloak
|
||||||
logo=/img/antifa_trans_pride.png
|
logo=/img/antifa_trans_pride.svg
|
||||||
|
|
||||||
|
styles=css/styles.css
|
||||||
|
stylesCommon=node_modules/patternfly/dist/css/patternfly.min.css node_modules/patternfly/dist/css/patternfly-additions.min.css node_modules/select2/select2.css lib/angular/treeview/css/angular.treeview.css node_modules/text-security/text-security.css
|
||||||
|
1
finallycoffee/common/resources/lib/angular/errors.json
Normal file
20
finallycoffee/common/resources/lib/angular/treeview/LICENSE
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2013 Steve
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
|
the Software without restriction, including without limitation the rights to
|
||||||
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
122
finallycoffee/common/resources/lib/angular/treeview/README.md
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
Angular Treeview
|
||||||
|
================
|
||||||
|
|
||||||
|
Pure [AngularJS](https://www.angularjs.org) based tree menu directive.
|
||||||
|
|
||||||
|
[![ScreenShot](https://github.com/eu81273/angular.treeview/raw/master/img/preview.png)](https://jsfiddle.net/eu81273/8LWUc/)
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
Copy the script and css into your project and add a script and link tag to your page.
|
||||||
|
|
||||||
|
```html
|
||||||
|
<script type="text/javascript" src="/angular.treeview.js"></script>
|
||||||
|
<link rel="stylesheet" type="text/css" href="css/angular.treeview.css">
|
||||||
|
```
|
||||||
|
|
||||||
|
Add a dependency to your application module.
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
angular.module('myApp', ['angularTreeview']);
|
||||||
|
```
|
||||||
|
|
||||||
|
Add a tree to your application. See [Usage](#usage).
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
Attributes of angular treeview are below.
|
||||||
|
|
||||||
|
- angular-treeview: the treeview directive.
|
||||||
|
- tree-id : each tree's unique id.
|
||||||
|
- tree-model : the tree model on $scope.
|
||||||
|
- node-id : each node's id.
|
||||||
|
- node-label : each node's label.
|
||||||
|
- node-children: each node's children.
|
||||||
|
|
||||||
|
Here is a simple example.
|
||||||
|
|
||||||
|
|
||||||
|
```html
|
||||||
|
<div
|
||||||
|
data-angular-treeview="true"
|
||||||
|
data-tree-id="abc"
|
||||||
|
data-tree-model="treedata"
|
||||||
|
data-node-id="id"
|
||||||
|
data-node-label="label"
|
||||||
|
data-node-children="children" >
|
||||||
|
</div>
|
||||||
|
```
|
||||||
|
|
||||||
|
Example model:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
$scope.treedata =
|
||||||
|
[
|
||||||
|
{ "label" : "User", "id" : "role1", "children" : [
|
||||||
|
{ "label" : "subUser1", "id" : "role11", "children" : [] },
|
||||||
|
{ "label" : "subUser2", "id" : "role12", "children" : [
|
||||||
|
{ "label" : "subUser2-1", "id" : "role121", "children" : [
|
||||||
|
{ "label" : "subUser2-1-1", "id" : "role1211", "children" : [] },
|
||||||
|
{ "label" : "subUser2-1-2", "id" : "role1212", "children" : [] }
|
||||||
|
]}
|
||||||
|
]}
|
||||||
|
]},
|
||||||
|
{ "label" : "Admin", "id" : "role2", "children" : [] },
|
||||||
|
{ "label" : "Guest", "id" : "role3", "children" : [] }
|
||||||
|
];
|
||||||
|
```
|
||||||
|
|
||||||
|
## Selection
|
||||||
|
|
||||||
|
If tree node is selected, then that selected tree node is saved to $scope."TREE ID".currentNode. By using $watch, the controller can recognize the tree selection.
|
||||||
|
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
$scope.$watch( 'abc.currentNode', function( newObj, oldObj ) {
|
||||||
|
if( $scope.abc && angular.isObject($scope.abc.currentNode) ) {
|
||||||
|
console.log( 'Node Selected!!' );
|
||||||
|
console.log( $scope.abc.currentNode );
|
||||||
|
}
|
||||||
|
}, false);
|
||||||
|
```
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
#### Basic example
|
||||||
|
[![ScreenShot](https://github.com/eu81273/angular.treeview/raw/master/img/jsfiddle01.png)](https://jsfiddle.net/eu81273/8LWUc/)
|
||||||
|
|
||||||
|
[jsFiddle - http://jsfiddle.net/eu81273/8LWUc/](https://jsfiddle.net/eu81273/8LWUc/)
|
||||||
|
|
||||||
|
#### Multiple treeview example
|
||||||
|
[![ScreenShot](https://github.com/eu81273/angular.treeview/raw/master/img/jsfiddle02.png)](https://jsfiddle.net/eu81273/b9Pnw/)
|
||||||
|
|
||||||
|
[jsFiddle - http://jsfiddle.net/eu81273/b9Pnw/](https://jsfiddle.net/eu81273/b9Pnw/)
|
||||||
|
|
||||||
|
## Browser Compatibility
|
||||||
|
|
||||||
|
Same with AngularJS. Safari, Chrome, Firefox, Opera, IE8, IE9 and mobile browsers (Android, Chrome Mobile, iOS Safari).
|
||||||
|
|
||||||
|
## Changelogs
|
||||||
|
|
||||||
|
#### version 0.1.6
|
||||||
|
- Fixed the bug that 'null' string appears before each 'div' generated. (Thanks to Iaac)
|
||||||
|
|
||||||
|
#### version 0.1.5
|
||||||
|
- support multiple treeview. (Thanks to Axel Pesme)
|
||||||
|
|
||||||
|
#### version 0.1.4
|
||||||
|
- prevented memory leaks.
|
||||||
|
|
||||||
|
#### version 0.1.3
|
||||||
|
- removed unnecessary codes.
|
||||||
|
|
||||||
|
#### version 0.1.2
|
||||||
|
- removed some jQuery dependency. (Issue #2)
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
The MIT License.
|
||||||
|
|
||||||
|
Copyright ⓒ 2013 AHN JAE-HA.
|
||||||
|
|
||||||
|
See [LICENSE](https://github.com/eu81273/angular.treeview/blob/master/LICENSE)
|
95
finallycoffee/common/resources/lib/angular/treeview/angular.treeview.js
Executable file
@ -0,0 +1,95 @@
|
|||||||
|
/*
|
||||||
|
@license Angular Treeview version 0.1.6
|
||||||
|
ⓒ 2013 AHN JAE-HA http://github.com/eu81273/angular.treeview
|
||||||
|
License: MIT
|
||||||
|
|
||||||
|
|
||||||
|
[TREE attribute]
|
||||||
|
angular-treeview: the treeview directive
|
||||||
|
tree-id : each tree's unique id.
|
||||||
|
tree-model : the tree model on $scope.
|
||||||
|
node-id : each node's id
|
||||||
|
node-label : each node's label
|
||||||
|
node-children: each node's children
|
||||||
|
|
||||||
|
<div
|
||||||
|
data-angular-treeview="true"
|
||||||
|
data-tree-id="tree"
|
||||||
|
data-tree-model="roleList"
|
||||||
|
data-node-id="roleId"
|
||||||
|
data-node-label="roleName"
|
||||||
|
data-node-children="children" >
|
||||||
|
</div>
|
||||||
|
*/
|
||||||
|
|
||||||
|
(function ( angular ) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
angular.module( 'angularTreeview', [] ).directive( 'treeModel', ['$compile', function( $compile ) {
|
||||||
|
return {
|
||||||
|
restrict: 'A',
|
||||||
|
link: function ( scope, element, attrs ) {
|
||||||
|
//tree id
|
||||||
|
var treeId = attrs.treeId;
|
||||||
|
|
||||||
|
//tree model
|
||||||
|
var treeModel = attrs.treeModel;
|
||||||
|
|
||||||
|
//node id
|
||||||
|
var nodeId = attrs.nodeId || 'id';
|
||||||
|
|
||||||
|
//node label
|
||||||
|
var nodeLabel = attrs.nodeLabel || 'label';
|
||||||
|
|
||||||
|
//children
|
||||||
|
var nodeChildren = attrs.nodeChildren || 'children';
|
||||||
|
|
||||||
|
//tree template
|
||||||
|
var template =
|
||||||
|
'<ul>' +
|
||||||
|
'<li data-ng-repeat="node in ' + treeModel + '">' +
|
||||||
|
'<i ng-class="getGroupClass(node)" data-ng-click="' + treeId + '.selectNodeHead(node)"></i>' +
|
||||||
|
'<span data-ng-class="getSelectedClass(node)" ng-dblclick="edit(node)" data-ng-click="' + treeId + '.selectNodeLabel(node)">{{node.' + nodeLabel + '}}</span>' +
|
||||||
|
'<div data-ng-hide="node.collapsed" data-tree-id="' + treeId + '" data-tree-model="node.' + nodeChildren + '" data-node-id=' + nodeId + ' data-node-label=' + nodeLabel + ' data-node-children=' + nodeChildren + '></div>' +
|
||||||
|
'</li>' +
|
||||||
|
'</ul>';
|
||||||
|
|
||||||
|
//check tree id, tree model
|
||||||
|
if( treeId && treeModel ) {
|
||||||
|
//root node
|
||||||
|
if( attrs.angularTreeview ) {
|
||||||
|
|
||||||
|
//create tree object if not exists
|
||||||
|
scope[treeId] = scope[treeId] || {};
|
||||||
|
|
||||||
|
//if node head clicks,
|
||||||
|
scope[treeId].selectNodeHead = scope[treeId].selectNodeHead || function( selectedNode ){
|
||||||
|
|
||||||
|
//Collapse or Expand
|
||||||
|
selectedNode.collapsed = !selectedNode.collapsed;
|
||||||
|
scope[treeId].selectNodeLabel(selectedNode);
|
||||||
|
};
|
||||||
|
|
||||||
|
//if node label clicks,
|
||||||
|
scope[treeId].selectNodeLabel = scope[treeId].selectNodeLabel || function( selectedNode ){
|
||||||
|
|
||||||
|
//remove highlight from previous node
|
||||||
|
if( scope[treeId].currentNode && scope[treeId].currentNode.selected ) {
|
||||||
|
scope[treeId].currentNode.selected = undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
//set highlight to selected node
|
||||||
|
selectedNode.selected = 'selected';
|
||||||
|
|
||||||
|
//set currentNode
|
||||||
|
scope[treeId].currentNode = selectedNode;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
//Rendering template.
|
||||||
|
element.html('').append( $compile( template )( scope ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}]);
|
||||||
|
})( angular );
|
9
finallycoffee/common/resources/lib/angular/treeview/angular.treeview.min.js
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
/*
|
||||||
|
@license Angular Treeview version 0.1.6
|
||||||
|
ⓒ 2013 AHN JAE-HA http://github.com/eu81273/angular.treeview
|
||||||
|
License: MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
(function(f){f.module("angularTreeview",[]).directive("treeModel",function($compile){return{restrict:"A",link:function(b,h,c){var a=c.treeId,g=c.treeModel,e=c.nodeLabel||"label",d=c.nodeChildren||"children",e='<ul><li data-ng-repeat="node in '+g+'"><i class="collapsed" data-ng-show="node.'+d+'.length && node.collapsed" data-ng-click="'+a+'.selectNodeHead(node)"></i><i class="expanded" data-ng-show="node.'+d+'.length && !node.collapsed" data-ng-click="'+a+'.selectNodeHead(node)"></i><i class="normal" data-ng-hide="node.'+
|
||||||
|
d+'.length"></i> <span data-ng-class="node.selected" data-ng-click="'+a+'.selectNodeLabel(node)">{{node.'+e+'}}</span><div data-ng-hide="node.collapsed" data-tree-id="'+a+'" data-tree-model="node.'+d+'" data-node-id='+(c.nodeId||"id")+" data-node-label="+e+" data-node-children="+d+"></div></li></ul>";a&&g&&(c.angularTreeview&&(b[a]=b[a]||{},b[a].selectNodeHead=b[a].selectNodeHead||function(a){a.collapsed=!a.collapsed},b[a].selectNodeLabel=b[a].selectNodeLabel||function(c){b[a].currentNode&&b[a].currentNode.selected&&
|
||||||
|
(b[a].currentNode.selected=void 0);c.selected="selected";b[a].currentNode=c}),h.html('').append($compile(e)(b)))}}})})(angular);
|
99
finallycoffee/common/resources/lib/angular/treeview/css/angular.treeview.css
Executable file
@ -0,0 +1,99 @@
|
|||||||
|
div[angular-treeview] {
|
||||||
|
/* prevent user selection */
|
||||||
|
-moz-user-select: -moz-none;
|
||||||
|
-khtml-user-select: none;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
|
||||||
|
/* default */
|
||||||
|
font-family: Tahoma;
|
||||||
|
font-size:13px;
|
||||||
|
color: #555;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
div[tree-model] ul {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
list-style: none;
|
||||||
|
border: none;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
div[tree-model] li {
|
||||||
|
position: relative;
|
||||||
|
padding: 0 0 0 20px;
|
||||||
|
line-height: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div[tree-model] li .expanded {
|
||||||
|
padding: 1px 10px;
|
||||||
|
background-image: url("../img/folder.png");
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
div[tree-model] li .collapsed {
|
||||||
|
padding: 1px 10px;
|
||||||
|
background-image: url("../img/folder-closed.png");
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
div[tree-model] li .normal {
|
||||||
|
padding: 1px 10px;
|
||||||
|
background-image: url("../img/file.png");
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
div[tree-model] li i, div[tree-model] li span {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
div[tree-model] li .selected {
|
||||||
|
background-color: #aaddff;
|
||||||
|
font-weight: bold;
|
||||||
|
padding: 1px 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div[tree-model] li .cut {
|
||||||
|
font-weight: bold;
|
||||||
|
color: gray
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
.angular-ui-tree-handle {
|
||||||
|
cursor: grab;
|
||||||
|
text-decoration: none;
|
||||||
|
font-weight: bold;
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
min-height: 20px;
|
||||||
|
line-height: 20px;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
.angular-ui-tree-handle {
|
||||||
|
/* background: #f8faff; */
|
||||||
|
/*
|
||||||
|
color: #7c9eb2; */
|
||||||
|
border: 1px solid #dae2ea;
|
||||||
|
padding: 10px 10px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.expanded-folder {
|
||||||
|
padding: 1px 10px;
|
||||||
|
background-image: url("../img/folder.png");
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.collapsed-folder {
|
||||||
|
padding: 1px 10px;
|
||||||
|
background-image: url("../img/folder-closed.png");
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
BIN
finallycoffee/common/resources/lib/angular/treeview/img/file.png
Normal file
After Width: | Height: | Size: 263 B |
After Width: | Height: | Size: 281 B |
After Width: | Height: | Size: 289 B |
1
finallycoffee/common/resources/lib/angular/version.json
Executable file
@ -0,0 +1 @@
|
|||||||
|
{"raw":"v1.4.4","major":1,"minor":4,"patch":4,"prerelease":[],"build":[],"version":"1.4.4","codeName":"pylon-requirement","full":"1.4.4","branch":"v1.4.x","cdn":{"raw":"v1.4.3","major":1,"minor":4,"patch":3,"prerelease":[],"build":[],"version":"1.4.3","docsUrl":"http://code.angularjs.org/1.4.3/docs"}}
|
188
finallycoffee/common/resources/lib/filesaver/FileSaver.js
Normal file
@ -0,0 +1,188 @@
|
|||||||
|
/* FileSaver.js
|
||||||
|
* A saveAs() FileSaver implementation.
|
||||||
|
* 1.3.2
|
||||||
|
* 2016-06-16 18:25:19
|
||||||
|
*
|
||||||
|
* By Eli Grey, http://eligrey.com
|
||||||
|
* License: MIT
|
||||||
|
* See https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*global self */
|
||||||
|
/*jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true */
|
||||||
|
|
||||||
|
/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */
|
||||||
|
|
||||||
|
var saveAs = saveAs || (function(view) {
|
||||||
|
"use strict";
|
||||||
|
// IE <10 is explicitly unsupported
|
||||||
|
if (typeof view === "undefined" || typeof navigator !== "undefined" && /MSIE [1-9]\./.test(navigator.userAgent)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var
|
||||||
|
doc = view.document
|
||||||
|
// only get URL when necessary in case Blob.js hasn't overridden it yet
|
||||||
|
, get_URL = function() {
|
||||||
|
return view.URL || view.webkitURL || view;
|
||||||
|
}
|
||||||
|
, save_link = doc.createElementNS("http://www.w3.org/1999/xhtml", "a")
|
||||||
|
, can_use_save_link = "download" in save_link
|
||||||
|
, click = function(node) {
|
||||||
|
var event = new MouseEvent("click");
|
||||||
|
node.dispatchEvent(event);
|
||||||
|
}
|
||||||
|
, is_safari = /constructor/i.test(view.HTMLElement) || view.safari
|
||||||
|
, is_chrome_ios =/CriOS\/[\d]+/.test(navigator.userAgent)
|
||||||
|
, throw_outside = function(ex) {
|
||||||
|
(view.setImmediate || view.setTimeout)(function() {
|
||||||
|
throw ex;
|
||||||
|
}, 0);
|
||||||
|
}
|
||||||
|
, force_saveable_type = "application/octet-stream"
|
||||||
|
// the Blob API is fundamentally broken as there is no "downloadfinished" event to subscribe to
|
||||||
|
, arbitrary_revoke_timeout = 1000 * 40 // in ms
|
||||||
|
, revoke = function(file) {
|
||||||
|
var revoker = function() {
|
||||||
|
if (typeof file === "string") { // file is an object URL
|
||||||
|
get_URL().revokeObjectURL(file);
|
||||||
|
} else { // file is a File
|
||||||
|
file.remove();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
setTimeout(revoker, arbitrary_revoke_timeout);
|
||||||
|
}
|
||||||
|
, dispatch = function(filesaver, event_types, event) {
|
||||||
|
event_types = [].concat(event_types);
|
||||||
|
var i = event_types.length;
|
||||||
|
while (i--) {
|
||||||
|
var listener = filesaver["on" + event_types[i]];
|
||||||
|
if (typeof listener === "function") {
|
||||||
|
try {
|
||||||
|
listener.call(filesaver, event || filesaver);
|
||||||
|
} catch (ex) {
|
||||||
|
throw_outside(ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
, auto_bom = function(blob) {
|
||||||
|
// prepend BOM for UTF-8 XML and text/* types (including HTML)
|
||||||
|
// note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF
|
||||||
|
if (/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) {
|
||||||
|
return new Blob([String.fromCharCode(0xFEFF), blob], {type: blob.type});
|
||||||
|
}
|
||||||
|
return blob;
|
||||||
|
}
|
||||||
|
, FileSaver = function(blob, name, no_auto_bom) {
|
||||||
|
if (!no_auto_bom) {
|
||||||
|
blob = auto_bom(blob);
|
||||||
|
}
|
||||||
|
// First try a.download, then web filesystem, then object URLs
|
||||||
|
var
|
||||||
|
filesaver = this
|
||||||
|
, type = blob.type
|
||||||
|
, force = type === force_saveable_type
|
||||||
|
, object_url
|
||||||
|
, dispatch_all = function() {
|
||||||
|
dispatch(filesaver, "writestart progress write writeend".split(" "));
|
||||||
|
}
|
||||||
|
// on any filesys errors revert to saving with object URLs
|
||||||
|
, fs_error = function() {
|
||||||
|
if ((is_chrome_ios || (force && is_safari)) && view.FileReader) {
|
||||||
|
// Safari doesn't allow downloading of blob urls
|
||||||
|
var reader = new FileReader();
|
||||||
|
reader.onloadend = function() {
|
||||||
|
var url = is_chrome_ios ? reader.result : reader.result.replace(/^data:[^;]*;/, 'data:attachment/file;');
|
||||||
|
var popup = view.open(url, '_blank');
|
||||||
|
if(!popup) view.location.href = url;
|
||||||
|
url=undefined; // release reference before dispatching
|
||||||
|
filesaver.readyState = filesaver.DONE;
|
||||||
|
dispatch_all();
|
||||||
|
};
|
||||||
|
reader.readAsDataURL(blob);
|
||||||
|
filesaver.readyState = filesaver.INIT;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// don't create more object URLs than needed
|
||||||
|
if (!object_url) {
|
||||||
|
object_url = get_URL().createObjectURL(blob);
|
||||||
|
}
|
||||||
|
if (force) {
|
||||||
|
view.location.href = object_url;
|
||||||
|
} else {
|
||||||
|
var opened = view.open(object_url, "_blank");
|
||||||
|
if (!opened) {
|
||||||
|
// Apple does not allow window.open, see https://developer.apple.com/library/safari/documentation/Tools/Conceptual/SafariExtensionGuide/WorkingwithWindowsandTabs/WorkingwithWindowsandTabs.html
|
||||||
|
view.location.href = object_url;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
filesaver.readyState = filesaver.DONE;
|
||||||
|
dispatch_all();
|
||||||
|
revoke(object_url);
|
||||||
|
}
|
||||||
|
;
|
||||||
|
filesaver.readyState = filesaver.INIT;
|
||||||
|
|
||||||
|
if (can_use_save_link) {
|
||||||
|
object_url = get_URL().createObjectURL(blob);
|
||||||
|
setTimeout(function() {
|
||||||
|
save_link.href = object_url;
|
||||||
|
save_link.download = name;
|
||||||
|
click(save_link);
|
||||||
|
dispatch_all();
|
||||||
|
revoke(object_url);
|
||||||
|
filesaver.readyState = filesaver.DONE;
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
fs_error();
|
||||||
|
}
|
||||||
|
, FS_proto = FileSaver.prototype
|
||||||
|
, saveAs = function(blob, name, no_auto_bom) {
|
||||||
|
return new FileSaver(blob, name || blob.name || "download", no_auto_bom);
|
||||||
|
}
|
||||||
|
;
|
||||||
|
// IE 10+ (native saveAs)
|
||||||
|
if (typeof navigator !== "undefined" && navigator.msSaveOrOpenBlob) {
|
||||||
|
return function(blob, name, no_auto_bom) {
|
||||||
|
name = name || blob.name || "download";
|
||||||
|
|
||||||
|
if (!no_auto_bom) {
|
||||||
|
blob = auto_bom(blob);
|
||||||
|
}
|
||||||
|
return navigator.msSaveOrOpenBlob(blob, name);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
FS_proto.abort = function(){};
|
||||||
|
FS_proto.readyState = FS_proto.INIT = 0;
|
||||||
|
FS_proto.WRITING = 1;
|
||||||
|
FS_proto.DONE = 2;
|
||||||
|
|
||||||
|
FS_proto.error =
|
||||||
|
FS_proto.onwritestart =
|
||||||
|
FS_proto.onprogress =
|
||||||
|
FS_proto.onwrite =
|
||||||
|
FS_proto.onabort =
|
||||||
|
FS_proto.onerror =
|
||||||
|
FS_proto.onwriteend =
|
||||||
|
null;
|
||||||
|
|
||||||
|
return saveAs;
|
||||||
|
}(
|
||||||
|
typeof self !== "undefined" && self
|
||||||
|
|| typeof window !== "undefined" && window
|
||||||
|
|| this.content
|
||||||
|
));
|
||||||
|
// `self` is undefined in Firefox for Android content script context
|
||||||
|
// while `this` is nsIContentFrameMessageManager
|
||||||
|
// with an attribute `content` that corresponds to the window
|
||||||
|
|
||||||
|
if (typeof module !== "undefined" && module.exports) {
|
||||||
|
module.exports.saveAs = saveAs;
|
||||||
|
} else if ((typeof define !== "undefined" && define !== null) && (define.amd !== null)) {
|
||||||
|
define("FileSaver.js", function() {
|
||||||
|
return saveAs;
|
||||||
|
});
|
||||||
|
}
|
72
finallycoffee/common/resources/lib/fileupload/FileAPI.min.js
vendored
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
/**!
|
||||||
|
* FileAPI — a set of tools for working with files
|
||||||
|
*
|
||||||
|
* @author RubaXa <trash@rubaxa.org>
|
||||||
|
* @build lib/canvas-to-blob lib/FileAPI.core lib/FileAPI.Image lib/FileAPI.Form lib/FileAPI.XHR lib/FileAPI.Flash
|
||||||
|
*/
|
||||||
|
(function(a){var k=a.HTMLCanvasElement&&a.HTMLCanvasElement.prototype,g;if(g=a.Blob)try{g=Boolean(new Blob)}catch(j){g=!1}var m=g;if(g=m)if(g=a.Uint8Array)try{g=100===(new Blob([new Uint8Array(100)])).size}catch(f){g=!1}var c=g,e=a.BlobBuilder||a.WebKitBlobBuilder||a.MozBlobBuilder||a.MSBlobBuilder,q=(m||e)&&a.atob&&a.ArrayBuffer&&a.Uint8Array&&function(a){var l,f,u,g;l=0<=a.split(",")[0].indexOf("base64")?atob(a.split(",")[1]):decodeURIComponent(a.split(",")[1]);f=new ArrayBuffer(l.length);u=new Uint8Array(f);
|
||||||
|
for(g=0;g<l.length;g+=1)u[g]=l.charCodeAt(g);a=a.split(",")[0].split(":")[1].split(";")[0];if(m)return new Blob([c?u:f],{type:a});u=new e;u.append(f);return u.getBlob(a)};a.HTMLCanvasElement&&!k.toBlob&&(k.mozGetAsFile?k.toBlob=function(a,c){a(this.mozGetAsFile("blob",c))}:k.toDataURL&&q&&(k.toBlob=function(a,c){a(q(this.toDataURL(c)))}));"function"===typeof define&&define.amd?define(function(){return q}):a.dataURLtoBlob=q})(this);
|
||||||
|
(function(a,k){function g(b,E,a){if(b)if(l(b))for(var d=0,c=b.length;d<c;d++)d in b&&E.call(a,b[d],d,b);else for(d in b)b.hasOwnProperty(d)&&E.call(a,b[d],d,b)}function j(b,d,a){if(b){var c=h.uid(b);D[c]||(D[c]={});g(d.split(/\s+/),function(d){n?n.event.add(b,d,a):(D[c][d]||(D[c][d]=[]),D[c][d].push(a),b.addEventListener?b.addEventListener(d,a,!1):b.attachEvent?b.attachEvent("on"+d,a):b["on"+d]=a)})}}function m(b,d,a){if(b){var c=h.uid(b),e=D[c]||{};g(d.split(/\s+/),function(d){if(n)n.event.remove(b,
|
||||||
|
d,a);else{for(var E=e[d]||[],c=E.length;c--;)if(E[c]===a){E.splice(c,1);break}b.addEventListener?b.removeEventListener(d,a,!1):b.detachEvent?b.detachEvent("on"+d,a):b["on"+d]=null}})}}function f(b,d,a){j(b,d,function P(c){m(b,d,P);a(c)})}function c(b,d,a,c,e){b={type:a.type||a,target:b,result:c};h.extend(b,e);d(b)}function e(b,d,a,e){if(h.isFile(b)&&p&&p.prototype["readAs"+a]){var n=new p;j(n,K,function Q(a){var e=a.type;"progress"==e?c(b,d,a,a.target.result,{loaded:a.loaded,total:a.total}):"loadend"==
|
||||||
|
e?(m(n,K,Q),n=null):c(b,d,a,a.target.result)});try{if(e)n["readAs"+a](e,b);else n["readAs"+a](b)}catch(l){c(b,d,"error",k,{error:l.toString()})}}else c(b,d,"error",k,{error:"filreader_not_support_"+a})}function q(b){var d;b.getAsEntry?d=b.getAsEntry():b.webkitGetAsEntry&&(d=b.webkitGetAsEntry());return d}function t(b,d){if(b)if(b.isFile)b.file(function(b){d(!1,[b])},function(){d("entry_file")});else if(b.isDirectory){var a=[];b.createReader().readEntries(function(b){h.afor(b,function(b,c){t(c,function(c,
|
||||||
|
e){c||(a=a.concat(e));b?b():d(!1,a)})})},function(){d("directory_reader")})}else t(q(b),d);else d("empty_entry")}function l(b){return"object"==typeof b&&b&&"length"in b}function A(b){b.target||(b.target=a.event&&a.event.srcElement||M);3===b.target.nodeType&&(b.target=event.target.parentNode);return b}var u=1,C=function(){},s=navigator.userAgent,y=a.createObjectURL&&a||a.URL&&URL.revokeObjectURL&&URL||a.webkitURL&&webkitURL,r=a.Blob,v=a.File,p=a.FileReader,w=a.FormData,d=a.XMLHttpRequest,n=a.jQuery,
|
||||||
|
x=!(!v||!p||!a.Uint8Array&&!w&&!d.prototype.sendAsBinary)&&!(/safari\//i.test(s)&&!/chrome\//i.test(s)&&/windows/i.test(s)),s=x&&"withCredentials"in new d,r=x&&!!r&&!(!r.prototype.webkitSlice&&!r.prototype.mozSlice&&!r.prototype.slice),M=a.document,F=a.dataURLtoBlob,T=/img/i,U=/canvas/i,V=/img|canvas/,L=/input/i,I=/^data:[^,]+,/,G=Math.pow,W=Math.round,z=Number,w=function(b){return W(b*this)},H=new z(1024),N=new z(G(H,2)),J=new z(G(H,3)),G=new z(G(H,4)),D={},O=[],K="abort progress error load loadend",
|
||||||
|
X="status statusText readyState response responseXML responseText responseBody".split(" "),h={version:"1.2.5",cors:!1,html5:!0,debug:!1,pingUrl:!1,withCredentials:!0,staticPath:"./",flashUrl:0,flashImageUrl:0,accept:{"image/*":"art bm bmp dwg dxf cbr cbz fif fpx gif ico iefs jfif jpe jpeg jpg jps jut mcf nap nif pbm pcx pgm pict pm png pnm qif qtif ras rast rf rp svf tga tif tiff xbm xbm xpm xwd","audio/*":"m4a flac aac rm mpa wav wma ogg mp3 mp2 m3u mod amf dmf dsm far gdm imf it m15 med okt s3m stm sfx ult uni xm sid ac3 dts cue aif aiff wpl ape mac mpc mpp shn wv nsf spc gym adplug adx dsp adp ymf ast afc hps xs",
|
||||||
|
"video/*":"m4v 3gp nsv ts ty strm rm rmvb m3u ifo mov qt divx xvid bivx vob nrg img iso pva wmv asf asx ogm m2v avi bin dat dvr-ms mpg mpeg mp4 mkv avc vp3 svq3 nuv viv dv fli flv wpl"},chunkSize:0,chunkUploadRetry:0,chunkNetworkDownRetryTimeout:2E3,KB:(H.from=w,H),MB:(N.from=w,N),GB:(J.from=w,J),TB:(G.from=w,G),expando:"fileapi"+(new Date).getTime(),uid:function(b){return b?b[h.expando]=b[h.expando]||h.uid():(++u,h.expando+u)},log:function(){h.debug&&(a.console&&console.log)&&(console.log.apply?
|
||||||
|
console.log.apply(console,arguments):console.log([].join.call(arguments," ")))},getXHR:function(){var b;if(d)b=new d;else if(a.ActiveXObject)try{b=new ActiveXObject("MSXML2.XMLHttp.3.0")}catch(c){b=new ActiveXObject("Microsoft.XMLHTTP")}return b},isArray:l,support:{dnd:s&&"ondrop"in M.createElement("div"),cors:s,html5:x,chunked:r,dataURI:!0},event:{on:j,off:m,one:f,fix:A},throttle:function(b,d){var c,e;return function(){e=arguments;c||(b.apply(a,e),c=setTimeout(function(){c=0;b.apply(a,e)},d))}},
|
||||||
|
F:function(){},parseJSON:function(b){return a.JSON&&JSON.parse?JSON.parse(b):(new Function("return ("+b.replace(/([\r\n])/g,"\\$1")+");"))()},trim:function(b){b=String(b);return b.trim?b.trim():b.replace(/^\s+|\s+$/g,"")},defer:function(){var b=[],d,a,c={resolve:function(e,n){c.resolve=C;a=e||!1;for(d=n;n=b.shift();)n(a,d)},then:function(c){a!==k?c(a,d):b.push(c)}};return c},queue:function(b){var d=0,a=0,c=!1,e=!1,n={inc:function(){a++},next:function(){d++;setTimeout(n.check,0)},check:function(){d>=
|
||||||
|
a&&!c&&n.end()},isFail:function(){return c},fail:function(){!c&&b(c=!0)},end:function(){e||(e=!0,b())}};return n},each:g,afor:function(b,d){var a=0,c=b.length;l(b)&&c--?function B(){d(c!=a&&B,b[a],a++)}():d(!1)},extend:function(b){g(arguments,function(d){g(d,function(d,a){b[a]=d})});return b},isFile:function(b){return x&&b&&b instanceof v},isCanvas:function(b){return b&&U.test(b.nodeName)},getFilesFilter:function(b){return(b="string"==typeof b?b:b.getAttribute&&b.getAttribute("accept")||"")?RegExp("("+
|
||||||
|
b.replace(/\./g,"\\.").replace(/,/g,"|")+")$","i"):/./},readAsDataURL:function(b,d){h.isCanvas(b)?c(b,d,"load",h.toDataURL(b)):e(b,d,"DataURL")},readAsBinaryString:function(b,d){p&&p.prototype.readAsBinaryString?e(b,d,"BinaryString"):e(b,function(b){if("load"==b.type)try{b.result=h.toBinaryString(b.result)}catch(a){b.type="error",b.message=a.toString()}d(b)},"DataURL")},readAsArrayBuffer:function(b,d){e(b,d,"ArrayBuffer")},readAsText:function(b,d,a){a||(a=d,d="utf-8");e(b,a,"Text",d)},toDataURL:function(b){if("string"==
|
||||||
|
typeof b)return b;if(b.toDataURL)return b.toDataURL("image/png")},toBinaryString:function(b){return a.atob(h.toDataURL(b).replace(I,""))},readAsImage:function(b,d,a){if(h.isFile(b))if(y){var e=y.createObjectURL(b);e===k?c(b,d,"error"):h.readAsImage(e,d,a)}else h.readAsDataURL(b,function(e){"load"==e.type?h.readAsImage(e.result,d,a):(a||"error"==e.type)&&c(b,d,e,null,{loaded:e.loaded,total:e.total})});else h.isCanvas(b)?c(b,d,"load",b):T.test(b.nodeName)?b.complete?c(b,d,"load",b):f(b,"error abort load",
|
||||||
|
function B(a){"load"==a.type&&y&&y.revokeObjectURL(b.src);m(b,"error abort load",B);c(b,d,a,b)}):b.iframe?c(b,d,{type:"error"}):(e=new Image,e.src=b.dataURL||b,h.readAsImage(e,d,a))},checkFileObj:function(b){var d={},a=h.accept;"object"==typeof b?d=b:d.name=(b+"").split(/\\|\//g).pop();null==d.type&&(d.type=d.name.split(".").pop());g(a,function(b,a){b=RegExp(b.replace(/\s/g,"|"),"i");b.test(d.type)&&(d.type=a.split("/")[0]+"/"+d.type)});return d},getDropFiles:function(b,d){var a=[],c=(b.originalEvent||
|
||||||
|
b||"").dataTransfer||{},e=l(c.items)&&c.items[0]&&q(c.items[0]),n=h.queue(function(){d(a)});g((e?c.items:c.files)||[],function(b){n.inc();if(e)t(b,function(b,d){!b&&a.push.apply(a,d);n.next()});else{var d=function(d){d&&a.push(b);n.next()};if(!b.type&&0==b.size%4096&&102400>=b.size)if(p)try{var c=new p;f(c,K,function(b){b="error"!=b.type;d(b);b&&c.abort()});c.readAsDataURL(b)}catch(l){d(!1)}else d(null);else d(!0)}});n.check()},getFiles:function(b,d,a){var c=[];if(a)return h.filterFiles(h.getFiles(b),
|
||||||
|
d,a),null;b.jquery&&(b.each(function(){c=c.concat(h.getFiles(this))}),b=c,c=[]);"string"==typeof d&&(d=h.getFilesFilter(d));b.originalEvent?b=A(b.originalEvent):b.srcElement&&(b=A(b));b.dataTransfer?b=b.dataTransfer:b.target&&(b=b.target);b.files?c=b.files:!x&&L.test(b&&b.tagName)?h.trim(b.value)&&(c=[h.checkFileObj(b.value)],c[0].blob=b,c[0].iframe=!0):l(b)&&(c=b);return h.filter(c,function(b){return!d||d.test(b.name)})},getInfo:function(b,d){var a={},c=O.concat();h.isFile(b)?function B(){var e=
|
||||||
|
c.shift();e?e.test(b.type)?e(b,function(b,c){b?d(b):(h.extend(a,c),B())}):B():d(!1,a)}():d("not_support",a)},addInfoReader:function(b,d){d.test=function(d){return b.test(d)};O.push(d)},filter:function(b,d){for(var a=[],c=0,e=b.length,n;c<e;c++)c in b&&(n=b[c],d.call(n,n,c,b)&&a.push(n));return a},filterFiles:function(b,d,a){if(b.length){var c=b.concat(),e,n=[],l=[];(function R(){c.length?(e=c.shift(),h.getInfo(e,function(b,a){(d(e,b?!1:a)?n:l).push(e);R()})):a(n,l)})()}else a([],b)},upload:function(b){b=
|
||||||
|
h.extend({prepare:h.F,beforeupload:h.F,upload:h.F,fileupload:h.F,fileprogress:h.F,filecomplete:h.F,progress:h.F,complete:h.F,pause:h.F,chunkSize:h.chunkSize,chunkUpoloadRetry:h.chunkUploadRetry},b);b.imageAutoOrientation&&!b.imageTransform&&(b.imageTransform={rotate:"auto"});var d=new h.XHR(b),a=this._getFilesDataArray(b.files),c=0,e=0,n=this,l,f=!1;g(a,function(b){c+=b.size});d.files=[];g(a,function(b){d.files.push(b.file)});d.total=c;d.loaded=0;b.beforeupload(d,b);(l=function S(){var l=a.shift(),
|
||||||
|
t=l&&l.file,x=!1,u={};g(b,function(b,d){b&&"object"===typeof b&&(b=h.extend({},b));u[d]=b});t&&t.name===h.expando&&(t=null,h.log("[warn] FileAPI.upload() \u2014 called without files"));("abort"!=d.statusText||d.current)&&l?(f=!1,(d.currentFile=t)&&b.prepare(t,u),this._getFormData(u,l,function(a){e||b.upload(d,b);var f=new h.XHR(h.extend({},u,{upload:t?function(){b.fileupload(t,f,u)}:C,progress:t?function(a){x||(b.fileprogress({type:"progress",total:l.total=a.total,loaded:l.loaded=a.loaded},t,f,u),
|
||||||
|
b.progress({type:"progress",total:c,loaded:d.loaded=e+l.size*(a.loaded/a.total)|0},t,f,u))}:C,complete:function(a){x=!0;g(X,function(b){d[b]=f[b]});t&&(l.loaded=l.total,this.progress(l),e+=l.size,d.loaded=e,b.filecomplete(a,f,t,u));S.call(n)}}));d.abort=function(b){this.current=b;f.abort()};f.send(a)})):(b.complete(200==d.status||201==d.status?!1:d.statusText||"error",d,b),f=!0)}).call(this);d.append=function(b,e){b=h._getFilesDataArray([].concat(b));g(b,function(b){c+=b.size;d.files.push(b.file);
|
||||||
|
e?a.unshift(b):a.push(b)});f&&l.call(n)};d.remove=function(b){var d=-1;g(a,function(c){d++;if(c.file==b)return a.splice(d,1)})};return d},_getFilesDataArray:function(b){var d=[],a={};if(L.test(b&&b.tagName)){var c=h.getFiles(b);a[b.name||"file"]=null!==b.getAttribute("multiple")?c:c[0]}else l(b)&&L.test(b[0]&&b[0].tagName)?g(b,function(b){a[b.name||"file"]=h.getFiles(b)}):a=b;g(a,function B(b,a){l(b)?g(b,function(b){B(b,a)}):b&&b.name&&d.push({name:a,file:b,size:b.size,total:b.size,loaded:0})});d.length||
|
||||||
|
d.push({file:{name:h.expando}});return d},_getFormData:function(b,d,a){var c=d.file,e=d.name,n=c.name,l=c.type;d=h.support.transform&&b.imageTransform;var f=new h.Form,t=h.queue(function(){a(f)}),x=d&&(0<parseInt(d.maxWidth||d.minWidth||d.width,10)||d.rotate);h.Image&&d&&(/image/.test(c.type)||V.test(c.nodeType))?(t.inc(),x&&(d=[d]),h.Image.transform(c,d,b.imageAutoOrientation,function(d,a){x&&!d?(!F&&!h.flashEngine&&(a[0]=h.toBinaryString(a[0]),f.multipart=!0),f.append(e,a[0],n,l)):(d||(g(a,function(b,
|
||||||
|
d){!F&&!h.flashEngine&&(b=h.toBinaryString(b),f.multipart=!0);f.append(e+"["+d+"]",b,n,l)}),e+="[original]"),(d||b.imageOriginal)&&f.append(e,c,n,l));t.next()})):n!==h.expando&&f.append(e,c,n);g(b.data,function Y(b,d){"object"==typeof b?g(b,function(b,a){Y(b,d+"["+a+"]")}):f.append(d,b)});t.check()},reset:function(b){var d,a;n?(a=n(b).clone(!0).insertBefore(b).val("")[0],n(b).remove()):(d=b.parentNode,a=d.insertBefore(b.cloneNode(!0),b),a.value="",d.removeChild(b),g(D[h.uid(b)],function(d,c){g(d,
|
||||||
|
function(d){m(b,c,d);j(a,c,d)})}));return a},load:function(b,d){var a=h.getXHR();a?(a.open("GET",b,!0),a.overrideMimeType&&a.overrideMimeType("text/plain; charset=x-user-defined"),j(a,"progress",function(b){b.lengthComputable&&d({type:b.type,loaded:b.loaded,total:b.total},a)}),a.onreadystatechange=function(){if(4==a.readyState)if(a.onreadystatechange=null,200==a.status){b=b.split("/");var c={name:b[b.length-1],size:a.getResponseHeader("Content-Length"),type:a.getResponseHeader("Content-Type")};c.dataURL=
|
||||||
|
"data:"+c.type+";base64,"+h.encode64(a.responseBody||a.responseText);d({type:"load",result:c})}else d({type:"error"})},a.send(null)):d({type:"error"});return a},encode64:function(b){var d="",a=0;for("string"!==typeof b&&(b=String(b));a<b.length;){var c=b.charCodeAt(a++)&255,e=b.charCodeAt(a++)&255,n=b.charCodeAt(a++)&255,l=c>>2,c=(c&3)<<4|e>>4;isNaN(e)?e=n=64:(e=(e&15)<<2|n>>6,n=isNaN(n)?64:n&63);d+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(l)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(c)+
|
||||||
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(e)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(n)}return d}};h.addInfoReader(/^image/,function(b,d){if(!b.__dimensions){var a=b.__dimensions=h.defer();h.readAsImage(b,function(b){var d=b.target;a.resolve("load"==b.type?!1:"error",{width:d.width,height:d.height})})}b.__dimensions.then(d)});h.event.dnd=function(b,d,a){var c,e;a||(a=d,d=h.F);p?(j(b,"dragenter dragleave dragover",function(b){for(var a=
|
||||||
|
((b.originalEvent||b||"").dataTransfer||{}).types,n=a&&a.length;n--;)~a[n].indexOf("File")&&(b.preventDefault(),e!==b.type&&(e=b.type,"dragleave"!=e&&d.call(b.currentTarget,!0,b),clearTimeout(c),c=setTimeout(function(){d.call(b.currentTarget,"dragleave"!=e,b)},50)))}),j(b,"drop",function(b){b.preventDefault();e=0;d.call(b.currentTarget,!1,b);h.getDropFiles(b,function(d){a.call(b.currentTarget,d,b)})})):h.log("Drag'n'Drop -- not supported")};n&&!n.fn.dnd&&(n.fn.dnd=function(b,d){return this.each(function(){h.event.dnd(this,
|
||||||
|
b,d)})});a.FileAPI=h.extend(h,a.FileAPI);h.flashUrl||(h.flashUrl=h.staticPath+"FileAPI.flash.swf");h.flashImageUrl||(h.flashImageUrl=h.staticPath+"FileAPI.flash.image.swf")})(window);
|
||||||
|
(function(a,k,g){function j(a,c){if(!(this instanceof j))return new j(a);this.file=a;this.better=!c;this.matrix={sx:0,sy:0,sw:0,sh:0,dx:0,dy:0,dw:0,dh:0,resize:0,deg:0}}var m=Math.min,f=Math.round,c=!1,e={8:270,3:180,6:90};try{c=-1<k.createElement("canvas").toDataURL("image/png").indexOf("data:image/png")}catch(q){}j.prototype={constructor:j,set:function(c){a.extend(this.matrix,c);return this},crop:function(a,c,e,f){e===g&&(e=a,f=c,a=c=0);return this.set({sx:a,sy:c,sw:e,sh:f||e})},resize:function(a,
|
||||||
|
c,e){"string"==typeof c&&(e=c,c=a);return this.set({dw:a,dh:c,resize:e})},preview:function(a,c){return this.set({dw:a,dh:c||a,resize:"preview"})},rotate:function(a){return this.set({deg:a})},_load:function(c,e){var f=this;a.readAsImage(c,function(a){e.call(f,"load"!=a.type,a.result)})},_apply:function(a,c){var e=k.createElement("canvas"),f=this.getMatrix(a),g=e.getContext("2d"),m=f.deg,q=f.dw,r=f.dh,v=a.width,p=a.height,j,d=a;if(this.better)for(;2<Math.min(v/q,p/r);)v=~~(v/2+0.5),p=~~(p/2+0.5),j=
|
||||||
|
k.createElement("canvas"),j.width=v,j.height=p,d!==a?(j.getContext("2d").drawImage(d,0,0,d.width,d.height,0,0,v,p),d=j):(d=j,d.getContext("2d").drawImage(a,f.sx,f.sy,f.sw,f.sh,0,0,v,p),f.sx=f.sy=f.sw=f.sh=0);e.width=!(m%180)?q:r;e.height=m%180?q:r;g.rotate(m*Math.PI/180);g.drawImage(d,f.sx,f.sy,f.sw||d.width,f.sh||d.height,180==m||270==m?-q:0,90==m||180==m?-r:0,q,r);c.call(this,!1,e)},getMatrix:function(c){var e=a.extend({},this.matrix),g=e.sw=e.sw||c.width;c=e.sh=e.sh||c.height;var q=e.dw=e.dw||
|
||||||
|
e.sw,k=e.dh=e.dh||e.sh,s=g/c,j=q/k,r=e.resize;if("preview"==r){if(q!=g||k!=c)if(j>=s?(s=g,r=s/j):(r=c,s=r*j),s!=g||r!=c)e.sx=~~((g-s)/2),e.sy=~~((c-r)/2),g=s,c=r}else r&&("min"==r?(q=f(s<j?m(g,q):k*s),k=f(s<j?q/s:m(c,k))):(q=f(s>=j?m(g,q):k*s),k=f(s>=j?q/s:m(c,k))));e.sw=g;e.sh=c;e.dw=q;e.dh=k;return e},_trans:function(a){this._load(this.file,function(c,e){c?a(c):this._apply(e,a)})},get:function(c){if(a.support.transform){var f=this;"auto"==f.matrix.deg?a.getInfo(this.file,function(a,g){f.matrix.deg=
|
||||||
|
e[g&&g.exif&&g.exif.Orientation]||0;f._trans(c)}):f._trans(c)}else c("not_support")},toData:function(a){this.get(a)}};j.exifOrientation=e;j.transform=function(c,e,f,q){a.getInfo(c,function(m,k){var y={},r=a.queue(function(a){q(a,y)});m?r.fail():a.each(e,function(a,e){if(!r.isFail()){var l=j(k.nodeType?k:c);if("function"==typeof a)a(k,l);else if(a.width)l[a.preview?"preview":"resize"](a.width,a.height,a.type);else a.maxWidth&&(k.width>a.maxWidth||k.height>a.maxHeight)&&l.resize(a.maxWidth,a.maxHeight,
|
||||||
|
"max");a.rotate===g&&f&&(a.rotate="auto");l.rotate(a.rotate);r.inc();l.toData(function(d,a){d?r.fail():(y[e]=a,r.next())})}})})};a.support.canvas=a.support.transform=c;a.Image=j})(FileAPI,document);
|
||||||
|
(function(a,k,g){var j=k.encodeURIComponent,m=k.FormData;k=function(){this.items=[]};k.prototype={append:function(a,c,e,g){this.items.push({name:a,blob:c&&c.blob||(void 0==c?"":c),file:c&&(e||c.name),type:c&&(g||c.type)})},each:function(a){for(var c=0,e=this.items.length;c<e;c++)a.call(this,this.items[c])},toData:function(f,c){c._chunked=a.support.chunked&&0<c.chunkSize&&1==a.filter(this.items,function(a){return a.file}).length;a.support.html5?this.multipart||!m?(a.log("FileAPI.Form.toMultipartData"),
|
||||||
|
this.toMultipartData(f)):c._chunked?(a.log("FileAPI.Form.toPlainData"),this.toPlainData(f)):(a.log("FileAPI.Form.toFormData"),this.toFormData(f)):(a.log("FileAPI.Form.toHtmlData"),this.toHtmlData(f))},_to:function(f,c,e,g){var m=a.queue(function(){c(f)});this.each(function(a){e(a,f,m,g)});m.check()},toHtmlData:function(f){this._to(g.createDocumentFragment(),f,function(c,e){var f=c.blob,m;c.file?(a.reset(f),f.name=c.name,e.appendChild(f)):(m=g.createElement("input"),m.name=c.name,m.type="hidden",m.value=
|
||||||
|
f,e.appendChild(m))})},toPlainData:function(a){this._to({},a,function(a,e,f){a.file&&(e.type=a.file);a.blob.toBlob?(f.inc(),a.blob.toBlob(function(g){e.name=a.name;e.file=g;e.size=g.length;e.type=a.type;f.next()},"image/png")):a.file?(e.name=a.blob.name,e.file=a.blob,e.size=a.blob.size,e.type=a.type):(e.params||(e.params=[]),e.params.push(encodeURIComponent(a.name)+"="+encodeURIComponent(a.blob)));e.start=-1;e.end=e.file.FileAPIReadPosition||-1;e.retry=0})},toFormData:function(a){this._to(new m,a,
|
||||||
|
function(a,e,f){a.file&&e.append("_"+a.name,a.file);a.blob&&a.blob.toBlob?(f.inc(),a.blob.toBlob(function(g){e.append(a.name,g,a.file);f.next()},"image/png")):a.file?e.append(a.name,a.blob,a.file):e.append(a.name,a.blob)})},toMultipartData:function(f){this._to([],f,function(c,e,f,g){var l=!!c.file,m=c.blob,k=function(a){e.push("--_"+g+('\r\nContent-Disposition: form-data; name="'+c.name+'"'+(l?'; filename="'+j(c.file)+'"':"")+(l?"\r\nContent-Type: "+(c.type||"application/octet-stream"):"")+"\r\n\r\n"+
|
||||||
|
(l?a:j(a))+"\r\n"));f.next()};f.inc();a.isFile(m)?a.readAsBinaryString(m,function(a){"load"==a.type&&k(a.result)}):k(m)},a.expando)}};a.Form=k})(FileAPI,window,document);
|
||||||
|
(function(a,k){var g=function(){},j=function(a){this.uid=k.uid();this.xhr={abort:g,getResponseHeader:g,getAllResponseHeaders:g};this.options=a};j.prototype={status:0,statusText:"",getResponseHeader:function(a){return this.xhr.getResponseHeader(a)},getAllResponseHeaders:function(){return this.xhr.getAllResponseHeaders()||{}},end:function(m,f){var c=this,e=c.options;c.end=c.abort=g;c.status=m;f&&(c.statusText=f);k.log("xhr.end:",m,f);e.complete(200==m||201==m?!1:c.statusText||"unknown",c);c.xhr&&c.xhr.node&&
|
||||||
|
setTimeout(function(){var e=c.xhr.node;try{e.parentNode.removeChild(e)}catch(f){}try{delete a[c.uid]}catch(g){}a[c.uid]=c.xhr.node=null},9)},abort:function(){this.end(0,"abort");this.xhr&&(this.xhr.aborted=!0,this.xhr.abort())},send:function(a){var f=this,c=this.options;a.toData(function(a){c.upload(c,f);f._send.call(f,c,a)},c)},_send:function(g,f){var c=this,e,q=c.uid,j=g.url;k.log("XHR._send:",f);j+=(~j.indexOf("?")?"&":"?")+k.uid();f.nodeName?(g.upload(g,c),e=document.createElement("div"),e.innerHTML=
|
||||||
|
'<form target="'+q+'" action="'+j+'" method="POST" enctype="multipart/form-data" style="position: absolute; top: -1000px; overflow: hidden; width: 1px; height: 1px;"><iframe name="'+q+'" src="javascript:false;"></iframe><input value="'+q+'" name="callback" type="hidden"/></form>',c.xhr.abort=function(){var a=e.getElementsByName("iframe")[0];if(a)try{a.stop?a.stop():a.contentWindow.stop?a.contentWindow.stop():a.contentWindow.document.execCommand("Stop")}catch(c){}e=null},j=e.getElementsByTagName("form")[0],
|
||||||
|
j.appendChild(f),k.log(j.parentNode.innerHTML),document.body.appendChild(e),c.xhr.node=e,a[q]=function(a,f,g){c.readyState=4;c.responseText=g;c.end(a,f);e=null},c.readyState=2,j.submit(),j=null):this.xhr&&this.xhr.aborted?k.log("Error: already aborted"):(e=c.xhr=k.getXHR(),f.params&&(j+=(0>j.indexOf("?")?"?":"&")+f.params.join("&")),e.open("POST",j,!0),k.withCredentials&&(e.withCredentials="true"),(!g.headers||!g.headers["X-Requested-With"])&&e.setRequestHeader("X-Requested-With","XMLHttpRequest"),
|
||||||
|
k.each(g.headers,function(a,c){e.setRequestHeader(c,a)}),g._chunked?(e.upload&&e.upload.addEventListener("progress",function(a){f.retry||g.progress({type:a.type,total:f.size,loaded:f.start+a.loaded,totalSize:f.size},c,g)},!1),e.onreadystatechange=function(){c.status=e.status;c.statusText=e.statusText;c.readyState=e.readyState;if(4==e.readyState){for(var a in{"":1,XML:1,Text:1,Body:1})c["response"+a]=e["response"+a];e.onreadystatechange=null;if(!e.status||0<e.status-201)if(k.log("Error: "+e.status),
|
||||||
|
(!e.status&&!e.aborted||500==e.status||416==e.status)&&++f.retry<=g.chunkUploadRetry){a=e.status?0:k.chunkNetworkDownRetryTimeout;g.pause(f.file,g);var j=parseInt(e.getResponseHeader("X-Last-Known-Byte"),10);k.log("X-Last-Known-Byte: "+j);f.end=j?j:f.start-1;setTimeout(function(){c._send(g,f)},a)}else c.end(e.status);else f.retry=0,f.end==f.size-1?c.end(e.status):(j=parseInt(e.getResponseHeader("X-Last-Known-Byte"),10),k.log("X-Last-Known-Byte: "+j),j&&(f.end=j),f.file.FileAPIReadPosition=f.end,setTimeout(function(){c._send(g,
|
||||||
|
f)},0));e=null}},f.start=f.end+1,f.end=Math.max(Math.min(f.start+g.chunkSize,f.size)-1,f.start),(q="slice")in f.file||(q="mozSlice")in f.file||(q="webkitSlice"),e.setRequestHeader("Content-Range","bytes "+f.start+"-"+f.end+"/"+f.size),e.setRequestHeader("Content-Disposition","attachment; filename="+encodeURIComponent(f.name)),e.setRequestHeader("Content-Type",f.type||"application/octet-stream"),q=f.file[q](f.start,f.end+1),e.send(q),q=null):(e.upload&&e.upload.addEventListener("progress",k.throttle(function(a){g.progress(a,
|
||||||
|
c,g)},100),!1),e.onreadystatechange=function(){c.status=e.status;c.statusText=e.statusText;c.readyState=e.readyState;if(4==e.readyState){for(var a in{"":1,XML:1,Text:1,Body:1})c["response"+a]=e["response"+a];e.onreadystatechange=null;c.end(e.status);e=null}},k.isArray(f)?(e.setRequestHeader("Content-Type","multipart/form-data; boundary=_"+k.expando),f=f.join("")+"--_"+k.expando+"--",e.sendAsBinary?e.sendAsBinary(f):(q=Array.prototype.map.call(f,function(a){return a.charCodeAt(0)&255}),e.send((new Uint8Array(q)).buffer))):
|
||||||
|
e.send(f)))}};k.XHR=j})(window,FileAPI);
|
||||||
|
(function(a,k,g){var j=a.support,m=k.navigator,f=m.mimeTypes,c=!1;if(m.plugins&&"object"==typeof m.plugins["Shockwave Flash"])c=m.plugins["Shockwave Flash"].description&&!(f&&f["application/x-shockwave-flash"]&&!f["application/x-shockwave-flash"].enabledPlugin);else try{c=!(!k.ActiveXObject||!new ActiveXObject("ShockwaveFlash.ShockwaveFlash"))}catch(e){a.log("ShockwaveFlash.ShockwaveFlash -- does not supported.")}j.flash=c;if(a.support.flash&&(!a.html5||!a.support.html5||a.cors&&!a.support.cors)){var q=
|
||||||
|
function(a){return('<object id="#id#" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+(a.width||"100%")+'" height="'+(a.height||"100%")+'"><param name="movie" value="#src#" /><param name="flashvars" value="#flashvars#" /><param name="swliveconnect" value="true" /><param name="allowscriptaccess" value="always" /><param name="allownetworking" value="all" /><param name="menu" value="false" /><param name="wmode" value="#wmode#" /><embed flashvars="#flashvars#" swliveconnect="true" allownetworking="all" allowscriptaccess="always" name="#id#" src="#src#" width="'+
|
||||||
|
(a.width||"100%")+'" height="'+(a.height||"100%")+'" menu="false" wmode="transparent" type="application/x-shockwave-flash"></embed></object>').replace(/#(\w+)#/ig,function(c,e){return a[e]})},t=function(a,c){if(a&&a.style){var e,f;for(e in c){f=c[e];"number"==typeof f&&(f+="px");try{a.style[e]=f}catch(g){}}}},l=function(d,c){a.each(c,function(a,c){var e=d[c];d[c]=function(){this.parent=e;return a.apply(this,arguments)}})},A=function(d){var c=d.wid=a.uid();p._fn[c]=d;return"FileAPI.Flash._fn."+c},
|
||||||
|
u=function(a){try{p._fn[a.wid]=null,delete p._fn[a.wid]}catch(c){}},C=function(a,c){if(!v.test(a)){if(/^\.\//.test(a)||"/"!=a.charAt(0)){var e=location.pathname,e=e.substr(0,e.lastIndexOf("/"));a=(e+"/"+a).replace("/./","/")}"//"!=a.substr(0,2)&&(a="//"+location.host+a);v.test(a)||(a=location.protocol+a)}c&&(a+=(/\?/.test(a)?"&":"?")+c);return a},s=a.uid(),y=0,r={},v=/^https?:/i,p={_fn:{},init:function(){var d=g.body&&g.body.firstChild;if(d){do if(1==d.nodeType){a.log("FlashAPI.Flash.init...");var c=
|
||||||
|
g.createElement("div");t(c,{top:1,right:1,width:5,height:5,position:"absolute"});d.parentNode.insertBefore(c,d);p.publish(c,s);return}while(d=d.nextSibling)}10>y&&setTimeout(p.init,50*++y)},publish:function(d,c){d.innerHTML=q({id:c,src:C(a.flashUrl,"r="+a.version),wmode:"transparent",flashvars:"callback=FileAPI.Flash.event&flashId="+c+"&storeKey="+navigator.userAgent.match(/\d/ig).join("")+"_"+a.version+(p.isReady||(a.pingUrl?"&ping="+a.pingUrl:""))})},ready:function(){p.ready=a.F;p.isReady=!0;p.patch();
|
||||||
|
a.event.on(g,"mouseover",p.mouseover);a.event.on(g,"click",function(a){p.mouseover(a)&&(a.preventDefault?a.preventDefault():a.returnValue=!0)})},getWrapper:function(a){do if(/js-fileapi-wrapper/.test(a.className))return a;while((a=a.parentNode)&&a!==g.body)},mouseover:function(d){d=a.event.fix(d).target;if(/input/i.test(d.nodeName)&&"file"==d.type){var c=d.getAttribute(s);if("i"==c||"r"==c)return!1;if("p"!=c){d.setAttribute(s,"i");var c=g.createElement("div"),e=p.getWrapper(d);if(!e){a.log("flash.mouseover.error: js-fileapi-wrapper not found");
|
||||||
|
return}t(c,{top:0,left:0,width:d.offsetWidth+100,height:d.offsetHeight+100,zIndex:"1000000",position:"absolute"});e.appendChild(c);p.publish(c,a.uid());d.setAttribute(s,"p")}return!0}},event:function(d){var c=d.type;if("ready"==c){try{p.getInput(d.flashId).setAttribute(s,"r")}catch(e){}p.ready();setTimeout(function(){p.mouseenter(d)},50);return!0}"ping"===c?a.log("(flash -> js).ping:",[d.status,d.savedStatus],d.error):"log"===c?a.log("(flash -> js).log:",d.target):c in p&&setTimeout(function(){a.log("Flash.event."+
|
||||||
|
d.type+":",d);p[c](d)},1)},mouseenter:function(d){var c=p.getInput(d.flashId);if(c){p.cmd(d,"multiple",null!=c.getAttribute("multiple"));var e=[],f={};a.each((c.getAttribute("accept")||"").split(/,\s*/),function(d){a.accept[d]&&a.each(a.accept[d].split(" "),function(a){f[a]=1})});a.each(f,function(a,d){e.push(d)});p.cmd(d,"accept",e.length?e.join(",")+","+e.join(",").toUpperCase():"*")}},get:function(a){return g[a]||k[a]||g.embeds[a]},getInput:function(d){try{var c=p.getWrapper(p.get(d));if(c)return c.getElementsByTagName("input")[0]}catch(e){a.log('Can not find "input" by flashId:',
|
||||||
|
d,e)}},select:function(d){var c=p.getInput(d.flashId),e=a.uid(c);d=d.target.files;a.each(d,function(d){a.checkFileObj(d)});r[e]=d;g.createEvent?(e=g.createEvent("Event"),e.initEvent("change",!0,!1),c.dispatchEvent(e)):g.createEventObject&&(e=g.createEventObject(),c.fireEvent("onchange",e))},cmd:function(d,c,e,f){try{return a.log("(js -> flash)."+c+":",e),p.get(d.flashId||d).cmd(c,e)}catch(g){a.log("(js -> flash).onError:",g),f||setTimeout(function(){p.cmd(d,c,e,!0)},50)}},patch:function(){a.flashEngine=
|
||||||
|
a.support.transform=!0;l(a,{getFiles:function(d,c,e){if(e)return a.filterFiles(a.getFiles(d),c,e),null;var f=a.isArray(d)?d:r[a.uid(d.target||d.srcElement||d)];if(!f)return this.parent.apply(this,arguments);c&&(c=a.getFilesFilter(c),f=a.filter(f,function(a){return c.test(a.name)}));return f},getInfo:function(d,c){if(d&&!d.flashId)this.parent.apply(this,arguments);else{if(!d.__info){var e=d.__info=a.defer();p.cmd(d,"getFileInfo",{id:d.id,callback:A(function F(a,c){u(F);e.resolve(a,d.info=c)})})}d.__info.then(c)}}});
|
||||||
|
a.support.transform=!0;a.Image&&l(a.Image.prototype,{get:function(a,c){this.set({scaleMode:c||"noScale"});this.parent(a)},_load:function(d,c){a.log("FileAPI.Image._load:",d);if(d&&!d.flashId)this.parent.apply(this,arguments);else{var e=this;a.getInfo(d,function(a){c.call(e,a,d)})}},_apply:function(d,c){a.log("FileAPI.Image._apply:",d);if(d&&!d.flashId)this.parent.apply(this,arguments);else{var e=this.getMatrix(d.info);p.cmd(d,"imageTransform",{id:d.id,matrix:e,callback:A(function F(f,k){a.log("FileAPI.Image._apply.callback:",
|
||||||
|
f);u(F);if(f)c(f);else if(!a.support.dataURI||3E4<k.length){var j={width:!(e.deg%180)?e.dw:e.dh,height:e.deg%180?e.dw:e.dh,scale:e.scaleMode},l=c,m=function(){try{p.get(s).setImage(k)}catch(d){a.log('flash.setImage -- can not set "base64":',d)}},r,s=a.uid(),z=g.createElement("div");for(r in j)z.setAttribute("data-img-"+r,j[r]);t(z,j);z.innerHTML=q(a.extend({id:s,src:C(a.flashImageUrl,"r="+a.uid()),wmode:"opaque",flashvars:"scale="+j.scale+"&callback="+A(function J(){u(J);setTimeout(m,99);return!0})},
|
||||||
|
j));l(!1,z);z=null}else{var v=new Image;a.event.one(v,"error abort load",function(a){c("load"!=a.type&&a.type,v);v=null});v.src="data:"+d.type+";base64,"+k}})})}},toData:function(d){var c=this.file,e=c.info,f=this.getMatrix(e);c&&!c.flashId?this.parent.apply(this,arguments):("auto"==f.deg&&(f.deg=a.Image.exifOrientation[e&&e.exif&&e.exif.Orientation]||0),d.call(this,!c.info,{id:c.id,flashId:c.flashId,name:c.name,type:c.type,matrix:f}))}});l(a.Form.prototype,{toData:function(d){for(var c=this.items,
|
||||||
|
e=c.length;e--;)if(c[e].file&&c[e].blob&&!c[e].blob.flashId)return this.parent.apply(this,arguments);a.log("flash.Form.toData");d(c)}});l(a.XHR.prototype,{_send:function(c,e){if(e.nodeName||e.append&&a.support.html5||a.isArray(e)&&"string"===typeof e[0])return this.parent.apply(this,arguments);var f={},g={},j=this,k,l;a.each(e,function(a){a.file?(g[a.name]=a={id:a.blob.id,name:a.blob.name,matrix:a.blob.matrix,flashId:a.blob.flashId},l=a.id,k=a.flashId):f[a.name]=a.blob});if(!l&&!k)return this.parent.apply(this,
|
||||||
|
arguments);a.log("flash.XHR._send:",k,l,g);j.xhr={headers:{},abort:function(){p.cmd(k,"abort",{id:l})},getResponseHeader:function(a){return this.headers[a]},getAllResponseHeaders:function(){return this.headers}};var m=a.queue(function(){p.cmd(k,"upload",{url:C(c.url),data:f,files:g,headers:c.headers,callback:A(function I(e){var f=e.type,g=e.result;a.log("flash.upload."+f+":",e);if("progress"==f)e.loaded=Math.min(e.loaded,e.total),e.lengthComputable=!0,c.progress(e);else if("complete"==f)u(I),"string"==
|
||||||
|
typeof g&&(j.responseText=g.replace(/%22/g,'"').replace(/%5c/g,"\\").replace(/%26/g,"&").replace(/%25/g,"%")),j.end(e.status||200);else if("abort"==f||"error"==f)j.end(e.status||0,e.message),u(I)})})});a.each(g,function(c){m.inc();a.getInfo(c,m.next)});m.check()}})}};a.Flash=p;var w=new Image;a.event.one(w,"error load",function(){a.support.dataURI=!(1!=w.width||1!=w.height);w=null;p.init()});w.src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw=="}})(FileAPI,window,document);
|
||||||
|
"undefined"!==typeof ajs&&ajs.loaded&&ajs.loaded("{fileapi}FileAPI.min");"function"===typeof define&&define.amd&&define("FileAPI",[],function(){return window.FileAPI||{}});
|
25
finallycoffee/common/resources/lib/fileupload/angular-file-upload-html5-shim.js
vendored
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
/**!
|
||||||
|
* AngularJS file upload shim for angular XHR HTML5 browsers
|
||||||
|
* @author Danial <danial.farid@gmail.com>
|
||||||
|
* @version 1.1.10
|
||||||
|
*/
|
||||||
|
if (window.XMLHttpRequest) {
|
||||||
|
if (window.FormData) {
|
||||||
|
// allow access to Angular XHR private field: https://github.com/angular/angular.js/issues/1934
|
||||||
|
XMLHttpRequest = (function(origXHR) {
|
||||||
|
return function() {
|
||||||
|
var xhr = new origXHR();
|
||||||
|
xhr.send = (function(orig) {
|
||||||
|
return function() {
|
||||||
|
if (arguments[0] instanceof FormData && arguments[0].__setXHR_) {
|
||||||
|
var formData = arguments[0];
|
||||||
|
formData.__setXHR_(xhr);
|
||||||
|
}
|
||||||
|
orig.apply(xhr, arguments);
|
||||||
|
}
|
||||||
|
})(xhr.send);
|
||||||
|
return xhr;
|
||||||
|
}
|
||||||
|
})(XMLHttpRequest);
|
||||||
|
}
|
||||||
|
}
|
2
finallycoffee/common/resources/lib/fileupload/angular-file-upload-html5-shim.min.js
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
/*! 1.1.10 */
|
||||||
|
window.XMLHttpRequest&&window.FormData&&(XMLHttpRequest=function(a){return function(){var b=new a;return b.send=function(a){return function(){if(arguments[0]instanceof FormData&&arguments[0].__setXHR_){var c=arguments[0];c.__setXHR_(b)}a.apply(b,arguments)}}(b.send),b}}(XMLHttpRequest));
|
215
finallycoffee/common/resources/lib/fileupload/angular-file-upload-shim.js
vendored
Normal file
@ -0,0 +1,215 @@
|
|||||||
|
/**!
|
||||||
|
* AngularJS file upload shim for HTML5 FormData
|
||||||
|
* @author Danial <danial.farid@gmail.com>
|
||||||
|
* @version 1.1.10
|
||||||
|
*/
|
||||||
|
(function() {
|
||||||
|
|
||||||
|
if (window.XMLHttpRequest) {
|
||||||
|
if (window.FormData) {
|
||||||
|
// allow access to Angular XHR private field: https://github.com/angular/angular.js/issues/1934
|
||||||
|
XMLHttpRequest = (function(origXHR) {
|
||||||
|
return function() {
|
||||||
|
var xhr = new origXHR();
|
||||||
|
xhr.send = (function(orig) {
|
||||||
|
return function() {
|
||||||
|
if (arguments[0] instanceof FormData && arguments[0].__setXHR_) {
|
||||||
|
var formData = arguments[0];
|
||||||
|
formData.__setXHR_(xhr);
|
||||||
|
}
|
||||||
|
orig.apply(xhr, arguments);
|
||||||
|
}
|
||||||
|
})(xhr.send);
|
||||||
|
return xhr;
|
||||||
|
}
|
||||||
|
})(XMLHttpRequest);
|
||||||
|
} else {
|
||||||
|
XMLHttpRequest = (function(origXHR) {
|
||||||
|
return function() {
|
||||||
|
var xhr = new origXHR();
|
||||||
|
var origSend = xhr.send;
|
||||||
|
xhr.__requestHeaders = [];
|
||||||
|
xhr.open = (function(orig) {
|
||||||
|
xhr.upload = {
|
||||||
|
addEventListener: function(t, fn, b) {
|
||||||
|
if (t == 'progress') {
|
||||||
|
xhr.__progress = fn;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return function(m, url, b) {
|
||||||
|
orig.apply(xhr, [m, url, b]);
|
||||||
|
xhr.__url = url;
|
||||||
|
}
|
||||||
|
})(xhr.open);
|
||||||
|
xhr.getResponseHeader = (function(orig) {
|
||||||
|
return function(h) {
|
||||||
|
return xhr.__fileApiXHR ? xhr.__fileApiXHR.getResponseHeader(h) : orig.apply(xhr, [h]);
|
||||||
|
}
|
||||||
|
})(xhr.getResponseHeader);
|
||||||
|
xhr.getAllResponseHeaders = (function(orig) {
|
||||||
|
return function() {
|
||||||
|
return xhr.__fileApiXHR ? xhr.__fileApiXHR.getAllResponseHeaders() : orig.apply(xhr);
|
||||||
|
}
|
||||||
|
})(xhr.getAllResponseHeaders);
|
||||||
|
xhr.abort = (function(orig) {
|
||||||
|
return function() {
|
||||||
|
return xhr.__fileApiXHR ? xhr.__fileApiXHR.abort() : (orig == null ? null : orig.apply(xhr));
|
||||||
|
}
|
||||||
|
})(xhr.abort);
|
||||||
|
xhr.send = function() {
|
||||||
|
if (arguments[0] != null && arguments[0].__isShim && arguments[0].__setXHR_) {
|
||||||
|
var formData = arguments[0];
|
||||||
|
if (arguments[0].__setXHR_) {
|
||||||
|
var formData = arguments[0];
|
||||||
|
formData.__setXHR_(xhr);
|
||||||
|
}
|
||||||
|
var config = {
|
||||||
|
url: xhr.__url,
|
||||||
|
complete: function(err, fileApiXHR) {
|
||||||
|
Object.defineProperty(xhr, 'status', {get: function() {return fileApiXHR.status}});
|
||||||
|
Object.defineProperty(xhr, 'statusText', {get: function() {return fileApiXHR.statusText}});
|
||||||
|
Object.defineProperty(xhr, 'readyState', {get: function() {return 4}});
|
||||||
|
Object.defineProperty(xhr, 'response', {get: function() {return fileApiXHR.response}});
|
||||||
|
Object.defineProperty(xhr, 'responseText', {get: function() {return fileApiXHR.responseText}});
|
||||||
|
xhr.__fileApiXHR = fileApiXHR;
|
||||||
|
xhr.onreadystatechange();
|
||||||
|
},
|
||||||
|
progress: function(e) {
|
||||||
|
xhr.__progress(e);
|
||||||
|
},
|
||||||
|
headers: xhr.__requestHeaders
|
||||||
|
}
|
||||||
|
config.data = {};
|
||||||
|
config.files = {}
|
||||||
|
for (var i = 0; i < formData.data.length; i++) {
|
||||||
|
var item = formData.data[i];
|
||||||
|
if (item.val != null && item.val.name != null && item.val.size != null && item.val.type != null) {
|
||||||
|
config.files[item.key] = item.val;
|
||||||
|
} else {
|
||||||
|
config.data[item.key] = item.val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
setTimeout(function() {
|
||||||
|
xhr.__fileApiXHR = FileAPI.upload(config);
|
||||||
|
}, 1);
|
||||||
|
} else {
|
||||||
|
origSend.apply(xhr, arguments);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return xhr;
|
||||||
|
}
|
||||||
|
})(XMLHttpRequest);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!window.FormData) {
|
||||||
|
var hasFlash = false;
|
||||||
|
try {
|
||||||
|
var fo = new ActiveXObject('ShockwaveFlash.ShockwaveFlash');
|
||||||
|
if (fo) hasFlash = true;
|
||||||
|
} catch(e) {
|
||||||
|
if (navigator.mimeTypes["application/x-shockwave-flash"] != undefined) hasFlash = true;
|
||||||
|
}
|
||||||
|
var wrapFileApi = function(elem) {
|
||||||
|
if (!elem.__isWrapped && (elem.getAttribute('ng-file-select') != null || elem.getAttribute('data-ng-file-select') != null)) {
|
||||||
|
var wrap = document.createElement('div');
|
||||||
|
wrap.innerHTML = '<div class="js-fileapi-wrapper" style="position:relative; overflow:hidden"></div>';
|
||||||
|
wrap = wrap.firstChild;
|
||||||
|
var parent = elem.parentNode;
|
||||||
|
parent.insertBefore(wrap, elem);
|
||||||
|
parent.removeChild(elem);
|
||||||
|
wrap.appendChild(elem);
|
||||||
|
if (!hasFlash) {
|
||||||
|
wrap.appendChild(document.createTextNode('Flash is required'));
|
||||||
|
}
|
||||||
|
elem.__isWrapped = true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var changeFnWrapper = function(fn) {
|
||||||
|
return function(evt) {
|
||||||
|
var files = FileAPI.getFiles(evt);
|
||||||
|
if (!evt.target) {
|
||||||
|
evt.target = {};
|
||||||
|
}
|
||||||
|
evt.target.files = files;
|
||||||
|
evt.target.files.item = function(i) {
|
||||||
|
return evt.target.files[i] || null;
|
||||||
|
}
|
||||||
|
fn(evt);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
var isFileChange = function(elem, e) {
|
||||||
|
return (e.toLowerCase() === 'change' || e.toLowerCase() === 'onchange') && elem.getAttribute('type') == 'file';
|
||||||
|
}
|
||||||
|
if (HTMLInputElement.prototype.addEventListener) {
|
||||||
|
HTMLInputElement.prototype.addEventListener = (function(origAddEventListener) {
|
||||||
|
return function(e, fn, b, d) {
|
||||||
|
if (isFileChange(this, e)) {
|
||||||
|
wrapFileApi(this);
|
||||||
|
origAddEventListener.apply(this, [e, changeFnWrapper(fn), b, d]);
|
||||||
|
} else {
|
||||||
|
origAddEventListener.apply(this, [e, fn, b, d]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})(HTMLInputElement.prototype.addEventListener);
|
||||||
|
}
|
||||||
|
if (HTMLInputElement.prototype.attachEvent) {
|
||||||
|
HTMLInputElement.prototype.attachEvent = (function(origAttachEvent) {
|
||||||
|
return function(e, fn) {
|
||||||
|
if (isFileChange(this, e)) {
|
||||||
|
wrapFileApi(this);
|
||||||
|
origAttachEvent.apply(this, [e, changeFnWrapper(fn)]);
|
||||||
|
} else {
|
||||||
|
origAttachEvent.apply(this, [e, fn]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})(HTMLInputElement.prototype.attachEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
window.FormData = FormData = function() {
|
||||||
|
return {
|
||||||
|
append: function(key, val, name) {
|
||||||
|
this.data.push({
|
||||||
|
key: key,
|
||||||
|
val: val,
|
||||||
|
name: name
|
||||||
|
});
|
||||||
|
},
|
||||||
|
data: [],
|
||||||
|
__isShim: true
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
(function () {
|
||||||
|
//load FileAPI
|
||||||
|
if (!window.FileAPI || !FileAPI.upload) {
|
||||||
|
var base = '', script = document.createElement('script'), allScripts = document.getElementsByTagName('script'), i, index, src;
|
||||||
|
if (window.FileAPI && window.FileAPI.jsPath) {
|
||||||
|
base = window.FileAPI.jsPath;
|
||||||
|
} else {
|
||||||
|
for (i = 0; i < allScripts.length; i++) {
|
||||||
|
src = allScripts[i].src;
|
||||||
|
index = src.indexOf('angular-file-upload-shim.js')
|
||||||
|
if (index == -1) {
|
||||||
|
index = src.indexOf('angular-file-upload-shim.min.js');
|
||||||
|
}
|
||||||
|
if (index > -1) {
|
||||||
|
base = src.substring(0, index);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!window.FileAPI || FileAPI.staticPath == null) {
|
||||||
|
FileAPI = {
|
||||||
|
staticPath: base
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
script.setAttribute('src', base + "FileAPI.min.js");
|
||||||
|
document.getElementsByTagName('head')[0].appendChild(script);
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
}})();
|
2
finallycoffee/common/resources/lib/fileupload/angular-file-upload-shim.min.js
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
/*! 1.1.10 */
|
||||||
|
!function(){if(window.XMLHttpRequest&&(XMLHttpRequest=window.FormData?function(a){return function(){var b=new a;return b.send=function(a){return function(){if(arguments[0]instanceof FormData&&arguments[0].__setXHR_){var c=arguments[0];c.__setXHR_(b)}a.apply(b,arguments)}}(b.send),b}}(XMLHttpRequest):function(a){return function(){var b=new a,c=b.send;return b.__requestHeaders=[],b.open=function(a){return b.upload={addEventListener:function(a,c){"progress"==a&&(b.__progress=c)}},function(c,d,e){a.apply(b,[c,d,e]),b.__url=d}}(b.open),b.getResponseHeader=function(a){return function(c){return b.__fileApiXHR?b.__fileApiXHR.getResponseHeader(c):a.apply(b,[c])}}(b.getResponseHeader),b.getAllResponseHeaders=function(a){return function(){return b.__fileApiXHR?b.__fileApiXHR.getAllResponseHeaders():a.apply(b)}}(b.getAllResponseHeaders),b.abort=function(a){return function(){return b.__fileApiXHR?b.__fileApiXHR.abort():null==a?null:a.apply(b)}}(b.abort),b.send=function(){if(null!=arguments[0]&&arguments[0].__isShim&&arguments[0].__setXHR_){var a=arguments[0];if(arguments[0].__setXHR_){var a=arguments[0];a.__setXHR_(b)}var d={url:b.__url,complete:function(a,c){Object.defineProperty(b,"status",{get:function(){return c.status}}),Object.defineProperty(b,"statusText",{get:function(){return c.statusText}}),Object.defineProperty(b,"readyState",{get:function(){return 4}}),Object.defineProperty(b,"response",{get:function(){return c.response}}),Object.defineProperty(b,"responseText",{get:function(){return c.responseText}}),b.__fileApiXHR=c,b.onreadystatechange()},progress:function(a){b.__progress(a)},headers:b.__requestHeaders};d.data={},d.files={};for(var e=0;e<a.data.length;e++){var f=a.data[e];null!=f.val&&null!=f.val.name&&null!=f.val.size&&null!=f.val.type?d.files[f.key]=f.val:d.data[f.key]=f.val}setTimeout(function(){b.__fileApiXHR=FileAPI.upload(d)},1)}else c.apply(b,arguments)},b}}(XMLHttpRequest)),!window.FormData){var a=!1;try{var b=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");b&&(a=!0)}catch(c){void 0!=navigator.mimeTypes["application/x-shockwave-flash"]&&(a=!0)}var d=function(b){if(!b.__isWrapped&&(null!=b.getAttribute("ng-file-select")||null!=b.getAttribute("data-ng-file-select"))){var c=document.createElement("div");c.innerHTML='<div class="js-fileapi-wrapper" style="position:relative; overflow:hidden"></div>',c=c.firstChild;var d=b.parentNode;d.insertBefore(c,b),d.removeChild(b),c.appendChild(b),a||c.appendChild(document.createTextNode("Flash is required")),b.__isWrapped=!0}},e=function(a){return function(b){var c=FileAPI.getFiles(b);b.target||(b.target={}),b.target.files=c,b.target.files.item=function(a){return b.target.files[a]||null},a(b)}},f=function(a,b){return("change"===b.toLowerCase()||"onchange"===b.toLowerCase())&&"file"==a.getAttribute("type")};HTMLInputElement.prototype.addEventListener&&(HTMLInputElement.prototype.addEventListener=function(a){return function(b,c,g,h){f(this,b)?(d(this),a.apply(this,[b,e(c),g,h])):a.apply(this,[b,c,g,h])}}(HTMLInputElement.prototype.addEventListener)),HTMLInputElement.prototype.attachEvent&&(HTMLInputElement.prototype.attachEvent=function(a){return function(b,c){f(this,b)?(d(this),a.apply(this,[b,e(c)])):a.apply(this,[b,c])}}(HTMLInputElement.prototype.attachEvent)),window.FormData=FormData=function(){return{append:function(a,b,c){this.data.push({key:a,val:b,name:c})},data:[],__isShim:!0}},function(){if(!window.FileAPI||!FileAPI.upload){var a,b,c,d="",e=document.createElement("script"),f=document.getElementsByTagName("script");if(window.FileAPI&&window.FileAPI.jsPath)d=window.FileAPI.jsPath;else for(a=0;a<f.length;a++)if(c=f[a].src,b=c.indexOf("angular-file-upload-shim.js"),-1==b&&(b=c.indexOf("angular-file-upload-shim.min.js")),b>-1){d=c.substring(0,b);break}window.FileAPI&&null!=FileAPI.staticPath||(FileAPI={staticPath:d}),e.setAttribute("src",d+"FileAPI.min.js"),document.getElementsByTagName("head")[0].appendChild(e)}}()}}();
|
156
finallycoffee/common/resources/lib/fileupload/angular-file-upload.js
vendored
Normal file
@ -0,0 +1,156 @@
|
|||||||
|
/**!
|
||||||
|
* AngularJS file upload/drop directive with http post and progress
|
||||||
|
* @author Danial <danial.farid@gmail.com>
|
||||||
|
* @version 1.1.10
|
||||||
|
*/
|
||||||
|
(function() {
|
||||||
|
|
||||||
|
var angularFileUpload = angular.module('angularFileUpload', []);
|
||||||
|
|
||||||
|
angularFileUpload.service('$upload', ['$http', '$rootScope', '$timeout', function($http, $rootScope, $timeout) {
|
||||||
|
this.upload = function(config) {
|
||||||
|
config.method = config.method || 'POST';
|
||||||
|
config.headers = config.headers || {};
|
||||||
|
config.headers['Content-Type'] = undefined;
|
||||||
|
config.transformRequest = config.transformRequest || $http.defaults.transformRequest;
|
||||||
|
var formData = new FormData();
|
||||||
|
if (config.data) {
|
||||||
|
for (var key in config.data) {
|
||||||
|
var val = config.data[key];
|
||||||
|
if (!config.formDataAppender) {
|
||||||
|
if (typeof config.transformRequest == 'function') {
|
||||||
|
val = config.transformRequest(val);
|
||||||
|
} else {
|
||||||
|
for (var i = 0; i < config.transformRequest.length; i++) {
|
||||||
|
var fn = config.transformRequest[i];
|
||||||
|
if (typeof fn == 'function') {
|
||||||
|
val = fn(val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
formData.append(key, val);
|
||||||
|
} else {
|
||||||
|
config.formDataAppender(formData, key, val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
config.transformRequest = angular.identity;
|
||||||
|
formData.append(config.fileFormDataName || 'file', config.file, config.file.name);
|
||||||
|
|
||||||
|
formData['__setXHR_'] = function(xhr) {
|
||||||
|
config.__XHR = xhr;
|
||||||
|
xhr.upload.addEventListener('progress', function(e) {
|
||||||
|
if (config.progress) {
|
||||||
|
$timeout(function() {
|
||||||
|
config.progress(e);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, false);
|
||||||
|
//fix for firefox not firing upload progress end
|
||||||
|
xhr.upload.addEventListener('load', function(e) {
|
||||||
|
if (e.lengthComputable) {
|
||||||
|
$timeout(function() {
|
||||||
|
config.progress(e);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, false);
|
||||||
|
};
|
||||||
|
|
||||||
|
config.data = formData;
|
||||||
|
|
||||||
|
var promise = $http(config);
|
||||||
|
|
||||||
|
promise.progress = function(fn) {
|
||||||
|
config.progress = fn;
|
||||||
|
return promise;
|
||||||
|
};
|
||||||
|
|
||||||
|
promise.abort = function() {
|
||||||
|
if (config.__XHR) {
|
||||||
|
$timeout(function() {
|
||||||
|
config.__XHR.abort();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return promise;
|
||||||
|
};
|
||||||
|
promise.then = (function(promise, origThen) {
|
||||||
|
return function(s, e, p) {
|
||||||
|
config.progress = p || config.progress;
|
||||||
|
origThen.apply(promise, [s, e, p]);
|
||||||
|
return promise;
|
||||||
|
};
|
||||||
|
})(promise, promise.then);
|
||||||
|
|
||||||
|
return promise;
|
||||||
|
};
|
||||||
|
}]);
|
||||||
|
|
||||||
|
angularFileUpload.directive('ngFileSelect', [ '$parse', '$http', '$timeout', function($parse, $http, $timeout) {
|
||||||
|
return function(scope, elem, attr) {
|
||||||
|
var fn = $parse(attr['ngFileSelect']);
|
||||||
|
elem.bind('change', function(evt) {
|
||||||
|
var files = [], fileList, i;
|
||||||
|
fileList = evt.target.files;
|
||||||
|
if (fileList != null) {
|
||||||
|
for (i = 0; i < fileList.length; i++) {
|
||||||
|
files.push(fileList.item(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$timeout(function() {
|
||||||
|
fn(scope, {
|
||||||
|
$files : files,
|
||||||
|
$event : evt
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
elem.bind('click', function(){
|
||||||
|
this.value = null;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
} ]);
|
||||||
|
|
||||||
|
angularFileUpload.directive('ngFileDropAvailable', [ '$parse', '$http', '$timeout', function($parse, $http, $timeout) {
|
||||||
|
return function(scope, elem, attr) {
|
||||||
|
if ('draggable' in document.createElement('span')) {
|
||||||
|
var fn = $parse(attr['ngFileDropAvailable']);
|
||||||
|
$timeout(function() {
|
||||||
|
fn(scope);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} ]);
|
||||||
|
|
||||||
|
angularFileUpload.directive('ngFileDrop', [ '$parse', '$http', '$timeout', function($parse, $http, $timeout) {
|
||||||
|
return function(scope, elem, attr) {
|
||||||
|
if ('draggable' in document.createElement('span')) {
|
||||||
|
var fn = $parse(attr['ngFileDrop']);
|
||||||
|
elem[0].addEventListener("dragover", function(evt) {
|
||||||
|
evt.stopPropagation();
|
||||||
|
evt.preventDefault();
|
||||||
|
elem.addClass(attr['ngFileDragOverClass'] || "dragover");
|
||||||
|
}, false);
|
||||||
|
elem[0].addEventListener("dragleave", function(evt) {
|
||||||
|
elem.removeClass(attr['ngFileDragOverClass'] || "dragover");
|
||||||
|
}, false);
|
||||||
|
elem[0].addEventListener("drop", function(evt) {
|
||||||
|
evt.stopPropagation();
|
||||||
|
evt.preventDefault();
|
||||||
|
elem.removeClass(attr['ngFileDragOverClass'] || "dragover");
|
||||||
|
var files = [], fileList = evt.dataTransfer.files, i;
|
||||||
|
if (fileList != null) {
|
||||||
|
for (i = 0; i < fileList.length; i++) {
|
||||||
|
files.push(fileList.item(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$timeout(function() {
|
||||||
|
fn(scope, {
|
||||||
|
$files : files,
|
||||||
|
$event : evt
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}, false);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} ]);
|
||||||
|
|
||||||
|
})();
|
2
finallycoffee/common/resources/lib/fileupload/angular-file-upload.min.js
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
/*! 1.1.10 */
|
||||||
|
!function(){var a=angular.module("angularFileUpload",[]);a.service("$upload",["$http","$rootScope","$timeout",function(a,b,c){this.upload=function(b){b.method=b.method||"POST",b.headers=b.headers||{},b.headers["Content-Type"]=void 0,b.transformRequest=b.transformRequest||a.defaults.transformRequest;var d=new FormData;if(b.data)for(var e in b.data){var f=b.data[e];if(b.formDataAppender)b.formDataAppender(d,e,f);else{if("function"==typeof b.transformRequest)f=b.transformRequest(f);else for(var g=0;g<b.transformRequest.length;g++){var h=b.transformRequest[g];"function"==typeof h&&(f=h(f))}d.append(e,f)}}b.transformRequest=angular.identity,d.append(b.fileFormDataName||"file",b.file,b.file.name),d.__setXHR_=function(a){b.__XHR=a,a.upload.addEventListener("progress",function(a){b.progress&&c(function(){b.progress(a)})},!1),a.upload.addEventListener("load",function(a){a.lengthComputable&&c(function(){b.progress(a)})},!1)},b.data=d;var i=a(b);return i.progress=function(a){return b.progress=a,i},i.abort=function(){return b.__XHR&&c(function(){b.__XHR.abort()}),i},i.then=function(a,c){return function(d,e,f){return b.progress=f||b.progress,c.apply(a,[d,e,f]),a}}(i,i.then),i}}]),a.directive("ngFileSelect",["$parse","$http","$timeout",function(a,b,c){return function(b,d,e){var f=a(e.ngFileSelect);d.bind("change",function(a){var d,e,g=[];if(d=a.target.files,null!=d)for(e=0;e<d.length;e++)g.push(d.item(e));c(function(){f(b,{$files:g,$event:a})})}),d.bind("click",function(){this.value=null})}}]),a.directive("ngFileDropAvailable",["$parse","$http","$timeout",function(a,b,c){return function(b,d,e){if("draggable"in document.createElement("span")){var f=a(e.ngFileDropAvailable);c(function(){f(b)})}}}]),a.directive("ngFileDrop",["$parse","$http","$timeout",function(a,b,c){return function(b,d,e){if("draggable"in document.createElement("span")){var f=a(e.ngFileDrop);d[0].addEventListener("dragover",function(a){a.stopPropagation(),a.preventDefault(),d.addClass(e.ngFileDragOverClass||"dragover")},!1),d[0].addEventListener("dragleave",function(){d.removeClass(e.ngFileDragOverClass||"dragover")},!1),d[0].addEventListener("drop",function(a){a.stopPropagation(),a.preventDefault(),d.removeClass(e.ngFileDragOverClass||"dragover");var g,h=[],i=a.dataTransfer.files;if(null!=i)for(g=0;g<i.length;g++)h.push(i.item(g));c(function(){f(b,{$files:h,$event:a})})},!1)}}}])}();
|
21
finallycoffee/common/resources/lib/pficon/pficon.css
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
/*!
|
||||||
|
* This folder contains updated PatternFly4 icons (version 2020.13).
|
||||||
|
* After the PF4 transition is finished this folder will be deleted.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "pficon-tmp";
|
||||||
|
src: url("./pficon.woff2") format("woff2"), url("./pficon.woff") format("woff"); }
|
||||||
|
|
||||||
|
.pf-icon-openshift:before {
|
||||||
|
font-family: "pficon-tmp";
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
font-style: normal;
|
||||||
|
font-variant: normal;
|
||||||
|
font-weight: normal;
|
||||||
|
text-decoration: none;
|
||||||
|
text-transform: none; }
|
||||||
|
|
||||||
|
.pf-icon-openshift:before {
|
||||||
|
content: ""; }
|
BIN
finallycoffee/common/resources/lib/pficon/pficon.woff
Normal file
BIN
finallycoffee/common/resources/lib/pficon/pficon.woff2
Normal file
1560
finallycoffee/common/resources/package-lock.json
generated
Normal file
29
finallycoffee/common/resources/package.json
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"name": "keycloak-npm-dependencies",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "Keycloak NPM Dependencies",
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"repository": "https://github.com/keycloak/keycloak",
|
||||||
|
"dependencies": {
|
||||||
|
"angular": "1.8.3",
|
||||||
|
"angular-cookies": "1.8.3",
|
||||||
|
"angular-loader": "1.8.3",
|
||||||
|
"angular-resource": "1.8.3",
|
||||||
|
"angular-route": "1.8.3",
|
||||||
|
"angular-sanitize": "1.8.3",
|
||||||
|
"angular-translate": "2.19.0",
|
||||||
|
"angular-translate-loader-url": "2.19.0",
|
||||||
|
"angular-treeview": "0.1.5",
|
||||||
|
"angular-ui-select2": "0.0.5",
|
||||||
|
"autofill-event": "0.0.1",
|
||||||
|
"bootstrap": "3.4.1",
|
||||||
|
"filesaver": "0.0.13",
|
||||||
|
"font-awesome": "4.7.0",
|
||||||
|
"jquery": "3.6.1",
|
||||||
|
"ng-file-upload": "12.2.13",
|
||||||
|
"patternfly": "3.59.5",
|
||||||
|
"rcue": "3.48.1",
|
||||||
|
"select2": "3.5.1",
|
||||||
|
"text-security": "3.2.1"
|
||||||
|
}
|
||||||
|
}
|
1
finallycoffee/email/theme.properties
Normal file
@ -0,0 +1 @@
|
|||||||
|
parent=base
|
@ -1,28 +0,0 @@
|
|||||||
div.kc-logo-text {
|
|
||||||
background-image: url('../img/antifa_lesbian_pride.png');
|
|
||||||
background-size: 256px 256px;
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
height: 256px;
|
|
||||||
width: 256px;
|
|
||||||
margin: 0 auto;
|
|
||||||
}
|
|
||||||
.pf-v5-c-login #kc-header span {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.login-pf body {
|
|
||||||
background: url('../img/background.jpg') no-repeat center center fixed !important;
|
|
||||||
background-size: cover !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 767px) {
|
|
||||||
#kc-header-wrapper {
|
|
||||||
padding: 20px 0 60px 0 !important;
|
|
||||||
color: #ededed !important;
|
|
||||||
font-size: 29px !important;
|
|
||||||
font-weight: var(--pf-global--FontWeight--normal) !important;
|
|
||||||
letter-spacing: 3px !important;
|
|
||||||
line-height: 1.2em !important;
|
|
||||||
text-align: center !important;
|
|
||||||
}
|
|
||||||
}
|
|
636
finallycoffee/login/resources/css/login.css
Normal file
@ -0,0 +1,636 @@
|
|||||||
|
:root {
|
||||||
|
--pf-global--primary-color--100: #ea5b0c;
|
||||||
|
--default-background-color: #ea5b0c;
|
||||||
|
--link-hover-color: #ea5b0c;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Patternfly CSS places a "bg-login.jpg" as the background on this ".login-pf" class.
|
||||||
|
This clashes with the "keycloak-bg.png' background defined on the body below.
|
||||||
|
Therefore the Patternfly background must be set to none. */
|
||||||
|
.login-pf {
|
||||||
|
background: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-pf body {
|
||||||
|
background: var(--default-background-color) url(../../../common/finallycoffee/img/background.jpg);
|
||||||
|
background-position: center;
|
||||||
|
background-size: cover;
|
||||||
|
height: 100%;
|
||||||
|
color: var(--pf-global--Color--light-200);
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea.pf-c-form-control {
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pf-c-alert__title {
|
||||||
|
font-size: var(--pf-global--FontSize--xs);
|
||||||
|
}
|
||||||
|
|
||||||
|
p.instruction {
|
||||||
|
margin: 5px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pf-c-button.pf-m-control {
|
||||||
|
border: solid var(--pf-global--BorderWidth--sm);
|
||||||
|
border-color: rgba(230, 230, 230, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
.pf-c-button.pf-m-primary {
|
||||||
|
background: var(--default-background-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
h1#kc-page-title::before {
|
||||||
|
content: "";
|
||||||
|
height: 200px;
|
||||||
|
display: block;
|
||||||
|
background-image: url(../../../common/finallycoffee/img/antifa_lesbian_pride.svg);
|
||||||
|
background-position: center;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-size: 143.37px 200px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1#kc-page-title {
|
||||||
|
margin-top: 10px;
|
||||||
|
color: var(--pf-global--BackgroundColor--100);
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-locale ul {
|
||||||
|
background-color: var(--pf-global--BackgroundColor--100);
|
||||||
|
display: none;
|
||||||
|
top: 20px;
|
||||||
|
min-width: 100px;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-locale-dropdown{
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-locale-dropdown:hover ul {
|
||||||
|
display:block;
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-locale-dropdown a {
|
||||||
|
color: var(--pf-global--Color--200);
|
||||||
|
text-align: right;
|
||||||
|
font-size: var(--pf-global--FontSize--sm);
|
||||||
|
}
|
||||||
|
|
||||||
|
a#kc-current-locale-link::after {
|
||||||
|
content: "\2c5";
|
||||||
|
margin-left: var(--pf-global--spacer--xs)
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-pf .container {
|
||||||
|
padding-top: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-pf a:hover {
|
||||||
|
color: #0099d3;
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-logo {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.kc-logo-text {
|
||||||
|
background-image: url(../img/keycloak-logo-text.png);
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
height: 63px;
|
||||||
|
width: 300px;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.kc-logo-text span {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-header {
|
||||||
|
color: #ededed;
|
||||||
|
overflow: visible;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-header-wrapper {
|
||||||
|
font-size: 29px;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 3px;
|
||||||
|
line-height: 1.2em;
|
||||||
|
padding: 62px 10px 20px;
|
||||||
|
white-space: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-content {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-attempted-username {
|
||||||
|
font-size: 20px;
|
||||||
|
font-family: inherit;
|
||||||
|
font-weight: normal;
|
||||||
|
padding-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-username {
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom:-10px;
|
||||||
|
color: var(--pf-global--palette-black-150);
|
||||||
|
height: 290px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-webauthn-settings-form {
|
||||||
|
padding-top: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-form-webauthn .select-auth-box-parent {
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-form-webauthn .select-auth-box-desc {
|
||||||
|
color: var(--pf-global--palette--black-400);
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-form-webauthn .select-auth-box-headline {
|
||||||
|
color: var(--pf-global--palette-black--150);
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-form-webauthn .select-auth-box-icon {
|
||||||
|
flex: 0 0 3em;
|
||||||
|
color: var(--default-background-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-form-webauthn .select-auth-box-icon-properties {
|
||||||
|
margin-top: 10px;
|
||||||
|
font-size: 1.8em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-form-webauthn .select-auth-box-icon-properties.unknown-transport-class {
|
||||||
|
margin-top: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-form-webauthn .pf-l-stack__item {
|
||||||
|
margin: -1px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-form-webauthn .select-auth-box-paragraph {
|
||||||
|
color: var(--pf-global--palette--black-600);
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-content-wrapper {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-form-wrapper {
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-form-wrapper #kc-form-login label {
|
||||||
|
color: var(--pf-global--BackgroundColor--light-100);
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-form-wrapper #kc-form-login .pf-c-form-control {
|
||||||
|
background-color: var(--pf-global--BackgroundColor--light-300);
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-info {
|
||||||
|
margin: 20px -40px -30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-info-wrapper {
|
||||||
|
font-size: 13px;
|
||||||
|
padding: 15px 35px;
|
||||||
|
background-color: #F0F0F0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-form-options span {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-form-options .checkbox {
|
||||||
|
margin-top: 0;
|
||||||
|
color: var(--pf-global--Color--light-300);
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-terms-text {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-registration {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* TOTP */
|
||||||
|
|
||||||
|
.subtitle {
|
||||||
|
text-align: right;
|
||||||
|
margin-top: 30px;
|
||||||
|
color: #909090;
|
||||||
|
}
|
||||||
|
|
||||||
|
.required {
|
||||||
|
color: var(--pf-global--danger-color--200);
|
||||||
|
}
|
||||||
|
|
||||||
|
ol#kc-totp-settings {
|
||||||
|
margin: 0;
|
||||||
|
padding-left: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul#kc-totp-supported-apps {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-totp-secret-qr-code {
|
||||||
|
max-width:150px;
|
||||||
|
max-height:150px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-totp-secret-key {
|
||||||
|
background-color: #fff;
|
||||||
|
color: #333333;
|
||||||
|
font-size: 16px;
|
||||||
|
padding: 10px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* OAuth */
|
||||||
|
|
||||||
|
#kc-oauth h3 {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-oauth ul {
|
||||||
|
list-style: none;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-oauth ul li {
|
||||||
|
border-top: 1px solid rgba(255, 255, 255, 0.1);
|
||||||
|
font-size: 12px;
|
||||||
|
padding: 10px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-oauth ul li:first-of-type {
|
||||||
|
border-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-oauth .kc-role {
|
||||||
|
display: inline-block;
|
||||||
|
width: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Code */
|
||||||
|
#kc-code textarea {
|
||||||
|
width: 100%;
|
||||||
|
height: 8em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Social */
|
||||||
|
.kc-social-links {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.kc-social-provider-logo {
|
||||||
|
font-size: 23px;
|
||||||
|
width: 30px;
|
||||||
|
height: 25px;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.kc-social-gray {
|
||||||
|
color: var(--pf-global--Color--200);
|
||||||
|
}
|
||||||
|
|
||||||
|
.kc-social-item {
|
||||||
|
margin-bottom: var(--pf-global--spacer--sm);
|
||||||
|
font-size: 15px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.kc-social-provider-name {
|
||||||
|
position: relative;
|
||||||
|
top: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.kc-social-icon-text {
|
||||||
|
left: -15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.kc-social-grid {
|
||||||
|
display:grid;
|
||||||
|
grid-column-gap: 10px;
|
||||||
|
grid-row-gap: 5px;
|
||||||
|
grid-column-end: span 6;
|
||||||
|
--pf-l-grid__item--GridColumnEnd: span 6;
|
||||||
|
}
|
||||||
|
|
||||||
|
.kc-social-grid .kc-social-icon-text {
|
||||||
|
left: -10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.kc-login-tooltip {
|
||||||
|
position: relative;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.kc-social-section {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.kc-social-section hr{
|
||||||
|
margin-bottom: 10px
|
||||||
|
}
|
||||||
|
|
||||||
|
.kc-login-tooltip .kc-tooltip-text{
|
||||||
|
top:-3px;
|
||||||
|
left:160%;
|
||||||
|
background-color: black;
|
||||||
|
visibility: hidden;
|
||||||
|
color: #fff;
|
||||||
|
|
||||||
|
min-width:130px;
|
||||||
|
text-align: center;
|
||||||
|
border-radius: 2px;
|
||||||
|
box-shadow:0 1px 8px rgba(0,0,0,0.6);
|
||||||
|
padding: 5px;
|
||||||
|
|
||||||
|
position: absolute;
|
||||||
|
opacity:0;
|
||||||
|
transition:opacity 0.5s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Show tooltip */
|
||||||
|
.kc-login-tooltip:hover .kc-tooltip-text {
|
||||||
|
visibility: visible;
|
||||||
|
opacity:0.7;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Arrow for tooltip */
|
||||||
|
.kc-login-tooltip .kc-tooltip-text::after {
|
||||||
|
content: " ";
|
||||||
|
position: absolute;
|
||||||
|
top: 15px;
|
||||||
|
right: 100%;
|
||||||
|
margin-top: -5px;
|
||||||
|
border-width: 5px;
|
||||||
|
border-style: solid;
|
||||||
|
border-color: transparent black transparent transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 768px) {
|
||||||
|
#kc-container-wrapper {
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-pf .container {
|
||||||
|
padding-right: 80px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-locale {
|
||||||
|
position: relative;
|
||||||
|
text-align: right;
|
||||||
|
z-index: 9999;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
|
||||||
|
.login-pf body {
|
||||||
|
background: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-header {
|
||||||
|
padding-left: 15px;
|
||||||
|
padding-right: 15px;
|
||||||
|
float: none;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-header-wrapper {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: bold;
|
||||||
|
padding: 20px 60px 0 0;
|
||||||
|
color: #72767b;
|
||||||
|
letter-spacing: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.kc-logo-text {
|
||||||
|
margin: 0;
|
||||||
|
width: 150px;
|
||||||
|
height: 32px;
|
||||||
|
background-size: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-form {
|
||||||
|
float: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-info-wrapper {
|
||||||
|
border-top: 1px solid rgba(255, 255, 255, 0.1);
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-pf .container {
|
||||||
|
padding-top: 15px;
|
||||||
|
padding-bottom: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-locale {
|
||||||
|
position: absolute;
|
||||||
|
width: 200px;
|
||||||
|
top: 20px;
|
||||||
|
right: 20px;
|
||||||
|
text-align: right;
|
||||||
|
z-index: 9999;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-height: 646px) {
|
||||||
|
#kc-container-wrapper {
|
||||||
|
bottom: 12%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-height: 645px) {
|
||||||
|
#kc-container-wrapper {
|
||||||
|
padding-top: 50px;
|
||||||
|
top: 20%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-pf form.form-actions .btn {
|
||||||
|
float: right;
|
||||||
|
margin-left: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-form-buttons {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-pf-page .login-pf-brand {
|
||||||
|
margin-top: 20px;
|
||||||
|
max-width: 360px;
|
||||||
|
width: 40%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select-auth-box-arrow{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin-right: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select-auth-box-icon{
|
||||||
|
display: flex;
|
||||||
|
flex: 0 0 2em;
|
||||||
|
justify-content: center;
|
||||||
|
margin-right: 1rem;
|
||||||
|
margin-left: 3rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select-auth-box-parent{
|
||||||
|
border-top: 1px solid var(--pf-global--palette--black-200);
|
||||||
|
padding-top: 1rem;
|
||||||
|
padding-bottom: 1rem;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select-auth-box-parent:hover{
|
||||||
|
background-color: #f7f8f8;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select-auth-container {
|
||||||
|
padding-bottom: 0px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select-auth-box-headline {
|
||||||
|
font-size: var(--pf-global--FontSize--md);
|
||||||
|
color: var(--pf-global--primary-color--100);
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select-auth-box-desc {
|
||||||
|
font-size: var(--pf-global--FontSize--sm);
|
||||||
|
}
|
||||||
|
|
||||||
|
.select-auth-box-paragraph {
|
||||||
|
text-align: center;
|
||||||
|
font-size: var(--pf-global--FontSize--md);
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-pf {
|
||||||
|
margin: 0 auto;
|
||||||
|
box-shadow: var(--pf-global--BoxShadow--lg);
|
||||||
|
padding: 0 20px;
|
||||||
|
max-width: 500px;
|
||||||
|
border-top: 4px solid;
|
||||||
|
border-color: var(--pf-global--primary-color--100);
|
||||||
|
background: var(--pf-global--BackgroundColor--dark-300);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*phone*/
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
.login-pf-page .card-pf {
|
||||||
|
max-width: none;
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
border-top: 0;
|
||||||
|
box-shadow: 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.kc-social-grid {
|
||||||
|
grid-column-end: 12;
|
||||||
|
--pf-l-grid__item--GridColumnEnd: span 12;
|
||||||
|
}
|
||||||
|
|
||||||
|
.kc-social-grid .kc-social-icon-text {
|
||||||
|
left: -15px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-pf-page .login-pf-signup {
|
||||||
|
font-size: 15px;
|
||||||
|
color: #72767b;
|
||||||
|
}
|
||||||
|
#kc-content-wrapper .row {
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-pf-page.login-pf-page-accounts {
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-pf-page .btn-primary {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-pf-page .list-view-pf .list-group-item {
|
||||||
|
border-bottom: 1px solid #ededed;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-pf-page .list-view-pf-description {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-form-login div.form-group:last-of-type,
|
||||||
|
#kc-register-form div.form-group:last-of-type,
|
||||||
|
#kc-update-profile-form div.form-group:last-of-type,
|
||||||
|
#kc-update-email-form div.form-group:last-of-type{
|
||||||
|
margin-bottom: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.no-bottom-margin {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#kc-back {
|
||||||
|
margin-top: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Recovery codes */
|
||||||
|
.kc-recovery-codes-warning {
|
||||||
|
margin-bottom: 32px;
|
||||||
|
}
|
||||||
|
.kc-recovery-codes-warning .pf-c-alert__description p {
|
||||||
|
font-size: 0.875rem;
|
||||||
|
}
|
||||||
|
.kc-recovery-codes-list {
|
||||||
|
list-style: none;
|
||||||
|
columns: 2;
|
||||||
|
margin: 16px 0;
|
||||||
|
padding: 16px 16px 8px 16px;
|
||||||
|
border: 1px solid #D2D2D2;
|
||||||
|
}
|
||||||
|
.kc-recovery-codes-list li {
|
||||||
|
margin-bottom: 8px;
|
||||||
|
font-size: 11px;
|
||||||
|
}
|
||||||
|
.kc-recovery-codes-list li span {
|
||||||
|
color: #6A6E73;
|
||||||
|
width: 16px;
|
||||||
|
text-align: right;
|
||||||
|
display: inline-block;
|
||||||
|
margin-right: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.kc-recovery-codes-actions {
|
||||||
|
margin-bottom: 24px;
|
||||||
|
}
|
||||||
|
.kc-recovery-codes-actions button {
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
.kc-recovery-codes-actions button i {
|
||||||
|
margin-right: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.kc-recovery-codes-confirmation {
|
||||||
|
align-items: baseline;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
}
|
||||||
|
/* End Recovery codes */
|
Before Width: | Height: | Size: 166 KiB |
Before Width: | Height: | Size: 312 KiB |
BIN
finallycoffee/login/resources/img/feedback-error-arrow-down.png
Normal file
After Width: | Height: | Size: 513 B |
BIN
finallycoffee/login/resources/img/feedback-error-sign.png
Normal file
After Width: | Height: | Size: 343 B |
After Width: | Height: | Size: 678 B |
BIN
finallycoffee/login/resources/img/feedback-success-sign.png
Normal file
After Width: | Height: | Size: 410 B |
After Width: | Height: | Size: 513 B |
BIN
finallycoffee/login/resources/img/feedback-warning-sign.png
Normal file
After Width: | Height: | Size: 646 B |
BIN
finallycoffee/login/resources/img/keycloak-bg.png
Normal file
After Width: | Height: | Size: 80 KiB |
BIN
finallycoffee/login/resources/img/keycloak-logo-text.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
finallycoffee/login/resources/img/keycloak-logo.png
Normal file
After Width: | Height: | Size: 5.2 KiB |
@ -1,5 +1,161 @@
|
|||||||
parent=keycloak.v2
|
parent=base
|
||||||
import=common/keycloak
|
import=common/keycloak
|
||||||
|
|
||||||
styles=css/login.css css/custom.css
|
styles=css/login.css
|
||||||
logo=img/antifa_lesbian_pride.png
|
stylesCommon=web_modules/@patternfly/react-core/dist/styles/base.css web_modules/@patternfly/react-core/dist/styles/app.css node_modules/patternfly/dist/css/patternfly.min.css node_modules/patternfly/dist/css/patternfly-additions.min.css lib/pficon/pficon.css
|
||||||
|
|
||||||
|
meta=viewport==width=device-width,initial-scale=1
|
||||||
|
|
||||||
|
kcHtmlClass=login-pf
|
||||||
|
kcLoginClass=login-pf-page
|
||||||
|
|
||||||
|
kcLogoLink=http://www.keycloak.org
|
||||||
|
|
||||||
|
kcLogoClass=login-pf-brand
|
||||||
|
|
||||||
|
kcContainerClass=container-fluid
|
||||||
|
kcContentClass=col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3
|
||||||
|
|
||||||
|
kcHeaderClass=login-pf-page-header
|
||||||
|
kcFeedbackAreaClass=col-md-12
|
||||||
|
kcLocaleClass=col-xs-12 col-sm-1
|
||||||
|
|
||||||
|
## Locale
|
||||||
|
kcLocaleMainClass=pf-c-dropdown
|
||||||
|
kcLocaleListClass=pf-c-dropdown__menu pf-m-align-right
|
||||||
|
kcLocaleItemClass=pf-c-dropdown__menu-item
|
||||||
|
|
||||||
|
## Alert
|
||||||
|
kcAlertClass=pf-c-alert pf-m-inline
|
||||||
|
kcAlertTitleClass=pf-c-alert__title kc-feedback-text
|
||||||
|
|
||||||
|
kcFormAreaClass=col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2
|
||||||
|
kcFormCardClass=card-pf
|
||||||
|
|
||||||
|
### Social providers
|
||||||
|
kcFormSocialAccountListClass=pf-c-login__main-footer-links kc-social-links
|
||||||
|
kcFormSocialAccountListGridClass=pf-l-grid kc-social-grid
|
||||||
|
kcFormSocialAccountListButtonClass=pf-c-button pf-m-control pf-m-block kc-social-item kc-social-gray
|
||||||
|
kcFormSocialAccountGridItem=pf-l-grid__item
|
||||||
|
|
||||||
|
kcFormSocialAccountNameClass=kc-social-provider-name
|
||||||
|
kcFormSocialAccountLinkClass=pf-c-login__main-footer-links-item-link
|
||||||
|
kcFormSocialAccountSectionClass=kc-social-section kc-social-gray
|
||||||
|
kcFormHeaderClass=login-pf-header
|
||||||
|
|
||||||
|
kcFeedbackErrorIcon=fa fa-fw fa-exclamation-circle
|
||||||
|
kcFeedbackWarningIcon=fa fa-fw fa-exclamation-triangle
|
||||||
|
kcFeedbackSuccessIcon=fa fa-fw fa-check-circle
|
||||||
|
kcFeedbackInfoIcon=fa fa-fw fa-info-circle
|
||||||
|
|
||||||
|
kcResetFlowIcon=pficon pficon-arrow fa
|
||||||
|
|
||||||
|
# WebAuthn icons
|
||||||
|
kcWebAuthnKeyIcon=pficon pficon-key
|
||||||
|
kcWebAuthnDefaultIcon=pficon pficon-key
|
||||||
|
kcWebAuthnUnknownIcon=pficon pficon-key unknown-transport-class
|
||||||
|
kcWebAuthnUSB=fa fa-usb
|
||||||
|
kcWebAuthnNFC=fa fa-wifi
|
||||||
|
kcWebAuthnBLE=fa fa-bluetooth-b
|
||||||
|
kcWebAuthnInternal=pficon pficon-key
|
||||||
|
|
||||||
|
kcFormClass=form-horizontal
|
||||||
|
kcFormGroupClass=form-group
|
||||||
|
kcFormGroupErrorClass=has-error
|
||||||
|
kcLabelClass=pf-c-form__label pf-c-form__label-text
|
||||||
|
kcLabelWrapperClass=col-xs-12 col-sm-12 col-md-12 col-lg-12
|
||||||
|
kcInputClass=pf-c-form-control
|
||||||
|
kcInputHelperTextBeforeClass=pf-c-form__helper-text pf-c-form__helper-text-before
|
||||||
|
kcInputHelperTextAfterClass=pf-c-form__helper-text pf-c-form__helper-text-after
|
||||||
|
kcInputClassRadio=pf-c-radio
|
||||||
|
kcInputClassRadioInput=pf-c-radio__input
|
||||||
|
kcInputClassRadioLabel=pf-c-radio__label
|
||||||
|
kcInputClassCheckbox=pf-c-check
|
||||||
|
kcInputClassCheckboxInput=pf-c-check__input
|
||||||
|
kcInputClassCheckboxLabel=pf-c-check__label
|
||||||
|
kcInputClassRadioCheckboxLabelDisabled=pf-m-disabled
|
||||||
|
kcInputErrorMessageClass=pf-c-form__helper-text pf-m-error required kc-feedback-text
|
||||||
|
kcInputWrapperClass=col-xs-12 col-sm-12 col-md-12 col-lg-12
|
||||||
|
kcFormOptionsClass=col-xs-12 col-sm-12 col-md-12 col-lg-12
|
||||||
|
kcFormButtonsClass=col-xs-12 col-sm-12 col-md-12 col-lg-12
|
||||||
|
kcFormSettingClass=login-pf-settings
|
||||||
|
kcTextareaClass=form-control
|
||||||
|
kcSignUpClass=login-pf-signup
|
||||||
|
|
||||||
|
|
||||||
|
kcInfoAreaClass=col-xs-12 col-sm-4 col-md-4 col-lg-5 details
|
||||||
|
|
||||||
|
### user-profile grouping
|
||||||
|
kcFormGroupHeader=pf-c-form__group
|
||||||
|
|
||||||
|
##### css classes for form buttons
|
||||||
|
# main class used for all buttons
|
||||||
|
kcButtonClass=pf-c-button
|
||||||
|
# classes defining priority of the button - primary or default (there is typically only one priority button for the form)
|
||||||
|
kcButtonPrimaryClass=pf-m-primary
|
||||||
|
kcButtonDefaultClass=btn-default
|
||||||
|
# classes defining size of the button
|
||||||
|
kcButtonLargeClass=btn-lg
|
||||||
|
kcButtonBlockClass=pf-m-block
|
||||||
|
|
||||||
|
##### css classes for input
|
||||||
|
kcInputLargeClass=input-lg
|
||||||
|
|
||||||
|
##### css classes for form accessability
|
||||||
|
kcSrOnlyClass=sr-only
|
||||||
|
|
||||||
|
##### css classes for select-authenticator form
|
||||||
|
kcSelectAuthListClass=pf-l-stack select-auth-container
|
||||||
|
kcSelectAuthListItemClass=pf-l-stack__item select-auth-box-parent pf-l-split
|
||||||
|
kcSelectAuthListItemIconClass=pf-l-split__item select-auth-box-icon
|
||||||
|
kcSelectAuthListItemIconPropertyClass=fa-2x select-auth-box-icon-properties
|
||||||
|
kcSelectAuthListItemBodyClass=pf-l-split__item pf-l-stack
|
||||||
|
kcSelectAuthListItemHeadingClass=pf-l-stack__item select-auth-box-headline pf-c-title
|
||||||
|
kcSelectAuthListItemDescriptionClass=pf-l-stack__item select-auth-box-desc
|
||||||
|
kcSelectAuthListItemFillClass=pf-l-split__item pf-m-fill
|
||||||
|
kcSelectAuthListItemArrowClass=pf-l-split__item select-auth-box-arrow
|
||||||
|
kcSelectAuthListItemArrowIconClass=fa fa-angle-right fa-lg
|
||||||
|
kcSelectAuthListItemTitle=select-auth-box-paragraph
|
||||||
|
|
||||||
|
##### css classes for the authenticators
|
||||||
|
kcAuthenticatorDefaultClass=fa fa-list list-view-pf-icon-lg
|
||||||
|
kcAuthenticatorPasswordClass=fa fa-unlock list-view-pf-icon-lg
|
||||||
|
kcAuthenticatorOTPClass=fa fa-mobile list-view-pf-icon-lg
|
||||||
|
kcAuthenticatorWebAuthnClass=fa fa-key list-view-pf-icon-lg
|
||||||
|
kcAuthenticatorWebAuthnPasswordlessClass=fa fa-key list-view-pf-icon-lg
|
||||||
|
|
||||||
|
##### css classes for the OTP Login Form
|
||||||
|
kcLoginOTPListClass=pf-c-tile
|
||||||
|
kcLoginOTPListInputClass=pf-c-tile__input
|
||||||
|
kcLoginOTPListItemHeaderClass=pf-c-tile__header
|
||||||
|
kcLoginOTPListItemIconBodyClass=pf-c-tile__icon
|
||||||
|
kcLoginOTPListItemIconClass=fa fa-mobile
|
||||||
|
kcLoginOTPListItemTitleClass=pf-c-tile__title
|
||||||
|
|
||||||
|
##### css classes for identity providers logos
|
||||||
|
kcCommonLogoIdP=kc-social-provider-logo kc-social-gray
|
||||||
|
|
||||||
|
## Social
|
||||||
|
kcLogoIdP-facebook=fa fa-facebook
|
||||||
|
kcLogoIdP-google=fa fa-google
|
||||||
|
kcLogoIdP-github=fa fa-github
|
||||||
|
kcLogoIdP-linkedin=fa fa-linkedin
|
||||||
|
kcLogoIdP-instagram=fa fa-instagram
|
||||||
|
## windows instead of microsoft - not included in PF4
|
||||||
|
kcLogoIdP-microsoft=fa fa-windows
|
||||||
|
kcLogoIdP-bitbucket=fa fa-bitbucket
|
||||||
|
kcLogoIdP-gitlab=fa fa-gitlab
|
||||||
|
kcLogoIdP-paypal=fa fa-paypal
|
||||||
|
kcLogoIdP-stackoverflow=fa fa-stack-overflow
|
||||||
|
kcLogoIdP-twitter=fa fa-twitter
|
||||||
|
kcLogoIdP-openshift-v4=pf-icon pf-icon-openshift
|
||||||
|
kcLogoIdP-openshift-v3=pf-icon pf-icon-openshift
|
||||||
|
|
||||||
|
## Recovery codes
|
||||||
|
kcRecoveryCodesWarning=kc-recovery-codes-warning
|
||||||
|
kcRecoveryCodesList=kc-recovery-codes-list
|
||||||
|
kcRecoveryCodesActions=kc-recovery-codes-actions
|
||||||
|
kcRecoveryCodesConfirmation=kc-recovery-codes-confirmation
|
||||||
|
kcCheckClass=pf-c-check
|
||||||
|
kcCheckInputClass=pf-c-check__input
|
||||||
|
kcCheckLabelClass=pf-c-check__label
|
||||||
|
239
finallycoffee/welcome/index.ftl
Normal file → Executable file
@ -1,124 +1,135 @@
|
|||||||
<!doctype html>
|
<!--
|
||||||
<html lang="en">
|
~ JBoss, Home of Professional Open Source.
|
||||||
<head>
|
~ Copyright (c) 2011, Red Hat, Inc., and individual contributors
|
||||||
<meta charset="utf-8">
|
~ as indicated by the @author tags. See the copyright.txt file in the
|
||||||
<meta name="robots" content="noindex, nofollow">
|
~ distribution for a full listing of individual contributors.
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
~
|
||||||
|
~ This is free software; you can redistribute it and/or modify it
|
||||||
|
~ under the terms of the GNU Lesser General Public License as
|
||||||
|
~ published by the Free Software Foundation; either version 2.1 of
|
||||||
|
~ the License, or (at your option) any later version.
|
||||||
|
~
|
||||||
|
~ This software is distributed in the hope that it will be useful,
|
||||||
|
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
~ Lesser General Public License for more details.
|
||||||
|
~
|
||||||
|
~ You should have received a copy of the GNU Lesser General Public
|
||||||
|
~ License along with this software; if not, write to the Free
|
||||||
|
~ Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
||||||
|
~ 02110-1301 USA, or see the FSF site: http://www.fsf.org.
|
||||||
|
-->
|
||||||
|
<!DOCTYPE html>
|
||||||
|
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
<title>Welcome to ${productName}</title>
|
<title>Welcome to ${productName}</title>
|
||||||
<link rel="shortcut icon" href="${resourcesCommonPath}/img/favicon.ico">
|
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
|
||||||
|
<link rel="shortcut icon" href="${resourcesPath}/img/favicon.ico" />
|
||||||
|
|
||||||
<#if properties.stylesCommon?has_content>
|
<#if properties.stylesCommon?has_content>
|
||||||
<#list properties.stylesCommon?split(' ') as style>
|
<#list properties.stylesCommon?split(' ') as style>
|
||||||
<link rel="stylesheet" href="${resourcesCommonPath}/${style}">
|
<link href="${resourcesCommonPath}/${style}" rel="stylesheet" />
|
||||||
</#list>
|
</#list>
|
||||||
</#if>
|
</#if>
|
||||||
<#if properties.styles?has_content>
|
<#if properties.styles?has_content>
|
||||||
<#list properties.styles?split(' ') as style>
|
<#list properties.styles?split(' ') as style>
|
||||||
<link rel="stylesheet" href="${resourcesPath}/${style}">
|
<link href="${resourcesPath}/${style}" rel="stylesheet" />
|
||||||
</#list>
|
</#list>
|
||||||
</#if>
|
</#if>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
|
||||||
<div class="pf-v5-c-background-image" style="--pf-v5-c-background-image--BackgroundImage: url(${baseUrl}${resourcesPath}/background.svg)"></div>
|
<body>
|
||||||
<div class="pf-v5-c-login">
|
<div class="container-fluid">
|
||||||
<div class="pf-v5-c-login__container">
|
<div class="row">
|
||||||
<header class="pf-v5-c-login__header">
|
<div class="col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2">
|
||||||
<div class="pf-v5-c-brand">
|
<div class="welcome-header">
|
||||||
<img src="${resourcesPath}/logo.svg" alt="${productName} Logo" class="kc-brand">
|
<img src="${resourcesPath}/logo.png" alt="${productName}" border="0" />
|
||||||
</div>
|
<h1>Welcome to <strong>${productName}</strong></h1>
|
||||||
</header>
|
</div>
|
||||||
<#if adminConsoleEnabled && (bootstrap || successMessage?has_content)>
|
<div class="row">
|
||||||
<main class="pf-v5-c-login__main">
|
<#if adminConsoleEnabled>
|
||||||
<header class="pf-v5-c-login__main-header">
|
<div class="col-xs-12 col-sm-4">
|
||||||
<#if localUser>
|
<div class="card-pf h-l">
|
||||||
<h1 class="pf-v5-c-title pf-m-2xl">Create a temporary administrative user</h1>
|
<#if successMessage?has_content>
|
||||||
<#if !successMessage?has_content>
|
<p class="alert success">${successMessage}</p>
|
||||||
<p class="pf-v5-c-login__main-header-desc">To get started with ${productName}, you first create a temporary administrative user. Later, to harden security, create a new permanent administrative user and delete the temporary user that was created during this setup.</p>
|
<#elseif errorMessage?has_content>
|
||||||
</#if>
|
<p class="alert error">${errorMessage}</p>
|
||||||
<#else>
|
<h3><img src="welcome-content/user.png">Administration Console</h3>
|
||||||
<h1 class="pf-v5-c-title pf-m-3xl">Local access required</h1>
|
<#elseif bootstrap>
|
||||||
<p class="pf-v5-c-login__main-header-desc">You will need local access to create the temporary administrative user.</p>
|
<#if localUser>
|
||||||
</#if>
|
<h3><img src="welcome-content/user.png">Administration Console</h3>
|
||||||
</header>
|
<p>Please create an initial admin user to get started.</p>
|
||||||
<div class="pf-v5-c-login__main-body">
|
<#else>
|
||||||
<#if successMessage?has_content>
|
<p class="welcome-message">
|
||||||
<div class="pf-v5-c-alert pf-m-inline pf-m-success pf-v5-u-mb-xl">
|
<img src="welcome-content/alert.png">You need local access to create the initial admin user. <br><br>Open <a href="${localAdminUrl}">${localAdminUrl}</a>
|
||||||
<div class="pf-v5-c-alert__icon">
|
<br>${adminUserCreationMessage}.
|
||||||
<svg class="pf-v5-svg" viewBox="0 0 512 512" fill="currentColor" aria-hidden="true" role="img" width="1em" height="1em">
|
</p>
|
||||||
<path d="M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z"></path>
|
</#if>
|
||||||
</svg>
|
</#if>
|
||||||
</div>
|
|
||||||
<h4 class="pf-v5-c-alert__title">
|
<#if bootstrap && localUser>
|
||||||
<span class="pf-v5-screen-reader">Success alert:</span>${successMessage}
|
<form method="post" class="welcome-form">
|
||||||
</h4>
|
<p>
|
||||||
</div>
|
<label for="username">Username</label>
|
||||||
<a class="pf-v5-c-button pf-m-primary pf-m-block" href="${adminUrl}">Open Administration Console</a>
|
<input id="username" name="username" />
|
||||||
</#if>
|
</p>
|
||||||
<#if bootstrap>
|
|
||||||
<#if localUser>
|
<p>
|
||||||
<form class="pf-v5-c-form" method="post" novalidate>
|
<label for="password">Password</label>
|
||||||
<#if errorMessage?has_content>
|
<input id="password" name="password" type="password" />
|
||||||
<div class="pf-v5-c-form__alert">
|
</p>
|
||||||
<div class="pf-v5-c-alert pf-m-inline pf-m-danger">
|
|
||||||
<div class="pf-v5-c-alert__icon">
|
<p>
|
||||||
<svg class="pf-v5-svg" viewBox="0 0 512 512" fill="currentColor" aria-hidden="true" role="img" width="1em" height="1em">
|
<label for="passwordConfirmation">Password confirmation</label>
|
||||||
<path d="M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"></path>
|
<input id="passwordConfirmation" name="passwordConfirmation" type="password" />
|
||||||
</svg>
|
</p>
|
||||||
</div>
|
|
||||||
<h4 class="pf-v5-c-alert__title">
|
<input id="stateChecker" name="stateChecker" type="hidden" value="${stateChecker}" />
|
||||||
<span class="pf-v5-screen-reader">Danger alert:</span>${errorMessage}
|
|
||||||
</h4>
|
<button id="create-button" type="submit" class="btn btn-primary">Create</button>
|
||||||
</div>
|
</form>
|
||||||
</div>
|
</#if>
|
||||||
</#if>
|
|
||||||
<div class="pf-v5-c-form__group">
|
<div class="welcome-primary-link">
|
||||||
<div class="pf-v5-c-form__group-label">
|
<h3><a href="${adminUrl}"><img src="welcome-content/user.png">Administration Console <i class="fa fa-angle-right link" aria-hidden="true"></i></a></h3>
|
||||||
<label class="pf-v5-c-form__label" for="username">
|
<div class="description">
|
||||||
<span class="pf-v5-c-form__label-text">Username</span> <span class="pf-v5-c-form__label-required" aria-hidden="true">*</span>
|
Centrally manage all aspects of the ${productName} server
|
||||||
</label>
|
</div>
|
||||||
</div>
|
|
||||||
<div class="pf-v5-c-form__group-control">
|
|
||||||
<span class="pf-v5-c-form-control pf-m-required">
|
|
||||||
<input id="username" type="text" name="username" autocomplete="username" required>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="pf-v5-c-form__group">
|
|
||||||
<div class="pf-v5-c-form__group-label">
|
|
||||||
<label class="pf-v5-c-form__label" for="password">
|
|
||||||
<span class="pf-v5-c-form__label-text">Password</span> <span class="pf-v5-c-form__label-required" aria-hidden="true">*</span>
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
<div class="pf-v5-c-form__group-control">
|
|
||||||
<span class="pf-v5-c-form-control pf-m-required">
|
|
||||||
<input id="password" type="password" name="password" autocomplete="new-password" required>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="pf-v5-c-form__group">
|
|
||||||
<div class="pf-v5-c-form__group-label">
|
|
||||||
<label class="pf-v5-c-form__label" for="password-confirmation">
|
|
||||||
<span class="pf-v5-c-form__label-text">Password confirmation</span> <span class="pf-v5-c-form__label-required" aria-hidden="true">*</span>
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
<div class="pf-v5-c-form__group-control">
|
|
||||||
<span class="pf-v5-c-form-control pf-m-required">
|
|
||||||
<input id="password-confirmation" type="password" name="passwordConfirmation" autocomplete="new-password" required>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<input name="stateChecker" type="hidden" value="${stateChecker}">
|
|
||||||
<div class="pf-v5-c-form__group pf-m-action">
|
|
||||||
<button class="pf-v5-c-button pf-m-primary pf-m-block" type="submit">Create user</button>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
<#else>
|
|
||||||
<p>To create the temporary administrative user open <a href="${localAdminUrl}">${localAdminUrl}</a>, or set the environment variables <code>KC_BOOTSTRAP_ADMIN_USERNAME</code> and <code>KC_BOOTSTRAP_ADMIN_PASSWORD</code> when starting the server.</p>
|
|
||||||
</#if>
|
|
||||||
</#if>
|
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</div>
|
||||||
|
</div>
|
||||||
|
</#if> <#-- adminConsoleEnabled -->
|
||||||
|
<div class="col-xs-12 col-sm-4">
|
||||||
|
<div class="card-pf h-l">
|
||||||
|
<h3><a href="${properties.documentationUrl}"><img class="doc-img" src="welcome-content/admin-console.png">Documentation <i class="fa fa-angle-right link" aria-hidden="true"></i></a></h3>
|
||||||
|
<div class="description">
|
||||||
|
|
||||||
|
User Guide, Admin REST API and Javadocs
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-12 col-sm-4">
|
||||||
|
<#if properties.displayCommunityLinks = "true">
|
||||||
|
<div class="card-pf h-m">
|
||||||
|
<h3><a href="http://www.keycloak.org"><img src="welcome-content/keycloak-project.png">Keycloak Project <i class="fa fa-angle-right link" aria-hidden="true"></i></a></h3>
|
||||||
|
</div>
|
||||||
|
<div class="card-pf h-m">
|
||||||
|
<h3><a href="https://groups.google.com/forum/#!forum/keycloak-user"><img src="welcome-content/mail.png">Mailing List <i class="fa fa-angle-right link" aria-hidden="true"></i></a></h3>
|
||||||
|
</div>
|
||||||
|
<div class="card-pf h-m">
|
||||||
|
<h3><a href="https://github.com/keycloak/keycloak/issues"><img src="welcome-content/bug.png">Report an issue <i class="fa fa-angle-right link" aria-hidden="true"></i></a></h3>
|
||||||
|
</div>
|
||||||
</#if>
|
</#if>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
Before Width: | Height: | Size: 312 KiB |
BIN
finallycoffee/welcome/resources/bg.png
Normal file
After Width: | Height: | Size: 71 KiB |
@ -1,19 +1,140 @@
|
|||||||
.pf-v5-c-background-image {
|
body {
|
||||||
/* Change background size so that the image covers the entire background. */
|
background: #fff url(../bg.png) no-repeat center bottom fixed;
|
||||||
--pf-v5-c-background-image--BackgroundSize: cover;
|
background-size: cover;
|
||||||
--pf-v5-c-background-image--BackgroundImage: url(../bg.jpg);
|
}
|
||||||
|
.welcome-header {
|
||||||
|
margin-top: 10px;
|
||||||
|
margin-bottom: 50px;
|
||||||
|
margin-left: -10px;
|
||||||
|
}
|
||||||
|
.welcome-header img {
|
||||||
|
width: 150px;
|
||||||
|
margin-bottom: 40px;
|
||||||
|
}
|
||||||
|
.welcome-message {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
.h-l {
|
||||||
|
min-height: 370px;
|
||||||
|
padding: 10px 20px 10px;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
.h-l h3 {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
.h-m {
|
||||||
|
height: 110px;
|
||||||
|
padding-top: 23px;
|
||||||
|
}
|
||||||
|
.card-pf img {
|
||||||
|
width: 22px;
|
||||||
|
margin-right: 10px;
|
||||||
|
vertical-align: bottom;
|
||||||
|
}
|
||||||
|
img.doc-img {
|
||||||
|
width: auto;
|
||||||
|
height: 22px;
|
||||||
|
}
|
||||||
|
.link {
|
||||||
|
font-size: 16px;
|
||||||
|
vertical-align: baseline;
|
||||||
|
margin-left: 5px;
|
||||||
|
}
|
||||||
|
h3 {
|
||||||
|
font-weight: 550;
|
||||||
|
}
|
||||||
|
h3 a:link,
|
||||||
|
h3 a:visited {
|
||||||
|
color: #333;
|
||||||
|
font-weight: 550;
|
||||||
|
}
|
||||||
|
h3 a:hover,
|
||||||
|
h3 a:hover .link {
|
||||||
|
text-decoration: none;
|
||||||
|
color: #00659c;
|
||||||
|
}
|
||||||
|
.h-l h3 a img {
|
||||||
|
height: 30px;
|
||||||
|
width: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.pf-v5-c-login__container {
|
.description {
|
||||||
/* Change the grid layout so that the header is always above the main area. */
|
margin-top: 30px;
|
||||||
grid-template-areas: "header" "main";
|
|
||||||
--pf-v5-c-login__container--xl--GridTemplateColumns: minmax(auto, 34rem);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.card-pf {
|
||||||
.kc-brand {
|
border-top: 1px solid rgba(3, 3, 3, 0.1);
|
||||||
height: 63px;
|
box-shadow: 0 1px 1px rgba(3, 3, 3, 0.275);
|
||||||
width: 300px;
|
}
|
||||||
display: block;
|
|
||||||
margin: 0 auto;
|
.welcome-form label,
|
||||||
|
.welcome-form input {
|
||||||
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcome-form label {
|
||||||
|
color: #828486;
|
||||||
|
font-weight: normal;
|
||||||
|
margin-top: 18px;
|
||||||
|
}
|
||||||
|
.welcome-form input {
|
||||||
|
border: 0;
|
||||||
|
border-bottom: solid 1px #cbcbcb;
|
||||||
|
}
|
||||||
|
.welcome-form input:focus {
|
||||||
|
border-bottom: solid 1px #5e99c6;
|
||||||
|
outline-width: 0;
|
||||||
|
}
|
||||||
|
.welcome-form button {
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
.error {
|
||||||
|
color: #c00;
|
||||||
|
border-color: #c00;
|
||||||
|
padding: 5px 10px;
|
||||||
|
}
|
||||||
|
.success {
|
||||||
|
color: #3f9c35;
|
||||||
|
border-color: #3f9c35;
|
||||||
|
padding: 5px 10px;
|
||||||
|
}
|
||||||
|
.welcome-form + .welcome-primary-link,
|
||||||
|
.welcome-message + .welcome-primary-link {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer img {
|
||||||
|
float: right;
|
||||||
|
width: 150px;
|
||||||
|
margin-top: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.welcome-header {
|
||||||
|
margin-top: 10px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
.welcome-header img {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
h3 {
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
.h-l,
|
||||||
|
.h-m {
|
||||||
|
height: auto;
|
||||||
|
min-height: auto;
|
||||||
|
padding: 5px 10px;
|
||||||
|
}
|
||||||
|
.h-l img {
|
||||||
|
display: inline;
|
||||||
|
margin-bottom: auto;
|
||||||
|
}
|
||||||
|
.description {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.footer img {
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Before Width: | Height: | Size: 166 KiB |
BIN
finallycoffee/welcome/resources/keycloak_logo.png
Normal file
After Width: | Height: | Size: 7.4 KiB |
Before Width: | Height: | Size: 160 KiB After Width: | Height: | Size: 7.4 KiB |
@ -1,8 +1,7 @@
|
|||||||
styles=css/welcome.css
|
styles=css/welcome.css
|
||||||
import=common/keycloak
|
import=common/keycloak
|
||||||
|
|
||||||
stylesCommon=vendor/patternfly-v5/patternfly.min.css vendor/patternfly-v5/patternfly-addons.css
|
stylesCommon=node_modules/patternfly/dist/css/patternfly.css node_modules/patternfly/dist/css/patternfly-additions.css
|
||||||
|
|
||||||
productName=id.finally.coffee
|
|
||||||
documentationUrl=https://www.keycloak.org/documentation.html
|
documentationUrl=https://www.keycloak.org/documentation.html
|
||||||
displayCommunityLinks=true
|
displayCommunityLinks=true
|