Commit 6d17d5aa authored by Tom Evans's avatar Tom Evans Committed by tevans

update/sync with trunk (13275)

git-svn-id: http://svn.igniterealtime.org/svn/repos/openfire/branches/pubsub_clustering@13276 b35dd754-fafc-0310-a699-88a17e54d16e
parent 4c4cb9b8
......@@ -32,11 +32,6 @@
<pathelement location="${basedir}/build/lib/ant-contrib.jar"/>
</classpath>
</taskdef>
<taskdef name="subdirinfo" classname="org.jivesoftware.ant.SubDirInfoTask">
<classpath>
<pathelement location="${basedir}/build/lib/ant-subdirtask.jar"/>
</classpath>
</taskdef>
<taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask">
<classpath>
<pathelement location="${basedir}/build/lib/xmltask.jar"/>
......@@ -338,7 +333,7 @@
</if>
</target>
<target name="plugins-dev">
<target name="plugins-dev" depends="anttasks">
<!-- Setup Openfire -->
<ant antfile="${basedir}/build/build.xml" dir="${basedir}" target="openfire"
inheritAll="false" inheritRefs="false"/>
......@@ -1206,7 +1201,7 @@
</target>
<!-- plugins =============================================================================== -->
<target name="plugins" description="Builds all plugins">
<target name="plugins" description="Builds all plugins" depends="anttasks">
<tstamp>
<format property="buildJavaDate" pattern="MMM dd, yyyy"/>
</tstamp>
......@@ -1248,7 +1243,7 @@
</for>
</target>
<target name="-plugins-impl-dev" if="plugin.dev.dir">
<target name="-plugins-impl-dev" if="plugin.dev.dir" depends="anttasks">
<!-- Get a list of plugins in the optional dev dir -->
<subdirinfo dir="${plugin.dev.dir}" property="dirlist2" ifexists="plugin.xml"/>
......@@ -1638,6 +1633,12 @@
<jar jarfile="${anttools.target.dir}/ant-subdirtask.jar">
<fileset dir="${anttools.target.dir}/classes" includes="**/*.class"/>
</jar>
<taskdef name="subdirinfo" classname="org.jivesoftware.ant.SubDirInfoTask">
<classpath>
<pathelement location="${basedir}/build/lib/ant-subdirtask.jar"/>
</classpath>
</taskdef>
</target>
<!-- clean ================================================================================= -->
......
......@@ -2,14 +2,14 @@ Source: openfire
Section: net
Priority: optional
Maintainer: Ignite Realtime Community <admin@igniterealtime.org>
Build-Depends: debhelper (>= 5), cdbs, patchutils, sun-java5-jdk, ant
Build-Depends: debhelper (>= 5), cdbs, patchutils, sun-java6-jdk | openjdk-6-jdk, ant
Standards-Version: 3.7.2
Homepage: http://www.igniterealtime.org
Package: openfire
Section: net
Priority: optional
Pre-Depends: sun-java5-jre | sun-java6-jre | default-jre-headless
Pre-Depends: sun-java5-jre | sun-java6-jre | default-jre-headless | openjdk-6-jre
Architecture: all
Description: A high performance XMPP (Jabber) server.
Openfire is an instant messaging server that implements the XMPP
......
......@@ -13,10 +13,10 @@ ETCDIR := $(DEST)/etc/openfire
LOGDIR := $(DEST)/var/log/openfire
VARDIR := $(DEST)/var/lib/openfire
JAVA_HOME := /usr/lib/jvm/java-1.5.0-sun
JAVA_HOME ?= /usr/lib/jvm/java-6-sun
DEB_ANT_BUILDFILE := build/build.xml
DEB_ANT_CLEAN_TARGET := clean
install/openfire::
cp $(TARGET)/lib/*.jar $(OPENFIRE)/lib/
cp $(TARGET)/lib/log4j.xml $(ETCDIR)
......
......@@ -143,6 +143,10 @@ public class IQvCardHandler extends IQHandler {
result.setChildElement(packet.getChildElement().createCopy());
result.setError(PacketError.Condition.item_not_found);
}
} else {
result = IQ.createResultIQ(packet);
result.setChildElement(packet.getChildElement().createCopy());
result.setError(PacketError.Condition.item_not_found);
}
}
else {
......
......@@ -23,6 +23,7 @@ package org.jivesoftware.openfire.http;
import java.io.File;
import java.security.KeyStore;
import java.security.cert.X509Certificate;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
......@@ -67,6 +68,24 @@ public final class HttpBindManager {
public static final String HTTP_BIND_SECURE_PORT = "httpbind.port.secure";
public static final int HTTP_BIND_SECURE_PORT_DEFAULT = 7443;
// http binding CORS default properties
public static final String HTTP_BIND_CORS_ENABLED = "httpbind.CORS.enabled";
public static final boolean HTTP_BIND_CORS_ENABLED_DEFAULT = true;
public static final String HTTP_BIND_CORS_ALLOW_ORIGIN = "httpbind.CORS.domains";
public static final String HTTP_BIND_CORS_ALLOW_ORIGIN_DEFAULT = "*";
public static final String HTTP_BIND_CORS_ALLOW_METHODS_DEFAULT = "GET, POST, OPTIONS";
public static final String HTTP_BIND_CORS_ALLOW_HEADERS_DEFAULT = "Content-Type";
public static final String HTTP_BIND_CORS_MAX_AGE_DEFAULT = "86400";
public static Map<String, Boolean> HTTP_BIND_ALLOWED_ORIGINS = new HashMap<String, Boolean>();
private static HttpBindManager instance = new HttpBindManager();
......@@ -85,6 +104,9 @@ public final class HttpBindManager {
private ContextHandlerCollection contexts;
// is all orgin allowed flag
private boolean allowAllOrigins;
public static HttpBindManager getInstance() {
return instance;
}
......@@ -96,6 +118,9 @@ public final class HttpBindManager {
PropertyEventDispatcher.addListener(new HttpServerPropertyListener());
this.httpSessionManager = new HttpSessionManager();
contexts = new ContextHandlerCollection();
// setup the cache for the allowed origins
this.setupAllowedOriginsMap();
}
public void start() {
......@@ -242,7 +267,57 @@ public final class HttpBindManager {
public String getJavaScriptUrl() {
return "http://" + XMPPServer.getInstance().getServerInfo().getXMPPDomain() + ":" +
bindPort + "/scripts/";
}
// http binding CORS support start
private void setupAllowedOriginsMap() {
String originString = getCORSAllowOrigin();
if (originString.equals(HTTP_BIND_CORS_ALLOW_ORIGIN_DEFAULT)) {
allowAllOrigins = true;
} else {
allowAllOrigins = false;
String[] origins = originString.split(",");
// reset the cache
HTTP_BIND_ALLOWED_ORIGINS.clear();
for (String str : origins) {
HTTP_BIND_ALLOWED_ORIGINS.put(str, true);
}
}
}
public boolean isCORSEnabled() {
return JiveGlobals.getBooleanProperty(HTTP_BIND_CORS_ENABLED, HTTP_BIND_CORS_ENABLED_DEFAULT);
}
public void setCORSEnabled(Boolean value) {
if (value != null)
JiveGlobals.setProperty(HTTP_BIND_CORS_ENABLED, String.valueOf(value));
}
public String getCORSAllowOrigin() {
return JiveGlobals.getProperty(HTTP_BIND_CORS_ALLOW_ORIGIN , HTTP_BIND_CORS_ALLOW_ORIGIN_DEFAULT);
}
public void setCORSAllowOrigin(String origins) {
if (origins == null || origins.trim().length() == 0)
origins = HTTP_BIND_CORS_ALLOW_ORIGIN_DEFAULT;
else {
origins = origins.replaceAll("\\s+", "");
}
JiveGlobals.setProperty(HTTP_BIND_CORS_ALLOW_ORIGIN, origins);
setupAllowedOriginsMap();
}
public boolean isAllOriginsAllowed() {
return allowAllOrigins;
}
public boolean isThisOriginAllowed(String origin) {
return HTTP_BIND_ALLOWED_ORIGINS.get(origin) != null;
}
// http binding CORS support end
public void setHttpBindEnabled(boolean isEnabled) {
JiveGlobals.setProperty(HTTP_BIND_ENABLED, String.valueOf(isEnabled));
......
......@@ -96,6 +96,14 @@ public class HttpBindServlet extends HttpServlet {
sessionManager.stop();
}
@Override
protected void doOptions(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Use HttpServlet's implementation to add basic headers ('Allow').
super.doOptions(request, response);
addCORSHeaders(request, response);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
......@@ -178,7 +186,7 @@ public class HttpBindServlet extends HttpServlet {
}
synchronized (session) {
try {
respond(session, response, session.getResponse((Long) request.getAttribute("request")),
respond(session, request, response, session.consumeResponse((HttpConnection) request.getAttribute("connection")),
request.getMethod());
}
catch (HttpBindException e) {
......@@ -198,7 +206,7 @@ public class HttpBindServlet extends HttpServlet {
try {
if ((session.getMajorVersion() == 1 && session.getMinorVersion() >= 6) ||
session.getMajorVersion() > 1) {
respond(session, response, createErrorBody(bindingError.getErrorType().getType(),
respond(session, request, response, createErrorBody(bindingError.getErrorType().getType(),
bindingError.getCondition()), request.getMethod());
}
else {
......@@ -261,11 +269,11 @@ public class HttpBindServlet extends HttpServlet {
if ("terminate".equals(type)) {
session.close();
respond(session, response, createEmptyBody(), request.getMethod());
respond(session, request, response, createEmptyBody(), request.getMethod());
}
else if ("true".equals(restartStream) && rootNode.elements().size() == 0) {
try {
respond(session, response, createSessionRestartResponse(session), request.getMethod());
respond(session, request, response, createSessionRestartResponse(session), request.getMethod());
}
catch (DocumentException e) {
Log.error("Error sending session restart response to client.", e);
......@@ -273,7 +281,7 @@ public class HttpBindServlet extends HttpServlet {
}
else if (pauseDuration > 0 && pauseDuration <= session.getMaxPause()) {
session.pause(pauseDuration);
respond(session, response, createEmptyBody(), request.getMethod());
respond(session, request, response, createEmptyBody(), request.getMethod());
session.setLastResponseEmpty(true);
}
else {
......@@ -281,8 +289,9 @@ public class HttpBindServlet extends HttpServlet {
connection.setContinuation(ContinuationSupport.getContinuation(request));
request.setAttribute("request-session", connection.getSession());
request.setAttribute("request", connection.getRequestId());
request.setAttribute("connection", connection);
try {
respond(session, response, session.getResponse(connection.getRequestId()),
respond(session, request, response, session.consumeResponse(connection),
request.getMethod());
}
catch (HttpBindException e) {
......@@ -324,7 +333,7 @@ public class HttpBindServlet extends HttpServlet {
if (JiveGlobals.getBooleanProperty("log.httpbind.enabled", false)) {
System.out.println(new Date()+": HTTP RECV(" + connection.getSession().getStreamID().getID() + "): " + rootNode.asXML());
}
respond(response, connection, request.getMethod());
respond(request, response, connection, request.getMethod());
}
catch (UnauthorizedException e) {
// Server wasn't initialized yet.
......@@ -337,7 +346,8 @@ public class HttpBindServlet extends HttpServlet {
}
private void respond(HttpServletResponse response, HttpConnection connection, String method)
// add request argument
private void respond(HttpServletRequest request, HttpServletResponse response, HttpConnection connection, String method)
throws IOException
{
String content;
......@@ -349,10 +359,11 @@ public class HttpBindServlet extends HttpServlet {
connection.getSession().setLastResponseEmpty(true);
}
respond(connection.getSession(), response, content, method);
respond(connection.getSession(), request, response, content, method);
}
private void respond(HttpSession session, HttpServletResponse response, String content, String method)
// add request argument
private void respond(HttpSession session, HttpServletRequest request, HttpServletResponse response, String content, String method)
throws IOException {
response.setStatus(HttpServletResponse.SC_OK);
response.setContentType("GET".equals(method) ? "text/javascript" : "text/xml");
......@@ -367,6 +378,8 @@ public class HttpBindServlet extends HttpServlet {
}
content = "_BOSH_(\"" + StringEscapeUtils.escapeJavaScript(content) + "\")";
}
addCORSHeaders(request, response);
if (JiveGlobals.getBooleanProperty("log.httpbind.enabled", false)) {
System.out.println(new Date()+": HTTP SENT(" + session.getStreamID().getID() + "): " + content);
......@@ -377,6 +390,27 @@ public class HttpBindServlet extends HttpServlet {
response.getOutputStream().close();
}
private void addCORSHeaders(HttpServletRequest request, HttpServletResponse response)
throws IOException {
// add CORS headers
if (boshManager.isCORSEnabled()) {
if (boshManager.isAllOriginsAllowed())
// set the Access-Control-Allow-Origin header to * to allow all Origin to do the CORS
response.addHeader("Access-Control-Allow-Origin", HttpBindManager.HTTP_BIND_CORS_ALLOW_ORIGIN_DEFAULT);
else {
// get the Origin header from the request and check if it is in the allowed Origin Map.
// if it is allowed write it back to the Access-Control-Allow-Origin header of the respond.
String origin = request.getHeader("Origin");
if (boshManager.isThisOriginAllowed(origin)) {
response.addHeader("Access-Control-Allow-Origin", origin);
}
}
response.addHeader("Access-Control-Allow-Methods", HttpBindManager.HTTP_BIND_CORS_ALLOW_METHODS_DEFAULT);
response.addHeader("Access-Control-Allow-Headers", HttpBindManager.HTTP_BIND_CORS_ALLOW_HEADERS_DEFAULT);
response.addHeader("Access-Control-Max-Age", HttpBindManager.HTTP_BIND_CORS_MAX_AGE_DEFAULT);
}
}
private static String createEmptyBody() {
Element body = DocumentHelper.createElement("body");
body.addNamespace("", "http://jabber.org/protocol/httpbind");
......
......@@ -123,7 +123,7 @@ public class HttpConnection {
isClosed = true;
}
if (continuation != null) {
if (continuation != null && continuation.isSuspended()) {
continuation.setAttribute("response-body", body);
continuation.resume();
session.incrementServerPacketCount();
......@@ -154,6 +154,9 @@ public class HttpConnection {
else if (body == null) {
throw new IllegalStateException("Continuation not set, cannot wait for deliverable.");
}
else if(CONNECTION_CLOSED.equals(body)) {
return null;
}
return body;
}
......@@ -199,9 +202,9 @@ public class HttpConnection {
private String waitForResponse() throws HttpBindTimeoutException {
// we enter this method when we have no messages pending delivery
// when we resume a suspended continuation, or when we time out
if (!Boolean.TRUE.equals(continuation.getAttribute(SUSPENDED))) {
continuation.setTimeout(session.getWait() * JiveConstants.SECOND);
// when we resume a suspended continuation, or when we time out
if (!Boolean.TRUE.equals(continuation.getAttribute(SUSPENDED))) {
continuation.setTimeout(session.getWait() * JiveConstants.SECOND);
continuation.suspend();
continuation.setAttribute(SUSPENDED, Boolean.TRUE);
continuation.undispatch();
......
......@@ -567,6 +567,10 @@ public class HttpSession extends LocalClientSession {
this.lastResponseEmpty = lastResponseEmpty;
}
/**
* @deprecated Doesn't make sense if we have multiple connections with the same rid in the queue.
* Use {@link #consumeResponse(HttpConnection)} instead
*/
public String getResponse(long requestID) throws HttpBindException {
for (HttpConnection connection : connectionQueue) {
if (connection.getRequestId() == requestID) {
......@@ -582,6 +586,28 @@ public class HttpSession extends LocalClientSession {
}
throw new InternalError("Could not locate connection: " + requestID);
}
/**
* Similar to {@link #getResponse(long)} but returns the response for a specific connection instance
* rather than looking up on the request id. This is because it is possible for there to be multiple
* connections in the queue for the same rid so we need to be careful that we are accessing the correct
* connection.
* <p><b>Note that this method also removes the connection from the internal connection queue.</b>
*
* @param connection the connection for which to get the response.
* @return the response from the connection
* @throws HttpBindException
*/
protected String consumeResponse(HttpConnection connection) throws HttpBindException {
Log.debug("consumeResponse: " + connection);
if(connectionQueue.contains(connection)) {
String response = getResponse(connection);
connectionQueue.remove(connection);
fireConnectionClosed(connection);
return response;
}
throw new InternalError("Could not locate connection: " + connection);
}
private String getResponse(HttpConnection connection) throws HttpBindException {
String response = null;
......@@ -685,6 +711,7 @@ public class HttpSession extends LocalClientSession {
BoshBindingError.itemNotFound);
}
connection.deliverBody(createDeliverable(deliverable.deliverables));
addConnection(connection, isPoll);
return connection;
}
else if (rid > (lastRequestID + maxRequests)) {
......@@ -714,14 +741,54 @@ public class HttpSession extends LocalClientSession {
if (connection == null) {
throw new IllegalArgumentException("Connection cannot be null.");
}
checkOveractivity(isPoll);
if (isSecure && !connection.isSecure()) {
throw new HttpBindException("Session was started from secure connection, all " +
"connections on this session must be secured.", BoshBindingError.badRequest);
}
final long rid = connection.getRequestId();
/*
* Search through the connection queue to see if this rid already exists on it. If it does then we
* will close and deliver the existing connection (if appropriate), and close and deliver the same
* deliverable on the new connection. This is under the assumption that a connection has been dropped,
* and re-requested before jetty has realised.
*/
for (HttpConnection queuedConnection : connectionQueue) {
if (queuedConnection.getRequestId() == rid) {
if(Log.isDebugEnabled()) {
Log.debug("Found previous connection in queue with rid " + rid);
}
if(queuedConnection.isClosed()) {
if(Log.isDebugEnabled()) {
Log.debug("It's closed - copying deliverables");
}
Delivered deliverable = retrieveDeliverable(rid);
if (deliverable == null) {
Log.warn("Deliverable unavailable for " + rid);
throw new HttpBindException("Unexpected RID error.",
BoshBindingError.itemNotFound);
}
connection.deliverBody(createDeliverable(deliverable.deliverables));
} else {
if(Log.isDebugEnabled()) {
Log.debug("It's still open - calling close()");
}
deliver(queuedConnection, Collections.singleton(new Deliverable("")));
connection.close();
if(rid == (lastRequestID + 1)) {
lastRequestID = rid;
}
}
break;
}
}
checkOveractivity(isPoll);
sslCertificates = connection.getPeerCertificates();
connection.setSession(this);
......
......@@ -261,6 +261,9 @@ public class LdapVCardProvider implements VCardProvider, PropertyEventListener {
username = JID.unescapeNode(username);
Map<String, String> map = getLdapAttributes(username);
Log.debug("LdapVCardProvider: Retrieving LDAP mapped vcard for " + username);
if (map.isEmpty()) {
return null;
}
Element vcard = new VCard(template).getVCard(map);
if (mergeVCard == null) {
// No vcard passed in? Hrm. Fine, return LDAP vcard.
......
......@@ -202,6 +202,44 @@ public class IQAdminHandler {
metaData.addAttribute("nick", role.getNickname());
metaData.addAttribute("affiliation", role.getAffiliation().toString());
}
} else if ("owner".equals(affiliation)) {
// The client is requesting the list of owners
Element ownerMetaData;
MUCRole role;
for (JID jid : room.getOwners()) {
ownerMetaData = result.addElement("item", "http://jabber.org/protocol/muc#admin");
ownerMetaData.addAttribute("affiliation", "owner");
ownerMetaData.addAttribute("jid", jid.toBareJID());
// Add role and nick to the metadata if the user is in the room
try {
List<MUCRole> roles = room.getOccupantsByBareJID(jid);
role = roles.get(0);
ownerMetaData.addAttribute("role", role.getRole().toString());
ownerMetaData.addAttribute("nick", role.getNickname());
}
catch (UserNotFoundException e) {
// Do nothing
}
}
} else if ("admin".equals(affiliation)) {
// The client is requesting the list of admins
Element adminMetaData;
MUCRole role;
for (JID jid : room.getAdmins()) {
adminMetaData = result.addElement("item", "http://jabber.org/protocol/muc#admin");
adminMetaData.addAttribute("affiliation", "admin");
adminMetaData.addAttribute("jid", jid.toBareJID());
// Add role and nick to the metadata if the user is in the room
try {
List<MUCRole> roles = room.getOccupantsByBareJID(jid);
role = roles.get(0);
adminMetaData.addAttribute("role", role.getRole().toString());
adminMetaData.addAttribute("nick", role.getNickname());
}
catch (UserNotFoundException e) {
// Do nothing
}
}
} else {
reply.setError(PacketError.Condition.bad_request);
}
......@@ -238,6 +276,10 @@ public class IQAdminHandler {
if ("moderator".equals(target)) {
// Add the user as a moderator of the room based on the full JID
presences.add(room.addModerator(jid, senderRole));
} else if ("owner".equals(target)) {
presences.addAll(room.addOwner(jid, senderRole));
} else if ("admin".equals(target)) {
presences.addAll(room.addAdmin(jid, senderRole));
} else if ("participant".equals(target)) {
// Add the user as a participant of the room based on the full JID
presences.add(room.addParticipant(jid,
......
......@@ -179,6 +179,9 @@ public class IQOwnerHandler {
// Create the result that will hold an item for each owner or admin
Element result = reply.setChildElement("query", "http://jabber.org/protocol/muc#owner");
// muc#owner shouldn't be used as namespace for owner and admin
// listings according to the newest versions of XEP-0045
// this code remains here for backwards compatibility
if ("owner".equals(affiliation)) {
// The client is requesting the list of owners
Element ownerMetaData;
......@@ -262,6 +265,9 @@ public class IQOwnerHandler {
try {
for (JID jid : jids.keySet()) {
String targetAffiliation = jids.get(jid);
// muc#owner shouldn't be used as namespace for owner and admin
// changes according to the newest versions of XEP-0045
// this code remains here for backwards compatibility
if ("owner".equals(targetAffiliation)) {
// Add the new user as an owner of the room
presences.addAll(room.addOwner(jid, senderRole));
......
......@@ -89,11 +89,11 @@ public class HybridUserProvider implements UserProvider {
}
}
String tertiaryClass = JiveGlobals.getXMLProperty("hybridUserProvider.tertiaryProvider.className");
if (secondaryClass != null) {
if (tertiaryClass != null) {
try {
Class c = ClassUtils.forName(secondaryClass);
Class c = ClassUtils.forName(tertiaryClass);
tertiaryProvider = (UserProvider) c.newInstance();
Log.debug("Secondary user provider: " + secondaryClass);
Log.debug("Tertiary user provider: " + tertiaryClass);
} catch (Exception e) {
Log.error("Unable to load tertiary user provider: " + tertiaryClass, e);
}
......
......@@ -62,7 +62,7 @@ public class Log {
* @deprecated replaced by {@link org.slf4j.Logger#isErrorEnabled()}.
* Functionality of this method is delegated there.
*/
@Deprecated()
@Deprecated
public static boolean isErrorEnabled() {
return Logger.isErrorEnabled();
}
......
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>GoJara Plugin Changelog</title>
<style type="text/css">
BODY {
font-size : 100%;
}
BODY, TD, TH {
font-family : tahoma, verdana, arial, helvetica, sans-serif;
font-size : 0.8em;
}
H2 {
font-size : 10pt;
font-weight : bold;
padding-left : 1em;
}
A:hover {
text-decoration : none;
}
H1 {
font-family : tahoma, arial, helvetica, sans-serif;
font-size : 1.4em;
font-weight: bold;
border-bottom : 1px #ccc solid;
padding-bottom : 2px;
}
TT {
font-family : courier new;
font-weight : bold;
color : #060;
}
PRE {
font-family : courier new;
font-size : 100%;
}
</style>
</head>
<body>
<h1>
Just married Plugin Changelog
</h1>
<p><b>1.0.1 </b> -- August 28, 2012</p>
<ul>
<li>Change name and mail address if necessary </li>
</ul>
<p><b>1.0.0 </b> -- July 30, 2012</p>
<ul>
<li>Initial release. </li>
</ul>
</body>
</html>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<plugin>
<class>org.jivesoftware.openfire.plugin.married.JustMarriedPlugin</class>
<name>Just married</name>
<description>Allows admins to rename or copy users</description>
<author>Holger Bergunde</author>
<version>1.0.1 </version>
<date>8/28/2012</date>
<minServerVersion>3.3.0</minServerVersion>
<adminconsole>
<tab id="tab-users">
<sidebar id="sidebar-users">
<item id="justmarried" name="Just married"
url="married.jsp"
description="Just married" />
</sidebar>
</tab>
</adminconsole>
</plugin>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Just married Plugin Readme</title>
<style type="text/css">
BODY {
font-size: 100%;
}
BODY,TD,TH {
font-family: tahoma, verdana, arial, helvetica, sans-serif;
font-size: 0.8em;
}
H2 {
font-size: 10pt;
font-weight: bold;
}
A:hover {
text-decoration: none;
}
H1 {
font-family: tahoma, arial, helvetica, sans-serif;
font-size: 1.4em;
font-weight: bold;
border-bottom: 1px #ccc solid;
padding-bottom: 2px;
}
TT {
font-family: courier new;
font-weight: bold;
color: #060;
}
PRE {
font-family: courier new;
font-size: 100%;
}
#datatable TH {
color: #fff;
background-color: #2A448C;
text-align: left;
}
#datatable TD {
background-color: #FAF6EF;
}
#datatable .name {
background-color: #DCE2F5;
}
</style>
</head>
<body>
<h1>Just married Plugin Readme</h1>
<h2>Overview</h2>
<p>This plugins allows admins to rename or copy users on the local
server. By default Openfire does not allow to rename users because the
username is the primary key in database. This plugin creates a new
contact and tries to copy roster entries, groups (including shared
groups), properties and vcard from the old contact to the new renamed
one. If you want you could keep the old user as well.</p>
<h2>Installation</h2>
<p>Copy justmarried.jar into the plugins directory of your Openfire
installation. The plugin will then be automatically deployed. To
upgrade to a new version, copy the new remoteRoster.jar file over the
existing file.</p>
<h2>Configuration</h2>
<p>The Just married plugin can be configured under
"User/Groups"-"Users"-"Just married".</p>
</body>
</html>
\ No newline at end of file
package org.jivesoftware.openfire.plugin.married;
import java.io.File;
import java.util.List;
import org.apache.log4j.Logger;
import org.dom4j.Element;
import org.jivesoftware.openfire.SessionManager;
import org.jivesoftware.openfire.SharedGroupException;
import org.jivesoftware.openfire.XMPPServer;
import org.jivesoftware.openfire.auth.AuthFactory;
import org.jivesoftware.openfire.container.Plugin;
import org.jivesoftware.openfire.container.PluginManager;
import org.jivesoftware.openfire.group.Group;
import org.jivesoftware.openfire.group.GroupManager;
import org.jivesoftware.openfire.roster.Roster;
import org.jivesoftware.openfire.roster.RosterItem;
import org.jivesoftware.openfire.session.ClientSession;
import org.jivesoftware.openfire.user.User;
import org.jivesoftware.openfire.user.UserAlreadyExistsException;
import org.jivesoftware.openfire.user.UserManager;
import org.jivesoftware.openfire.user.UserNotFoundException;
import org.jivesoftware.openfire.vcard.VCardManager;
import org.xmpp.packet.StreamError;
public class JustMarriedPlugin implements Plugin {
private static Logger Log = Logger.getLogger(JustMarriedPlugin.class);
@Override
public void initializePlugin(PluginManager manager, File pluginDirectory) {
}
public static boolean changeName(String currentUserName, String newUserName, boolean deleteOldUser,
String newEmail, String newRealName) {
UserManager userManager = UserManager.getInstance();
try {
User currentUser = userManager.getUser(currentUserName);
// Old user found, create new one
String password = AuthFactory.getPassword(currentUserName);
String newName = (newRealName == null | newRealName.length() == 0) ? currentUser.getName() : newRealName;
String newMail = (newEmail == null | newEmail.length() == 0) ? currentUser.getEmail() : newEmail;
User newUser = userManager.createUser(newUserName, password, currentUser.getName(), newMail);
newUser.setName(newName);
newUser.setNameVisible(currentUser.isNameVisible());
newUser.setEmailVisible(currentUser.isEmailVisible());
newUser.setCreationDate(currentUser.getCreationDate());
copyRoster(currentUser, newUser, currentUserName);
copyProperties(currentUser, newUser);
copyToGroups(currentUserName, newUserName);
copyVCard(currentUserName, newUserName);
if (deleteOldUser) {
deleteUser(currentUser);
}
} catch (UserNotFoundException e) {
Log.error("Could not find user " + currentUserName, e);
return false;
} catch (UserAlreadyExistsException e) {
Log.error("Could not create user " + newUserName, e);
return false;
}
return true;
}
private static void copyVCard(String currentUserName, String newUserName) {
VCardManager vcardManager = VCardManager.getInstance();
Element vcard = vcardManager.getVCard(currentUserName);
if (vcard != null) {
try {
vcardManager.setVCard(newUserName, vcard);
} catch (Exception e) {
Log.error("Could not copy vcard to " + newUserName, e);
}
}
}
private static void copyToGroups(String currentUser, String newUser) {
GroupManager groupManager = GroupManager.getInstance();
for (Group group : groupManager.getGroups()) {
if (group.isUser(currentUser)) {
group.getMembers().add(XMPPServer.getInstance().createJID(newUser, null));
}
}
}
private static void deleteUser(User oldUser) {
UserManager.getInstance().deleteUser(oldUser);
final StreamError error = new StreamError(StreamError.Condition.not_authorized);
for (ClientSession sess : SessionManager.getInstance().getSessions(oldUser.getUsername())) {
sess.deliverRawText(error.toXML());
sess.close();
}
}
private static void copyProperties(User currentUser, User newUser) {
for (String key : currentUser.getProperties().keySet()) {
newUser.getProperties().put(key, User.getPropertyValue(currentUser.getUsername(), key));
}
}
private static void copyRoster(User currentUser, User newUser, String currentUserName) {
Roster newRoster = newUser.getRoster();
Roster currentRoster = currentUser.getRoster();
for (RosterItem item : currentRoster.getRosterItems()) {
try {
List<String> groups = item.getGroups();
RosterItem justCreated = newRoster.createRosterItem(item.getJid(), item.getNickname(), groups, true,
true);
justCreated.setAskStatus(item.getAskStatus());
justCreated.setRecvStatus(item.getRecvStatus());
justCreated.setSubStatus(item.getSubStatus());
for (Group gr : item.getSharedGroups()) {
justCreated.addSharedGroup(gr);
}
for (Group gr : item.getInvisibleSharedGroups()) {
justCreated.addInvisibleSharedGroup(gr);
}
newRoster.updateRosterItem(justCreated);
addNewUserToOthersRoster(newUser, item, currentUserName);
} catch (UserAlreadyExistsException e) {
Log.error("Could not create roster item for user " + item.getJid(), e);
} catch (SharedGroupException e) {
Log.error("Could not create roster item for user " + item.getJid()
+ " because it is a contact from a shared group", e);
} catch (UserNotFoundException e) {
Log.error("Could not update Roster item for user " + newUser.getName()
+ " because it was not properly created.", e);
}
}
}
private static void addNewUserToOthersRoster(User newUser, RosterItem otherItem, String currentUser) {
otherItem.getJid();
UserManager userManager = UserManager.getInstance();
// Is this user registered with our OF server?
String username = otherItem.getJid().getNode();
if (username != null && username.length() > 0 && userManager.isRegisteredUser(username)
&& XMPPServer.getInstance().isLocal(XMPPServer.getInstance().createJID(currentUser, null))) {
try {
User otherUser = userManager.getUser(username);
Roster otherRoster = otherUser.getRoster();
RosterItem oldUserOnOthersRoster = otherRoster.getRosterItem(XMPPServer.getInstance().createJID(
currentUser, null));
try {
if (!oldUserOnOthersRoster.isOnlyShared()) {
RosterItem justCreated = otherRoster.createRosterItem(
XMPPServer.getInstance().createJID(newUser.getUsername(), null),
oldUserOnOthersRoster.getNickname(), oldUserOnOthersRoster.getGroups(), true, true);
justCreated.setAskStatus(oldUserOnOthersRoster.getAskStatus());
justCreated.setRecvStatus(oldUserOnOthersRoster.getRecvStatus());
justCreated.setSubStatus(oldUserOnOthersRoster.getSubStatus());
otherRoster.updateRosterItem(justCreated);
}
} catch (UserAlreadyExistsException e) {
Log.error("Could not create roster item for user " + newUser.getUsername(), e);
} catch (SharedGroupException e) {
Log.error(e);
}
} catch (UserNotFoundException e) {
Log.error("Could not create roster item for user " + newUser.getUsername()
+ " because it is a contact from a shared group", e);
}
}
}
@Override
public void destroyPlugin() {
}
}
/*!
* Bootstrap Responsive 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.
*/.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}.hidden{display:none;visibility:hidden}.visible-phone{display:none!important}.visible-tablet{display:none!important}.hidden-desktop{display:none!important}@media(max-width:767px){.visible-phone{display:inherit!important}.hidden-phone{display:none!important}.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}}@media(min-width:768px) and (max-width:979px){.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:18px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-group>label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-right:10px;padding-left:10px}.modal{position:absolute;top:10px;right:10px;left:10px;width:auto;margin:0}.modal.fade.in{top:auto}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:auto;margin-left:0}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{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}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}}@media(min-width:768px) and (max-width:979px){.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:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.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.762430939%;*margin-left:2.709239449638298%;-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.999999993%;*width:99.9468085036383%}.row-fluid .span11{width:91.436464082%;*width:91.38327259263829%}.row-fluid .span10{width:82.87292817100001%;*width:82.8197366816383%}.row-fluid .span9{width:74.30939226%;*width:74.25620077063829%}.row-fluid .span8{width:65.74585634900001%;*width:65.6926648596383%}.row-fluid .span7{width:57.182320438000005%;*width:57.129128948638304%}.row-fluid .span6{width:48.618784527%;*width:48.5655930376383%}.row-fluid .span5{width:40.055248616%;*width:40.0020571266383%}.row-fluid .span4{width:31.491712705%;*width:31.4385212156383%}.row-fluid .span3{width:22.928176794%;*width:22.874985304638297%}.row-fluid .span2{width:14.364640883%;*width:14.311449393638298%}.row-fluid .span1{width:5.801104972%;*width:5.747913482638298%}input,textarea,.uneditable-input{margin-left:0}input.span12,textarea.span12,.uneditable-input.span12{width:714px}input.span11,textarea.span11,.uneditable-input.span11{width:652px}input.span10,textarea.span10,.uneditable-input.span10{width:590px}input.span9,textarea.span9,.uneditable-input.span9{width:528px}input.span8,textarea.span8,.uneditable-input.span8{width:466px}input.span7,textarea.span7,.uneditable-input.span7{width:404px}input.span6,textarea.span6,.uneditable-input.span6{width:342px}input.span5,textarea.span5,.uneditable-input.span5{width:280px}input.span4,textarea.span4,.uneditable-input.span4{width:218px}input.span3,textarea.span3,.uneditable-input.span3{width:156px}input.span2,textarea.span2,.uneditable-input.span2{width:94px}input.span1,textarea.span1,.uneditable-input.span1{width:32px}}@media(min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;content:""}.row:after{clear:both}[class*="span"]{float:left;margin-left:30px}.container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.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.564102564%;*margin-left:2.510911074638298%;-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:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145300001%;*width:91.3997999636383%}.row-fluid .span10{width:82.905982906%;*width:82.8527914166383%}.row-fluid .span9{width:74.358974359%;*width:74.30578286963829%}.row-fluid .span8{width:65.81196581200001%;*width:65.7587743226383%}.row-fluid .span7{width:57.264957265%;*width:57.2117657756383%}.row-fluid .span6{width:48.717948718%;*width:48.6647572286383%}.row-fluid .span5{width:40.170940171000005%;*width:40.117748681638304%}.row-fluid .span4{width:31.623931624%;*width:31.5707401346383%}.row-fluid .span3{width:23.076923077%;*width:23.0237315876383%}.row-fluid .span2{width:14.529914530000001%;*width:14.4767230406383%}.row-fluid .span1{width:5.982905983%;*width:5.929714493638298%}input,textarea,.uneditable-input{margin-left:0}input.span12,textarea.span12,.uneditable-input.span12{width:1160px}input.span11,textarea.span11,.uneditable-input.span11{width:1060px}input.span10,textarea.span10,.uneditable-input.span10{width:960px}input.span9,textarea.span9,.uneditable-input.span9{width:860px}input.span8,textarea.span8,.uneditable-input.span8{width:760px}input.span7,textarea.span7,.uneditable-input.span7{width:660px}input.span6,textarea.span6,.uneditable-input.span6{width:560px}input.span5,textarea.span5,.uneditable-input.span5{width:460px}input.span4,textarea.span4,.uneditable-input.span4{width:360px}input.span3,textarea.span3,.uneditable-input.span3{width:260px}input.span2,textarea.span2,.uneditable-input.span2{width:160px}input.span1,textarea.span1,.uneditable-input.span1{width:60px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top,.navbar-fixed-bottom{position:static}.navbar-fixed-top{margin-bottom:18px}.navbar-fixed-bottom{margin-top:18px}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 9px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#999;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:6px 15px;font-weight:bold;color:#999;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .dropdown-menu a:hover{background-color:#222}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:block;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:9px 15px;margin:9px 0;border-top:1px solid #222;border-bottom:1px solid #222;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}}
/*!
* 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
}
.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 small,h2 small,h3 small,h4 small,h5 small,h6 small {
font-weight: normal;
color: #999
}
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
}
\ No newline at end of file
/*!
* Bootstrap.js by @fat & @mdo
* Copyright 2012 Twitter, Inc.
* http://www.apache.org/licenses/LICENSE-2.0.txt
*/
!function(a){a(function(){"use strict",a.support.transition=function(){var a=function(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd",msTransition:"MSTransitionEnd",transition:"transitionend"},c;for(c in b)if(a.style[c]!==undefined)return b[c]}();return a&&{end:a}}()})}(window.jQuery),!function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function f(){e.trigger("closed").remove()}var c=a(this),d=c.attr("data-target"),e;d||(d=c.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),e=a(d),b&&b.preventDefault(),e.length||(e=c.hasClass("alert")?c:c.parent()),e.trigger(b=a.Event("close"));if(b.isDefaultPrevented())return;e.removeClass("in"),a.support.transition&&e.hasClass("fade")?e.on(a.support.transition.end,f):f()},a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("alert");e||d.data("alert",e=new c(this)),typeof b=="string"&&e[b].call(d)})},a.fn.alert.Constructor=c,a(function(){a("body").on("click.alert.data-api",b,c.prototype.close)})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.button.defaults,c)};b.prototype.setState=function(a){var b="disabled",c=this.$element,d=c.data(),e=c.is("input")?"val":"html";a+="Text",d.resetText||c.data("resetText",c[e]()),c[e](d[a]||this.options[a]),setTimeout(function(){a=="loadingText"?c.addClass(b).attr(b,b):c.removeClass(b).removeAttr(b)},0)},b.prototype.toggle=function(){var a=this.$element.parent('[data-toggle="buttons-radio"]');a&&a.find(".active").removeClass("active"),this.$element.toggleClass("active")},a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("button"),f=typeof c=="object"&&c;e||d.data("button",e=new b(this,f)),c=="toggle"?e.toggle():c&&e.setState(c)})},a.fn.button.defaults={loadingText:"loading..."},a.fn.button.Constructor=b,a(function(){a("body").on("click.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle")})})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=c,this.options.slide&&this.slide(this.options.slide),this.options.pause=="hover"&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.prototype={cycle:function(b){return b||(this.paused=!1),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},to:function(b){var c=this.$element.find(".active"),d=c.parent().children(),e=d.index(c),f=this;if(b>d.length-1||b<0)return;return this.sliding?this.$element.one("slid",function(){f.to(b)}):e==b?this.pause().cycle():this.slide(b>e?"next":"prev",a(d[b]))},pause:function(a){return a||(this.paused=!0),clearInterval(this.interval),this.interval=null,this},next:function(){if(this.sliding)return;return this.slide("next")},prev:function(){if(this.sliding)return;return this.slide("prev")},slide:function(b,c){var d=this.$element.find(".active"),e=c||d[b](),f=this.interval,g=b=="next"?"left":"right",h=b=="next"?"first":"last",i=this,j=a.Event("slide");this.sliding=!0,f&&this.pause(),e=e.length?e:this.$element.find(".item")[h]();if(e.hasClass("active"))return;if(a.support.transition&&this.$element.hasClass("slide")){this.$element.trigger(j);if(j.isDefaultPrevented())return;e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),this.$element.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid")},0)})}else{this.$element.trigger(j);if(j.isDefaultPrevented())return;d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid")}return f&&this.cycle(),this}},a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("carousel"),f=a.extend({},a.fn.carousel.defaults,typeof c=="object"&&c);e||d.data("carousel",e=new b(this,f)),typeof c=="number"?e.to(c):typeof c=="string"||(c=f.slide)?e[c]():f.interval&&e.cycle()})},a.fn.carousel.defaults={interval:5e3,pause:"hover"},a.fn.carousel.Constructor=b,a(function(){a("body").on("click.carousel.data-api","[data-slide]",function(b){var c=a(this),d,e=a(c.attr("data-target")||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,"")),f=!e.data("modal")&&a.extend({},e.data(),c.data());e.carousel(f),b.preventDefault()})})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.collapse.defaults,c),this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.prototype={constructor:b,dimension:function(){var a=this.$element.hasClass("width");return a?"width":"height"},show:function(){var b,c,d,e;if(this.transitioning)return;b=this.dimension(),c=a.camelCase(["scroll",b].join("-")),d=this.$parent&&this.$parent.find("> .accordion-group > .in");if(d&&d.length){e=d.data("collapse");if(e&&e.transitioning)return;d.collapse("hide"),e||d.data("collapse",null)}this.$element[b](0),this.transition("addClass",a.Event("show"),"shown"),this.$element[b](this.$element[0][c])},hide:function(){var b;if(this.transitioning)return;b=this.dimension(),this.reset(this.$element[b]()),this.transition("removeClass",a.Event("hide"),"hidden"),this.$element[b](0)},reset:function(a){var b=this.dimension();return this.$element.removeClass("collapse")[b](a||"auto")[0].offsetWidth,this.$element[a!==null?"addClass":"removeClass"]("collapse"),this},transition:function(b,c,d){var e=this,f=function(){c.type=="show"&&e.reset(),e.transitioning=0,e.$element.trigger(d)};this.$element.trigger(c);if(c.isDefaultPrevented())return;this.transitioning=1,this.$element[b]("in"),a.support.transition&&this.$element.hasClass("collapse")?this.$element.one(a.support.transition.end,f):f()},toggle:function(){this[this.$element.hasClass("in")?"hide":"show"]()}},a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("collapse"),f=typeof c=="object"&&c;e||d.data("collapse",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.collapse.defaults={toggle:!0},a.fn.collapse.Constructor=b,a(function(){a("body").on("click.collapse.data-api","[data-toggle=collapse]",function(b){var c=a(this),d,e=c.attr("data-target")||b.preventDefault()||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),f=a(e).data("collapse")?"toggle":c.data();a(e).collapse(f)})})}(window.jQuery),!function(a){function d(){a(b).parent().removeClass("open")}"use strict";var b='[data-toggle="dropdown"]',c=function(b){var c=a(b).on("click.dropdown.data-api",this.toggle);a("html").on("click.dropdown.data-api",function(){c.parent().removeClass("open")})};c.prototype={constructor:c,toggle:function(b){var c=a(this),e,f,g;if(c.is(".disabled, :disabled"))return;return f=c.attr("data-target"),f||(f=c.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,"")),e=a(f),e.length||(e=c.parent()),g=e.hasClass("open"),d(),g||e.toggleClass("open"),!1}},a.fn.dropdown=function(b){return this.each(function(){var d=a(this),e=d.data("dropdown");e||d.data("dropdown",e=new c(this)),typeof b=="string"&&e[b].call(d)})},a.fn.dropdown.Constructor=c,a(function(){a("html").on("click.dropdown.data-api",d),a("body").on("click.dropdown",".dropdown form",function(a){a.stopPropagation()}).on("click.dropdown.data-api",b,c.prototype.toggle)})}(window.jQuery),!function(a){function c(){var b=this,c=setTimeout(function(){b.$element.off(a.support.transition.end),d.call(b)},500);this.$element.one(a.support.transition.end,function(){clearTimeout(c),d.call(b)})}function d(a){this.$element.hide().trigger("hidden"),e.call(this)}function e(b){var c=this,d=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var e=a.support.transition&&d;this.$backdrop=a('<div class="modal-backdrop '+d+'" />').appendTo(document.body),this.options.backdrop!="static"&&this.$backdrop.click(a.proxy(this.hide,this)),e&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),e?this.$backdrop.one(a.support.transition.end,b):b()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(a.support.transition.end,a.proxy(f,this)):f.call(this)):b&&b()}function f(){this.$backdrop.remove(),this.$backdrop=null}function g(){var b=this;this.isShown&&this.options.keyboard?a(document).on("keyup.dismiss.modal",function(a){a.which==27&&b.hide()}):this.isShown||a(document).off("keyup.dismiss.modal")}"use strict";var b=function(b,c){this.options=c,this.$element=a(b).delegate('[data-dismiss="modal"]',"click.dismiss.modal",a.proxy(this.hide,this))};b.prototype={constructor:b,toggle:function(){return this[this.isShown?"hide":"show"]()},show:function(){var b=this,c=a.Event("show");this.$element.trigger(c);if(this.isShown||c.isDefaultPrevented())return;a("body").addClass("modal-open"),this.isShown=!0,g.call(this),e.call(this,function(){var c=a.support.transition&&b.$element.hasClass("fade");b.$element.parent().length||b.$element.appendTo(document.body),b.$element.show(),c&&b.$element[0].offsetWidth,b.$element.addClass("in"),c?b.$element.one(a.support.transition.end,function(){b.$element.trigger("shown")}):b.$element.trigger("shown")})},hide:function(b){b&&b.preventDefault();var e=this;b=a.Event("hide"),this.$element.trigger(b);if(!this.isShown||b.isDefaultPrevented())return;this.isShown=!1,a("body").removeClass("modal-open"),g.call(this),this.$element.removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?c.call(this):d.call(this)}},a.fn.modal=function(c){return this.each(function(){var d=a(this),e=d.data("modal"),f=a.extend({},a.fn.modal.defaults,d.data(),typeof c=="object"&&c);e||d.data("modal",e=new b(this,f)),typeof c=="string"?e[c]():f.show&&e.show()})},a.fn.modal.defaults={backdrop:!0,keyboard:!0,show:!0},a.fn.modal.Constructor=b,a(function(){a("body").on("click.modal.data-api",'[data-toggle="modal"]',function(b){var c=a(this),d,e=a(c.attr("data-target")||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,"")),f=e.data("modal")?"toggle":a.extend({},e.data(),c.data());b.preventDefault(),e.modal(f)})})}(window.jQuery),!function(a){"use strict";var b=function(a,b){this.init("tooltip",a,b)};b.prototype={constructor:b,init:function(b,c,d){var e,f;this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.enabled=!0,this.options.trigger!="manual"&&(e=this.options.trigger=="hover"?"mouseenter":"focus",f=this.options.trigger=="hover"?"mouseleave":"blur",this.$element.on(e,this.options.selector,a.proxy(this.enter,this)),this.$element.on(f,this.options.selector,a.proxy(this.leave,this))),this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},getOptions:function(b){return b=a.extend({},a.fn[this.type].defaults,b,this.$element.data()),b.delay&&typeof b.delay=="number"&&(b.delay={show:b.delay,hide:b.delay}),b},enter:function(b){var c=a(b.currentTarget)[this.type](this._options).data(this.type);if(!c.options.delay||!c.options.delay.show)return c.show();clearTimeout(this.timeout),c.hoverState="in",this.timeout=setTimeout(function(){c.hoverState=="in"&&c.show()},c.options.delay.show)},leave:function(b){var c=a(b.currentTarget)[this.type](this._options).data(this.type);this.timeout&&clearTimeout(this.timeout);if(!c.options.delay||!c.options.delay.hide)return c.hide();c.hoverState="out",this.timeout=setTimeout(function(){c.hoverState=="out"&&c.hide()},c.options.delay.hide)},show:function(){var a,b,c,d,e,f,g;if(this.hasContent()&&this.enabled){a=this.tip(),this.setContent(),this.options.animation&&a.addClass("fade"),f=typeof this.options.placement=="function"?this.options.placement.call(this,a[0],this.$element[0]):this.options.placement,b=/in/.test(f),a.remove().css({top:0,left:0,display:"block"}).appendTo(b?this.$element:document.body),c=this.getPosition(b),d=a[0].offsetWidth,e=a[0].offsetHeight;switch(b?f.split(" ")[1]:f){case"bottom":g={top:c.top+c.height,left:c.left+c.width/2-d/2};break;case"top":g={top:c.top-e,left:c.left+c.width/2-d/2};break;case"left":g={top:c.top+c.height/2-e/2,left:c.left-d};break;case"right":g={top:c.top+c.height/2-e/2,left:c.left+c.width}}a.css(g).addClass(f).addClass("in")}},isHTML:function(a){return typeof a!="string"||a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3||/^(?:[^<]*<[\w\W]+>[^>]*$)/.exec(a)},setContent:function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.isHTML(b)?"html":"text"](b),a.removeClass("fade in top bottom left right")},hide:function(){function d(){var b=setTimeout(function(){c.off(a.support.transition.end).remove()},500);c.one(a.support.transition.end,function(){clearTimeout(b),c.remove()})}var b=this,c=this.tip();c.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d():c.remove()},fixTitle:function(){var a=this.$element;(a.attr("title")||typeof a.attr("data-original-title")!="string")&&a.attr("data-original-title",a.attr("title")||"").removeAttr("title")},hasContent:function(){return this.getTitle()},getPosition:function(b){return a.extend({},b?{top:0,left:0}:this.$element.offset(),{width:this.$element[0].offsetWidth,height:this.$element[0].offsetHeight})},getTitle:function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||(typeof c.title=="function"?c.title.call(b[0]):c.title),a},tip:function(){return this.$tip=this.$tip||a(this.options.template)},validate:function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},toggleEnabled:function(){this.enabled=!this.enabled},toggle:function(){this[this.tip().hasClass("in")?"hide":"show"]()}},a.fn.tooltip=function(c){return this.each(function(){var d=a(this),e=d.data("tooltip"),f=typeof c=="object"&&c;e||d.data("tooltip",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.tooltip.Constructor=b,a.fn.tooltip.defaults={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover",title:"",delay:0}}(window.jQuery),!function(a){"use strict";var b=function(a,b){this.init("popover",a,b)};b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype,{constructor:b,setContent:function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.isHTML(b)?"html":"text"](b),a.find(".popover-content > *")[this.isHTML(c)?"html":"text"](c),a.removeClass("fade top bottom left right in")},hasContent:function(){return this.getTitle()||this.getContent()},getContent:function(){var a,b=this.$element,c=this.options;return a=b.attr("data-content")||(typeof c.content=="function"?c.content.call(b[0]):c.content),a},tip:function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip}}),a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("popover"),f=typeof c=="object"&&c;e||d.data("popover",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.popover.Constructor=b,a.fn.popover.defaults=a.extend({},a.fn.tooltip.defaults,{placement:"right",content:"",template:'<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>'})}(window.jQuery),!function(a){function b(b,c){var d=a.proxy(this.process,this),e=a(b).is("body")?a(window):a(b),f;this.options=a.extend({},a.fn.scrollspy.defaults,c),this.$scrollElement=e.on("scroll.scroll.data-api",d),this.selector=(this.options.target||(f=a(b).attr("href"))&&f.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.$body=a("body"),this.refresh(),this.process()}"use strict",b.prototype={constructor:b,refresh:function(){var b=this,c;this.offsets=a([]),this.targets=a([]),c=this.$body.find(this.selector).map(function(){var b=a(this),c=b.data("target")||b.attr("href"),d=/^#\w/.test(c)&&a(c);return d&&c.length&&[[d.position().top,c]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},process:function(){var a=this.$scrollElement.scrollTop()+this.options.offset,b=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,c=b-this.$scrollElement.height(),d=this.offsets,e=this.targets,f=this.activeTarget,g;if(a>=c)return f!=(g=e.last()[0])&&this.activate(g);for(g=d.length;g--;)f!=e[g]&&a>=d[g]&&(!d[g+1]||a<=d[g+1])&&this.activate(e[g])},activate:function(b){var c,d;this.activeTarget=b,a(this.selector).parent(".active").removeClass("active"),d=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',c=a(d).parent("li").addClass("active"),c.parent(".dropdown-menu")&&(c=c.closest("li.dropdown").addClass("active")),c.trigger("activate")}},a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("scrollspy"),f=typeof c=="object"&&c;e||d.data("scrollspy",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.defaults={offset:10},a(function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(window.jQuery),!function(a){"use strict";var b=function(b){this.element=a(b)};b.prototype={constructor:b,show:function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.attr("data-target"),e,f,g;d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,""));if(b.parent("li").hasClass("active"))return;e=c.find(".active a").last()[0],g=a.Event("show",{relatedTarget:e}),b.trigger(g);if(g.isDefaultPrevented())return;f=a(d),this.activate(b.parent("li"),c),this.activate(f,f.parent(),function(){b.trigger({type:"shown",relatedTarget:e})})},activate:function(b,c,d){function g(){e.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),f?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var e=c.find("> .active"),f=d&&a.support.transition&&e.hasClass("fade");f?e.one(a.support.transition.end,g):g(),e.removeClass("in")}},a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("tab");e||d.data("tab",e=new b(this)),typeof c=="string"&&e[c]()})},a.fn.tab.Constructor=b,a(function(){a("body").on("click.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.typeahead.defaults,c),this.matcher=this.options.matcher||this.matcher,this.sorter=this.options.sorter||this.sorter,this.highlighter=this.options.highlighter||this.highlighter,this.updater=this.options.updater||this.updater,this.$menu=a(this.options.menu).appendTo("body"),this.source=this.options.source,this.shown=!1,this.listen()};b.prototype={constructor:b,select:function(){var a=this.$menu.find(".active").attr("data-value");return this.$element.val(this.updater(a)).change(),this.hide()},updater:function(a){return a},show:function(){var b=a.extend({},this.$element.offset(),{height:this.$element[0].offsetHeight});return this.$menu.css({top:b.top+b.height,left:b.left}),this.$menu.show(),this.shown=!0,this},hide:function(){return this.$menu.hide(),this.shown=!1,this},lookup:function(b){var c=this,d,e;return this.query=this.$element.val(),this.query?(d=a.grep(this.source,function(a){return c.matcher(a)}),d=this.sorter(d),d.length?this.render(d.slice(0,this.options.items)).show():this.shown?this.hide():this):this.shown?this.hide():this},matcher:function(a){return~a.toLowerCase().indexOf(this.query.toLowerCase())},sorter:function(a){var b=[],c=[],d=[],e;while(e=a.shift())e.toLowerCase().indexOf(this.query.toLowerCase())?~e.indexOf(this.query)?c.push(e):d.push(e):b.push(e);return b.concat(c,d)},highlighter:function(a){var b=this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&");return a.replace(new RegExp("("+b+")","ig"),function(a,b){return"<strong>"+b+"</strong>"})},render:function(b){var c=this;return b=a(b).map(function(b,d){return b=a(c.options.item).attr("data-value",d),b.find("a").html(c.highlighter(d)),b[0]}),b.first().addClass("active"),this.$menu.html(b),this},next:function(b){var c=this.$menu.find(".active").removeClass("active"),d=c.next();d.length||(d=a(this.$menu.find("li")[0])),d.addClass("active")},prev:function(a){var b=this.$menu.find(".active").removeClass("active"),c=b.prev();c.length||(c=this.$menu.find("li").last()),c.addClass("active")},listen:function(){this.$element.on("blur",a.proxy(this.blur,this)).on("keypress",a.proxy(this.keypress,this)).on("keyup",a.proxy(this.keyup,this)),(a.browser.webkit||a.browser.msie)&&this.$element.on("keydown",a.proxy(this.keypress,this)),this.$menu.on("click",a.proxy(this.click,this)).on("mouseenter","li",a.proxy(this.mouseenter,this))},keyup:function(a){switch(a.keyCode){case 40:case 38:break;case 9:case 13:if(!this.shown)return;this.select();break;case 27:if(!this.shown)return;this.hide();break;default:this.lookup()}a.stopPropagation(),a.preventDefault()},keypress:function(a){if(!this.shown)return;switch(a.keyCode){case 9:case 13:case 27:a.preventDefault();break;case 38:if(a.type!="keydown")break;a.preventDefault(),this.prev();break;case 40:if(a.type!="keydown")break;a.preventDefault(),this.next()}a.stopPropagation()},blur:function(a){var b=this;setTimeout(function(){b.hide()},150)},click:function(a){a.stopPropagation(),a.preventDefault(),this.select()},mouseenter:function(b){this.$menu.find(".active").removeClass("active"),a(b.currentTarget).addClass("active")}},a.fn.typeahead=function(c){return this.each(function(){var d=a(this),e=d.data("typeahead"),f=typeof c=="object"&&c;e||d.data("typeahead",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.typeahead.defaults={source:[],items:8,menu:'<ul class="typeahead dropdown-menu"></ul>',item:'<li><a href="#"></a></li>'},a.fn.typeahead.Constructor=b,a(function(){a("body").on("focus.typeahead.data-api",'[data-provide="typeahead"]',function(b){var c=a(this);if(c.data("typeahead"))return;b.preventDefault(),c.typeahead(c.data())})})}(window.jQuery);
\ No newline at end of file
<%@ page
import="org.jivesoftware.openfire.plugin.married.JustMarriedPlugin"%>
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jstl/fmt_rt" prefix="fmt"%>
<jsp:useBean id="webManager" class="org.jivesoftware.util.WebManager" />
<%
webManager.init(request, response, session, application, out);
String oldName = request.getParameter("oldName");
String newName = request.getParameter("newName");
String keepCopy = request.getParameter("copy");
String newEmail = request.getParameter("email");
String newRealName = request.getParameter("realName");
%>
<html>
<head>
<title>Just married - name changer</title>
<meta name="pageID" content="justmarried" />
<meta name="helpPage" content="" />
<script src="./js/bootstrap.min.js" type="text/javascript"></script>
<link href="./css/bootstrap.min.css" rel="stylesheet" type="text/css">
</head>
<body>
<div class="jive-contentBoxHeader">Just married</div>
<div class="jive-contentBox">
<%
if (oldName != null && newName != null && oldName.trim().length() > 0 && newName.trim().length() > 0) {
boolean success = JustMarriedPlugin.changeName(oldName, newName, keepCopy == null ? true : false, newEmail, newRealName);
if (success) {
out.write("<div class=\"success\">Sucessfully renamed user " + oldName + " to " + newName
+ "!</div>");
} else {
out.write("<div class=\"error\">Something went wrong :-/. Please have a closer look to the error log!</div>");
}
} else {
%>
<form class="form-horizontal">
<fieldset>
<legend>Change the name here</legend>
<label class="control-label" for="input01">Current username*</label>
<div
<%out.write(oldName != null && oldName.length() == 0 ? "class=\"control-group error\""
: "class=\"controls\"");%>>
<input type="text" name="oldName" style="height:26px"
class="input-xlarge"
<%out.write(oldName != null && oldName.length() == 0 ? "id=\"inputError\"" : "id=\"input01\"");%>>
<p class="help-block">The current username e.g user.name
(without server)</p>
</div>
<label class="control-label" for="input01">New username*</label>
<div
<%out.write(newName != null && newName.length() == 0 ? "class=\"control-group error\""
: "class=\"controls\"");%>>
<input type="text" name="newName" style="height:26px"
class="input-xlarge"
<%out.write(newName != null && newName.length() == 0 ? "id=\"inputError\"" : "id=\"input01\"");%>>
<p class="help-block">The new username e.g user.newname
(without server)</p>
</div>
<label class="control-label" for="input01">New E-Mail address</label>
<div class="controls">
<input type="text" name="email" style="height:26px"
class="input-xlarge" id="input01">
<p class="help-block">New email address. Will copy address from old user if field is empty.</p>
</div>
<label class="control-label" for="input01">New Name</label>
<div class="controls">
<input type="text" name="realName" style="height:26px"
class="input-xlarge" id="input01">
<p class="help-block">Will copy name from old user if field is empty.</p>
</div>
<div class="control-group">
<label class="checkbox"> <input type="checkbox"
id="optionsCheckbox2" name="copy" value="keepCopy"> Keep a
copy of the old username
</label>
</div>
<div class="control-group">
<button type="submit" class="btn btn-primary">Rename user</button>
</div>
<p class="help-block">* Mandatory item</p>
</fieldset>
</form>
<%
}
%>
</div>
</body>
</html>
......@@ -148,6 +148,11 @@ hr {
</div>
<div id="pageBody">
<h2>2.3.1 -- <span style="font-weight: normal;">July 7, 2012</span></h2>
<ul>
<li>[<a href='http://issues.igniterealtime.org/browse/OF-564'>OF-564</a>] - User import/export plugin concatenates group names in export</li>
</ul>
<h2>2.3.0 -- <span style="font-weight: normal;">February 2, 2010</span></h2>
<ul>
<li>Now requires Openfire 3.7.0.</li>
......
......@@ -37,7 +37,7 @@
<xs:element name="Item">
<xs:complexType>
<xs:sequence>
<xs:element ref="Group" maxOccurs="unbounded" />
<xs:element ref="Group" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute ref="jid" use="required" />
<xs:attribute name="askstatus" use="required" />
......
......@@ -6,8 +6,8 @@
<name>User Import Export</name>
<description>Enables import and export of user data</description>
<author>Ryan Graham</author>
<version>2.3.0</version>
<date>2/19/2010</date>
<version>2.3.1</version>
<date>7/13/2012</date>
<minServerVersion>3.7.0</minServerVersion>
<adminconsole>
......
......@@ -194,11 +194,10 @@ public class ImportExportPlugin implements Plugin {
itemElement.addAttribute("substatus", String.valueOf(ri.getSubStatus().getValue()));
itemElement.addAttribute("name", ri.getNickname());
Element groupElement = itemElement.addElement("Group");
List<String> groups = ri.getGroups();
for (String group : groups) {
if (group != null && group.trim().length() > 0) {
groupElement.addText(group);
itemElement.addElement("Group").addText(group);
}
}
}
......
......@@ -36,13 +36,21 @@
Map<String, String> errorMap = new HashMap<String, String>();
boolean isEnabled = ParamUtils.getBooleanParameter(request, "httpBindEnabled",
serverManager.isHttpBindEnabled());
// CORS
boolean isCORSEnabled = ParamUtils.getBooleanParameter(request, "CORSEnabled",
serverManager.isCORSEnabled());
if (isEnabled) {
int requestedPort = ParamUtils.getIntParameter(request, "port",
serverManager.getHttpBindUnsecurePort());
int requestedSecurePort = ParamUtils.getIntParameter(request, "securePort",
serverManager.getHttpBindSecurePort());
// CORS
String CORSDomains = ParamUtils.getParameter(request, "CORSDomains", true);
try {
serverManager.setHttpBindPorts(requestedPort, requestedSecurePort);
// CORS
serverManager.setCORSEnabled(isCORSEnabled);
serverManager.setCORSAllowOrigin(CORSDomains);
}
catch (Exception e) {
Log.error("An error has occured configuring the HTTP binding ports", e);
......@@ -71,6 +79,8 @@
int port = serverManager.getHttpBindUnsecurePort();
int securePort = serverManager.getHttpBindSecurePort();
boolean isScriptSyntaxEnabled = serverManager.isScriptSyntaxEnabled();
// CORS
boolean isCORSEnabled = serverManager.isCORSEnabled();
%>
<%@page import="org.jivesoftware.openfire.http.FlashCrossDomainServlet"%><html>
......@@ -86,6 +96,9 @@
$("securePort").disabled = !enabled;
$("rb03").disabled = !enabled;
$("rb04").disabled = !enabled;
$("rb05").disabled = !enabled;
$("rb06").disabled = !enabled;
$("CORSDomains").disabled = !enabled;
$("crossdomain").disabled = !enabled;
}
window.onload = setTimeout("setEnabled()", 500);
......@@ -198,6 +211,53 @@
</tbody>
</table>
</div>
<!-- CORS -->
<div class="jive-contentBoxHeader">Provides support for CORS (Cross-Origin Resource Sharing)</div>
<div class="jive-contentbox">
<table cellpadding="3" cellspacing="0" border="0">
<tbody>
<tr valign="top">
<td width="1%" nowrap>
<input type="radio" name="CORSEnabled" value="true" id="rb05"
<%= (isCORSEnabled ? "checked" : "") %>>
</td>
<td width="99%">
<label for="rb05">
<b>Enabled</b> - Activate CORS support for cross domain scripting
</label>
<table border="0">
<tr>
<td>
<label for="CORSDomains">
Enter domain list below separated by commas or * to allow any :
</label>
</td>
</tr>
<tr>
<td>
<input id="CORSDomains" type="text" size="80" name="CORSDomains" value="<%= serverManager.getCORSAllowOrigin() %>">
</td>
</tr>
</table>
</td>
</tr>
<tr valign="top">
<td width="1%" nowrap>
<input type="radio" name="CORSEnabled" value="false" id="rb06"
<%= (!isCORSEnabled ? "checked" : "") %>>
</td>
<td width="99%">
<label for="rb06">
<b>Disabled</b> - Disable CORS support
</label>
</td>
</tr>
</tbody>
</table>
</div>
<!-- CORS -->
<div class="jive-contentBoxHeader">Cross-domain policy</div>
<div class="jive-contentbox">
<p><fmt:message key="httpbind.settings.crossdomain.info.general" /></p>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment