Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in / Register
Toggle navigation
S
spring-boot
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
DEMO
spring-boot
Commits
523956e2
Commit
523956e2
authored
May 20, 2014
by
Dave Syer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add sample project for Groovy templates
parent
334c8142
Changes
19
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
11325 additions
and
0 deletions
+11325
-0
pom.xml
spring-boot-samples/pom.xml
+1
-0
README.md
...samples/spring-boot-sample-web-groovy-templates/README.md
+10
-0
pom.xml
...t-samples/spring-boot-sample-web-groovy-templates/pom.xml
+52
-0
InMemoryMessageRespository.java
...s/src/main/java/sample/ui/InMemoryMessageRespository.java
+53
-0
Message.java
...web-groovy-templates/src/main/java/sample/ui/Message.java
+66
-0
MessageRepository.java
...-templates/src/main/java/sample/ui/MessageRepository.java
+27
-0
SampleGroovyTemplateApplication.java
.../main/java/sample/ui/SampleGroovyTemplateApplication.java
+50
-0
MessageController.java
...plates/src/main/java/sample/ui/mvc/MessageController.java
+92
-0
application.properties
...roovy-templates/src/main/resources/application.properties
+2
-0
logback.xml
...ample-web-groovy-templates/src/main/resources/logback.xml
+8
-0
bootstrap.min.css
...templates/src/main/resources/static/css/bootstrap.min.css
+11
-0
jquery-1.7.2.js
...vy-templates/src/main/resources/static/js/jquery-1.7.2.js
+9404
-0
jquery.validate.js
...templates/src/main/resources/static/js/jquery.validate.js
+1250
-0
layout.tpl
...-groovy-templates/src/main/resources/templates/layout.tpl
+27
-0
form.tpl
...-templates/src/main/resources/templates/messages/form.tpl
+25
-0
list.tpl
...-templates/src/main/resources/templates/messages/list.tpl
+31
-0
view.tpl
...-templates/src/main/resources/templates/messages/view.tpl
+21
-0
MessageControllerWebTests.java
...es/src/test/java/sample/ui/MessageControllerWebTests.java
+111
-0
SampleGroovyTemplateApplicationTests.java
.../java/sample/ui/SampleGroovyTemplateApplicationTests.java
+84
-0
No files found.
spring-boot-samples/pom.xml
View file @
523956e2
...
@@ -44,6 +44,7 @@
...
@@ -44,6 +44,7 @@
<module>
spring-boot-sample-tomcat-multi-connectors
</module>
<module>
spring-boot-sample-tomcat-multi-connectors
</module>
<module>
spring-boot-sample-traditional
</module>
<module>
spring-boot-sample-traditional
</module>
<module>
spring-boot-sample-web-freemarker
</module>
<module>
spring-boot-sample-web-freemarker
</module>
<module>
spring-boot-sample-web-groovy-template
</module>
<module>
spring-boot-sample-web-method-security
</module>
<module>
spring-boot-sample-web-method-security
</module>
<module>
spring-boot-sample-web-secure
</module>
<module>
spring-boot-sample-web-secure
</module>
<module>
spring-boot-sample-web-static
</module>
<module>
spring-boot-sample-web-static
</module>
...
...
spring-boot-samples/spring-boot-sample-web-groovy-templates/README.md
0 → 100644
View file @
523956e2
This sample application uses Spring Boot and
[
Groovy templates
](
http://beta.groovy-lang.org/docs/groovy-2.3.0/html/documentation/markup-template-engine.html
)
in the View layer. The templates for this app live in
`classpath:/templates/`
, which is the conventional location for Spring
Boot. External configuration is available via
"spring.groovy.template.
*
".
The templates all use a fixed "layout" implemented anticipating
changes in Groovy 2.3.1 using a custom
`BaseTemplate`
class
(
`LayoutAwareTemplate`
).
spring-boot-samples/spring-boot-sample-web-groovy-templates/pom.xml
0 → 100644
View file @
523956e2
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<modelVersion>
4.0.0
</modelVersion>
<parent>
<!-- Your own application should inherit from spring-boot-starter-parent -->
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-samples
</artifactId>
<version>
1.1.0.BUILD-SNAPSHOT
</version>
</parent>
<artifactId>
spring-boot-sample-web-groovy-templates
</artifactId>
<name>
spring-boot-sample-web-groovy-templates
</name>
<description>
Spring Boot Web UI Sample
</description>
<url>
http://projects.spring.io/spring-boot/
</url>
<organization>
<name>
Pivotal Software, Inc.
</name>
<url>
http://www.spring.io
</url>
</organization>
<properties>
<main.basedir>
${basedir}/../..
</main.basedir>
</properties>
<dependencies>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-web
</artifactId>
</dependency>
<dependency>
<groupId>
org.codehaus.groovy
</groupId>
<artifactId>
groovy-templates
</artifactId>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-test
</artifactId>
<scope>
test
</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-maven-plugin
</artifactId>
<dependencies>
<dependency>
<groupId>
org.springframework
</groupId>
<artifactId>
springloaded
</artifactId>
<version>
1.2.0.RELEASE
</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
spring-boot-samples/spring-boot-sample-web-groovy-templates/src/main/java/sample/ui/InMemoryMessageRespository.java
0 → 100644
View file @
523956e2
/*
* Copyright 2012-2013 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
sample
.
ui
;
import
java.util.concurrent.ConcurrentHashMap
;
import
java.util.concurrent.ConcurrentMap
;
import
java.util.concurrent.atomic.AtomicLong
;
/**
* @author Dave Syer
*/
public
class
InMemoryMessageRespository
implements
MessageRepository
{
private
static
AtomicLong
counter
=
new
AtomicLong
();
private
final
ConcurrentMap
<
Long
,
Message
>
messages
=
new
ConcurrentHashMap
<
Long
,
Message
>();
@Override
public
Iterable
<
Message
>
findAll
()
{
return
this
.
messages
.
values
();
}
@Override
public
Message
save
(
Message
message
)
{
Long
id
=
message
.
getId
();
if
(
id
==
null
)
{
id
=
counter
.
incrementAndGet
();
message
.
setId
(
id
);
}
this
.
messages
.
put
(
id
,
message
);
return
message
;
}
@Override
public
Message
findMessage
(
Long
id
)
{
return
this
.
messages
.
get
(
id
);
}
}
spring-boot-samples/spring-boot-sample-web-groovy-templates/src/main/java/sample/ui/Message.java
0 → 100644
View file @
523956e2
/*
* Copyright 2012 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package
sample
.
ui
;
import
java.util.Date
;
import
org.hibernate.validator.constraints.NotEmpty
;
/**
* @author Rob Winch
*/
public
class
Message
{
private
Long
id
;
@NotEmpty
(
message
=
"Message is required."
)
private
String
text
;
@NotEmpty
(
message
=
"Summary is required."
)
private
String
summary
;
private
Date
created
=
new
Date
();
public
Long
getId
()
{
return
this
.
id
;
}
public
void
setId
(
Long
id
)
{
this
.
id
=
id
;
}
public
Date
getCreated
()
{
return
this
.
created
;
}
public
void
setCreated
(
Date
created
)
{
this
.
created
=
created
;
}
public
String
getText
()
{
return
this
.
text
;
}
public
void
setText
(
String
text
)
{
this
.
text
=
text
;
}
public
String
getSummary
()
{
return
this
.
summary
;
}
public
void
setSummary
(
String
summary
)
{
this
.
summary
=
summary
;
}
}
spring-boot-samples/spring-boot-sample-web-groovy-templates/src/main/java/sample/ui/MessageRepository.java
0 → 100644
View file @
523956e2
/*
* Copyright 2012 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package
sample
.
ui
;
/**
* @author Rob Winch
*/
public
interface
MessageRepository
{
Iterable
<
Message
>
findAll
();
Message
save
(
Message
message
);
Message
findMessage
(
Long
id
);
}
spring-boot-samples/spring-boot-sample-web-groovy-templates/src/main/java/sample/ui/SampleGroovyTemplateApplication.java
0 → 100644
View file @
523956e2
/*
* Copyright 2012-2013 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
sample
.
ui
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.EnableAutoConfiguration
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.ComponentScan
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.core.convert.converter.Converter
;
@Configuration
@EnableAutoConfiguration
@ComponentScan
public
class
SampleGroovyTemplateApplication
{
@Bean
public
MessageRepository
messageRepository
()
{
return
new
InMemoryMessageRespository
();
}
@Bean
public
Converter
<
String
,
Message
>
messageConverter
()
{
return
new
Converter
<
String
,
Message
>()
{
@Override
public
Message
convert
(
String
id
)
{
return
messageRepository
().
findMessage
(
Long
.
valueOf
(
id
));
}
};
}
public
static
void
main
(
String
[]
args
)
throws
Exception
{
SpringApplication
.
run
(
SampleGroovyTemplateApplication
.
class
,
args
);
}
}
spring-boot-samples/spring-boot-sample-web-groovy-templates/src/main/java/sample/ui/mvc/MessageController.java
0 → 100644
View file @
523956e2
/*
* Copyright 2012 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package
sample
.
ui
.
mvc
;
import
java.util.HashMap
;
import
java.util.Map
;
import
javax.validation.Valid
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Controller
;
import
org.springframework.validation.BindingResult
;
import
org.springframework.validation.FieldError
;
import
org.springframework.validation.ObjectError
;
import
org.springframework.web.bind.annotation.ModelAttribute
;
import
org.springframework.web.bind.annotation.PathVariable
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.servlet.ModelAndView
;
import
org.springframework.web.servlet.mvc.support.RedirectAttributes
;
import
sample.ui.Message
;
import
sample.ui.MessageRepository
;
/**
* @author Rob Winch
*/
@Controller
@RequestMapping
(
"/"
)
public
class
MessageController
{
private
final
MessageRepository
messageRepository
;
@Autowired
public
MessageController
(
MessageRepository
messageRepository
)
{
this
.
messageRepository
=
messageRepository
;
}
@RequestMapping
public
ModelAndView
list
()
{
Iterable
<
Message
>
messages
=
this
.
messageRepository
.
findAll
();
return
new
ModelAndView
(
"messages/list"
,
"messages"
,
messages
);
}
@RequestMapping
(
"{id}"
)
public
ModelAndView
view
(
@PathVariable
(
"id"
)
Message
message
)
{
return
new
ModelAndView
(
"messages/view"
,
"message"
,
message
);
}
@RequestMapping
(
params
=
"form"
,
method
=
RequestMethod
.
GET
)
public
String
createForm
(
@ModelAttribute
Message
message
)
{
return
"messages/form"
;
}
@RequestMapping
(
method
=
RequestMethod
.
POST
)
public
ModelAndView
create
(
@Valid
Message
message
,
BindingResult
result
,
RedirectAttributes
redirect
)
{
if
(
result
.
hasErrors
())
{
ModelAndView
mav
=
new
ModelAndView
(
"messages/form"
);
mav
.
addObject
(
"formErrors"
,
result
.
getAllErrors
());
mav
.
addObject
(
"fieldErrors"
,
getFieldErrors
(
result
));
return
mav
;
}
message
=
this
.
messageRepository
.
save
(
message
);
redirect
.
addFlashAttribute
(
"globalMessage"
,
"Successfully created a new message"
);
return
new
ModelAndView
(
"redirect:/{message.id}"
,
"message.id"
,
message
.
getId
());
}
private
Map
<
String
,
ObjectError
>
getFieldErrors
(
BindingResult
result
)
{
Map
<
String
,
ObjectError
>
map
=
new
HashMap
<
String
,
ObjectError
>();
for
(
FieldError
error
:
result
.
getFieldErrors
())
{
map
.
put
(
error
.
getField
(),
error
);
}
return
map
;
}
@RequestMapping
(
"foo"
)
public
String
foo
()
{
throw
new
RuntimeException
(
"Expected exception in controller"
);
}
}
spring-boot-samples/spring-boot-sample-web-groovy-templates/src/main/resources/application.properties
0 → 100644
View file @
523956e2
# Allow templates to be reloaded at dev time
spring.groovy.template.cache
:
false
spring-boot-samples/spring-boot-sample-web-groovy-templates/src/main/resources/logback.xml
0 → 100644
View file @
523956e2
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include
resource=
"org/springframework/boot/logging/logback/base.xml"
/>
<logger
name=
"org.springframework.web"
level=
"DEBUG"
/>
</configuration>
spring-boot-samples/spring-boot-sample-web-groovy-templates/src/main/resources/static/css/bootstrap.min.css
0 → 100644
View file @
523956e2
/*!
* Bootstrap v2.0.4
*
* Copyright 2012 Twitter, Inc
* Licensed under the Apache License v2.0
* http://www.apache.org/licenses/LICENSE-2.0
*
* Designed and built with all the love in the world @twitter by @mdo and @fat.
*/
article
,
aside
,
details
,
figcaption
,
figure
,
footer
,
header
,
hgroup
,
nav
,
section
{
display
:
block
}
audio
,
canvas
,
video
{
display
:
inline-block
;
*
display
:
inline
;
*
zoom
:
1
}
audio
:not
([
controls
])
{
display
:
none
}
html
{
font-size
:
100%
;
-webkit-text-size-adjust
:
100%
;
-ms-text-size-adjust
:
100%
}
a
:focus
{
outline
:
thin
dotted
#333
;
outline
:
5px
auto
-webkit-focus-ring-color
;
outline-offset
:
-2px
}
a
:hover
,
a
:active
{
outline
:
0
}
sub
,
sup
{
position
:
relative
;
font-size
:
75%
;
line-height
:
0
;
vertical-align
:
baseline
}
sup
{
top
:
-0.5em
}
sub
{
bottom
:
-0.25em
}
img
{
max-width
:
100%
;
vertical-align
:
middle
;
border
:
0
;
-ms-interpolation-mode
:
bicubic
}
#map_canvas
img
{
max-width
:
none
}
button
,
input
,
select
,
textarea
{
margin
:
0
;
font-size
:
100%
;
vertical-align
:
middle
}
button
,
input
{
*
overflow
:
visible
;
line-height
:
normal
}
button
::-moz-focus-inner
,
input
::-moz-focus-inner
{
padding
:
0
;
border
:
0
}
button
,
input
[
type
=
"button"
],
input
[
type
=
"reset"
],
input
[
type
=
"submit"
]
{
cursor
:
pointer
;
-webkit-appearance
:
button
}
input
[
type
=
"search"
]
{
-webkit-box-sizing
:
content-box
;
-moz-box-sizing
:
content-box
;
box-sizing
:
content-box
;
-webkit-appearance
:
textfield
}
input
[
type
=
"search"
]
::-webkit-search-decoration
,
input
[
type
=
"search"
]
::-webkit-search-cancel-button
{
-webkit-appearance
:
none
}
textarea
{
overflow
:
auto
;
vertical-align
:
top
}
.clearfix
{
*
zoom
:
1
}
.clearfix
:before
,
.clearfix
:after
{
display
:
table
;
content
:
""
}
.clearfix
:after
{
clear
:
both
}
.hide-text
{
font
:
0
/
0
a
;
color
:
transparent
;
text-shadow
:
none
;
background-color
:
transparent
;
border
:
0
}
.input-block-level
{
display
:
block
;
width
:
100%
;
min-height
:
28px
;
-webkit-box-sizing
:
border-box
;
-moz-box-sizing
:
border-box
;
-ms-box-sizing
:
border-box
;
box-sizing
:
border-box
}
body
{
margin
:
0
;
font-family
:
"Helvetica Neue"
,
Helvetica
,
Arial
,
sans-serif
;
font-size
:
13px
;
line-height
:
18px
;
color
:
#333
;
background-color
:
#fff
}
a
{
color
:
#08c
;
text-decoration
:
none
}
a
:hover
{
color
:
#005580
;
text-decoration
:
underline
}
.row
{
margin-left
:
-20px
;
*
zoom
:
1
}
.row
:before
,
.row
:after
{
display
:
table
;
content
:
""
}
.row
:after
{
clear
:
both
}
[
class
*=
"span"
]
{
float
:
left
;
margin-left
:
20px
}
.container
,
.navbar-fixed-top
.container
,
.navbar-fixed-bottom
.container
{
width
:
940px
}
.span12
{
width
:
940px
}
.span11
{
width
:
860px
}
.span10
{
width
:
780px
}
.span9
{
width
:
700px
}
.span8
{
width
:
620px
}
.span7
{
width
:
540px
}
.span6
{
width
:
460px
}
.span5
{
width
:
380px
}
.span4
{
width
:
300px
}
.span3
{
width
:
220px
}
.span2
{
width
:
140px
}
.span1
{
width
:
60px
}
.offset12
{
margin-left
:
980px
}
.offset11
{
margin-left
:
900px
}
.offset10
{
margin-left
:
820px
}
.offset9
{
margin-left
:
740px
}
.offset8
{
margin-left
:
660px
}
.offset7
{
margin-left
:
580px
}
.offset6
{
margin-left
:
500px
}
.offset5
{
margin-left
:
420px
}
.offset4
{
margin-left
:
340px
}
.offset3
{
margin-left
:
260px
}
.offset2
{
margin-left
:
180px
}
.offset1
{
margin-left
:
100px
}
.row-fluid
{
width
:
100%
;
*
zoom
:
1
}
.row-fluid
:before
,
.row-fluid
:after
{
display
:
table
;
content
:
""
}
.row-fluid
:after
{
clear
:
both
}
.row-fluid
[
class
*=
"span"
]
{
display
:
block
;
float
:
left
;
width
:
100%
;
min-height
:
28px
;
margin-left
:
2.127659574%
;
*
margin-left
:
2.0744680846382977%
;
-webkit-box-sizing
:
border-box
;
-moz-box-sizing
:
border-box
;
-ms-box-sizing
:
border-box
;
box-sizing
:
border-box
}
.row-fluid
[
class
*=
"span"
]
:first-child
{
margin-left
:
0
}
.row-fluid
.span12
{
width
:
99.99999998999999%
;
*
width
:
99.94680850063828%
}
.row-fluid
.span11
{
width
:
91.489361693%
;
*
width
:
91.4361702036383%
}
.row-fluid
.span10
{
width
:
82.97872339599999%
;
*
width
:
82.92553190663828%
}
.row-fluid
.span9
{
width
:
74.468085099%
;
*
width
:
74.4148936096383%
}
.row-fluid
.span8
{
width
:
65.95744680199999%
;
*
width
:
65.90425531263828%
}
.row-fluid
.span7
{
width
:
57.446808505%
;
*
width
:
57.3936170156383%
}
.row-fluid
.span6
{
width
:
48.93617020799999%
;
*
width
:
48.88297871863829%
}
.row-fluid
.span5
{
width
:
40.425531911%
;
*
width
:
40.3723404216383%
}
.row-fluid
.span4
{
width
:
31.914893614%
;
*
width
:
31.8617021246383%
}
.row-fluid
.span3
{
width
:
23.404255317%
;
*
width
:
23.3510638276383%
}
.row-fluid
.span2
{
width
:
14.89361702%
;
*
width
:
14.8404255306383%
}
.row-fluid
.span1
{
width
:
6.382978723%
;
*
width
:
6.329787233638298%
}
.container
{
margin-right
:
auto
;
margin-left
:
auto
;
*
zoom
:
1
}
.container
:before
,
.container
:after
{
display
:
table
;
content
:
""
}
.container
:after
{
clear
:
both
}
.container-fluid
{
padding-right
:
20px
;
padding-left
:
20px
;
*
zoom
:
1
}
.container-fluid
:before
,
.container-fluid
:after
{
display
:
table
;
content
:
""
}
.container-fluid
:after
{
clear
:
both
}
p
{
margin
:
0
0
9px
}
p
small
{
font-size
:
11px
;
color
:
#999
}
.lead
{
margin-bottom
:
18px
;
font-size
:
20px
;
font-weight
:
200
;
line-height
:
27px
}
h1
,
h2
,
h3
,
h4
,
h5
,
h6
{
margin
:
0
;
font-family
:
inherit
;
font-weight
:
bold
;
color
:
inherit
;
text-rendering
:
optimizelegibility
}
h1
small
,
h2
small
,
h3
small
,
h4
small
,
h5
small
,
h6
small
{
font-weight
:
normal
;
color
:
#999
}
h1
{
font-size
:
30px
;
line-height
:
36px
}
h1
small
{
font-size
:
18px
}
h2
{
font-size
:
24px
;
line-height
:
36px
}
h2
small
{
font-size
:
18px
}
h3
{
font-size
:
18px
;
line-height
:
27px
}
h3
small
{
font-size
:
14px
}
h4
,
h5
,
h6
{
line-height
:
18px
}
h4
{
font-size
:
14px
}
h4
small
{
font-size
:
12px
}
h5
{
font-size
:
12px
}
h6
{
font-size
:
11px
;
color
:
#999
;
text-transform
:
uppercase
}
.page-header
{
padding-bottom
:
17px
;
margin
:
18px
0
;
border-bottom
:
1px
solid
#eee
}
.page-header
h1
{
line-height
:
1
}
ul
,
ol
{
padding
:
0
;
margin
:
0
0
9px
25px
}
ul
ul
,
ul
ol
,
ol
ol
,
ol
ul
{
margin-bottom
:
0
}
ul
{
list-style
:
disc
}
ol
{
list-style
:
decimal
}
li
{
line-height
:
18px
}
ul
.unstyled
,
ol
.unstyled
{
margin-left
:
0
;
list-style
:
none
}
dl
{
margin-bottom
:
18px
}
dt
,
dd
{
line-height
:
18px
}
dt
{
font-weight
:
bold
;
line-height
:
17px
}
dd
{
margin-left
:
9px
}
.dl-horizontal
dt
{
float
:
left
;
width
:
120px
;
overflow
:
hidden
;
clear
:
left
;
text-align
:
right
;
text-overflow
:
ellipsis
;
white-space
:
nowrap
}
.dl-horizontal
dd
{
margin-left
:
130px
}
hr
{
margin
:
18px
0
;
border
:
0
;
border-top
:
1px
solid
#eee
;
border-bottom
:
1px
solid
#fff
}
strong
{
font-weight
:
bold
}
em
{
font-style
:
italic
}
.muted
{
color
:
#999
}
abbr
[
title
]
{
cursor
:
help
;
border-bottom
:
1px
dotted
#999
}
abbr
.initialism
{
font-size
:
90%
;
text-transform
:
uppercase
}
blockquote
{
padding
:
0
0
0
15px
;
margin
:
0
0
18px
;
border-left
:
5px
solid
#eee
}
blockquote
p
{
margin-bottom
:
0
;
font-size
:
16px
;
font-weight
:
300
;
line-height
:
22.5px
}
blockquote
small
{
display
:
block
;
line-height
:
18px
;
color
:
#999
}
blockquote
small
:before
{
content
:
'\2014 \00A0'
}
blockquote
.pull-right
{
float
:
right
;
padding-right
:
15px
;
padding-left
:
0
;
border-right
:
5px
solid
#eee
;
border-left
:
0
}
blockquote
.pull-right
p
,
blockquote
.pull-right
small
{
text-align
:
right
}
q
:before
,
q
:after
,
blockquote
:before
,
blockquote
:after
{
content
:
""
}
address
{
display
:
block
;
margin-bottom
:
18px
;
font-style
:
normal
;
line-height
:
18px
}
small
{
font-size
:
100%
}
cite
{
font-style
:
normal
}
code
,
pre
{
padding
:
0
3px
2px
;
font-family
:
Menlo
,
Monaco
,
Consolas
,
"Courier New"
,
monospace
;
font-size
:
12px
;
color
:
#333
;
-webkit-border-radius
:
3px
;
-moz-border-radius
:
3px
;
border-radius
:
3px
}
code
{
padding
:
2px
4px
;
color
:
#d14
;
background-color
:
#f7f7f9
;
border
:
1px
solid
#e1e1e8
}
pre
{
display
:
block
;
padding
:
8.5px
;
margin
:
0
0
9px
;
font-size
:
12.025px
;
line-height
:
18px
;
word-break
:
break-all
;
word-wrap
:
break-word
;
white-space
:
pre
;
white-space
:
pre-wrap
;
background-color
:
#f5f5f5
;
border
:
1px
solid
#ccc
;
border
:
1px
solid
rgba
(
0
,
0
,
0
,
0.15
);
-webkit-border-radius
:
4px
;
-moz-border-radius
:
4px
;
border-radius
:
4px
}
pre
.prettyprint
{
margin-bottom
:
18px
}
pre
code
{
padding
:
0
;
color
:
inherit
;
background-color
:
transparent
;
border
:
0
}
.pre-scrollable
{
max-height
:
340px
;
overflow-y
:
scroll
}
form
{
margin
:
0
0
18px
}
fieldset
{
padding
:
0
;
margin
:
0
;
border
:
0
}
legend
{
display
:
block
;
width
:
100%
;
padding
:
0
;
margin-bottom
:
27px
;
font-size
:
19.5px
;
line-height
:
36px
;
color
:
#333
;
border
:
0
;
border-bottom
:
1px
solid
#e5e5e5
}
legend
small
{
font-size
:
13.5px
;
color
:
#999
}
label
,
input
,
button
,
select
,
textarea
{
font-size
:
13px
;
font-weight
:
normal
;
line-height
:
18px
}
input
,
button
,
select
,
textarea
{
font-family
:
"Helvetica Neue"
,
Helvetica
,
Arial
,
sans-serif
}
label
{
display
:
block
;
margin-bottom
:
5px
}
select
,
textarea
,
input
[
type
=
"text"
],
input
[
type
=
"password"
],
input
[
type
=
"datetime"
],
input
[
type
=
"datetime-local"
],
input
[
type
=
"date"
],
input
[
type
=
"month"
],
input
[
type
=
"time"
],
input
[
type
=
"week"
],
input
[
type
=
"number"
],
input
[
type
=
"email"
],
input
[
type
=
"url"
],
input
[
type
=
"search"
],
input
[
type
=
"tel"
],
input
[
type
=
"color"
],
.uneditable-input
{
display
:
inline-block
;
height
:
18px
;
padding
:
4px
;
margin-bottom
:
9px
;
font-size
:
13px
;
line-height
:
18px
;
color
:
#555
}
input
,
textarea
{
width
:
210px
}
textarea
{
height
:
auto
}
textarea
,
input
[
type
=
"text"
],
input
[
type
=
"password"
],
input
[
type
=
"datetime"
],
input
[
type
=
"datetime-local"
],
input
[
type
=
"date"
],
input
[
type
=
"month"
],
input
[
type
=
"time"
],
input
[
type
=
"week"
],
input
[
type
=
"number"
],
input
[
type
=
"email"
],
input
[
type
=
"url"
],
input
[
type
=
"search"
],
input
[
type
=
"tel"
],
input
[
type
=
"color"
],
.uneditable-input
{
background-color
:
#fff
;
border
:
1px
solid
#ccc
;
-webkit-border-radius
:
3px
;
-moz-border-radius
:
3px
;
border-radius
:
3px
;
-webkit-box-shadow
:
inset
0
1px
1px
rgba
(
0
,
0
,
0
,
0.075
);
-moz-box-shadow
:
inset
0
1px
1px
rgba
(
0
,
0
,
0
,
0.075
);
box-shadow
:
inset
0
1px
1px
rgba
(
0
,
0
,
0
,
0.075
);
-webkit-transition
:
border
linear
.2s
,
box-shadow
linear
.2s
;
-moz-transition
:
border
linear
.2s
,
box-shadow
linear
.2s
;
-ms-transition
:
border
linear
.2s
,
box-shadow
linear
.2s
;
-o-transition
:
border
linear
.2s
,
box-shadow
linear
.2s
;
transition
:
border
linear
.2s
,
box-shadow
linear
.2s
}
textarea
:focus
,
input
[
type
=
"text"
]
:focus
,
input
[
type
=
"password"
]
:focus
,
input
[
type
=
"datetime"
]
:focus
,
input
[
type
=
"datetime-local"
]
:focus
,
input
[
type
=
"date"
]
:focus
,
input
[
type
=
"month"
]
:focus
,
input
[
type
=
"time"
]
:focus
,
input
[
type
=
"week"
]
:focus
,
input
[
type
=
"number"
]
:focus
,
input
[
type
=
"email"
]
:focus
,
input
[
type
=
"url"
]
:focus
,
input
[
type
=
"search"
]
:focus
,
input
[
type
=
"tel"
]
:focus
,
input
[
type
=
"color"
]
:focus
,
.uneditable-input
:focus
{
border-color
:
rgba
(
82
,
168
,
236
,
0.8
);
outline
:
0
;
outline
:
thin
dotted
\
9
;
-webkit-box-shadow
:
inset
0
1px
1px
rgba
(
0
,
0
,
0
,
0.075
),
0
0
8px
rgba
(
82
,
168
,
236
,
0.6
);
-moz-box-shadow
:
inset
0
1px
1px
rgba
(
0
,
0
,
0
,
0.075
),
0
0
8px
rgba
(
82
,
168
,
236
,
0.6
);
box-shadow
:
inset
0
1px
1px
rgba
(
0
,
0
,
0
,
0.075
),
0
0
8px
rgba
(
82
,
168
,
236
,
0.6
)}
input
[
type
=
"radio"
],
input
[
type
=
"checkbox"
]
{
margin
:
3px
0
;
*
margin-top
:
0
;
line-height
:
normal
;
cursor
:
pointer
}
input
[
type
=
"submit"
],
input
[
type
=
"reset"
],
input
[
type
=
"button"
],
input
[
type
=
"radio"
],
input
[
type
=
"checkbox"
]
{
width
:
auto
}
.uneditable-textarea
{
width
:
auto
;
height
:
auto
}
select
,
input
[
type
=
"file"
]
{
height
:
28px
;
*
margin-top
:
4px
;
line-height
:
28px
}
select
{
width
:
220px
;
border
:
1px
solid
#bbb
}
select
[
multiple
],
select
[
size
]
{
height
:
auto
}
select
:focus
,
input
[
type
=
"file"
]
:focus
,
input
[
type
=
"radio"
]
:focus
,
input
[
type
=
"checkbox"
]
:focus
{
outline
:
thin
dotted
#333
;
outline
:
5px
auto
-webkit-focus-ring-color
;
outline-offset
:
-2px
}
.radio
,
.checkbox
{
min-height
:
18px
;
padding-left
:
18px
}
.radio
input
[
type
=
"radio"
],
.checkbox
input
[
type
=
"checkbox"
]
{
float
:
left
;
margin-left
:
-18px
}
.controls
>
.radio
:first-child
,
.controls
>
.checkbox
:first-child
{
padding-top
:
5px
}
.radio.inline
,
.checkbox.inline
{
display
:
inline-block
;
padding-top
:
5px
;
margin-bottom
:
0
;
vertical-align
:
middle
}
.radio.inline
+
.radio.inline
,
.checkbox.inline
+
.checkbox.inline
{
margin-left
:
10px
}
.input-mini
{
width
:
60px
}
.input-small
{
width
:
90px
}
.input-medium
{
width
:
150px
}
.input-large
{
width
:
210px
}
.input-xlarge
{
width
:
270px
}
.input-xxlarge
{
width
:
530px
}
input
[
class
*=
"span"
],
select
[
class
*=
"span"
],
textarea
[
class
*=
"span"
],
.uneditable-input
[
class
*=
"span"
],
.row-fluid
input
[
class
*=
"span"
],
.row-fluid
select
[
class
*=
"span"
],
.row-fluid
textarea
[
class
*=
"span"
],
.row-fluid
.uneditable-input
[
class
*=
"span"
]
{
float
:
none
;
margin-left
:
0
}
.input-append
input
[
class
*=
"span"
],
.input-append
.uneditable-input
[
class
*=
"span"
],
.input-prepend
input
[
class
*=
"span"
],
.input-prepend
.uneditable-input
[
class
*=
"span"
],
.row-fluid
.input-prepend
[
class
*=
"span"
],
.row-fluid
.input-append
[
class
*=
"span"
]
{
display
:
inline-block
}
input
,
textarea
,
.uneditable-input
{
margin-left
:
0
}
input
.span12
,
textarea
.span12
,
.uneditable-input.span12
{
width
:
930px
}
input
.span11
,
textarea
.span11
,
.uneditable-input.span11
{
width
:
850px
}
input
.span10
,
textarea
.span10
,
.uneditable-input.span10
{
width
:
770px
}
input
.span9
,
textarea
.span9
,
.uneditable-input.span9
{
width
:
690px
}
input
.span8
,
textarea
.span8
,
.uneditable-input.span8
{
width
:
610px
}
input
.span7
,
textarea
.span7
,
.uneditable-input.span7
{
width
:
530px
}
input
.span6
,
textarea
.span6
,
.uneditable-input.span6
{
width
:
450px
}
input
.span5
,
textarea
.span5
,
.uneditable-input.span5
{
width
:
370px
}
input
.span4
,
textarea
.span4
,
.uneditable-input.span4
{
width
:
290px
}
input
.span3
,
textarea
.span3
,
.uneditable-input.span3
{
width
:
210px
}
input
.span2
,
textarea
.span2
,
.uneditable-input.span2
{
width
:
130px
}
input
.span1
,
textarea
.span1
,
.uneditable-input.span1
{
width
:
50px
}
input
[
disabled
],
select
[
disabled
],
textarea
[
disabled
],
input
[
readonly
],
select
[
readonly
],
textarea
[
readonly
]
{
cursor
:
not-allowed
;
background-color
:
#eee
;
border-color
:
#ddd
}
input
[
type
=
"radio"
][
disabled
],
input
[
type
=
"checkbox"
][
disabled
],
input
[
type
=
"radio"
][
readonly
],
input
[
type
=
"checkbox"
][
readonly
]
{
background-color
:
transparent
}
.control-group.warning
>
label
,
.control-group.warning
.help-block
,
.control-group.warning
.help-inline
{
color
:
#c09853
}
.control-group.warning
.checkbox
,
.control-group.warning
.radio
,
.control-group.warning
input
,
.control-group.warning
select
,
.control-group.warning
textarea
{
color
:
#c09853
;
border-color
:
#c09853
}
.control-group.warning
.checkbox
:focus
,
.control-group.warning
.radio
:focus
,
.control-group.warning
input
:focus
,
.control-group.warning
select
:focus
,
.control-group.warning
textarea
:focus
{
border-color
:
#a47e3c
;
-webkit-box-shadow
:
0
0
6px
#dbc59e
;
-moz-box-shadow
:
0
0
6px
#dbc59e
;
box-shadow
:
0
0
6px
#dbc59e
}
.control-group.warning
.input-prepend
.add-on
,
.control-group.warning
.input-append
.add-on
{
color
:
#c09853
;
background-color
:
#fcf8e3
;
border-color
:
#c09853
}
.control-group.error
>
label
,
.control-group.error
.help-block
,
.control-group.error
.help-inline
{
color
:
#b94a48
}
.control-group.error
.checkbox
,
.control-group.error
.radio
,
.control-group.error
input
,
.control-group.error
select
,
.control-group.error
textarea
{
color
:
#b94a48
;
border-color
:
#b94a48
}
.control-group.error
.checkbox
:focus
,
.control-group.error
.radio
:focus
,
.control-group.error
input
:focus
,
.control-group.error
select
:focus
,
.control-group.error
textarea
:focus
{
border-color
:
#953b39
;
-webkit-box-shadow
:
0
0
6px
#d59392
;
-moz-box-shadow
:
0
0
6px
#d59392
;
box-shadow
:
0
0
6px
#d59392
}
.control-group.error
.input-prepend
.add-on
,
.control-group.error
.input-append
.add-on
{
color
:
#b94a48
;
background-color
:
#f2dede
;
border-color
:
#b94a48
}
.control-group.success
>
label
,
.control-group.success
.help-block
,
.control-group.success
.help-inline
{
color
:
#468847
}
.control-group.success
.checkbox
,
.control-group.success
.radio
,
.control-group.success
input
,
.control-group.success
select
,
.control-group.success
textarea
{
color
:
#468847
;
border-color
:
#468847
}
.control-group.success
.checkbox
:focus
,
.control-group.success
.radio
:focus
,
.control-group.success
input
:focus
,
.control-group.success
select
:focus
,
.control-group.success
textarea
:focus
{
border-color
:
#356635
;
-webkit-box-shadow
:
0
0
6px
#7aba7b
;
-moz-box-shadow
:
0
0
6px
#7aba7b
;
box-shadow
:
0
0
6px
#7aba7b
}
.control-group.success
.input-prepend
.add-on
,
.control-group.success
.input-append
.add-on
{
color
:
#468847
;
background-color
:
#dff0d8
;
border-color
:
#468847
}
input
:focus:required:invalid
,
textarea
:focus:required:invalid
,
select
:focus:required:invalid
{
color
:
#b94a48
;
border-color
:
#ee5f5b
}
input
:focus:required:invalid:focus
,
textarea
:focus:required:invalid:focus
,
select
:focus:required:invalid:focus
{
border-color
:
#e9322d
;
-webkit-box-shadow
:
0
0
6px
#f8b9b7
;
-moz-box-shadow
:
0
0
6px
#f8b9b7
;
box-shadow
:
0
0
6px
#f8b9b7
}
.form-actions
{
padding
:
17px
20px
18px
;
margin-top
:
18px
;
margin-bottom
:
18px
;
background-color
:
#f5f5f5
;
border-top
:
1px
solid
#e5e5e5
;
*
zoom
:
1
}
.form-actions
:before
,
.form-actions
:after
{
display
:
table
;
content
:
""
}
.form-actions
:after
{
clear
:
both
}
.uneditable-input
{
overflow
:
hidden
;
white-space
:
nowrap
;
cursor
:
not-allowed
;
background-color
:
#fff
;
border-color
:
#eee
;
-webkit-box-shadow
:
inset
0
1px
2px
rgba
(
0
,
0
,
0
,
0.025
);
-moz-box-shadow
:
inset
0
1px
2px
rgba
(
0
,
0
,
0
,
0.025
);
box-shadow
:
inset
0
1px
2px
rgba
(
0
,
0
,
0
,
0.025
)}
:-moz-placeholder
{
color
:
#999
}
:-ms-input-placeholder
{
color
:
#999
}
::-webkit-input-placeholder
{
color
:
#999
}
.help-block
,
.help-inline
{
color
:
#555
}
.help-block
{
display
:
block
;
margin-bottom
:
9px
}
.help-inline
{
display
:
inline-block
;
*
display
:
inline
;
padding-left
:
5px
;
vertical-align
:
middle
;
*
zoom
:
1
}
.input-prepend
,
.input-append
{
margin-bottom
:
5px
}
.input-prepend
input
,
.input-append
input
,
.input-prepend
select
,
.input-append
select
,
.input-prepend
.uneditable-input
,
.input-append
.uneditable-input
{
position
:
relative
;
margin-bottom
:
0
;
*
margin-left
:
0
;
vertical-align
:
middle
;
-webkit-border-radius
:
0
3px
3px
0
;
-moz-border-radius
:
0
3px
3px
0
;
border-radius
:
0
3px
3px
0
}
.input-prepend
input
:focus
,
.input-append
input
:focus
,
.input-prepend
select
:focus
,
.input-append
select
:focus
,
.input-prepend
.uneditable-input
:focus
,
.input-append
.uneditable-input
:focus
{
z-index
:
2
}
.input-prepend
.uneditable-input
,
.input-append
.uneditable-input
{
border-left-color
:
#ccc
}
.input-prepend
.add-on
,
.input-append
.add-on
{
display
:
inline-block
;
width
:
auto
;
height
:
18px
;
min-width
:
16px
;
padding
:
4px
5px
;
font-weight
:
normal
;
line-height
:
18px
;
text-align
:
center
;
text-shadow
:
0
1px
0
#fff
;
vertical-align
:
middle
;
background-color
:
#eee
;
border
:
1px
solid
#ccc
}
.input-prepend
.add-on
,
.input-append
.add-on
,
.input-prepend
.btn
,
.input-append
.btn
{
margin-left
:
-1px
;
-webkit-border-radius
:
0
;
-moz-border-radius
:
0
;
border-radius
:
0
}
.input-prepend
.active
,
.input-append
.active
{
background-color
:
#a9dba9
;
border-color
:
#46a546
}
.input-prepend
.add-on
,
.input-prepend
.btn
{
margin-right
:
-1px
}
.input-prepend
.add-on
:first-child
,
.input-prepend
.btn
:first-child
{
-webkit-border-radius
:
3px
0
0
3px
;
-moz-border-radius
:
3px
0
0
3px
;
border-radius
:
3px
0
0
3px
}
.input-append
input
,
.input-append
select
,
.input-append
.uneditable-input
{
-webkit-border-radius
:
3px
0
0
3px
;
-moz-border-radius
:
3px
0
0
3px
;
border-radius
:
3px
0
0
3px
}
.input-append
.uneditable-input
{
border-right-color
:
#ccc
;
border-left-color
:
#eee
}
.input-append
.add-on
:last-child
,
.input-append
.btn
:last-child
{
-webkit-border-radius
:
0
3px
3px
0
;
-moz-border-radius
:
0
3px
3px
0
;
border-radius
:
0
3px
3px
0
}
.input-prepend.input-append
input
,
.input-prepend.input-append
select
,
.input-prepend.input-append
.uneditable-input
{
-webkit-border-radius
:
0
;
-moz-border-radius
:
0
;
border-radius
:
0
}
.input-prepend.input-append
.add-on
:first-child
,
.input-prepend.input-append
.btn
:first-child
{
margin-right
:
-1px
;
-webkit-border-radius
:
3px
0
0
3px
;
-moz-border-radius
:
3px
0
0
3px
;
border-radius
:
3px
0
0
3px
}
.input-prepend.input-append
.add-on
:last-child
,
.input-prepend.input-append
.btn
:last-child
{
margin-left
:
-1px
;
-webkit-border-radius
:
0
3px
3px
0
;
-moz-border-radius
:
0
3px
3px
0
;
border-radius
:
0
3px
3px
0
}
.search-query
{
padding-right
:
14px
;
padding-right
:
4px
\
9
;
padding-left
:
14px
;
padding-left
:
4px
\
9
;
margin-bottom
:
0
;
-webkit-border-radius
:
14px
;
-moz-border-radius
:
14px
;
border-radius
:
14px
}
.form-search
input
,
.form-inline
input
,
.form-horizontal
input
,
.form-search
textarea
,
.form-inline
textarea
,
.form-horizontal
textarea
,
.form-search
select
,
.form-inline
select
,
.form-horizontal
select
,
.form-search
.help-inline
,
.form-inline
.help-inline
,
.form-horizontal
.help-inline
,
.form-search
.uneditable-input
,
.form-inline
.uneditable-input
,
.form-horizontal
.uneditable-input
,
.form-search
.input-prepend
,
.form-inline
.input-prepend
,
.form-horizontal
.input-prepend
,
.form-search
.input-append
,
.form-inline
.input-append
,
.form-horizontal
.input-append
{
display
:
inline-block
;
*
display
:
inline
;
margin-bottom
:
0
;
*
zoom
:
1
}
.form-search
.hide
,
.form-inline
.hide
,
.form-horizontal
.hide
{
display
:
none
}
.form-search
label
,
.form-inline
label
{
display
:
inline-block
}
.form-search
.input-append
,
.form-inline
.input-append
,
.form-search
.input-prepend
,
.form-inline
.input-prepend
{
margin-bottom
:
0
}
.form-search
.radio
,
.form-search
.checkbox
,
.form-inline
.radio
,
.form-inline
.checkbox
{
padding-left
:
0
;
margin-bottom
:
0
;
vertical-align
:
middle
}
.form-search
.radio
input
[
type
=
"radio"
],
.form-search
.checkbox
input
[
type
=
"checkbox"
],
.form-inline
.radio
input
[
type
=
"radio"
],
.form-inline
.checkbox
input
[
type
=
"checkbox"
]
{
float
:
left
;
margin-right
:
3px
;
margin-left
:
0
}
.control-group
{
margin-bottom
:
9px
}
legend
+
.control-group
{
margin-top
:
18px
;
-webkit-margin-top-collapse
:
separate
}
.form-horizontal
.control-group
{
margin-bottom
:
18px
;
*
zoom
:
1
}
.form-horizontal
.control-group
:before
,
.form-horizontal
.control-group
:after
{
display
:
table
;
content
:
""
}
.form-horizontal
.control-group
:after
{
clear
:
both
}
.form-horizontal
.control-label
{
float
:
left
;
width
:
140px
;
padding-top
:
5px
;
text-align
:
right
}
.form-horizontal
.controls
{
*
display
:
inline-block
;
*
padding-left
:
20px
;
margin-left
:
160px
;
*
margin-left
:
0
}
.form-horizontal
.controls
:first-child
{
*
padding-left
:
160px
}
.form-horizontal
.help-block
{
margin-top
:
9px
;
margin-bottom
:
0
}
.form-horizontal
.form-actions
{
padding-left
:
160px
}
table
{
max-width
:
100%
;
background-color
:
transparent
;
border-collapse
:
collapse
;
border-spacing
:
0
}
.table
{
width
:
100%
;
margin-bottom
:
18px
}
.table
th
,
.table
td
{
padding
:
8px
;
line-height
:
18px
;
text-align
:
left
;
vertical-align
:
top
;
border-top
:
1px
solid
#ddd
}
.table
th
{
font-weight
:
bold
}
.table
thead
th
{
vertical-align
:
bottom
}
.table
caption
+
thead
tr
:first-child
th
,
.table
caption
+
thead
tr
:first-child
td
,
.table
colgroup
+
thead
tr
:first-child
th
,
.table
colgroup
+
thead
tr
:first-child
td
,
.table
thead
:first-child
tr
:first-child
th
,
.table
thead
:first-child
tr
:first-child
td
{
border-top
:
0
}
.table
tbody
+
tbody
{
border-top
:
2px
solid
#ddd
}
.table-condensed
th
,
.table-condensed
td
{
padding
:
4px
5px
}
.table-bordered
{
border
:
1px
solid
#ddd
;
border-collapse
:
separate
;
*
border-collapse
:
collapsed
;
border-left
:
0
;
-webkit-border-radius
:
4px
;
-moz-border-radius
:
4px
;
border-radius
:
4px
}
.table-bordered
th
,
.table-bordered
td
{
border-left
:
1px
solid
#ddd
}
.table-bordered
caption
+
thead
tr
:first-child
th
,
.table-bordered
caption
+
tbody
tr
:first-child
th
,
.table-bordered
caption
+
tbody
tr
:first-child
td
,
.table-bordered
colgroup
+
thead
tr
:first-child
th
,
.table-bordered
colgroup
+
tbody
tr
:first-child
th
,
.table-bordered
colgroup
+
tbody
tr
:first-child
td
,
.table-bordered
thead
:first-child
tr
:first-child
th
,
.table-bordered
tbody
:first-child
tr
:first-child
th
,
.table-bordered
tbody
:first-child
tr
:first-child
td
{
border-top
:
0
}
.table-bordered
thead
:first-child
tr
:first-child
th
:first-child
,
.table-bordered
tbody
:first-child
tr
:first-child
td
:first-child
{
-webkit-border-top-left-radius
:
4px
;
border-top-left-radius
:
4px
;
-moz-border-radius-topleft
:
4px
}
.table-bordered
thead
:first-child
tr
:first-child
th
:last-child
,
.table-bordered
tbody
:first-child
tr
:first-child
td
:last-child
{
-webkit-border-top-right-radius
:
4px
;
border-top-right-radius
:
4px
;
-moz-border-radius-topright
:
4px
}
.table-bordered
thead
:last-child
tr
:last-child
th
:first-child
,
.table-bordered
tbody
:last-child
tr
:last-child
td
:first-child
{
-webkit-border-radius
:
0
0
0
4px
;
-moz-border-radius
:
0
0
0
4px
;
border-radius
:
0
0
0
4px
;
-webkit-border-bottom-left-radius
:
4px
;
border-bottom-left-radius
:
4px
;
-moz-border-radius-bottomleft
:
4px
}
.table-bordered
thead
:last-child
tr
:last-child
th
:last-child
,
.table-bordered
tbody
:last-child
tr
:last-child
td
:last-child
{
-webkit-border-bottom-right-radius
:
4px
;
border-bottom-right-radius
:
4px
;
-moz-border-radius-bottomright
:
4px
}
.table-striped
tbody
tr
:nth-child
(
odd
)
td
,
.table-striped
tbody
tr
:nth-child
(
odd
)
th
{
background-color
:
#f9f9f9
}
.table
tbody
tr
:hover
td
,
.table
tbody
tr
:hover
th
{
background-color
:
#f5f5f5
}
table
.span1
{
float
:
none
;
width
:
44px
;
margin-left
:
0
}
table
.span2
{
float
:
none
;
width
:
124px
;
margin-left
:
0
}
table
.span3
{
float
:
none
;
width
:
204px
;
margin-left
:
0
}
table
.span4
{
float
:
none
;
width
:
284px
;
margin-left
:
0
}
table
.span5
{
float
:
none
;
width
:
364px
;
margin-left
:
0
}
table
.span6
{
float
:
none
;
width
:
444px
;
margin-left
:
0
}
table
.span7
{
float
:
none
;
width
:
524px
;
margin-left
:
0
}
table
.span8
{
float
:
none
;
width
:
604px
;
margin-left
:
0
}
table
.span9
{
float
:
none
;
width
:
684px
;
margin-left
:
0
}
table
.span10
{
float
:
none
;
width
:
764px
;
margin-left
:
0
}
table
.span11
{
float
:
none
;
width
:
844px
;
margin-left
:
0
}
table
.span12
{
float
:
none
;
width
:
924px
;
margin-left
:
0
}
table
.span13
{
float
:
none
;
width
:
1004px
;
margin-left
:
0
}
table
.span14
{
float
:
none
;
width
:
1084px
;
margin-left
:
0
}
table
.span15
{
float
:
none
;
width
:
1164px
;
margin-left
:
0
}
table
.span16
{
float
:
none
;
width
:
1244px
;
margin-left
:
0
}
table
.span17
{
float
:
none
;
width
:
1324px
;
margin-left
:
0
}
table
.span18
{
float
:
none
;
width
:
1404px
;
margin-left
:
0
}
table
.span19
{
float
:
none
;
width
:
1484px
;
margin-left
:
0
}
table
.span20
{
float
:
none
;
width
:
1564px
;
margin-left
:
0
}
table
.span21
{
float
:
none
;
width
:
1644px
;
margin-left
:
0
}
table
.span22
{
float
:
none
;
width
:
1724px
;
margin-left
:
0
}
table
.span23
{
float
:
none
;
width
:
1804px
;
margin-left
:
0
}
table
.span24
{
float
:
none
;
width
:
1884px
;
margin-left
:
0
}
[
class
^=
"icon-"
],[
class
*=
" icon-"
]
{
display
:
inline-block
;
width
:
14px
;
height
:
14px
;
*
margin-right
:
.3em
;
line-height
:
14px
;
vertical-align
:
text-top
;
background-image
:
url("../img/glyphicons-halflings.png")
;
background-position
:
14px
14px
;
background-repeat
:
no-repeat
}
[
class
^=
"icon-"
]
:last-child
,[
class
*=
" icon-"
]
:last-child
{
*
margin-left
:
0
}
.icon-white
{
background-image
:
url("../img/glyphicons-halflings-white.png")
}
.icon-glass
{
background-position
:
0
0
}
.icon-music
{
background-position
:
-24px
0
}
.icon-search
{
background-position
:
-48px
0
}
.icon-envelope
{
background-position
:
-72px
0
}
.icon-heart
{
background-position
:
-96px
0
}
.icon-star
{
background-position
:
-120px
0
}
.icon-star-empty
{
background-position
:
-144px
0
}
.icon-user
{
background-position
:
-168px
0
}
.icon-film
{
background-position
:
-192px
0
}
.icon-th-large
{
background-position
:
-216px
0
}
.icon-th
{
background-position
:
-240px
0
}
.icon-th-list
{
background-position
:
-264px
0
}
.icon-ok
{
background-position
:
-288px
0
}
.icon-remove
{
background-position
:
-312px
0
}
.icon-zoom-in
{
background-position
:
-336px
0
}
.icon-zoom-out
{
background-position
:
-360px
0
}
.icon-off
{
background-position
:
-384px
0
}
.icon-signal
{
background-position
:
-408px
0
}
.icon-cog
{
background-position
:
-432px
0
}
.icon-trash
{
background-position
:
-456px
0
}
.icon-home
{
background-position
:
0
-24px
}
.icon-file
{
background-position
:
-24px
-24px
}
.icon-time
{
background-position
:
-48px
-24px
}
.icon-road
{
background-position
:
-72px
-24px
}
.icon-download-alt
{
background-position
:
-96px
-24px
}
.icon-download
{
background-position
:
-120px
-24px
}
.icon-upload
{
background-position
:
-144px
-24px
}
.icon-inbox
{
background-position
:
-168px
-24px
}
.icon-play-circle
{
background-position
:
-192px
-24px
}
.icon-repeat
{
background-position
:
-216px
-24px
}
.icon-refresh
{
background-position
:
-240px
-24px
}
.icon-list-alt
{
background-position
:
-264px
-24px
}
.icon-lock
{
background-position
:
-287px
-24px
}
.icon-flag
{
background-position
:
-312px
-24px
}
.icon-headphones
{
background-position
:
-336px
-24px
}
.icon-volume-off
{
background-position
:
-360px
-24px
}
.icon-volume-down
{
background-position
:
-384px
-24px
}
.icon-volume-up
{
background-position
:
-408px
-24px
}
.icon-qrcode
{
background-position
:
-432px
-24px
}
.icon-barcode
{
background-position
:
-456px
-24px
}
.icon-tag
{
background-position
:
0
-48px
}
.icon-tags
{
background-position
:
-25px
-48px
}
.icon-book
{
background-position
:
-48px
-48px
}
.icon-bookmark
{
background-position
:
-72px
-48px
}
.icon-print
{
background-position
:
-96px
-48px
}
.icon-camera
{
background-position
:
-120px
-48px
}
.icon-font
{
background-position
:
-144px
-48px
}
.icon-bold
{
background-position
:
-167px
-48px
}
.icon-italic
{
background-position
:
-192px
-48px
}
.icon-text-height
{
background-position
:
-216px
-48px
}
.icon-text-width
{
background-position
:
-240px
-48px
}
.icon-align-left
{
background-position
:
-264px
-48px
}
.icon-align-center
{
background-position
:
-288px
-48px
}
.icon-align-right
{
background-position
:
-312px
-48px
}
.icon-align-justify
{
background-position
:
-336px
-48px
}
.icon-list
{
background-position
:
-360px
-48px
}
.icon-indent-left
{
background-position
:
-384px
-48px
}
.icon-indent-right
{
background-position
:
-408px
-48px
}
.icon-facetime-video
{
background-position
:
-432px
-48px
}
.icon-picture
{
background-position
:
-456px
-48px
}
.icon-pencil
{
background-position
:
0
-72px
}
.icon-map-marker
{
background-position
:
-24px
-72px
}
.icon-adjust
{
background-position
:
-48px
-72px
}
.icon-tint
{
background-position
:
-72px
-72px
}
.icon-edit
{
background-position
:
-96px
-72px
}
.icon-share
{
background-position
:
-120px
-72px
}
.icon-check
{
background-position
:
-144px
-72px
}
.icon-move
{
background-position
:
-168px
-72px
}
.icon-step-backward
{
background-position
:
-192px
-72px
}
.icon-fast-backward
{
background-position
:
-216px
-72px
}
.icon-backward
{
background-position
:
-240px
-72px
}
.icon-play
{
background-position
:
-264px
-72px
}
.icon-pause
{
background-position
:
-288px
-72px
}
.icon-stop
{
background-position
:
-312px
-72px
}
.icon-forward
{
background-position
:
-336px
-72px
}
.icon-fast-forward
{
background-position
:
-360px
-72px
}
.icon-step-forward
{
background-position
:
-384px
-72px
}
.icon-eject
{
background-position
:
-408px
-72px
}
.icon-chevron-left
{
background-position
:
-432px
-72px
}
.icon-chevron-right
{
background-position
:
-456px
-72px
}
.icon-plus-sign
{
background-position
:
0
-96px
}
.icon-minus-sign
{
background-position
:
-24px
-96px
}
.icon-remove-sign
{
background-position
:
-48px
-96px
}
.icon-ok-sign
{
background-position
:
-72px
-96px
}
.icon-question-sign
{
background-position
:
-96px
-96px
}
.icon-info-sign
{
background-position
:
-120px
-96px
}
.icon-screenshot
{
background-position
:
-144px
-96px
}
.icon-remove-circle
{
background-position
:
-168px
-96px
}
.icon-ok-circle
{
background-position
:
-192px
-96px
}
.icon-ban-circle
{
background-position
:
-216px
-96px
}
.icon-arrow-left
{
background-position
:
-240px
-96px
}
.icon-arrow-right
{
background-position
:
-264px
-96px
}
.icon-arrow-up
{
background-position
:
-289px
-96px
}
.icon-arrow-down
{
background-position
:
-312px
-96px
}
.icon-share-alt
{
background-position
:
-336px
-96px
}
.icon-resize-full
{
background-position
:
-360px
-96px
}
.icon-resize-small
{
background-position
:
-384px
-96px
}
.icon-plus
{
background-position
:
-408px
-96px
}
.icon-minus
{
background-position
:
-433px
-96px
}
.icon-asterisk
{
background-position
:
-456px
-96px
}
.icon-exclamation-sign
{
background-position
:
0
-120px
}
.icon-gift
{
background-position
:
-24px
-120px
}
.icon-leaf
{
background-position
:
-48px
-120px
}
.icon-fire
{
background-position
:
-72px
-120px
}
.icon-eye-open
{
background-position
:
-96px
-120px
}
.icon-eye-close
{
background-position
:
-120px
-120px
}
.icon-warning-sign
{
background-position
:
-144px
-120px
}
.icon-plane
{
background-position
:
-168px
-120px
}
.icon-calendar
{
background-position
:
-192px
-120px
}
.icon-random
{
background-position
:
-216px
-120px
}
.icon-comment
{
background-position
:
-240px
-120px
}
.icon-magnet
{
background-position
:
-264px
-120px
}
.icon-chevron-up
{
background-position
:
-288px
-120px
}
.icon-chevron-down
{
background-position
:
-313px
-119px
}
.icon-retweet
{
background-position
:
-336px
-120px
}
.icon-shopping-cart
{
background-position
:
-360px
-120px
}
.icon-folder-close
{
background-position
:
-384px
-120px
}
.icon-folder-open
{
background-position
:
-408px
-120px
}
.icon-resize-vertical
{
background-position
:
-432px
-119px
}
.icon-resize-horizontal
{
background-position
:
-456px
-118px
}
.icon-hdd
{
background-position
:
0
-144px
}
.icon-bullhorn
{
background-position
:
-24px
-144px
}
.icon-bell
{
background-position
:
-48px
-144px
}
.icon-certificate
{
background-position
:
-72px
-144px
}
.icon-thumbs-up
{
background-position
:
-96px
-144px
}
.icon-thumbs-down
{
background-position
:
-120px
-144px
}
.icon-hand-right
{
background-position
:
-144px
-144px
}
.icon-hand-left
{
background-position
:
-168px
-144px
}
.icon-hand-up
{
background-position
:
-192px
-144px
}
.icon-hand-down
{
background-position
:
-216px
-144px
}
.icon-circle-arrow-right
{
background-position
:
-240px
-144px
}
.icon-circle-arrow-left
{
background-position
:
-264px
-144px
}
.icon-circle-arrow-up
{
background-position
:
-288px
-144px
}
.icon-circle-arrow-down
{
background-position
:
-312px
-144px
}
.icon-globe
{
background-position
:
-336px
-144px
}
.icon-wrench
{
background-position
:
-360px
-144px
}
.icon-tasks
{
background-position
:
-384px
-144px
}
.icon-filter
{
background-position
:
-408px
-144px
}
.icon-briefcase
{
background-position
:
-432px
-144px
}
.icon-fullscreen
{
background-position
:
-456px
-144px
}
.dropup
,
.dropdown
{
position
:
relative
}
.dropdown-toggle
{
*
margin-bottom
:
-3px
}
.dropdown-toggle
:active
,
.open
.dropdown-toggle
{
outline
:
0
}
.caret
{
display
:
inline-block
;
width
:
0
;
height
:
0
;
vertical-align
:
top
;
border-top
:
4px
solid
#000
;
border-right
:
4px
solid
transparent
;
border-left
:
4px
solid
transparent
;
content
:
""
;
opacity
:
.3
;
filter
:
alpha
(
opacity
=
30
)}
.dropdown
.caret
{
margin-top
:
8px
;
margin-left
:
2px
}
.dropdown
:hover
.caret
,
.open
.caret
{
opacity
:
1
;
filter
:
alpha
(
opacity
=
100
)}
.dropdown-menu
{
position
:
absolute
;
top
:
100%
;
left
:
0
;
z-index
:
1000
;
display
:
none
;
float
:
left
;
min-width
:
160px
;
padding
:
4px
0
;
margin
:
1px
0
0
;
list-style
:
none
;
background-color
:
#fff
;
border
:
1px
solid
#ccc
;
border
:
1px
solid
rgba
(
0
,
0
,
0
,
0.2
);
*
border-right-width
:
2px
;
*
border-bottom-width
:
2px
;
-webkit-border-radius
:
5px
;
-moz-border-radius
:
5px
;
border-radius
:
5px
;
-webkit-box-shadow
:
0
5px
10px
rgba
(
0
,
0
,
0
,
0.2
);
-moz-box-shadow
:
0
5px
10px
rgba
(
0
,
0
,
0
,
0.2
);
box-shadow
:
0
5px
10px
rgba
(
0
,
0
,
0
,
0.2
);
-webkit-background-clip
:
padding-box
;
-moz-background-clip
:
padding
;
background-clip
:
padding-box
}
.dropdown-menu.pull-right
{
right
:
0
;
left
:
auto
}
.dropdown-menu
.divider
{
*
width
:
100%
;
height
:
1px
;
margin
:
8px
1px
;
*
margin
:
-5px
0
5px
;
overflow
:
hidden
;
background-color
:
#e5e5e5
;
border-bottom
:
1px
solid
#fff
}
.dropdown-menu
a
{
display
:
block
;
padding
:
3px
15px
;
clear
:
both
;
font-weight
:
normal
;
line-height
:
18px
;
color
:
#333
;
white-space
:
nowrap
}
.dropdown-menu
li
>
a
:hover
,
.dropdown-menu
.active
>
a
,
.dropdown-menu
.active
>
a
:hover
{
color
:
#fff
;
text-decoration
:
none
;
background-color
:
#08c
}
.open
{
*
z-index
:
1000
}
.open
>
.dropdown-menu
{
display
:
block
}
.pull-right
>
.dropdown-menu
{
right
:
0
;
left
:
auto
}
.dropup
.caret
,
.navbar-fixed-bottom
.dropdown
.caret
{
border-top
:
0
;
border-bottom
:
4px
solid
#000
;
content
:
"\2191"
}
.dropup
.dropdown-menu
,
.navbar-fixed-bottom
.dropdown
.dropdown-menu
{
top
:
auto
;
bottom
:
100%
;
margin-bottom
:
1px
}
.typeahead
{
margin-top
:
2px
;
-webkit-border-radius
:
4px
;
-moz-border-radius
:
4px
;
border-radius
:
4px
}
.well
{
min-height
:
20px
;
padding
:
19px
;
margin-bottom
:
20px
;
background-color
:
#f5f5f5
;
border
:
1px
solid
#eee
;
border
:
1px
solid
rgba
(
0
,
0
,
0
,
0.05
);
-webkit-border-radius
:
4px
;
-moz-border-radius
:
4px
;
border-radius
:
4px
;
-webkit-box-shadow
:
inset
0
1px
1px
rgba
(
0
,
0
,
0
,
0.05
);
-moz-box-shadow
:
inset
0
1px
1px
rgba
(
0
,
0
,
0
,
0.05
);
box-shadow
:
inset
0
1px
1px
rgba
(
0
,
0
,
0
,
0.05
)}
.well
blockquote
{
border-color
:
#ddd
;
border-color
:
rgba
(
0
,
0
,
0
,
0.15
)}
.well-large
{
padding
:
24px
;
-webkit-border-radius
:
6px
;
-moz-border-radius
:
6px
;
border-radius
:
6px
}
.well-small
{
padding
:
9px
;
-webkit-border-radius
:
3px
;
-moz-border-radius
:
3px
;
border-radius
:
3px
}
.fade
{
opacity
:
0
;
-webkit-transition
:
opacity
.15s
linear
;
-moz-transition
:
opacity
.15s
linear
;
-ms-transition
:
opacity
.15s
linear
;
-o-transition
:
opacity
.15s
linear
;
transition
:
opacity
.15s
linear
}
.fade.in
{
opacity
:
1
}
.collapse
{
position
:
relative
;
height
:
0
;
overflow
:
hidden
;
-webkit-transition
:
height
.35s
ease
;
-moz-transition
:
height
.35s
ease
;
-ms-transition
:
height
.35s
ease
;
-o-transition
:
height
.35s
ease
;
transition
:
height
.35s
ease
}
.collapse.in
{
height
:
auto
}
.close
{
float
:
right
;
font-size
:
20px
;
font-weight
:
bold
;
line-height
:
18px
;
color
:
#000
;
text-shadow
:
0
1px
0
#fff
;
opacity
:
.2
;
filter
:
alpha
(
opacity
=
20
)}
.close
:hover
{
color
:
#000
;
text-decoration
:
none
;
cursor
:
pointer
;
opacity
:
.4
;
filter
:
alpha
(
opacity
=
40
)}
button
.close
{
padding
:
0
;
cursor
:
pointer
;
background
:
transparent
;
border
:
0
;
-webkit-appearance
:
none
}
.btn
{
display
:
inline-block
;
*
display
:
inline
;
padding
:
4px
10px
4px
;
margin-bottom
:
0
;
*
margin-left
:
.3em
;
font-size
:
13px
;
line-height
:
18px
;
*
line-height
:
20px
;
color
:
#333
;
text-align
:
center
;
text-shadow
:
0
1px
1px
rgba
(
255
,
255
,
255
,
0.75
);
vertical-align
:
middle
;
cursor
:
pointer
;
background-color
:
#f5f5f5
;
*
background-color
:
#e6e6e6
;
background-image
:
-ms-linear-gradient
(
top
,
#fff
,
#e6e6e6
);
background-image
:
-webkit-gradient
(
linear
,
0
0
,
0
100%
,
from
(
#fff
),
to
(
#e6e6e6
));
background-image
:
-webkit-linear-gradient
(
top
,
#fff
,
#e6e6e6
);
background-image
:
-o-linear-gradient
(
top
,
#fff
,
#e6e6e6
);
background-image
:
linear-gradient
(
top
,
#fff
,
#e6e6e6
);
background-image
:
-moz-linear-gradient
(
top
,
#fff
,
#e6e6e6
);
background-repeat
:
repeat-x
;
border
:
1px
solid
#ccc
;
*
border
:
0
;
border-color
:
rgba
(
0
,
0
,
0
,
0.1
)
rgba
(
0
,
0
,
0
,
0.1
)
rgba
(
0
,
0
,
0
,
0.25
);
border-color
:
#e6e6e6
#e6e6e6
#bfbfbf
;
border-bottom-color
:
#b3b3b3
;
-webkit-border-radius
:
4px
;
-moz-border-radius
:
4px
;
border-radius
:
4px
;
filter
:
progid
:
dximagetransform
.
microsoft
.
gradient
(
startColorstr
=
'#ffffff'
,
endColorstr
=
'#e6e6e6'
,
GradientType
=
0
);
filter
:
progid
:
dximagetransform
.
microsoft
.
gradient
(
enabled
=
false
);
*
zoom
:
1
;
-webkit-box-shadow
:
inset
0
1px
0
rgba
(
255
,
255
,
255
,
0.2
),
0
1px
2px
rgba
(
0
,
0
,
0
,
0.05
);
-moz-box-shadow
:
inset
0
1px
0
rgba
(
255
,
255
,
255
,
0.2
),
0
1px
2px
rgba
(
0
,
0
,
0
,
0.05
);
box-shadow
:
inset
0
1px
0
rgba
(
255
,
255
,
255
,
0.2
),
0
1px
2px
rgba
(
0
,
0
,
0
,
0.05
)}
.btn
:hover
,
.btn
:active
,
.btn.active
,
.btn.disabled
,
.btn
[
disabled
]
{
background-color
:
#e6e6e6
;
*
background-color
:
#d9d9d9
}
.btn
:active
,
.btn.active
{
background-color
:
#ccc
\
9
}
.btn
:first-child
{
*
margin-left
:
0
}
.btn
:hover
{
color
:
#333
;
text-decoration
:
none
;
background-color
:
#e6e6e6
;
*
background-color
:
#d9d9d9
;
background-position
:
0
-15px
;
-webkit-transition
:
background-position
.1s
linear
;
-moz-transition
:
background-position
.1s
linear
;
-ms-transition
:
background-position
.1s
linear
;
-o-transition
:
background-position
.1s
linear
;
transition
:
background-position
.1s
linear
}
.btn
:focus
{
outline
:
thin
dotted
#333
;
outline
:
5px
auto
-webkit-focus-ring-color
;
outline-offset
:
-2px
}
.btn.active
,
.btn
:active
{
background-color
:
#e6e6e6
;
background-color
:
#d9d9d9
\
9
;
background-image
:
none
;
outline
:
0
;
-webkit-box-shadow
:
inset
0
2px
4px
rgba
(
0
,
0
,
0
,
0.15
),
0
1px
2px
rgba
(
0
,
0
,
0
,
0.05
);
-moz-box-shadow
:
inset
0
2px
4px
rgba
(
0
,
0
,
0
,
0.15
),
0
1px
2px
rgba
(
0
,
0
,
0
,
0.05
);
box-shadow
:
inset
0
2px
4px
rgba
(
0
,
0
,
0
,
0.15
),
0
1px
2px
rgba
(
0
,
0
,
0
,
0.05
)}
.btn.disabled
,
.btn
[
disabled
]
{
cursor
:
default
;
background-color
:
#e6e6e6
;
background-image
:
none
;
opacity
:
.65
;
filter
:
alpha
(
opacity
=
65
);
-webkit-box-shadow
:
none
;
-moz-box-shadow
:
none
;
box-shadow
:
none
}
.btn-large
{
padding
:
9px
14px
;
font-size
:
15px
;
line-height
:
normal
;
-webkit-border-radius
:
5px
;
-moz-border-radius
:
5px
;
border-radius
:
5px
}
.btn-large
[
class
^=
"icon-"
]
{
margin-top
:
1px
}
.btn-small
{
padding
:
5px
9px
;
font-size
:
11px
;
line-height
:
16px
}
.btn-small
[
class
^=
"icon-"
]
{
margin-top
:
-1px
}
.btn-mini
{
padding
:
2px
6px
;
font-size
:
11px
;
line-height
:
14px
}
.btn-primary
,
.btn-primary
:hover
,
.btn-warning
,
.btn-warning
:hover
,
.btn-danger
,
.btn-danger
:hover
,
.btn-success
,
.btn-success
:hover
,
.btn-info
,
.btn-info
:hover
,
.btn-inverse
,
.btn-inverse
:hover
{
color
:
#fff
;
text-shadow
:
0
-1px
0
rgba
(
0
,
0
,
0
,
0.25
)}
.btn-primary.active
,
.btn-warning.active
,
.btn-danger.active
,
.btn-success.active
,
.btn-info.active
,
.btn-inverse.active
{
color
:
rgba
(
255
,
255
,
255
,
0.75
)}
.btn
{
border-color
:
#ccc
;
border-color
:
rgba
(
0
,
0
,
0
,
0.1
)
rgba
(
0
,
0
,
0
,
0.1
)
rgba
(
0
,
0
,
0
,
0.25
)}
.btn-primary
{
background-color
:
#0074cc
;
*
background-color
:
#05c
;
background-image
:
-ms-linear-gradient
(
top
,
#08c
,
#05c
);
background-image
:
-webkit-gradient
(
linear
,
0
0
,
0
100%
,
from
(
#08c
),
to
(
#05c
));
background-image
:
-webkit-linear-gradient
(
top
,
#08c
,
#05c
);
background-image
:
-o-linear-gradient
(
top
,
#08c
,
#05c
);
background-image
:
-moz-linear-gradient
(
top
,
#08c
,
#05c
);
background-image
:
linear-gradient
(
top
,
#08c
,
#05c
);
background-repeat
:
repeat-x
;
border-color
:
#05c
#05c
#003580
;
border-color
:
rgba
(
0
,
0
,
0
,
0.1
)
rgba
(
0
,
0
,
0
,
0.1
)
rgba
(
0
,
0
,
0
,
0.25
);
filter
:
progid
:
dximagetransform
.
microsoft
.
gradient
(
startColorstr
=
'#0088cc'
,
endColorstr
=
'#0055cc'
,
GradientType
=
0
);
filter
:
progid
:
dximagetransform
.
microsoft
.
gradient
(
enabled
=
false
)}
.btn-primary
:hover
,
.btn-primary
:active
,
.btn-primary.active
,
.btn-primary.disabled
,
.btn-primary
[
disabled
]
{
background-color
:
#05c
;
*
background-color
:
#004ab3
}
.btn-primary
:active
,
.btn-primary.active
{
background-color
:
#004099
\
9
}
.btn-warning
{
background-color
:
#faa732
;
*
background-color
:
#f89406
;
background-image
:
-ms-linear-gradient
(
top
,
#fbb450
,
#f89406
);
background-image
:
-webkit-gradient
(
linear
,
0
0
,
0
100%
,
from
(
#fbb450
),
to
(
#f89406
));
background-image
:
-webkit-linear-gradient
(
top
,
#fbb450
,
#f89406
);
background-image
:
-o-linear-gradient
(
top
,
#fbb450
,
#f89406
);
background-image
:
-moz-linear-gradient
(
top
,
#fbb450
,
#f89406
);
background-image
:
linear-gradient
(
top
,
#fbb450
,
#f89406
);
background-repeat
:
repeat-x
;
border-color
:
#f89406
#f89406
#ad6704
;
border-color
:
rgba
(
0
,
0
,
0
,
0.1
)
rgba
(
0
,
0
,
0
,
0.1
)
rgba
(
0
,
0
,
0
,
0.25
);
filter
:
progid
:
dximagetransform
.
microsoft
.
gradient
(
startColorstr
=
'#fbb450'
,
endColorstr
=
'#f89406'
,
GradientType
=
0
);
filter
:
progid
:
dximagetransform
.
microsoft
.
gradient
(
enabled
=
false
)}
.btn-warning
:hover
,
.btn-warning
:active
,
.btn-warning.active
,
.btn-warning.disabled
,
.btn-warning
[
disabled
]
{
background-color
:
#f89406
;
*
background-color
:
#df8505
}
.btn-warning
:active
,
.btn-warning.active
{
background-color
:
#c67605
\
9
}
.btn-danger
{
background-color
:
#da4f49
;
*
background-color
:
#bd362f
;
background-image
:
-ms-linear-gradient
(
top
,
#ee5f5b
,
#bd362f
);
background-image
:
-webkit-gradient
(
linear
,
0
0
,
0
100%
,
from
(
#ee5f5b
),
to
(
#bd362f
));
background-image
:
-webkit-linear-gradient
(
top
,
#ee5f5b
,
#bd362f
);
background-image
:
-o-linear-gradient
(
top
,
#ee5f5b
,
#bd362f
);
background-image
:
-moz-linear-gradient
(
top
,
#ee5f5b
,
#bd362f
);
background-image
:
linear-gradient
(
top
,
#ee5f5b
,
#bd362f
);
background-repeat
:
repeat-x
;
border-color
:
#bd362f
#bd362f
#802420
;
border-color
:
rgba
(
0
,
0
,
0
,
0.1
)
rgba
(
0
,
0
,
0
,
0.1
)
rgba
(
0
,
0
,
0
,
0.25
);
filter
:
progid
:
dximagetransform
.
microsoft
.
gradient
(
startColorstr
=
'#ee5f5b'
,
endColorstr
=
'#bd362f'
,
GradientType
=
0
);
filter
:
progid
:
dximagetransform
.
microsoft
.
gradient
(
enabled
=
false
)}
.btn-danger
:hover
,
.btn-danger
:active
,
.btn-danger.active
,
.btn-danger.disabled
,
.btn-danger
[
disabled
]
{
background-color
:
#bd362f
;
*
background-color
:
#a9302a
}
.btn-danger
:active
,
.btn-danger.active
{
background-color
:
#942a25
\
9
}
.btn-success
{
background-color
:
#5bb75b
;
*
background-color
:
#51a351
;
background-image
:
-ms-linear-gradient
(
top
,
#62c462
,
#51a351
);
background-image
:
-webkit-gradient
(
linear
,
0
0
,
0
100%
,
from
(
#62c462
),
to
(
#51a351
));
background-image
:
-webkit-linear-gradient
(
top
,
#62c462
,
#51a351
);
background-image
:
-o-linear-gradient
(
top
,
#62c462
,
#51a351
);
background-image
:
-moz-linear-gradient
(
top
,
#62c462
,
#51a351
);
background-image
:
linear-gradient
(
top
,
#62c462
,
#51a351
);
background-repeat
:
repeat-x
;
border-color
:
#51a351
#51a351
#387038
;
border-color
:
rgba
(
0
,
0
,
0
,
0.1
)
rgba
(
0
,
0
,
0
,
0.1
)
rgba
(
0
,
0
,
0
,
0.25
);
filter
:
progid
:
dximagetransform
.
microsoft
.
gradient
(
startColorstr
=
'#62c462'
,
endColorstr
=
'#51a351'
,
GradientType
=
0
);
filter
:
progid
:
dximagetransform
.
microsoft
.
gradient
(
enabled
=
false
)}
.btn-success
:hover
,
.btn-success
:active
,
.btn-success.active
,
.btn-success.disabled
,
.btn-success
[
disabled
]
{
background-color
:
#51a351
;
*
background-color
:
#499249
}
.btn-success
:active
,
.btn-success.active
{
background-color
:
#408140
\
9
}
.btn-info
{
background-color
:
#49afcd
;
*
background-color
:
#2f96b4
;
background-image
:
-ms-linear-gradient
(
top
,
#5bc0de
,
#2f96b4
);
background-image
:
-webkit-gradient
(
linear
,
0
0
,
0
100%
,
from
(
#5bc0de
),
to
(
#2f96b4
));
background-image
:
-webkit-linear-gradient
(
top
,
#5bc0de
,
#2f96b4
);
background-image
:
-o-linear-gradient
(
top
,
#5bc0de
,
#2f96b4
);
background-image
:
-moz-linear-gradient
(
top
,
#5bc0de
,
#2f96b4
);
background-image
:
linear-gradient
(
top
,
#5bc0de
,
#2f96b4
);
background-repeat
:
repeat-x
;
border-color
:
#2f96b4
#2f96b4
#1f6377
;
border-color
:
rgba
(
0
,
0
,
0
,
0.1
)
rgba
(
0
,
0
,
0
,
0.1
)
rgba
(
0
,
0
,
0
,
0.25
);
filter
:
progid
:
dximagetransform
.
microsoft
.
gradient
(
startColorstr
=
'#5bc0de'
,
endColorstr
=
'#2f96b4'
,
GradientType
=
0
);
filter
:
progid
:
dximagetransform
.
microsoft
.
gradient
(
enabled
=
false
)}
.btn-info
:hover
,
.btn-info
:active
,
.btn-info.active
,
.btn-info.disabled
,
.btn-info
[
disabled
]
{
background-color
:
#2f96b4
;
*
background-color
:
#2a85a0
}
.btn-info
:active
,
.btn-info.active
{
background-color
:
#24748c
\
9
}
.btn-inverse
{
background-color
:
#414141
;
*
background-color
:
#222
;
background-image
:
-ms-linear-gradient
(
top
,
#555
,
#222
);
background-image
:
-webkit-gradient
(
linear
,
0
0
,
0
100%
,
from
(
#555
),
to
(
#222
));
background-image
:
-webkit-linear-gradient
(
top
,
#555
,
#222
);
background-image
:
-o-linear-gradient
(
top
,
#555
,
#222
);
background-image
:
-moz-linear-gradient
(
top
,
#555
,
#222
);
background-image
:
linear-gradient
(
top
,
#555
,
#222
);
background-repeat
:
repeat-x
;
border-color
:
#222
#222
#000
;
border-color
:
rgba
(
0
,
0
,
0
,
0.1
)
rgba
(
0
,
0
,
0
,
0.1
)
rgba
(
0
,
0
,
0
,
0.25
);
filter
:
progid
:
dximagetransform
.
microsoft
.
gradient
(
startColorstr
=
'#555555'
,
endColorstr
=
'#222222'
,
GradientType
=
0
);
filter
:
progid
:
dximagetransform
.
microsoft
.
gradient
(
enabled
=
false
)}
.btn-inverse
:hover
,
.btn-inverse
:active
,
.btn-inverse.active
,
.btn-inverse.disabled
,
.btn-inverse
[
disabled
]
{
background-color
:
#222
;
*
background-color
:
#151515
}
.btn-inverse
:active
,
.btn-inverse.active
{
background-color
:
#080808
\
9
}
button
.btn
,
input
[
type
=
"submit"
]
.btn
{
*
padding-top
:
2px
;
*
padding-bottom
:
2px
}
button
.btn
::-moz-focus-inner
,
input
[
type
=
"submit"
]
.btn
::-moz-focus-inner
{
padding
:
0
;
border
:
0
}
button
.btn.btn-large
,
input
[
type
=
"submit"
]
.btn.btn-large
{
*
padding-top
:
7px
;
*
padding-bottom
:
7px
}
button
.btn.btn-small
,
input
[
type
=
"submit"
]
.btn.btn-small
{
*
padding-top
:
3px
;
*
padding-bottom
:
3px
}
button
.btn.btn-mini
,
input
[
type
=
"submit"
]
.btn.btn-mini
{
*
padding-top
:
1px
;
*
padding-bottom
:
1px
}
.btn-group
{
position
:
relative
;
*
margin-left
:
.3em
;
*
zoom
:
1
}
.btn-group
:before
,
.btn-group
:after
{
display
:
table
;
content
:
""
}
.btn-group
:after
{
clear
:
both
}
.btn-group
:first-child
{
*
margin-left
:
0
}
.btn-group
+
.btn-group
{
margin-left
:
5px
}
.btn-toolbar
{
margin-top
:
9px
;
margin-bottom
:
9px
}
.btn-toolbar
.btn-group
{
display
:
inline-block
;
*
display
:
inline
;
*
zoom
:
1
}
.btn-group
>
.btn
{
position
:
relative
;
float
:
left
;
margin-left
:
-1px
;
-webkit-border-radius
:
0
;
-moz-border-radius
:
0
;
border-radius
:
0
}
.btn-group
>
.btn
:first-child
{
margin-left
:
0
;
-webkit-border-bottom-left-radius
:
4px
;
border-bottom-left-radius
:
4px
;
-webkit-border-top-left-radius
:
4px
;
border-top-left-radius
:
4px
;
-moz-border-radius-bottomleft
:
4px
;
-moz-border-radius-topleft
:
4px
}
.btn-group
>
.btn
:last-child
,
.btn-group
>
.dropdown-toggle
{
-webkit-border-top-right-radius
:
4px
;
border-top-right-radius
:
4px
;
-webkit-border-bottom-right-radius
:
4px
;
border-bottom-right-radius
:
4px
;
-moz-border-radius-topright
:
4px
;
-moz-border-radius-bottomright
:
4px
}
.btn-group
>
.btn.large
:first-child
{
margin-left
:
0
;
-webkit-border-bottom-left-radius
:
6px
;
border-bottom-left-radius
:
6px
;
-webkit-border-top-left-radius
:
6px
;
border-top-left-radius
:
6px
;
-moz-border-radius-bottomleft
:
6px
;
-moz-border-radius-topleft
:
6px
}
.btn-group
>
.btn.large
:last-child
,
.btn-group
>
.large.dropdown-toggle
{
-webkit-border-top-right-radius
:
6px
;
border-top-right-radius
:
6px
;
-webkit-border-bottom-right-radius
:
6px
;
border-bottom-right-radius
:
6px
;
-moz-border-radius-topright
:
6px
;
-moz-border-radius-bottomright
:
6px
}
.btn-group
>
.btn
:hover
,
.btn-group
>
.btn
:focus
,
.btn-group
>
.btn
:active
,
.btn-group
>
.btn.active
{
z-index
:
2
}
.btn-group
.dropdown-toggle
:active
,
.btn-group.open
.dropdown-toggle
{
outline
:
0
}
.btn-group
>
.dropdown-toggle
{
*
padding-top
:
4px
;
padding-right
:
8px
;
*
padding-bottom
:
4px
;
padding-left
:
8px
;
-webkit-box-shadow
:
inset
1px
0
0
rgba
(
255
,
255
,
255
,
0.125
),
inset
0
1px
0
rgba
(
255
,
255
,
255
,
0.2
),
0
1px
2px
rgba
(
0
,
0
,
0
,
0.05
);
-moz-box-shadow
:
inset
1px
0
0
rgba
(
255
,
255
,
255
,
0.125
),
inset
0
1px
0
rgba
(
255
,
255
,
255
,
0.2
),
0
1px
2px
rgba
(
0
,
0
,
0
,
0.05
);
box-shadow
:
inset
1px
0
0
rgba
(
255
,
255
,
255
,
0.125
),
inset
0
1px
0
rgba
(
255
,
255
,
255
,
0.2
),
0
1px
2px
rgba
(
0
,
0
,
0
,
0.05
)}
.btn-group
>
.btn-mini.dropdown-toggle
{
padding-right
:
5px
;
padding-left
:
5px
}
.btn-group
>
.btn-small.dropdown-toggle
{
*
padding-top
:
4px
;
*
padding-bottom
:
4px
}
.btn-group
>
.btn-large.dropdown-toggle
{
padding-right
:
12px
;
padding-left
:
12px
}
.btn-group.open
.dropdown-toggle
{
background-image
:
none
;
-webkit-box-shadow
:
inset
0
2px
4px
rgba
(
0
,
0
,
0
,
0.15
),
0
1px
2px
rgba
(
0
,
0
,
0
,
0.05
);
-moz-box-shadow
:
inset
0
2px
4px
rgba
(
0
,
0
,
0
,
0.15
),
0
1px
2px
rgba
(
0
,
0
,
0
,
0.05
);
box-shadow
:
inset
0
2px
4px
rgba
(
0
,
0
,
0
,
0.15
),
0
1px
2px
rgba
(
0
,
0
,
0
,
0.05
)}
.btn-group.open
.btn.dropdown-toggle
{
background-color
:
#e6e6e6
}
.btn-group.open
.btn-primary.dropdown-toggle
{
background-color
:
#05c
}
.btn-group.open
.btn-warning.dropdown-toggle
{
background-color
:
#f89406
}
.btn-group.open
.btn-danger.dropdown-toggle
{
background-color
:
#bd362f
}
.btn-group.open
.btn-success.dropdown-toggle
{
background-color
:
#51a351
}
.btn-group.open
.btn-info.dropdown-toggle
{
background-color
:
#2f96b4
}
.btn-group.open
.btn-inverse.dropdown-toggle
{
background-color
:
#222
}
.btn
.caret
{
margin-top
:
7px
;
margin-left
:
0
}
.btn
:hover
.caret
,
.open.btn-group
.caret
{
opacity
:
1
;
filter
:
alpha
(
opacity
=
100
)}
.btn-mini
.caret
{
margin-top
:
5px
}
.btn-small
.caret
{
margin-top
:
6px
}
.btn-large
.caret
{
margin-top
:
6px
;
border-top-width
:
5px
;
border-right-width
:
5px
;
border-left-width
:
5px
}
.dropup
.btn-large
.caret
{
border-top
:
0
;
border-bottom
:
5px
solid
#000
}
.btn-primary
.caret
,
.btn-warning
.caret
,
.btn-danger
.caret
,
.btn-info
.caret
,
.btn-success
.caret
,
.btn-inverse
.caret
{
border-top-color
:
#fff
;
border-bottom-color
:
#fff
;
opacity
:
.75
;
filter
:
alpha
(
opacity
=
75
)}
.alert
{
padding
:
8px
35px
8px
14px
;
margin-bottom
:
18px
;
color
:
#c09853
;
text-shadow
:
0
1px
0
rgba
(
255
,
255
,
255
,
0.5
);
background-color
:
#fcf8e3
;
border
:
1px
solid
#fbeed5
;
-webkit-border-radius
:
4px
;
-moz-border-radius
:
4px
;
border-radius
:
4px
}
.alert-heading
{
color
:
inherit
}
.alert
.close
{
position
:
relative
;
top
:
-2px
;
right
:
-21px
;
line-height
:
18px
}
.alert-success
{
color
:
#468847
;
background-color
:
#dff0d8
;
border-color
:
#d6e9c6
}
.alert-danger
,
.alert-error
{
color
:
#b94a48
;
background-color
:
#f2dede
;
border-color
:
#eed3d7
}
.alert-info
{
color
:
#3a87ad
;
background-color
:
#d9edf7
;
border-color
:
#bce8f1
}
.alert-block
{
padding-top
:
14px
;
padding-bottom
:
14px
}
.alert-block
>
p
,
.alert-block
>
ul
{
margin-bottom
:
0
}
.alert-block
p
+
p
{
margin-top
:
5px
}
.nav
{
margin-bottom
:
18px
;
margin-left
:
0
;
list-style
:
none
}
.nav
>
li
>
a
{
display
:
block
}
.nav
>
li
>
a
:hover
{
text-decoration
:
none
;
background-color
:
#eee
}
.nav
>
.pull-right
{
float
:
right
}
.nav
.nav-header
{
display
:
block
;
padding
:
3px
15px
;
font-size
:
11px
;
font-weight
:
bold
;
line-height
:
18px
;
color
:
#999
;
text-shadow
:
0
1px
0
rgba
(
255
,
255
,
255
,
0.5
);
text-transform
:
uppercase
}
.nav
li
+
.nav-header
{
margin-top
:
9px
}
.nav-list
{
padding-right
:
15px
;
padding-left
:
15px
;
margin-bottom
:
0
}
.nav-list
>
li
>
a
,
.nav-list
.nav-header
{
margin-right
:
-15px
;
margin-left
:
-15px
;
text-shadow
:
0
1px
0
rgba
(
255
,
255
,
255
,
0.5
)}
.nav-list
>
li
>
a
{
padding
:
3px
15px
}
.nav-list
>
.active
>
a
,
.nav-list
>
.active
>
a
:hover
{
color
:
#fff
;
text-shadow
:
0
-1px
0
rgba
(
0
,
0
,
0
,
0.2
);
background-color
:
#08c
}
.nav-list
[
class
^=
"icon-"
]
{
margin-right
:
2px
}
.nav-list
.divider
{
*
width
:
100%
;
height
:
1px
;
margin
:
8px
1px
;
*
margin
:
-5px
0
5px
;
overflow
:
hidden
;
background-color
:
#e5e5e5
;
border-bottom
:
1px
solid
#fff
}
.nav-tabs
,
.nav-pills
{
*
zoom
:
1
}
.nav-tabs
:before
,
.nav-pills
:before
,
.nav-tabs
:after
,
.nav-pills
:after
{
display
:
table
;
content
:
""
}
.nav-tabs
:after
,
.nav-pills
:after
{
clear
:
both
}
.nav-tabs
>
li
,
.nav-pills
>
li
{
float
:
left
}
.nav-tabs
>
li
>
a
,
.nav-pills
>
li
>
a
{
padding-right
:
12px
;
padding-left
:
12px
;
margin-right
:
2px
;
line-height
:
14px
}
.nav-tabs
{
border-bottom
:
1px
solid
#ddd
}
.nav-tabs
>
li
{
margin-bottom
:
-1px
}
.nav-tabs
>
li
>
a
{
padding-top
:
8px
;
padding-bottom
:
8px
;
line-height
:
18px
;
border
:
1px
solid
transparent
;
-webkit-border-radius
:
4px
4px
0
0
;
-moz-border-radius
:
4px
4px
0
0
;
border-radius
:
4px
4px
0
0
}
.nav-tabs
>
li
>
a
:hover
{
border-color
:
#eee
#eee
#ddd
}
.nav-tabs
>
.active
>
a
,
.nav-tabs
>
.active
>
a
:hover
{
color
:
#555
;
cursor
:
default
;
background-color
:
#fff
;
border
:
1px
solid
#ddd
;
border-bottom-color
:
transparent
}
.nav-pills
>
li
>
a
{
padding-top
:
8px
;
padding-bottom
:
8px
;
margin-top
:
2px
;
margin-bottom
:
2px
;
-webkit-border-radius
:
5px
;
-moz-border-radius
:
5px
;
border-radius
:
5px
}
.nav-pills
>
.active
>
a
,
.nav-pills
>
.active
>
a
:hover
{
color
:
#fff
;
background-color
:
#08c
}
.nav-stacked
>
li
{
float
:
none
}
.nav-stacked
>
li
>
a
{
margin-right
:
0
}
.nav-tabs.nav-stacked
{
border-bottom
:
0
}
.nav-tabs.nav-stacked
>
li
>
a
{
border
:
1px
solid
#ddd
;
-webkit-border-radius
:
0
;
-moz-border-radius
:
0
;
border-radius
:
0
}
.nav-tabs.nav-stacked
>
li
:first-child
>
a
{
-webkit-border-radius
:
4px
4px
0
0
;
-moz-border-radius
:
4px
4px
0
0
;
border-radius
:
4px
4px
0
0
}
.nav-tabs.nav-stacked
>
li
:last-child
>
a
{
-webkit-border-radius
:
0
0
4px
4px
;
-moz-border-radius
:
0
0
4px
4px
;
border-radius
:
0
0
4px
4px
}
.nav-tabs.nav-stacked
>
li
>
a
:hover
{
z-index
:
2
;
border-color
:
#ddd
}
.nav-pills.nav-stacked
>
li
>
a
{
margin-bottom
:
3px
}
.nav-pills.nav-stacked
>
li
:last-child
>
a
{
margin-bottom
:
1px
}
.nav-tabs
.dropdown-menu
{
-webkit-border-radius
:
0
0
5px
5px
;
-moz-border-radius
:
0
0
5px
5px
;
border-radius
:
0
0
5px
5px
}
.nav-pills
.dropdown-menu
{
-webkit-border-radius
:
4px
;
-moz-border-radius
:
4px
;
border-radius
:
4px
}
.nav-tabs
.dropdown-toggle
.caret
,
.nav-pills
.dropdown-toggle
.caret
{
margin-top
:
6px
;
border-top-color
:
#08c
;
border-bottom-color
:
#08c
}
.nav-tabs
.dropdown-toggle
:hover
.caret
,
.nav-pills
.dropdown-toggle
:hover
.caret
{
border-top-color
:
#005580
;
border-bottom-color
:
#005580
}
.nav-tabs
.active
.dropdown-toggle
.caret
,
.nav-pills
.active
.dropdown-toggle
.caret
{
border-top-color
:
#333
;
border-bottom-color
:
#333
}
.nav
>
.dropdown.active
>
a
:hover
{
color
:
#000
;
cursor
:
pointer
}
.nav-tabs
.open
.dropdown-toggle
,
.nav-pills
.open
.dropdown-toggle
,
.nav
>
li
.dropdown.open.active
>
a
:hover
{
color
:
#fff
;
background-color
:
#999
;
border-color
:
#999
}
.nav
li
.dropdown.open
.caret
,
.nav
li
.dropdown.open.active
.caret
,
.nav
li
.dropdown.open
a
:hover
.caret
{
border-top-color
:
#fff
;
border-bottom-color
:
#fff
;
opacity
:
1
;
filter
:
alpha
(
opacity
=
100
)}
.tabs-stacked
.open
>
a
:hover
{
border-color
:
#999
}
.tabbable
{
*
zoom
:
1
}
.tabbable
:before
,
.tabbable
:after
{
display
:
table
;
content
:
""
}
.tabbable
:after
{
clear
:
both
}
.tab-content
{
overflow
:
auto
}
.tabs-below
>
.nav-tabs
,
.tabs-right
>
.nav-tabs
,
.tabs-left
>
.nav-tabs
{
border-bottom
:
0
}
.tab-content
>
.tab-pane
,
.pill-content
>
.pill-pane
{
display
:
none
}
.tab-content
>
.active
,
.pill-content
>
.active
{
display
:
block
}
.tabs-below
>
.nav-tabs
{
border-top
:
1px
solid
#ddd
}
.tabs-below
>
.nav-tabs
>
li
{
margin-top
:
-1px
;
margin-bottom
:
0
}
.tabs-below
>
.nav-tabs
>
li
>
a
{
-webkit-border-radius
:
0
0
4px
4px
;
-moz-border-radius
:
0
0
4px
4px
;
border-radius
:
0
0
4px
4px
}
.tabs-below
>
.nav-tabs
>
li
>
a
:hover
{
border-top-color
:
#ddd
;
border-bottom-color
:
transparent
}
.tabs-below
>
.nav-tabs
>
.active
>
a
,
.tabs-below
>
.nav-tabs
>
.active
>
a
:hover
{
border-color
:
transparent
#ddd
#ddd
#ddd
}
.tabs-left
>
.nav-tabs
>
li
,
.tabs-right
>
.nav-tabs
>
li
{
float
:
none
}
.tabs-left
>
.nav-tabs
>
li
>
a
,
.tabs-right
>
.nav-tabs
>
li
>
a
{
min-width
:
74px
;
margin-right
:
0
;
margin-bottom
:
3px
}
.tabs-left
>
.nav-tabs
{
float
:
left
;
margin-right
:
19px
;
border-right
:
1px
solid
#ddd
}
.tabs-left
>
.nav-tabs
>
li
>
a
{
margin-right
:
-1px
;
-webkit-border-radius
:
4px
0
0
4px
;
-moz-border-radius
:
4px
0
0
4px
;
border-radius
:
4px
0
0
4px
}
.tabs-left
>
.nav-tabs
>
li
>
a
:hover
{
border-color
:
#eee
#ddd
#eee
#eee
}
.tabs-left
>
.nav-tabs
.active
>
a
,
.tabs-left
>
.nav-tabs
.active
>
a
:hover
{
border-color
:
#ddd
transparent
#ddd
#ddd
;
*
border-right-color
:
#fff
}
.tabs-right
>
.nav-tabs
{
float
:
right
;
margin-left
:
19px
;
border-left
:
1px
solid
#ddd
}
.tabs-right
>
.nav-tabs
>
li
>
a
{
margin-left
:
-1px
;
-webkit-border-radius
:
0
4px
4px
0
;
-moz-border-radius
:
0
4px
4px
0
;
border-radius
:
0
4px
4px
0
}
.tabs-right
>
.nav-tabs
>
li
>
a
:hover
{
border-color
:
#eee
#eee
#eee
#ddd
}
.tabs-right
>
.nav-tabs
.active
>
a
,
.tabs-right
>
.nav-tabs
.active
>
a
:hover
{
border-color
:
#ddd
#ddd
#ddd
transparent
;
*
border-left-color
:
#fff
}
.navbar
{
*
position
:
relative
;
*
z-index
:
2
;
margin-bottom
:
18px
;
overflow
:
visible
}
.navbar-inner
{
min-height
:
40px
;
padding-right
:
20px
;
padding-left
:
20px
;
background-color
:
#2c2c2c
;
background-image
:
-moz-linear-gradient
(
top
,
#333
,
#222
);
background-image
:
-ms-linear-gradient
(
top
,
#333
,
#222
);
background-image
:
-webkit-gradient
(
linear
,
0
0
,
0
100%
,
from
(
#333
),
to
(
#222
));
background-image
:
-webkit-linear-gradient
(
top
,
#333
,
#222
);
background-image
:
-o-linear-gradient
(
top
,
#333
,
#222
);
background-image
:
linear-gradient
(
top
,
#333
,
#222
);
background-repeat
:
repeat-x
;
-webkit-border-radius
:
4px
;
-moz-border-radius
:
4px
;
border-radius
:
4px
;
filter
:
progid
:
dximagetransform
.
microsoft
.
gradient
(
startColorstr
=
'#333333'
,
endColorstr
=
'#222222'
,
GradientType
=
0
);
-webkit-box-shadow
:
0
1px
3px
rgba
(
0
,
0
,
0
,
0.25
),
inset
0
-1px
0
rgba
(
0
,
0
,
0
,
0.1
);
-moz-box-shadow
:
0
1px
3px
rgba
(
0
,
0
,
0
,
0.25
),
inset
0
-1px
0
rgba
(
0
,
0
,
0
,
0.1
);
box-shadow
:
0
1px
3px
rgba
(
0
,
0
,
0
,
0.25
),
inset
0
-1px
0
rgba
(
0
,
0
,
0
,
0.1
)}
.navbar
.container
{
width
:
auto
}
.nav-collapse.collapse
{
height
:
auto
}
.navbar
{
color
:
#999
}
.navbar
.brand
:hover
{
text-decoration
:
none
}
.navbar
.brand
{
display
:
block
;
float
:
left
;
padding
:
8px
20px
12px
;
margin-left
:
-20px
;
font-size
:
20px
;
font-weight
:
200
;
line-height
:
1
;
color
:
#999
}
.navbar
.navbar-text
{
margin-bottom
:
0
;
line-height
:
40px
}
.navbar
.navbar-link
{
color
:
#999
}
.navbar
.navbar-link
:hover
{
color
:
#fff
}
.navbar
.btn
,
.navbar
.btn-group
{
margin-top
:
5px
}
.navbar
.btn-group
.btn
{
margin
:
0
}
.navbar-form
{
margin-bottom
:
0
;
*
zoom
:
1
}
.navbar-form
:before
,
.navbar-form
:after
{
display
:
table
;
content
:
""
}
.navbar-form
:after
{
clear
:
both
}
.navbar-form
input
,
.navbar-form
select
,
.navbar-form
.radio
,
.navbar-form
.checkbox
{
margin-top
:
5px
}
.navbar-form
input
,
.navbar-form
select
{
display
:
inline-block
;
margin-bottom
:
0
}
.navbar-form
input
[
type
=
"image"
],
.navbar-form
input
[
type
=
"checkbox"
],
.navbar-form
input
[
type
=
"radio"
]
{
margin-top
:
3px
}
.navbar-form
.input-append
,
.navbar-form
.input-prepend
{
margin-top
:
6px
;
white-space
:
nowrap
}
.navbar-form
.input-append
input
,
.navbar-form
.input-prepend
input
{
margin-top
:
0
}
.navbar-search
{
position
:
relative
;
float
:
left
;
margin-top
:
6px
;
margin-bottom
:
0
}
.navbar-search
.search-query
{
padding
:
4px
9px
;
font-family
:
"Helvetica Neue"
,
Helvetica
,
Arial
,
sans-serif
;
font-size
:
13px
;
font-weight
:
normal
;
line-height
:
1
;
color
:
#fff
;
background-color
:
#626262
;
border
:
1px
solid
#151515
;
-webkit-box-shadow
:
inset
0
1px
2px
rgba
(
0
,
0
,
0
,
0.1
),
0
1px
0
rgba
(
255
,
255
,
255
,
0.15
);
-moz-box-shadow
:
inset
0
1px
2px
rgba
(
0
,
0
,
0
,
0.1
),
0
1px
0
rgba
(
255
,
255
,
255
,
0.15
);
box-shadow
:
inset
0
1px
2px
rgba
(
0
,
0
,
0
,
0.1
),
0
1px
0
rgba
(
255
,
255
,
255
,
0.15
);
-webkit-transition
:
none
;
-moz-transition
:
none
;
-ms-transition
:
none
;
-o-transition
:
none
;
transition
:
none
}
.navbar-search
.search-query
:-moz-placeholder
{
color
:
#ccc
}
.navbar-search
.search-query
:-ms-input-placeholder
{
color
:
#ccc
}
.navbar-search
.search-query
::-webkit-input-placeholder
{
color
:
#ccc
}
.navbar-search
.search-query
:focus
,
.navbar-search
.search-query.focused
{
padding
:
5px
10px
;
color
:
#333
;
text-shadow
:
0
1px
0
#fff
;
background-color
:
#fff
;
border
:
0
;
outline
:
0
;
-webkit-box-shadow
:
0
0
3px
rgba
(
0
,
0
,
0
,
0.15
);
-moz-box-shadow
:
0
0
3px
rgba
(
0
,
0
,
0
,
0.15
);
box-shadow
:
0
0
3px
rgba
(
0
,
0
,
0
,
0.15
)}
.navbar-fixed-top
,
.navbar-fixed-bottom
{
position
:
fixed
;
right
:
0
;
left
:
0
;
z-index
:
1030
;
margin-bottom
:
0
}
.navbar-fixed-top
.navbar-inner
,
.navbar-fixed-bottom
.navbar-inner
{
padding-right
:
0
;
padding-left
:
0
;
-webkit-border-radius
:
0
;
-moz-border-radius
:
0
;
border-radius
:
0
}
.navbar-fixed-top
.container
,
.navbar-fixed-bottom
.container
{
width
:
940px
}
.navbar-fixed-top
{
top
:
0
}
.navbar-fixed-bottom
{
bottom
:
0
}
.navbar
.nav
{
position
:
relative
;
left
:
0
;
display
:
block
;
float
:
left
;
margin
:
0
10px
0
0
}
.navbar
.nav.pull-right
{
float
:
right
}
.navbar
.nav
>
li
{
display
:
block
;
float
:
left
}
.navbar
.nav
>
li
>
a
{
float
:
none
;
padding
:
9px
10px
11px
;
line-height
:
19px
;
color
:
#999
;
text-decoration
:
none
;
text-shadow
:
0
-1px
0
rgba
(
0
,
0
,
0
,
0.25
)}
.navbar
.btn
{
display
:
inline-block
;
padding
:
4px
10px
4px
;
margin
:
5px
5px
6px
;
line-height
:
18px
}
.navbar
.btn-group
{
padding
:
5px
5px
6px
;
margin
:
0
}
.navbar
.nav
>
li
>
a
:hover
{
color
:
#fff
;
text-decoration
:
none
;
background-color
:
transparent
}
.navbar
.nav
.active
>
a
,
.navbar
.nav
.active
>
a
:hover
{
color
:
#fff
;
text-decoration
:
none
;
background-color
:
#222
}
.navbar
.divider-vertical
{
width
:
1px
;
height
:
40px
;
margin
:
0
9px
;
overflow
:
hidden
;
background-color
:
#222
;
border-right
:
1px
solid
#333
}
.navbar
.nav.pull-right
{
margin-right
:
0
;
margin-left
:
10px
}
.navbar
.btn-navbar
{
display
:
none
;
float
:
right
;
padding
:
7px
10px
;
margin-right
:
5px
;
margin-left
:
5px
;
background-color
:
#2c2c2c
;
*
background-color
:
#222
;
background-image
:
-ms-linear-gradient
(
top
,
#333
,
#222
);
background-image
:
-webkit-gradient
(
linear
,
0
0
,
0
100%
,
from
(
#333
),
to
(
#222
));
background-image
:
-webkit-linear-gradient
(
top
,
#333
,
#222
);
background-image
:
-o-linear-gradient
(
top
,
#333
,
#222
);
background-image
:
linear-gradient
(
top
,
#333
,
#222
);
background-image
:
-moz-linear-gradient
(
top
,
#333
,
#222
);
background-repeat
:
repeat-x
;
border-color
:
#222
#222
#000
;
border-color
:
rgba
(
0
,
0
,
0
,
0.1
)
rgba
(
0
,
0
,
0
,
0.1
)
rgba
(
0
,
0
,
0
,
0.25
);
filter
:
progid
:
dximagetransform
.
microsoft
.
gradient
(
startColorstr
=
'#333333'
,
endColorstr
=
'#222222'
,
GradientType
=
0
);
filter
:
progid
:
dximagetransform
.
microsoft
.
gradient
(
enabled
=
false
);
-webkit-box-shadow
:
inset
0
1px
0
rgba
(
255
,
255
,
255
,
0.1
),
0
1px
0
rgba
(
255
,
255
,
255
,
0.075
);
-moz-box-shadow
:
inset
0
1px
0
rgba
(
255
,
255
,
255
,
0.1
),
0
1px
0
rgba
(
255
,
255
,
255
,
0.075
);
box-shadow
:
inset
0
1px
0
rgba
(
255
,
255
,
255
,
0.1
),
0
1px
0
rgba
(
255
,
255
,
255
,
0.075
)}
.navbar
.btn-navbar
:hover
,
.navbar
.btn-navbar
:active
,
.navbar
.btn-navbar.active
,
.navbar
.btn-navbar.disabled
,
.navbar
.btn-navbar
[
disabled
]
{
background-color
:
#222
;
*
background-color
:
#151515
}
.navbar
.btn-navbar
:active
,
.navbar
.btn-navbar.active
{
background-color
:
#080808
\
9
}
.navbar
.btn-navbar
.icon-bar
{
display
:
block
;
width
:
18px
;
height
:
2px
;
background-color
:
#f5f5f5
;
-webkit-border-radius
:
1px
;
-moz-border-radius
:
1px
;
border-radius
:
1px
;
-webkit-box-shadow
:
0
1px
0
rgba
(
0
,
0
,
0
,
0.25
);
-moz-box-shadow
:
0
1px
0
rgba
(
0
,
0
,
0
,
0.25
);
box-shadow
:
0
1px
0
rgba
(
0
,
0
,
0
,
0.25
)}
.btn-navbar
.icon-bar
+
.icon-bar
{
margin-top
:
3px
}
.navbar
.dropdown-menu
:before
{
position
:
absolute
;
top
:
-7px
;
left
:
9px
;
display
:
inline-block
;
border-right
:
7px
solid
transparent
;
border-bottom
:
7px
solid
#ccc
;
border-left
:
7px
solid
transparent
;
border-bottom-color
:
rgba
(
0
,
0
,
0
,
0.2
);
content
:
''
}
.navbar
.dropdown-menu
:after
{
position
:
absolute
;
top
:
-6px
;
left
:
10px
;
display
:
inline-block
;
border-right
:
6px
solid
transparent
;
border-bottom
:
6px
solid
#fff
;
border-left
:
6px
solid
transparent
;
content
:
''
}
.navbar-fixed-bottom
.dropdown-menu
:before
{
top
:
auto
;
bottom
:
-7px
;
border-top
:
7px
solid
#ccc
;
border-bottom
:
0
;
border-top-color
:
rgba
(
0
,
0
,
0
,
0.2
)}
.navbar-fixed-bottom
.dropdown-menu
:after
{
top
:
auto
;
bottom
:
-6px
;
border-top
:
6px
solid
#fff
;
border-bottom
:
0
}
.navbar
.nav
li
.dropdown
.dropdown-toggle
.caret
,
.navbar
.nav
li
.dropdown.open
.caret
{
border-top-color
:
#fff
;
border-bottom-color
:
#fff
}
.navbar
.nav
li
.dropdown.active
.caret
{
opacity
:
1
;
filter
:
alpha
(
opacity
=
100
)}
.navbar
.nav
li
.dropdown.open
>
.dropdown-toggle
,
.navbar
.nav
li
.dropdown.active
>
.dropdown-toggle
,
.navbar
.nav
li
.dropdown.open.active
>
.dropdown-toggle
{
background-color
:
transparent
}
.navbar
.nav
li
.dropdown.active
>
.dropdown-toggle
:hover
{
color
:
#fff
}
.navbar
.pull-right
.dropdown-menu
,
.navbar
.dropdown-menu.pull-right
{
right
:
0
;
left
:
auto
}
.navbar
.pull-right
.dropdown-menu
:before
,
.navbar
.dropdown-menu.pull-right
:before
{
right
:
12px
;
left
:
auto
}
.navbar
.pull-right
.dropdown-menu
:after
,
.navbar
.dropdown-menu.pull-right
:after
{
right
:
13px
;
left
:
auto
}
.breadcrumb
{
padding
:
7px
14px
;
margin
:
0
0
18px
;
list-style
:
none
;
background-color
:
#fbfbfb
;
background-image
:
-moz-linear-gradient
(
top
,
#fff
,
#f5f5f5
);
background-image
:
-ms-linear-gradient
(
top
,
#fff
,
#f5f5f5
);
background-image
:
-webkit-gradient
(
linear
,
0
0
,
0
100%
,
from
(
#fff
),
to
(
#f5f5f5
));
background-image
:
-webkit-linear-gradient
(
top
,
#fff
,
#f5f5f5
);
background-image
:
-o-linear-gradient
(
top
,
#fff
,
#f5f5f5
);
background-image
:
linear-gradient
(
top
,
#fff
,
#f5f5f5
);
background-repeat
:
repeat-x
;
border
:
1px
solid
#ddd
;
-webkit-border-radius
:
3px
;
-moz-border-radius
:
3px
;
border-radius
:
3px
;
filter
:
progid
:
dximagetransform
.
microsoft
.
gradient
(
startColorstr
=
'#ffffff'
,
endColorstr
=
'#f5f5f5'
,
GradientType
=
0
);
-webkit-box-shadow
:
inset
0
1px
0
#fff
;
-moz-box-shadow
:
inset
0
1px
0
#fff
;
box-shadow
:
inset
0
1px
0
#fff
}
.breadcrumb
li
{
display
:
inline-block
;
*
display
:
inline
;
text-shadow
:
0
1px
0
#fff
;
*
zoom
:
1
}
.breadcrumb
.divider
{
padding
:
0
5px
;
color
:
#999
}
.breadcrumb
.active
a
{
color
:
#333
}
.pagination
{
height
:
36px
;
margin
:
18px
0
}
.pagination
ul
{
display
:
inline-block
;
*
display
:
inline
;
margin-bottom
:
0
;
margin-left
:
0
;
-webkit-border-radius
:
3px
;
-moz-border-radius
:
3px
;
border-radius
:
3px
;
*
zoom
:
1
;
-webkit-box-shadow
:
0
1px
2px
rgba
(
0
,
0
,
0
,
0.05
);
-moz-box-shadow
:
0
1px
2px
rgba
(
0
,
0
,
0
,
0.05
);
box-shadow
:
0
1px
2px
rgba
(
0
,
0
,
0
,
0.05
)}
.pagination
li
{
display
:
inline
}
.pagination
a
{
float
:
left
;
padding
:
0
14px
;
line-height
:
34px
;
text-decoration
:
none
;
border
:
1px
solid
#ddd
;
border-left-width
:
0
}
.pagination
a
:hover
,
.pagination
.active
a
{
background-color
:
#f5f5f5
}
.pagination
.active
a
{
color
:
#999
;
cursor
:
default
}
.pagination
.disabled
span
,
.pagination
.disabled
a
,
.pagination
.disabled
a
:hover
{
color
:
#999
;
cursor
:
default
;
background-color
:
transparent
}
.pagination
li
:first-child
a
{
border-left-width
:
1px
;
-webkit-border-radius
:
3px
0
0
3px
;
-moz-border-radius
:
3px
0
0
3px
;
border-radius
:
3px
0
0
3px
}
.pagination
li
:last-child
a
{
-webkit-border-radius
:
0
3px
3px
0
;
-moz-border-radius
:
0
3px
3px
0
;
border-radius
:
0
3px
3px
0
}
.pagination-centered
{
text-align
:
center
}
.pagination-right
{
text-align
:
right
}
.pager
{
margin-bottom
:
18px
;
margin-left
:
0
;
text-align
:
center
;
list-style
:
none
;
*
zoom
:
1
}
.pager
:before
,
.pager
:after
{
display
:
table
;
content
:
""
}
.pager
:after
{
clear
:
both
}
.pager
li
{
display
:
inline
}
.pager
a
{
display
:
inline-block
;
padding
:
5px
14px
;
background-color
:
#fff
;
border
:
1px
solid
#ddd
;
-webkit-border-radius
:
15px
;
-moz-border-radius
:
15px
;
border-radius
:
15px
}
.pager
a
:hover
{
text-decoration
:
none
;
background-color
:
#f5f5f5
}
.pager
.next
a
{
float
:
right
}
.pager
.previous
a
{
float
:
left
}
.pager
.disabled
a
,
.pager
.disabled
a
:hover
{
color
:
#999
;
cursor
:
default
;
background-color
:
#fff
}
.modal-open
.dropdown-menu
{
z-index
:
2050
}
.modal-open
.dropdown.open
{
*
z-index
:
2050
}
.modal-open
.popover
{
z-index
:
2060
}
.modal-open
.tooltip
{
z-index
:
2070
}
.modal-backdrop
{
position
:
fixed
;
top
:
0
;
right
:
0
;
bottom
:
0
;
left
:
0
;
z-index
:
1040
;
background-color
:
#000
}
.modal-backdrop.fade
{
opacity
:
0
}
.modal-backdrop
,
.modal-backdrop.fade.in
{
opacity
:
.8
;
filter
:
alpha
(
opacity
=
80
)}
.modal
{
position
:
fixed
;
top
:
50%
;
left
:
50%
;
z-index
:
1050
;
width
:
560px
;
margin
:
-250px
0
0
-280px
;
overflow
:
auto
;
background-color
:
#fff
;
border
:
1px
solid
#999
;
border
:
1px
solid
rgba
(
0
,
0
,
0
,
0.3
);
*
border
:
1px
solid
#999
;
-webkit-border-radius
:
6px
;
-moz-border-radius
:
6px
;
border-radius
:
6px
;
-webkit-box-shadow
:
0
3px
7px
rgba
(
0
,
0
,
0
,
0.3
);
-moz-box-shadow
:
0
3px
7px
rgba
(
0
,
0
,
0
,
0.3
);
box-shadow
:
0
3px
7px
rgba
(
0
,
0
,
0
,
0.3
);
-webkit-background-clip
:
padding-box
;
-moz-background-clip
:
padding-box
;
background-clip
:
padding-box
}
.modal.fade
{
top
:
-25%
;
-webkit-transition
:
opacity
.3s
linear
,
top
.3s
ease-out
;
-moz-transition
:
opacity
.3s
linear
,
top
.3s
ease-out
;
-ms-transition
:
opacity
.3s
linear
,
top
.3s
ease-out
;
-o-transition
:
opacity
.3s
linear
,
top
.3s
ease-out
;
transition
:
opacity
.3s
linear
,
top
.3s
ease-out
}
.modal.fade.in
{
top
:
50%
}
.modal-header
{
padding
:
9px
15px
;
border-bottom
:
1px
solid
#eee
}
.modal-header
.close
{
margin-top
:
2px
}
.modal-body
{
max-height
:
400px
;
padding
:
15px
;
overflow-y
:
auto
}
.modal-form
{
margin-bottom
:
0
}
.modal-footer
{
padding
:
14px
15px
15px
;
margin-bottom
:
0
;
text-align
:
right
;
background-color
:
#f5f5f5
;
border-top
:
1px
solid
#ddd
;
-webkit-border-radius
:
0
0
6px
6px
;
-moz-border-radius
:
0
0
6px
6px
;
border-radius
:
0
0
6px
6px
;
*
zoom
:
1
;
-webkit-box-shadow
:
inset
0
1px
0
#fff
;
-moz-box-shadow
:
inset
0
1px
0
#fff
;
box-shadow
:
inset
0
1px
0
#fff
}
.modal-footer
:before
,
.modal-footer
:after
{
display
:
table
;
content
:
""
}
.modal-footer
:after
{
clear
:
both
}
.modal-footer
.btn
+
.btn
{
margin-bottom
:
0
;
margin-left
:
5px
}
.modal-footer
.btn-group
.btn
+
.btn
{
margin-left
:
-1px
}
.tooltip
{
position
:
absolute
;
z-index
:
1020
;
display
:
block
;
padding
:
5px
;
font-size
:
11px
;
opacity
:
0
;
filter
:
alpha
(
opacity
=
0
);
visibility
:
visible
}
.tooltip.in
{
opacity
:
.8
;
filter
:
alpha
(
opacity
=
80
)}
.tooltip.top
{
margin-top
:
-2px
}
.tooltip.right
{
margin-left
:
2px
}
.tooltip.bottom
{
margin-top
:
2px
}
.tooltip.left
{
margin-left
:
-2px
}
.tooltip.top
.tooltip-arrow
{
bottom
:
0
;
left
:
50%
;
margin-left
:
-5px
;
border-top
:
5px
solid
#000
;
border-right
:
5px
solid
transparent
;
border-left
:
5px
solid
transparent
}
.tooltip.left
.tooltip-arrow
{
top
:
50%
;
right
:
0
;
margin-top
:
-5px
;
border-top
:
5px
solid
transparent
;
border-bottom
:
5px
solid
transparent
;
border-left
:
5px
solid
#000
}
.tooltip.bottom
.tooltip-arrow
{
top
:
0
;
left
:
50%
;
margin-left
:
-5px
;
border-right
:
5px
solid
transparent
;
border-bottom
:
5px
solid
#000
;
border-left
:
5px
solid
transparent
}
.tooltip.right
.tooltip-arrow
{
top
:
50%
;
left
:
0
;
margin-top
:
-5px
;
border-top
:
5px
solid
transparent
;
border-right
:
5px
solid
#000
;
border-bottom
:
5px
solid
transparent
}
.tooltip-inner
{
max-width
:
200px
;
padding
:
3px
8px
;
color
:
#fff
;
text-align
:
center
;
text-decoration
:
none
;
background-color
:
#000
;
-webkit-border-radius
:
4px
;
-moz-border-radius
:
4px
;
border-radius
:
4px
}
.tooltip-arrow
{
position
:
absolute
;
width
:
0
;
height
:
0
}
.popover
{
position
:
absolute
;
top
:
0
;
left
:
0
;
z-index
:
1010
;
display
:
none
;
padding
:
5px
}
.popover.top
{
margin-top
:
-5px
}
.popover.right
{
margin-left
:
5px
}
.popover.bottom
{
margin-top
:
5px
}
.popover.left
{
margin-left
:
-5px
}
.popover.top
.arrow
{
bottom
:
0
;
left
:
50%
;
margin-left
:
-5px
;
border-top
:
5px
solid
#000
;
border-right
:
5px
solid
transparent
;
border-left
:
5px
solid
transparent
}
.popover.right
.arrow
{
top
:
50%
;
left
:
0
;
margin-top
:
-5px
;
border-top
:
5px
solid
transparent
;
border-right
:
5px
solid
#000
;
border-bottom
:
5px
solid
transparent
}
.popover.bottom
.arrow
{
top
:
0
;
left
:
50%
;
margin-left
:
-5px
;
border-right
:
5px
solid
transparent
;
border-bottom
:
5px
solid
#000
;
border-left
:
5px
solid
transparent
}
.popover.left
.arrow
{
top
:
50%
;
right
:
0
;
margin-top
:
-5px
;
border-top
:
5px
solid
transparent
;
border-bottom
:
5px
solid
transparent
;
border-left
:
5px
solid
#000
}
.popover
.arrow
{
position
:
absolute
;
width
:
0
;
height
:
0
}
.popover-inner
{
width
:
280px
;
padding
:
3px
;
overflow
:
hidden
;
background
:
#000
;
background
:
rgba
(
0
,
0
,
0
,
0.8
);
-webkit-border-radius
:
6px
;
-moz-border-radius
:
6px
;
border-radius
:
6px
;
-webkit-box-shadow
:
0
3px
7px
rgba
(
0
,
0
,
0
,
0.3
);
-moz-box-shadow
:
0
3px
7px
rgba
(
0
,
0
,
0
,
0.3
);
box-shadow
:
0
3px
7px
rgba
(
0
,
0
,
0
,
0.3
)}
.popover-title
{
padding
:
9px
15px
;
line-height
:
1
;
background-color
:
#f5f5f5
;
border-bottom
:
1px
solid
#eee
;
-webkit-border-radius
:
3px
3px
0
0
;
-moz-border-radius
:
3px
3px
0
0
;
border-radius
:
3px
3px
0
0
}
.popover-content
{
padding
:
14px
;
background-color
:
#fff
;
-webkit-border-radius
:
0
0
3px
3px
;
-moz-border-radius
:
0
0
3px
3px
;
border-radius
:
0
0
3px
3px
;
-webkit-background-clip
:
padding-box
;
-moz-background-clip
:
padding-box
;
background-clip
:
padding-box
}
.popover-content
p
,
.popover-content
ul
,
.popover-content
ol
{
margin-bottom
:
0
}
.thumbnails
{
margin-left
:
-20px
;
list-style
:
none
;
*
zoom
:
1
}
.thumbnails
:before
,
.thumbnails
:after
{
display
:
table
;
content
:
""
}
.thumbnails
:after
{
clear
:
both
}
.row-fluid
.thumbnails
{
margin-left
:
0
}
.thumbnails
>
li
{
float
:
left
;
margin-bottom
:
18px
;
margin-left
:
20px
}
.thumbnail
{
display
:
block
;
padding
:
4px
;
line-height
:
1
;
border
:
1px
solid
#ddd
;
-webkit-border-radius
:
4px
;
-moz-border-radius
:
4px
;
border-radius
:
4px
;
-webkit-box-shadow
:
0
1px
1px
rgba
(
0
,
0
,
0
,
0.075
);
-moz-box-shadow
:
0
1px
1px
rgba
(
0
,
0
,
0
,
0.075
);
box-shadow
:
0
1px
1px
rgba
(
0
,
0
,
0
,
0.075
)}
a
.thumbnail
:hover
{
border-color
:
#08c
;
-webkit-box-shadow
:
0
1px
4px
rgba
(
0
,
105
,
214
,
0.25
);
-moz-box-shadow
:
0
1px
4px
rgba
(
0
,
105
,
214
,
0.25
);
box-shadow
:
0
1px
4px
rgba
(
0
,
105
,
214
,
0.25
)}
.thumbnail
>
img
{
display
:
block
;
max-width
:
100%
;
margin-right
:
auto
;
margin-left
:
auto
}
.thumbnail
.caption
{
padding
:
9px
}
.label
,
.badge
{
font-size
:
10.998px
;
font-weight
:
bold
;
line-height
:
14px
;
color
:
#fff
;
text-shadow
:
0
-1px
0
rgba
(
0
,
0
,
0
,
0.25
);
white-space
:
nowrap
;
vertical-align
:
baseline
;
background-color
:
#999
}
.label
{
padding
:
1px
4px
2px
;
-webkit-border-radius
:
3px
;
-moz-border-radius
:
3px
;
border-radius
:
3px
}
.badge
{
padding
:
1px
9px
2px
;
-webkit-border-radius
:
9px
;
-moz-border-radius
:
9px
;
border-radius
:
9px
}
a
.label
:hover
,
a
.badge
:hover
{
color
:
#fff
;
text-decoration
:
none
;
cursor
:
pointer
}
.label-important
,
.badge-important
{
background-color
:
#b94a48
}
.label-important
[
href
],
.badge-important
[
href
]
{
background-color
:
#953b39
}
.label-warning
,
.badge-warning
{
background-color
:
#f89406
}
.label-warning
[
href
],
.badge-warning
[
href
]
{
background-color
:
#c67605
}
.label-success
,
.badge-success
{
background-color
:
#468847
}
.label-success
[
href
],
.badge-success
[
href
]
{
background-color
:
#356635
}
.label-info
,
.badge-info
{
background-color
:
#3a87ad
}
.label-info
[
href
],
.badge-info
[
href
]
{
background-color
:
#2d6987
}
.label-inverse
,
.badge-inverse
{
background-color
:
#333
}
.label-inverse
[
href
],
.badge-inverse
[
href
]
{
background-color
:
#1a1a1a
}
@-webkit-keyframes
progress-bar-stripes
{
from
{
background-position
:
40px
0
}
to
{
background-position
:
0
0
}}
@-moz-keyframes
progress-bar-stripes
{
from
{
background-position
:
40px
0
}
to
{
background-position
:
0
0
}}
@-ms-keyframes
progress-bar-stripes
{
from
{
background-position
:
40px
0
}
to
{
background-position
:
0
0
}}
@-o-keyframes
progress-bar-stripes
{
from
{
background-position
:
0
0
}
to
{
background-position
:
40px
0
}}
@keyframes
progress-bar-stripes
{
from
{
background-position
:
40px
0
}
to
{
background-position
:
0
0
}}
.progress
{
height
:
18px
;
margin-bottom
:
18px
;
overflow
:
hidden
;
background-color
:
#f7f7f7
;
background-image
:
-moz-linear-gradient
(
top
,
#f5f5f5
,
#f9f9f9
);
background-image
:
-ms-linear-gradient
(
top
,
#f5f5f5
,
#f9f9f9
);
background-image
:
-webkit-gradient
(
linear
,
0
0
,
0
100%
,
from
(
#f5f5f5
),
to
(
#f9f9f9
));
background-image
:
-webkit-linear-gradient
(
top
,
#f5f5f5
,
#f9f9f9
);
background-image
:
-o-linear-gradient
(
top
,
#f5f5f5
,
#f9f9f9
);
background-image
:
linear-gradient
(
top
,
#f5f5f5
,
#f9f9f9
);
background-repeat
:
repeat-x
;
-webkit-border-radius
:
4px
;
-moz-border-radius
:
4px
;
border-radius
:
4px
;
filter
:
progid
:
dximagetransform
.
microsoft
.
gradient
(
startColorstr
=
'#f5f5f5'
,
endColorstr
=
'#f9f9f9'
,
GradientType
=
0
);
-webkit-box-shadow
:
inset
0
1px
2px
rgba
(
0
,
0
,
0
,
0.1
);
-moz-box-shadow
:
inset
0
1px
2px
rgba
(
0
,
0
,
0
,
0.1
);
box-shadow
:
inset
0
1px
2px
rgba
(
0
,
0
,
0
,
0.1
)}
.progress
.bar
{
width
:
0
;
height
:
18px
;
font-size
:
12px
;
color
:
#fff
;
text-align
:
center
;
text-shadow
:
0
-1px
0
rgba
(
0
,
0
,
0
,
0.25
);
background-color
:
#0e90d2
;
background-image
:
-moz-linear-gradient
(
top
,
#149bdf
,
#0480be
);
background-image
:
-webkit-gradient
(
linear
,
0
0
,
0
100%
,
from
(
#149bdf
),
to
(
#0480be
));
background-image
:
-webkit-linear-gradient
(
top
,
#149bdf
,
#0480be
);
background-image
:
-o-linear-gradient
(
top
,
#149bdf
,
#0480be
);
background-image
:
linear-gradient
(
top
,
#149bdf
,
#0480be
);
background-image
:
-ms-linear-gradient
(
top
,
#149bdf
,
#0480be
);
background-repeat
:
repeat-x
;
filter
:
progid
:
dximagetransform
.
microsoft
.
gradient
(
startColorstr
=
'#149bdf'
,
endColorstr
=
'#0480be'
,
GradientType
=
0
);
-webkit-box-shadow
:
inset
0
-1px
0
rgba
(
0
,
0
,
0
,
0.15
);
-moz-box-shadow
:
inset
0
-1px
0
rgba
(
0
,
0
,
0
,
0.15
);
box-shadow
:
inset
0
-1px
0
rgba
(
0
,
0
,
0
,
0.15
);
-webkit-box-sizing
:
border-box
;
-moz-box-sizing
:
border-box
;
-ms-box-sizing
:
border-box
;
box-sizing
:
border-box
;
-webkit-transition
:
width
.6s
ease
;
-moz-transition
:
width
.6s
ease
;
-ms-transition
:
width
.6s
ease
;
-o-transition
:
width
.6s
ease
;
transition
:
width
.6s
ease
}
.progress-striped
.bar
{
background-color
:
#149bdf
;
background-image
:
-o-linear-gradient
(
-45deg
,
rgba
(
255
,
255
,
255
,
0.15
)
25%
,
transparent
25%
,
transparent
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
75%
,
transparent
75%
,
transparent
);
background-image
:
-webkit-linear-gradient
(
-45deg
,
rgba
(
255
,
255
,
255
,
0.15
)
25%
,
transparent
25%
,
transparent
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
75%
,
transparent
75%
,
transparent
);
background-image
:
-moz-linear-gradient
(
-45deg
,
rgba
(
255
,
255
,
255
,
0.15
)
25%
,
transparent
25%
,
transparent
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
75%
,
transparent
75%
,
transparent
);
background-image
:
-ms-linear-gradient
(
-45deg
,
rgba
(
255
,
255
,
255
,
0.15
)
25%
,
transparent
25%
,
transparent
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
75%
,
transparent
75%
,
transparent
);
background-image
:
-webkit-gradient
(
linear
,
0
100%
,
100%
0
,
color-stop
(
0.25
,
rgba
(
255
,
255
,
255
,
0.15
)),
color-stop
(
0.25
,
transparent
),
color-stop
(
0.5
,
transparent
),
color-stop
(
0.5
,
rgba
(
255
,
255
,
255
,
0.15
)),
color-stop
(
0.75
,
rgba
(
255
,
255
,
255
,
0.15
)),
color-stop
(
0.75
,
transparent
),
to
(
transparent
));
background-image
:
linear-gradient
(
-45deg
,
rgba
(
255
,
255
,
255
,
0.15
)
25%
,
transparent
25%
,
transparent
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
75%
,
transparent
75%
,
transparent
);
-webkit-background-size
:
40px
40px
;
-moz-background-size
:
40px
40px
;
-o-background-size
:
40px
40px
;
background-size
:
40px
40px
}
.progress.active
.bar
{
-webkit-animation
:
progress-bar-stripes
2s
linear
infinite
;
-moz-animation
:
progress-bar-stripes
2s
linear
infinite
;
-ms-animation
:
progress-bar-stripes
2s
linear
infinite
;
-o-animation
:
progress-bar-stripes
2s
linear
infinite
;
animation
:
progress-bar-stripes
2s
linear
infinite
}
.progress-danger
.bar
{
background-color
:
#dd514c
;
background-image
:
-moz-linear-gradient
(
top
,
#ee5f5b
,
#c43c35
);
background-image
:
-ms-linear-gradient
(
top
,
#ee5f5b
,
#c43c35
);
background-image
:
-webkit-gradient
(
linear
,
0
0
,
0
100%
,
from
(
#ee5f5b
),
to
(
#c43c35
));
background-image
:
-webkit-linear-gradient
(
top
,
#ee5f5b
,
#c43c35
);
background-image
:
-o-linear-gradient
(
top
,
#ee5f5b
,
#c43c35
);
background-image
:
linear-gradient
(
top
,
#ee5f5b
,
#c43c35
);
background-repeat
:
repeat-x
;
filter
:
progid
:
dximagetransform
.
microsoft
.
gradient
(
startColorstr
=
'#ee5f5b'
,
endColorstr
=
'#c43c35'
,
GradientType
=
0
)}
.progress-danger.progress-striped
.bar
{
background-color
:
#ee5f5b
;
background-image
:
-webkit-gradient
(
linear
,
0
100%
,
100%
0
,
color-stop
(
0.25
,
rgba
(
255
,
255
,
255
,
0.15
)),
color-stop
(
0.25
,
transparent
),
color-stop
(
0.5
,
transparent
),
color-stop
(
0.5
,
rgba
(
255
,
255
,
255
,
0.15
)),
color-stop
(
0.75
,
rgba
(
255
,
255
,
255
,
0.15
)),
color-stop
(
0.75
,
transparent
),
to
(
transparent
));
background-image
:
-webkit-linear-gradient
(
-45deg
,
rgba
(
255
,
255
,
255
,
0.15
)
25%
,
transparent
25%
,
transparent
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
75%
,
transparent
75%
,
transparent
);
background-image
:
-moz-linear-gradient
(
-45deg
,
rgba
(
255
,
255
,
255
,
0.15
)
25%
,
transparent
25%
,
transparent
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
75%
,
transparent
75%
,
transparent
);
background-image
:
-ms-linear-gradient
(
-45deg
,
rgba
(
255
,
255
,
255
,
0.15
)
25%
,
transparent
25%
,
transparent
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
75%
,
transparent
75%
,
transparent
);
background-image
:
-o-linear-gradient
(
-45deg
,
rgba
(
255
,
255
,
255
,
0.15
)
25%
,
transparent
25%
,
transparent
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
75%
,
transparent
75%
,
transparent
);
background-image
:
linear-gradient
(
-45deg
,
rgba
(
255
,
255
,
255
,
0.15
)
25%
,
transparent
25%
,
transparent
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
75%
,
transparent
75%
,
transparent
)}
.progress-success
.bar
{
background-color
:
#5eb95e
;
background-image
:
-moz-linear-gradient
(
top
,
#62c462
,
#57a957
);
background-image
:
-ms-linear-gradient
(
top
,
#62c462
,
#57a957
);
background-image
:
-webkit-gradient
(
linear
,
0
0
,
0
100%
,
from
(
#62c462
),
to
(
#57a957
));
background-image
:
-webkit-linear-gradient
(
top
,
#62c462
,
#57a957
);
background-image
:
-o-linear-gradient
(
top
,
#62c462
,
#57a957
);
background-image
:
linear-gradient
(
top
,
#62c462
,
#57a957
);
background-repeat
:
repeat-x
;
filter
:
progid
:
dximagetransform
.
microsoft
.
gradient
(
startColorstr
=
'#62c462'
,
endColorstr
=
'#57a957'
,
GradientType
=
0
)}
.progress-success.progress-striped
.bar
{
background-color
:
#62c462
;
background-image
:
-webkit-gradient
(
linear
,
0
100%
,
100%
0
,
color-stop
(
0.25
,
rgba
(
255
,
255
,
255
,
0.15
)),
color-stop
(
0.25
,
transparent
),
color-stop
(
0.5
,
transparent
),
color-stop
(
0.5
,
rgba
(
255
,
255
,
255
,
0.15
)),
color-stop
(
0.75
,
rgba
(
255
,
255
,
255
,
0.15
)),
color-stop
(
0.75
,
transparent
),
to
(
transparent
));
background-image
:
-webkit-linear-gradient
(
-45deg
,
rgba
(
255
,
255
,
255
,
0.15
)
25%
,
transparent
25%
,
transparent
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
75%
,
transparent
75%
,
transparent
);
background-image
:
-moz-linear-gradient
(
-45deg
,
rgba
(
255
,
255
,
255
,
0.15
)
25%
,
transparent
25%
,
transparent
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
75%
,
transparent
75%
,
transparent
);
background-image
:
-ms-linear-gradient
(
-45deg
,
rgba
(
255
,
255
,
255
,
0.15
)
25%
,
transparent
25%
,
transparent
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
75%
,
transparent
75%
,
transparent
);
background-image
:
-o-linear-gradient
(
-45deg
,
rgba
(
255
,
255
,
255
,
0.15
)
25%
,
transparent
25%
,
transparent
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
75%
,
transparent
75%
,
transparent
);
background-image
:
linear-gradient
(
-45deg
,
rgba
(
255
,
255
,
255
,
0.15
)
25%
,
transparent
25%
,
transparent
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
75%
,
transparent
75%
,
transparent
)}
.progress-info
.bar
{
background-color
:
#4bb1cf
;
background-image
:
-moz-linear-gradient
(
top
,
#5bc0de
,
#339bb9
);
background-image
:
-ms-linear-gradient
(
top
,
#5bc0de
,
#339bb9
);
background-image
:
-webkit-gradient
(
linear
,
0
0
,
0
100%
,
from
(
#5bc0de
),
to
(
#339bb9
));
background-image
:
-webkit-linear-gradient
(
top
,
#5bc0de
,
#339bb9
);
background-image
:
-o-linear-gradient
(
top
,
#5bc0de
,
#339bb9
);
background-image
:
linear-gradient
(
top
,
#5bc0de
,
#339bb9
);
background-repeat
:
repeat-x
;
filter
:
progid
:
dximagetransform
.
microsoft
.
gradient
(
startColorstr
=
'#5bc0de'
,
endColorstr
=
'#339bb9'
,
GradientType
=
0
)}
.progress-info.progress-striped
.bar
{
background-color
:
#5bc0de
;
background-image
:
-webkit-gradient
(
linear
,
0
100%
,
100%
0
,
color-stop
(
0.25
,
rgba
(
255
,
255
,
255
,
0.15
)),
color-stop
(
0.25
,
transparent
),
color-stop
(
0.5
,
transparent
),
color-stop
(
0.5
,
rgba
(
255
,
255
,
255
,
0.15
)),
color-stop
(
0.75
,
rgba
(
255
,
255
,
255
,
0.15
)),
color-stop
(
0.75
,
transparent
),
to
(
transparent
));
background-image
:
-webkit-linear-gradient
(
-45deg
,
rgba
(
255
,
255
,
255
,
0.15
)
25%
,
transparent
25%
,
transparent
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
75%
,
transparent
75%
,
transparent
);
background-image
:
-moz-linear-gradient
(
-45deg
,
rgba
(
255
,
255
,
255
,
0.15
)
25%
,
transparent
25%
,
transparent
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
75%
,
transparent
75%
,
transparent
);
background-image
:
-ms-linear-gradient
(
-45deg
,
rgba
(
255
,
255
,
255
,
0.15
)
25%
,
transparent
25%
,
transparent
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
75%
,
transparent
75%
,
transparent
);
background-image
:
-o-linear-gradient
(
-45deg
,
rgba
(
255
,
255
,
255
,
0.15
)
25%
,
transparent
25%
,
transparent
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
75%
,
transparent
75%
,
transparent
);
background-image
:
linear-gradient
(
-45deg
,
rgba
(
255
,
255
,
255
,
0.15
)
25%
,
transparent
25%
,
transparent
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
75%
,
transparent
75%
,
transparent
)}
.progress-warning
.bar
{
background-color
:
#faa732
;
background-image
:
-moz-linear-gradient
(
top
,
#fbb450
,
#f89406
);
background-image
:
-ms-linear-gradient
(
top
,
#fbb450
,
#f89406
);
background-image
:
-webkit-gradient
(
linear
,
0
0
,
0
100%
,
from
(
#fbb450
),
to
(
#f89406
));
background-image
:
-webkit-linear-gradient
(
top
,
#fbb450
,
#f89406
);
background-image
:
-o-linear-gradient
(
top
,
#fbb450
,
#f89406
);
background-image
:
linear-gradient
(
top
,
#fbb450
,
#f89406
);
background-repeat
:
repeat-x
;
filter
:
progid
:
dximagetransform
.
microsoft
.
gradient
(
startColorstr
=
'#fbb450'
,
endColorstr
=
'#f89406'
,
GradientType
=
0
)}
.progress-warning.progress-striped
.bar
{
background-color
:
#fbb450
;
background-image
:
-webkit-gradient
(
linear
,
0
100%
,
100%
0
,
color-stop
(
0.25
,
rgba
(
255
,
255
,
255
,
0.15
)),
color-stop
(
0.25
,
transparent
),
color-stop
(
0.5
,
transparent
),
color-stop
(
0.5
,
rgba
(
255
,
255
,
255
,
0.15
)),
color-stop
(
0.75
,
rgba
(
255
,
255
,
255
,
0.15
)),
color-stop
(
0.75
,
transparent
),
to
(
transparent
));
background-image
:
-webkit-linear-gradient
(
-45deg
,
rgba
(
255
,
255
,
255
,
0.15
)
25%
,
transparent
25%
,
transparent
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
75%
,
transparent
75%
,
transparent
);
background-image
:
-moz-linear-gradient
(
-45deg
,
rgba
(
255
,
255
,
255
,
0.15
)
25%
,
transparent
25%
,
transparent
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
75%
,
transparent
75%
,
transparent
);
background-image
:
-ms-linear-gradient
(
-45deg
,
rgba
(
255
,
255
,
255
,
0.15
)
25%
,
transparent
25%
,
transparent
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
75%
,
transparent
75%
,
transparent
);
background-image
:
-o-linear-gradient
(
-45deg
,
rgba
(
255
,
255
,
255
,
0.15
)
25%
,
transparent
25%
,
transparent
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
75%
,
transparent
75%
,
transparent
);
background-image
:
linear-gradient
(
-45deg
,
rgba
(
255
,
255
,
255
,
0.15
)
25%
,
transparent
25%
,
transparent
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
50%
,
rgba
(
255
,
255
,
255
,
0.15
)
75%
,
transparent
75%
,
transparent
)}
.accordion
{
margin-bottom
:
18px
}
.accordion-group
{
margin-bottom
:
2px
;
border
:
1px
solid
#e5e5e5
;
-webkit-border-radius
:
4px
;
-moz-border-radius
:
4px
;
border-radius
:
4px
}
.accordion-heading
{
border-bottom
:
0
}
.accordion-heading
.accordion-toggle
{
display
:
block
;
padding
:
8px
15px
}
.accordion-toggle
{
cursor
:
pointer
}
.accordion-inner
{
padding
:
9px
15px
;
border-top
:
1px
solid
#e5e5e5
}
.carousel
{
position
:
relative
;
margin-bottom
:
18px
;
line-height
:
1
}
.carousel-inner
{
position
:
relative
;
width
:
100%
;
overflow
:
hidden
}
.carousel
.item
{
position
:
relative
;
display
:
none
;
-webkit-transition
:
.6s
ease-in-out
left
;
-moz-transition
:
.6s
ease-in-out
left
;
-ms-transition
:
.6s
ease-in-out
left
;
-o-transition
:
.6s
ease-in-out
left
;
transition
:
.6s
ease-in-out
left
}
.carousel
.item
>
img
{
display
:
block
;
line-height
:
1
}
.carousel
.active
,
.carousel
.next
,
.carousel
.prev
{
display
:
block
}
.carousel
.active
{
left
:
0
}
.carousel
.next
,
.carousel
.prev
{
position
:
absolute
;
top
:
0
;
width
:
100%
}
.carousel
.next
{
left
:
100%
}
.carousel
.prev
{
left
:
-100%
}
.carousel
.next.left
,
.carousel
.prev.right
{
left
:
0
}
.carousel
.active.left
{
left
:
-100%
}
.carousel
.active.right
{
left
:
100%
}
.carousel-control
{
position
:
absolute
;
top
:
40%
;
left
:
15px
;
width
:
40px
;
height
:
40px
;
margin-top
:
-20px
;
font-size
:
60px
;
font-weight
:
100
;
line-height
:
30px
;
color
:
#fff
;
text-align
:
center
;
background
:
#222
;
border
:
3px
solid
#fff
;
-webkit-border-radius
:
23px
;
-moz-border-radius
:
23px
;
border-radius
:
23px
;
opacity
:
.5
;
filter
:
alpha
(
opacity
=
50
)}
.carousel-control.right
{
right
:
15px
;
left
:
auto
}
.carousel-control
:hover
{
color
:
#fff
;
text-decoration
:
none
;
opacity
:
.9
;
filter
:
alpha
(
opacity
=
90
)}
.carousel-caption
{
position
:
absolute
;
right
:
0
;
bottom
:
0
;
left
:
0
;
padding
:
10px
15px
5px
;
background
:
#333
;
background
:
rgba
(
0
,
0
,
0
,
0.75
)}
.carousel-caption
h4
,
.carousel-caption
p
{
color
:
#fff
}
.hero-unit
{
padding
:
60px
;
margin-bottom
:
30px
;
background-color
:
#eee
;
-webkit-border-radius
:
6px
;
-moz-border-radius
:
6px
;
border-radius
:
6px
}
.hero-unit
h1
{
margin-bottom
:
0
;
font-size
:
60px
;
line-height
:
1
;
letter-spacing
:
-1px
;
color
:
inherit
}
.hero-unit
p
{
font-size
:
18px
;
font-weight
:
200
;
line-height
:
27px
;
color
:
inherit
}
.pull-right
{
float
:
right
}
.pull-left
{
float
:
left
}
.hide
{
display
:
none
}
.show
{
display
:
block
}
.invisible
{
visibility
:
hidden
}
input
.field-error
,
textarea
.field-error
{
border
:
1px
solid
#B94A48
;
}
\ No newline at end of file
spring-boot-samples/spring-boot-sample-web-groovy-templates/src/main/resources/static/js/jquery-1.7.2.js
0 → 100644
View file @
523956e2
This source diff could not be displayed because it is too large. You can
view the blob
instead.
spring-boot-samples/spring-boot-sample-web-groovy-templates/src/main/resources/static/js/jquery.validate.js
0 → 100644
View file @
523956e2
/**
* jQuery Validation Plugin @VERSION
*
* http://bassistance.de/jquery-plugins/jquery-plugin-validation/
* http://docs.jquery.com/Plugins/Validation
*
* Copyright (c) 2012 Jörn Zaefferer
*
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*/
(
function
(
$
)
{
$
.
extend
(
$
.
fn
,
{
// http://docs.jquery.com/Plugins/Validation/validate
validate
:
function
(
options
)
{
// if nothing is selected, return nothing; can't chain anyway
if
(
!
this
.
length
)
{
if
(
options
&&
options
.
debug
&&
window
.
console
)
{
console
.
warn
(
"nothing selected, can't validate, returning nothing"
);
}
return
;
}
// check if a validator for this form was already created
var
validator
=
$
.
data
(
this
[
0
],
'validator'
);
if
(
validator
)
{
return
validator
;
}
// Add novalidate tag if HTML5.
this
.
attr
(
'novalidate'
,
'novalidate'
);
validator
=
new
$
.
validator
(
options
,
this
[
0
]
);
$
.
data
(
this
[
0
],
'validator'
,
validator
);
if
(
validator
.
settings
.
onsubmit
)
{
this
.
validateDelegate
(
":submit"
,
"click"
,
function
(
ev
)
{
if
(
validator
.
settings
.
submitHandler
)
{
validator
.
submitButton
=
ev
.
target
;
}
// allow suppressing validation by adding a cancel class to the submit button
if
(
$
(
ev
.
target
).
hasClass
(
'cancel'
)
)
{
validator
.
cancelSubmit
=
true
;
}
});
// validate the form on submit
this
.
submit
(
function
(
event
)
{
if
(
validator
.
settings
.
debug
)
{
// prevent form submit to be able to see console output
event
.
preventDefault
();
}
function
handle
()
{
var
hidden
;
if
(
validator
.
settings
.
submitHandler
)
{
if
(
validator
.
submitButton
)
{
// insert a hidden input as a replacement for the missing submit button
hidden
=
$
(
"<input type='hidden'/>"
).
attr
(
"name"
,
validator
.
submitButton
.
name
).
val
(
validator
.
submitButton
.
value
).
appendTo
(
validator
.
currentForm
);
}
validator
.
settings
.
submitHandler
.
call
(
validator
,
validator
.
currentForm
,
event
);
if
(
validator
.
submitButton
)
{
// and clean up afterwards; thanks to no-block-scope, hidden can be referenced
hidden
.
remove
();
}
return
false
;
}
return
true
;
}
// prevent submit for invalid forms or custom submit handlers
if
(
validator
.
cancelSubmit
)
{
validator
.
cancelSubmit
=
false
;
return
handle
();
}
if
(
validator
.
form
()
)
{
if
(
validator
.
pendingRequest
)
{
validator
.
formSubmitted
=
true
;
return
false
;
}
return
handle
();
}
else
{
validator
.
focusInvalid
();
return
false
;
}
});
}
return
validator
;
},
// http://docs.jquery.com/Plugins/Validation/valid
valid
:
function
()
{
if
(
$
(
this
[
0
]).
is
(
'form'
))
{
return
this
.
validate
().
form
();
}
else
{
var
valid
=
true
;
var
validator
=
$
(
this
[
0
].
form
).
validate
();
this
.
each
(
function
()
{
valid
&=
validator
.
element
(
this
);
});
return
valid
;
}
},
// attributes: space seperated list of attributes to retrieve and remove
removeAttrs
:
function
(
attributes
)
{
var
result
=
{},
$element
=
this
;
$
.
each
(
attributes
.
split
(
/
\s
/
),
function
(
index
,
value
)
{
result
[
value
]
=
$element
.
attr
(
value
);
$element
.
removeAttr
(
value
);
});
return
result
;
},
// http://docs.jquery.com/Plugins/Validation/rules
rules
:
function
(
command
,
argument
)
{
var
element
=
this
[
0
];
if
(
command
)
{
var
settings
=
$
.
data
(
element
.
form
,
'validator'
).
settings
;
var
staticRules
=
settings
.
rules
;
var
existingRules
=
$
.
validator
.
staticRules
(
element
);
switch
(
command
)
{
case
"add"
:
$
.
extend
(
existingRules
,
$
.
validator
.
normalizeRule
(
argument
));
staticRules
[
element
.
name
]
=
existingRules
;
if
(
argument
.
messages
)
{
settings
.
messages
[
element
.
name
]
=
$
.
extend
(
settings
.
messages
[
element
.
name
],
argument
.
messages
);
}
break
;
case
"remove"
:
if
(
!
argument
)
{
delete
staticRules
[
element
.
name
];
return
existingRules
;
}
var
filtered
=
{};
$
.
each
(
argument
.
split
(
/
\s
/
),
function
(
index
,
method
)
{
filtered
[
method
]
=
existingRules
[
method
];
delete
existingRules
[
method
];
});
return
filtered
;
}
}
var
data
=
$
.
validator
.
normalizeRules
(
$
.
extend
(
{},
$
.
validator
.
metadataRules
(
element
),
$
.
validator
.
classRules
(
element
),
$
.
validator
.
attributeRules
(
element
),
$
.
validator
.
staticRules
(
element
)
),
element
);
// make sure required is at front
if
(
data
.
required
)
{
var
param
=
data
.
required
;
delete
data
.
required
;
data
=
$
.
extend
({
required
:
param
},
data
);
}
return
data
;
}
});
// Custom selectors
$
.
extend
(
$
.
expr
[
":"
],
{
// http://docs.jquery.com/Plugins/Validation/blank
blank
:
function
(
a
)
{
return
!
$
.
trim
(
""
+
a
.
value
);},
// http://docs.jquery.com/Plugins/Validation/filled
filled
:
function
(
a
)
{
return
!!
$
.
trim
(
""
+
a
.
value
);},
// http://docs.jquery.com/Plugins/Validation/unchecked
unchecked
:
function
(
a
)
{
return
!
a
.
checked
;}
});
// constructor for validator
$
.
validator
=
function
(
options
,
form
)
{
this
.
settings
=
$
.
extend
(
true
,
{},
$
.
validator
.
defaults
,
options
);
this
.
currentForm
=
form
;
this
.
init
();
};
$
.
validator
.
format
=
function
(
source
,
params
)
{
if
(
arguments
.
length
===
1
)
{
return
function
()
{
var
args
=
$
.
makeArray
(
arguments
);
args
.
unshift
(
source
);
return
$
.
validator
.
format
.
apply
(
this
,
args
);
};
}
if
(
arguments
.
length
>
2
&&
params
.
constructor
!==
Array
)
{
params
=
$
.
makeArray
(
arguments
).
slice
(
1
);
}
if
(
params
.
constructor
!==
Array
)
{
params
=
[
params
];
}
$
.
each
(
params
,
function
(
i
,
n
)
{
source
=
source
.
replace
(
new
RegExp
(
"
\\
{"
+
i
+
"
\\
}"
,
"g"
),
n
);
});
return
source
;
};
$
.
extend
(
$
.
validator
,
{
defaults
:
{
messages
:
{},
groups
:
{},
rules
:
{},
errorClass
:
"error"
,
validClass
:
"valid"
,
errorElement
:
"label"
,
focusInvalid
:
true
,
errorContainer
:
$
(
[]
),
errorLabelContainer
:
$
(
[]
),
onsubmit
:
true
,
ignore
:
":hidden"
,
ignoreTitle
:
false
,
onfocusin
:
function
(
element
,
event
)
{
this
.
lastActive
=
element
;
// hide error label and remove error class on focus if enabled
if
(
this
.
settings
.
focusCleanup
&&
!
this
.
blockFocusCleanup
)
{
if
(
this
.
settings
.
unhighlight
)
{
this
.
settings
.
unhighlight
.
call
(
this
,
element
,
this
.
settings
.
errorClass
,
this
.
settings
.
validClass
);
}
this
.
addWrapper
(
this
.
errorsFor
(
element
)).
hide
();
}
},
onfocusout
:
function
(
element
,
event
)
{
if
(
!
this
.
checkable
(
element
)
&&
(
element
.
name
in
this
.
submitted
||
!
this
.
optional
(
element
))
)
{
this
.
element
(
element
);
}
},
onkeyup
:
function
(
element
,
event
)
{
if
(
element
.
name
in
this
.
submitted
||
element
===
this
.
lastElement
)
{
this
.
element
(
element
);
}
},
onclick
:
function
(
element
,
event
)
{
// click on selects, radiobuttons and checkboxes
if
(
element
.
name
in
this
.
submitted
)
{
this
.
element
(
element
);
}
// or option elements, check parent select in that case
else
if
(
element
.
parentNode
.
name
in
this
.
submitted
)
{
this
.
element
(
element
.
parentNode
);
}
},
highlight
:
function
(
element
,
errorClass
,
validClass
)
{
if
(
element
.
type
===
'radio'
)
{
this
.
findByName
(
element
.
name
).
addClass
(
errorClass
).
removeClass
(
validClass
);
}
else
{
$
(
element
).
addClass
(
errorClass
).
removeClass
(
validClass
);
}
},
unhighlight
:
function
(
element
,
errorClass
,
validClass
)
{
if
(
element
.
type
===
'radio'
)
{
this
.
findByName
(
element
.
name
).
removeClass
(
errorClass
).
addClass
(
validClass
);
}
else
{
$
(
element
).
removeClass
(
errorClass
).
addClass
(
validClass
);
}
}
},
// http://docs.jquery.com/Plugins/Validation/Validator/setDefaults
setDefaults
:
function
(
settings
)
{
$
.
extend
(
$
.
validator
.
defaults
,
settings
);
},
messages
:
{
required
:
"This field is required."
,
remote
:
"Please fix this field."
,
email
:
"Please enter a valid email address."
,
url
:
"Please enter a valid URL."
,
date
:
"Please enter a valid date."
,
dateISO
:
"Please enter a valid date (ISO)."
,
number
:
"Please enter a valid number."
,
digits
:
"Please enter only digits."
,
creditcard
:
"Please enter a valid credit card number."
,
equalTo
:
"Please enter the same value again."
,
accept
:
"Please enter a value with a valid extension."
,
maxlength
:
$
.
validator
.
format
(
"Please enter no more than {0} characters."
),
minlength
:
$
.
validator
.
format
(
"Please enter at least {0} characters."
),
rangelength
:
$
.
validator
.
format
(
"Please enter a value between {0} and {1} characters long."
),
range
:
$
.
validator
.
format
(
"Please enter a value between {0} and {1}."
),
max
:
$
.
validator
.
format
(
"Please enter a value less than or equal to {0}."
),
min
:
$
.
validator
.
format
(
"Please enter a value greater than or equal to {0}."
)
},
autoCreateRanges
:
false
,
prototype
:
{
init
:
function
()
{
this
.
labelContainer
=
$
(
this
.
settings
.
errorLabelContainer
);
this
.
errorContext
=
this
.
labelContainer
.
length
&&
this
.
labelContainer
||
$
(
this
.
currentForm
);
this
.
containers
=
$
(
this
.
settings
.
errorContainer
).
add
(
this
.
settings
.
errorLabelContainer
);
this
.
submitted
=
{};
this
.
valueCache
=
{};
this
.
pendingRequest
=
0
;
this
.
pending
=
{};
this
.
invalid
=
{};
this
.
reset
();
var
groups
=
(
this
.
groups
=
{});
$
.
each
(
this
.
settings
.
groups
,
function
(
key
,
value
)
{
$
.
each
(
value
.
split
(
/
\s
/
),
function
(
index
,
name
)
{
groups
[
name
]
=
key
;
});
});
var
rules
=
this
.
settings
.
rules
;
$
.
each
(
rules
,
function
(
key
,
value
)
{
rules
[
key
]
=
$
.
validator
.
normalizeRule
(
value
);
});
function
delegate
(
event
)
{
var
validator
=
$
.
data
(
this
[
0
].
form
,
"validator"
),
eventType
=
"on"
+
event
.
type
.
replace
(
/^validate/
,
""
);
if
(
validator
.
settings
[
eventType
])
{
validator
.
settings
[
eventType
].
call
(
validator
,
this
[
0
],
event
);
}
}
$
(
this
.
currentForm
)
.
validateDelegate
(
"[type='text'], [type='password'], [type='file'], select, textarea, "
+
"[type='number'], [type='search'] ,[type='tel'], [type='url'], "
+
"[type='email'], [type='datetime'], [type='date'], [type='month'], "
+
"[type='week'], [type='time'], [type='datetime-local'], "
+
"[type='range'], [type='color'] "
,
"focusin focusout keyup"
,
delegate
)
.
validateDelegate
(
"[type='radio'], [type='checkbox'], select, option"
,
"click"
,
delegate
);
if
(
this
.
settings
.
invalidHandler
)
{
$
(
this
.
currentForm
).
bind
(
"invalid-form.validate"
,
this
.
settings
.
invalidHandler
);
}
},
// http://docs.jquery.com/Plugins/Validation/Validator/form
form
:
function
()
{
this
.
checkForm
();
$
.
extend
(
this
.
submitted
,
this
.
errorMap
);
this
.
invalid
=
$
.
extend
({},
this
.
errorMap
);
if
(
!
this
.
valid
())
{
$
(
this
.
currentForm
).
triggerHandler
(
"invalid-form"
,
[
this
]);
}
this
.
showErrors
();
return
this
.
valid
();
},
checkForm
:
function
()
{
this
.
prepareForm
();
for
(
var
i
=
0
,
elements
=
(
this
.
currentElements
=
this
.
elements
());
elements
[
i
];
i
++
)
{
this
.
check
(
elements
[
i
]
);
}
return
this
.
valid
();
},
// http://docs.jquery.com/Plugins/Validation/Validator/element
element
:
function
(
element
)
{
element
=
this
.
validationTargetFor
(
this
.
clean
(
element
)
);
this
.
lastElement
=
element
;
this
.
prepareElement
(
element
);
this
.
currentElements
=
$
(
element
);
var
result
=
this
.
check
(
element
)
!==
false
;
if
(
result
)
{
delete
this
.
invalid
[
element
.
name
];
}
else
{
this
.
invalid
[
element
.
name
]
=
true
;
}
if
(
!
this
.
numberOfInvalids
()
)
{
// Hide error containers on last error
this
.
toHide
=
this
.
toHide
.
add
(
this
.
containers
);
}
this
.
showErrors
();
return
result
;
},
// http://docs.jquery.com/Plugins/Validation/Validator/showErrors
showErrors
:
function
(
errors
)
{
if
(
errors
)
{
// add items to error list and map
$
.
extend
(
this
.
errorMap
,
errors
);
this
.
errorList
=
[];
for
(
var
name
in
errors
)
{
this
.
errorList
.
push
({
message
:
errors
[
name
],
element
:
this
.
findByName
(
name
)[
0
]
});
}
// remove items from success list
this
.
successList
=
$
.
grep
(
this
.
successList
,
function
(
element
)
{
return
!
(
element
.
name
in
errors
);
});
}
if
(
this
.
settings
.
showErrors
)
{
this
.
settings
.
showErrors
.
call
(
this
,
this
.
errorMap
,
this
.
errorList
);
}
else
{
this
.
defaultShowErrors
();
}
},
// http://docs.jquery.com/Plugins/Validation/Validator/resetForm
resetForm
:
function
()
{
if
(
$
.
fn
.
resetForm
)
{
$
(
this
.
currentForm
).
resetForm
();
}
this
.
submitted
=
{};
this
.
lastElement
=
null
;
this
.
prepareForm
();
this
.
hideErrors
();
this
.
elements
().
removeClass
(
this
.
settings
.
errorClass
);
},
numberOfInvalids
:
function
()
{
return
this
.
objectLength
(
this
.
invalid
);
},
objectLength
:
function
(
obj
)
{
var
count
=
0
;
for
(
var
i
in
obj
)
{
count
++
;
}
return
count
;
},
hideErrors
:
function
()
{
this
.
addWrapper
(
this
.
toHide
).
hide
();
},
valid
:
function
()
{
return
this
.
size
()
===
0
;
},
size
:
function
()
{
return
this
.
errorList
.
length
;
},
focusInvalid
:
function
()
{
if
(
this
.
settings
.
focusInvalid
)
{
try
{
$
(
this
.
findLastActive
()
||
this
.
errorList
.
length
&&
this
.
errorList
[
0
].
element
||
[])
.
filter
(
":visible"
)
.
focus
()
// manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find
.
trigger
(
"focusin"
);
}
catch
(
e
)
{
// ignore IE throwing errors when focusing hidden elements
}
}
},
findLastActive
:
function
()
{
var
lastActive
=
this
.
lastActive
;
return
lastActive
&&
$
.
grep
(
this
.
errorList
,
function
(
n
)
{
return
n
.
element
.
name
===
lastActive
.
name
;
}).
length
===
1
&&
lastActive
;
},
elements
:
function
()
{
var
validator
=
this
,
rulesCache
=
{};
// select all valid inputs inside the form (no submit or reset buttons)
return
$
(
this
.
currentForm
)
.
find
(
"input, select, textarea"
)
.
not
(
":submit, :reset, :image, [disabled]"
)
.
not
(
this
.
settings
.
ignore
)
.
filter
(
function
()
{
if
(
!
this
.
name
&&
validator
.
settings
.
debug
&&
window
.
console
)
{
console
.
error
(
"%o has no name assigned"
,
this
);
}
// select only the first element for each name, and only those with rules specified
if
(
this
.
name
in
rulesCache
||
!
validator
.
objectLength
(
$
(
this
).
rules
())
)
{
return
false
;
}
rulesCache
[
this
.
name
]
=
true
;
return
true
;
});
},
clean
:
function
(
selector
)
{
return
$
(
selector
)[
0
];
},
errors
:
function
()
{
var
errorClass
=
this
.
settings
.
errorClass
.
replace
(
' '
,
'.'
);
return
$
(
this
.
settings
.
errorElement
+
"."
+
errorClass
,
this
.
errorContext
);
},
reset
:
function
()
{
this
.
successList
=
[];
this
.
errorList
=
[];
this
.
errorMap
=
{};
this
.
toShow
=
$
([]);
this
.
toHide
=
$
([]);
this
.
currentElements
=
$
([]);
},
prepareForm
:
function
()
{
this
.
reset
();
this
.
toHide
=
this
.
errors
().
add
(
this
.
containers
);
},
prepareElement
:
function
(
element
)
{
this
.
reset
();
this
.
toHide
=
this
.
errorsFor
(
element
);
},
elementValue
:
function
(
element
)
{
var
val
=
$
(
element
).
val
();
if
(
typeof
val
===
'string'
)
{
return
val
.
replace
(
/
\r
/g
,
""
);
}
return
val
;
},
check
:
function
(
element
)
{
element
=
this
.
validationTargetFor
(
this
.
clean
(
element
)
);
var
rules
=
$
(
element
).
rules
();
var
dependencyMismatch
=
false
;
var
val
=
this
.
elementValue
(
element
);
var
result
;
for
(
var
method
in
rules
)
{
var
rule
=
{
method
:
method
,
parameters
:
rules
[
method
]
};
try
{
result
=
$
.
validator
.
methods
[
method
].
call
(
this
,
val
,
element
,
rule
.
parameters
);
// if a method indicates that the field is optional and therefore valid,
// don't mark it as valid when there are no other rules
if
(
result
===
"dependency-mismatch"
)
{
dependencyMismatch
=
true
;
continue
;
}
dependencyMismatch
=
false
;
if
(
result
===
"pending"
)
{
this
.
toHide
=
this
.
toHide
.
not
(
this
.
errorsFor
(
element
)
);
return
;
}
if
(
!
result
)
{
this
.
formatAndAdd
(
element
,
rule
);
return
false
;
}
}
catch
(
e
)
{
if
(
this
.
settings
.
debug
&&
window
.
console
)
{
console
.
log
(
"exception occured when checking element "
+
element
.
id
+
", check the '"
+
rule
.
method
+
"' method"
,
e
);
}
throw
e
;
}
}
if
(
dependencyMismatch
)
{
return
;
}
if
(
this
.
objectLength
(
rules
)
)
{
this
.
successList
.
push
(
element
);
}
return
true
;
},
// return the custom message for the given element and validation method
// specified in the element's "messages" metadata
customMetaMessage
:
function
(
element
,
method
)
{
if
(
!
$
.
metadata
)
{
return
;
}
var
meta
=
this
.
settings
.
meta
?
$
(
element
).
metadata
()[
this
.
settings
.
meta
]
:
$
(
element
).
metadata
();
return
meta
&&
meta
.
messages
&&
meta
.
messages
[
method
];
},
// return the custom message for the given element name and validation method
customMessage
:
function
(
name
,
method
)
{
var
m
=
this
.
settings
.
messages
[
name
];
return
m
&&
(
m
.
constructor
===
String
?
m
:
m
[
method
]);
},
// return the first defined argument, allowing empty strings
findDefined
:
function
()
{
for
(
var
i
=
0
;
i
<
arguments
.
length
;
i
++
)
{
if
(
arguments
[
i
]
!==
undefined
)
{
return
arguments
[
i
];
}
}
return
undefined
;
},
defaultMessage
:
function
(
element
,
method
)
{
return
this
.
findDefined
(
this
.
customMessage
(
element
.
name
,
method
),
this
.
customMetaMessage
(
element
,
method
),
// title is never undefined, so handle empty string as undefined
!
this
.
settings
.
ignoreTitle
&&
element
.
title
||
undefined
,
$
.
validator
.
messages
[
method
],
"<strong>Warning: No message defined for "
+
element
.
name
+
"</strong>"
);
},
formatAndAdd
:
function
(
element
,
rule
)
{
var
message
=
this
.
defaultMessage
(
element
,
rule
.
method
),
theregex
=
/
\$?\{(\d
+
)\}
/g
;
if
(
typeof
message
===
"function"
)
{
message
=
message
.
call
(
this
,
rule
.
parameters
,
element
);
}
else
if
(
theregex
.
test
(
message
))
{
message
=
$
.
validator
.
format
(
message
.
replace
(
theregex
,
'{$1}'
),
rule
.
parameters
);
}
this
.
errorList
.
push
({
message
:
message
,
element
:
element
});
this
.
errorMap
[
element
.
name
]
=
message
;
this
.
submitted
[
element
.
name
]
=
message
;
},
addWrapper
:
function
(
toToggle
)
{
if
(
this
.
settings
.
wrapper
)
{
toToggle
=
toToggle
.
add
(
toToggle
.
parent
(
this
.
settings
.
wrapper
)
);
}
return
toToggle
;
},
defaultShowErrors
:
function
()
{
var
i
,
elements
;
for
(
i
=
0
;
this
.
errorList
[
i
];
i
++
)
{
var
error
=
this
.
errorList
[
i
];
if
(
this
.
settings
.
highlight
)
{
this
.
settings
.
highlight
.
call
(
this
,
error
.
element
,
this
.
settings
.
errorClass
,
this
.
settings
.
validClass
);
}
this
.
showLabel
(
error
.
element
,
error
.
message
);
}
if
(
this
.
errorList
.
length
)
{
this
.
toShow
=
this
.
toShow
.
add
(
this
.
containers
);
}
if
(
this
.
settings
.
success
)
{
for
(
i
=
0
;
this
.
successList
[
i
];
i
++
)
{
this
.
showLabel
(
this
.
successList
[
i
]
);
}
}
if
(
this
.
settings
.
unhighlight
)
{
for
(
i
=
0
,
elements
=
this
.
validElements
();
elements
[
i
];
i
++
)
{
this
.
settings
.
unhighlight
.
call
(
this
,
elements
[
i
],
this
.
settings
.
errorClass
,
this
.
settings
.
validClass
);
}
}
this
.
toHide
=
this
.
toHide
.
not
(
this
.
toShow
);
this
.
hideErrors
();
this
.
addWrapper
(
this
.
toShow
).
show
();
},
validElements
:
function
()
{
return
this
.
currentElements
.
not
(
this
.
invalidElements
());
},
invalidElements
:
function
()
{
return
$
(
this
.
errorList
).
map
(
function
()
{
return
this
.
element
;
});
},
showLabel
:
function
(
element
,
message
)
{
var
label
=
this
.
errorsFor
(
element
);
if
(
label
.
length
)
{
// refresh error/success class
label
.
removeClass
(
this
.
settings
.
validClass
).
addClass
(
this
.
settings
.
errorClass
);
// check if we have a generated label, replace the message then
if
(
label
.
attr
(
"generated"
)
)
{
label
.
html
(
message
);
}
}
else
{
// create label
label
=
$
(
"<"
+
this
.
settings
.
errorElement
+
"/>"
)
.
attr
({
"for"
:
this
.
idOrName
(
element
),
generated
:
true
})
.
addClass
(
this
.
settings
.
errorClass
)
.
html
(
message
||
""
);
if
(
this
.
settings
.
wrapper
)
{
// make sure the element is visible, even in IE
// actually showing the wrapped element is handled elsewhere
label
=
label
.
hide
().
show
().
wrap
(
"<"
+
this
.
settings
.
wrapper
+
"/>"
).
parent
();
}
if
(
!
this
.
labelContainer
.
append
(
label
).
length
)
{
if
(
this
.
settings
.
errorPlacement
)
{
this
.
settings
.
errorPlacement
(
label
,
$
(
element
)
);
}
else
{
label
.
insertAfter
(
element
);
}
}
}
if
(
!
message
&&
this
.
settings
.
success
)
{
label
.
text
(
""
);
if
(
typeof
this
.
settings
.
success
===
"string"
)
{
label
.
addClass
(
this
.
settings
.
success
);
}
else
{
this
.
settings
.
success
(
label
);
}
}
this
.
toShow
=
this
.
toShow
.
add
(
label
);
},
errorsFor
:
function
(
element
)
{
var
name
=
this
.
idOrName
(
element
);
return
this
.
errors
().
filter
(
function
()
{
return
$
(
this
).
attr
(
'for'
)
===
name
;
});
},
idOrName
:
function
(
element
)
{
return
this
.
groups
[
element
.
name
]
||
(
this
.
checkable
(
element
)
?
element
.
name
:
element
.
id
||
element
.
name
);
},
validationTargetFor
:
function
(
element
)
{
// if radio/checkbox, validate first element in group instead
if
(
this
.
checkable
(
element
))
{
element
=
this
.
findByName
(
element
.
name
).
not
(
this
.
settings
.
ignore
)[
0
];
}
return
element
;
},
checkable
:
function
(
element
)
{
return
(
/radio|checkbox/i
).
test
(
element
.
type
);
},
findByName
:
function
(
name
)
{
// select by name and filter by form for performance over form.find("[name=...]")
var
form
=
this
.
currentForm
;
return
$
(
document
.
getElementsByName
(
name
)).
map
(
function
(
index
,
element
)
{
return
element
.
form
===
form
&&
element
.
name
===
name
&&
element
||
null
;
});
},
getLength
:
function
(
value
,
element
)
{
switch
(
element
.
nodeName
.
toLowerCase
()
)
{
case
'select'
:
return
$
(
"option:selected"
,
element
).
length
;
case
'input'
:
if
(
this
.
checkable
(
element
)
)
{
return
this
.
findByName
(
element
.
name
).
filter
(
':checked'
).
length
;
}
}
return
value
.
length
;
},
depend
:
function
(
param
,
element
)
{
return
this
.
dependTypes
[
typeof
param
]
?
this
.
dependTypes
[
typeof
param
](
param
,
element
)
:
true
;
},
dependTypes
:
{
"boolean"
:
function
(
param
,
element
)
{
return
param
;
},
"string"
:
function
(
param
,
element
)
{
return
!!
$
(
param
,
element
.
form
).
length
;
},
"function"
:
function
(
param
,
element
)
{
return
param
(
element
);
}
},
optional
:
function
(
element
)
{
var
val
=
this
.
elementValue
(
element
);
return
!
$
.
validator
.
methods
.
required
.
call
(
this
,
val
,
element
)
&&
"dependency-mismatch"
;
},
startRequest
:
function
(
element
)
{
if
(
!
this
.
pending
[
element
.
name
])
{
this
.
pendingRequest
++
;
this
.
pending
[
element
.
name
]
=
true
;
}
},
stopRequest
:
function
(
element
,
valid
)
{
this
.
pendingRequest
--
;
// sometimes synchronization fails, make sure pendingRequest is never < 0
if
(
this
.
pendingRequest
<
0
)
{
this
.
pendingRequest
=
0
;
}
delete
this
.
pending
[
element
.
name
];
if
(
valid
&&
this
.
pendingRequest
===
0
&&
this
.
formSubmitted
&&
this
.
form
()
)
{
$
(
this
.
currentForm
).
submit
();
this
.
formSubmitted
=
false
;
}
else
if
(
!
valid
&&
this
.
pendingRequest
===
0
&&
this
.
formSubmitted
)
{
$
(
this
.
currentForm
).
triggerHandler
(
"invalid-form"
,
[
this
]);
this
.
formSubmitted
=
false
;
}
},
previousValue
:
function
(
element
)
{
return
$
.
data
(
element
,
"previousValue"
)
||
$
.
data
(
element
,
"previousValue"
,
{
old
:
null
,
valid
:
true
,
message
:
this
.
defaultMessage
(
element
,
"remote"
)
});
}
},
classRuleSettings
:
{
required
:
{
required
:
true
},
email
:
{
email
:
true
},
url
:
{
url
:
true
},
date
:
{
date
:
true
},
dateISO
:
{
dateISO
:
true
},
number
:
{
number
:
true
},
digits
:
{
digits
:
true
},
creditcard
:
{
creditcard
:
true
}
},
addClassRules
:
function
(
className
,
rules
)
{
if
(
className
.
constructor
===
String
)
{
this
.
classRuleSettings
[
className
]
=
rules
;
}
else
{
$
.
extend
(
this
.
classRuleSettings
,
className
);
}
},
classRules
:
function
(
element
)
{
var
rules
=
{};
var
classes
=
$
(
element
).
attr
(
'class'
);
if
(
classes
)
{
$
.
each
(
classes
.
split
(
' '
),
function
()
{
if
(
this
in
$
.
validator
.
classRuleSettings
)
{
$
.
extend
(
rules
,
$
.
validator
.
classRuleSettings
[
this
]);
}
});
}
return
rules
;
},
attributeRules
:
function
(
element
)
{
var
rules
=
{};
var
$element
=
$
(
element
);
for
(
var
method
in
$
.
validator
.
methods
)
{
var
value
;
// support for <input required> in both html5 and older browsers
if
(
method
===
'required'
)
{
value
=
$element
.
get
(
0
).
getAttribute
(
method
);
// Some browsers return an empty string for the required attribute
// and non-HTML5 browsers might have required="" markup
if
(
value
===
""
)
{
value
=
true
;
}
else
if
(
value
===
"false"
)
{
value
=
false
;
}
// force non-HTML5 browsers to return bool
value
=
!!
value
;
}
else
{
value
=
$element
.
attr
(
method
);
}
if
(
value
)
{
rules
[
method
]
=
value
;
}
else
if
(
$element
[
0
].
getAttribute
(
"type"
)
===
method
)
{
rules
[
method
]
=
true
;
}
}
// maxlength may be returned as -1, 2147483647 (IE) and 524288 (safari) for text inputs
if
(
rules
.
maxlength
&&
/-1|2147483647|524288/
.
test
(
rules
.
maxlength
))
{
delete
rules
.
maxlength
;
}
return
rules
;
},
metadataRules
:
function
(
element
)
{
if
(
!
$
.
metadata
)
{
return
{};
}
var
meta
=
$
.
data
(
element
.
form
,
'validator'
).
settings
.
meta
;
return
meta
?
$
(
element
).
metadata
()[
meta
]
:
$
(
element
).
metadata
();
},
staticRules
:
function
(
element
)
{
var
rules
=
{};
var
validator
=
$
.
data
(
element
.
form
,
'validator'
);
if
(
validator
.
settings
.
rules
)
{
rules
=
$
.
validator
.
normalizeRule
(
validator
.
settings
.
rules
[
element
.
name
])
||
{};
}
return
rules
;
},
normalizeRules
:
function
(
rules
,
element
)
{
// handle dependency check
$
.
each
(
rules
,
function
(
prop
,
val
)
{
// ignore rule when param is explicitly false, eg. required:false
if
(
val
===
false
)
{
delete
rules
[
prop
];
return
;
}
if
(
val
.
param
||
val
.
depends
)
{
var
keepRule
=
true
;
switch
(
typeof
val
.
depends
)
{
case
"string"
:
keepRule
=
!!
$
(
val
.
depends
,
element
.
form
).
length
;
break
;
case
"function"
:
keepRule
=
val
.
depends
.
call
(
element
,
element
);
break
;
}
if
(
keepRule
)
{
rules
[
prop
]
=
val
.
param
!==
undefined
?
val
.
param
:
true
;
}
else
{
delete
rules
[
prop
];
}
}
});
// evaluate parameters
$
.
each
(
rules
,
function
(
rule
,
parameter
)
{
rules
[
rule
]
=
$
.
isFunction
(
parameter
)
?
parameter
(
element
)
:
parameter
;
});
// clean number parameters
$
.
each
([
'minlength'
,
'maxlength'
,
'min'
,
'max'
],
function
()
{
if
(
rules
[
this
])
{
rules
[
this
]
=
Number
(
rules
[
this
]);
}
});
$
.
each
([
'rangelength'
,
'range'
],
function
()
{
if
(
rules
[
this
])
{
rules
[
this
]
=
[
Number
(
rules
[
this
][
0
]),
Number
(
rules
[
this
][
1
])];
}
});
if
(
$
.
validator
.
autoCreateRanges
)
{
// auto-create ranges
if
(
rules
.
min
&&
rules
.
max
)
{
rules
.
range
=
[
rules
.
min
,
rules
.
max
];
delete
rules
.
min
;
delete
rules
.
max
;
}
if
(
rules
.
minlength
&&
rules
.
maxlength
)
{
rules
.
rangelength
=
[
rules
.
minlength
,
rules
.
maxlength
];
delete
rules
.
minlength
;
delete
rules
.
maxlength
;
}
}
// To support custom messages in metadata ignore rule methods titled "messages"
if
(
rules
.
messages
)
{
delete
rules
.
messages
;
}
return
rules
;
},
// Converts a simple string to a {string: true} rule, e.g., "required" to {required:true}
normalizeRule
:
function
(
data
)
{
if
(
typeof
data
===
"string"
)
{
var
transformed
=
{};
$
.
each
(
data
.
split
(
/
\s
/
),
function
()
{
transformed
[
this
]
=
true
;
});
data
=
transformed
;
}
return
data
;
},
// http://docs.jquery.com/Plugins/Validation/Validator/addMethod
addMethod
:
function
(
name
,
method
,
message
)
{
$
.
validator
.
methods
[
name
]
=
method
;
$
.
validator
.
messages
[
name
]
=
message
!==
undefined
?
message
:
$
.
validator
.
messages
[
name
];
if
(
method
.
length
<
3
)
{
$
.
validator
.
addClassRules
(
name
,
$
.
validator
.
normalizeRule
(
name
));
}
},
methods
:
{
// http://docs.jquery.com/Plugins/Validation/Methods/required
required
:
function
(
value
,
element
,
param
)
{
// check if dependency is met
if
(
!
this
.
depend
(
param
,
element
)
)
{
return
"dependency-mismatch"
;
}
if
(
element
.
nodeName
.
toLowerCase
()
===
"select"
)
{
// could be an array for select-multiple or a string, both are fine this way
var
val
=
$
(
element
).
val
();
return
val
&&
val
.
length
>
0
;
}
if
(
this
.
checkable
(
element
)
)
{
return
this
.
getLength
(
value
,
element
)
>
0
;
}
return
$
.
trim
(
value
).
length
>
0
;
},
// http://docs.jquery.com/Plugins/Validation/Methods/remote
remote
:
function
(
value
,
element
,
param
)
{
if
(
this
.
optional
(
element
)
)
{
return
"dependency-mismatch"
;
}
var
previous
=
this
.
previousValue
(
element
);
if
(
!
this
.
settings
.
messages
[
element
.
name
]
)
{
this
.
settings
.
messages
[
element
.
name
]
=
{};
}
previous
.
originalMessage
=
this
.
settings
.
messages
[
element
.
name
].
remote
;
this
.
settings
.
messages
[
element
.
name
].
remote
=
previous
.
message
;
param
=
typeof
param
===
"string"
&&
{
url
:
param
}
||
param
;
if
(
this
.
pending
[
element
.
name
]
)
{
return
"pending"
;
}
if
(
previous
.
old
===
value
)
{
return
previous
.
valid
;
}
previous
.
old
=
value
;
var
validator
=
this
;
this
.
startRequest
(
element
);
var
data
=
{};
data
[
element
.
name
]
=
value
;
$
.
ajax
(
$
.
extend
(
true
,
{
url
:
param
,
mode
:
"abort"
,
port
:
"validate"
+
element
.
name
,
dataType
:
"json"
,
data
:
data
,
success
:
function
(
response
)
{
validator
.
settings
.
messages
[
element
.
name
].
remote
=
previous
.
originalMessage
;
var
valid
=
response
===
true
;
if
(
valid
)
{
var
submitted
=
validator
.
formSubmitted
;
validator
.
prepareElement
(
element
);
validator
.
formSubmitted
=
submitted
;
validator
.
successList
.
push
(
element
);
validator
.
showErrors
();
}
else
{
var
errors
=
{};
var
message
=
response
||
validator
.
defaultMessage
(
element
,
"remote"
);
errors
[
element
.
name
]
=
previous
.
message
=
$
.
isFunction
(
message
)
?
message
(
value
)
:
message
;
validator
.
showErrors
(
errors
);
}
previous
.
valid
=
valid
;
validator
.
stopRequest
(
element
,
valid
);
}
},
param
));
return
"pending"
;
},
// http://docs.jquery.com/Plugins/Validation/Methods/minlength
minlength
:
function
(
value
,
element
,
param
)
{
var
length
=
$
.
isArray
(
value
)
?
value
.
length
:
this
.
getLength
(
$
.
trim
(
value
),
element
);
return
this
.
optional
(
element
)
||
length
>=
param
;
},
// http://docs.jquery.com/Plugins/Validation/Methods/maxlength
maxlength
:
function
(
value
,
element
,
param
)
{
var
length
=
$
.
isArray
(
value
)
?
value
.
length
:
this
.
getLength
(
$
.
trim
(
value
),
element
);
return
this
.
optional
(
element
)
||
length
<=
param
;
},
// http://docs.jquery.com/Plugins/Validation/Methods/rangelength
rangelength
:
function
(
value
,
element
,
param
)
{
var
length
=
$
.
isArray
(
value
)
?
value
.
length
:
this
.
getLength
(
$
.
trim
(
value
),
element
);
return
this
.
optional
(
element
)
||
(
length
>=
param
[
0
]
&&
length
<=
param
[
1
]
);
},
// http://docs.jquery.com/Plugins/Validation/Methods/min
min
:
function
(
value
,
element
,
param
)
{
return
this
.
optional
(
element
)
||
value
>=
param
;
},
// http://docs.jquery.com/Plugins/Validation/Methods/max
max
:
function
(
value
,
element
,
param
)
{
return
this
.
optional
(
element
)
||
value
<=
param
;
},
// http://docs.jquery.com/Plugins/Validation/Methods/range
range
:
function
(
value
,
element
,
param
)
{
return
this
.
optional
(
element
)
||
(
value
>=
param
[
0
]
&&
value
<=
param
[
1
]
);
},
// http://docs.jquery.com/Plugins/Validation/Methods/email
email
:
function
(
value
,
element
)
{
// contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
return
this
.
optional
(
element
)
||
/^
((([
a-z
]
|
\d
|
[
!#
\$
%&'
\*\+\-\/
=
\?\^
_`{
\|
}~
]
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])
+
(\.([
a-z
]
|
\d
|
[
!#
\$
%&'
\*\+\-\/
=
\?\^
_`{
\|
}~
]
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])
+
)
*
)
|
((\x
22
)((((\x
20|
\x
09
)
*
(\x
0d
\x
0a
))?(\x
20|
\x
09
)
+
)?(([\x
01-
\x
08
\x
0b
\x
0c
\x
0e-
\x
1f
\x
7f
]
|
\x
21|
[\x
23-
\x
5b
]
|
[\x
5d-
\x
7e
]
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])
|
(\\([\x
01-
\x
09
\x
0b
\x
0c
\x
0d-
\x
7f
]
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
]))))
*
(((\x
20|
\x
09
)
*
(\x
0d
\x
0a
))?(\x
20|
\x
09
)
+
)?(\x
22
)))
@
((([
a-z
]
|
\d
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])
|
(([
a-z
]
|
\d
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])([
a-z
]
|
\d
|-|
\.
|_|~|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])
*
([
a-z
]
|
\d
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])))\.)
+
(([
a-z
]
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])
|
(([
a-z
]
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])([
a-z
]
|
\d
|-|
\.
|_|~|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])
*
([
a-z
]
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])))
$/i
.
test
(
value
);
},
// http://docs.jquery.com/Plugins/Validation/Methods/url
url
:
function
(
value
,
element
)
{
// contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/
return
this
.
optional
(
element
)
||
/^
(
https
?
|ftp
)
:
\/\/(((([
a-z
]
|
\d
|-|
\.
|_|~|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])
|
(
%
[\d
a-f
]{2})
|
[
!
\$
&'
\(\)\*\+
,;=
]
|:
)
*@
)?(((\d
|
[
1-9
]\d
|1
\d\d
|2
[
0-4
]\d
|25
[
0-5
])\.(\d
|
[
1-9
]\d
|1
\d\d
|2
[
0-4
]\d
|25
[
0-5
])\.(\d
|
[
1-9
]\d
|1
\d\d
|2
[
0-4
]\d
|25
[
0-5
])\.(\d
|
[
1-9
]\d
|1
\d\d
|2
[
0-4
]\d
|25
[
0-5
]))
|
((([
a-z
]
|
\d
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])
|
(([
a-z
]
|
\d
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])([
a-z
]
|
\d
|-|
\.
|_|~|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])
*
([
a-z
]
|
\d
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])))\.)
+
(([
a-z
]
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])
|
(([
a-z
]
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])([
a-z
]
|
\d
|-|
\.
|_|~|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])
*
([
a-z
]
|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])))\.?)(
:
\d
*
)?)(\/((([
a-z
]
|
\d
|-|
\.
|_|~|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])
|
(
%
[\d
a-f
]{2})
|
[
!
\$
&'
\(\)\*\+
,;=
]
|:|@
)
+
(\/(([
a-z
]
|
\d
|-|
\.
|_|~|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])
|
(
%
[\d
a-f
]{2})
|
[
!
\$
&'
\(\)\*\+
,;=
]
|:|@
)
*
)
*
)?)?(\?((([
a-z
]
|
\d
|-|
\.
|_|~|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])
|
(
%
[\d
a-f
]{2})
|
[
!
\$
&'
\(\)\*\+
,;=
]
|:|@
)
|
[\u
E000-
\u
F8FF
]
|
\/
|
\?)
*
)?(\#((([
a-z
]
|
\d
|-|
\.
|_|~|
[\u
00A0-
\u
D7FF
\u
F900-
\u
FDCF
\u
FDF0-
\u
FFEF
])
|
(
%
[\d
a-f
]{2})
|
[
!
\$
&'
\(\)\*\+
,;=
]
|:|@
)
|
\/
|
\?)
*
)?
$/i
.
test
(
value
);
},
// http://docs.jquery.com/Plugins/Validation/Methods/date
date
:
function
(
value
,
element
)
{
return
this
.
optional
(
element
)
||
!
/Invalid|NaN/
.
test
(
new
Date
(
value
));
},
// http://docs.jquery.com/Plugins/Validation/Methods/dateISO
dateISO
:
function
(
value
,
element
)
{
return
this
.
optional
(
element
)
||
/^
\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}
$/
.
test
(
value
);
},
// http://docs.jquery.com/Plugins/Validation/Methods/number
number
:
function
(
value
,
element
)
{
return
this
.
optional
(
element
)
||
/^-
?(?:\d
+|
\d{1,3}(?:
,
\d{3})
+
)?(?:\.\d
+
)?
$/
.
test
(
value
);
},
// http://docs.jquery.com/Plugins/Validation/Methods/digits
digits
:
function
(
value
,
element
)
{
return
this
.
optional
(
element
)
||
/^
\d
+$/
.
test
(
value
);
},
// http://docs.jquery.com/Plugins/Validation/Methods/creditcard
// based on http://en.wikipedia.org/wiki/Luhn
creditcard
:
function
(
value
,
element
)
{
if
(
this
.
optional
(
element
)
)
{
return
"dependency-mismatch"
;
}
// accept only spaces, digits and dashes
if
(
/
[^
0-9
\-]
+/
.
test
(
value
))
{
return
false
;
}
var
nCheck
=
0
,
nDigit
=
0
,
bEven
=
false
;
value
=
value
.
replace
(
/
\D
/g
,
""
);
for
(
var
n
=
value
.
length
-
1
;
n
>=
0
;
n
--
)
{
var
cDigit
=
value
.
charAt
(
n
);
nDigit
=
parseInt
(
cDigit
,
10
);
if
(
bEven
)
{
if
((
nDigit
*=
2
)
>
9
)
{
nDigit
-=
9
;
}
}
nCheck
+=
nDigit
;
bEven
=
!
bEven
;
}
return
(
nCheck
%
10
)
===
0
;
},
// http://docs.jquery.com/Plugins/Validation/Methods/accept
accept
:
function
(
value
,
element
,
param
)
{
param
=
typeof
param
===
"string"
?
param
.
replace
(
/,/g
,
'|'
)
:
"png|jpe?g|gif"
;
return
this
.
optional
(
element
)
||
value
.
match
(
new
RegExp
(
".("
+
param
+
")$"
,
"i"
));
},
// http://docs.jquery.com/Plugins/Validation/Methods/equalTo
equalTo
:
function
(
value
,
element
,
param
)
{
// bind to the blur event of the target in order to revalidate whenever the target field is updated
// TODO find a way to bind the event just once, avoiding the unbind-rebind overhead
var
target
=
$
(
param
).
unbind
(
".validate-equalTo"
).
bind
(
"blur.validate-equalTo"
,
function
()
{
$
(
element
).
valid
();
});
return
value
===
target
.
val
();
}
}
});
// deprecated, use $.validator.format instead
$
.
format
=
$
.
validator
.
format
;
}(
jQuery
));
// ajax mode: abort
// usage: $.ajax({ mode: "abort"[, port: "uniqueport"]});
// if mode:"abort" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()
(
function
(
$
)
{
var
pendingRequests
=
{};
// Use a prefilter if available (1.5+)
if
(
$
.
ajaxPrefilter
)
{
$
.
ajaxPrefilter
(
function
(
settings
,
_
,
xhr
)
{
var
port
=
settings
.
port
;
if
(
settings
.
mode
===
"abort"
)
{
if
(
pendingRequests
[
port
]
)
{
pendingRequests
[
port
].
abort
();
}
pendingRequests
[
port
]
=
xhr
;
}
});
}
else
{
// Proxy ajax
var
ajax
=
$
.
ajax
;
$
.
ajax
=
function
(
settings
)
{
var
mode
=
(
"mode"
in
settings
?
settings
:
$
.
ajaxSettings
).
mode
,
port
=
(
"port"
in
settings
?
settings
:
$
.
ajaxSettings
).
port
;
if
(
mode
===
"abort"
)
{
if
(
pendingRequests
[
port
]
)
{
pendingRequests
[
port
].
abort
();
}
return
(
pendingRequests
[
port
]
=
ajax
.
apply
(
this
,
arguments
));
}
return
ajax
.
apply
(
this
,
arguments
);
};
}
}(
jQuery
));
// provides cross-browser focusin and focusout events
// IE has native support, in other browsers, use event caputuring (neither bubbles)
// provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation
// handler is only called when $(event.target).is(delegate), in the scope of the jquery-object for event.target
(
function
(
$
)
{
// only implement if not provided by jQuery core (since 1.4)
// TODO verify if jQuery 1.4's implementation is compatible with older jQuery special-event APIs
if
(
!
jQuery
.
event
.
special
.
focusin
&&
!
jQuery
.
event
.
special
.
focusout
&&
document
.
addEventListener
)
{
$
.
each
({
focus
:
'focusin'
,
blur
:
'focusout'
},
function
(
original
,
fix
){
$
.
event
.
special
[
fix
]
=
{
setup
:
function
()
{
this
.
addEventListener
(
original
,
handler
,
true
);
},
teardown
:
function
()
{
this
.
removeEventListener
(
original
,
handler
,
true
);
},
handler
:
function
(
e
)
{
var
args
=
arguments
;
args
[
0
]
=
$
.
event
.
fix
(
e
);
args
[
0
].
type
=
fix
;
return
$
.
event
.
handle
.
apply
(
this
,
args
);
}
};
function
handler
(
e
)
{
e
=
$
.
event
.
fix
(
e
);
e
.
type
=
fix
;
return
$
.
event
.
handle
.
call
(
this
,
e
);
}
});
}
$
.
extend
(
$
.
fn
,
{
validateDelegate
:
function
(
delegate
,
type
,
handler
)
{
return
this
.
bind
(
type
,
function
(
event
)
{
var
target
=
$
(
event
.
target
);
if
(
target
.
is
(
delegate
))
{
return
handler
.
apply
(
target
,
arguments
);
}
});
}
});
}(
jQuery
));
\ No newline at end of file
spring-boot-samples/spring-boot-sample-web-groovy-templates/src/main/resources/templates/layout.tpl
0 → 100644
View file @
523956e2
html {
head {
title(title)
link(rel:'stylesheet', href:'/css/bootstrap.min.css')
}
body {
div(class:'container') {
div(class:'navbar') {
div(class:'navbar-inner') {
a(class:'brand',
href:'http://beta.groovy-lang.org/docs/groovy-2.3.0/html/documentation/markup-template-engine.html') {
yield 'Groovy - Layout'
}
ul(class:'nav') {
li {
a(href:'/') {
yield 'Messages'
}
}
}
}
}
h1(title)
div { content() }
}
}
}
spring-boot-samples/spring-boot-sample-web-groovy-templates/src/main/resources/templates/messages/form.tpl
0 → 100644
View file @
523956e2
layout 'layout.tpl', title: 'Messages : Create',
content: contents {
div (class:'container') {
form (id:'messageForm', action:'/', method:'post') {
if (formErrors) {
div(class:'alert alert-error') {
formErrors.each { error ->
p error.defaultMessage
}
}
}
div (class:'pull-right') {
a (href:'/', 'Messages')
}
label (for:'summary', 'Summary')
input (name:'summary', type:'text', value:message.summary?:'',
class:fieldErrors?.summary ? 'field-error' : 'none')
label (for:'text', 'Message')
textarea (name:'text', class:fieldErrors?.text ? 'field-error' : 'none', message.text?:'')
div (class:'form-actions') {
input (type:'submit', value:'Create')
}
}
}
}
\ No newline at end of file
spring-boot-samples/spring-boot-sample-web-groovy-templates/src/main/resources/templates/messages/list.tpl
0 → 100644
View file @
523956e2
layout 'layout.tpl', title: 'Messages : View all',
content: contents {
div(class:'container') {
div(class:'pull-right') {
a(href:'/?form', 'Create Message')
}
table(class:'table table-bordered table-striped') {
thead {
tr {
td 'ID'
td 'Created'
td 'Summary'
}
}
tbody {
if (messages.empty) { tr { td(colspan:'3', 'No Messages' ) } }
messages.each { message ->
tr {
td message.id
td "$
{
message
.
created
}
"
td {
a(href:"/$
{
message
.
id
}
") {
yield message.getSummary()
}
}
}
}
}
}
}
}
\ No newline at end of file
spring-boot-samples/spring-boot-sample-web-groovy-templates/src/main/resources/templates/messages/view.tpl
0 → 100644
View file @
523956e2
layout 'layout.tpl', title:'Messages : View',
content: contents {
div(class:'container') {
if (globalMessage) {
div (class:'alert alert-success', globalMessage)
}
div(class:'pull-right') {
a(href:'/', 'Messages')
}
dl {
dt 'ID'
dd(id:'id', message.id)
dt 'Date'
dd(id:'created', "$
{
message
.
created
}
")
dt 'Summary'
dd(id:'summary', message.summary)
dt 'Message'
dd(id:'text', message.text)
}
}
}
\ No newline at end of file
spring-boot-samples/spring-boot-sample-web-groovy-templates/src/test/java/sample/ui/MessageControllerWebTests.java
0 → 100755
View file @
523956e2
/*
* Copyright 2012-2014 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
sample
.
ui
;
import
static
org
.
hamcrest
.
Matchers
.
containsString
;
import
static
org
.
springframework
.
test
.
web
.
servlet
.
request
.
MockMvcRequestBuilders
.
get
;
import
static
org
.
springframework
.
test
.
web
.
servlet
.
request
.
MockMvcRequestBuilders
.
post
;
import
static
org
.
springframework
.
test
.
web
.
servlet
.
result
.
MockMvcResultMatchers
.
content
;
import
static
org
.
springframework
.
test
.
web
.
servlet
.
result
.
MockMvcResultMatchers
.
header
;
import
static
org
.
springframework
.
test
.
web
.
servlet
.
result
.
MockMvcResultMatchers
.
status
;
import
java.util.regex.Pattern
;
import
org.hamcrest.Description
;
import
org.hamcrest.TypeSafeMatcher
;
import
org.junit.Before
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.test.SpringApplicationConfiguration
;
import
org.springframework.test.annotation.DirtiesContext
;
import
org.springframework.test.context.junit4.SpringJUnit4ClassRunner
;
import
org.springframework.test.context.web.WebAppConfiguration
;
import
org.springframework.test.web.servlet.MockMvc
;
import
org.springframework.test.web.servlet.setup.MockMvcBuilders
;
import
org.springframework.web.context.WebApplicationContext
;
/**
* A Basic Spring MVC Test for the Sample Controller"
*
* @author Biju Kunjummen
* @author Doo-Hwan, Kwak
*/
@RunWith
(
SpringJUnit4ClassRunner
.
class
)
@WebAppConfiguration
@SpringApplicationConfiguration
(
classes
=
SampleGroovyTemplateApplication
.
class
)
@DirtiesContext
public
class
MessageControllerWebTests
{
@Autowired
private
WebApplicationContext
wac
;
private
MockMvc
mockMvc
;
@Before
public
void
setup
()
{
this
.
mockMvc
=
MockMvcBuilders
.
webAppContextSetup
(
this
.
wac
).
build
();
}
@Test
public
void
testHome
()
throws
Exception
{
this
.
mockMvc
.
perform
(
get
(
"/"
)).
andExpect
(
status
().
isOk
())
.
andExpect
(
content
().
string
(
containsString
(
"<title>Messages"
)));
}
@Test
public
void
testCreate
()
throws
Exception
{
this
.
mockMvc
.
perform
(
post
(
"/"
).
param
(
"text"
,
"FOO text"
).
param
(
"summary"
,
"FOO"
))
.
andExpect
(
status
().
isMovedTemporarily
())
.
andExpect
(
header
().
string
(
"location"
,
RegexMatcher
.
matches
(
"/[0-9]+"
)));
}
@Test
public
void
testCreateValidation
()
throws
Exception
{
this
.
mockMvc
.
perform
(
post
(
"/"
).
param
(
"text"
,
""
).
param
(
"summary"
,
""
))
.
andExpect
(
status
().
isOk
())
.
andExpect
(
content
().
string
(
containsString
(
"is required"
)));
}
private
static
class
RegexMatcher
extends
TypeSafeMatcher
<
String
>
{
private
final
String
regex
;
public
RegexMatcher
(
String
regex
)
{
this
.
regex
=
regex
;
}
public
static
org
.
hamcrest
.
Matcher
<
java
.
lang
.
String
>
matches
(
String
regex
)
{
return
new
RegexMatcher
(
regex
);
}
@Override
public
boolean
matchesSafely
(
String
item
)
{
return
Pattern
.
compile
(
this
.
regex
).
matcher
(
item
).
find
();
}
@Override
public
void
describeMismatchSafely
(
String
item
,
Description
mismatchDescription
)
{
mismatchDescription
.
appendText
(
"was \""
).
appendText
(
item
).
appendText
(
"\""
);
}
@Override
public
void
describeTo
(
Description
description
)
{
description
.
appendText
(
"a string that matches regex: "
)
.
appendText
(
this
.
regex
);
}
}
}
spring-boot-samples/spring-boot-sample-web-groovy-templates/src/test/java/sample/ui/SampleGroovyTemplateApplicationTests.java
0 → 100644
View file @
523956e2
/*
* Copyright 2012-2014 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
sample
.
ui
;
import
static
org
.
junit
.
Assert
.
assertEquals
;
import
static
org
.
junit
.
Assert
.
assertFalse
;
import
static
org
.
junit
.
Assert
.
assertTrue
;
import
java.net.URI
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.boot.test.IntegrationTest
;
import
org.springframework.boot.test.SpringApplicationConfiguration
;
import
org.springframework.boot.test.TestRestTemplate
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.test.annotation.DirtiesContext
;
import
org.springframework.test.context.junit4.SpringJUnit4ClassRunner
;
import
org.springframework.test.context.web.WebAppConfiguration
;
import
org.springframework.util.LinkedMultiValueMap
;
import
org.springframework.util.MultiValueMap
;
/**
* Basic integration tests for demo application.
*
* @author Dave Syer
*/
@RunWith
(
SpringJUnit4ClassRunner
.
class
)
@SpringApplicationConfiguration
(
classes
=
SampleGroovyTemplateApplication
.
class
)
@WebAppConfiguration
@IntegrationTest
(
"server.port:0"
)
@DirtiesContext
public
class
SampleGroovyTemplateApplicationTests
{
@Value
(
"${local.server.port}"
)
private
int
port
;
@Test
public
void
testHome
()
throws
Exception
{
ResponseEntity
<
String
>
entity
=
new
TestRestTemplate
().
getForEntity
(
"http://localhost:"
+
this
.
port
,
String
.
class
);
assertEquals
(
HttpStatus
.
OK
,
entity
.
getStatusCode
());
assertTrue
(
"Wrong body (title doesn't match):\n"
+
entity
.
getBody
(),
entity
.
getBody
().
contains
(
"<title>Messages"
));
assertFalse
(
"Wrong body (found layout:fragment):\n"
+
entity
.
getBody
(),
entity
.
getBody
().
contains
(
"layout:fragment"
));
}
@Test
public
void
testCreate
()
throws
Exception
{
MultiValueMap
<
String
,
String
>
map
=
new
LinkedMultiValueMap
<
String
,
String
>();
map
.
set
(
"text"
,
"FOO text"
);
map
.
set
(
"summary"
,
"FOO"
);
URI
location
=
new
TestRestTemplate
().
postForLocation
(
"http://localhost:"
+
this
.
port
,
map
);
assertTrue
(
"Wrong location:\n"
+
location
,
location
.
toString
().
contains
(
"localhost:"
+
this
.
port
));
}
@Test
public
void
testCss
()
throws
Exception
{
ResponseEntity
<
String
>
entity
=
new
TestRestTemplate
().
getForEntity
(
"http://localhost:"
+
this
.
port
+
"/css/bootstrap.min.css"
,
String
.
class
);
assertEquals
(
HttpStatus
.
OK
,
entity
.
getStatusCode
());
assertTrue
(
"Wrong body:\n"
+
entity
.
getBody
(),
entity
.
getBody
().
contains
(
"body"
));
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment