3.4.0 with Angular
@ -15,7 +15,7 @@
|
||||
# */
|
||||
#maxkey properties
|
||||
group =maxkey.top
|
||||
version =3.3.3
|
||||
version =3.4.0
|
||||
vendor =https://www.maxkey.top
|
||||
author =MaxKeyTop
|
||||
|
||||
|
||||
@ -20,7 +20,7 @@ package org.maxkey.authn;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
|
||||
import org.maxkey.authn.online.OnlineTicketServices;
|
||||
import org.maxkey.authn.online.OnlineTicketService;
|
||||
import org.maxkey.authn.realm.AbstractAuthenticationRealm;
|
||||
import org.maxkey.authn.support.rememberme.AbstractRemeberMeService;
|
||||
import org.maxkey.configuration.ApplicationConfig;
|
||||
@ -64,7 +64,7 @@ public abstract class AbstractAuthenticationProvider {
|
||||
|
||||
protected AbstractRemeberMeService remeberMeService;
|
||||
|
||||
protected OnlineTicketServices onlineTicketServices;
|
||||
protected OnlineTicketService onlineTicketServices;
|
||||
|
||||
public static ArrayList<GrantedAuthority> grantedAdministratorsAuthoritys = new ArrayList<GrantedAuthority>();
|
||||
|
||||
@ -380,7 +380,7 @@ public abstract class AbstractAuthenticationProvider {
|
||||
this.remeberMeService = remeberMeService;
|
||||
}
|
||||
|
||||
public void setOnlineTicketServices(OnlineTicketServices onlineTicketServices) {
|
||||
public void setOnlineTicketServices(OnlineTicketService onlineTicketServices) {
|
||||
this.onlineTicketServices = onlineTicketServices;
|
||||
}
|
||||
|
||||
|
||||
@ -0,0 +1,13 @@
|
||||
package org.maxkey.authn;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.Target;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
|
||||
@Target(ElementType.PARAMETER)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
public @interface CurrentUser {
|
||||
}
|
||||
@ -0,0 +1,34 @@
|
||||
package org.maxkey.authn;
|
||||
|
||||
import org.maxkey.entity.UserInfo;
|
||||
import org.maxkey.web.WebConstants;
|
||||
import org.springframework.core.MethodParameter;
|
||||
import org.springframework.security.core.Authentication;
|
||||
import org.springframework.web.bind.support.WebDataBinderFactory;
|
||||
import org.springframework.web.context.request.NativeWebRequest;
|
||||
import org.springframework.web.context.request.RequestAttributes;
|
||||
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
|
||||
import org.springframework.web.method.support.ModelAndViewContainer;
|
||||
import org.springframework.web.multipart.support.MissingServletRequestPartException;
|
||||
|
||||
public class CurrentUserMethodArgumentResolver implements HandlerMethodArgumentResolver {
|
||||
@Override
|
||||
public boolean supportsParameter(MethodParameter parameter) {
|
||||
return parameter.getParameterType().isAssignableFrom(UserInfo.class)
|
||||
&& parameter.hasParameterAnnotation(CurrentUser.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
|
||||
UserInfo userInfo = null;
|
||||
Authentication authentication = (Authentication ) webRequest.getAttribute(WebConstants.AUTHENTICATION, RequestAttributes.SCOPE_SESSION);
|
||||
if(authentication.getPrincipal() instanceof SigninPrincipal) {
|
||||
SigninPrincipal signinPrincipal = ((SigninPrincipal) authentication.getPrincipal());
|
||||
userInfo = signinPrincipal.getUserInfo();
|
||||
if (userInfo != null) {
|
||||
return userInfo;
|
||||
}
|
||||
}
|
||||
throw new MissingServletRequestPartException("currentUser");
|
||||
}
|
||||
}
|
||||
@ -20,7 +20,7 @@ package org.maxkey.authn;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.maxkey.authn.online.OnlineTicket;
|
||||
import org.maxkey.authn.online.OnlineTicketServices;
|
||||
import org.maxkey.authn.online.OnlineTicketService;
|
||||
import org.maxkey.authn.realm.AbstractAuthenticationRealm;
|
||||
import org.maxkey.authn.support.rememberme.AbstractRemeberMeService;
|
||||
import org.maxkey.configuration.ApplicationConfig;
|
||||
@ -66,7 +66,7 @@ public class RealmAuthenticationProvider extends AbstractAuthenticationProvider
|
||||
AbstractOtpAuthn tfaOtpAuthn,
|
||||
OtpAuthnService otpAuthnService,
|
||||
AbstractRemeberMeService remeberMeService,
|
||||
OnlineTicketServices onlineTicketServices) {
|
||||
OnlineTicketService onlineTicketServices) {
|
||||
this.authenticationRealm = authenticationRealm;
|
||||
this.applicationConfig = applicationConfig;
|
||||
this.tfaOtpAuthn = tfaOtpAuthn;
|
||||
@ -80,7 +80,7 @@ public class RealmAuthenticationProvider extends AbstractAuthenticationProvider
|
||||
|
||||
_logger.debug("authentication " + loginCredential);
|
||||
|
||||
sessionValid(loginCredential.getSessionId());
|
||||
//sessionValid(loginCredential.getSessionId());
|
||||
|
||||
//jwtTokenValid(j_jwtToken);
|
||||
|
||||
|
||||
@ -15,16 +15,18 @@
|
||||
*/
|
||||
|
||||
|
||||
package org.maxkey.web.interceptor;
|
||||
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
package org.maxkey.authn.interceptor;
|
||||
|
||||
import javax.servlet.RequestDispatcher;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.maxkey.authn.SigninPrincipal;
|
||||
import org.maxkey.authn.jwt.AuthJwtService;
|
||||
import org.maxkey.authn.online.OnlineTicket;
|
||||
import org.maxkey.authn.online.OnlineTicketService;
|
||||
import org.maxkey.configuration.ApplicationConfig;
|
||||
import org.maxkey.util.AuthorizationHeaderUtils;
|
||||
import org.maxkey.web.WebContext;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@ -47,7 +49,13 @@ public class PermissionAdapter implements AsyncHandlerInterceptor {
|
||||
@Qualifier("applicationConfig")
|
||||
private ApplicationConfig applicationConfig;
|
||||
|
||||
static ConcurrentHashMap<String ,String >navigationsMap=null;
|
||||
@Autowired
|
||||
@Qualifier("onlineTicketService")
|
||||
OnlineTicketService onlineTicketService;
|
||||
|
||||
@Autowired
|
||||
@Qualifier("authJwtService")
|
||||
AuthJwtService authJwtService ;
|
||||
|
||||
/*
|
||||
* 请求前处理
|
||||
@ -57,7 +65,16 @@ public class PermissionAdapter implements AsyncHandlerInterceptor {
|
||||
@Override
|
||||
public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {
|
||||
_logger.trace("PermissionAdapter preHandle");
|
||||
String authorization = AuthorizationHeaderUtils.resolveBearer(request);
|
||||
|
||||
if(authJwtService.validateJwtToken(authorization)) {
|
||||
String ticket = authJwtService.resolveTicket(authorization);
|
||||
if(WebContext.getAuthentication()==null) {
|
||||
OnlineTicket onlineTicket = onlineTicketService.get(ticket);
|
||||
if(onlineTicket != null) {
|
||||
WebContext.setAuthentication(onlineTicket.getAuthentication());
|
||||
}
|
||||
}
|
||||
//判断用户是否登录
|
||||
if(WebContext.getAuthentication()==null
|
||||
||WebContext.getAuthentication().getAuthorities()==null){//判断用户和角色,判断用户是否登录用户
|
||||
@ -74,6 +91,7 @@ public class PermissionAdapter implements AsyncHandlerInterceptor {
|
||||
dispatcher.forward(request, response);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
boolean hasAccess=true;
|
||||
|
||||
@ -0,0 +1 @@
|
||||
package org.maxkey.authn.interceptor;
|
||||
@ -0,0 +1,145 @@
|
||||
package org.maxkey.authn.jwt;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.maxkey.authn.SigninPrincipal;
|
||||
import org.springframework.security.core.Authentication;
|
||||
import org.springframework.security.core.GrantedAuthority;
|
||||
|
||||
public class AuthJwt {
|
||||
private String token;
|
||||
private String type = "Bearer";
|
||||
private String id;
|
||||
private String name;
|
||||
private String username;
|
||||
private String displayName;
|
||||
private String email;
|
||||
private String instId;
|
||||
private String instName;
|
||||
private List<String> authorities;
|
||||
|
||||
|
||||
public AuthJwt(String token, String id, String username, String displayName, String email, String instId,
|
||||
String instName, List<String> authorities) {
|
||||
this.token = token;
|
||||
this.id = id;
|
||||
this.name = username;
|
||||
this.username = username;
|
||||
this.displayName = displayName;
|
||||
this.email = email;
|
||||
this.instId = instId;
|
||||
this.instName = instName;
|
||||
this.authorities = authorities;
|
||||
}
|
||||
|
||||
public AuthJwt(String token, Authentication authentication) {
|
||||
SigninPrincipal signinPrincipal = ((SigninPrincipal)authentication.getPrincipal());
|
||||
|
||||
this.token = token;
|
||||
this.id = signinPrincipal.getUserInfo().getId();
|
||||
this.username = signinPrincipal.getUserInfo().getUsername();
|
||||
this.name = this.username;
|
||||
this.displayName = signinPrincipal.getUserInfo().getDisplayName();
|
||||
this.email = signinPrincipal.getUserInfo().getEmail();
|
||||
this.instId = signinPrincipal.getUserInfo().getInstId();
|
||||
this.instName = signinPrincipal.getUserInfo().getInstName();
|
||||
|
||||
this.authorities = new ArrayList<String>();
|
||||
for(GrantedAuthority grantedAuthority :authentication.getAuthorities()) {
|
||||
this.authorities.add(grantedAuthority.getAuthority());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public String getToken() {
|
||||
return token;
|
||||
}
|
||||
public void setToken(String token) {
|
||||
this.token = token;
|
||||
}
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
public void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
public void setId(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getUsername() {
|
||||
return username;
|
||||
}
|
||||
public void setUsername(String username) {
|
||||
this.username = username;
|
||||
}
|
||||
public String getDisplayName() {
|
||||
return displayName;
|
||||
}
|
||||
public void setDisplayName(String displayName) {
|
||||
this.displayName = displayName;
|
||||
}
|
||||
public String getEmail() {
|
||||
return email;
|
||||
}
|
||||
public void setEmail(String email) {
|
||||
this.email = email;
|
||||
}
|
||||
public String getInstId() {
|
||||
return instId;
|
||||
}
|
||||
public void setInstId(String instId) {
|
||||
this.instId = instId;
|
||||
}
|
||||
public String getInstName() {
|
||||
return instName;
|
||||
}
|
||||
public void setInstName(String instName) {
|
||||
this.instName = instName;
|
||||
}
|
||||
public List<String> getAuthorities() {
|
||||
return authorities;
|
||||
}
|
||||
public void setAuthorities(List<String> authorities) {
|
||||
this.authorities = authorities;
|
||||
}
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder builder = new StringBuilder();
|
||||
builder.append("AuthJwt [token=");
|
||||
builder.append(token);
|
||||
builder.append(", type=");
|
||||
builder.append(type);
|
||||
builder.append(", id=");
|
||||
builder.append(id);
|
||||
builder.append(", username=");
|
||||
builder.append(username);
|
||||
builder.append(", displayName=");
|
||||
builder.append(displayName);
|
||||
builder.append(", email=");
|
||||
builder.append(email);
|
||||
builder.append(", instId=");
|
||||
builder.append(instId);
|
||||
builder.append(", instName=");
|
||||
builder.append(instName);
|
||||
builder.append(", authorities=");
|
||||
builder.append(authorities);
|
||||
builder.append("]");
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,81 @@
|
||||
package org.maxkey.authn.jwt;
|
||||
|
||||
import java.text.ParseException;
|
||||
import java.util.Date;
|
||||
import org.joda.time.DateTime;
|
||||
import org.maxkey.authn.SigninPrincipal;
|
||||
import org.maxkey.configuration.AuthJwkConfig;
|
||||
import org.maxkey.crypto.jwt.HMAC512Service;
|
||||
import org.maxkey.entity.UserInfo;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.security.core.Authentication;
|
||||
|
||||
import com.nimbusds.jose.JOSEException;
|
||||
import com.nimbusds.jose.JWSAlgorithm;
|
||||
import com.nimbusds.jose.JWSHeader;
|
||||
import com.nimbusds.jwt.JWTClaimsSet;
|
||||
import com.nimbusds.jwt.SignedJWT;
|
||||
|
||||
public class AuthJwtService {
|
||||
private static final Logger _logger =
|
||||
LoggerFactory.getLogger(AuthJwtService.class);
|
||||
|
||||
HMAC512Service hmac512Service;
|
||||
|
||||
AuthJwkConfig authJwkConfig;
|
||||
|
||||
public AuthJwtService(AuthJwkConfig authJwkConfig) throws JOSEException {
|
||||
this.authJwkConfig = authJwkConfig;
|
||||
|
||||
this.hmac512Service = new HMAC512Service(authJwkConfig.getSecret());
|
||||
}
|
||||
|
||||
public String generateToken(Authentication authentication) {
|
||||
String token = "";
|
||||
SigninPrincipal signinPrincipal = ((SigninPrincipal)authentication.getPrincipal());
|
||||
UserInfo userInfo = signinPrincipal.getUserInfo();
|
||||
DateTime currentDateTime = DateTime.now();
|
||||
Date expirationTime = currentDateTime.plusSeconds(authJwkConfig.getExpires()).toDate();
|
||||
_logger.debug("expiration Time : {}" , expirationTime);
|
||||
String subject = signinPrincipal.getUsername();
|
||||
_logger.trace("jwt subject : {}" , subject);
|
||||
|
||||
JWTClaimsSet jwtClaims =new JWTClaimsSet.Builder()
|
||||
.issuer(authJwkConfig.getIssuer())
|
||||
.subject(subject)
|
||||
.jwtID(signinPrincipal.getOnlineTicket().getTicketId())
|
||||
.issueTime(currentDateTime.toDate())
|
||||
.expirationTime(expirationTime)
|
||||
.claim("locale", userInfo.getLocale())
|
||||
.claim("kid", HMAC512Service.MXK_AUTH_JWK)
|
||||
.claim("institution", userInfo.getInstId())
|
||||
.build();
|
||||
|
||||
_logger.trace("jwt Claims : {}" , jwtClaims);
|
||||
|
||||
SignedJWT jwtToken = new SignedJWT(
|
||||
new JWSHeader(JWSAlgorithm.HS512),
|
||||
jwtClaims);
|
||||
|
||||
token = hmac512Service.sign(jwtToken.getPayload());
|
||||
|
||||
return token ;
|
||||
}
|
||||
|
||||
public boolean validateJwtToken(String authToken) {
|
||||
return hmac512Service.verify(authToken);
|
||||
}
|
||||
|
||||
public JWTClaimsSet resolve(String authToken) throws ParseException {
|
||||
SignedJWT signedJWT = SignedJWT.parse(authToken);
|
||||
_logger.trace("jwt Claims : {}" , signedJWT.getJWTClaimsSet());
|
||||
return signedJWT.getJWTClaimsSet();
|
||||
}
|
||||
|
||||
public String resolveTicket(String authToken) throws ParseException {
|
||||
JWTClaimsSet claims = resolve(authToken);
|
||||
return claims.getJWTID();
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1 @@
|
||||
package org.maxkey.authn.jwt;
|
||||
@ -28,8 +28,8 @@ import com.github.benmanes.caffeine.cache.Cache;
|
||||
import com.github.benmanes.caffeine.cache.Caffeine;
|
||||
|
||||
|
||||
public class InMemoryOnlineTicketServices implements OnlineTicketServices{
|
||||
private static final Logger _logger = LoggerFactory.getLogger(InMemoryOnlineTicketServices.class);
|
||||
public class InMemoryOnlineTicketService implements OnlineTicketService{
|
||||
private static final Logger _logger = LoggerFactory.getLogger(InMemoryOnlineTicketService.class);
|
||||
|
||||
protected static Cache<String, OnlineTicket> onlineTicketStore =
|
||||
Caffeine.newBuilder()
|
||||
@ -37,7 +37,7 @@ public class InMemoryOnlineTicketServices implements OnlineTicketServices{
|
||||
.maximumSize(200000)
|
||||
.build();
|
||||
|
||||
public InMemoryOnlineTicketServices() {
|
||||
public InMemoryOnlineTicketService() {
|
||||
super();
|
||||
}
|
||||
|
||||
@ -19,7 +19,7 @@ package org.maxkey.authn.online;
|
||||
|
||||
import java.time.LocalTime;
|
||||
|
||||
public interface OnlineTicketServices {
|
||||
public interface OnlineTicketService {
|
||||
|
||||
public void store(String ticketId, OnlineTicket ticket);
|
||||
|
||||
@ -23,23 +23,23 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
|
||||
public class OnlineTicketServicesFactory {
|
||||
public class OnlineTicketServiceFactory {
|
||||
private static final Logger _logger =
|
||||
LoggerFactory.getLogger(OnlineTicketServicesFactory.class);
|
||||
LoggerFactory.getLogger(OnlineTicketServiceFactory.class);
|
||||
|
||||
public OnlineTicketServices getService(
|
||||
public OnlineTicketService getService(
|
||||
int persistence,
|
||||
JdbcTemplate jdbcTemplate,
|
||||
RedisConnectionFactory redisConnFactory){
|
||||
|
||||
OnlineTicketServices onlineTicketServices = null;
|
||||
OnlineTicketService onlineTicketServices = null;
|
||||
if (persistence == ConstsPersistence.INMEMORY) {
|
||||
onlineTicketServices = new InMemoryOnlineTicketServices();
|
||||
onlineTicketServices = new InMemoryOnlineTicketService();
|
||||
_logger.debug("InMemoryOnlineTicketServices");
|
||||
} else if (persistence == ConstsPersistence.JDBC) {
|
||||
_logger.debug("OnlineTicketServices not support ");
|
||||
} else if (persistence == ConstsPersistence.REDIS) {
|
||||
onlineTicketServices = new RedisOnlineTicketServices(redisConnFactory);
|
||||
onlineTicketServices = new RedisOnlineTicketService(redisConnFactory);
|
||||
_logger.debug("RedisOnlineTicketServices");
|
||||
}
|
||||
|
||||
@ -26,8 +26,8 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
|
||||
public class RedisOnlineTicketServices implements OnlineTicketServices {
|
||||
private static final Logger _logger = LoggerFactory.getLogger(RedisOnlineTicketServices.class);
|
||||
public class RedisOnlineTicketService implements OnlineTicketService {
|
||||
private static final Logger _logger = LoggerFactory.getLogger(RedisOnlineTicketService.class);
|
||||
|
||||
protected int serviceTicketValiditySeconds = 60 * 30; //default 30 minutes.
|
||||
|
||||
@ -37,7 +37,7 @@ public class RedisOnlineTicketServices implements OnlineTicketServices {
|
||||
/**
|
||||
* @param connectionFactory
|
||||
*/
|
||||
public RedisOnlineTicketServices(RedisConnectionFactory connectionFactory) {
|
||||
public RedisOnlineTicketService(RedisConnectionFactory connectionFactory) {
|
||||
super();
|
||||
this.connectionFactory = connectionFactory;
|
||||
}
|
||||
@ -45,7 +45,7 @@ public class RedisOnlineTicketServices implements OnlineTicketServices {
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public RedisOnlineTicketServices() {
|
||||
public RedisOnlineTicketService() {
|
||||
|
||||
}
|
||||
|
||||
@ -20,12 +20,14 @@ package org.maxkey.autoconfigure;
|
||||
import org.maxkey.authn.AbstractAuthenticationProvider;
|
||||
import org.maxkey.authn.RealmAuthenticationProvider;
|
||||
import org.maxkey.authn.SavedRequestAwareAuthenticationSuccessHandler;
|
||||
import org.maxkey.authn.online.OnlineTicketServices;
|
||||
import org.maxkey.authn.online.OnlineTicketServicesFactory;
|
||||
import org.maxkey.authn.jwt.AuthJwtService;
|
||||
import org.maxkey.authn.online.OnlineTicketService;
|
||||
import org.maxkey.authn.online.OnlineTicketServiceFactory;
|
||||
import org.maxkey.authn.realm.AbstractAuthenticationRealm;
|
||||
import org.maxkey.authn.support.rememberme.AbstractRemeberMeService;
|
||||
import org.maxkey.authn.support.rememberme.RemeberMeServiceFactory;
|
||||
import org.maxkey.configuration.ApplicationConfig;
|
||||
import org.maxkey.configuration.AuthJwkConfig;
|
||||
import org.maxkey.constants.ConstsPersistence;
|
||||
import org.maxkey.password.onetimepwd.AbstractOtpAuthn;
|
||||
import org.maxkey.password.onetimepwd.OtpAuthnService;
|
||||
@ -45,6 +47,8 @@ import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
|
||||
import com.nimbusds.jose.JOSEException;
|
||||
|
||||
|
||||
@Configuration
|
||||
public class AuthenticationAutoConfiguration implements InitializingBean {
|
||||
@ -65,7 +69,7 @@ public class AuthenticationAutoConfiguration implements InitializingBean {
|
||||
AbstractOtpAuthn tfaOtpAuthn,
|
||||
OtpAuthnService otpAuthnService,
|
||||
AbstractRemeberMeService remeberMeService,
|
||||
OnlineTicketServices onlineTicketServices
|
||||
OnlineTicketService onlineTicketServices
|
||||
) {
|
||||
|
||||
_logger.debug("init authentication Provider .");
|
||||
@ -80,6 +84,12 @@ public class AuthenticationAutoConfiguration implements InitializingBean {
|
||||
|
||||
}
|
||||
|
||||
@Bean(name = "authJwtService")
|
||||
public AuthJwtService authJwtService(AuthJwkConfig authJwkConfig) throws JOSEException {
|
||||
AuthJwtService authJwtService = new AuthJwtService(authJwkConfig);
|
||||
return authJwtService;
|
||||
}
|
||||
|
||||
@Bean(name = "otpAuthnService")
|
||||
public OtpAuthnService otpAuthnService(
|
||||
@Value("${maxkey.server.persistence}") int persistence,
|
||||
@ -127,18 +137,18 @@ public class AuthenticationAutoConfiguration implements InitializingBean {
|
||||
return new RemeberMeServiceFactory().getService(persistence, jdbcTemplate, redisConnFactory);
|
||||
}
|
||||
|
||||
@Bean(name = "onlineTicketServices")
|
||||
public OnlineTicketServices onlineTicketServices(
|
||||
@Bean(name = "onlineTicketService")
|
||||
public OnlineTicketService onlineTicketService(
|
||||
@Value("${maxkey.server.persistence}") int persistence,
|
||||
JdbcTemplate jdbcTemplate,
|
||||
RedisConnectionFactory redisConnFactory,
|
||||
@Value("${server.servlet.session.timeout:1800}") int timeout
|
||||
) {
|
||||
OnlineTicketServices onlineTicketServices =
|
||||
new OnlineTicketServicesFactory().getService(persistence, jdbcTemplate, redisConnFactory);
|
||||
onlineTicketServices.setValiditySeconds(timeout);
|
||||
OnlineTicketService onlineTicketService =
|
||||
new OnlineTicketServiceFactory().getService(persistence, jdbcTemplate, redisConnFactory);
|
||||
onlineTicketService.setValiditySeconds(timeout);
|
||||
_logger.trace("onlineTicket timeout " + timeout);
|
||||
return onlineTicketServices;
|
||||
return onlineTicketService;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -0,0 +1,75 @@
|
||||
package org.maxkey.crypto.jwt;
|
||||
|
||||
import java.text.ParseException;
|
||||
|
||||
import com.nimbusds.jose.JOSEException;
|
||||
import com.nimbusds.jose.JWSAlgorithm;
|
||||
import com.nimbusds.jose.JWSHeader;
|
||||
import com.nimbusds.jose.JWSObject;
|
||||
import com.nimbusds.jose.JWSSigner;
|
||||
import com.nimbusds.jose.Payload;
|
||||
import com.nimbusds.jose.crypto.MACSigner;
|
||||
import com.nimbusds.jose.crypto.MACVerifier;
|
||||
import com.nimbusds.jose.jwk.KeyUse;
|
||||
import com.nimbusds.jose.jwk.OctetSequenceKey;
|
||||
import com.nimbusds.jose.util.Base64URL;
|
||||
|
||||
public class HMAC512Service {
|
||||
|
||||
public final static String MXK_AUTH_JWK = "mxk_auth_jwk";
|
||||
|
||||
JWSSigner signer;
|
||||
|
||||
MACVerifier verifier;
|
||||
|
||||
public HMAC512Service() {
|
||||
super();
|
||||
}
|
||||
|
||||
public HMAC512Service(String secretString) throws JOSEException {
|
||||
Base64URL secret=new Base64URL(secretString);
|
||||
OctetSequenceKey octKey= new OctetSequenceKey.Builder(secret)
|
||||
.keyID(MXK_AUTH_JWK)
|
||||
.keyUse(KeyUse.SIGNATURE)
|
||||
.algorithm(JWSAlgorithm.HS512)
|
||||
.build();
|
||||
signer = new MACSigner(octKey);
|
||||
verifier = new MACVerifier(octKey);
|
||||
}
|
||||
|
||||
public String sign(Payload payload) {
|
||||
try {
|
||||
// Prepare JWS object with payload
|
||||
JWSObject jwsObject = new JWSObject(new JWSHeader(JWSAlgorithm.HS256), payload);
|
||||
// Apply the HMAC
|
||||
jwsObject.sign(signer);
|
||||
String jwt = jwsObject.serialize();
|
||||
return jwt;
|
||||
} catch (JOSEException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public String sign(String payload) {
|
||||
return sign(new Payload(payload));
|
||||
}
|
||||
|
||||
|
||||
public boolean verify(String jwt) {
|
||||
try {
|
||||
JWSObject jwsObjected =JWSObject.parse(jwt);
|
||||
boolean isVerifier = verifier.verify(
|
||||
jwsObjected.getHeader(),
|
||||
jwsObjected.getSigningInput(),
|
||||
jwsObjected.getSignature());
|
||||
return isVerifier;
|
||||
}catch(JOSEException JOSEException) {
|
||||
|
||||
}catch(ParseException ParseException) {
|
||||
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
88
maxkey-common/src/main/java/org/maxkey/entity/Message.java
Normal file
@ -0,0 +1,88 @@
|
||||
package org.maxkey.entity;
|
||||
|
||||
import org.springframework.http.ResponseEntity;
|
||||
|
||||
public class Message<T> {
|
||||
|
||||
public final static int SUCCESS = 0; //成功
|
||||
public final static int ERROR = 1; //错误
|
||||
public final static int FAIL = 2; //失败
|
||||
public final static int INFO = 101; //信息
|
||||
public final static int PROMPT = 102; //提示
|
||||
public final static int WARNING = 103; //警告
|
||||
|
||||
int code;
|
||||
|
||||
String message;
|
||||
|
||||
T data;
|
||||
|
||||
public Message() {
|
||||
this.code = SUCCESS;
|
||||
}
|
||||
|
||||
public Message(int code) {
|
||||
this.code = code;
|
||||
}
|
||||
public Message(T data) {
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
public Message(int code, String message) {
|
||||
this.code = code;
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
public Message(int code, String message, T data) {
|
||||
this.code = code;
|
||||
this.message = message;
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
public Message(int code, T data) {
|
||||
this.code = code;
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
public int getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public void setCode(int code) {
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
public String getMessage() {
|
||||
return message;
|
||||
}
|
||||
|
||||
public void setMessage(String message) {
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
public T getData() {
|
||||
return data;
|
||||
}
|
||||
|
||||
public void setData(T data) {
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
public ResponseEntity<?> buildResponse() {
|
||||
return ResponseEntity.ok(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder builder = new StringBuilder();
|
||||
builder.append("Message [code=");
|
||||
builder.append(code);
|
||||
builder.append(", message=");
|
||||
builder.append(message);
|
||||
builder.append(", data=");
|
||||
builder.append(data);
|
||||
builder.append("]");
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,18 @@
|
||||
package org.maxkey.crypto.signature;
|
||||
|
||||
import org.maxkey.crypto.jwt.HMAC512Service;
|
||||
|
||||
import com.nimbusds.jose.JOSEException;
|
||||
|
||||
public class HMAC512ServiceTest {
|
||||
|
||||
public static void main(String[] args) throws JOSEException {
|
||||
// TODO Auto-generated method stub
|
||||
String key ="7heM-14BtxjyKPuH3ITIm7q2-ps5MuBirWCsrrdbzzSAOuSPrbQYiaJ54AeA0uH2XdkYy3hHAkTFIsieGkyqxOJZ_dQzrCbaYISH9rhUZAKYx8tUY0wkE4ArOC6LqHDJarR6UIcMsARakK9U4dhoOPO1cj74XytemI-w6ACYfzRUn_Rn4e-CQMcnD1C56oNEukwalf06xVgXl41h6K8IBEzLVod58y_VfvFn-NGWpNG0fy_Qxng6dg8Dgva2DobvzMN2eejHGLGB-x809MvC4zbG7CKNVlcrzMYDt2Gt2sOVDrt2l9YqJNfgaLFjrOEVw5cuXemGkX1MvHj6TAsbLg";
|
||||
HMAC512Service HMAC512Service = new HMAC512Service(key);
|
||||
String jwt = HMAC512Service.sign("hkkkk");
|
||||
boolean isverify = HMAC512Service.verify(jwt);
|
||||
System.out.println(isverify);
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,49 @@
|
||||
package org.maxkey.crypto.signature;
|
||||
|
||||
import java.text.ParseException;
|
||||
|
||||
import com.nimbusds.jose.JOSEException;
|
||||
import com.nimbusds.jose.JWSAlgorithm;
|
||||
import com.nimbusds.jose.JWSHeader;
|
||||
import com.nimbusds.jose.JWSObject;
|
||||
import com.nimbusds.jose.JWSSigner;
|
||||
import com.nimbusds.jose.Payload;
|
||||
import com.nimbusds.jose.crypto.MACSigner;
|
||||
import com.nimbusds.jose.crypto.MACVerifier;
|
||||
import com.nimbusds.jose.jwk.KeyUse;
|
||||
import com.nimbusds.jose.jwk.OctetSequenceKey;
|
||||
import com.nimbusds.jose.util.Base64URL;
|
||||
|
||||
public class HS512SignerTest {
|
||||
|
||||
public static void main(String[] args) throws JOSEException, ParseException {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
Base64URL secret=new Base64URL(
|
||||
"7heM-14BtxjyKPuH3ITIm7q2-ps5MuBirWCsrrdbzzSAOuSPrbQYiaJ54AeA0uH2XdkYy3hHAkTFIsieGkyqxOJZ_dQzrCbaYISH9rhUZAKYx8tUY0wkE4ArOC6LqHDJarR6UIcMsARakK9U4dhoOPO1cj74XytemI-w6ACYfzRUn_Rn4e-CQMcnD1C56oNEukwalf06xVgXl41h6K8IBEzLVod58y_VfvFn-NGWpNG0fy_Qxng6dg8Dgva2DobvzMN2eejHGLGB-x809MvC4zbG7CKNVlcrzMYDt2Gt2sOVDrt2l9YqJNfgaLFjrOEVw5cuXemGkX1MvHj6TAsbLg"
|
||||
);
|
||||
OctetSequenceKey octKey= new OctetSequenceKey.Builder(secret)
|
||||
.keyID("mxk_auth_jwk_secret")
|
||||
.keyUse(KeyUse.SIGNATURE)
|
||||
.algorithm(JWSAlgorithm.HS512)
|
||||
.build();
|
||||
System.out.println(octKey.toJSONString());
|
||||
// Create HMAC signer
|
||||
JWSSigner signer = new MACSigner(octKey);
|
||||
|
||||
// Prepare JWS object with "Hello, world!" payload
|
||||
JWSObject jwsObject = new JWSObject(new JWSHeader(JWSAlgorithm.HS256), new Payload("Hello, world!"));
|
||||
|
||||
// Apply the HMAC
|
||||
jwsObject.sign(signer);
|
||||
String s = jwsObject.serialize();
|
||||
System.out.println(s);
|
||||
|
||||
JWSObject jwsObjected =JWSObject.parse(s);
|
||||
MACVerifier verifier = new MACVerifier(octKey);
|
||||
boolean isVerifier = verifier.verify(jwsObjected.getHeader(), jwsObjected.getSigningInput(), jwsObjected.getSignature());
|
||||
System.out.println(isVerifier);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -18,6 +18,7 @@
|
||||
package org.maxkey.autoconfigure;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import javax.servlet.Filter;
|
||||
@ -51,6 +52,9 @@ import org.springframework.http.converter.xml.MarshallingHttpMessageConverter;
|
||||
import org.springframework.oxm.jaxb.Jaxb2Marshaller;
|
||||
import org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
import org.springframework.web.cors.CorsConfiguration;
|
||||
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
|
||||
import org.springframework.web.filter.CorsFilter;
|
||||
import org.springframework.web.filter.DelegatingFilterProxy;
|
||||
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
|
||||
import org.springframework.web.servlet.LocaleResolver;
|
||||
@ -258,6 +262,22 @@ public class MvcAutoConfiguration implements InitializingBean , WebMvcConfigurer
|
||||
return new SecurityContextHolderAwareRequestFilter();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public FilterRegistrationBean<CorsFilter> corsFilter() {
|
||||
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
|
||||
CorsConfiguration corsConfiguration = new CorsConfiguration();
|
||||
corsConfiguration.setAllowCredentials(true);
|
||||
corsConfiguration.setAllowedOriginPatterns(Collections.singletonList(CorsConfiguration.ALL));
|
||||
corsConfiguration.addAllowedHeader(CorsConfiguration.ALL);
|
||||
corsConfiguration.addAllowedMethod(CorsConfiguration.ALL);
|
||||
source.registerCorsConfiguration("/**", corsConfiguration);
|
||||
FilterRegistrationBean<CorsFilter> bean = new FilterRegistrationBean<>();
|
||||
bean.setOrder(1);
|
||||
bean.setFilter(new CorsFilter(source));
|
||||
bean.addUrlPatterns("/*");
|
||||
return bean;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public FilterRegistrationBean<Filter> delegatingFilterProxy() {
|
||||
_logger.debug("delegatingFilterProxy init for /* ");
|
||||
@ -266,7 +286,7 @@ public class MvcAutoConfiguration implements InitializingBean , WebMvcConfigurer
|
||||
registrationBean.addUrlPatterns("/*");
|
||||
//registrationBean.
|
||||
registrationBean.setName("delegatingFilterProxy");
|
||||
registrationBean.setOrder(1);
|
||||
registrationBean.setOrder(2);
|
||||
|
||||
return registrationBean;
|
||||
}
|
||||
@ -277,11 +297,10 @@ public class MvcAutoConfiguration implements InitializingBean , WebMvcConfigurer
|
||||
FilterRegistrationBean<Filter> registrationBean = new FilterRegistrationBean<Filter>(new WebXssRequestFilter());
|
||||
registrationBean.addUrlPatterns("/*");
|
||||
registrationBean.setName("webXssRequestFilter");
|
||||
registrationBean.setOrder(2);
|
||||
registrationBean.setOrder(3);
|
||||
return registrationBean;
|
||||
}
|
||||
|
||||
|
||||
@Bean
|
||||
public FilterRegistrationBean<Filter> WebInstRequestFilter(
|
||||
InstitutionsRepository institutionsRepository,
|
||||
@ -291,7 +310,7 @@ public class MvcAutoConfiguration implements InitializingBean , WebMvcConfigurer
|
||||
new FilterRegistrationBean<Filter>(new WebInstRequestFilter(institutionsRepository,applicationConfig));
|
||||
registrationBean.addUrlPatterns("/*");
|
||||
registrationBean.setName("webInstRequestFilter");
|
||||
registrationBean.setOrder(3);
|
||||
registrationBean.setOrder(4);
|
||||
return registrationBean;
|
||||
}
|
||||
|
||||
|
||||
@ -0,0 +1,63 @@
|
||||
package org.maxkey.configuration;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
@Configuration
|
||||
public class AuthJwkConfig {
|
||||
|
||||
@Value("${maxkey.auth.jwt.issuer:https://sso.maxkey.top/}")
|
||||
String issuer;
|
||||
|
||||
@Value("${maxkey.auth.jwt.expires:86400}")
|
||||
int expires;
|
||||
|
||||
@Value("${maxkey.auth.jwt.secret}")
|
||||
String secret;
|
||||
|
||||
public AuthJwkConfig() {
|
||||
super();
|
||||
}
|
||||
|
||||
public String getIssuer() {
|
||||
return issuer;
|
||||
}
|
||||
|
||||
public void setIssuer(String issuer) {
|
||||
this.issuer = issuer;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public int getExpires() {
|
||||
return expires;
|
||||
}
|
||||
|
||||
public void setExpires(int expires) {
|
||||
this.expires = expires;
|
||||
}
|
||||
|
||||
public String getSecret() {
|
||||
return secret;
|
||||
}
|
||||
|
||||
public void setSecret(String secret) {
|
||||
this.secret = secret;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder builder = new StringBuilder();
|
||||
builder.append("AuthJwkConfig [issuer=");
|
||||
builder.append(issuer);
|
||||
builder.append(", expires=");
|
||||
builder.append(expires);
|
||||
builder.append(", secret=");
|
||||
builder.append(secret);
|
||||
builder.append("]");
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,7 +1,7 @@
|
||||
#端口号
|
||||
application:
|
||||
name: maxkey-gateway-server
|
||||
formatted-version: v3.3.3 GA
|
||||
formatted-version: v3.4.0 GA
|
||||
server:
|
||||
port: 9000
|
||||
spring:
|
||||
|
||||
@ -68,6 +68,7 @@
|
||||
and date(logintime) >date_add(curdate(), interval - day(curdate()) -31 day)
|
||||
group by reportstring
|
||||
order by reportcount desc
|
||||
limit 10
|
||||
</select>
|
||||
|
||||
<!-- 30天应用单点登录的访问统计 -->
|
||||
@ -79,6 +80,7 @@
|
||||
where instid = #{instId}
|
||||
and date(logintime) >date_add(curdate(), interval - day(curdate()) -31 day)
|
||||
group by appname order by reportcount desc
|
||||
limit 10
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
@ -18,7 +18,7 @@
|
||||
package org.maxkey.authz.endpoint;
|
||||
|
||||
import org.maxkey.authn.online.OnlineTicket;
|
||||
import org.maxkey.authn.online.OnlineTicketServices;
|
||||
import org.maxkey.authn.online.OnlineTicketService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.stereotype.Controller;
|
||||
@ -36,7 +36,7 @@ public class OnlineTicketEndpoint {
|
||||
|
||||
@Autowired
|
||||
@Qualifier("onlineTicketServices")
|
||||
protected OnlineTicketServices onlineTicketServices;
|
||||
protected OnlineTicketService onlineTicketServices;
|
||||
|
||||
@Operation(summary = "在线ticket验证接口", description = "",method="GET")
|
||||
@ResponseBody
|
||||
|
||||
@ -17,7 +17,7 @@
|
||||
|
||||
package org.maxkey.authz.cas.endpoint;
|
||||
|
||||
import org.maxkey.authn.online.OnlineTicketServices;
|
||||
import org.maxkey.authn.online.OnlineTicketService;
|
||||
import org.maxkey.authz.cas.endpoint.ticket.TicketServices;
|
||||
import org.maxkey.authz.endpoint.AuthorizeBaseEndpoint;
|
||||
import org.maxkey.persistence.service.AppsCasDetailsService;
|
||||
@ -50,7 +50,7 @@ public class CasBaseAuthorizeEndpoint extends AuthorizeBaseEndpoint{
|
||||
|
||||
@Autowired
|
||||
@Qualifier("onlineTicketServices")
|
||||
protected OnlineTicketServices onlineTicketServices;
|
||||
protected OnlineTicketService onlineTicketServices;
|
||||
|
||||
@Autowired
|
||||
@Qualifier("casProxyGrantingTicketServices")
|
||||
|
||||
@ -18,7 +18,7 @@
|
||||
application.title =MaxKey
|
||||
#for dynamic service discovery
|
||||
spring.application.name =maxkey-monitor
|
||||
application.formatted-version =v3.3.3 GA
|
||||
application.formatted-version =v3.4.0 GA
|
||||
#nacos discovery
|
||||
spring.cloud.nacos.discovery.enabled =${NACOS_DISCOVERY_ENABLED:false}
|
||||
spring.cloud.nacos.discovery.instance-enabled =false
|
||||
|
||||
@ -22,5 +22,4 @@ dependencies {
|
||||
implementation project(":maxkey-protocols:maxkey-protocol-saml-2.0")
|
||||
implementation project(":maxkey-protocols:maxkey-protocol-jwt")
|
||||
|
||||
implementation project(":maxkey-webs:maxkey-web-resources")
|
||||
}
|
||||
|
||||
@ -26,7 +26,7 @@ import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import org.maxkey.authn.SigninPrincipal;
|
||||
import org.maxkey.authn.online.OnlineTicket;
|
||||
import org.maxkey.authn.online.OnlineTicketServices;
|
||||
import org.maxkey.authn.online.OnlineTicketService;
|
||||
import org.maxkey.authn.realm.AbstractAuthenticationRealm;
|
||||
import org.maxkey.authz.singlelogout.SamlSingleLogout;
|
||||
import org.maxkey.authz.singlelogout.DefaultSingleLogout;
|
||||
@ -68,7 +68,7 @@ public class LogoutEndpoint {
|
||||
|
||||
@Autowired
|
||||
@Qualifier("onlineTicketServices")
|
||||
protected OnlineTicketServices onlineTicketServices;
|
||||
protected OnlineTicketService onlineTicketServices;
|
||||
|
||||
@Operation(summary = "单点注销接口", description = "reLoginUrl跳转地址",method="GET")
|
||||
@RequestMapping(value={"/logout"})
|
||||
|
||||
@ -20,7 +20,7 @@ package org.maxkey.web.historys.contorller;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import org.apache.mybatis.jpa.persistence.JpaPageResults;
|
||||
import org.maxkey.authn.online.OnlineTicketServices;
|
||||
import org.maxkey.authn.online.OnlineTicketService;
|
||||
import org.maxkey.constants.ConstsOperateMessage;
|
||||
import org.maxkey.entity.HistoryLogin;
|
||||
import org.maxkey.entity.UserInfo;
|
||||
@ -66,7 +66,7 @@ public class LoginSessionController {
|
||||
LoginHistoryRepository loginHistoryRepository;
|
||||
|
||||
@Autowired
|
||||
OnlineTicketServices onlineTicketServices;
|
||||
OnlineTicketService onlineTicketServices;
|
||||
|
||||
@RequestMapping(value = { "/sessionList" })
|
||||
public String authList() {
|
||||
|
||||
@ -25,7 +25,7 @@ import javax.servlet.http.HttpServletResponse;
|
||||
import org.maxkey.authn.SavedRequestAwareAuthenticationSuccessHandler;
|
||||
import org.maxkey.authn.SigninPrincipal;
|
||||
import org.maxkey.authn.online.OnlineTicket;
|
||||
import org.maxkey.authn.online.OnlineTicketServices;
|
||||
import org.maxkey.authn.online.OnlineTicketService;
|
||||
import org.maxkey.configuration.ApplicationConfig;
|
||||
import org.maxkey.constants.ConstsPasswordSetType;
|
||||
import org.maxkey.web.WebConstants;
|
||||
@ -63,8 +63,8 @@ public class PermissionAdapter implements AsyncHandlerInterceptor {
|
||||
static ConcurrentHashMap<String, String> navigationsMap = null;
|
||||
|
||||
@Autowired
|
||||
@Qualifier("onlineTicketServices")
|
||||
protected OnlineTicketServices onlineTicketServices;
|
||||
@Qualifier("onlineTicketService")
|
||||
protected OnlineTicketService onlineTicketService;
|
||||
|
||||
/*
|
||||
* 请求前处理 (non-Javadoc)
|
||||
@ -142,7 +142,7 @@ public class PermissionAdapter implements AsyncHandlerInterceptor {
|
||||
SigninPrincipal signinPrincipal = (SigninPrincipal)authentication.getPrincipal();
|
||||
//if onlineTicket refresh is removed or timeout then Exception
|
||||
OnlineTicket onlineTicket = signinPrincipal.getOnlineTicket();
|
||||
onlineTicketServices.refresh(onlineTicket.getTicketId());
|
||||
onlineTicketService.refresh(onlineTicket.getTicketId());
|
||||
}
|
||||
}catch(Exception e) {
|
||||
_logger.debug("Online Ticket timeout ... forward to /login");
|
||||
|
||||
@ -45,6 +45,10 @@ maxkey.server.persistence =${SERVER_PERSISTENCE:0}
|
||||
maxkey.server.message.queue =${SERVER_MESSAGE_QUEUE:none}
|
||||
#issuer name
|
||||
maxkey.app.issuer =CN=ConSec,CN=COM,CN=SH
|
||||
|
||||
maxkey.auth.jwt.expire =86400
|
||||
maxkey.auth.jwt.issuer =${maxkey.server.uri}
|
||||
maxkey.auth.jwt.secret =7heM-14BtxjyKPuH3ITIm7q2-ps5MuBirWCsrrdbzzSAOuSPrbQYiaJ54AeA0uH2XdkYy3hHAkTFIsieGkyqxOJZ_dQzrCbaYISH9rhUZAKYx8tUY0wkE4ArOC6LqHDJarR6UIcMsARakK9U4dhoOPO1cj74XytemI-w6ACYfzRUn_Rn4e-CQMcnD1C56oNEukwalf06xVgXl41h6K8IBEzLVod58y_VfvFn-NGWpNG0fy_Qxng6dg8Dgva2DobvzMN2eejHGLGB-x809MvC4zbG7CKNVlcrzMYDt2Gt2sOVDrt2l9YqJNfgaLFjrOEVw5cuXemGkX1MvHj6TAsbLg
|
||||
############################################################################
|
||||
#Login configuration #
|
||||
############################################################################
|
||||
|
||||
@ -46,6 +46,9 @@ maxkey.server.message.queue =${SERVER_MESSAGE_QUEUE:none}
|
||||
#issuer name
|
||||
maxkey.app.issuer =CN=ConSec,CN=COM,CN=SH
|
||||
|
||||
maxkey.auth.jwt.expire =86400
|
||||
maxkey.auth.jwt.issuer =${maxkey.server.uri}
|
||||
maxkey.auth.jwt.secret =7heM-14BtxjyKPuH3ITIm7q2-ps5MuBirWCsrrdbzzSAOuSPrbQYiaJ54AeA0uH2XdkYy3hHAkTFIsieGkyqxOJZ_dQzrCbaYISH9rhUZAKYx8tUY0wkE4ArOC6LqHDJarR6UIcMsARakK9U4dhoOPO1cj74XytemI-w6ACYfzRUn_Rn4e-CQMcnD1C56oNEukwalf06xVgXl41h6K8IBEzLVod58y_VfvFn-NGWpNG0fy_Qxng6dg8Dgva2DobvzMN2eejHGLGB-x809MvC4zbG7CKNVlcrzMYDt2Gt2sOVDrt2l9YqJNfgaLFjrOEVw5cuXemGkX1MvHj6TAsbLg
|
||||
############################################################################
|
||||
#Login configuration #
|
||||
############################################################################
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
#MaxKey Title and Version #
|
||||
############################################################################
|
||||
application.title =MaxKey
|
||||
application.formatted-version =v3.3.3 GA
|
||||
application.formatted-version =v3.4.0 GA
|
||||
#for dynamic service discovery
|
||||
spring.application.name =maxkey
|
||||
############################################################################
|
||||
|
||||
@ -27,5 +27,4 @@ dependencies {
|
||||
implementation project(":maxkey-synchronizers:maxkey-synchronizer-workweixin")
|
||||
implementation project(":maxkey-synchronizers:maxkey-synchronizer-dingtalk")
|
||||
|
||||
implementation project(":maxkey-webs:maxkey-web-resources")
|
||||
}
|
||||
@ -17,25 +17,30 @@
|
||||
|
||||
package org.maxkey;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.maxkey.authn.AbstractAuthenticationProvider;
|
||||
import org.maxkey.authn.CurrentUserMethodArgumentResolver;
|
||||
import org.maxkey.authn.interceptor.PermissionAdapter;
|
||||
import org.maxkey.authn.support.jwt.HttpJwtEntryPoint;
|
||||
import org.maxkey.authn.support.jwt.JwtLoginService;
|
||||
import org.maxkey.authn.support.rememberme.AbstractRemeberMeService;
|
||||
import org.maxkey.authn.support.rememberme.HttpRemeberMeEntryPoint;
|
||||
import org.maxkey.configuration.ApplicationConfig;
|
||||
import org.maxkey.web.interceptor.HistoryLogsAdapter;
|
||||
import org.maxkey.web.interceptor.PermissionAdapter;
|
||||
import org.maxkey.web.interceptor.RestApiPermissionAdapter;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
|
||||
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
|
||||
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
|
||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
|
||||
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
|
||||
|
||||
@Configuration
|
||||
@EnableWebMvc
|
||||
@ -110,7 +115,7 @@ public class MaxKeyMgtMvcConfig implements WebMvcConfigurer {
|
||||
.addPathPatterns("/login");
|
||||
|
||||
registry.addInterceptor(permissionAdapter)
|
||||
.addPathPatterns("/main/**")
|
||||
.addPathPatterns("/dashboard/**")
|
||||
.addPathPatterns("/orgs/**")
|
||||
.addPathPatterns("/userinfo/**")
|
||||
.addPathPatterns("/apps/**")
|
||||
@ -123,6 +128,7 @@ public class MaxKeyMgtMvcConfig implements WebMvcConfigurer {
|
||||
.addPathPatterns("/resources/**")
|
||||
.addPathPatterns("/permissions/**")
|
||||
.addPathPatterns("/config/**")
|
||||
.addPathPatterns("/config/**/**")
|
||||
.addPathPatterns("/logs/**")
|
||||
.addPathPatterns("/historys/**")
|
||||
.addPathPatterns("/historys/**/**")
|
||||
@ -131,9 +137,6 @@ public class MaxKeyMgtMvcConfig implements WebMvcConfigurer {
|
||||
.addPathPatterns("/accountsstrategy/**")
|
||||
.addPathPatterns("/institutions/**")
|
||||
.addPathPatterns("/localization/**")
|
||||
.addPathPatterns("/ldapcontext/**")
|
||||
.addPathPatterns("/emailsenders/**")
|
||||
.addPathPatterns("/smsprovider/**")
|
||||
.addPathPatterns("/synchronizers/**")
|
||||
|
||||
;
|
||||
@ -172,4 +175,14 @@ public class MaxKeyMgtMvcConfig implements WebMvcConfigurer {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
|
||||
argumentResolvers.add(currentUserMethodArgumentResolver());
|
||||
}
|
||||
|
||||
@Bean
|
||||
public CurrentUserMethodArgumentResolver currentUserMethodArgumentResolver() {
|
||||
return new CurrentUserMethodArgumentResolver();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -18,25 +18,24 @@
|
||||
package org.maxkey.web.contorller;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.maxkey.constants.ConstsOperateMessage;
|
||||
import org.maxkey.authn.CurrentUser;
|
||||
import org.maxkey.crypto.password.PasswordReciprocal;
|
||||
import org.maxkey.entity.EmailSenders;
|
||||
import org.maxkey.entity.Message;
|
||||
import org.maxkey.entity.UserInfo;
|
||||
import org.maxkey.persistence.service.EmailSendersService;
|
||||
import org.maxkey.web.WebContext;
|
||||
import org.maxkey.web.message.Message;
|
||||
import org.maxkey.web.message.MessageType;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.validation.BindingResult;
|
||||
import org.springframework.web.bind.annotation.ModelAttribute;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
@Controller
|
||||
@RequestMapping(value={"/emailsenders"})
|
||||
@RequestMapping(value={"/config/emailsenders"})
|
||||
public class EmailSendersController {
|
||||
|
||||
|
||||
@ -49,9 +48,9 @@ public class EmailSendersController {
|
||||
* 读取
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping(value={"/forward"})
|
||||
public ModelAndView forward(){
|
||||
EmailSenders emailSenders = emailSendersService.get(WebContext.getUserInfo().getInstId());
|
||||
@RequestMapping(value={"/get"})
|
||||
public ResponseEntity<?> get(@CurrentUser UserInfo currentUser){
|
||||
EmailSenders emailSenders = emailSendersService.get(currentUser.getInstId());
|
||||
if(emailSenders != null && StringUtils.isNotBlank(emailSenders.getCredentials())) {
|
||||
emailSenders.setCredentials(PasswordReciprocal.getInstance().decoder(emailSenders.getCredentials()));
|
||||
}else {
|
||||
@ -59,7 +58,7 @@ public class EmailSendersController {
|
||||
emailSenders.setProtocol("smtp");
|
||||
emailSenders.setEncoding("utf-8");
|
||||
}
|
||||
return new ModelAndView("emailsenders/updateEmailSenders","model",emailSenders);
|
||||
return new Message<EmailSenders>(emailSenders).buildResponse();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -69,24 +68,26 @@ public class EmailSendersController {
|
||||
*/
|
||||
@RequestMapping(value={"/update"})
|
||||
@ResponseBody
|
||||
public Message update(@ModelAttribute("emailSenders") EmailSenders emailSenders,BindingResult result) {
|
||||
public ResponseEntity<?> update( @RequestBody EmailSenders emailSenders,@CurrentUser UserInfo currentUser,BindingResult result) {
|
||||
_logger.debug("update emailSenders : "+emailSenders);
|
||||
emailSenders.setInstId(WebContext.getUserInfo().getInstId());
|
||||
emailSenders.setInstId(currentUser.getInstId());
|
||||
emailSenders.setCredentials(PasswordReciprocal.getInstance().encode(emailSenders.getCredentials()));
|
||||
boolean updateResult = false;
|
||||
if(StringUtils.isBlank(emailSenders.getId())) {
|
||||
emailSenders.setId(emailSenders.getInstId());
|
||||
updateResult = emailSendersService.insert(emailSenders);
|
||||
if(emailSendersService.insert(emailSenders)) {
|
||||
return new Message<EmailSenders>(Message.SUCCESS).buildResponse();
|
||||
}else {
|
||||
updateResult = emailSendersService.update(emailSenders);
|
||||
return new Message<EmailSenders>(Message.ERROR).buildResponse();
|
||||
}
|
||||
|
||||
if(updateResult) {
|
||||
return new Message(WebContext.getI18nValue(ConstsOperateMessage.UPDATE_SUCCESS),MessageType.success);
|
||||
}else {
|
||||
return new Message(WebContext.getI18nValue(ConstsOperateMessage.UPDATE_ERROR),MessageType.error);
|
||||
if(emailSendersService.update(emailSenders)) {
|
||||
return new Message<EmailSenders>(Message.SUCCESS).buildResponse();
|
||||
}else {
|
||||
return new Message<EmailSenders>(Message.ERROR).buildResponse();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -18,25 +18,25 @@
|
||||
package org.maxkey.web.contorller;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.maxkey.constants.ConstsOperateMessage;
|
||||
import org.maxkey.authn.CurrentUser;
|
||||
import org.maxkey.crypto.password.PasswordReciprocal;
|
||||
import org.maxkey.entity.LdapContext;
|
||||
import org.maxkey.entity.Message;
|
||||
import org.maxkey.entity.UserInfo;
|
||||
import org.maxkey.persistence.service.LdapContextService;
|
||||
import org.maxkey.web.WebContext;
|
||||
import org.maxkey.web.message.Message;
|
||||
import org.maxkey.web.message.MessageType;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.validation.BindingResult;
|
||||
import org.springframework.web.bind.annotation.ModelAttribute;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
@Controller
|
||||
@RequestMapping(value={"/ldapcontext"})
|
||||
@RequestMapping(value={"/config/ldapcontext"})
|
||||
public class LdapContextController {
|
||||
|
||||
|
||||
@ -49,13 +49,13 @@ public class LdapContextController {
|
||||
* 读取
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping(value={"/forward"})
|
||||
public ModelAndView forward(){
|
||||
LdapContext ldapContext = ldapContextService.get(WebContext.getUserInfo().getInstId());
|
||||
@RequestMapping(value={"/get"}, produces = {MediaType.APPLICATION_JSON_VALUE})
|
||||
public ResponseEntity<?> get(@CurrentUser UserInfo currentUser){
|
||||
LdapContext ldapContext = ldapContextService.get(currentUser.getInstId());
|
||||
if(ldapContext != null && StringUtils.isNoneBlank(ldapContext.getCredentials())) {
|
||||
ldapContext.setCredentials(PasswordReciprocal.getInstance().decoder(ldapContext.getCredentials()));
|
||||
}
|
||||
return new ModelAndView("ldapcontext/updateLdapContext","model",ldapContext);
|
||||
return new Message<LdapContext>(ldapContext).buildResponse();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -65,10 +65,10 @@ public class LdapContextController {
|
||||
*/
|
||||
@RequestMapping(value={"/update"})
|
||||
@ResponseBody
|
||||
public Message update(@ModelAttribute("ldapContext") LdapContext ldapContext,BindingResult result) {
|
||||
public ResponseEntity<?> update( @RequestBody LdapContext ldapContext,@CurrentUser UserInfo currentUser,BindingResult result) {
|
||||
_logger.debug("update ldapContext : "+ldapContext);
|
||||
ldapContext.setCredentials(PasswordReciprocal.getInstance().encode(ldapContext.getCredentials()));
|
||||
ldapContext.setInstId(WebContext.getUserInfo().getInstId());
|
||||
ldapContext.setInstId(currentUser.getInstId());
|
||||
boolean updateResult = false;
|
||||
if(StringUtils.isBlank(ldapContext.getId())) {
|
||||
ldapContext.setId(ldapContext.getInstId());
|
||||
@ -77,9 +77,9 @@ public class LdapContextController {
|
||||
updateResult = ldapContextService.update(ldapContext);
|
||||
}
|
||||
if(updateResult) {
|
||||
return new Message(WebContext.getI18nValue(ConstsOperateMessage.UPDATE_SUCCESS),MessageType.success);
|
||||
return new Message<LdapContext>(Message.SUCCESS).buildResponse();
|
||||
} else {
|
||||
return new Message(WebContext.getI18nValue(ConstsOperateMessage.UPDATE_ERROR),MessageType.error);
|
||||
return new Message<LdapContext>(Message.FAIL).buildResponse();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -19,22 +19,21 @@ package org.maxkey.web.contorller;
|
||||
|
||||
import javax.validation.Valid;
|
||||
|
||||
import org.maxkey.constants.ConstsOperateMessage;
|
||||
import org.maxkey.authn.CurrentUser;
|
||||
import org.maxkey.entity.Message;
|
||||
import org.maxkey.entity.PasswordPolicy;
|
||||
import org.maxkey.entity.UserInfo;
|
||||
import org.maxkey.persistence.service.PasswordPolicyService;
|
||||
import org.maxkey.web.WebContext;
|
||||
import org.maxkey.web.message.Message;
|
||||
import org.maxkey.web.message.MessageType;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.validation.BindingResult;
|
||||
import org.springframework.validation.FieldError;
|
||||
import org.springframework.web.bind.annotation.ModelAttribute;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
@Controller
|
||||
@RequestMapping(value={"/config/passwordpolicy"})
|
||||
@ -50,10 +49,10 @@ public class PasswordPolicyController {
|
||||
* 读取
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping(value={"/forward"})
|
||||
public ModelAndView sysConfig(){
|
||||
PasswordPolicy passwordPolicy = passwordPolicyService.get("1");
|
||||
return new ModelAndView("config/passwordpolicy/passwordpolicy","model",passwordPolicy);
|
||||
@RequestMapping(value={"/get"}, produces = {MediaType.APPLICATION_JSON_VALUE})
|
||||
public ResponseEntity<?> get(@CurrentUser UserInfo currentUser){
|
||||
PasswordPolicy passwordPolicy = passwordPolicyService.get(currentUser.getInstId());
|
||||
return new Message<PasswordPolicy>(passwordPolicy).buildResponse();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -61,18 +60,15 @@ public class PasswordPolicyController {
|
||||
* @param sysConfig
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping(value={"/update"})
|
||||
@ResponseBody
|
||||
public Message updatSysConfig(@Valid @ModelAttribute("passwordPolicy") PasswordPolicy passwordPolicy,BindingResult result) {
|
||||
@RequestMapping(value={"/update"}, produces = {MediaType.APPLICATION_JSON_VALUE})
|
||||
public ResponseEntity<?> update(@Valid @RequestBody PasswordPolicy passwordPolicy,@CurrentUser UserInfo currentUser,BindingResult result) {
|
||||
_logger.debug("updateRole passwordPolicy : "+passwordPolicy);
|
||||
Message message = this.validate(result, passwordPolicy);
|
||||
if(message != null) {
|
||||
return message;
|
||||
}
|
||||
//Message message = this.validate(result, passwordPolicy);
|
||||
|
||||
if(passwordPolicyService.update(passwordPolicy)) {
|
||||
return new Message(WebContext.getI18nValue(ConstsOperateMessage.UPDATE_SUCCESS),MessageType.success);
|
||||
return new Message<PasswordPolicy>(Message.SUCCESS).buildResponse();
|
||||
} else {
|
||||
return new Message(WebContext.getI18nValue(ConstsOperateMessage.UPDATE_ERROR),MessageType.error);
|
||||
return new Message<PasswordPolicy>(Message.ERROR).buildResponse();
|
||||
}
|
||||
}
|
||||
|
||||
@ -82,7 +78,7 @@ public class PasswordPolicyController {
|
||||
* @param passwordPolicy
|
||||
* @return
|
||||
*/
|
||||
private Message validate(BindingResult result,PasswordPolicy passwordPolicy) {
|
||||
public Message validate(BindingResult result,PasswordPolicy passwordPolicy) {
|
||||
if (result.hasErrors()) {
|
||||
return new Message(result);
|
||||
}
|
||||
|
||||
@ -18,28 +18,27 @@
|
||||
package org.maxkey.web.contorller;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.maxkey.constants.ConstsOperateMessage;
|
||||
import org.maxkey.authn.CurrentUser;
|
||||
import org.maxkey.crypto.password.PasswordReciprocal;
|
||||
import org.maxkey.entity.Message;
|
||||
import org.maxkey.entity.SmsProvider;
|
||||
import org.maxkey.entity.UserInfo;
|
||||
import org.maxkey.persistence.service.SmsProviderService;
|
||||
import org.maxkey.web.WebContext;
|
||||
import org.maxkey.web.message.Message;
|
||||
import org.maxkey.web.message.MessageType;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.validation.BindingResult;
|
||||
import org.springframework.web.bind.annotation.ModelAttribute;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
@Controller
|
||||
@RequestMapping(value={"/smsprovider"})
|
||||
@RequestMapping(value={"/config/smsprovider"})
|
||||
public class SmsProviderController {
|
||||
|
||||
|
||||
final static Logger _logger = LoggerFactory.getLogger(SmsProviderController.class);
|
||||
|
||||
@Autowired
|
||||
@ -49,13 +48,13 @@ public class SmsProviderController {
|
||||
* 读取
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping(value={"/forward"})
|
||||
public ModelAndView forward(){
|
||||
SmsProvider smsProvider = smsProviderService.get(WebContext.getUserInfo().getInstId());
|
||||
@RequestMapping(value={"/get"}, produces = {MediaType.APPLICATION_JSON_VALUE})
|
||||
public ResponseEntity<?> get(@CurrentUser UserInfo currentUser){
|
||||
SmsProvider smsProvider = smsProviderService.get(currentUser.getInstId());
|
||||
if(smsProvider != null && StringUtils.isNoneBlank(smsProvider.getId())) {
|
||||
smsProvider.setAppSecret(PasswordReciprocal.getInstance().decoder(smsProvider.getAppSecret()));
|
||||
}
|
||||
return new ModelAndView("smsprovider/updateSmsProvider","model",smsProvider);
|
||||
return new Message<SmsProvider>(smsProvider).buildResponse();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -65,10 +64,10 @@ public class SmsProviderController {
|
||||
*/
|
||||
@RequestMapping(value={"/update"})
|
||||
@ResponseBody
|
||||
public Message update(@ModelAttribute SmsProvider smsProvider,BindingResult result) {
|
||||
public ResponseEntity<?> update( @RequestBody SmsProvider smsProvider,@CurrentUser UserInfo currentUser,BindingResult result) {
|
||||
_logger.debug("update smsProvider : "+smsProvider);
|
||||
smsProvider.setAppSecret(PasswordReciprocal.getInstance().encode(smsProvider.getAppSecret()));
|
||||
smsProvider.setInstId(WebContext.getUserInfo().getInstId());
|
||||
smsProvider.setInstId(currentUser.getInstId());
|
||||
boolean updateResult = false;
|
||||
if(StringUtils.isBlank(smsProvider.getId())) {
|
||||
smsProvider.setId(smsProvider.getInstId());
|
||||
@ -77,9 +76,9 @@ public class SmsProviderController {
|
||||
updateResult = smsProviderService.update(smsProvider);
|
||||
}
|
||||
if(updateResult) {
|
||||
return new Message(WebContext.getI18nValue(ConstsOperateMessage.UPDATE_SUCCESS),MessageType.success);
|
||||
return new Message<SmsProvider>(Message.SUCCESS).buildResponse();
|
||||
} else {
|
||||
return new Message(WebContext.getI18nValue(ConstsOperateMessage.UPDATE_ERROR),MessageType.error);
|
||||
return new Message<SmsProvider>(Message.FAIL).buildResponse();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -19,16 +19,18 @@ package org.maxkey.web.endpoint;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
import org.maxkey.authn.CurrentUser;
|
||||
import org.maxkey.entity.Message;
|
||||
import org.maxkey.entity.UserInfo;
|
||||
import org.maxkey.persistence.service.ReportService;
|
||||
import org.maxkey.web.WebContext;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
/**
|
||||
* Index
|
||||
* @author Crystal.Sea
|
||||
@ -42,28 +44,24 @@ public class IndexEndpoint {
|
||||
@Qualifier("reportService")
|
||||
ReportService reportService;
|
||||
|
||||
@RequestMapping(value={"/main"})
|
||||
public ModelAndView home() {
|
||||
_logger.debug("IndexController /main.");
|
||||
ModelAndView mainMView=new ModelAndView("main");
|
||||
@RequestMapping(value={"/dashboard"}, produces = {MediaType.APPLICATION_JSON_VALUE})
|
||||
public ResponseEntity<?> dashboard(@CurrentUser UserInfo currentUser) {
|
||||
_logger.debug("IndexController /dashboard.");
|
||||
HashMap<String,Object> reportParameter = new HashMap<String,Object>();
|
||||
reportParameter.put("instId", WebContext.getUserInfo().getInstId());
|
||||
mainMView.addObject("rptDayCount", reportService.analysisDay(reportParameter));
|
||||
mainMView.addObject("rptNewUsers", reportService.analysisNewUsers(reportParameter));
|
||||
mainMView.addObject("rptOnlineUsers", reportService.analysisOnlineUsers(reportParameter));
|
||||
mainMView.addObject("rptActiveUsers", reportService.analysisActiveUsers(reportParameter));
|
||||
reportParameter.put("instId", currentUser.getInstId());
|
||||
|
||||
mainMView.addObject("rptMonth", reportService.analysisMonth(reportParameter));
|
||||
mainMView.addObject("rptDayHour", reportService.analysisDayHour(reportParameter));
|
||||
mainMView.addObject("rptBrowser", reportService.analysisBrowser(reportParameter));
|
||||
mainMView.addObject("rptApp", reportService.analysisApp(reportParameter));
|
||||
return mainMView;
|
||||
reportParameter.put("dayCount", reportService.analysisDay(reportParameter));
|
||||
reportParameter.put("newUsers", reportService.analysisNewUsers(reportParameter));
|
||||
|
||||
reportParameter.put("onlineUsers", reportService.analysisOnlineUsers(reportParameter));
|
||||
reportParameter.put("activeUsers", reportService.analysisActiveUsers(reportParameter));
|
||||
|
||||
reportParameter.put("reportMonth", reportService.analysisMonth(reportParameter));
|
||||
reportParameter.put("reportDayHour", reportService.analysisDayHour(reportParameter));
|
||||
|
||||
reportParameter.put("reportBrowser", reportService.analysisBrowser(reportParameter));
|
||||
reportParameter.put("reportApp", reportService.analysisApp(reportParameter));
|
||||
return new Message<HashMap<?,?>>(reportParameter).buildResponse();
|
||||
}
|
||||
|
||||
@RequestMapping(value={"/"})
|
||||
public ModelAndView index() {
|
||||
_logger.debug("IndexController /.");
|
||||
return new ModelAndView("index");
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -19,18 +19,24 @@ package org.maxkey.web.endpoint;
|
||||
|
||||
import org.maxkey.authn.AbstractAuthenticationProvider;
|
||||
import org.maxkey.authn.LoginCredential;
|
||||
import org.maxkey.authn.jwt.AuthJwt;
|
||||
import org.maxkey.authn.jwt.AuthJwtService;
|
||||
import org.maxkey.configuration.ApplicationConfig;
|
||||
import org.maxkey.entity.Institutions;
|
||||
import org.maxkey.entity.Message;
|
||||
import org.maxkey.web.WebConstants;
|
||||
import org.maxkey.web.WebContext;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.security.core.Authentication;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.ModelAttribute;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
import org.springframework.http.MediaType;
|
||||
|
||||
|
||||
/**
|
||||
@ -41,6 +47,10 @@ import org.springframework.web.servlet.ModelAndView;
|
||||
public class LoginEndpoint {
|
||||
private static Logger _logger = LoggerFactory.getLogger(LoginEndpoint.class);
|
||||
|
||||
@Autowired
|
||||
@Qualifier("authJwtService")
|
||||
AuthJwtService authJwtService;
|
||||
|
||||
@Autowired
|
||||
@Qualifier("applicationConfig")
|
||||
protected ApplicationConfig applicationConfig;
|
||||
@ -77,14 +87,11 @@ public class LoginEndpoint {
|
||||
return modelAndView;
|
||||
}
|
||||
|
||||
@RequestMapping(value={"/logon.do"})
|
||||
public ModelAndView logon(@ModelAttribute("loginCredential") LoginCredential loginCredential) {
|
||||
@RequestMapping(value={"/signin"}, produces = {MediaType.APPLICATION_JSON_VALUE})
|
||||
public ResponseEntity<?> signin( @RequestBody LoginCredential loginCredential) {
|
||||
Authentication authentication = authenticationProvider.authenticate(loginCredential);
|
||||
String jwt = authJwtService.generateToken(authentication);
|
||||
return new Message<AuthJwt>(new AuthJwt(jwt, authentication)).buildResponse();
|
||||
}
|
||||
|
||||
if(WebContext.isAuthenticated()){
|
||||
return WebContext.redirect("/main");
|
||||
}else{
|
||||
authenticationProvider.authenticate(loginCredential);
|
||||
return WebContext.redirect("/login");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -20,15 +20,18 @@ package org.maxkey.web.historys.contorller;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import org.apache.mybatis.jpa.persistence.JpaPageResults;
|
||||
import org.maxkey.authn.CurrentUser;
|
||||
import org.maxkey.entity.HistoryConnector;
|
||||
import org.maxkey.entity.Message;
|
||||
import org.maxkey.entity.UserInfo;
|
||||
import org.maxkey.persistence.service.HistoryConnectorService;
|
||||
import org.maxkey.util.DateUtils;
|
||||
import org.maxkey.web.WebContext;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.beans.propertyeditors.CustomDateEditor;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.WebDataBinder;
|
||||
import org.springframework.web.bind.annotation.InitBinder;
|
||||
@ -52,25 +55,22 @@ final static Logger _logger = LoggerFactory.getLogger(ConnectorHistoryController
|
||||
@Qualifier("historyConnectorService")
|
||||
HistoryConnectorService historyConnectorService;
|
||||
|
||||
|
||||
@RequestMapping(value={"/connectorHistoryList"})
|
||||
public String historySynchronizerList(){
|
||||
return "historys/connectorHistoryList";
|
||||
}
|
||||
|
||||
/**
|
||||
* @param historySynchronizer
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping(value={"/connectorHistoryList/grid"})
|
||||
@RequestMapping(value={"/connectorHistoryList/fetch"})
|
||||
@ResponseBody
|
||||
public JpaPageResults<HistoryConnector> historySynchronizerGrid(@ModelAttribute("historyConnector") HistoryConnector historyConnector){
|
||||
_logger.debug("historys/historyConnector/grid/ "+historyConnector);
|
||||
historyConnector.setInstId(WebContext.getUserInfo().getInstId());
|
||||
return historyConnectorService.queryPageResults(historyConnector);
|
||||
public ResponseEntity<?> fetch(
|
||||
@ModelAttribute("historyConnector") HistoryConnector historyConnector,
|
||||
@CurrentUser UserInfo currentUser){
|
||||
_logger.debug("historys/historyConnector/fetch/ {}",historyConnector);
|
||||
historyConnector.setInstId(currentUser.getInstId());
|
||||
return new Message<JpaPageResults<HistoryConnector>>(
|
||||
historyConnectorService.queryPageResults(historyConnector)
|
||||
).buildResponse();
|
||||
}
|
||||
|
||||
|
||||
@InitBinder
|
||||
public void initBinder(WebDataBinder binder) {
|
||||
SimpleDateFormat dateFormat = new SimpleDateFormat(DateUtils.FORMAT_DATE_HH_MM_SS);
|
||||
|
||||
@ -20,14 +20,17 @@ package org.maxkey.web.historys.contorller;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import org.apache.mybatis.jpa.persistence.JpaPageResults;
|
||||
import org.maxkey.authn.CurrentUser;
|
||||
import org.maxkey.entity.HistoryLoginApps;
|
||||
import org.maxkey.entity.Message;
|
||||
import org.maxkey.entity.UserInfo;
|
||||
import org.maxkey.persistence.service.HistoryLoginAppsService;
|
||||
import org.maxkey.util.DateUtils;
|
||||
import org.maxkey.web.WebContext;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.propertyeditors.CustomDateEditor;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.WebDataBinder;
|
||||
import org.springframework.web.bind.annotation.InitBinder;
|
||||
@ -50,26 +53,23 @@ final static Logger _logger = LoggerFactory.getLogger(LoginAppsHistoryController
|
||||
@Autowired
|
||||
protected HistoryLoginAppsService historyLoginAppsService;
|
||||
|
||||
|
||||
@RequestMapping(value={"/loginAppsHistoryList"})
|
||||
public String loginAppsHistoryList(){
|
||||
return "historys/loginAppsHistoryList";
|
||||
}
|
||||
|
||||
/**
|
||||
* @param loginAppsHistory
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping(value={"/loginAppsHistoryList/grid"})
|
||||
@RequestMapping(value={"/loginAppsHistoryList/fetch"})
|
||||
@ResponseBody
|
||||
public JpaPageResults<HistoryLoginApps> loginAppsHistoryGrid(@ModelAttribute("historyLoginApp") HistoryLoginApps historyLoginApp){
|
||||
_logger.debug("historys/loginAppsHistory/datagrid/ "+historyLoginApp);
|
||||
public ResponseEntity<?> fetch(
|
||||
@ModelAttribute("historyLoginApp") HistoryLoginApps historyLoginApp,
|
||||
@CurrentUser UserInfo currentUser){
|
||||
_logger.debug("historys/loginAppsHistory/fetch/ {}",historyLoginApp);
|
||||
historyLoginApp.setId(null);
|
||||
historyLoginApp.setInstId(WebContext.getUserInfo().getInstId());
|
||||
return historyLoginAppsService.queryPageResults(historyLoginApp);
|
||||
historyLoginApp.setInstId(currentUser.getInstId());
|
||||
return new Message<JpaPageResults<HistoryLoginApps>>(
|
||||
historyLoginAppsService.queryPageResults(historyLoginApp)
|
||||
).buildResponse();
|
||||
}
|
||||
|
||||
|
||||
@InitBinder
|
||||
public void initBinder(WebDataBinder binder) {
|
||||
SimpleDateFormat dateFormat = new SimpleDateFormat(DateUtils.FORMAT_DATE_HH_MM_SS);
|
||||
|
||||
@ -20,14 +20,17 @@ package org.maxkey.web.historys.contorller;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import org.apache.mybatis.jpa.persistence.JpaPageResults;
|
||||
import org.maxkey.authn.CurrentUser;
|
||||
import org.maxkey.entity.HistoryLogin;
|
||||
import org.maxkey.entity.Message;
|
||||
import org.maxkey.entity.UserInfo;
|
||||
import org.maxkey.persistence.service.HistoryLoginService;
|
||||
import org.maxkey.util.DateUtils;
|
||||
import org.maxkey.web.WebContext;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.propertyeditors.CustomDateEditor;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.WebDataBinder;
|
||||
import org.springframework.web.bind.annotation.InitBinder;
|
||||
@ -50,22 +53,21 @@ final static Logger _logger = LoggerFactory.getLogger(LoginHistoryController.cla
|
||||
@Autowired
|
||||
HistoryLoginService loginHistoryService;
|
||||
|
||||
|
||||
@RequestMapping(value={"/loginHistoryList"})
|
||||
public String loginHistoryList(){
|
||||
return "historys/loginHistoryList";
|
||||
}
|
||||
|
||||
/**
|
||||
* @param HistoryLogin
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping(value={"/loginHistoryList/grid"})
|
||||
@RequestMapping(value={"/loginHistoryList/fetch"})
|
||||
@ResponseBody
|
||||
public JpaPageResults<HistoryLogin> logAuthsGrid(@ModelAttribute("historyLogin") HistoryLogin historyLogin){
|
||||
_logger.debug("historys/loginHistory/datagrid/ "+historyLogin);
|
||||
historyLogin.setInstId(WebContext.getUserInfo().getInstId());
|
||||
return loginHistoryService.queryPageResults(historyLogin);
|
||||
public ResponseEntity<?> fetch(
|
||||
@ModelAttribute("historyLogin") HistoryLogin historyLogin,
|
||||
@CurrentUser UserInfo currentUser
|
||||
){
|
||||
_logger.debug("historys/loginHistory/fetch/ {}",historyLogin);
|
||||
historyLogin.setInstId(currentUser.getInstId());
|
||||
return new Message<JpaPageResults<HistoryLogin>>(
|
||||
loginHistoryService.queryPageResults(historyLogin)
|
||||
).buildResponse();
|
||||
}
|
||||
|
||||
@InitBinder
|
||||
|
||||
@ -20,9 +20,10 @@ package org.maxkey.web.historys.contorller;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import org.apache.mybatis.jpa.persistence.JpaPageResults;
|
||||
import org.maxkey.authn.online.OnlineTicketServices;
|
||||
import org.maxkey.constants.ConstsOperateMessage;
|
||||
import org.maxkey.authn.CurrentUser;
|
||||
import org.maxkey.authn.online.OnlineTicketService;
|
||||
import org.maxkey.entity.HistoryLogin;
|
||||
import org.maxkey.entity.Message;
|
||||
import org.maxkey.entity.UserInfo;
|
||||
import org.maxkey.persistence.repository.LoginHistoryRepository;
|
||||
import org.maxkey.persistence.repository.LoginRepository;
|
||||
@ -31,12 +32,11 @@ import org.maxkey.util.DateUtils;
|
||||
import org.maxkey.util.StringUtils;
|
||||
import org.maxkey.web.WebConstants;
|
||||
import org.maxkey.web.WebContext;
|
||||
import org.maxkey.web.message.Message;
|
||||
import org.maxkey.web.message.MessageType;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.propertyeditors.CustomDateEditor;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.WebDataBinder;
|
||||
import org.springframework.web.bind.annotation.InitBinder;
|
||||
@ -66,12 +66,7 @@ public class LoginSessionController {
|
||||
LoginHistoryRepository loginHistoryRepository;
|
||||
|
||||
@Autowired
|
||||
OnlineTicketServices onlineTicketServices;
|
||||
|
||||
@RequestMapping(value = { "/sessionList" })
|
||||
public String authList() {
|
||||
return "historys/sessionList";
|
||||
}
|
||||
OnlineTicketService onlineTicketServices;
|
||||
|
||||
/**
|
||||
* 查询登录日志.
|
||||
@ -79,19 +74,23 @@ public class LoginSessionController {
|
||||
* @param logsAuth
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping(value = { "/sessionList/grid" })
|
||||
@RequestMapping(value = { "/sessionList/fetch" })
|
||||
@ResponseBody
|
||||
public JpaPageResults<HistoryLogin> loginSessionListGrid(@ModelAttribute("historyLogin") HistoryLogin historyLogin) {
|
||||
_logger.debug("history/session/ sessionListGrid() " + historyLogin);
|
||||
public ResponseEntity<?> fetch(
|
||||
@ModelAttribute("historyLogin") HistoryLogin historyLogin,
|
||||
@CurrentUser UserInfo currentUser) {
|
||||
_logger.debug("history/session/fetch {}" , historyLogin);
|
||||
historyLogin.setInstId(WebContext.getUserInfo().getInstId());
|
||||
return historyLoginService.queryOnlineSession(historyLogin);
|
||||
return new Message<JpaPageResults<HistoryLogin>>(
|
||||
historyLoginService.queryPageResults(historyLogin)
|
||||
).buildResponse();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ResponseBody
|
||||
@RequestMapping(value="/terminate")
|
||||
public Message deleteUsersById(@RequestParam("id") String ids) {
|
||||
public ResponseEntity<?> deleteUsersById(@RequestParam("id") String ids,@CurrentUser UserInfo currentUser) {
|
||||
_logger.debug(ids);
|
||||
boolean isTerminated = false;
|
||||
try {
|
||||
@ -104,9 +103,8 @@ public class LoginSessionController {
|
||||
if(currentUserSessionId.contains(sessionId)) {
|
||||
continue;//skip current session
|
||||
}
|
||||
UserInfo userInfo = WebContext.getUserInfo();
|
||||
String lastLogoffTime = DateUtils.formatDateTime(new Date());
|
||||
loginRepository.updateLastLogoff(userInfo);
|
||||
loginRepository.updateLastLogoff(currentUser);
|
||||
loginHistoryRepository.logoff(lastLogoffTime, sessionId);
|
||||
onlineTicketServices.remove("OT-" + sessionId);
|
||||
}
|
||||
@ -116,9 +114,9 @@ public class LoginSessionController {
|
||||
}
|
||||
|
||||
if(isTerminated) {
|
||||
return new Message(WebContext.getI18nValue(ConstsOperateMessage.DELETE_SUCCESS),MessageType.success);
|
||||
return new Message<HistoryLogin>(Message.SUCCESS).buildResponse();
|
||||
} else {
|
||||
return new Message(WebContext.getI18nValue(ConstsOperateMessage.DELETE_ERROR),MessageType.error);
|
||||
return new Message<HistoryLogin>(Message.ERROR).buildResponse();
|
||||
}
|
||||
}
|
||||
@InitBinder
|
||||
|
||||
@ -20,15 +20,18 @@ package org.maxkey.web.historys.contorller;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import org.apache.mybatis.jpa.persistence.JpaPageResults;
|
||||
import org.maxkey.authn.CurrentUser;
|
||||
import org.maxkey.entity.HistorySynchronizer;
|
||||
import org.maxkey.entity.Message;
|
||||
import org.maxkey.entity.UserInfo;
|
||||
import org.maxkey.persistence.service.HistorySynchronizerService;
|
||||
import org.maxkey.util.DateUtils;
|
||||
import org.maxkey.web.WebContext;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.beans.propertyeditors.CustomDateEditor;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.WebDataBinder;
|
||||
import org.springframework.web.bind.annotation.InitBinder;
|
||||
@ -52,25 +55,22 @@ final static Logger _logger = LoggerFactory.getLogger(SynchronizerHistoryControl
|
||||
@Qualifier("historySynchronizerService")
|
||||
HistorySynchronizerService historySynchronizerService;
|
||||
|
||||
|
||||
@RequestMapping(value={"/synchronizerHistoryList"})
|
||||
public String historySynchronizerList(){
|
||||
return "historys/synchronizerHistoryList";
|
||||
}
|
||||
|
||||
/**
|
||||
* @param historySynchronizer
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping(value={"/synchronizerHistoryList/grid"})
|
||||
@RequestMapping(value={"/synchronizerHistoryList/fetch"})
|
||||
@ResponseBody
|
||||
public JpaPageResults<HistorySynchronizer> historySynchronizerGrid(@ModelAttribute("historySynchronizer") HistorySynchronizer historySynchronizer){
|
||||
_logger.debug("historys/synchronizerHistory/grid/ "+historySynchronizer);
|
||||
historySynchronizer.setInstId(WebContext.getUserInfo().getInstId());
|
||||
return historySynchronizerService.queryPageResults(historySynchronizer);
|
||||
public ResponseEntity<?> fetch(
|
||||
@ModelAttribute("historySynchronizer") HistorySynchronizer historySynchronizer,
|
||||
@CurrentUser UserInfo currentUser){
|
||||
_logger.debug("historys/synchronizerHistory/fetch/ {}",historySynchronizer);
|
||||
historySynchronizer.setInstId(currentUser.getInstId());
|
||||
return new Message<JpaPageResults<HistorySynchronizer>>(
|
||||
historySynchronizerService.queryPageResults(historySynchronizer)
|
||||
).buildResponse();
|
||||
}
|
||||
|
||||
|
||||
@InitBinder
|
||||
public void initBinder(WebDataBinder binder) {
|
||||
SimpleDateFormat dateFormat = new SimpleDateFormat(DateUtils.FORMAT_DATE_HH_MM_SS);
|
||||
|
||||
@ -20,14 +20,17 @@ package org.maxkey.web.historys.contorller;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import org.apache.mybatis.jpa.persistence.JpaPageResults;
|
||||
import org.maxkey.authn.CurrentUser;
|
||||
import org.maxkey.entity.HistoryLogs;
|
||||
import org.maxkey.entity.Message;
|
||||
import org.maxkey.entity.UserInfo;
|
||||
import org.maxkey.persistence.service.HistorySystemLogsService;
|
||||
import org.maxkey.util.DateUtils;
|
||||
import org.maxkey.web.WebContext;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.propertyeditors.CustomDateEditor;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.WebDataBinder;
|
||||
import org.springframework.web.bind.annotation.InitBinder;
|
||||
@ -50,28 +53,22 @@ final static Logger _logger = LoggerFactory.getLogger(SystemLogsController.class
|
||||
@Autowired
|
||||
HistorySystemLogsService historySystemLogsService;
|
||||
|
||||
|
||||
@RequestMapping(value={"/systemLogsList"})
|
||||
public String List(){
|
||||
return "historys/systemLogsList";
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询操作日志
|
||||
* @param logs
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping(value={"/systemLogsList/grid"})
|
||||
@RequestMapping(value={"/systemLogsList/fetch"})
|
||||
@ResponseBody
|
||||
public JpaPageResults<HistoryLogs> logsDataGrid(@ModelAttribute("historyLog") HistoryLogs historyLog){
|
||||
_logger.debug("historys/historyLog/ logsGrid() "+historyLog);
|
||||
historyLog.setInstId(WebContext.getUserInfo().getInstId());
|
||||
return historySystemLogsService.queryPageResults(historyLog);
|
||||
public ResponseEntity<?> fetch(@ModelAttribute("historyLog") HistoryLogs historyLog,
|
||||
@CurrentUser UserInfo currentUser){
|
||||
_logger.debug("historys/historyLog/fetch {} ",historyLog);
|
||||
historyLog.setInstId(currentUser.getInstId());
|
||||
return new Message<JpaPageResults<HistoryLogs>>(
|
||||
historySystemLogsService.queryPageResults(historyLog)
|
||||
).buildResponse();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@InitBinder
|
||||
public void initBinder(WebDataBinder binder) {
|
||||
SimpleDateFormat dateFormat = new SimpleDateFormat(DateUtils.FORMAT_DATE_HH_MM_SS);
|
||||
|
||||
@ -40,6 +40,9 @@ maxkey.server.persistence =0
|
||||
#identity none, Kafka ,RocketMQ
|
||||
maxkey.server.message.queue =${SERVER_MESSAGE_QUEUE:none}
|
||||
|
||||
maxkey.auth.jwt.expire =86400
|
||||
maxkey.auth.jwt.issuer =${maxkey.server.uri}
|
||||
maxkey.auth.jwt.secret =7heM-14BtxjyKPuH3ITIm7q2-ps5MuBirWCsrrdbzzSAOuSPrbQYiaJ54AeA0uH2XdkYy3hHAkTFIsieGkyqxOJZ_dQzrCbaYISH9rhUZAKYx8tUY0wkE4ArOC6LqHDJarR6UIcMsARakK9U4dhoOPO1cj74XytemI-w6ACYfzRUn_Rn4e-CQMcnD1C56oNEukwalf06xVgXl41h6K8IBEzLVod58y_VfvFn-NGWpNG0fy_Qxng6dg8Dgva2DobvzMN2eejHGLGB-x809MvC4zbG7CKNVlcrzMYDt2Gt2sOVDrt2l9YqJNfgaLFjrOEVw5cuXemGkX1MvHj6TAsbLg
|
||||
############################################################################
|
||||
#Login configuration #
|
||||
############################################################################
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
#MaxKey Title and Version #
|
||||
############################################################################
|
||||
application.title =MaxKey-Mgt
|
||||
application.formatted-version =v3.3.3 GA
|
||||
application.formatted-version =v3.4.0 GA
|
||||
#for dynamic service discovery
|
||||
spring.application.name =maxkey-mgt
|
||||
############################################################################
|
||||
|
||||
@ -1,8 +0,0 @@
|
||||
description = "maxkey-web-resources"
|
||||
|
||||
//add support for Java
|
||||
apply plugin: 'java'
|
||||
|
||||
dependencies {
|
||||
|
||||
}
|
||||
@ -1,186 +0,0 @@
|
||||
# artDialog
|
||||
===========
|
||||
|
||||
###### 优雅的web对话框控件
|
||||
|
||||
artDialog 是一个精心设计的对话框控件,它拥有精致的界面与易用的编程接口。
|
||||
|
||||
**演示与文档:**
|
||||
|
||||
<http://aui.github.com/artDialog/>
|
||||
|
||||
## 概述
|
||||
|
||||
artDialog 是一个精心设计的 web 对话框控件,它继承与延伸了桌面对话框的特性,拥有细致的用户体验与精致的界面。artDialog 基于 LGPL 协议开源,无论是个人还是商业项目都可免费使用。
|
||||
|
||||
## 特点
|
||||
|
||||
#### 1. 自适应内容尺寸
|
||||
|
||||
> 对话框采用特殊UI结构,无论使用AJAX异步填充内容还是类似tabs等控件导致内容变化,对话框均可自动自适应内容尺寸。
|
||||
|
||||
#### 2. 智能文本对齐
|
||||
|
||||
> 如果设置了对话框宽度(包括用户通过调节把柄改变了尺寸),对话框中的文本会自动居中或者居左对齐,这些都是使用用CSS实现的。
|
||||
|
||||
#### 3. 黄金比例垂直居中
|
||||
|
||||
> 对话框默认会采用黄金比例垂直居中弹出,正如网页中重要的内容会被安排在垂直黄金区域一样,这样更舒适。
|
||||
|
||||
#### 4. 可定位到元素附近
|
||||
|
||||
> 宽屏笔记本用户已经逐渐成为主流,很多时候大幅度的移动鼠标操作也是一个麻烦的事情(尤其是使用触控板),artDialog支持设置在onclick事件触发源弹出,以让用户操作更加便捷。
|
||||
|
||||
#### 5. 支持键盘操作
|
||||
|
||||
> * ESC键可关闭对话框。
|
||||
|
||||
> * 若有确定按钮,焦点默认停留在确定按钮上,否则停留在右上角关闭按钮上。
|
||||
|
||||
> * 对话框关闭后焦点将恢复至原来的元素。
|
||||
|
||||
### 6. 支持信息无障碍(ARIA)
|
||||
|
||||
> 支持读屏器操作,让盲人能够平等的获取信息。
|
||||
|
||||
|
||||
### 7. 友好的API
|
||||
|
||||
> 在保持小巧的程序体积之外,artDialog提供了丰富的可选配置与方法。它的API风格统一,简单易用,稍微阅读文档一个示例即可举一反三。
|
||||
|
||||
## 用户
|
||||
|
||||
* 腾讯
|
||||
* 盛大
|
||||
* 中国移动
|
||||
* 中国电信
|
||||
* ...
|
||||
|
||||
## 更新记录
|
||||
|
||||
### 5.0.4
|
||||
|
||||
1. 取消 focus 参数,对话框能自动处理
|
||||
2. 取消鸡肋的 esc 参数
|
||||
3. 给关闭按钮增加 title,以便让读屏器正常发音(感谢 @杨永全 老师的建议)
|
||||
4. 解决 iframe 页面中上一版报错问题(ie8,9)#26 #21
|
||||
|
||||
### 5.0.3
|
||||
|
||||
1. **支持信息无障碍(ARIA)**
|
||||
2. 锁屏可限制焦点元素保持在对话框内
|
||||
3. 对话框关闭后焦点将恢复至原来的元素
|
||||
|
||||
### 5.0.2
|
||||
|
||||
1. 修复居中可能导致左边框显示不出的问题
|
||||
2. 取消点击遮罩对话框恢复居中的特性
|
||||
|
||||
### 5.0.1
|
||||
|
||||
1. 修正重复调用 close 方法出现的错误
|
||||
2. 修正设定了follow后再使用content()方法导致其居中的问题
|
||||
|
||||
### 5.0.0
|
||||
|
||||
[重新回到当初的理念:简单、优雅]
|
||||
|
||||
1. follow 不再支持 String 类型
|
||||
2. button 参数只支持 Array 类型
|
||||
3. button name 成员改成 value
|
||||
4. button 增加 id 成员
|
||||
5. okVal 参数更名为 okValue, 默认值由 '确定' 改为 'ok'
|
||||
6. cancelVal 参数更名为 cancelValue, 默认值由 '取消' 改为 'cancel'
|
||||
6. close 参数更名为 beforeunload
|
||||
7. init 参数更名为 initialize
|
||||
8. title 参数默认值由 '消息' 改为 'message'
|
||||
9. time 参数与方法参数单位由秒改为毫秒
|
||||
10. hide 参数方法更名为 hidden
|
||||
11. 内部为皮肤增加动态样式 d-state-visible 类
|
||||
12. 给遮罩增添样式 d-mask 类
|
||||
13. background 参数被取消, 由 CSS 文件定义
|
||||
14. opacity 参数被取消, 由 CSS 文件定义
|
||||
15. **取消拖动特性,改由插件支持**
|
||||
16. 取消 left 与 top 参数
|
||||
17. 取消对 ie6 提供 fixed 支持,自动转换为 absolute
|
||||
18. 取消对 ie6 提供 alpha png 支持
|
||||
19. 取消对 ie6 提供 select 标签遮盖支持
|
||||
20. 增加 focus 参数
|
||||
21. 取消 position 方法
|
||||
22. 取消对 ``<script type="text/dialog"></script>`` 的支持
|
||||
23. **取消对 iframe 的支持**
|
||||
24. title 方法不支持空参数
|
||||
25. content 方法不支持空参数
|
||||
26. button 方法的参数不支持数组类型
|
||||
27. 判断 DOCTYPE, 对 xhtml1.0 以下的页面报告错误
|
||||
28. 修复 IE8 动态等新内容时没有撑开对话框高度,特意为 ie8 取消 .d-content { display:inline-block }
|
||||
29. show 参数与方法更名为 visible
|
||||
|
||||
### 4.0.0
|
||||
|
||||
[严谨的跨浏览器支持、对框架应用提供强大的api支持]
|
||||
|
||||
源码:<http://code.google.com/p/artdialog/>
|
||||
|
||||
1. 修复刷新框架后脚本报错的问题
|
||||
2. 修复异步加载 artDialog.js 导致锁屏无法使用的问题
|
||||
3. 双击遮罩不再直接关闭,而是等同于关闭按钮与取消按钮
|
||||
4. 修复 IE6 在特殊情况下可能因为 fixed 定位出现 body 背景图片异常
|
||||
5. 修复部分皮肤在 firefox7.0 版下,标题栏出现省略号的问题
|
||||
6. 修复 v4.0.5 之后版本在浏览器窗口调节的时候可能出现对话框变形问题
|
||||
7. top 参数黄金比例不再采用单独的关键字,可使用 '38.2%' 表示
|
||||
8. **新增 content 扩展方法写入消息后,让对话框以自身为中心放大的特性**
|
||||
9. 增加高亮按钮的样式:确定按钮默认高亮(自定义按钮可使用focus参数高亮)
|
||||
10. 解决IE浏览器按钮字体模糊问题
|
||||
11. jQuery版本最低兼容jQuery 1.3.2
|
||||
12. 新增artDialog 基本版本;它只拥有核心功能,文件只有常规版本的一半大小,可被客户端快速载入
|
||||
13. 精简内嵌事件系统,进一步减少体积(压缩版比上一版本少近了3kb)
|
||||
14. iframeTools: open方法默认不再强制锁屏
|
||||
15. 增强icon参数自由度,不再依赖对话框样式文件定义。可存入任意图标到“skins/icons/”并使用它们
|
||||
16. iframeTools: 拖拽操作增加透明遮罩,防止鼠标指针落入框架而导致监听失败,提高拖拽流畅性
|
||||
17. iframeTools: 对open方法增加一个私有的iframe扩展方法,用来引用其创建的iframe对象
|
||||
18. 新增点击内容部分也可以如点击标题一样置顶对话框的特性
|
||||
19. iframeTools: 增加父页面刷新与关闭后子对话框也将关闭的特性。(由于iframe注销后其产生的对象会被大多数浏览器在内存中移除,增加此特性可以有效的解决对话框报错)
|
||||
20. **DOM底层api兼容jQuery api,同步发行jQuery版本**
|
||||
21. **消息内容支持传入DOM元素**
|
||||
22. 增加title标题接口
|
||||
23. 增加button自定义按钮接口
|
||||
24. 增加lock与unlock接口
|
||||
25. 新增data方法用来在iframe之间共享数据
|
||||
26. 重定义zIndex配置参数
|
||||
27. 重新支持调节对话框大小
|
||||
28. 支持用第三方框架加载自身
|
||||
29. **配置参数全部为可选,如果没有content,它将出现loading动画**
|
||||
30. left与top关键字用百分比代替,同时增加width与height传递百分比参数
|
||||
31. 更好的支持iframe
|
||||
32. 修复若干BUG
|
||||
|
||||
### 3.0.0
|
||||
|
||||
[初次支持框架]
|
||||
|
||||
1. 修复iPad或iPhone下使用锁屏焦点自动弹出的问题
|
||||
2. 修复移动设备使用手势缩放页面带来的漂移问题
|
||||
3. 修复fixed在移动设备中支持不完整的问题
|
||||
4. 修复window.top是框架集(frameset)页面可能会带来无限循环递归的问题
|
||||
5. 增加art.dialog.get()方法获取指定ID对话框API
|
||||
6. 修复框架集(frameset)页面不能植入artDialog而产生js报错的问题,并增加了其支持
|
||||
7. 公开默认配置的读写
|
||||
8. 重写IE6 fixed实现
|
||||
|
||||
### 2.0.0
|
||||
|
||||
[进一步封装]
|
||||
|
||||
1. **支持多对话框共存**
|
||||
2. 支持返回扩展方法关闭对话框
|
||||
3. 解决v1已知的一些BUG
|
||||
|
||||
### 1.0.0
|
||||
|
||||
[诞生]
|
||||
|
||||
1. **高度与宽度支持原生自适应内容,自适应文本对齐**
|
||||
2. 支持拖动、Esc关闭对话框、坐标定位
|
||||
3. **支持自适应位置**
|
||||
4. **支持IE6无抖动静止定位**
|
||||
@ -1 +0,0 @@
|
||||
(function(c){c.alert=c.dialog.alert=function(b,a){return c.dialog({id:"Alert",fixed:!0,lock:!0,content:b,ok:!0,beforeunload:a})};c.confirm=c.dialog.confirm=function(b,a,m){return c.dialog({id:"Confirm",fixed:!0,lock:!0,content:b,ok:a,cancel:m})};c.prompt=c.dialog.prompt=function(b,a,m){var d;return c.dialog({id:"Prompt",fixed:!0,lock:!0,content:['<div style="margin-bottom:5px;font-size:12px">',b,'</div><div><input type="text" class="d-input-text" value="',m||"",'" style="width:18em;padding:6px 4px" /></div>'].join(""),initialize:function(){d=this.dom.content.find(".d-input-text")[0];d.select();d.focus()},ok:function(){return a&&a.call(this,d.value)},cancel:function(){}})};c.dialog.prototype.shake=function(){var b=function(a,b,c){var h=+new Date,e=setInterval(function(){var f=(+new Date-h)/c;1<=f?(clearInterval(e),b(f)):a(f)},13)},a=function(c,d,g,h){var e=h;void 0===e&&(e=6,g/=e);var f=parseInt(c.style.marginLeft)||0;b(function(a){c.style.marginLeft=f+(d-f)*a+"px"},function(){0!==e&&a(c,1===e?0:1.3*(d/e-d),g,--e)},g)};return function(){a(this.dom.wrap[0],40,600);return this}}();var o=function(){var b=this,a=function(a){var c=b[a];b[a]=function(){return c.apply(b,arguments)}};a("start");a("over");a("end")};o.prototype={start:function(b){c(document).bind("mousemove",this.over).bind("mouseup",this.end);this._sClientX=b.clientX;this._sClientY=b.clientY;this.onstart(b.clientX,b.clientY);return!1},over:function(b){this._mClientX=b.clientX;this._mClientY=b.clientY;this.onover(b.clientX-this._sClientX,b.clientY-this._sClientY);return!1},end:function(b){c(document).unbind("mousemove",this.over).unbind("mouseup",this.end);this.onend(b.clientX,b.clientY);return!1}};var j=c(window),k=c(document),i=document.documentElement,p=!!("minWidth"in i.style)&&"onlosecapture"in i,q="setCapture"in i,r=function(){return!1},n=function(b){var a=new o,c=artDialog.focus,d=c.dom,g=d.wrap,h=d.title,e=g[0],f=h[0],i=d.main[0],l=e.style,s=i.style,t=b.target===d.se[0]?!0:!1,u=(d="fixed"===e.style.position)?0:k.scrollLeft(),v=d?0:k.scrollTop(),n=j.width()-e.offsetWidth+u,A=j.height()-e.offsetHeight+v,w,x,y,z;a.onstart=function(){t?(w=i.offsetWidth,x=i.offsetHeight):(y=e.offsetLeft,z=e.offsetTop);k.bind("dblclick",a.end).bind("dragstart",r);p?h.bind("losecapture",a.end):j.bind("blur",a.end);q&&f.setCapture();g.addClass("d-state-drag");c.focus()};a.onover=function(a,b){if(t){var c=a+w,d=b+x;l.width="auto";s.width=Math.max(0,c)+"px";l.width=e.offsetWidth+"px";s.height=Math.max(0,d)+"px"}else c=Math.max(u,Math.min(n,a+y)),d=Math.max(v,Math.min(A,b+z)),l.left=c+"px",l.top=d+"px"};a.onend=function(){k.unbind("dblclick",a.end).unbind("dragstart",r);p?h.unbind("losecapture",a.end):j.unbind("blur",a.end);q&&f.releaseCapture();g.removeClass("d-state-drag")};a.start(b)};c(document).bind("mousedown",function(b){var a=artDialog.focus;if(a){var c=b.target,d=a.config,a=a.dom;if(!1!==d.drag&&c===a.title[0]||!1!==d.resize&&c===a.se[0])return n(b),!1}})})(this.art||this.jQuery);
|
||||
@ -1,165 +0,0 @@
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
|
||||
This version of the GNU Lesser General Public License incorporates
|
||||
the terms and conditions of version 3 of the GNU General Public
|
||||
License, supplemented by the additional permissions listed below.
|
||||
|
||||
0. Additional Definitions.
|
||||
|
||||
As used herein, "this License" refers to version 3 of the GNU Lesser
|
||||
General Public License, and the "GNU GPL" refers to version 3 of the GNU
|
||||
General Public License.
|
||||
|
||||
"The Library" refers to a covered work governed by this License,
|
||||
other than an Application or a Combined Work as defined below.
|
||||
|
||||
An "Application" is any work that makes use of an interface provided
|
||||
by the Library, but which is not otherwise based on the Library.
|
||||
Defining a subclass of a class defined by the Library is deemed a mode
|
||||
of using an interface provided by the Library.
|
||||
|
||||
A "Combined Work" is a work produced by combining or linking an
|
||||
Application with the Library. The particular version of the Library
|
||||
with which the Combined Work was made is also called the "Linked
|
||||
Version".
|
||||
|
||||
The "Minimal Corresponding Source" for a Combined Work means the
|
||||
Corresponding Source for the Combined Work, excluding any source code
|
||||
for portions of the Combined Work that, considered in isolation, are
|
||||
based on the Application, and not on the Linked Version.
|
||||
|
||||
The "Corresponding Application Code" for a Combined Work means the
|
||||
object code and/or source code for the Application, including any data
|
||||
and utility programs needed for reproducing the Combined Work from the
|
||||
Application, but excluding the System Libraries of the Combined Work.
|
||||
|
||||
1. Exception to Section 3 of the GNU GPL.
|
||||
|
||||
You may convey a covered work under sections 3 and 4 of this License
|
||||
without being bound by section 3 of the GNU GPL.
|
||||
|
||||
2. Conveying Modified Versions.
|
||||
|
||||
If you modify a copy of the Library, and, in your modifications, a
|
||||
facility refers to a function or data to be supplied by an Application
|
||||
that uses the facility (other than as an argument passed when the
|
||||
facility is invoked), then you may convey a copy of the modified
|
||||
version:
|
||||
|
||||
a) under this License, provided that you make a good faith effort to
|
||||
ensure that, in the event an Application does not supply the
|
||||
function or data, the facility still operates, and performs
|
||||
whatever part of its purpose remains meaningful, or
|
||||
|
||||
b) under the GNU GPL, with none of the additional permissions of
|
||||
this License applicable to that copy.
|
||||
|
||||
3. Object Code Incorporating Material from Library Header Files.
|
||||
|
||||
The object code form of an Application may incorporate material from
|
||||
a header file that is part of the Library. You may convey such object
|
||||
code under terms of your choice, provided that, if the incorporated
|
||||
material is not limited to numerical parameters, data structure
|
||||
layouts and accessors, or small macros, inline functions and templates
|
||||
(ten or fewer lines in length), you do both of the following:
|
||||
|
||||
a) Give prominent notice with each copy of the object code that the
|
||||
Library is used in it and that the Library and its use are
|
||||
covered by this License.
|
||||
|
||||
b) Accompany the object code with a copy of the GNU GPL and this license
|
||||
document.
|
||||
|
||||
4. Combined Works.
|
||||
|
||||
You may convey a Combined Work under terms of your choice that,
|
||||
taken together, effectively do not restrict modification of the
|
||||
portions of the Library contained in the Combined Work and reverse
|
||||
engineering for debugging such modifications, if you also do each of
|
||||
the following:
|
||||
|
||||
a) Give prominent notice with each copy of the Combined Work that
|
||||
the Library is used in it and that the Library and its use are
|
||||
covered by this License.
|
||||
|
||||
b) Accompany the Combined Work with a copy of the GNU GPL and this license
|
||||
document.
|
||||
|
||||
c) For a Combined Work that displays copyright notices during
|
||||
execution, include the copyright notice for the Library among
|
||||
these notices, as well as a reference directing the user to the
|
||||
copies of the GNU GPL and this license document.
|
||||
|
||||
d) Do one of the following:
|
||||
|
||||
0) Convey the Minimal Corresponding Source under the terms of this
|
||||
License, and the Corresponding Application Code in a form
|
||||
suitable for, and under terms that permit, the user to
|
||||
recombine or relink the Application with a modified version of
|
||||
the Linked Version to produce a modified Combined Work, in the
|
||||
manner specified by section 6 of the GNU GPL for conveying
|
||||
Corresponding Source.
|
||||
|
||||
1) Use a suitable shared library mechanism for linking with the
|
||||
Library. A suitable mechanism is one that (a) uses at run time
|
||||
a copy of the Library already present on the user's computer
|
||||
system, and (b) will operate properly with a modified version
|
||||
of the Library that is interface-compatible with the Linked
|
||||
Version.
|
||||
|
||||
e) Provide Installation Information, but only if you would otherwise
|
||||
be required to provide such information under section 6 of the
|
||||
GNU GPL, and only to the extent that such information is
|
||||
necessary to install and execute a modified version of the
|
||||
Combined Work produced by recombining or relinking the
|
||||
Application with a modified version of the Linked Version. (If
|
||||
you use option 4d0, the Installation Information must accompany
|
||||
the Minimal Corresponding Source and Corresponding Application
|
||||
Code. If you use option 4d1, you must provide the Installation
|
||||
Information in the manner specified by section 6 of the GNU GPL
|
||||
for conveying Corresponding Source.)
|
||||
|
||||
5. Combined Libraries.
|
||||
|
||||
You may place library facilities that are a work based on the
|
||||
Library side by side in a single library together with other library
|
||||
facilities that are not Applications and are not covered by this
|
||||
License, and convey such a combined library under terms of your
|
||||
choice, if you do both of the following:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work based
|
||||
on the Library, uncombined with any other library facilities,
|
||||
conveyed under the terms of this License.
|
||||
|
||||
b) Give prominent notice with the combined library that part of it
|
||||
is a work based on the Library, and explaining where to find the
|
||||
accompanying uncombined form of the same work.
|
||||
|
||||
6. Revised Versions of the GNU Lesser General Public License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions
|
||||
of the GNU Lesser General Public License from time to time. Such new
|
||||
versions will be similar in spirit to the present version, but may
|
||||
differ in detail to address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Library as you received it specifies that a certain numbered version
|
||||
of the GNU Lesser General Public License "or any later version"
|
||||
applies to it, you have the option of following the terms and
|
||||
conditions either of that published version or of any later version
|
||||
published by the Free Software Foundation. If the Library as you
|
||||
received it does not specify a version number of the GNU Lesser
|
||||
General Public License, you may choose any version of the GNU Lesser
|
||||
General Public License ever published by the Free Software Foundation.
|
||||
|
||||
If the Library as you received it specifies that a proxy can decide
|
||||
whether future versions of the GNU Lesser General Public License shall
|
||||
apply, that proxy's public statement of acceptance of any version is
|
||||
permanent authorization for you to choose that version for the
|
||||
Library.
|
||||
@ -1,60 +0,0 @@
|
||||
@charset "utf-8";
|
||||
/*
|
||||
* artDialog skin
|
||||
* https://github.com/aui/artDialog
|
||||
* (c) 2009-2013 TangBin, http://www.planeArt.cn
|
||||
*
|
||||
* This is licensed under the GNU LGPL, version 2.1 or later.
|
||||
* For details, see: http://creativecommons.org/licenses/LGPL/2.1/
|
||||
*/
|
||||
|
||||
/* common start */
|
||||
body { _margin:0; _height:100%; }/*IE6 BUG*/
|
||||
.d-outer { text-align:left; outline:none 0; }
|
||||
.d-border, .d-dialog { border:0 none; margin:0; border-collapse:collapse; width:auto; }
|
||||
.d-nw, .d-n, .d-ne, .d-w, .d-c, .d-e, .d-sw, .d-s, .d-se, .d-header, .d-main, .d-footer { padding:0; }
|
||||
.d-header, .d-button { font: 12px/1.11 'Microsoft Yahei', Tahoma, Arial, Helvetica, STHeiti; _font-family:Tahoma,Arial,Helvetica,STHeiti; -o-font-family: Tahoma, Arial; }
|
||||
.d-title { overflow:hidden; text-overflow: ellipsis; cursor:default; }
|
||||
.d-state-noTitle .d-title { display:none; }
|
||||
.d-close { display:block; position:absolute; text-decoration:none; outline:none; _cursor:pointer; }
|
||||
.d-close:hover { text-decoration:none; }
|
||||
.d-main { text-align:center; vertical-align:middle; min-width:9em; }
|
||||
.d-content { display:inline-block; display:block\0/*IE8 BUG*/; display:inline-block\9\0; *zoom:1; *display:inline; text-align:left; border:0 none; }
|
||||
.d-content.d-state-full { display:block; width:100%; margin:0; padding:0!important; height:100%; }
|
||||
.d-loading { width:96px; height:32px; text-align:left; text-indent:-999em; overflow:hidden; background:url(loading.gif) no-repeat center center; }
|
||||
.d-buttons { padding:8px; text-align:right; white-space:nowrap; }
|
||||
.d-button { margin-left:15px; padding: 0 8px; cursor: pointer; display: inline-block; min-height:2.2em; text-align: center; *padding:4px 10px; *height:2em; letter-spacing:2px; font-family: Tahoma, Arial/9!important; width:auto; overflow:visible; *width:1; color: #333; border: 1px solid #999; border-radius: 5px; background: #DDD; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFF', endColorstr='#DDDDDD'); background: linear-gradient(top, #FFF, #DDD); background: -moz-linear-gradient(top, #FFF, #DDD); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#FFF), to(#DDD)); text-shadow: 0px 1px 1px rgba(255, 255, 255, .5);; box-shadow: 0 1px 0 rgba(255, 255, 255, .7), 0 -1px 0 rgba(0, 0, 0, .09); -moz-transition:-moz-box-shadow linear .2s; -webkit-transition: -webkit-box-shadow linear .2s; transition: box-shadow linear .2s; }
|
||||
.d-button::-moz-focus-inner, .d-button::-moz-focus-outer { border:0 none; padding:0; margin:0; }
|
||||
.d-button:focus { outline:none 0; border-color:#426DC9; box-shadow:0 0 8px rgba(66, 109, 201, .9); }
|
||||
.d-button:hover { color:#000; border-color:#666; }
|
||||
.d-button:active { border-color:#666; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#DDDDDD', endColorstr='#FFFFFF'); background: linear-gradient(top, #DDD, #FFF); background: -moz-linear-gradient(top, #DDD, #FFF); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#DDD), to(#FFF)); box-shadow:inset 0 1px 1em rgba(0, 0, 0, .6), inset 0 1px 1em rgba(0, 0, 0, .3); }
|
||||
.d-button[disabled] { cursor:default; color:#666; background:#DDD; border: 1px solid #999; filter:alpha(opacity=50); opacity:.5; box-shadow:none; }
|
||||
.d-state-highlight { color: #FFF; border: 1px solid #1c6a9e; background: #2288cc; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee', endColorstr='#2288cc'); background: linear-gradient(top, #33bbee, #2288cc); background: -moz-linear-gradient(top, #33bbee, #2288cc); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#33bbee), to(#2288cc)); text-shadow: -1px -1px 1px #1c6a9e; }
|
||||
.d-state-highlight:hover { color:#FFF; border-color:#0F3A56; }
|
||||
.d-state-highlight:active { border-color:#1c6a9e; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee', endColorstr='#2288cc'); background: linear-gradient(top, #33bbee, #2288cc); background: -moz-linear-gradient(top, #33bbee, #2288cc); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#33bbee), to(#2288cc)); }
|
||||
.d-mask { background:#000; filter:alpha(opacity=70); opacity:.7; }
|
||||
/* common end */
|
||||
|
||||
.d-inner { background:#FFF; }
|
||||
.d-titleBar { width:100%; height:0; position:relative; bottom:30px; _bottom:0; _margin-top:-30px; }
|
||||
.d-title { height:29px; line-height:29px; padding:0 16px 0 0; _padding:0; color:#FFF; font-weight:700; text-shadow:1px 1px 0 rgba(0, 0, 0, .9); }
|
||||
.d-nw, .d-ne, .d-sw, .d-se, .d-n, .d-s, .d-close { background-image:url(aero/aero_s.png); background-repeat:no-repeat; }
|
||||
.d-nw { width:14px; height:34px; background-position: 0 0; }
|
||||
.d-ne { width:14px; height:34px; background-position: -14px 0; }
|
||||
.d-sw { width:14px; height:14px; background-position: 0 -34px; }
|
||||
.d-se { width:14px; height:14px; background-position: -14px -34px; }
|
||||
.d-close { top:7px; right:0; _z-index:1; width:13px; height:13px; _font-size:0; _line-height:0; text-indent:-9999em; background-position:left -96px; }
|
||||
.d-close:hover { background-position:right -96px; }
|
||||
.d-n, .d-s { background-repeat:repeat-x; }
|
||||
.d-n { background-position: 0 -48px; }
|
||||
.d-s { background-position: 0 -82px; }
|
||||
.d-w, .d-e { background-image:url(aero/aero_s2.png); background-repeat:repeat-y; }
|
||||
.d-w { background-position:left top; }
|
||||
.d-e { background-position: right bottom; }
|
||||
.d-state-noTitle .d-nw, .d-state-noTitle .d-ne, .d-state-noTitle .d-sw, .d-state-noTitle .d-se { width:3px; height:3px; }
|
||||
.d-state-noTitle .d-inner { border:1px solid #666; background:#FFF; }
|
||||
.d-state-noTitle { box-shadow:none; }
|
||||
.d-state-noTitle .d-nw, .d-state-noTitle .d-n, .d-state-noTitle .d-ne, .d-state-noTitle .d-w, .d-state-noTitle .d-e, .d-state-noTitle .d-sw, .d-state-noTitle .d-s, .d-state-noTitle .d-se { background:rgba(0, 0, 0, .05); background:#000\9!important; filter:alpha(opacity=5)!important; }
|
||||
.d-state-noTitle .d-titleBar { bottom:0; _bottom:0; _margin-top:0; }
|
||||
.d-state-noTitle .d-close { top:0; right:0; width:18px; height:18px; line-height:18px; text-align:center; text-indent:0; font-family: Helvetica, STHeiti; _font-family: '\u9ed1\u4f53', 'Book Antiqua', Palatino; font-size:18px; text-decoration:none; color:#214FA3; background:none; filter:!important; }
|
||||
.d-state-noTitle .d-close:hover, .d-state-noTitle .d-close:active { text-decoration:none; color:#900; }
|
||||
|
Before Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 188 B |
@ -1,78 +0,0 @@
|
||||
@charset "utf-8";
|
||||
/*
|
||||
* artDialog skin
|
||||
* https://github.com/aui/artDialog
|
||||
* (c) 2009-2013 TangBin, http://www.planeArt.cn
|
||||
*
|
||||
* This is licensed under the GNU LGPL, version 2.1 or later.
|
||||
* For details, see: http://creativecommons.org/licenses/LGPL/2.1/
|
||||
*/
|
||||
|
||||
/* common start */
|
||||
body { _margin:0; _height:100%; }/*IE6 BUG*/
|
||||
.d-outer { text-align:left; outline:none 0; }
|
||||
.d-border, .d-dialog { border:0 none; margin:0; border-collapse:collapse; width:auto; }
|
||||
.d-nw, .d-n, .d-ne, .d-w, .d-c, .d-e, .d-sw, .d-s, .d-se, .d-header, .d-main, .d-footer { padding:0; }
|
||||
.d-header, .d-button { font: 12px/1.11 'Microsoft Yahei', Tahoma, Arial, Helvetica, STHeiti; _font-family:Tahoma,Arial,Helvetica,STHeiti; -o-font-family: Tahoma, Arial; }
|
||||
.d-title { overflow:hidden; text-overflow: ellipsis; cursor:default; }
|
||||
.d-state-noTitle .d-title { display:none; }
|
||||
.d-close { display:block; position:absolute; text-decoration:none; outline:none; _cursor:pointer; }
|
||||
.d-close:hover { text-decoration:none; }
|
||||
.d-main { text-align:center; vertical-align:middle; min-width:9em; }
|
||||
.d-content { display:inline-block; display:block\0/*IE8 BUG*/; display:inline-block\9\0; *zoom:1; *display:inline; text-align:left; border:0 none; }
|
||||
.d-content.d-state-full { display:block; width:100%; margin:0; padding:0!important; height:100%; }
|
||||
.d-loading { width:96px; height:32px; text-align:left; text-indent:-999em; overflow:hidden; background:url(loading.gif) no-repeat center center; }
|
||||
.d-buttons { padding:8px; text-align:right; white-space:nowrap; }
|
||||
.d-button { margin-left:15px; padding: 0 8px; cursor: pointer; display: inline-block; min-height:2.2em; text-align: center; *padding:4px 10px; *height:2em; letter-spacing:2px; font-family: Tahoma, Arial/9!important; width:auto; overflow:visible; *width:1; color: #333; border: 1px solid #999; border-radius: 5px; background: #DDD; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFF', endColorstr='#DDDDDD'); background: linear-gradient(top, #FFF, #DDD); background: -moz-linear-gradient(top, #FFF, #DDD); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#FFF), to(#DDD)); text-shadow: 0px 1px 1px rgba(255, 255, 255, .5);; box-shadow: 0 1px 0 rgba(255, 255, 255, .7), 0 -1px 0 rgba(0, 0, 0, .09); -moz-transition:-moz-box-shadow linear .2s; -webkit-transition: -webkit-box-shadow linear .2s; transition: box-shadow linear .2s; }
|
||||
.d-button::-moz-focus-inner, .d-button::-moz-focus-outer { border:0 none; padding:0; margin:0; }
|
||||
.d-button:focus { outline:none 0; border-color:#426DC9; box-shadow:0 0 8px rgba(66, 109, 201, .9); }
|
||||
.d-button:hover { color:#000; border-color:#666; }
|
||||
.d-button:active { border-color:#666; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#DDDDDD', endColorstr='#FFFFFF'); background: linear-gradient(top, #DDD, #FFF); background: -moz-linear-gradient(top, #DDD, #FFF); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#DDD), to(#FFF)); box-shadow:inset 0 1px 1em rgba(0, 0, 0, .6), inset 0 1px 1em rgba(0, 0, 0, .3); }
|
||||
.d-button[disabled] { cursor:default; color:#666; background:#DDD; border: 1px solid #999; filter:alpha(opacity=50); opacity:.5; box-shadow:none; }
|
||||
.d-state-highlight { color: #FFF; border: 1px solid #1c6a9e; background: #2288cc; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee', endColorstr='#2288cc'); background: linear-gradient(top, #33bbee, #2288cc); background: -moz-linear-gradient(top, #33bbee, #2288cc); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#33bbee), to(#2288cc)); text-shadow: -1px -1px 1px #1c6a9e; }
|
||||
.d-state-highlight:hover { color:#FFF; border-color:#0F3A56; }
|
||||
.d-state-highlight:active { border-color:#1c6a9e; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee', endColorstr='#2288cc'); background: linear-gradient(top, #33bbee, #2288cc); background: -moz-linear-gradient(top, #33bbee, #2288cc); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#33bbee), to(#2288cc)); }
|
||||
.d-mask { background:#000; filter:alpha(opacity=70); opacity:.7; }
|
||||
/* common end */
|
||||
|
||||
.d-inner { background:#f7f7f7; }
|
||||
.d-titleBar { width:100%; height:0; position:relative; bottom:30px; _bottom:0; _margin-top:-30px; }
|
||||
.d-title { height:29px; line-height:29px; padding:0 25px 0 0; _padding:0; text-indent:5px; color:#FFF; font-weight:700; text-shadow:-1px -1px 0 rgba(0, 0, 0, .7); }
|
||||
.d-nw, .d-ne, .d-sw, .d-se, .d-n, .d-s, .d-close { background-image:url(black/bg.png); background-repeat:no-repeat; }
|
||||
.d-nw { width:15px; height:38px; background-position: 0 0; }
|
||||
.d-ne { width:15px; height:38px; background-position: -15px 0; }
|
||||
.d-sw { width:15px; height:18px; background-position: 0 -38px; }
|
||||
.d-se { width:15px; height:18px; background-position: -15px -38px; }
|
||||
.d-close { top:4px; right:4px; _z-index:1; width:20px; height:20px; _font-size:0; _line-height:0; text-indent:-9999em; background-position:0 -112px; }
|
||||
.d-close:hover { background-position:0 -132px; }
|
||||
.d-n, .d-s { background-repeat:repeat-x; }
|
||||
.d-n { background-position: 0 -56px; }
|
||||
.d-s { background-position: 0 -94px; }
|
||||
.d-w, .d-e { background-image:url(black/bg2.png); background-repeat:repeat-y; }
|
||||
.d-w { background-position:left top; }
|
||||
.d-e { background-position: right bottom; }
|
||||
aui_icon, .d-main { padding-top:3px; }
|
||||
@media screen and (min-width:0) {
|
||||
.d-outer { border-radius:8px; box-shadow:0 5px 15px rgba(0, 0, 0, .4); -moz-transition:-moz-box-shadow linear .2s; -webkit-transition: -webkit-box-shadow linear .2s; transition: -webkit-box-shadow linear .2s; }
|
||||
.d-state-drag { box-shadow:none; }
|
||||
.d-state-lock { box-shadow:0 3px 26px rgba(0, 0, 0, .9); }
|
||||
.d-outer:active { box-shadow:0 0 5px rgba(0, 0, 0, .1)!important; }
|
||||
.d-state-drag { box-shadow:none!important; }
|
||||
.d-nw, .d-ne, .d-sw, .d-se, .d-n, .d-s, .d-close { background-image:url(black/bg_css3.png); }
|
||||
.d-nw { width:5px; height:31px; }
|
||||
.d-ne { width:5px; height:31px; background-position: -5px 0; }
|
||||
.d-sw { width:5px; height:5px;background-position: 0 -31px; }
|
||||
.d-se { width:5px; height:5px; background-position: -5px -31px; }
|
||||
.d-close { background-position:0 -72px; }
|
||||
.d-close:hover { background-position:0 -92px; }
|
||||
.d-n { background-position: 0 -36px; }
|
||||
.d-s { background-position: 0 -67px; }
|
||||
.d-w, .d-e { background-image:url(black/bg_css3_2.png); }
|
||||
}
|
||||
.d-state-noTitle .d-nw, .d-state-noTitle .d-ne, .d-state-noTitle .d-sw, .d-state-noTitle .d-se { width:3px; height:3px; }
|
||||
.d-state-noTitle .d-inner { border:1px solid #666; background:#FFF; }
|
||||
.d-state-noTitle { box-shadow:none; }
|
||||
.d-state-noTitle .d-nw, .d-state-noTitle .d-n, .d-state-noTitle .d-ne, .d-state-noTitle .d-w, .d-state-noTitle .d-e, .d-state-noTitle .d-sw, .d-state-noTitle .d-s, .d-state-noTitle .d-se { background:rgba(0, 0, 0, .05); background:#000\9!important; filter:alpha(opacity=5)!important; }
|
||||
.d-state-noTitle .d-titleBar { bottom:0; _bottom:0; _margin-top:0; }
|
||||
.d-state-noTitle .d-close { top:0; right:0; width:18px; height:18px; line-height:18px; text-align:center; text-indent:0; font-family: Helvetica, STHeiti; _font-family: '\u9ed1\u4f53', 'Book Antiqua', Palatino; font-size:18px; text-decoration:none; color:#214FA3; background:none; filter:!important; }
|
||||
.d-state-noTitle .d-close:hover, .d-state-noTitle .d-close:active { text-decoration:none; color:#900; }
|
||||
|
Before Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 186 B |
|
Before Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 119 B |
@ -1,78 +0,0 @@
|
||||
@charset "utf-8";
|
||||
/*
|
||||
* artDialog skin
|
||||
* https://github.com/aui/artDialog
|
||||
* (c) 2009-2013 TangBin, http://www.planeArt.cn
|
||||
*
|
||||
* This is licensed under the GNU LGPL, version 2.1 or later.
|
||||
* For details, see: http://creativecommons.org/licenses/LGPL/2.1/
|
||||
*/
|
||||
|
||||
/* common start */
|
||||
body { _margin:0; _height:100%; }/*IE6 BUG*/
|
||||
.d-outer { text-align:left; outline:none 0; }
|
||||
.d-border, .d-dialog { border:0 none; margin:0; border-collapse:collapse; width:auto; }
|
||||
.d-nw, .d-n, .d-ne, .d-w, .d-c, .d-e, .d-sw, .d-s, .d-se, .d-header, .d-main, .d-footer { padding:0; }
|
||||
.d-header, .d-button { font: 12px/1.11 'Microsoft Yahei', Tahoma, Arial, Helvetica, STHeiti; _font-family:Tahoma,Arial,Helvetica,STHeiti; -o-font-family: Tahoma, Arial; }
|
||||
.d-title { overflow:hidden; text-overflow: ellipsis; cursor:default; }
|
||||
.d-state-noTitle .d-title { display:none; }
|
||||
.d-close { display:block; position:absolute; text-decoration:none; outline:none; _cursor:pointer; }
|
||||
.d-close:hover { text-decoration:none; }
|
||||
.d-main { text-align:center; vertical-align:middle; min-width:9em; }
|
||||
.d-content { display:inline-block; display:block\0/*IE8 BUG*/; display:inline-block\9\0; *zoom:1; *display:inline; text-align:left; border:0 none; }
|
||||
.d-content.d-state-full { display:block; width:100%; margin:0; padding:0!important; height:100%; }
|
||||
.d-loading { width:96px; height:32px; text-align:left; text-indent:-999em; overflow:hidden; background:url(loading.gif) no-repeat center center; }
|
||||
.d-buttons { padding:8px; text-align:right; white-space:nowrap; }
|
||||
.d-button { margin-left:15px; padding: 0 8px; cursor: pointer; display: inline-block; min-height:2.2em; text-align: center; *padding:4px 10px; *height:2em; letter-spacing:2px; font-family: Tahoma, Arial/9!important; width:auto; overflow:visible; *width:1; color: #333; border: 1px solid #999; border-radius: 5px; background: #DDD; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFF', endColorstr='#DDDDDD'); background: linear-gradient(top, #FFF, #DDD); background: -moz-linear-gradient(top, #FFF, #DDD); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#FFF), to(#DDD)); text-shadow: 0px 1px 1px rgba(255, 255, 255, .5);; box-shadow: 0 1px 0 rgba(255, 255, 255, .7), 0 -1px 0 rgba(0, 0, 0, .09); -moz-transition:-moz-box-shadow linear .2s; -webkit-transition: -webkit-box-shadow linear .2s; transition: box-shadow linear .2s; }
|
||||
.d-button::-moz-focus-inner, .d-button::-moz-focus-outer { border:0 none; padding:0; margin:0; }
|
||||
.d-button:focus { outline:none 0; border-color:#426DC9; box-shadow:0 0 8px rgba(66, 109, 201, .9); }
|
||||
.d-button:hover { color:#000; border-color:#666; }
|
||||
.d-button:active { border-color:#666; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#DDDDDD', endColorstr='#FFFFFF'); background: linear-gradient(top, #DDD, #FFF); background: -moz-linear-gradient(top, #DDD, #FFF); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#DDD), to(#FFF)); box-shadow:inset 0 1px 1em rgba(0, 0, 0, .6), inset 0 1px 1em rgba(0, 0, 0, .3); }
|
||||
.d-button[disabled] { cursor:default; color:#666; background:#DDD; border: 1px solid #999; filter:alpha(opacity=50); opacity:.5; box-shadow:none; }
|
||||
.d-state-highlight { color: #FFF; border: 1px solid #1c6a9e; background: #2288cc; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee', endColorstr='#2288cc'); background: linear-gradient(top, #33bbee, #2288cc); background: -moz-linear-gradient(top, #33bbee, #2288cc); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#33bbee), to(#2288cc)); text-shadow: -1px -1px 1px #1c6a9e; }
|
||||
.d-state-highlight:hover { color:#FFF; border-color:#0F3A56; }
|
||||
.d-state-highlight:active { border-color:#1c6a9e; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee', endColorstr='#2288cc'); background: linear-gradient(top, #33bbee, #2288cc); background: -moz-linear-gradient(top, #33bbee, #2288cc); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#33bbee), to(#2288cc)); }
|
||||
.d-mask { background:#000; filter:alpha(opacity=70); opacity:.7; }
|
||||
/* common end */
|
||||
|
||||
.d-inner { background:#f7f7f7; }
|
||||
.d-titleBar { width:100%; height:0; position:relative; bottom:30px; _bottom:0; _margin-top:-30px; }
|
||||
.d-title { height:29px; line-height:29px; padding:0 25px 0 0; _padding:0; text-indent:5px; color:#FFF; font-weight:700; text-shadow:-1px -1px 0 rgba(33, 79, 183, .7); }
|
||||
.d-nw, .d-ne, .d-sw, .d-se, .d-n, .d-s, .d-close { background-image:url(blue/bg.png); background-repeat:no-repeat; }
|
||||
.d-nw { width:15px; height:38px; background-position: 0 0;}
|
||||
.d-ne { width:15px; height:38px; background-position: -15px 0; }
|
||||
.d-sw { width:15px; height:18px; background-position: 0 -38px; }
|
||||
.d-se { width:15px; height:18px; background-position: -15px -38px; }
|
||||
.d-close { top:4px; right:4px; _z-index:1; width:20px; height:20px; _font-size:0; _line-height:0; text-indent:-9999em; background-position:0 -112px; }
|
||||
.d-close:hover { background-position:0 -132px; }
|
||||
.d-n, .d-s { background-repeat:repeat-x; }
|
||||
.d-n { background-position: 0 -56px; }
|
||||
.d-s { background-position: 0 -94px; }
|
||||
.d-w, .d-e { background-image:url(blue/bg2.png); background-repeat:repeat-y; }
|
||||
.d-w { background-position:left top; }
|
||||
.d-e { background-position: right bottom; }
|
||||
.d-main { padding-top:3px; }
|
||||
@media screen and (min-width:0) {/* css3 */
|
||||
.d-outer { border-radius:8px; box-shadow:0 5px 15px rgba(2, 37, 69, .4); -moz-transition:-moz-box-shadow linear .2s; -webkit-transition: -webkit-box-shadow linear .2s; transition: -webkit-box-shadow linear .2s; }
|
||||
.d-state-drag { box-shadow:none; }
|
||||
.d-state-lock { box-shadow:0 3px 26px rgba(0, 0, 0, .9); }
|
||||
.d-outer:active { box-shadow:0 0 5px rgba(2, 37, 69, .1)!important; }
|
||||
.d-state-drag { box-shadow:none!important; }
|
||||
.d-nw, .d-ne, .d-sw, .d-se, .d-n, .d-s, .d-close { background-image:url(blue/bg_css3.png); }
|
||||
.d-nw { width:5px; height:31px; }
|
||||
.d-ne { width:5px; height:31px; background-position: -5px 0; }
|
||||
.d-sw { width:5px; height:5px;background-position: 0 -31px; }
|
||||
.d-se { width:5px; height:5px; background-position: -5px -31px; }
|
||||
.d-close { background-position:0 -72px; }
|
||||
.d-close:hover { background-position:0 -92px; }
|
||||
.d-n { background-position: 0 -36px; }
|
||||
.d-s { background-position: 0 -67px; }
|
||||
.d-w, .d-e { background-image:url(blue/bg_css3_2.png); }
|
||||
}
|
||||
.d-state-noTitle .d-nw, .d-state-noTitle .d-ne, .d-state-noTitle .d-sw, .d-state-noTitle .d-se { width:3px; height:3px; }
|
||||
.d-state-noTitle .d-inner { border:1px solid #666; background:#FFF; }
|
||||
.d-state-noTitle { box-shadow:none; }
|
||||
.d-state-noTitle .d-nw, .d-state-noTitle .d-n, .d-state-noTitle .d-ne, .d-state-noTitle .d-w, .d-state-noTitle .d-e, .d-state-noTitle .d-sw, .d-state-noTitle .d-s, .d-state-noTitle .d-se { background:rgba(0, 0, 0, .05); background:#000\9!important; filter:alpha(opacity=5)!important; }
|
||||
.d-state-noTitle .d-titleBar { bottom:0; _bottom:0; _margin-top:0; }
|
||||
.d-state-noTitle .d-close { top:0; right:0; width:18px; height:18px; line-height:18px; text-align:center; text-indent:0; font-family: Helvetica, STHeiti; _font-family: '\u9ed1\u4f53', 'Book Antiqua', Palatino; font-size:18px; text-decoration:none; color:#214FA3; background:none; filter:!important; }
|
||||
.d-state-noTitle .d-close:hover, .d-state-noTitle .d-close:active { text-decoration:none; color:#900; }
|
||||
|
Before Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 209 B |
|
Before Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 133 B |
@ -1,59 +0,0 @@
|
||||
@charset "utf-8";
|
||||
/*
|
||||
* artDialog skin
|
||||
* https://github.com/aui/artDialog
|
||||
* (c) 2009-2013 TangBin, http://www.planeArt.cn
|
||||
*
|
||||
* This is licensed under the GNU LGPL, version 2.1 or later.
|
||||
* For details, see: http://creativecommons.org/licenses/LGPL/2.1/
|
||||
*/
|
||||
|
||||
/* common start */
|
||||
body { _margin:0; _height:100%; }/*IE6 BUG*/
|
||||
.d-outer { text-align:left; outline:none 0; }
|
||||
.d-border, .d-dialog { border:0 none; margin:0; border-collapse:collapse; width:auto; }
|
||||
.d-nw, .d-n, .d-ne, .d-w, .d-c, .d-e, .d-sw, .d-s, .d-se, .d-header, .d-main, .d-footer { padding:0; }
|
||||
.d-header, .d-button { font: 12px/1.11 'Microsoft Yahei', Tahoma, Arial, Helvetica, STHeiti; _font-family:Tahoma,Arial,Helvetica,STHeiti; -o-font-family: Tahoma, Arial; }
|
||||
.d-title { overflow:hidden; text-overflow: ellipsis; cursor:default; }
|
||||
.d-state-noTitle .d-title { display:none; }
|
||||
.d-close { display:block; position:absolute; text-decoration:none; outline:none; _cursor:pointer; }
|
||||
.d-close:hover { text-decoration:none; }
|
||||
.d-main { text-align:center; vertical-align:middle; min-width:9em; }
|
||||
.d-content { display:inline-block; display:block\0/*IE8 BUG*/; display:inline-block\9\0; *zoom:1; *display:inline; text-align:left; border:0 none; }
|
||||
.d-content.d-state-full { display:block; width:100%; margin:0; padding:0!important; height:100%; }
|
||||
.d-loading { width:96px; height:32px; text-align:left; text-indent:-999em; overflow:hidden; background:url(loading.gif) no-repeat center center; }
|
||||
.d-buttons { padding:8px; text-align:right; white-space:nowrap; }
|
||||
.d-button { margin-left:15px; padding: 0 8px; cursor: pointer; display: inline-block; min-height:2.2em; text-align: center; *padding:4px 10px; *height:2em; letter-spacing:2px; font-family: Tahoma, Arial/9!important; width:auto; overflow:visible; *width:1; color: #333; border: 1px solid #999; border-radius: 5px; background: #DDD; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFF', endColorstr='#DDDDDD'); background: linear-gradient(top, #FFF, #DDD); background: -moz-linear-gradient(top, #FFF, #DDD); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#FFF), to(#DDD)); text-shadow: 0px 1px 1px rgba(255, 255, 255, .5);; box-shadow: 0 1px 0 rgba(255, 255, 255, .7), 0 -1px 0 rgba(0, 0, 0, .09); -moz-transition:-moz-box-shadow linear .2s; -webkit-transition: -webkit-box-shadow linear .2s; transition: box-shadow linear .2s; }
|
||||
.d-button::-moz-focus-inner, .d-button::-moz-focus-outer { border:0 none; padding:0; margin:0; }
|
||||
.d-button:focus { outline:none 0; border-color:#426DC9; box-shadow:0 0 8px rgba(66, 109, 201, .9); }
|
||||
.d-button:hover { color:#000; border-color:#666; }
|
||||
.d-button:active { border-color:#666; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#DDDDDD', endColorstr='#FFFFFF'); background: linear-gradient(top, #DDD, #FFF); background: -moz-linear-gradient(top, #DDD, #FFF); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#DDD), to(#FFF)); box-shadow:inset 0 1px 1em rgba(0, 0, 0, .6), inset 0 1px 1em rgba(0, 0, 0, .3); }
|
||||
.d-button[disabled] { cursor:default; color:#666; background:#DDD; border: 1px solid #999; filter:alpha(opacity=50); opacity:.5; box-shadow:none; }
|
||||
.d-state-highlight { color: #FFF; border: 1px solid #1c6a9e; background: #2288cc; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee', endColorstr='#2288cc'); background: linear-gradient(top, #33bbee, #2288cc); background: -moz-linear-gradient(top, #33bbee, #2288cc); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#33bbee), to(#2288cc)); text-shadow: -1px -1px 1px #1c6a9e; }
|
||||
.d-state-highlight:hover { color:#FFF; border-color:#0F3A56; }
|
||||
.d-state-highlight:active { border-color:#1c6a9e; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee', endColorstr='#2288cc'); background: linear-gradient(top, #33bbee, #2288cc); background: -moz-linear-gradient(top, #33bbee, #2288cc); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#33bbee), to(#2288cc)); }
|
||||
.d-mask { background:#000; filter:alpha(opacity=70); opacity:.7; }
|
||||
/* common end */
|
||||
|
||||
.d-inner { background:#FFF; }
|
||||
.d-titleBar { width:100%; height:0; position:relative; bottom:26px; _bottom:0; _margin-top:-26px;}
|
||||
.d-title { height:26px; line-height:23px; padding:0 60px 0 5px; color:#FFF; font-weight:700; text-shadow:0 1px 0 #000; }
|
||||
.d-nw, .d-ne, .d-w, .d-e, .d-sw, .d-se, .d-close { background-image:url(chrome/chrome_s.png); background-repeat:no-repeat; }
|
||||
.d-nw { width:5px; height:26px; background-position: -46px -8px; }
|
||||
.d-ne { width:5px; height:26px; background-position: -53px -8px; }
|
||||
.d-w { background-position:-60px 0; background-repeat:repeat-y; }
|
||||
.d-e { background-position:-65px 0; background-repeat:repeat-y; }
|
||||
.d-sw { width:5px; height:5px; background-position: -46px -2px;}
|
||||
.d-se { width:5px; height:5px; background-position: -53px -2px;}
|
||||
.d-close { top:1px; right:0; width:44px; height:17px; background-position:0 0; _font-size:0; _line-height:0; text-indent:-9999em; }
|
||||
.d-close:hover { background-position:0 -18px; }
|
||||
.d-n, .d-s { background-image:url(chrome/border.png); background-repeat:repeat-x; }
|
||||
.d-n { background-position:0 top; }
|
||||
.d-s { background-position: 0 bottom; }.d-buttons { background-color:#F6F6F6; border-top:1px solid #DADEE5; }
|
||||
.d-state-noTitle .d-nw, .d-state-noTitle .d-ne, .d-state-noTitle .d-sw, .d-state-noTitle .d-se { width:3px; height:3px; }
|
||||
.d-state-noTitle .d-inner { border:1px solid #666; background:#FFF; }
|
||||
.d-state-noTitle { box-shadow:none; }
|
||||
.d-state-noTitle .d-nw, .d-state-noTitle .d-n, .d-state-noTitle .d-ne, .d-state-noTitle .d-w, .d-state-noTitle .d-e, .d-state-noTitle .d-sw, .d-state-noTitle .d-s, .d-state-noTitle .d-se { background:rgba(0, 0, 0, .05); background:#000\9!important; filter:alpha(opacity=5)!important; }
|
||||
.d-state-noTitle .d-titleBar { bottom:0; _bottom:0; _margin-top:0; }
|
||||
.d-state-noTitle .d-close { top:0; right:0; width:18px; height:18px; line-height:18px; text-align:center; text-indent:0; font-family: Helvetica, STHeiti; _font-family: '\u9ed1\u4f53', 'Book Antiqua', Palatino; font-size:18px; text-decoration:none; color:#214FA3; background:none; filter:!important; }
|
||||
.d-state-noTitle .d-close:hover, .d-state-noTitle .d-close:active { text-decoration:none; color:#900; }
|
||||
|
Before Width: | Height: | Size: 260 B |
|
Before Width: | Height: | Size: 1.2 KiB |
@ -1,70 +0,0 @@
|
||||
@charset "utf-8";
|
||||
/*
|
||||
* artDialog skin
|
||||
* https://github.com/aui/artDialog
|
||||
* (c) 2009-2013 TangBin, http://www.planeArt.cn
|
||||
*
|
||||
* This is licensed under the GNU LGPL, version 2.1 or later.
|
||||
* For details, see: http://creativecommons.org/licenses/LGPL/2.1/
|
||||
*/
|
||||
|
||||
/* common start */
|
||||
body { _margin:0; _height:100%; }/*IE6 BUG*/
|
||||
.d-outer { text-align:left; outline:none 0; }
|
||||
.d-border, .d-dialog { border:0 none; margin:0; border-collapse:collapse; width:auto; }
|
||||
.d-nw, .d-n, .d-ne, .d-w, .d-c, .d-e, .d-sw, .d-s, .d-se, .d-header, .d-main, .d-footer { padding:0; }
|
||||
.d-header, .d-button { font: 12px/1.11 'Microsoft Yahei', Tahoma, Arial, Helvetica, STHeiti; _font-family:Tahoma,Arial,Helvetica,STHeiti; -o-font-family: Tahoma, Arial; }
|
||||
.d-title { overflow:hidden; text-overflow: ellipsis; cursor:default; }
|
||||
.d-state-noTitle .d-title { display:none; }
|
||||
.d-close { display:block; position:absolute; text-decoration:none; outline:none; _cursor:pointer; }
|
||||
.d-close:hover { text-decoration:none; }
|
||||
.d-main { text-align:center; vertical-align:middle; min-width:9em; }
|
||||
.d-content { display:inline-block; display:block\0/*IE8 BUG*/; display:inline-block\9\0; *zoom:1; *display:inline; text-align:left; border:0 none; }
|
||||
.d-content.d-state-full { display:block; width:100%; margin:0; padding:0!important; height:100%; }
|
||||
.d-loading { width:96px; height:32px; text-align:left; text-indent:-999em; overflow:hidden; background:url(loading.gif) no-repeat center center; }
|
||||
.d-buttons { padding:8px; text-align:right; white-space:nowrap; }
|
||||
.d-button { margin-left:15px; padding: 0 8px; cursor: pointer; display: inline-block; min-height:2.2em; text-align: center; *padding:4px 10px; *height:2em; letter-spacing:2px; font-family: Tahoma, Arial/9!important; width:auto; overflow:visible; *width:1; color: #333; border: 1px solid #999; border-radius: 5px; background: #DDD; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFF', endColorstr='#DDDDDD'); background: linear-gradient(top, #FFF, #DDD); background: -moz-linear-gradient(top, #FFF, #DDD); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#FFF), to(#DDD)); text-shadow: 0px 1px 1px rgba(255, 255, 255, .5); box-shadow: 0 1px 0 rgba(255, 255, 255, .7), 0 -1px 0 rgba(0, 0, 0, .09); -moz-transition:-moz-box-shadow linear .2s; -webkit-transition: -webkit-box-shadow linear .2s; transition: box-shadow linear .2s; }
|
||||
.d-button::-moz-focus-inner, .d-button::-moz-focus-outer { border:0 none; padding:0; margin:0; }
|
||||
.d-button:focus { outline:none 0; border-color:#426DC9; box-shadow:0 0 8px rgba(66, 109, 201, .9); }
|
||||
.d-button:hover { color:#000; border-color:#666; }
|
||||
.d-button:active { border-color:#666; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#DDDDDD', endColorstr='#FFFFFF'); background: linear-gradient(top, #DDD, #FFF); background: -moz-linear-gradient(top, #DDD, #FFF); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#DDD), to(#FFF)); box-shadow:inset 0 1px 1em rgba(0, 0, 0, .6), inset 0 1px 1em rgba(0, 0, 0, .3); }
|
||||
.d-button[disabled] { cursor:default; color:#666; background:#DDD; border: 1px solid #999; filter:alpha(opacity=50); opacity:.5; box-shadow:none; }
|
||||
.d-state-highlight { color: #FFF; border: 1px solid #1c6a9e; background: #2288cc; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee', endColorstr='#2288cc'); background: linear-gradient(top, #33bbee, #2288cc); background: -moz-linear-gradient(top, #33bbee, #2288cc); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#33bbee), to(#2288cc)); text-shadow: -1px -1px 1px #1c6a9e; }
|
||||
.d-state-highlight:hover { color:#FFF; border-color:#0F3A56; }
|
||||
.d-state-highlight:active { border-color:#1c6a9e; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee', endColorstr='#2288cc'); background: linear-gradient(top, #33bbee, #2288cc); background: -moz-linear-gradient(top, #33bbee, #2288cc); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#33bbee), to(#2288cc)); }
|
||||
.d-mask { background:#000; filter:alpha(opacity=70); opacity:.7; }
|
||||
/* common end */
|
||||
|
||||
.d-inner { background:#FFF; }
|
||||
.d-outer, .d-inner { border:1px solid rgba(0, 0, 0, .7); border:1px solid #333\9; }
|
||||
.d-nw, .d-ne, .d-sw, .d-se { width:8px; height:8px; }
|
||||
.d-nw, .d-n, .d-ne, .d-w, .d-e, .d-sw, .d-s, .d-se { background:rgba(0, 0, 0, .4); background:#000\9!important; filter:alpha(opacity=40); }
|
||||
.d-state-lock .d-nw, .d-state-lock .d-n, .d-state-lock .d-ne, .d-state-lock .d-w, .d-state-lock .d-e, .d-state-lock .d-sw, .d-state-lock .d-s, .d-state-lock .d-se { background:rgba(0, 0, 0, .5); background:#000\9!important; filter:alpha(opacity=50); }
|
||||
.d-titleBar { position:relative; height:100%; }
|
||||
.d-title { height:28px; line-height:27px; padding:0 28px 0 10px; text-shadow:0 1px 0 rgba(255, 255, 255, .7); background-color:#edf5f8; font-weight:bold; color:#95a7ae; font-family: Tahoma, Arial/9!important; background-color:#bdc6cd; background: linear-gradient(top, #edf5f8, #bdc6cd); background: -moz-linear-gradient(top, #edf5f8, #bdc6cd); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#edf5f8), to(#bdc6cd)); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#edf5f8', endColorstr='#bdc6cd'); border-top:1px solid #edf5f8; border-bottom:1px solid #b6bec5; }
|
||||
.d-state-focus .d-title { color:#4c5a5f; }
|
||||
.d-state-drag .d-title { background: linear-gradient(top, #bdc6cd, #edf5f8); background: -moz-linear-gradient(top, #bdc6cd, #edf5f8); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#bdc6cd), to(#edf5f8)); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#bdc6cd', endColorstr='#edf5f8'); box-shadow:none; }
|
||||
.d-state-drag .d-titleBar { box-shadow:none; }
|
||||
.d-close { padding:0; top:4px; right:4px; width:21px; height:21px; line-height:21px; font-size:18px; color:#68767b; text-align:center; font-family: Helvetica, STHeiti; _font-family: Tahoma, '\u9ed1\u4f53', 'Book Antiqua', Palatino; text-shadow:0 1px 0 rgba(255, 255, 255, .9); }
|
||||
.d-close:hover { color:#85140E; }
|
||||
.d-content { color:#666; }
|
||||
.d-state-focus .d-content { color:#000; }.d-buttons { background-color:#F6F6F6; border-top: 1px solid #DADEE5; }
|
||||
.d-state-noTitle .d-nw, .d-state-noTitle .d-ne, .d-state-noTitle .d-sw, .d-state-noTitle .d-se { width:3px; height:3px; }
|
||||
.d-state-noTitle .d-inner { border:1px solid #666; background:#FFF; }
|
||||
.d-state-noTitle { border:0 none; box-shadow:none; }
|
||||
.d-state-noTitle .d-nw, .d-state-noTitle .d-n, .d-state-noTitle .d-ne, .d-state-noTitle .d-w, .d-state-noTitle .d-e, .d-state-noTitle .d-sw, .d-state-noTitle .d-s, .d-state-noTitle .d-se { background:rgba(0, 0, 0, .05); background:#000\9!important; filter:alpha(opacity=5)!important; }
|
||||
.d-state-noTitle .d-titleBar { bottom:0; _bottom:0; _margin-top:0; }
|
||||
.d-state-noTitle .d-close { top:0; right:0; width:18px; height:18px; line-height:18px; text-align:center; text-indent:0; font-size:18px; text-decoration:none; color:#214FA3; background:none; filter:!important; }
|
||||
.d-state-noTitle .d-close:hover, .d-state-noTitle .d-close:active { text-decoration:none; color:#900; }
|
||||
.d-state-noTitle .d-dialog { box-shadow: none; }
|
||||
|
||||
@media screen and (min-width:0) {/* css3 */
|
||||
.d-nw, .d-n, .d-ne, .d-w, .d-e, .d-sw, .d-s, .d-se { display:none; }
|
||||
.d-inner { border:0 none; }
|
||||
.d-outer { border-color:#666; }
|
||||
.d-state-focus .d-dialog { box-shadow: 0 0 3px rgba(0, 0, 0, .4); }
|
||||
.d-state-drag, .d-state-focus:active { box-shadow:none; }
|
||||
.d-state-focus { box-shadow:0 3px 26px rgba(0, 0, 0, .9); }
|
||||
.d-outer { -webkit-transform: scale(0); transform: scale(0); -webkit-transition: -webkit-box-shadow .2s ease-in-out, -webkit-transform .2s ease-in-out; transition: box-shadow .2s ease-in-out, transform .2s ease-in-out; }
|
||||
.d-state-visible { -webkit-transform: scale(1); transform: scale(1); }
|
||||
}
|
||||
@ -1,78 +0,0 @@
|
||||
@charset "utf-8";
|
||||
/*
|
||||
* artDialog skin
|
||||
* https://github.com/aui/artDialog
|
||||
* (c) 2009-2013 TangBin, http://www.planeArt.cn
|
||||
*
|
||||
* This is licensed under the GNU LGPL, version 2.1 or later.
|
||||
* For details, see: http://creativecommons.org/licenses/LGPL/2.1/
|
||||
*/
|
||||
|
||||
/* common start */
|
||||
body { _margin:0; _height:100%; }/*IE6 BUG*/
|
||||
.d-outer { text-align:left; outline:none 0; }
|
||||
.d-border, .d-dialog { border:0 none; margin:0; border-collapse:collapse; width:auto; }
|
||||
.d-nw, .d-n, .d-ne, .d-w, .d-c, .d-e, .d-sw, .d-s, .d-se, .d-header, .d-main, .d-footer { padding:0; }
|
||||
.d-header, .d-button { font: 12px/1.11 'Microsoft Yahei', Tahoma, Arial, Helvetica, STHeiti; _font-family:Tahoma,Arial,Helvetica,STHeiti; -o-font-family: Tahoma, Arial; }
|
||||
.d-title { overflow:hidden; text-overflow: ellipsis; cursor:default; }
|
||||
.d-state-noTitle .d-title { display:none; }
|
||||
.d-close { display:block; position:absolute; text-decoration:none; outline:none; _cursor:pointer; }
|
||||
.d-close:hover { text-decoration:none; }
|
||||
.d-main { text-align:center; vertical-align:middle; min-width:9em; }
|
||||
.d-content { display:inline-block; display:block\0/*IE8 BUG*/; display:inline-block\9\0; *zoom:1; *display:inline; text-align:left; border:0 none; }
|
||||
.d-content.d-state-full { display:block; width:100%; margin:0; padding:0!important; height:100%; }
|
||||
.d-loading { width:96px; height:32px; text-align:left; text-indent:-999em; overflow:hidden; background:url(loading.gif) no-repeat center center; }
|
||||
.d-buttons { padding:8px; text-align:right; white-space:nowrap; }
|
||||
.d-button { margin-left:15px; padding: 0 8px; cursor: pointer; display: inline-block; min-height:2.2em; text-align: center; *padding:4px 10px; *height:2em; letter-spacing:2px; font-family: Tahoma, Arial/9!important; width:auto; overflow:visible; *width:1; color: #333; border: 1px solid #999; border-radius: 5px; background: #DDD; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFF', endColorstr='#DDDDDD'); background: linear-gradient(top, #FFF, #DDD); background: -moz-linear-gradient(top, #FFF, #DDD); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#FFF), to(#DDD)); text-shadow: 0px 1px 1px rgba(255, 255, 255, .5);; box-shadow: 0 1px 0 rgba(255, 255, 255, .7), 0 -1px 0 rgba(0, 0, 0, .09); -moz-transition:-moz-box-shadow linear .2s; -webkit-transition: -webkit-box-shadow linear .2s; transition: box-shadow linear .2s; }
|
||||
.d-button::-moz-focus-inner, .d-button::-moz-focus-outer { border:0 none; padding:0; margin:0; }
|
||||
.d-button:focus { outline:none 0; border-color:#426DC9; box-shadow:0 0 8px rgba(66, 109, 201, .9); }
|
||||
.d-button:hover { color:#000; border-color:#666; }
|
||||
.d-button:active { border-color:#666; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#DDDDDD', endColorstr='#FFFFFF'); background: linear-gradient(top, #DDD, #FFF); background: -moz-linear-gradient(top, #DDD, #FFF); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#DDD), to(#FFF)); box-shadow:inset 0 1px 1em rgba(0, 0, 0, .6), inset 0 1px 1em rgba(0, 0, 0, .3); }
|
||||
.d-button[disabled] { cursor:default; color:#666; background:#DDD; border: 1px solid #999; filter:alpha(opacity=50); opacity:.5; box-shadow:none; }
|
||||
.d-state-highlight { color: #FFF; border: solid 1px #679a10; background: #7cb61b; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#98d237', endColorstr='#7cb61b'); background: linear-gradient(top, #98d237, #7cb61b); background: -moz-linear-gradient(top, #98d237, #7cb61b); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#98d237), to(#7cb61b)); text-shadow: -1px -1px 1px #679a10; }
|
||||
.d-state-highlight:focus { border-color:#679a10; box-shadow:0 0 8px rgba(0, 50, 0, .7); }
|
||||
.d-state-highlight:hover { color:#FFF; border-color:#3c5412; }
|
||||
.d-state-highlight:active { border-color:#3c5412; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#98d237', endColorstr='#7cb61b'); background: linear-gradient(top, #98d237, #7cb61b); background: -moz-linear-gradient(top, #98d237, #7cb61b); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#98d237), to(#7cb61b)); }
|
||||
.d-mask { background:#000; filter:alpha(opacity=70); opacity:.7; }
|
||||
/* common end */
|
||||
|
||||
.d-inner { background:#f7f7f7; }
|
||||
.d-titleBar { width:100%; height:0; position:relative; bottom:30px; _bottom:0; _margin-top:-30px; }
|
||||
.d-title { height:29px; line-height:29px; padding:0 25px 0 0; _padding:0; text-indent:5px; color:#FFF; font-weight:700; text-shadow:-1px -1px 0 rgba(0, 50, 0, .7); }
|
||||
.d-nw, .d-ne, .d-sw, .d-se, .d-n, .d-s, .d-close { background-image:url(green/bg.png); background-repeat:no-repeat; }
|
||||
.d-nw { width:15px; height:38px; background-position: 0 0; }
|
||||
.d-ne { width:15px; height:38px; background-position: -15px 0; }
|
||||
.d-sw { width:15px; height:18px; background-position: 0 -38px; }
|
||||
.d-se { width:15px; height:18px; background-position: -15px -38px; }
|
||||
.d-close { top:4px; right:4px; _z-index:1; width:20px; height:20px; _font-size:0; _line-height:0; text-indent:-9999em; background-position:0 -112px; }
|
||||
.d-close:hover { background-position:0 -132px; }
|
||||
.d-n, .d-s { background-repeat:repeat-x; }
|
||||
.d-n { background-position: 0 -56px; }
|
||||
.d-s { background-position: 0 -94px; }
|
||||
.d-w, .d-e { background-image:url(green/bg2.png); background-repeat:repeat-y; }
|
||||
.d-w { background-position:left top; }
|
||||
.d-e { background-position: right bottom; }
|
||||
aui_icon, .d-main { padding-top:3px; }
|
||||
@media screen and (min-width:0) {
|
||||
.d-outer { border-radius:8px; box-shadow:0 5px 15px rgba(0, 50, 0, .4); -moz-transition:-moz-box-shadow linear .2s; -webkit-transition: -webkit-box-shadow linear .2s; transition: -webkit-box-shadow linear .2s; }
|
||||
.d-state-lock { box-shadow:0 3px 26px rgba(0, 0, 0, .9); }
|
||||
.d-outer:active { box-shadow:0 0 5px rgba(0, 50, 0, .1)!important; }
|
||||
.d-state-drag { box-shadow:none!important; }
|
||||
.d-nw, .d-ne, .d-sw, .d-se, .d-n, .d-s, .d-close { background-image:url(green/bg_css3.png); }
|
||||
.d-nw { width:5px; height:31px; }
|
||||
.d-ne { width:5px; height:31px; background-position: -5px 0; }
|
||||
.d-sw { width:5px; height:5px;background-position: 0 -31px; }
|
||||
.d-se { width:5px; height:5px; background-position: -5px -31px; }
|
||||
.d-close { background-position:0 -72px; }
|
||||
.d-close:hover { background-position:0 -92px; }
|
||||
.d-n { background-position: 0 -36px; }
|
||||
.d-s { background-position: 0 -67px; }
|
||||
.d-w, .d-e { background-image:url(green/bg_css3_2.png); }
|
||||
}
|
||||
.d-state-noTitle .d-nw, .d-state-noTitle .d-ne, .d-state-noTitle .d-sw, .d-state-noTitle .d-se { width:3px; height:3px; }
|
||||
.d-state-noTitle .d-inner { border:1px solid #666; background:#FFF; }
|
||||
.d-state-noTitle { box-shadow:none; }
|
||||
.d-state-noTitle .d-nw, .d-state-noTitle .d-n, .d-state-noTitle .d-ne, .d-state-noTitle .d-w, .d-state-noTitle .d-e, .d-state-noTitle .d-sw, .d-state-noTitle .d-s, .d-state-noTitle .d-se { background:rgba(0, 0, 0, .05); background:#000\9!important; filter:alpha(opacity=5)!important; }
|
||||
.d-state-noTitle .d-titleBar { bottom:0; _bottom:0; _margin-top:0; }
|
||||
.d-state-noTitle .d-close { top:0; right:0; width:18px; height:18px; line-height:18px; text-align:center; text-indent:0; font-family: Helvetica, STHeiti; _font-family: '\u9ed1\u4f53', 'Book Antiqua', Palatino; font-size:18px; text-decoration:none; color:#214FA3; background:none; filter:!important; }
|
||||
.d-state-noTitle .d-close:hover, .d-state-noTitle .d-close:active { text-decoration:none; color:#900; }
|
||||
|
Before Width: | Height: | Size: 3.0 KiB |
|
Before Width: | Height: | Size: 201 B |
|
Before Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 119 B |
|
Before Width: | Height: | Size: 3.0 KiB |
@ -1,72 +0,0 @@
|
||||
@charset "utf-8";
|
||||
/*
|
||||
* artDialog skin
|
||||
* https://github.com/aui/artDialog
|
||||
* (c) 2009-2013 TangBin, http://www.planeArt.cn
|
||||
*
|
||||
* This is licensed under the GNU LGPL, version 2.1 or later.
|
||||
* For details, see: http://creativecommons.org/licenses/LGPL/2.1/
|
||||
*/
|
||||
|
||||
/* common start */
|
||||
body { _margin:0; _height:100%; }/*IE6 BUG*/
|
||||
.d-outer { text-align:left; outline:none 0; }
|
||||
.d-border, .d-dialog { border:0 none; margin:0; border-collapse:collapse; width:auto; }
|
||||
.d-nw, .d-n, .d-ne, .d-w, .d-c, .d-e, .d-sw, .d-s, .d-se, .d-header, .d-main, .d-footer { padding:0; }
|
||||
.d-header, .d-button { font: 12px/1.11 'Microsoft Yahei', Tahoma, Arial, Helvetica, STHeiti; _font-family:Tahoma,Arial,Helvetica,STHeiti; -o-font-family: Tahoma, Arial; }
|
||||
.d-title { overflow:hidden; text-overflow: ellipsis; cursor:default; }
|
||||
.d-state-noTitle .d-title { display:none; }
|
||||
.d-close { display:block; position:absolute; text-decoration:none; outline:none; _cursor:pointer; }
|
||||
.d-close:hover { text-decoration:none; }
|
||||
.d-main { text-align:center; vertical-align:middle; min-width:9em; }
|
||||
.d-content { display:inline-block; display:block\0/*IE8 BUG*/; display:inline-block\9\0; *zoom:1; *display:inline; text-align:left; border:0 none; }
|
||||
.d-content.d-state-full { display:block; width:100%; margin:0; padding:0!important; height:100%; }
|
||||
.d-loading { width:96px; height:32px; text-align:left; text-indent:-999em; overflow:hidden; background:url(loading.gif) no-repeat center center; }
|
||||
.d-buttons { padding:8px; text-align:right; white-space:nowrap; }
|
||||
.d-button { margin-left:15px; padding: 0 8px; cursor: pointer; display: inline-block; min-height:2.2em; text-align: center; *padding:4px 10px; *height:2em; letter-spacing:2px; font-family: Tahoma, Arial/9!important; width:auto; overflow:visible; *width:1; color: #333; border: 1px solid #999; border-radius: 5px; background: #DDD; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFF', endColorstr='#DDDDDD'); background: linear-gradient(top, #FFF, #DDD); background: -moz-linear-gradient(top, #FFF, #DDD); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#FFF), to(#DDD)); text-shadow: 0px 1px 1px rgba(255, 255, 255, .5);; box-shadow: 0 1px 0 rgba(255, 255, 255, .7), 0 -1px 0 rgba(0, 0, 0, .09); -moz-transition:-moz-box-shadow linear .2s; -webkit-transition: -webkit-box-shadow linear .2s; transition: box-shadow linear .2s; }
|
||||
.d-button::-moz-focus-inner, .d-button::-moz-focus-outer { border:0 none; padding:0; margin:0; }
|
||||
.d-button:focus { outline:none 0; border-color:#426DC9; box-shadow:0 0 8px rgba(66, 109, 201, .9); }
|
||||
.d-button:hover { color:#000; border-color:#666; }
|
||||
.d-button:active { border-color:#666; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#DDDDDD', endColorstr='#FFFFFF'); background: linear-gradient(top, #DDD, #FFF); background: -moz-linear-gradient(top, #DDD, #FFF); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#DDD), to(#FFF)); box-shadow:inset 0 1px 1em rgba(0, 0, 0, .6), inset 0 1px 1em rgba(0, 0, 0, .3); }
|
||||
.d-button[disabled] { cursor:default; color:#666; background:#DDD; border: 1px solid #999; filter:alpha(opacity=50); opacity:.5; box-shadow:none; }
|
||||
.d-state-highlight { color: #FFF; border: 1px solid #1c6a9e; background: #2288cc; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee', endColorstr='#2288cc'); background: linear-gradient(top, #33bbee, #2288cc); background: -moz-linear-gradient(top, #33bbee, #2288cc); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#33bbee), to(#2288cc)); text-shadow: -1px -1px 1px #1c6a9e; }
|
||||
.d-state-highlight:hover { color:#FFF; border-color:#0F3A56; }
|
||||
.d-state-highlight:active { border-color:#1c6a9e; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee', endColorstr='#2288cc'); background: linear-gradient(top, #33bbee, #2288cc); background: -moz-linear-gradient(top, #33bbee, #2288cc); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#33bbee), to(#2288cc)); }
|
||||
.d-mask { background:#000; filter:alpha(opacity=70); opacity:.7; }
|
||||
/* common end */
|
||||
|
||||
.d-inner { background:#FFF; }
|
||||
.d-titleBar { width:100%; }
|
||||
.d-title { position:absolute; left:0; top:0; width:100%; height:22px; text-align:left; text-indent:-999em; font-size:0; }
|
||||
.d-nw, .d-ne, .d-sw, .d-se, .d-n, .d-s, .d-close { background-image:url(idialog/idialog_s.png); background-repeat:no-repeat; }
|
||||
.d-nw { width:15px; height:15px; background-position: 0 0; }
|
||||
.d-ne { width:15px; height:15px; background-position: -15px 0; }
|
||||
.d-sw { width:15px; height:15px; background-position: 0 -15px; }
|
||||
.d-se { width:15px; height:15px; background-position: -15px -15px; }
|
||||
.d-close { position:absolute; right:-8px; top:-8px; _z-index:1; width:34px; height:34px; _font-size:0; _line-height:0; text-indent:-9999em; background-position:0 -60px; }
|
||||
.d-close:hover { background-position:0 -94px; }
|
||||
.d-n, .d-s { background-repeat:repeat-x; }
|
||||
.d-n { background-position: 0 -30px; }
|
||||
.d-s { background-position: 0 -45px; }
|
||||
.d-w, .d-e { background-image:url(idialog/idialog_s2.png); background-repeat:repeat-y; }
|
||||
.d-w { background-position:left top; }
|
||||
.d-e { background-position: right bottom; }
|
||||
@media screen and (min-width:0) {/* css3 */
|
||||
.d-nw, .d-ne, .d-sw, .d-se{ width:5px; height:5px; }
|
||||
.d-nw, .d-n, .d-ne, .d-w, .d-e, .d-sw, .d-s, .d-se { background:none; }
|
||||
.d-sw, .d-s, .d-se { background:url(idialog/idialog_s.png) repeat-x 0 -45px; }
|
||||
.d-sw { border-radius:0 0 0 5px; }
|
||||
.d-se { border-radius:0 0 5px 0; }
|
||||
.d-outer { border:1px solid #929292; border-radius:5px; box-shadow:0 3px 8px rgba(0, 0, 0, .2); -moz-transition:-moz-box-shadow linear .2s; -webkit-transition: -webkit-box-shadow linear .2s; transition: -webkit-box-shadow linear .2s; }
|
||||
.d-border { border-radius:5px; background:#FFF; }
|
||||
.d-state-drag { box-shadow:none; }
|
||||
.d-state-lock { box-shadow:0 3px 26px rgba(0, 0, 0, .9); }
|
||||
.d-outer:active { box-shadow:0 0 5px rgba(0, 0, 0, .1)!important; }
|
||||
.d-state-drag { box-shadow:none!important; }
|
||||
.d-close { right:-16px; top:-16px; }
|
||||
.d-outer { -webkit-transform: scale(0); transform: scale(0); -webkit-transition: -webkit-box-shadow .2s ease-in-out, -webkit-transform .2s ease-in-out; transition: box-shadow .2s ease-in-out, transform .2s ease-in-out; }
|
||||
.d-state-visible { -webkit-transform: scale(1); transform: scale(1); }
|
||||
}
|
||||
@media screen and (-webkit-min-device-pixel-ratio:0) {/* apple | webkit */
|
||||
.d-close { right:auto; left:-16px; top:-16px; }
|
||||
}
|
||||
|
Before Width: | Height: | Size: 3.7 KiB |
|
Before Width: | Height: | Size: 184 B |
|
Before Width: | Height: | Size: 381 B |
@ -1,61 +0,0 @@
|
||||
@charset "utf-8";
|
||||
/*
|
||||
* artDialog skin
|
||||
* https://github.com/aui/artDialog
|
||||
* (c) 2009-2013 TangBin, http://www.planeArt.cn
|
||||
*
|
||||
* This is licensed under the GNU LGPL, version 2.1 or later.
|
||||
* For details, see: http://creativecommons.org/licenses/LGPL/2.1/
|
||||
*/
|
||||
|
||||
/* common start */
|
||||
body { _margin:0; _height:100%; }/*IE6 BUG*/
|
||||
.d-outer { text-align:left; outline:none 0; }
|
||||
.d-border, .d-dialog { border:0 none; margin:0; border-collapse:collapse; width:auto; }
|
||||
.d-nw, .d-n, .d-ne, .d-w, .d-c, .d-e, .d-sw, .d-s, .d-se, .d-header, .d-main, .d-footer { padding:0; }
|
||||
.d-header, .d-button { font: 12px/1.11 'Microsoft Yahei', Tahoma, Arial, Helvetica, STHeiti; _font-family:Tahoma,Arial,Helvetica,STHeiti; -o-font-family: Tahoma, Arial; }
|
||||
.d-title { overflow:hidden; text-overflow: ellipsis; cursor:default; }
|
||||
.d-state-noTitle .d-title { display:none; }
|
||||
.d-close { display:block; position:absolute; text-decoration:none; outline:none; _cursor:pointer; }
|
||||
.d-close:hover { text-decoration:none; }
|
||||
.d-main { text-align:center; vertical-align:middle; min-width:9em; }
|
||||
.d-content { display:inline-block; display:block\0/*IE8 BUG*/; display:inline-block\9\0; *zoom:1; *display:inline; text-align:left; border:0 none; }
|
||||
.d-content.d-state-full { display:block; width:100%; margin:0; padding:0!important; height:100%; }
|
||||
.d-loading { width:96px; height:32px; text-align:left; text-indent:-999em; overflow:hidden; background:url(loading.gif) no-repeat center center; }
|
||||
.d-buttons { padding:8px; text-align:right; white-space:nowrap; }
|
||||
.d-button { margin-left:15px; padding: 0 8px; cursor: pointer; display: inline-block; min-height:2.2em; text-align: center; *padding:4px 10px; *height:2em; letter-spacing:2px; font-family: Tahoma, Arial/9!important; width:auto; overflow:visible; *width:1; color: #333; border: 1px solid #999; border-radius: 5px; background: #DDD; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFF', endColorstr='#DDDDDD'); background: linear-gradient(top, #FFF, #DDD); background: -moz-linear-gradient(top, #FFF, #DDD); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#FFF), to(#DDD)); text-shadow: 0px 1px 1px rgba(255, 255, 255, .5);; box-shadow: 0 1px 0 rgba(255, 255, 255, .7), 0 -1px 0 rgba(0, 0, 0, .09); -moz-transition:-moz-box-shadow linear .2s; -webkit-transition: -webkit-box-shadow linear .2s; transition: box-shadow linear .2s; }
|
||||
.d-button::-moz-focus-inner, .d-button::-moz-focus-outer { border:0 none; padding:0; margin:0; }
|
||||
.d-button:focus { outline:none 0; border-color:#426DC9; box-shadow:0 0 8px rgba(66, 109, 201, .9); }
|
||||
.d-button:hover { color:#000; border-color:#666; }
|
||||
.d-button:active { border-color:#666; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#DDDDDD', endColorstr='#FFFFFF'); background: linear-gradient(top, #DDD, #FFF); background: -moz-linear-gradient(top, #DDD, #FFF); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#DDD), to(#FFF)); box-shadow:inset 0 1px 1em rgba(0, 0, 0, .6), inset 0 1px 1em rgba(0, 0, 0, .3); }
|
||||
.d-button[disabled] { cursor:default; color:#666; background:#DDD; border: 1px solid #999; filter:alpha(opacity=50); opacity:.5; box-shadow:none; }
|
||||
.d-state-highlight { color: #FFF; border: 1px solid #1c6a9e; background: #2288cc; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee', endColorstr='#2288cc'); background: linear-gradient(top, #33bbee, #2288cc); background: -moz-linear-gradient(top, #33bbee, #2288cc); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#33bbee), to(#2288cc)); text-shadow: -1px -1px 1px #1c6a9e; }
|
||||
.d-state-highlight:hover { color:#FFF; border-color:#0F3A56; }
|
||||
.d-state-highlight:active { border-color:#1c6a9e; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee', endColorstr='#2288cc'); background: linear-gradient(top, #33bbee, #2288cc); background: -moz-linear-gradient(top, #33bbee, #2288cc); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#33bbee), to(#2288cc)); }
|
||||
.d-mask { background:#000; filter:alpha(opacity=70); opacity:.7; }
|
||||
/* common end */
|
||||
|
||||
.d-inner { background:#f0f1f9; }
|
||||
.d-titleBar { width:100%; height:0; position:relative; bottom:27px; _bottom:0; _margin-top:-27px; }
|
||||
.d-title { height:27px; line-height:27px; padding:0 37px 0 0; _padding:0; color:#333; text-shadow:1px 1px 0 rgba(255, 255, 255, .7); }
|
||||
.d-nw, .d-ne, .d-sw, .d-se, .d-n, .d-s, .d-close { background-image:url(opera/s1.png); background-repeat:no-repeat; }
|
||||
.d-nw { width:15px; height:32px; background-position: 0 0; }
|
||||
.d-ne { width:15px; height:32px; background-position: -15px 0; }
|
||||
.d-sw { width:15px; height:15px; background-position: 0 -33px; }
|
||||
.d-se { width:15px; height:15px; background-position: -15px -33px }
|
||||
.d-close { top:0; right:0; _z-index:1; width:27px; height:27px; _font-size:0; _line-height:0; *zoom:1; text-indent:-9999em; background-position:0 -96px; }
|
||||
.d-close:hover { background-position:0 -123px; }
|
||||
.d-n, .d-s { background-repeat:repeat-x; }
|
||||
.d-n { background-position: 0 -48px; }
|
||||
.d-s { background-position: 0 -81px; }
|
||||
.d-w, .d-e { background-image:url(opera/s2.png); background-repeat:repeat-y; }
|
||||
.d-w { background-position:left top; }
|
||||
.d-e { background-position: right bottom; }
|
||||
.d-icon, .d-main { padding-top:10px; }
|
||||
.d-state-noTitle .d-nw, .d-state-noTitle .d-ne, .d-state-noTitle .d-sw, .d-state-noTitle .d-se { width:3px; height:3px; }
|
||||
.d-state-noTitle .d-inner { border:1px solid #666; background:#FFF; }
|
||||
.d-state-noTitle { box-shadow:none; }
|
||||
.d-state-noTitle .d-nw, .d-state-noTitle .d-n, .d-state-noTitle .d-ne, .d-state-noTitle .d-w, .d-state-noTitle .d-e, .d-state-noTitle .d-sw, .d-state-noTitle .d-s, .d-state-noTitle .d-se { background:rgba(0, 0, 0, .05); background:#000\9!important; filter:alpha(opacity=5)!important; }
|
||||
.d-state-noTitle .d-titleBar { bottom:0; _bottom:0; _margin-top:0; }
|
||||
.d-state-noTitle .d-close { top:0; right:0; width:18px; height:18px; line-height:18px; text-align:center; text-indent:0; font-family: Helvetica, STHeiti; _font-family: '\u9ed1\u4f53', 'Book Antiqua', Palatino; font-size:18px; text-decoration:none; color:#214FA3; background:none; filter:!important; }
|
||||
.d-state-noTitle .d-close:hover, .d-state-noTitle .d-close:active { text-decoration:none; color:#900; }
|
||||
|
Before Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 177 B |
@ -1,189 +0,0 @@
|
||||
@charset "utf-8";
|
||||
/*
|
||||
* artDialog skin
|
||||
* https://github.com/aui/artDialog
|
||||
* (c) 2009-2013 TangBin, http://www.planeArt.cn
|
||||
*
|
||||
* This is licensed under the GNU LGPL, version 2.1 or later.
|
||||
* For details, see: http://creativecommons.org/licenses/LGPL/2.1/
|
||||
*/
|
||||
|
||||
/* common start */
|
||||
body { _margin:0; _height:100%; }/*IE6 BUG*/
|
||||
.d-outer { text-align:left; outline:none 0; }
|
||||
.d-border, .d-dialog { border:0 none; margin:0; border-collapse:collapse; width:auto; }
|
||||
.d-nw, .d-n, .d-ne, .d-w, .d-c, .d-e, .d-sw, .d-s, .d-se, .d-header, .d-main, .d-footer { padding:0; }
|
||||
.d-header, .d-button { font: 14px/1.11 'Microsoft Yahei', Tahoma, Arial, Helvetica, STHeiti; _font-family:Tahoma,Arial,Helvetica,STHeiti; -o-font-family: Tahoma, Arial; }
|
||||
.d-title { overflow:hidden; text-overflow: ellipsis; cursor:default; }
|
||||
.d-state-noTitle .d-title { display:none; }
|
||||
.d-close { display:block; position:absolute; text-decoration:none; outline:none; _cursor:pointer; }
|
||||
.d-close:hover { text-decoration:none; }
|
||||
.d-main { text-align:center; vertical-align:middle; min-width:9em; }
|
||||
.d-content { display:inline-block; display:block\0/*IE8 BUG*/; display:inline-block\9\0; *zoom:1; *display:inline; text-align:left; border:0 none; }
|
||||
.d-content.d-state-full { display:block; width:100%; margin:0; padding:0!important; height:100%; }
|
||||
.d-loading { width:96px; height:32px; text-align:left; text-indent:-999em; overflow:hidden; background:url(loading.gif) no-repeat center center; }
|
||||
.d-buttons { padding:8px; text-align:right; white-space:nowrap; }
|
||||
.d-button {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
padding: 7px 15px;
|
||||
font-size: 13px;
|
||||
font-weight: bold;
|
||||
color: #333;
|
||||
text-shadow: 0 1px 0 rgba(255,255,255,0.9);
|
||||
white-space: nowrap;
|
||||
background-color: #eaeaea;
|
||||
background-image: -moz-linear-gradient(#fafafa, #eaeaea);
|
||||
background-image: -webkit-linear-gradient(#fafafa, #eaeaea);
|
||||
background-image: linear-gradient(#fafafa, #eaeaea);
|
||||
background-repeat: repeat-x;
|
||||
border-radius: 3px;
|
||||
border: 1px solid #ddd;
|
||||
border-bottom-color: #c5c5c5;
|
||||
box-shadow: 0 1px 3px rgba(0,0,0,0.05);
|
||||
vertical-align: middle;
|
||||
cursor: pointer;
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
.d-button::-moz-focus-inner, .d-button::-moz-focus-outer { border:0 none; padding:0; margin:0; }
|
||||
.d-button:focus {
|
||||
border-color: #51a7e8;
|
||||
box-shadow: inset 0 1px 2px rgba(0,0,0,0.075),0 0 5px rgba(81,167,232,0.5) }
|
||||
.d-button:hover {
|
||||
text-decoration: none;
|
||||
background-color: #dadada;
|
||||
background-image: -moz-linear-gradient(#eaeaea, #dadada);
|
||||
background-image: -webkit-linear-gradient(#eaeaea, #dadada);
|
||||
background-image: linear-gradient(#eaeaea, #dadada);
|
||||
background-repeat: repeat-x;
|
||||
border-color: #ccc #ccc #b5b5b5
|
||||
}
|
||||
.d-button:active {
|
||||
background-color: #dadada;
|
||||
background-image: none;
|
||||
border-color: #b5b5b5;
|
||||
box-shadow: inset 0 3px 5px rgba(0,0,0,0.15) }
|
||||
.d-button[disabled] {
|
||||
opacity: .5;
|
||||
color: #666;
|
||||
text-shadow: 0 1px 0 rgba(255,255,255,0.9);
|
||||
background-image: none;
|
||||
background-color: #e5e5e5;
|
||||
border-color: #c5c5c5;
|
||||
cursor: default;
|
||||
box-shadow: none
|
||||
}
|
||||
.d-state-highlight {
|
||||
color: #fff;
|
||||
text-shadow: 0 -1px 0 rgba(0,0,0,0.25);
|
||||
background-color: #0d6efd;
|
||||
background-image: -moz-linear-gradient(#0d6efd, #0d6efd);
|
||||
background-image: -webkit-linear-gradient(#0d6efd, #0d6efd);
|
||||
background-image: linear-gradient(#0d6efd, #0d6efd);
|
||||
background-repeat: repeat-x;
|
||||
border-color: #0d6efd
|
||||
}
|
||||
.d-state-highlight:hover {
|
||||
color: #fff;
|
||||
background-color: #0b5ed7;
|
||||
background-image: -moz-linear-gradient(#0b5ed7, #0b5ed7);
|
||||
background-image: -webkit-linear-gradient(#0b5ed7, #0b5ed7);
|
||||
background-image: linear-gradient(#0b5ed7, #0b5ed7);
|
||||
background-repeat: repeat-x;
|
||||
border-color: #0b5ed7;
|
||||
}
|
||||
.d-state-highlight:active {
|
||||
background-color: #0a58ca;
|
||||
background-image: none;
|
||||
border-color: #0a58ca }
|
||||
.d-mask { background:#FFF; filter:alpha(opacity=70); opacity:.7; }
|
||||
/* common end */
|
||||
|
||||
.d-inner { background:#FFF; }
|
||||
.d-outer, .d-inner {
|
||||
border: 1px solid #999;
|
||||
border: 1px solid rgba(0,0,0,0.3);
|
||||
}
|
||||
.d-nw, .d-ne, .d-sw, .d-se { width:8px; height:8px; }
|
||||
.d-nw, .d-n, .d-ne, .d-w, .d-e, .d-sw, .d-s, .d-se { background:rgba(0, 0, 0, .4); background:#000\9!important; filter:alpha(opacity=40); }
|
||||
.d-state-lock .d-nw, .d-state-lock .d-n, .d-state-lock .d-ne, .d-state-lock .d-w, .d-state-lock .d-e, .d-state-lock .d-sw, .d-state-lock .d-s, .d-state-lock .d-se { background:rgba(0, 0, 0, .5); background:#000\9!important; filter:alpha(opacity=50); }
|
||||
.d-titleBar { position:relative; height:100%; }
|
||||
.d-title {
|
||||
height: 40px;
|
||||
/*line-height:37px; */
|
||||
padding: 9px 15px;
|
||||
/*padding:0 28px 0 10px; */
|
||||
text-shadow:0 1px 0 rgba(255, 255, 255, .7);
|
||||
background-color:#FFFFFF;
|
||||
font-weight:bold;
|
||||
color:#000000;
|
||||
font-family: Tahoma, Arial/9!important;
|
||||
background-color:#FFFFFF;
|
||||
background: linear-gradient(top, #FFFFFF, #FFFFFF);
|
||||
background: -moz-linear-gradient(top, #FFFFFF, #FFFFFF);
|
||||
background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#FFFFFF), to(#FFFFFF));
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFF', endColorstr='#FFFFFF');
|
||||
border-top:1px solid #edf5f8;
|
||||
border-bottom: 1px solid #eee; }
|
||||
.d-state-focus .d-title {
|
||||
color:#000000;
|
||||
}
|
||||
.d-state-drag .d-title {
|
||||
background: linear-gradient(top, #FFFFFF, #FFFFFF);
|
||||
background: -moz-linear-gradient(top, #FFFFFF, #FFFFFF);
|
||||
background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#FFFFFF), to(#FFFFFF));
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFF', endColorstr='#FFFFFF');
|
||||
box-shadow:none; }
|
||||
.d-state-drag .d-titleBar { box-shadow:none; }
|
||||
.d-close {
|
||||
padding:0;
|
||||
top:8px;
|
||||
right:4px;
|
||||
width:21px;
|
||||
height:21px;
|
||||
line-height:21px;
|
||||
font-size: 25px;
|
||||
font-weight: bold;
|
||||
color: #000;
|
||||
text-align:center;
|
||||
font-family: Helvetica, STHeiti;
|
||||
_font-family: Tahoma, '\u9ed1\u4f53', 'Book Antiqua', Palatino;
|
||||
text-shadow: 0 1px 0 #fff;
|
||||
opacity: .2;
|
||||
filter: alpha(opacity=20); }
|
||||
.d-close:hover { color:#85140E; }
|
||||
.d-content { color:#666; }
|
||||
.d-state-focus .d-content { color:#000; }.d-buttons {
|
||||
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;
|
||||
-webkit-box-shadow: inset 0 1px 0 #fff;
|
||||
-moz-box-shadow: inset 0 1px 0 #fff;
|
||||
box-shadow: inset 0 1px 0 #fff; }
|
||||
.d-state-noTitle .d-nw, .d-state-noTitle .d-ne, .d-state-noTitle .d-sw, .d-state-noTitle .d-se { width:3px; height:3px; }
|
||||
.d-state-noTitle .d-inner { border:1px solid #666; background:#FFF; }
|
||||
.d-state-noTitle { border:0 none; box-shadow:none; }
|
||||
.d-state-noTitle .d-nw, .d-state-noTitle .d-n, .d-state-noTitle .d-ne, .d-state-noTitle .d-w, .d-state-noTitle .d-e, .d-state-noTitle .d-sw, .d-state-noTitle .d-s, .d-state-noTitle .d-se { background:rgba(0, 0, 0, .05); background:#000\9!important; filter:alpha(opacity=5)!important; }
|
||||
.d-state-noTitle .d-titleBar { bottom:0; _bottom:0; _margin-top:0; }
|
||||
.d-state-noTitle .d-close { top:0; right:0; width:18px; height:18px; line-height:18px; text-align:center; text-indent:0; font-size:18px; text-decoration:none; color:#214FA3; background:none; filter:!important; }
|
||||
.d-state-noTitle .d-close:hover, .d-state-noTitle .d-close:active { text-decoration:none; color:#900; }
|
||||
.d-state-noTitle .d-dialog { box-shadow: none; }
|
||||
|
||||
@media screen and (min-width:0) {/* css3 */
|
||||
.d-nw, .d-n, .d-ne, .d-w, .d-e, .d-sw, .d-s, .d-se { display:none; }
|
||||
.d-inner { border:0 none; }
|
||||
.d-outer { }
|
||||
.d-state-focus .d-dialog{box-shadow: 0 3px 7px rgba(0,0,0,0.3);
|
||||
.d-state-drag, .d-state-focus:active { box-shadow:none; }
|
||||
.d-state-focus { box-shadow:0 3px 26px rgba(0, 0, 0, .9); }
|
||||
.d-outer { -webkit-transform: scale(0); transform: scale(0); -webkit-transition: -webkit-box-shadow .2s ease-in-out, -webkit-transform .2s ease-in-out; transition: box-shadow .2s ease-in-out, transform .2s ease-in-out; }
|
||||
.d-state-visible { -webkit-transform: scale(1); transform: scale(1); }
|
||||
}
|
||||
@ -1,54 +0,0 @@
|
||||
@charset "utf-8";
|
||||
/*
|
||||
* artDialog skin
|
||||
* https://github.com/aui/artDialog
|
||||
* (c) 2009-2013 TangBin, http://www.planeArt.cn
|
||||
*
|
||||
* This is licensed under the GNU LGPL, version 2.1 or later.
|
||||
* For details, see: http://creativecommons.org/licenses/LGPL/2.1/
|
||||
*/
|
||||
|
||||
/* common start */
|
||||
body { _margin:0; _height:100%; }/*IE6 BUG*/
|
||||
.d-outer { text-align:left; outline:none 0; }
|
||||
.d-border, .d-dialog { border:0 none; margin:0; border-collapse:collapse; width:auto; }
|
||||
.d-nw, .d-n, .d-ne, .d-w, .d-c, .d-e, .d-sw, .d-s, .d-se, .d-header, .d-main, .d-footer { padding:0; }
|
||||
.d-header, .d-button { font: 12px/1.11 'Microsoft Yahei', Tahoma, Arial, Helvetica, STHeiti; _font-family:Tahoma,Arial,Helvetica,STHeiti; -o-font-family: Tahoma, Arial; }
|
||||
.d-title { overflow:hidden; text-overflow: ellipsis; cursor:default; }
|
||||
.d-state-noTitle .d-title { display:none; }
|
||||
.d-close { display:block; position:absolute; text-decoration:none; outline:none; _cursor:pointer; }
|
||||
.d-close:hover { text-decoration:none; }
|
||||
.d-main { text-align:center; vertical-align:middle; min-width:9em; }
|
||||
.d-content { display:inline-block; display:block\0/*IE8 BUG*/; display:inline-block\9\0; *zoom:1; *display:inline; text-align:left; border:0 none; }
|
||||
.d-content.d-state-full { display:block; width:100%; margin:0; padding:0!important; height:100%; }
|
||||
.d-loading { width:96px; height:32px; text-align:left; text-indent:-999em; overflow:hidden; background:url(loading.gif) no-repeat center center; }
|
||||
.d-buttons { padding:8px; text-align:right; white-space:nowrap; }
|
||||
.d-button { margin-left:15px; padding: 0 8px; cursor: pointer; display: inline-block; min-height:2.2em; text-align: center; *padding:4px 10px; *height:2em; letter-spacing:2px; font-family: Tahoma, Arial/9!important; width:auto; overflow:visible; *width:1; color: #333; border: 1px solid #999; border-radius: 5px; background: #DDD; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFF', endColorstr='#DDDDDD'); background: linear-gradient(top, #FFF, #DDD); background: -moz-linear-gradient(top, #FFF, #DDD); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#FFF), to(#DDD)); text-shadow: 0px 1px 1px rgba(255, 255, 255, .5);; box-shadow: 0 1px 0 rgba(255, 255, 255, .7), 0 -1px 0 rgba(0, 0, 0, .09); -moz-transition:-moz-box-shadow linear .2s; -webkit-transition: -webkit-box-shadow linear .2s; transition: box-shadow linear .2s; }
|
||||
.d-button::-moz-focus-inner, .d-button::-moz-focus-outer { border:0 none; padding:0; margin:0; }
|
||||
.d-button:focus { outline:none 0; border-color:#426DC9; box-shadow:0 0 8px rgba(66, 109, 201, .9); }
|
||||
.d-button:hover { color:#000; border-color:#666; }
|
||||
.d-button:active { border-color:#666; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#DDDDDD', endColorstr='#FFFFFF'); background: linear-gradient(top, #DDD, #FFF); background: -moz-linear-gradient(top, #DDD, #FFF); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#DDD), to(#FFF)); box-shadow:inset 0 1px 1em rgba(0, 0, 0, .6), inset 0 1px 1em rgba(0, 0, 0, .3); }
|
||||
.d-button[disabled] { cursor:default; color:#666; background:#DDD; border: 1px solid #999; filter:alpha(opacity=50); opacity:.5; box-shadow:none; }
|
||||
.d-state-highlight { color: #FFF; border: 1px solid #1c6a9e; background: #2288cc; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee', endColorstr='#2288cc'); background: linear-gradient(top, #33bbee, #2288cc); background: -moz-linear-gradient(top, #33bbee, #2288cc); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#33bbee), to(#2288cc)); text-shadow: -1px -1px 1px #1c6a9e; }
|
||||
.d-state-highlight:hover { color:#FFF; border-color:#0F3A56; }
|
||||
.d-state-highlight:active { border-color:#1c6a9e; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee', endColorstr='#2288cc'); background: linear-gradient(top, #33bbee, #2288cc); background: -moz-linear-gradient(top, #33bbee, #2288cc); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#33bbee), to(#2288cc)); }
|
||||
.d-mask { background:#000; filter:alpha(opacity=70); opacity:.7; }
|
||||
/* common end */
|
||||
|
||||
.d-inner { background:#FFF; border:1px solid #666; }
|
||||
.d-nw, .d-ne, .d-sw, .d-se { width:3px; height:3px; }
|
||||
.d-nw, .d-n, .d-ne, .d-w, .d-e, .d-sw, .d-s, .d-se { background:rgba(0, 0, 0, .05); background:#000\9!important; filter:alpha(opacity=5); }
|
||||
.d-titleBar { position:relative; height:100%; }
|
||||
.d-title { position:absolute; top:0; left:0; width:100%; height:24px; text-indent:-9999em; overflow:hidden; font-size:0; }
|
||||
.d-state-drag .d-title { color:#666; }
|
||||
.d-close { padding:0; top:0; right:0; width:18px; height:18px; line-height:18px; text-align:center; font-family: Helvetica, STHeiti; _font-family: '\u9ed1\u4f53', 'Book Antiqua', Palatino; font-size:18px; text-decoration:none; color:#214FA3; }
|
||||
.d-close:hover, .d-close:active { text-decoration:none; color:#900; }
|
||||
.d-content { color:#666; }
|
||||
.d-state-focus .d-content { color:#000; }
|
||||
@media screen and (min-width:0) {
|
||||
.d-close { width:20px; height:20px; line-height:20px; right:-10px; top:-10px; border-radius:20px; background:#999; color:#FFF; box-shadow:0 1px 3px rgba(0, 0, 0, .3); -moz-transition: linear .06s; -webkit-transition: linear .06s; transition: linear .06s; }
|
||||
.d-close:hover { width:24px; height:24px; line-height:24px; right:-12px; top:-12px; color:#FFF; box-shadow:0 1px 3px rgba(209, 40, 42, .5); background:#d1282a; border-radius:24px; }
|
||||
.d-state-lock .d-dialog { box-shadow:0 3px 26px rgba(0, 0, 0, .9); -moz-transition:-moz-box-shadow linear .2s; -webkit-transition: -webkit-box-shadow linear .2s; transition: -webkit-box-shadow linear .2s; }
|
||||
.d-dialog:active { box-shadow:0 0 5px rgba(0, 0, 0, .1)!important; }
|
||||
.d-state-drag { box-shadow:none!important; }
|
||||
}
|
||||
@ -1,58 +0,0 @@
|
||||
@charset "utf-8";
|
||||
/*
|
||||
* artDialog skin
|
||||
* https://github.com/aui/artDialog
|
||||
* (c) 2009-2013 TangBin, http://www.planeArt.cn
|
||||
*
|
||||
* This is licensed under the GNU LGPL, version 2.1 or later.
|
||||
* For details, see: http://creativecommons.org/licenses/LGPL/2.1/
|
||||
*/
|
||||
|
||||
/* common start */
|
||||
body { _margin:0; _height:100%; }/*IE6 BUG*/
|
||||
.d-outer { text-align:left; outline:none 0; }
|
||||
.d-border, .d-dialog { border:0 none; margin:0; border-collapse:collapse; width:auto; }
|
||||
.d-nw, .d-n, .d-ne, .d-w, .d-c, .d-e, .d-sw, .d-s, .d-se, .d-header, .d-main, .d-footer { padding:0; }
|
||||
.d-header, .d-button { font: 12px/1.11 'Microsoft Yahei', Tahoma, Arial, Helvetica, STHeiti; _font-family:Tahoma,Arial,Helvetica,STHeiti; -o-font-family: Tahoma, Arial; }
|
||||
.d-title { overflow:hidden; text-overflow: ellipsis; cursor:default; }
|
||||
.d-state-noTitle .d-title { display:none; }
|
||||
.d-close { display:block; position:absolute; text-decoration:none; outline:none; _cursor:pointer; }
|
||||
.d-close:hover { text-decoration:none; }
|
||||
.d-main { text-align:center; vertical-align:middle; min-width:9em; }
|
||||
.d-content { display:inline-block; display:block\0/*IE8 BUG*/; display:inline-block\9\0; *zoom:1; *display:inline; text-align:left; border:0 none; }
|
||||
.d-content.d-state-full { display:block; width:100%; margin:0; padding:0!important; height:100%; }
|
||||
.d-loading { width:96px; height:32px; text-align:left; text-indent:-999em; overflow:hidden; background:url(loading.gif) no-repeat center center; }
|
||||
.d-buttons { padding:8px; text-align:right; white-space:nowrap; }
|
||||
.d-button { margin-left:15px; padding: 0 8px; cursor: pointer; display: inline-block; min-height:2.2em; text-align: center; *padding:4px 10px; *height:2em; letter-spacing:2px; font-family: Tahoma, Arial/9!important; width:auto; overflow:visible; *width:1; color: #333; border: 1px solid #999; border-radius: 5px; background: #DDD; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFF', endColorstr='#DDDDDD'); background: linear-gradient(top, #FFF, #DDD); background: -moz-linear-gradient(top, #FFF, #DDD); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#FFF), to(#DDD)); text-shadow: 0px 1px 1px rgba(255, 255, 255, .5);; box-shadow: 0 1px 0 rgba(255, 255, 255, .7), 0 -1px 0 rgba(0, 0, 0, .09); -moz-transition:-moz-box-shadow linear .2s; -webkit-transition: -webkit-box-shadow linear .2s; transition: box-shadow linear .2s; }
|
||||
.d-button::-moz-focus-inner, .d-button::-moz-focus-outer { border:0 none; padding:0; margin:0; }
|
||||
.d-button:focus { outline:none 0; border-color:#426DC9; box-shadow:0 0 8px rgba(66, 109, 201, .9); }
|
||||
.d-button:hover { color:#000; border-color:#666; }
|
||||
.d-button:active { border-color:#666; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#DDDDDD', endColorstr='#FFFFFF'); background: linear-gradient(top, #DDD, #FFF); background: -moz-linear-gradient(top, #DDD, #FFF); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#DDD), to(#FFF)); box-shadow:inset 0 1px 1em rgba(0, 0, 0, .6), inset 0 1px 1em rgba(0, 0, 0, .3); }
|
||||
.d-button[disabled] { cursor:default; color:#666; background:#DDD; border: 1px solid #999; filter:alpha(opacity=50); opacity:.5; box-shadow:none; }
|
||||
.d-state-highlight { color: #FFF; border: 1px solid #1c6a9e; background: #2288cc; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee', endColorstr='#2288cc'); background: linear-gradient(top, #33bbee, #2288cc); background: -moz-linear-gradient(top, #33bbee, #2288cc); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#33bbee), to(#2288cc)); text-shadow: -1px -1px 1px #1c6a9e; }
|
||||
.d-state-highlight:hover { color:#FFF; border-color:#0F3A56; }
|
||||
.d-state-highlight:active { border-color:#1c6a9e; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee', endColorstr='#2288cc'); background: linear-gradient(top, #33bbee, #2288cc); background: -moz-linear-gradient(top, #33bbee, #2288cc); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#33bbee), to(#2288cc)); }
|
||||
.d-mask { background:#000; filter:alpha(opacity=70); opacity:.7; }
|
||||
/* common end */
|
||||
|
||||
.d-inner { background:rgba(0, 0, 0, .7); }
|
||||
.d-dialog { background:#FFF; border-radius:3px; }
|
||||
.d-inner { background:#FFF; /*ie*/}
|
||||
.d-outer { border:1px solid #000; border-radius:5px; box-shadow: 0 3px 0 rgba(0,0,0,0.1); -moz-transition:-moz-box-shadow linear .2s; -webkit-transition: -webkit-box-shadow linear .2s; transition: -webkit-box-shadow linear .2s; }
|
||||
.d-state-lock { box-shadow:0 3px 26px rgba(0, 0, 0, .9); }
|
||||
.d-outer:active { box-shadow:none!important; }
|
||||
.d-state-drag { box-shadow:none!important; }
|
||||
.d-border { border-radius:3px; }
|
||||
.d-nw, .d-ne { width:5px; height:37px; }
|
||||
.d-sw, .d-se { width:5px; height:5px; }
|
||||
.d-nw, .d-n, .d-ne, .d-w, .d-e, .d-sw, .d-s, .d-se { background:rgba(0, 0, 0, .7); background:#000\9!important; filter:alpha(opacity=70); }
|
||||
.d-titleBar { width:100%; height:0; position:relative; bottom:33px; _bottom:0; _margin-top:-33px; }
|
||||
.d-title { height:27px; line-height:27px; padding:0 16px 0 5px; color:#FFF; font-weight:700; text-shadow:0 1px 0 #000; }
|
||||
.d-close { padding:0; top:2px; right:5px; width:21px; height:21px; line-height:21px; font-size:18px; text-align:center; color:#EBEBEB; font-family: Helvetica, STHeiti; _font-family: Tahoma, '\u9ed1\u4f53', 'Book Antiqua', Palatino; border:1px solid transparent; _border:0 none; background:#000; border-radius:15px; }
|
||||
.d-close:hover { color:#FFF; background:#C72015; border:1px solid #000; _border:0 none; box-shadow: 0 1px 0 rgba(255, 255, 255, .3), inset 0 1px 0 rgba(255, 255, 255, .3); }
|
||||
.d-close:active { box-shadow: none; }
|
||||
.d-state-noTitle { }
|
||||
.d-content { color:#666; }
|
||||
.d-state-noTitle .d-nw, .d-state-noTitle .d-ne { height:5px; }
|
||||
.d-state-noTitle .d-titleBar { bottom:0; _bottom:0; _margin-top:0; }
|
||||
.d-state-noTitle .d-close { top:5px; }
|
||||
@ -1,485 +0,0 @@
|
||||
/*!
|
||||
* Bootstrap Reboot v5.1.2 (https://getbootstrap.com/)
|
||||
* Copyright 2011-2021 The Bootstrap Authors
|
||||
* Copyright 2011-2021 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||||
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
|
||||
*/
|
||||
:root {
|
||||
--bs-blue: #0d6efd;
|
||||
--bs-indigo: #6610f2;
|
||||
--bs-purple: #6f42c1;
|
||||
--bs-pink: #d63384;
|
||||
--bs-red: #dc3545;
|
||||
--bs-orange: #fd7e14;
|
||||
--bs-yellow: #ffc107;
|
||||
--bs-green: #198754;
|
||||
--bs-teal: #20c997;
|
||||
--bs-cyan: #0dcaf0;
|
||||
--bs-white: #fff;
|
||||
--bs-gray: #6c757d;
|
||||
--bs-gray-dark: #343a40;
|
||||
--bs-gray-100: #f8f9fa;
|
||||
--bs-gray-200: #e9ecef;
|
||||
--bs-gray-300: #dee2e6;
|
||||
--bs-gray-400: #ced4da;
|
||||
--bs-gray-500: #adb5bd;
|
||||
--bs-gray-600: #6c757d;
|
||||
--bs-gray-700: #495057;
|
||||
--bs-gray-800: #343a40;
|
||||
--bs-gray-900: #212529;
|
||||
--bs-primary: #0d6efd;
|
||||
--bs-secondary: #6c757d;
|
||||
--bs-success: #198754;
|
||||
--bs-info: #0dcaf0;
|
||||
--bs-warning: #ffc107;
|
||||
--bs-danger: #dc3545;
|
||||
--bs-light: #f8f9fa;
|
||||
--bs-dark: #212529;
|
||||
--bs-primary-rgb: 13, 110, 253;
|
||||
--bs-secondary-rgb: 108, 117, 125;
|
||||
--bs-success-rgb: 25, 135, 84;
|
||||
--bs-info-rgb: 13, 202, 240;
|
||||
--bs-warning-rgb: 255, 193, 7;
|
||||
--bs-danger-rgb: 220, 53, 69;
|
||||
--bs-light-rgb: 248, 249, 250;
|
||||
--bs-dark-rgb: 33, 37, 41;
|
||||
--bs-white-rgb: 255, 255, 255;
|
||||
--bs-black-rgb: 0, 0, 0;
|
||||
--bs-body-color-rgb: 33, 37, 41;
|
||||
--bs-body-bg-rgb: 255, 255, 255;
|
||||
--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
||||
--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
||||
--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));
|
||||
--bs-body-font-family: var(--bs-font-sans-serif);
|
||||
--bs-body-font-size: 1rem;
|
||||
--bs-body-font-weight: 400;
|
||||
--bs-body-line-height: 1.5;
|
||||
--bs-body-color: #212529;
|
||||
--bs-body-bg: #fff;
|
||||
}
|
||||
|
||||
*,
|
||||
*::before,
|
||||
*::after {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: no-preference) {
|
||||
:root {
|
||||
scroll-behavior: smooth;
|
||||
}
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: var(--bs-body-font-family);
|
||||
font-size: var(--bs-body-font-size);
|
||||
font-weight: var(--bs-body-font-weight);
|
||||
line-height: var(--bs-body-line-height);
|
||||
color: var(--bs-body-color);
|
||||
text-align: var(--bs-body-text-align);
|
||||
background-color: var(--bs-body-bg);
|
||||
-webkit-text-size-adjust: 100%;
|
||||
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
hr {
|
||||
margin: 1rem 0;
|
||||
color: inherit;
|
||||
background-color: currentColor;
|
||||
border: 0;
|
||||
opacity: 0.25;
|
||||
}
|
||||
|
||||
hr:not([size]) {
|
||||
height: 1px;
|
||||
}
|
||||
|
||||
h6, h5, h4, h3, h2, h1 {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0.5rem;
|
||||
font-weight: 500;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: calc(1.375rem + 1.5vw);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
h1 {
|
||||
font-size: 2.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: calc(1.325rem + 0.9vw);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
h2 {
|
||||
font-size: 2rem;
|
||||
}
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: calc(1.3rem + 0.6vw);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
h3 {
|
||||
font-size: 1.75rem;
|
||||
}
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: calc(1.275rem + 0.3vw);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
h4 {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
h5 {
|
||||
font-size: 1.25rem;
|
||||
}
|
||||
|
||||
h6 {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
abbr[title],
|
||||
abbr[data-bs-original-title] {
|
||||
-webkit-text-decoration: underline dotted;
|
||||
text-decoration: underline dotted;
|
||||
cursor: help;
|
||||
-webkit-text-decoration-skip-ink: none;
|
||||
text-decoration-skip-ink: none;
|
||||
}
|
||||
|
||||
address {
|
||||
margin-bottom: 1rem;
|
||||
font-style: normal;
|
||||
line-height: inherit;
|
||||
}
|
||||
|
||||
ol,
|
||||
ul {
|
||||
padding-left: 2rem;
|
||||
}
|
||||
|
||||
ol,
|
||||
ul,
|
||||
dl {
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
ol ol,
|
||||
ul ul,
|
||||
ol ul,
|
||||
ul ol {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
dt {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
dd {
|
||||
margin-bottom: 0.5rem;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
margin: 0 0 1rem;
|
||||
}
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: bolder;
|
||||
}
|
||||
|
||||
small {
|
||||
font-size: 0.875em;
|
||||
}
|
||||
|
||||
mark {
|
||||
padding: 0.2em;
|
||||
background-color: #fcf8e3;
|
||||
}
|
||||
|
||||
sub,
|
||||
sup {
|
||||
position: relative;
|
||||
font-size: 0.75em;
|
||||
line-height: 0;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
sub {
|
||||
bottom: -0.25em;
|
||||
}
|
||||
|
||||
sup {
|
||||
top: -0.5em;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #0d6efd;
|
||||
text-decoration: underline;
|
||||
}
|
||||
a:hover {
|
||||
color: #0a58ca;
|
||||
}
|
||||
|
||||
a:not([href]):not([class]), a:not([href]):not([class]):hover {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
pre,
|
||||
code,
|
||||
kbd,
|
||||
samp {
|
||||
font-family: var(--bs-font-monospace);
|
||||
font-size: 1em;
|
||||
direction: ltr /* rtl:ignore */;
|
||||
unicode-bidi: bidi-override;
|
||||
}
|
||||
|
||||
pre {
|
||||
display: block;
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
overflow: auto;
|
||||
font-size: 0.875em;
|
||||
}
|
||||
pre code {
|
||||
font-size: inherit;
|
||||
color: inherit;
|
||||
word-break: normal;
|
||||
}
|
||||
|
||||
code {
|
||||
font-size: 0.875em;
|
||||
color: #d63384;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
a > code {
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
kbd {
|
||||
padding: 0.2rem 0.4rem;
|
||||
font-size: 0.875em;
|
||||
color: #fff;
|
||||
background-color: #212529;
|
||||
border-radius: 0.2rem;
|
||||
}
|
||||
kbd kbd {
|
||||
padding: 0;
|
||||
font-size: 1em;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
figure {
|
||||
margin: 0 0 1rem;
|
||||
}
|
||||
|
||||
img,
|
||||
svg {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
table {
|
||||
caption-side: bottom;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
caption {
|
||||
padding-top: 0.5rem;
|
||||
padding-bottom: 0.5rem;
|
||||
color: #6c757d;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
th {
|
||||
text-align: inherit;
|
||||
text-align: -webkit-match-parent;
|
||||
}
|
||||
|
||||
thead,
|
||||
tbody,
|
||||
tfoot,
|
||||
tr,
|
||||
td,
|
||||
th {
|
||||
border-color: inherit;
|
||||
border-style: solid;
|
||||
border-width: 0;
|
||||
}
|
||||
|
||||
label {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
button {
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
button:focus:not(:focus-visible) {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
input,
|
||||
button,
|
||||
select,
|
||||
optgroup,
|
||||
textarea {
|
||||
margin: 0;
|
||||
font-family: inherit;
|
||||
font-size: inherit;
|
||||
line-height: inherit;
|
||||
}
|
||||
|
||||
button,
|
||||
select {
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
[role=button] {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
select {
|
||||
word-wrap: normal;
|
||||
}
|
||||
select:disabled {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
[list]::-webkit-calendar-picker-indicator {
|
||||
display: none;
|
||||
}
|
||||
|
||||
button,
|
||||
[type=button],
|
||||
[type=reset],
|
||||
[type=submit] {
|
||||
-webkit-appearance: button;
|
||||
}
|
||||
button:not(:disabled),
|
||||
[type=button]:not(:disabled),
|
||||
[type=reset]:not(:disabled),
|
||||
[type=submit]:not(:disabled) {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
::-moz-focus-inner {
|
||||
padding: 0;
|
||||
border-style: none;
|
||||
}
|
||||
|
||||
textarea {
|
||||
resize: vertical;
|
||||
}
|
||||
|
||||
fieldset {
|
||||
min-width: 0;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
legend {
|
||||
float: left;
|
||||
width: 100%;
|
||||
padding: 0;
|
||||
margin-bottom: 0.5rem;
|
||||
font-size: calc(1.275rem + 0.3vw);
|
||||
line-height: inherit;
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
legend {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
}
|
||||
legend + * {
|
||||
clear: left;
|
||||
}
|
||||
|
||||
::-webkit-datetime-edit-fields-wrapper,
|
||||
::-webkit-datetime-edit-text,
|
||||
::-webkit-datetime-edit-minute,
|
||||
::-webkit-datetime-edit-hour-field,
|
||||
::-webkit-datetime-edit-day-field,
|
||||
::-webkit-datetime-edit-month-field,
|
||||
::-webkit-datetime-edit-year-field {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
::-webkit-inner-spin-button {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
[type=search] {
|
||||
outline-offset: -2px;
|
||||
-webkit-appearance: textfield;
|
||||
}
|
||||
|
||||
/* rtl:raw:
|
||||
[type="tel"],
|
||||
[type="url"],
|
||||
[type="email"],
|
||||
[type="number"] {
|
||||
direction: ltr;
|
||||
}
|
||||
*/
|
||||
::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
::-webkit-color-swatch-wrapper {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
::-webkit-file-upload-button {
|
||||
font: inherit;
|
||||
}
|
||||
|
||||
::file-selector-button {
|
||||
font: inherit;
|
||||
}
|
||||
|
||||
::-webkit-file-upload-button {
|
||||
font: inherit;
|
||||
-webkit-appearance: button;
|
||||
}
|
||||
|
||||
output {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
iframe {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
summary {
|
||||
display: list-item;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
progress {
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
[hidden] {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
/*# sourceMappingURL=bootstrap-reboot.css.map */
|
||||