new navMenu
This commit is contained in:
@@ -1,42 +0,0 @@
|
||||
/*
|
||||
* Copyright [2020] [MaxKey of copyright http://www.maxkey.top]
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
|
||||
package org.maxkey.web;
|
||||
|
||||
import org.apache.mybatis.jpa.persistence.JpaBaseEntity;
|
||||
import org.apache.mybatis.jpa.persistence.JpaPageResults;
|
||||
import org.maxkey.web.message.Message;
|
||||
import org.springframework.web.bind.annotation.ModelAttribute;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
public interface BasicController <T extends JpaBaseEntity> {
|
||||
|
||||
public JpaPageResults<T> pageResults(@ModelAttribute("modelAttribute") T modelAttribute);
|
||||
|
||||
public ModelAndView forwardAdd(@ModelAttribute("modelAttribute") T modelAttribute);
|
||||
|
||||
public Message insert(@ModelAttribute("modelAttribute") T modelAttribute);
|
||||
|
||||
public ModelAndView forwardUpdate(@PathVariable("id") String id);
|
||||
|
||||
public Message update(@ModelAttribute("modelAttribute") T modelAttribute);
|
||||
|
||||
public Message delete(@ModelAttribute("modelAttribute") T modelAttribute) ;
|
||||
|
||||
|
||||
}
|
||||
@@ -20,8 +20,12 @@
|
||||
*/
|
||||
package org.maxkey.persistence.mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.mybatis.jpa.persistence.IJpaBaseMapper;
|
||||
import org.maxkey.entity.Accounts;
|
||||
import org.maxkey.entity.AccountsStrategy;
|
||||
import org.maxkey.entity.UserInfo;
|
||||
|
||||
/**
|
||||
* @author Crystal.sea
|
||||
@@ -30,4 +34,7 @@ import org.maxkey.entity.Accounts;
|
||||
public interface AccountsMapper extends IJpaBaseMapper<Accounts> {
|
||||
|
||||
|
||||
public List<UserInfo> queryUserNotInStrategy(AccountsStrategy strategy);
|
||||
|
||||
public long deleteByStrategy(AccountsStrategy strategy);
|
||||
}
|
||||
|
||||
@@ -17,13 +17,19 @@
|
||||
|
||||
package org.maxkey.persistence.service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.mybatis.jpa.persistence.JpaBaseService;
|
||||
import org.maxkey.constants.ConstantsStatus;
|
||||
import org.maxkey.crypto.ReciprocalUtils;
|
||||
import org.maxkey.entity.Accounts;
|
||||
import org.maxkey.entity.AccountsStrategy;
|
||||
import org.maxkey.entity.UserInfo;
|
||||
import org.maxkey.persistence.kafka.KafkaIdentityAction;
|
||||
import org.maxkey.persistence.kafka.KafkaIdentityTopic;
|
||||
import org.maxkey.persistence.kafka.KafkaPersistService;
|
||||
import org.maxkey.persistence.mapper.AccountsMapper;
|
||||
import org.maxkey.util.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@@ -36,6 +42,9 @@ public class AccountsService extends JpaBaseService<Accounts>{
|
||||
@Autowired
|
||||
UserInfoService userInfoService;
|
||||
|
||||
@Autowired
|
||||
AccountsStrategyService accountsStrategyService;
|
||||
|
||||
public AccountsService() {
|
||||
super(AccountsMapper.class);
|
||||
}
|
||||
@@ -99,5 +108,59 @@ public class AccountsService extends JpaBaseService<Accounts>{
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void refreshByStrategy(AccountsStrategy strategy) {
|
||||
if(StringUtils.isNotBlank(strategy.getOrgIdsList())) {
|
||||
strategy.setOrgIdsList("'"+strategy.getOrgIdsList().replace(",", "','")+"'");
|
||||
}
|
||||
List<UserInfo> userList = queryUserNotInStrategy(strategy);
|
||||
for(UserInfo user : userList) {
|
||||
Accounts account = new Accounts();
|
||||
account.setAppId(strategy.getAppId());
|
||||
account.setAppName(strategy.getAppName());
|
||||
|
||||
account.setUserId(user.getId());
|
||||
account.setUsername(user.getUsername());
|
||||
account.setDisplayName(user.getDisplayName());
|
||||
|
||||
if(strategy.getMapping().equalsIgnoreCase("username")) {
|
||||
account.setRelatedUsername(user.getUsername());
|
||||
}else if(strategy.getMapping().equalsIgnoreCase("mobile")) {
|
||||
account.setRelatedUsername(user.getMobile());
|
||||
}else if(strategy.getMapping().equalsIgnoreCase("email")) {
|
||||
account.setRelatedUsername(user.getEmail());
|
||||
}else if(strategy.getMapping().equalsIgnoreCase("employeeNumber")) {
|
||||
account.setRelatedUsername(user.getEmployeeNumber());
|
||||
}else if(strategy.getMapping().equalsIgnoreCase("windowsAccount")) {
|
||||
account.setRelatedUsername(user.getWindowsAccount());
|
||||
}else if(strategy.getMapping().equalsIgnoreCase("idCardNo")) {
|
||||
account.setRelatedUsername(user.getIdCardNo());
|
||||
}else {
|
||||
account.setRelatedUsername(user.getUsername());
|
||||
}
|
||||
account.setRelatedPassword(ReciprocalUtils.encode(userInfoService.randomPassword()));
|
||||
|
||||
account.setCreateType("automatic");
|
||||
account.setStatus(ConstantsStatus.ACTIVE);
|
||||
account.setStrategyId(strategy.getId());
|
||||
|
||||
insert(account);
|
||||
}
|
||||
deleteByStrategy(strategy);
|
||||
}
|
||||
public void refreshAllByStrategy() {
|
||||
for( AccountsStrategy strategy : accountsStrategyService.query(null)) {
|
||||
refreshByStrategy(strategy);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public List<UserInfo> queryUserNotInStrategy(AccountsStrategy strategy){
|
||||
return getMapper().queryUserNotInStrategy(strategy);
|
||||
}
|
||||
|
||||
public long deleteByStrategy(AccountsStrategy strategy) {
|
||||
return getMapper().deleteByStrategy(strategy);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@ import java.time.LocalTime;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.mybatis.jpa.persistence.JpaBaseService;
|
||||
import org.maxkey.constants.ConstantsStatus;
|
||||
import org.maxkey.entity.Groups;
|
||||
import org.maxkey.persistence.mapper.GroupsMapper;
|
||||
import org.maxkey.util.StringUtils;
|
||||
@@ -72,7 +73,7 @@ public class GroupsService extends JpaBaseService<Groups> implements Serializab
|
||||
}
|
||||
|
||||
public void refreshDynamicGroups(Groups dynamicGroup){
|
||||
if(dynamicGroup.getDynamic().equals("1")) {
|
||||
if(dynamicGroup.getDynamic().equals(ConstantsStatus.ACTIVE)) {
|
||||
boolean isDynamicTimeSupport = false;
|
||||
boolean isBetweenEffectiveTime = false;
|
||||
if(StringUtils.isNotBlank(dynamicGroup.getResumeTime())
|
||||
@@ -119,6 +120,14 @@ public class GroupsService extends JpaBaseService<Groups> implements Serializab
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void refreshAllDynamicGroups(){
|
||||
List<Groups> groupsList = queryDynamicGroups(null);
|
||||
for(Groups group : groupsList) {
|
||||
_logger.debug("group " + group);
|
||||
refreshDynamicGroups(group);
|
||||
}
|
||||
}
|
||||
|
||||
public GroupMemberService getGroupMemberService() {
|
||||
return groupMemberService;
|
||||
|
||||
@@ -29,4 +29,40 @@
|
||||
<include refid="where_statement"/>
|
||||
</select>
|
||||
|
||||
<select id="queryUserNotInStrategy" parameterType="AccountsStrategy" resultType="UserInfo">
|
||||
select
|
||||
*
|
||||
from mxk_userinfo u
|
||||
where not exists(
|
||||
select 1 from mxk_accounts ac
|
||||
where ac.appid = #{appId}
|
||||
and ac.userid = u.id
|
||||
and ac.createtype='automatic'
|
||||
)
|
||||
<if test="filters != null and filters != ''">
|
||||
and (${filters})
|
||||
</if>
|
||||
<if test="orgIdsList != null and orgIdsList != ''">
|
||||
and u.departmentid in( ${orgIdsList})
|
||||
</if>
|
||||
</select>
|
||||
|
||||
<delete id="deleteByStrategy" parameterType="AccountsStrategy" >
|
||||
delete from mxk_accounts ac
|
||||
where ac.createtype = 'automatic'
|
||||
and ac.appid = #{appId}
|
||||
and ac.strategyid = #{id}
|
||||
and not exists(
|
||||
select 1
|
||||
from mxk_userinfo u
|
||||
where 1 = 1
|
||||
and u.id=ac.userid
|
||||
<if test="filters != null and filters != ''">
|
||||
and (${filters})
|
||||
</if>
|
||||
<if test="orgIdsList != null and orgIdsList != ''">
|
||||
and u.departmentid in ( ${orgIdsList})
|
||||
</if>
|
||||
)
|
||||
</delete>
|
||||
</mapper>
|
||||
@@ -22,14 +22,14 @@ public class LogoutType {
|
||||
/**
|
||||
* For no SLO.
|
||||
*/
|
||||
public static int NONE = 0;
|
||||
public static int NONE = 0;
|
||||
/**
|
||||
* For back channel SLO.
|
||||
*/
|
||||
public static int BACK_CHANNEL = 1;
|
||||
public static int BACK_CHANNEL = 1;
|
||||
/**
|
||||
* For front channel SLO.
|
||||
*/
|
||||
public static int FRONT_CHANNEL = 2;
|
||||
public static int FRONT_CHANNEL = 2;
|
||||
|
||||
}
|
||||
|
||||
@@ -34,6 +34,7 @@ import org.maxkey.authz.endpoint.adapter.AbstractAuthorizeAdapter;
|
||||
import org.maxkey.constants.Boolean;
|
||||
import org.maxkey.entity.UserInfo;
|
||||
import org.maxkey.util.Instance;
|
||||
import org.maxkey.util.StringUtils;
|
||||
import org.maxkey.web.HttpResponseConstants;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@@ -205,7 +206,7 @@ For all error codes, it is RECOMMENDED that CAS provide a more detailed message
|
||||
String principal=authentication.getUsername();
|
||||
_logger.debug("principal "+principal);
|
||||
serviceResponseBuilder.success().setUser(principal);
|
||||
if(pgtUrl != null && !pgtUrl.equalsIgnoreCase("")) {
|
||||
if(StringUtils.isNotBlank(pgtUrl)) {
|
||||
ProxyGrantingTicketIOUImpl proxyGrantingTicketIOUImpl =new ProxyGrantingTicketIOUImpl();
|
||||
String proxyGrantingTicketIOU=casProxyGrantingTicketServices.createTicket(proxyGrantingTicketIOUImpl);
|
||||
|
||||
|
||||
@@ -35,6 +35,7 @@ import org.maxkey.authz.endpoint.adapter.AbstractAuthorizeAdapter;
|
||||
import org.maxkey.constants.Boolean;
|
||||
import org.maxkey.entity.UserInfo;
|
||||
import org.maxkey.util.Instance;
|
||||
import org.maxkey.util.StringUtils;
|
||||
import org.maxkey.web.HttpResponseConstants;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@@ -88,7 +89,7 @@ public class Cas30AuthorizeEndpoint extends CasBaseAuthorizeEndpoint{
|
||||
String principal=authentication.getUsername();
|
||||
_logger.debug("principal "+principal);
|
||||
serviceResponseBuilder.success().setUser(principal);
|
||||
if(pgtUrl != null && !pgtUrl.equalsIgnoreCase("")) {
|
||||
if(StringUtils.isNotBlank(pgtUrl)) {
|
||||
ProxyGrantingTicketIOUImpl proxyGrantingTicketIOUImpl =new ProxyGrantingTicketIOUImpl();
|
||||
String proxyGrantingTicketIOU=casProxyGrantingTicketServices.createTicket(proxyGrantingTicketIOUImpl);
|
||||
|
||||
|
||||
@@ -31,6 +31,7 @@ import org.maxkey.authz.cas.endpoint.ticket.ServiceTicketImpl;
|
||||
import org.maxkey.authz.cas.endpoint.ticket.TicketGrantingTicketImpl;
|
||||
import org.maxkey.entity.UserInfo;
|
||||
import org.maxkey.entity.apps.AppsCasDetails;
|
||||
import org.maxkey.util.StringUtils;
|
||||
import org.maxkey.web.HttpResponseConstants;
|
||||
import org.maxkey.web.WebContext;
|
||||
import org.slf4j.Logger;
|
||||
@@ -76,7 +77,7 @@ public class CasRestV1Endpoint extends CasBaseAuthorizeEndpoint{
|
||||
@RequestParam(value=CasConstants.PARAMETER.REST_USERNAME,required=true) String username,
|
||||
@RequestParam(value=CasConstants.PARAMETER.REST_PASSWORD,required=true) String password){
|
||||
try {
|
||||
if (password == null || password.isEmpty()) {
|
||||
if (StringUtils.isBlank(password)) {
|
||||
throw new BadCredentialsException("No credentials are provided or extracted to authenticate the REST request");
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ global.change.language.en=English
|
||||
global.change.language.zh=\u4e2d\u6587
|
||||
global.language=\u4e2d\u6587
|
||||
global.text.welcome=\u6b22\u8fce\u60a8
|
||||
global.text.manage=\u7ba1\u7406
|
||||
global.text.manage=\u540E\u53F0
|
||||
global.text.copyright=\u7248\u6743\u6240\u6709
|
||||
global.text.copyright.content=Copyright
|
||||
global.text.copyright.license=Licensed under the Apache License, Version 2.0
|
||||
@@ -275,7 +275,7 @@ message.action.delete.success=\u5220\u9664\u64cd\u4f5c\u6210\u529f
|
||||
message.action.delete.error=\u5220\u9664\u64cd\u4f5c\u5931\u8d25
|
||||
|
||||
#navs
|
||||
navs.mypps=\u6211\u7684\u5e94\u7528
|
||||
navs.mypps=\u5e94\u7528
|
||||
navs.setting=\u8bbe\u7f6e
|
||||
navs.setting.security=\u5b89\u5168\u8bbe\u7f6e
|
||||
navs.setting.sociallink=\u8ba4\u8bc1\u5173\u8054
|
||||
|
||||
@@ -5,7 +5,7 @@ global.change.language.en=English
|
||||
global.change.language.zh=\u4e2d\u6587
|
||||
global.language=English
|
||||
global.text.welcome=Welcome
|
||||
global.text.manage=Manage
|
||||
global.text.manage=Management
|
||||
global.text.copyright=CopyRight
|
||||
global.text.copyright.content=Copyright
|
||||
global.text.copyright.license=Licensed under the Apache License, Version 2.0
|
||||
@@ -274,7 +274,7 @@ message.action.delete.success=Delete Success
|
||||
message.action.delete.error=Delete Error
|
||||
|
||||
#navs
|
||||
navs.mypps=My Apps
|
||||
navs.mypps=Apps
|
||||
|
||||
navs.setting=Settings
|
||||
navs.setting.security=Security
|
||||
|
||||
@@ -5,7 +5,7 @@ global.change.language.en=English
|
||||
global.change.language.zh=\u4e2d\u6587
|
||||
global.language=\u4e2d\u6587
|
||||
global.text.welcome=\u6b22\u8fce\u60a8
|
||||
global.text.manage=\u7ba1\u7406
|
||||
global.text.manage=\u540E\u53F0
|
||||
global.text.copyright=\u7248\u6743\u6240\u6709
|
||||
global.text.copyright.content=Copyright
|
||||
global.text.copyright.license=Licensed under the Apache License, Version 2.0
|
||||
@@ -275,7 +275,7 @@ message.action.delete.success=\u5220\u9664\u64cd\u4f5c\u6210\u529f
|
||||
message.action.delete.error=\u5220\u9664\u64cd\u4f5c\u5931\u8d25
|
||||
|
||||
#navs
|
||||
navs.mypps=\u6211\u7684\u5e94\u7528
|
||||
navs.mypps=\u5e94\u7528
|
||||
navs.setting=\u8bbe\u7f6e
|
||||
navs.setting.security=\u5b89\u5168\u8bbe\u7f6e
|
||||
navs.setting.sociallink=\u8ba4\u8bc1\u5173\u8054
|
||||
|
||||
@@ -2,104 +2,70 @@
|
||||
<div id="nav_primary" >
|
||||
<div class="container row">
|
||||
<div class="col-sm-8">
|
||||
<div id="nav_primary" class="menuprimary">
|
||||
<ul >
|
||||
<li id="nav_primay_11" class="nav_primay_level primaryleft" xpath="">
|
||||
<ul class="navMenu">
|
||||
<li id="nav_primay_11" xpath="">
|
||||
<!--我的应用-->
|
||||
<a href="<@base/>/appList"><@locale code="navs.mypps"/></a>
|
||||
</li>
|
||||
<li id="nav_primay_13" class="nav_primay_level primaryleft" xpath="">
|
||||
<!--会话-->
|
||||
<li id="nav_second_12" >
|
||||
<a href="<@base/>/session/sessionList"><@locale code="navs.audit.loginsession"/></a>
|
||||
</li>
|
||||
<li id="nav_primay_13" xpath="">
|
||||
<!--安全设置-->
|
||||
<a href="<@base/>/safe/forward/setting"><@locale code="navs.setting"/></a>
|
||||
<div id="nav_child_1301" class="nav_second_child">
|
||||
<ul>
|
||||
<!--安全设置-->
|
||||
<li id="nav_second_1301" class="nav_second_level">
|
||||
<a href="<@base/>/safe/forward/setting"><@locale code="navs.setting.security"/></a>
|
||||
</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<!--认证关联-->
|
||||
<li id="nav_second_1301" class="nav_second_level">
|
||||
<a href="<@base/>/socialsignon/list"><@locale code="navs.setting.sociallink"/></a>
|
||||
</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<!--密码修改-->
|
||||
<li id="nav_second_1302" class="nav_second_level">
|
||||
<a href="<@base/>/safe/forward/changePasswod"><@locale code="navs.setting.changepassword"/></a>
|
||||
</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<!--应用配置-->
|
||||
<li id="nav_second_1304" class="nav_second_level">
|
||||
<a href="<@base/>/appConfigList"><@locale code="navs.setting.appaccount"/></a>
|
||||
</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<!--时间令牌-->
|
||||
<li id="nav_second_1305" class="nav_second_level">
|
||||
<a href="<@base/>/safe/otp/timebased"><@locale code="navs.setting.timetoken"/></a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</li>
|
||||
<!--我的资料-->
|
||||
<li id="nav_primay_14" class="nav_primay_level primaryleft" xpath="">
|
||||
<a href="<@base/>/profile/myProfile"><@locale code="navs.myprofile"/></a>
|
||||
<ul id="nav_child_1301" class="dropdown" >
|
||||
<!--安全设置-->
|
||||
<li id="nav_second_1301" >
|
||||
<a href="<@base/>/safe/forward/setting"><@locale code="navs.setting.security"/></a>
|
||||
</li>
|
||||
<!--认证关联-->
|
||||
<li id="nav_second_1301" >
|
||||
<a href="<@base/>/socialsignon/list"><@locale code="navs.setting.sociallink"/></a>
|
||||
</li>
|
||||
<!--密码修改-->
|
||||
<li id="nav_second_1302" >
|
||||
<a href="<@base/>/safe/forward/changePasswod"><@locale code="navs.setting.changepassword"/></a>
|
||||
</li>
|
||||
<!--应用配置-->
|
||||
<li id="nav_second_1304" >
|
||||
<a href="<@base/>/appConfigList"><@locale code="navs.setting.appaccount"/></a>
|
||||
</li>
|
||||
<!--时间令牌-->
|
||||
<li id="nav_second_1305" >
|
||||
<a href="<@base/>/safe/otp/timebased"><@locale code="navs.setting.timetoken"/></a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<!--日志审计-->
|
||||
<li id="nav_primay_15" class="nav_primay_level primaryleft" xpath="">
|
||||
<li id="nav_primay_15" xpath="">
|
||||
<a href="<@base/>/historys/loginList"><@locale code="navs.audit"/></a>
|
||||
<div id="nav_child_1501" class="nav_second_child">
|
||||
<ul>
|
||||
<!--登录日志-->
|
||||
<li id="nav_second_1501" class="nav_second_level">
|
||||
<a href="<@base/>/session/sessionList"><@locale code="navs.audit.loginsession"/></a>
|
||||
</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<!--登录日志-->
|
||||
<li id="nav_second_1502" class="nav_second_level">
|
||||
<a href="<@base/>/historys/loginList"><@locale code="navs.audit.login"/></a>
|
||||
</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<!--访问日志-->
|
||||
<li id="nav_second_1503" class="nav_second_level">
|
||||
<a href="<@base/>/historys/loginAppsList"><@locale code="navs.audit.signon"/></a>
|
||||
</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<!--操作日志-->
|
||||
<li id="nav_second_1504" class="nav_second_level">
|
||||
<a href="<@base/>/historys/systemLogsList"><@locale code="navs.audit.operation"/></a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<ul class="dropdown">
|
||||
<!--登录日志-->
|
||||
<li id="nav_second_1502" >
|
||||
<a href="<@base/>/historys/loginList"><@locale code="navs.audit.login"/></a>
|
||||
</li>
|
||||
<!--访问日志-->
|
||||
<li id="nav_second_1503" >
|
||||
<a href="<@base/>/historys/loginAppsList"><@locale code="navs.audit.signon"/></a>
|
||||
</li>
|
||||
|
||||
<!--操作日志-->
|
||||
<li id="nav_second_1504" >
|
||||
<a href="<@base/>/historys/systemLogsList"><@locale code="navs.audit.operation"/></a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<#if Session["current_authentication"].principal.roleAdministrators==true >
|
||||
<li id="nav_primay_16" xpath="">
|
||||
<!--管理-->
|
||||
<a target="_blank" href="<@base/>/authz/maxkey_mgt"><@locale code="global.text.manage"/></a>
|
||||
</li>
|
||||
</#if>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container row">
|
||||
<div id="nav_second" class ="col-sm-8" style="clear: left"><div class='menusecond '></div><br style='clear: left' /></div>
|
||||
<div id="nav_second" class ="col-sm-8" style="clear: left"></div>
|
||||
</div>
|
||||
<script>
|
||||
$(function(){
|
||||
function displaySecondNavs(menuId){
|
||||
if($("#"+menuId+" .nav_second_child").html()){
|
||||
$("#nav_second").html("<div class='menusecond'>"+$("#"+menuId+" .nav_second_child").html()+"</div><br style='clear: left' />");
|
||||
}else{
|
||||
$("#nav_second").html("");
|
||||
}
|
||||
}
|
||||
|
||||
displaySecondNavs('${Request["mnid"]!"nav_primay_15"}');
|
||||
$(".menuprimary ul li").mouseover(function(){
|
||||
displaySecondNavs(this.id);
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -36,21 +36,20 @@
|
||||
<a href="<@base/>/appList?mnid=110101020000&gridList=0" ><img class="grid_list_sel" src='<@base/>/static/images/grid_sel.png'></a>
|
||||
</td>
|
||||
</#if>
|
||||
<!--我的资料-->
|
||||
<td id="myprofile" nowrap>
|
||||
<a href="<@base/>/profile/myProfile">
|
||||
<div > <@locale code="navs.myprofile"/> </div>
|
||||
</a>
|
||||
</td>
|
||||
<td id="changepassword" nowrap>
|
||||
<a href="<@base/>/safe/forward/changePasswod">
|
||||
<div style="float:right;" > <@locale code="login.password.changepassword"/> </div>
|
||||
<div > <@locale code="login.password.changepassword"/> </div>
|
||||
</a>
|
||||
</td>
|
||||
<#if Session["current_authentication"].principal.roleAdministrators==true >
|
||||
<td id="manage" nowrap>
|
||||
<a target="_blank" href="<@base/>/authz/maxkey_mgt">
|
||||
<div style="float:right;" > <@locale code="global.text.manage"/> </div>
|
||||
</a>
|
||||
</td>
|
||||
</#if>
|
||||
<td id="logout" class="ui-widget-header" >
|
||||
<a href="<@base/>/logout?reLoginUrl=login">
|
||||
<div style="float:right;" > <@locale code="global.text.logout"/> </div>
|
||||
<div > <@locale code="global.text.logout"/> </div>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -35,12 +35,15 @@ import org.maxkey.persistence.service.UserInfoService;
|
||||
import org.opensaml.xml.ConfigurationException;
|
||||
import org.quartz.CronScheduleBuilder;
|
||||
import org.quartz.CronTrigger;
|
||||
import org.quartz.Job;
|
||||
import org.quartz.JobBuilder;
|
||||
import org.quartz.JobDataMap;
|
||||
import org.quartz.JobDetail;
|
||||
import org.quartz.Scheduler;
|
||||
import org.quartz.SchedulerException;
|
||||
import org.quartz.TriggerBuilder;
|
||||
import org.apache.mybatis.jpa.persistence.JpaBaseEntity;
|
||||
import org.apache.mybatis.jpa.persistence.JpaBaseService;
|
||||
import org.maxkey.authn.realm.jdbc.JdbcAuthenticationRealm;
|
||||
import org.maxkey.authn.support.rememberme.AbstractRemeberMeService;
|
||||
import org.slf4j.Logger;
|
||||
@@ -146,29 +149,31 @@ public class MaxKeyMgtConfig implements InitializingBean {
|
||||
public String schedulerJobs(
|
||||
SchedulerFactoryBean schedulerFactoryBean,
|
||||
GroupsService groupsService,
|
||||
@Value("${maxkey.job.cron.dynamicgroups}") String cronScheduleDynamicGroups
|
||||
@Value("${maxkey.job.cron.dynamicgroups}") String cronSchedule
|
||||
) throws SchedulerException {
|
||||
|
||||
Scheduler scheduler = schedulerFactoryBean.getScheduler();
|
||||
dynamicGroupsJob(scheduler,cronScheduleDynamicGroups,groupsService);
|
||||
//dynamicGroupsJob("DynamicGroups",DynamicGroupsJob.class,scheduler,groupsService,cronSchedule);
|
||||
|
||||
return "schedulerJobs";
|
||||
}
|
||||
|
||||
|
||||
private void dynamicGroupsJob(Scheduler scheduler ,
|
||||
String cronSchedule,
|
||||
GroupsService groupsService) throws SchedulerException {
|
||||
public void dynamicGroupsJob(String jobName,
|
||||
Class<Job> cls,
|
||||
Scheduler scheduler,
|
||||
JpaBaseService<JpaBaseEntity> service,
|
||||
String cronSchedule) throws SchedulerException {
|
||||
JobDetail jobDetail =
|
||||
JobBuilder.newJob(DynamicGroupsJob.class)
|
||||
.withIdentity("DynamicGroupsJob", "DynamicGroups")
|
||||
JobBuilder.newJob(cls)
|
||||
.withIdentity(jobName + "Job", jobName)
|
||||
.build();
|
||||
JobDataMap jobDataMap = new JobDataMap();
|
||||
jobDataMap.put("groupsService", groupsService);
|
||||
jobDataMap.put("service", service);
|
||||
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronSchedule);
|
||||
CronTrigger cronTrigger =
|
||||
TriggerBuilder.newTrigger()
|
||||
.withIdentity("triggerDynamicGroups", "DynamicGroups")
|
||||
.withIdentity("trigger" + jobName, jobName)
|
||||
.usingJobData(jobDataMap)
|
||||
.withSchedule(scheduleBuilder)
|
||||
.build();
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
/*
|
||||
* Copyright [2021] [MaxKey of copyright http://www.maxkey.top]
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
|
||||
package org.maxkey.jobs;
|
||||
|
||||
import java.io.Serializable;
|
||||
import org.maxkey.persistence.service.AccountsService;
|
||||
import org.quartz.Job;
|
||||
import org.quartz.JobExecutionContext;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class AccountsStrategyJob implements Job , Serializable {
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 167999890940939820L;
|
||||
|
||||
final static Logger _logger = LoggerFactory.getLogger(AccountsStrategyJob.class);
|
||||
|
||||
private static AccountsService accountsService = null;
|
||||
|
||||
public static class JOBSTATUS{
|
||||
public static int STOP = 0;
|
||||
public static int RUNNING = 1;
|
||||
public static int FINISHED = 2;
|
||||
}
|
||||
|
||||
private static int jobStatus = JOBSTATUS.STOP;
|
||||
|
||||
@Override
|
||||
public void execute(JobExecutionContext context){
|
||||
if(jobStatus == JOBSTATUS.RUNNING) {
|
||||
_logger.info("DynamicGroupsJob is in running . " );
|
||||
return;
|
||||
}
|
||||
|
||||
_logger.debug("DynamicGroupsJob is running ... " );
|
||||
jobStatus = JOBSTATUS.RUNNING;
|
||||
try {
|
||||
if(accountsService == null) {
|
||||
accountsService = (AccountsService) context.getMergedJobDataMap().get("accountsService");
|
||||
}
|
||||
|
||||
accountsService.refreshAllByStrategy();
|
||||
|
||||
Thread.sleep(10 *1000);
|
||||
_logger.debug("DynamicGroupsJob is success " );
|
||||
}catch(Exception e) {
|
||||
_logger.error("Exception " ,e);
|
||||
jobStatus = JOBSTATUS.STOP;
|
||||
}
|
||||
jobStatus = JOBSTATUS.FINISHED;
|
||||
_logger.debug("DynamicGroupsJob is finished . " );
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -18,9 +18,6 @@
|
||||
package org.maxkey.jobs;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
import org.maxkey.entity.Groups;
|
||||
import org.maxkey.persistence.service.GroupsService;
|
||||
import org.quartz.Job;
|
||||
import org.quartz.JobExecutionContext;
|
||||
@@ -56,14 +53,11 @@ public class DynamicGroupsJob implements Job , Serializable {
|
||||
jobStatus = JOBSTATUS.RUNNING;
|
||||
try {
|
||||
if(groupsService == null) {
|
||||
groupsService = (GroupsService) context.getMergedJobDataMap().get("groupsService");
|
||||
groupsService = (GroupsService) context.getMergedJobDataMap().get("service");
|
||||
}
|
||||
|
||||
List<Groups> groupsList = groupsService.queryDynamicGroups(null);
|
||||
for(Groups group : groupsList) {
|
||||
_logger.debug("group " + group);
|
||||
groupsService.refreshDynamicGroups(group);
|
||||
}
|
||||
groupsService.refreshAllDynamicGroups();
|
||||
|
||||
Thread.sleep(10 *1000);
|
||||
_logger.debug("DynamicGroupsJob is success " );
|
||||
}catch(Exception e) {
|
||||
|
||||
@@ -56,13 +56,13 @@ public class ApplicationsController extends BaseAppContorller {
|
||||
@RequestMapping(value = { "/grid" })
|
||||
@ResponseBody
|
||||
public JpaPageResults<Apps> queryDataGrid(@ModelAttribute("applications") Apps applications) {
|
||||
JpaPageResults<Apps> jqGridApp=appsService.queryPageResults(applications);
|
||||
if(jqGridApp!=null&&jqGridApp.getRows()!=null){
|
||||
for (Apps app : jqGridApp.getRows()){
|
||||
JpaPageResults<Apps> apps=appsService.queryPageResults(applications);
|
||||
if(apps!=null&&apps.getRows()!=null){
|
||||
for (Apps app : apps.getRows()){
|
||||
WebContext.setAttribute(app.getId(), app.getIcon());
|
||||
}
|
||||
}
|
||||
return jqGridApp;
|
||||
return apps;
|
||||
}
|
||||
|
||||
@RequestMapping(value = { "/forwardAdd" })
|
||||
|
||||
@@ -21,8 +21,8 @@ import org.apache.mybatis.jpa.persistence.JpaPageResults;
|
||||
import org.maxkey.constants.ConstantsOperateMessage;
|
||||
import org.maxkey.entity.AccountsStrategy;
|
||||
import org.maxkey.entity.Roles;
|
||||
import org.maxkey.persistence.service.AccountsService;
|
||||
import org.maxkey.persistence.service.AccountsStrategyService;
|
||||
import org.maxkey.persistence.service.RolesService;
|
||||
import org.maxkey.web.WebContext;
|
||||
import org.maxkey.web.message.Message;
|
||||
import org.maxkey.web.message.MessageType;
|
||||
@@ -46,6 +46,9 @@ public class AccountsStrategyController {
|
||||
@Autowired
|
||||
@Qualifier("accountsStrategyService")
|
||||
AccountsStrategyService accountsStrategyService;
|
||||
|
||||
@Autowired
|
||||
AccountsService accountsService;
|
||||
|
||||
|
||||
|
||||
@@ -82,6 +85,7 @@ public class AccountsStrategyController {
|
||||
_logger.debug("-Add :" + accountsStrategy);
|
||||
|
||||
if (accountsStrategyService.insert(accountsStrategy)) {
|
||||
accountsService.refreshByStrategy(accountsStrategy);
|
||||
//rolesService.refreshDynamicRoles(role);
|
||||
return new Message(WebContext.getI18nValue(ConstantsOperateMessage.INSERT_SUCCESS),MessageType.success);
|
||||
|
||||
@@ -121,6 +125,7 @@ public class AccountsStrategyController {
|
||||
|
||||
if (accountsStrategyService.update(accountsStrategy)) {
|
||||
// rolesService.refreshDynamicRoles(role);
|
||||
accountsService.refreshByStrategy(accountsStrategy);
|
||||
return new Message(WebContext.getI18nValue(ConstantsOperateMessage.UPDATE_SUCCESS),MessageType.success);
|
||||
|
||||
} else {
|
||||
|
||||
@@ -56,16 +56,16 @@ public class GroupPrivilegesController {
|
||||
@ResponseBody
|
||||
public JpaPageResults<GroupPrivileges> queryAppsInGroup(@ModelAttribute("groupApp") GroupPrivileges groupApp) {
|
||||
|
||||
JpaPageResults<GroupPrivileges> jqGridApp;
|
||||
JpaPageResults<GroupPrivileges> groupPrivileges;
|
||||
|
||||
jqGridApp= groupPrivilegesService.queryPageResults("appsInGroup",groupApp);
|
||||
groupPrivileges= groupPrivilegesService.queryPageResults("appsInGroup",groupApp);
|
||||
|
||||
if(jqGridApp!=null&&jqGridApp.getRows()!=null){
|
||||
for (Apps app : jqGridApp.getRows()){
|
||||
if(groupPrivileges!=null&&groupPrivileges.getRows()!=null){
|
||||
for (Apps app : groupPrivileges.getRows()){
|
||||
WebContext.setAttribute(app.getId(), app.getIcon());
|
||||
}
|
||||
}
|
||||
return jqGridApp;
|
||||
return groupPrivileges;
|
||||
|
||||
}
|
||||
|
||||
@@ -80,16 +80,16 @@ public class GroupPrivilegesController {
|
||||
@RequestMapping(value = { "/queryAppsNotInGroup" })
|
||||
@ResponseBody
|
||||
public JpaPageResults<GroupPrivileges> queryAppsNotInGroup(@ModelAttribute("groupApp") GroupPrivileges groupApp) {
|
||||
JpaPageResults<GroupPrivileges> jqGridApp;
|
||||
JpaPageResults<GroupPrivileges> groupPrivileges;
|
||||
|
||||
jqGridApp= groupPrivilegesService.queryPageResults("appsNotInGroup",groupApp);
|
||||
groupPrivileges= groupPrivilegesService.queryPageResults("appsNotInGroup",groupApp);
|
||||
|
||||
if(jqGridApp!=null&&jqGridApp.getRows()!=null){
|
||||
for (Apps app : jqGridApp.getRows()){
|
||||
if(groupPrivileges!=null&&groupPrivileges.getRows()!=null){
|
||||
for (Apps app : groupPrivileges.getRows()){
|
||||
WebContext.setAttribute(app.getId(), app.getIcon());
|
||||
}
|
||||
}
|
||||
return jqGridApp;
|
||||
return groupPrivileges;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -584,7 +584,7 @@ navs.users=\u7528\u6237\u7ba1\u7406
|
||||
navs.apps=\u5e94\u7528\u7ba1\u7406
|
||||
navs.accounts=\u8d26\u53f7\u7ba1\u7406
|
||||
navs.accounts.strategy=\u8D26\u53F7\u7B56\u7565
|
||||
navs.privileges=\u8BBF\u95EE\u63A7\u5236\u7BA1\u7406
|
||||
navs.privileges=\u8BBF\u95EE\u63A7\u5236
|
||||
navs.groups=\u7ec4\u7ba1\u7406
|
||||
navs.groups.member=\u6210\u5458\u7ba1\u7406
|
||||
navs.groups.privileges=\u8bbf\u95ee\u6743\u9650\u7ba1\u7406
|
||||
@@ -599,9 +599,9 @@ navs.audit.synchronizer=\u540C\u6B65\u65E5\u5FD7
|
||||
navs.audit.connector=\u8FDE\u63A5\u65E5\u5FD7
|
||||
navs.roles=\u89d2\u8272\u7ba1\u7406
|
||||
navs.role.member=\u89d2\u8272\u7528\u6237
|
||||
navs.role.permissions=\u89d2\u8272\u6743\u9650\u7ba1\u7406
|
||||
navs.role.permissions=\u6743\u9650\u7ba1\u7406
|
||||
navs.resources=\u8d44\u6e90\u7ba1\u7406
|
||||
navs.adapters=\u9002\u914D\u5668\u6CE8\u518C
|
||||
navs.notices=\u901A\u77E5\u516C\u544A
|
||||
navs.socials.provider=\u793E\u4EA4\u63D0\u4F9B\u5546
|
||||
navs.socials.provider=\u793E\u4EA4\u670D\u52A1
|
||||
navs.synchronizers=\u540C\u6B65\u5668\u7BA1\u7406
|
||||
@@ -597,7 +597,7 @@ navs.accounts.strategy=AccountsStrategy
|
||||
navs.privileges=Access Control
|
||||
navs.groups=Groups
|
||||
navs.groups.member=Groups Member
|
||||
navs.groups.privileges=Access Privileges
|
||||
navs.groups.privileges=Access
|
||||
navs.conf=Conf
|
||||
navs.conf.passwordpolicy=PasswordPolicy
|
||||
navs.audit=Audit
|
||||
|
||||
@@ -589,7 +589,7 @@ navs.users=\u7528\u6237\u7ba1\u7406
|
||||
navs.apps=\u5e94\u7528\u7ba1\u7406
|
||||
navs.accounts=\u8d26\u53f7\u7ba1\u7406
|
||||
navs.accounts.strategy=\u8D26\u53F7\u7B56\u7565
|
||||
navs.privileges=\u8BBF\u95EE\u63A7\u5236\u7BA1\u7406
|
||||
navs.privileges=\u8BBF\u95EE\u63A7\u5236
|
||||
navs.groups=\u7ec4\u7ba1\u7406
|
||||
navs.groups.member=\u6210\u5458\u7ba1\u7406
|
||||
navs.groups.privileges=\u8bbf\u95ee\u6743\u9650\u7ba1\u7406
|
||||
@@ -604,9 +604,9 @@ navs.audit.synchronizer=\u540C\u6B65\u65E5\u5FD7
|
||||
navs.audit.connector=\u8FDE\u63A5\u65E5\u5FD7
|
||||
navs.roles=\u89d2\u8272\u7ba1\u7406
|
||||
navs.role.member=\u89d2\u8272\u7528\u6237
|
||||
navs.role.permissions=\u89d2\u8272\u6743\u9650\u7ba1\u7406
|
||||
navs.role.permissions=\u6743\u9650\u7ba1\u7406
|
||||
navs.resources=\u8d44\u6e90\u7ba1\u7406
|
||||
navs.adapters=\u9002\u914D\u5668\u6CE8\u518C
|
||||
navs.notices=\u901A\u77E5\u516C\u544A
|
||||
navs.socials.provider=\u793E\u4EA4\u63D0\u4F9B\u5546
|
||||
navs.socials.provider=\u793E\u4EA4\u670D\u52A1
|
||||
navs.synchronizers=\u540C\u6B65\u5668\u7BA1\u7406
|
||||
@@ -27,14 +27,25 @@
|
||||
<span class="fa fa-fw fa-vcard fa-lg"></span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a class="side-nav-menu" href="<@base />/apps/list/">
|
||||
<@locale code="navs.apps"/>
|
||||
<span class="fa fa-fw fa-globe fa-lg"></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="side-nav-menu has-arrow" href="#">
|
||||
<@locale code="navs.privileges"/>
|
||||
<span class="fa fa-fw fa-cubes fa-lg"></span>
|
||||
</a>
|
||||
<ul>
|
||||
<li>
|
||||
<li>
|
||||
<a class="side-nav-menu" href="<@base/>/session/sessionList/">
|
||||
<@locale code="navs.audit.loginsession"/>
|
||||
<span class="fa fa-fw fa-eye"></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="side-nav-menu" href="<@base />/groups/list/">
|
||||
<@locale code="navs.groups"/>
|
||||
<span class="fa fa-fw fa-address-book"></span>
|
||||
@@ -93,12 +104,6 @@
|
||||
<span class="fa fa-fw fa-cogs fa-lg"></span>
|
||||
</a>
|
||||
<ul>
|
||||
<li>
|
||||
<a class="side-nav-menu" href="<@base />/apps/list/">
|
||||
<@locale code="navs.apps"/>
|
||||
<span class="fa fa-fw fa-globe fa-lg"></span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="side-nav-menu" href="<@base />/accountsstrategy/list/">
|
||||
<@locale code="navs.accounts.strategy"/>
|
||||
@@ -144,12 +149,7 @@
|
||||
<span class="fa fa-fw fa-eye fa-lg"></span>
|
||||
</a>
|
||||
<ul>
|
||||
<li>
|
||||
<a class="side-nav-menu" href="<@base/>/session/sessionList/">
|
||||
<@locale code="navs.audit.loginsession"/>
|
||||
<span class="fa fa-fw fa-eye"></span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a class="side-nav-menu" href="<@base />/historys/loginHistoryList/">
|
||||
<@locale code="navs.audit.login"/>
|
||||
@@ -184,11 +184,5 @@
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
<script type="text/javascript">
|
||||
$(function(){
|
||||
$('#side-nav-menu').metisMenu();
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
<!--side navigation end-->
|
||||
|
||||
@@ -51,10 +51,15 @@ body{
|
||||
#nav_second{
|
||||
height:35px;
|
||||
}
|
||||
|
||||
#nav_third{
|
||||
/*border-top: 1px solid #e5e5e5;*/
|
||||
}
|
||||
|
||||
#topBar{
|
||||
min-height: 65px;
|
||||
}
|
||||
|
||||
#topBar .grid_list_sel{
|
||||
width: 31px;
|
||||
height: 31px;
|
||||
@@ -138,14 +143,14 @@ body{
|
||||
}
|
||||
|
||||
#logout{
|
||||
width: 45px;
|
||||
width: 75px;
|
||||
background: #c00 ;
|
||||
color: #fff;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#manage{
|
||||
width: 50px;
|
||||
#myprofile{
|
||||
width: 75px;
|
||||
background-color: #2AA9A9;
|
||||
font-weight: bold;
|
||||
}
|
||||
@@ -156,8 +161,9 @@ body{
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#manage a,#logout a,#changepassword a{
|
||||
color: #fff;
|
||||
#myprofile a,#logout a,#changepassword a{
|
||||
color: #fff;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.form_radio_label, .form_checkbox_label{
|
||||
|
||||
@@ -1,279 +1,141 @@
|
||||
#nav_primary{
|
||||
background: #414141;
|
||||
}
|
||||
.menuprimary {
|
||||
font: bold 12px Verdana;
|
||||
margin: auto;
|
||||
height: 41px;
|
||||
|
||||
/*navMenu menu dropdown*/
|
||||
ul.navMenu {
|
||||
display: flex;
|
||||
position: relative;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
/*max-width: 70%;*/
|
||||
margin: 0 auto;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
background: #414141;
|
||||
border-top-left-radius: 6px;
|
||||
border-top-right-radius: 6px;
|
||||
}
|
||||
ul.navMenu > li {
|
||||
position: relative;
|
||||
flex-grow: 1;
|
||||
flex-shrink: 0;
|
||||
height: 45px;
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
text-transform: uppercase;
|
||||
line-height: 45px;
|
||||
letter-spacing: 1px;
|
||||
color: #e7e6f1;
|
||||
cursor: pointer;
|
||||
border-right: 1px solid white;
|
||||
}
|
||||
ul.navMenu > li:hover {
|
||||
background: #0769AD;
|
||||
}
|
||||
ul.navMenu > li:hover ul.dropdown {
|
||||
visibility: visible;
|
||||
transform: translate(0, 0);
|
||||
opacity: 1;
|
||||
z-index: 0;
|
||||
}
|
||||
ul.navMenu > li:hover ul.dropdown > li {
|
||||
-webkit-animation-name: slideInLeft;
|
||||
animation-name: slideInLeft;
|
||||
-webkit-animation-duration: 0.3s;
|
||||
animation-duration: 0.3s;
|
||||
-webkit-animation-timing-function: ease-in-out;
|
||||
animation-timing-function: ease-in-out;
|
||||
-webkit-animation-fill-mode: backwards;
|
||||
animation-fill-mode: backwards;
|
||||
}
|
||||
ul.navMenu > li:first-child {
|
||||
/*border-top-left-radius: 6px;*/
|
||||
border-left: 1px solid white;
|
||||
}
|
||||
ul.navMenu > li:last-child {
|
||||
/*border-top-right-radius: 6px;*/
|
||||
border-right: 1px solid white;
|
||||
}
|
||||
|
||||
.menucontainer {
|
||||
float: left;
|
||||
margin-top: -2px;
|
||||
ul.navMenu > li a {
|
||||
display: block;
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
height: 40px;
|
||||
font-size: 13px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.menuprimary ul {
|
||||
z-index: 100;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style-type: none;
|
||||
ul.navMenu > li a {
|
||||
/*IE6 hack to get sub menu links to behave correctly*/
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
/*Top level list items*/
|
||||
.menuprimary ul li {
|
||||
position: relative;
|
||||
display: inline;
|
||||
float: left;
|
||||
ul.navMenu > li a:link,ul.navMenu > li a:visited {
|
||||
color: white;
|
||||
}
|
||||
|
||||
.menuprimary ul .primaryleft {
|
||||
border-left: 1px solid white;
|
||||
ul.navMenu > li a.selected {
|
||||
/*CSS class that's dynamically added to the currently active menu items' LI A element*/
|
||||
color: white;
|
||||
}
|
||||
|
||||
/*Top level menu link items style*/
|
||||
.menuprimary ul li a {
|
||||
display: block;
|
||||
background: #414141; /*background of menu items (default state)*/
|
||||
color: white;
|
||||
padding: 10px 20px;
|
||||
border-right: 1px solid white;
|
||||
color: #2d2b2b;
|
||||
text-decoration: none;
|
||||
height: 40px;
|
||||
font-size: 13px;
|
||||
ul.navMenu > li a:hover {
|
||||
/*background of menu items during onmouseover (hover state)*/
|
||||
color: white;
|
||||
}
|
||||
|
||||
* html .menuprimary ul li a {
|
||||
/*IE6 hack to get sub menu links to behave correctly*/
|
||||
display: inline-block;
|
||||
ul.navMenu > li ul.dropdown {
|
||||
visibility: hidden;
|
||||
display: flex;
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
left: 0;
|
||||
right: 0;
|
||||
flex-direction: column;
|
||||
margin: 0;
|
||||
padding: 5px 0 0px;
|
||||
list-style: none;
|
||||
color: #333;
|
||||
background: #414141;
|
||||
/*
|
||||
border-bottom-left-radius: 6px;
|
||||
border-bottom-right-radius: 6px;
|
||||
*/
|
||||
box-shadow: 1px 2px 5px -1px rgba(0, 0, 0, 0.15), 0px 4px 14px -1px rgba(0, 0, 0, 0.1);
|
||||
transform: translate(0, -60px);
|
||||
transition: transform 0.2s ease-out, opacity 0.2s, z-index 0s 0.2s;
|
||||
opacity: 0;
|
||||
z-index: -1;
|
||||
}
|
||||
ul.navMenu > li ul.dropdown > li {
|
||||
font-size: 14px;
|
||||
cursor: pointer;
|
||||
border-top: 1px solid white;
|
||||
}
|
||||
ul.navMenu > li ul.dropdown > li:hover {
|
||||
background: #0769AD;
|
||||
}
|
||||
|
||||
.menuprimary ul li a:link,.menuprimary ul li a:visited {
|
||||
color: white;
|
||||
@-webkit-keyframes slideInLeft {
|
||||
from {
|
||||
transform: translate(-25%, 0);
|
||||
opacity: 0;
|
||||
}
|
||||
to {
|
||||
transform: translate(0, 0);
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.menuprimary ul li a.selected {
|
||||
/*CSS class that's dynamically added to the currently active menu items' LI A element*/
|
||||
background: #0769AD !important;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.menuprimary ul li a:hover {
|
||||
background: #0769AD;
|
||||
/*background of menu items during onmouseover (hover state)*/
|
||||
color: white;
|
||||
}
|
||||
|
||||
/* sub menus */
|
||||
.menuprimary ul li ul {
|
||||
position: absolute;
|
||||
left: -3000px;
|
||||
display: none; /*collapse all sub menus to begin with*/
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
/*Sub level menu list items (alters style from Top level List Items)*/
|
||||
.menuprimary ul li ul li {
|
||||
display: list-item;
|
||||
float: none;
|
||||
}
|
||||
|
||||
/*All subsequent sub menu levels vertical offset after 1st level sub menu */
|
||||
.menuprimary ul li ul li ul {
|
||||
top: 0;
|
||||
}
|
||||
|
||||
/* Sub level menu links style */
|
||||
.menuprimary ul li ul li a {
|
||||
font: normal 13px Verdana;
|
||||
width: 160px; /*width of sub menus*/
|
||||
padding: 5px;
|
||||
margin: 0;
|
||||
border-top-width: 0;
|
||||
border-bottom: 1px solid gray;
|
||||
height: 90%;
|
||||
}
|
||||
|
||||
/* Holly Hack for IE \*/
|
||||
* html .menuprimary {
|
||||
height: 1%;
|
||||
} /*Holly Hack for IE7 and below*/
|
||||
|
||||
/* ######### CSS classes applied to down and right arrow images ######### */
|
||||
.downarrowclass {
|
||||
position: absolute;
|
||||
top: 12px;
|
||||
right: 7px;
|
||||
}
|
||||
|
||||
.rightarrowclass {
|
||||
position: absolute;
|
||||
top: 6px;
|
||||
right: 5px;
|
||||
}
|
||||
|
||||
/* ######### CSS for shadow added to sub menus ######### */
|
||||
.ddshadow {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 0;
|
||||
height: 0;
|
||||
background-color: #ccc;
|
||||
/* generally should be just a little lighter than the box-shadow color for CSS3 capable browsers */
|
||||
}
|
||||
|
||||
.toplevelshadow {
|
||||
margin: 5px 0 0 5px;
|
||||
/* in NON CSS3 capable browsers gives the offset of the shadow */
|
||||
opacity: 0.8;
|
||||
/* shadow opacity mostly for NON CSS3 capable browsers. Doesn't work in IE */
|
||||
}
|
||||
|
||||
.ddcss3support .ddshadow.toplevelshadow {
|
||||
margin: 0;
|
||||
/* in CSS3 capable browsers overrides offset from NON CSS3 capable browsers, allowing the box-shadow values in the next selector to govern that */
|
||||
/* opacity: 1; */
|
||||
/* optionally uncomment this to remove partial opacity for browsers supporting a box-shadow property which has its own slight gradient opacity */
|
||||
}
|
||||
|
||||
.ddcss3support .ddshadow {
|
||||
background-color: transparent;
|
||||
box-shadow: 5px 5px 5px #aaa;
|
||||
/* box-shadow color generally should be a little darker than that for the NON CSS3 capable browsers background-color */
|
||||
-moz-box-shadow: 5px 5px 5px #aaa;
|
||||
-webkit-box-shadow: 5px 5px 5px #aaa;
|
||||
}
|
||||
|
||||
/************************************************************************************************************/
|
||||
.menusecond {
|
||||
font: bold 12px Verdana;
|
||||
background: white; /*background of menu bar (default state)*/
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.menusecond ul {
|
||||
z-index: 100;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
/*Top level list items*/
|
||||
.menusecond ul li {
|
||||
position: relative;
|
||||
display: inline;
|
||||
float: left;
|
||||
}
|
||||
|
||||
/*Top level menu link items style*/
|
||||
.menusecond ul li a {
|
||||
display: block;
|
||||
background: white; /*background of menu items (default state)*/
|
||||
color: #414141;
|
||||
padding: 8px 10px;
|
||||
border-right: 1px solid #778;
|
||||
color: #2d2b2b;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
* html .menusecond ul li a {
|
||||
/*IE6 hack to get sub menu links to behave correctly*/
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.menusecond ul li a:link,.menusecond ul li a:visited {
|
||||
color: #414141;
|
||||
}
|
||||
|
||||
.menusecond ul li a.selected {
|
||||
/*CSS class that's dynamically added to the currently active menu items' LI A element*/
|
||||
background: #F0F0F0 !important;
|
||||
color: #414141;
|
||||
}
|
||||
|
||||
.menusecond ul li a:hover {
|
||||
background: #F0F0F0;
|
||||
/*background of menu items during onmouseover (hover state)*/
|
||||
color: #414141;
|
||||
}
|
||||
|
||||
/* sub menus */
|
||||
.menusecond ul li ul {
|
||||
position: absolute;
|
||||
left: -3000px;
|
||||
display: none; /*collapse all sub menus to begin with*/
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
/*Sub level menu list items (alters style from Top level List Items)*/
|
||||
.menusecond ul li ul li {
|
||||
display: list-item;
|
||||
float: none;
|
||||
}
|
||||
|
||||
/*All subsequent sub menu levels vertical offset after 1st level sub menu */
|
||||
.menusecond ul li ul li ul {
|
||||
top: 0;
|
||||
}
|
||||
|
||||
/* Sub level menu links style */
|
||||
.menusecond ul li ul li a {
|
||||
font: normal 13px Verdana;
|
||||
width: 160px; /*width of sub menus*/
|
||||
padding: 5px;
|
||||
margin: 0;
|
||||
border-top-width: 0;
|
||||
border-bottom: 1px solid gray;
|
||||
}
|
||||
|
||||
/* Holly Hack for IE \*/
|
||||
* html .menusecond {
|
||||
height: 1%;
|
||||
} /*Holly Hack for IE7 and below*/
|
||||
|
||||
/* ######### CSS classes applied to down and right arrow images ######### */
|
||||
.downarrowclass {
|
||||
position: absolute;
|
||||
top: 12px;
|
||||
right: 7px;
|
||||
}
|
||||
|
||||
.rightarrowclass {
|
||||
position: absolute;
|
||||
top: 6px;
|
||||
right: 5px;
|
||||
}
|
||||
|
||||
/* ######### CSS for shadow added to sub menus ######### */
|
||||
.ddshadow {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 0;
|
||||
height: 0;
|
||||
background-color: #ccc;
|
||||
/* generally should be just a little lighter than the box-shadow color for CSS3 capable browsers */
|
||||
}
|
||||
|
||||
.toplevelshadow {
|
||||
margin: 5px 0 0 5px;
|
||||
/* in NON CSS3 capable browsers gives the offset of the shadow */
|
||||
opacity: 0.8;
|
||||
/* shadow opacity mostly for NON CSS3 capable browsers. Doesn't work in IE */
|
||||
}
|
||||
|
||||
.ddcss3support .ddshadow.toplevelshadow {
|
||||
margin: 0;
|
||||
/* in CSS3 capable browsers overrides offset from NON CSS3 capable browsers, allowing the box-shadow values in the next selector to govern that */
|
||||
/* opacity: 1; */
|
||||
/* optionally uncomment this to remove partial opacity for browsers supporting a box-shadow property which has its own slight gradient opacity */
|
||||
}
|
||||
|
||||
.ddcss3support .ddshadow {
|
||||
background-color: transparent;
|
||||
box-shadow: 5px 5px 5px #aaa;
|
||||
/* box-shadow color generally should be a little darker than that for the NON CSS3 capable browsers background-color */
|
||||
-moz-box-shadow: 5px 5px 5px #aaa;
|
||||
-webkit-box-shadow: 5px 5px 5px #aaa;
|
||||
@keyframes slideInLeft {
|
||||
from {
|
||||
transform: translate(-25%, 0);
|
||||
opacity: 0;
|
||||
}
|
||||
to {
|
||||
transform: translate(0, 0);
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
@@ -1,279 +1,141 @@
|
||||
#nav_primary{
|
||||
background: #414141;
|
||||
}
|
||||
.menuprimary {
|
||||
font: bold 12px Verdana;
|
||||
margin: auto;
|
||||
height: 41px;
|
||||
|
||||
/*navMenu menu dropdown*/
|
||||
ul.navMenu {
|
||||
display: flex;
|
||||
position: relative;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
/*max-width: 70%;*/
|
||||
margin: 0 auto;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
background: #414141;
|
||||
border-top-left-radius: 6px;
|
||||
border-top-right-radius: 6px;
|
||||
}
|
||||
ul.navMenu > li {
|
||||
position: relative;
|
||||
flex-grow: 1;
|
||||
flex-shrink: 0;
|
||||
height: 45px;
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
text-transform: uppercase;
|
||||
line-height: 45px;
|
||||
letter-spacing: 1px;
|
||||
color: #e7e6f1;
|
||||
cursor: pointer;
|
||||
border-right: 1px solid white;
|
||||
}
|
||||
ul.navMenu > li:hover {
|
||||
background: #0769AD;
|
||||
}
|
||||
ul.navMenu > li:hover ul.dropdown {
|
||||
visibility: visible;
|
||||
transform: translate(0, 0);
|
||||
opacity: 1;
|
||||
z-index: 0;
|
||||
}
|
||||
ul.navMenu > li:hover ul.dropdown > li {
|
||||
-webkit-animation-name: slideInLeft;
|
||||
animation-name: slideInLeft;
|
||||
-webkit-animation-duration: 0.3s;
|
||||
animation-duration: 0.3s;
|
||||
-webkit-animation-timing-function: ease-in-out;
|
||||
animation-timing-function: ease-in-out;
|
||||
-webkit-animation-fill-mode: backwards;
|
||||
animation-fill-mode: backwards;
|
||||
}
|
||||
ul.navMenu > li:first-child {
|
||||
/*border-top-left-radius: 6px;*/
|
||||
border-left: 1px solid white;
|
||||
}
|
||||
ul.navMenu > li:last-child {
|
||||
/*border-top-right-radius: 6px;*/
|
||||
border-right: 1px solid white;
|
||||
}
|
||||
|
||||
.menucontainer {
|
||||
float: left;
|
||||
margin-top: -2px;
|
||||
ul.navMenu > li a {
|
||||
display: block;
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
height: 40px;
|
||||
font-size: 13px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.menuprimary ul {
|
||||
z-index: 100;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style-type: none;
|
||||
ul.navMenu > li a {
|
||||
/*IE6 hack to get sub menu links to behave correctly*/
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
/*Top level list items*/
|
||||
.menuprimary ul li {
|
||||
position: relative;
|
||||
display: inline;
|
||||
float: left;
|
||||
ul.navMenu > li a:link,ul.navMenu > li a:visited {
|
||||
color: white;
|
||||
}
|
||||
|
||||
.menuprimary ul .primaryleft {
|
||||
border-left: 1px solid white;
|
||||
ul.navMenu > li a.selected {
|
||||
/*CSS class that's dynamically added to the currently active menu items' LI A element*/
|
||||
color: white;
|
||||
}
|
||||
|
||||
/*Top level menu link items style*/
|
||||
.menuprimary ul li a {
|
||||
display: block;
|
||||
background: #414141; /*background of menu items (default state)*/
|
||||
color: white;
|
||||
padding: 10px 20px;
|
||||
border-right: 1px solid white;
|
||||
color: #2d2b2b;
|
||||
text-decoration: none;
|
||||
height: 40px;
|
||||
font-size: 13px;
|
||||
ul.navMenu > li a:hover {
|
||||
/*background of menu items during onmouseover (hover state)*/
|
||||
color: white;
|
||||
}
|
||||
|
||||
* html .menuprimary ul li a {
|
||||
/*IE6 hack to get sub menu links to behave correctly*/
|
||||
display: inline-block;
|
||||
ul.navMenu > li ul.dropdown {
|
||||
visibility: hidden;
|
||||
display: flex;
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
left: 0;
|
||||
right: 0;
|
||||
flex-direction: column;
|
||||
margin: 0;
|
||||
padding: 5px 0 0px;
|
||||
list-style: none;
|
||||
color: #333;
|
||||
background: #414141;
|
||||
/*
|
||||
border-bottom-left-radius: 6px;
|
||||
border-bottom-right-radius: 6px;
|
||||
*/
|
||||
box-shadow: 1px 2px 5px -1px rgba(0, 0, 0, 0.15), 0px 4px 14px -1px rgba(0, 0, 0, 0.1);
|
||||
transform: translate(0, -60px);
|
||||
transition: transform 0.2s ease-out, opacity 0.2s, z-index 0s 0.2s;
|
||||
opacity: 0;
|
||||
z-index: -1;
|
||||
}
|
||||
ul.navMenu > li ul.dropdown > li {
|
||||
font-size: 14px;
|
||||
cursor: pointer;
|
||||
border-top: 1px solid white;
|
||||
}
|
||||
ul.navMenu > li ul.dropdown > li:hover {
|
||||
background: #0769AD;
|
||||
}
|
||||
|
||||
.menuprimary ul li a:link,.menuprimary ul li a:visited {
|
||||
color: white;
|
||||
@-webkit-keyframes slideInLeft {
|
||||
from {
|
||||
transform: translate(-25%, 0);
|
||||
opacity: 0;
|
||||
}
|
||||
to {
|
||||
transform: translate(0, 0);
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.menuprimary ul li a.selected {
|
||||
/*CSS class that's dynamically added to the currently active menu items' LI A element*/
|
||||
background: #0769AD !important;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.menuprimary ul li a:hover {
|
||||
background: #0769AD;
|
||||
/*background of menu items during onmouseover (hover state)*/
|
||||
color: white;
|
||||
}
|
||||
|
||||
/* sub menus */
|
||||
.menuprimary ul li ul {
|
||||
position: absolute;
|
||||
left: -3000px;
|
||||
display: none; /*collapse all sub menus to begin with*/
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
/*Sub level menu list items (alters style from Top level List Items)*/
|
||||
.menuprimary ul li ul li {
|
||||
display: list-item;
|
||||
float: none;
|
||||
}
|
||||
|
||||
/*All subsequent sub menu levels vertical offset after 1st level sub menu */
|
||||
.menuprimary ul li ul li ul {
|
||||
top: 0;
|
||||
}
|
||||
|
||||
/* Sub level menu links style */
|
||||
.menuprimary ul li ul li a {
|
||||
font: normal 13px Verdana;
|
||||
width: 160px; /*width of sub menus*/
|
||||
padding: 5px;
|
||||
margin: 0;
|
||||
border-top-width: 0;
|
||||
border-bottom: 1px solid gray;
|
||||
height: 90%;
|
||||
}
|
||||
|
||||
/* Holly Hack for IE \*/
|
||||
* html .menuprimary {
|
||||
height: 1%;
|
||||
} /*Holly Hack for IE7 and below*/
|
||||
|
||||
/* ######### CSS classes applied to down and right arrow images ######### */
|
||||
.downarrowclass {
|
||||
position: absolute;
|
||||
top: 12px;
|
||||
right: 7px;
|
||||
}
|
||||
|
||||
.rightarrowclass {
|
||||
position: absolute;
|
||||
top: 6px;
|
||||
right: 5px;
|
||||
}
|
||||
|
||||
/* ######### CSS for shadow added to sub menus ######### */
|
||||
.ddshadow {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 0;
|
||||
height: 0;
|
||||
background-color: #ccc;
|
||||
/* generally should be just a little lighter than the box-shadow color for CSS3 capable browsers */
|
||||
}
|
||||
|
||||
.toplevelshadow {
|
||||
margin: 5px 0 0 5px;
|
||||
/* in NON CSS3 capable browsers gives the offset of the shadow */
|
||||
opacity: 0.8;
|
||||
/* shadow opacity mostly for NON CSS3 capable browsers. Doesn't work in IE */
|
||||
}
|
||||
|
||||
.ddcss3support .ddshadow.toplevelshadow {
|
||||
margin: 0;
|
||||
/* in CSS3 capable browsers overrides offset from NON CSS3 capable browsers, allowing the box-shadow values in the next selector to govern that */
|
||||
/* opacity: 1; */
|
||||
/* optionally uncomment this to remove partial opacity for browsers supporting a box-shadow property which has its own slight gradient opacity */
|
||||
}
|
||||
|
||||
.ddcss3support .ddshadow {
|
||||
background-color: transparent;
|
||||
box-shadow: 5px 5px 5px #aaa;
|
||||
/* box-shadow color generally should be a little darker than that for the NON CSS3 capable browsers background-color */
|
||||
-moz-box-shadow: 5px 5px 5px #aaa;
|
||||
-webkit-box-shadow: 5px 5px 5px #aaa;
|
||||
}
|
||||
|
||||
/************************************************************************************************************/
|
||||
.menusecond {
|
||||
font: bold 12px Verdana;
|
||||
background: white; /*background of menu bar (default state)*/
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.menusecond ul {
|
||||
z-index: 100;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
/*Top level list items*/
|
||||
.menusecond ul li {
|
||||
position: relative;
|
||||
display: inline;
|
||||
float: left;
|
||||
}
|
||||
|
||||
/*Top level menu link items style*/
|
||||
.menusecond ul li a {
|
||||
display: block;
|
||||
background: white; /*background of menu items (default state)*/
|
||||
color: #414141;
|
||||
padding: 8px 10px;
|
||||
border-right: 1px solid #778;
|
||||
color: #2d2b2b;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
* html .menusecond ul li a {
|
||||
/*IE6 hack to get sub menu links to behave correctly*/
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.menusecond ul li a:link,.menusecond ul li a:visited {
|
||||
color: #414141;
|
||||
}
|
||||
|
||||
.menusecond ul li a.selected {
|
||||
/*CSS class that's dynamically added to the currently active menu items' LI A element*/
|
||||
background: #F0F0F0 !important;
|
||||
color: #414141;
|
||||
}
|
||||
|
||||
.menusecond ul li a:hover {
|
||||
background: #F0F0F0;
|
||||
/*background of menu items during onmouseover (hover state)*/
|
||||
color: #414141;
|
||||
}
|
||||
|
||||
/* sub menus */
|
||||
.menusecond ul li ul {
|
||||
position: absolute;
|
||||
left: -3000px;
|
||||
display: none; /*collapse all sub menus to begin with*/
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
/*Sub level menu list items (alters style from Top level List Items)*/
|
||||
.menusecond ul li ul li {
|
||||
display: list-item;
|
||||
float: none;
|
||||
}
|
||||
|
||||
/*All subsequent sub menu levels vertical offset after 1st level sub menu */
|
||||
.menusecond ul li ul li ul {
|
||||
top: 0;
|
||||
}
|
||||
|
||||
/* Sub level menu links style */
|
||||
.menusecond ul li ul li a {
|
||||
font: normal 13px Verdana;
|
||||
width: 160px; /*width of sub menus*/
|
||||
padding: 5px;
|
||||
margin: 0;
|
||||
border-top-width: 0;
|
||||
border-bottom: 1px solid gray;
|
||||
}
|
||||
|
||||
/* Holly Hack for IE \*/
|
||||
* html .menusecond {
|
||||
height: 1%;
|
||||
} /*Holly Hack for IE7 and below*/
|
||||
|
||||
/* ######### CSS classes applied to down and right arrow images ######### */
|
||||
.downarrowclass {
|
||||
position: absolute;
|
||||
top: 12px;
|
||||
right: 7px;
|
||||
}
|
||||
|
||||
.rightarrowclass {
|
||||
position: absolute;
|
||||
top: 6px;
|
||||
right: 5px;
|
||||
}
|
||||
|
||||
/* ######### CSS for shadow added to sub menus ######### */
|
||||
.ddshadow {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 0;
|
||||
height: 0;
|
||||
background-color: #ccc;
|
||||
/* generally should be just a little lighter than the box-shadow color for CSS3 capable browsers */
|
||||
}
|
||||
|
||||
.toplevelshadow {
|
||||
margin: 5px 0 0 5px;
|
||||
/* in NON CSS3 capable browsers gives the offset of the shadow */
|
||||
opacity: 0.8;
|
||||
/* shadow opacity mostly for NON CSS3 capable browsers. Doesn't work in IE */
|
||||
}
|
||||
|
||||
.ddcss3support .ddshadow.toplevelshadow {
|
||||
margin: 0;
|
||||
/* in CSS3 capable browsers overrides offset from NON CSS3 capable browsers, allowing the box-shadow values in the next selector to govern that */
|
||||
/* opacity: 1; */
|
||||
/* optionally uncomment this to remove partial opacity for browsers supporting a box-shadow property which has its own slight gradient opacity */
|
||||
}
|
||||
|
||||
.ddcss3support .ddshadow {
|
||||
background-color: transparent;
|
||||
box-shadow: 5px 5px 5px #aaa;
|
||||
/* box-shadow color generally should be a little darker than that for the NON CSS3 capable browsers background-color */
|
||||
-moz-box-shadow: 5px 5px 5px #aaa;
|
||||
-webkit-box-shadow: 5px 5px 5px #aaa;
|
||||
@keyframes slideInLeft {
|
||||
from {
|
||||
transform: translate(-25%, 0);
|
||||
opacity: 0;
|
||||
}
|
||||
to {
|
||||
transform: translate(0, 0);
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
@@ -1,279 +1,143 @@
|
||||
|
||||
/**/
|
||||
#nav_primary{
|
||||
background: #31402a;
|
||||
}
|
||||
.menuprimary {
|
||||
font: bold 12px Verdana;
|
||||
margin: auto;
|
||||
height: 41px;
|
||||
|
||||
/*navMenu menu dropdown*/
|
||||
ul.navMenu {
|
||||
display: flex;
|
||||
position: relative;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
/*max-width: 70%;*/
|
||||
margin: 0 auto;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
background: #31402a;
|
||||
border-top-left-radius: 6px;
|
||||
border-top-right-radius: 6px;
|
||||
}
|
||||
ul.navMenu > li {
|
||||
position: relative;
|
||||
flex-grow: 1;
|
||||
flex-shrink: 0;
|
||||
height: 45px;
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
text-transform: uppercase;
|
||||
line-height: 45px;
|
||||
letter-spacing: 1px;
|
||||
color: #e7e6f1;
|
||||
cursor: pointer;
|
||||
border-right: 1px solid white;
|
||||
}
|
||||
ul.navMenu > li:hover {
|
||||
background: #ef8200;
|
||||
}
|
||||
ul.navMenu > li:hover ul.dropdown {
|
||||
visibility: visible;
|
||||
transform: translate(0, 0);
|
||||
opacity: 1;
|
||||
z-index: 0;
|
||||
}
|
||||
ul.navMenu > li:hover ul.dropdown > li {
|
||||
-webkit-animation-name: slideInLeft;
|
||||
animation-name: slideInLeft;
|
||||
-webkit-animation-duration: 0.3s;
|
||||
animation-duration: 0.3s;
|
||||
-webkit-animation-timing-function: ease-in-out;
|
||||
animation-timing-function: ease-in-out;
|
||||
-webkit-animation-fill-mode: backwards;
|
||||
animation-fill-mode: backwards;
|
||||
}
|
||||
ul.navMenu > li:first-child {
|
||||
/*border-top-left-radius: 6px;*/
|
||||
border-left: 1px solid white;
|
||||
}
|
||||
ul.navMenu > li:last-child {
|
||||
/*border-top-right-radius: 6px;*/
|
||||
border-right: 1px solid white;
|
||||
}
|
||||
|
||||
.menucontainer {
|
||||
float: left;
|
||||
margin-top: -2px;
|
||||
ul.navMenu > li a {
|
||||
display: block;
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
height: 40px;
|
||||
font-size: 13px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.menuprimary ul {
|
||||
z-index: 100;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style-type: none;
|
||||
ul.navMenu > li a {
|
||||
/*IE6 hack to get sub menu links to behave correctly*/
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
/*Top level list items*/
|
||||
.menuprimary ul li {
|
||||
position: relative;
|
||||
display: inline;
|
||||
float: left;
|
||||
ul.navMenu > li a:link,ul.navMenu > li a:visited {
|
||||
color: white;
|
||||
}
|
||||
|
||||
.menuprimary ul .primaryleft {
|
||||
border-left: 1px solid white;
|
||||
ul.navMenu > li a.selected {
|
||||
/*CSS class that's dynamically added to the currently active menu items' LI A element*/
|
||||
color: white;
|
||||
}
|
||||
|
||||
/*Top level menu link items style*/
|
||||
.menuprimary ul li a {
|
||||
display: block;
|
||||
background: #31402a; /*background of menu items (default state)*/
|
||||
color: white;
|
||||
padding: 10px 20px;
|
||||
border-right: 1px solid white;
|
||||
color: #2d2b2b;
|
||||
text-decoration: none;
|
||||
height: 40px;
|
||||
font-size: 13px;
|
||||
ul.navMenu > li a:hover {
|
||||
/*background of menu items during onmouseover (hover state)*/
|
||||
color: white;
|
||||
}
|
||||
|
||||
* html .menuprimary ul li a {
|
||||
/*IE6 hack to get sub menu links to behave correctly*/
|
||||
display: inline-block;
|
||||
ul.navMenu > li ul.dropdown {
|
||||
visibility: hidden;
|
||||
display: flex;
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
left: 0;
|
||||
right: 0;
|
||||
flex-direction: column;
|
||||
margin: 0;
|
||||
padding: 5px 0 0px;
|
||||
list-style: none;
|
||||
color: #333;
|
||||
background: #31402a;
|
||||
/*
|
||||
border-bottom-left-radius: 6px;
|
||||
border-bottom-right-radius: 6px;
|
||||
*/
|
||||
box-shadow: 1px 2px 5px -1px rgba(0, 0, 0, 0.15), 0px 4px 14px -1px rgba(0, 0, 0, 0.1);
|
||||
transform: translate(0, -60px);
|
||||
transition: transform 0.2s ease-out, opacity 0.2s, z-index 0s 0.2s;
|
||||
opacity: 0;
|
||||
z-index: -1;
|
||||
}
|
||||
ul.navMenu > li ul.dropdown > li {
|
||||
font-size: 14px;
|
||||
cursor: pointer;
|
||||
border-top: 1px solid white;
|
||||
}
|
||||
ul.navMenu > li ul.dropdown > li:hover {
|
||||
background: #ef8200;
|
||||
}
|
||||
|
||||
.menuprimary ul li a:link,.menuprimary ul li a:visited {
|
||||
color: white;
|
||||
@-webkit-keyframes slideInLeft {
|
||||
from {
|
||||
transform: translate(-25%, 0);
|
||||
opacity: 0;
|
||||
}
|
||||
to {
|
||||
transform: translate(0, 0);
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.menuprimary ul li a.selected {
|
||||
/*CSS class that's dynamically added to the currently active menu items' LI A element*/
|
||||
background: #ef8200 !important;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.menuprimary ul li a:hover {
|
||||
background: #ef8200;
|
||||
/*background of menu items during onmouseover (hover state)*/
|
||||
color: white;
|
||||
}
|
||||
|
||||
/* sub menus */
|
||||
.menuprimary ul li ul {
|
||||
position: absolute;
|
||||
left: -3000px;
|
||||
display: none; /*collapse all sub menus to begin with*/
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
/*Sub level menu list items (alters style from Top level List Items)*/
|
||||
.menuprimary ul li ul li {
|
||||
display: list-item;
|
||||
float: none;
|
||||
}
|
||||
|
||||
/*All subsequent sub menu levels vertical offset after 1st level sub menu */
|
||||
.menuprimary ul li ul li ul {
|
||||
top: 0;
|
||||
}
|
||||
|
||||
/* Sub level menu links style */
|
||||
.menuprimary ul li ul li a {
|
||||
font: normal 13px Verdana;
|
||||
width: 160px; /*width of sub menus*/
|
||||
padding: 5px;
|
||||
margin: 0;
|
||||
border-top-width: 0;
|
||||
border-bottom: 1px solid gray;
|
||||
height: 90%;
|
||||
}
|
||||
|
||||
/* Holly Hack for IE \*/
|
||||
* html .menuprimary {
|
||||
height: 1%;
|
||||
} /*Holly Hack for IE7 and below*/
|
||||
|
||||
/* ######### CSS classes applied to down and right arrow images ######### */
|
||||
.downarrowclass {
|
||||
position: absolute;
|
||||
top: 12px;
|
||||
right: 7px;
|
||||
}
|
||||
|
||||
.rightarrowclass {
|
||||
position: absolute;
|
||||
top: 6px;
|
||||
right: 5px;
|
||||
}
|
||||
|
||||
/* ######### CSS for shadow added to sub menus ######### */
|
||||
.ddshadow {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 0;
|
||||
height: 0;
|
||||
background-color: #ccc;
|
||||
/* generally should be just a little lighter than the box-shadow color for CSS3 capable browsers */
|
||||
}
|
||||
|
||||
.toplevelshadow {
|
||||
margin: 5px 0 0 5px;
|
||||
/* in NON CSS3 capable browsers gives the offset of the shadow */
|
||||
opacity: 0.8;
|
||||
/* shadow opacity mostly for NON CSS3 capable browsers. Doesn't work in IE */
|
||||
}
|
||||
|
||||
.ddcss3support .ddshadow.toplevelshadow {
|
||||
margin: 0;
|
||||
/* in CSS3 capable browsers overrides offset from NON CSS3 capable browsers, allowing the box-shadow values in the next selector to govern that */
|
||||
/* opacity: 1; */
|
||||
/* optionally uncomment this to remove partial opacity for browsers supporting a box-shadow property which has its own slight gradient opacity */
|
||||
}
|
||||
|
||||
.ddcss3support .ddshadow {
|
||||
background-color: transparent;
|
||||
box-shadow: 5px 5px 5px #aaa;
|
||||
/* box-shadow color generally should be a little darker than that for the NON CSS3 capable browsers background-color */
|
||||
-moz-box-shadow: 5px 5px 5px #aaa;
|
||||
-webkit-box-shadow: 5px 5px 5px #aaa;
|
||||
}
|
||||
|
||||
/************************************************************************************************************/
|
||||
.menusecond {
|
||||
font: bold 12px Verdana;
|
||||
background: white; /*background of menu bar (default state)*/
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.menusecond ul {
|
||||
z-index: 100;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
/*Top level list items*/
|
||||
.menusecond ul li {
|
||||
position: relative;
|
||||
display: inline;
|
||||
float: left;
|
||||
}
|
||||
|
||||
/*Top level menu link items style*/
|
||||
.menusecond ul li a {
|
||||
display: block;
|
||||
background: white; /*background of menu items (default state)*/
|
||||
color: #31402a;
|
||||
padding: 8px 10px;
|
||||
border-right: 1px solid #778;
|
||||
color: #2d2b2b;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
* html .menusecond ul li a {
|
||||
/*IE6 hack to get sub menu links to behave correctly*/
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.menusecond ul li a:link,.menusecond ul li a:visited {
|
||||
color: #31402a;
|
||||
}
|
||||
|
||||
.menusecond ul li a.selected {
|
||||
/*CSS class that's dynamically added to the currently active menu items' LI A element*/
|
||||
background: #F0F0F0 !important;
|
||||
color: #31402a;
|
||||
}
|
||||
|
||||
.menusecond ul li a:hover {
|
||||
background: #F0F0F0;
|
||||
/*background of menu items during onmouseover (hover state)*/
|
||||
color: #31402a;
|
||||
}
|
||||
|
||||
/* sub menus */
|
||||
.menusecond ul li ul {
|
||||
position: absolute;
|
||||
left: -3000px;
|
||||
display: none; /*collapse all sub menus to begin with*/
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
/*Sub level menu list items (alters style from Top level List Items)*/
|
||||
.menusecond ul li ul li {
|
||||
display: list-item;
|
||||
float: none;
|
||||
}
|
||||
|
||||
/*All subsequent sub menu levels vertical offset after 1st level sub menu */
|
||||
.menusecond ul li ul li ul {
|
||||
top: 0;
|
||||
}
|
||||
|
||||
/* Sub level menu links style */
|
||||
.menusecond ul li ul li a {
|
||||
font: normal 13px Verdana;
|
||||
width: 160px; /*width of sub menus*/
|
||||
padding: 5px;
|
||||
margin: 0;
|
||||
border-top-width: 0;
|
||||
border-bottom: 1px solid gray;
|
||||
}
|
||||
|
||||
/* Holly Hack for IE \*/
|
||||
* html .menusecond {
|
||||
height: 1%;
|
||||
} /*Holly Hack for IE7 and below*/
|
||||
|
||||
/* ######### CSS classes applied to down and right arrow images ######### */
|
||||
.downarrowclass {
|
||||
position: absolute;
|
||||
top: 12px;
|
||||
right: 7px;
|
||||
}
|
||||
|
||||
.rightarrowclass {
|
||||
position: absolute;
|
||||
top: 6px;
|
||||
right: 5px;
|
||||
}
|
||||
|
||||
/* ######### CSS for shadow added to sub menus ######### */
|
||||
.ddshadow {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 0;
|
||||
height: 0;
|
||||
background-color: #ccc;
|
||||
/* generally should be just a little lighter than the box-shadow color for CSS3 capable browsers */
|
||||
}
|
||||
|
||||
.toplevelshadow {
|
||||
margin: 5px 0 0 5px;
|
||||
/* in NON CSS3 capable browsers gives the offset of the shadow */
|
||||
opacity: 0.8;
|
||||
/* shadow opacity mostly for NON CSS3 capable browsers. Doesn't work in IE */
|
||||
}
|
||||
|
||||
.ddcss3support .ddshadow.toplevelshadow {
|
||||
margin: 0;
|
||||
/* in CSS3 capable browsers overrides offset from NON CSS3 capable browsers, allowing the box-shadow values in the next selector to govern that */
|
||||
/* opacity: 1; */
|
||||
/* optionally uncomment this to remove partial opacity for browsers supporting a box-shadow property which has its own slight gradient opacity */
|
||||
}
|
||||
|
||||
.ddcss3support .ddshadow {
|
||||
background-color: transparent;
|
||||
box-shadow: 5px 5px 5px #aaa;
|
||||
/* box-shadow color generally should be a little darker than that for the NON CSS3 capable browsers background-color */
|
||||
-moz-box-shadow: 5px 5px 5px #aaa;
|
||||
-webkit-box-shadow: 5px 5px 5px #aaa;
|
||||
@keyframes slideInLeft {
|
||||
from {
|
||||
transform: translate(-25%, 0);
|
||||
opacity: 0;
|
||||
}
|
||||
to {
|
||||
transform: translate(0, 0);
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
@@ -1,280 +1,142 @@
|
||||
/**/
|
||||
#nav_primary{
|
||||
background: #721170;
|
||||
}
|
||||
|
||||
.menuprimary {
|
||||
font: bold 12px Verdana;
|
||||
margin: auto;
|
||||
height: 41px;
|
||||
/*navMenu menu dropdown*/
|
||||
ul.navMenu {
|
||||
display: flex;
|
||||
position: relative;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
/*max-width: 70%;*/
|
||||
margin: 0 auto;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
background: #721170;
|
||||
border-top-left-radius: 6px;
|
||||
border-top-right-radius: 6px;
|
||||
}
|
||||
ul.navMenu > li {
|
||||
position: relative;
|
||||
flex-grow: 1;
|
||||
flex-shrink: 0;
|
||||
height: 45px;
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
text-transform: uppercase;
|
||||
line-height: 45px;
|
||||
letter-spacing: 1px;
|
||||
color: #e7e6f1;
|
||||
cursor: pointer;
|
||||
border-right: 1px solid white;
|
||||
}
|
||||
ul.navMenu > li:hover {
|
||||
background: #63065f;
|
||||
}
|
||||
ul.navMenu > li:hover ul.dropdown {
|
||||
visibility: visible;
|
||||
transform: translate(0, 0);
|
||||
opacity: 1;
|
||||
z-index: 0;
|
||||
}
|
||||
ul.navMenu > li:hover ul.dropdown > li {
|
||||
-webkit-animation-name: slideInLeft;
|
||||
animation-name: slideInLeft;
|
||||
-webkit-animation-duration: 0.3s;
|
||||
animation-duration: 0.3s;
|
||||
-webkit-animation-timing-function: ease-in-out;
|
||||
animation-timing-function: ease-in-out;
|
||||
-webkit-animation-fill-mode: backwards;
|
||||
animation-fill-mode: backwards;
|
||||
}
|
||||
ul.navMenu > li:first-child {
|
||||
/*border-top-left-radius: 6px;*/
|
||||
border-left: 1px solid white;
|
||||
}
|
||||
ul.navMenu > li:last-child {
|
||||
/*border-top-right-radius: 6px;*/
|
||||
border-right: 1px solid white;
|
||||
}
|
||||
|
||||
.menucontainer {
|
||||
float: left;
|
||||
margin-top: -2px;
|
||||
ul.navMenu > li a {
|
||||
display: block;
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
height: 40px;
|
||||
font-size: 13px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.menuprimary ul {
|
||||
z-index: 100;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style-type: none;
|
||||
ul.navMenu > li a {
|
||||
/*IE6 hack to get sub menu links to behave correctly*/
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
/*Top level list items*/
|
||||
.menuprimary ul li {
|
||||
position: relative;
|
||||
display: inline;
|
||||
float: left;
|
||||
ul.navMenu > li a:link,ul.navMenu > li a:visited {
|
||||
color: white;
|
||||
}
|
||||
|
||||
.menuprimary ul .primaryleft {
|
||||
border-left: 1px solid white;
|
||||
ul.navMenu > li a.selected {
|
||||
/*CSS class that's dynamically added to the currently active menu items' LI A element*/
|
||||
color: white;
|
||||
}
|
||||
|
||||
/*Top level menu link items style*/
|
||||
.menuprimary ul li a {
|
||||
display: block;
|
||||
background: #721170; /*background of menu items (default state)*/
|
||||
color: white;
|
||||
padding: 10px 20px;
|
||||
border-right: 1px solid white;
|
||||
color: #2d2b2b;
|
||||
text-decoration: none;
|
||||
height: 40px;
|
||||
font-size: 13px;
|
||||
ul.navMenu > li a:hover {
|
||||
/*background of menu items during onmouseover (hover state)*/
|
||||
color: white;
|
||||
}
|
||||
|
||||
* html .menuprimary ul li a {
|
||||
/*IE6 hack to get sub menu links to behave correctly*/
|
||||
display: inline-block;
|
||||
ul.navMenu > li ul.dropdown {
|
||||
visibility: hidden;
|
||||
display: flex;
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
left: 0;
|
||||
right: 0;
|
||||
flex-direction: column;
|
||||
margin: 0;
|
||||
padding: 5px 0 0px;
|
||||
list-style: none;
|
||||
color: #333;
|
||||
background: #721170;
|
||||
/*
|
||||
border-bottom-left-radius: 6px;
|
||||
border-bottom-right-radius: 6px;
|
||||
*/
|
||||
box-shadow: 1px 2px 5px -1px rgba(0, 0, 0, 0.15), 0px 4px 14px -1px rgba(0, 0, 0, 0.1);
|
||||
transform: translate(0, -60px);
|
||||
transition: transform 0.2s ease-out, opacity 0.2s, z-index 0s 0.2s;
|
||||
opacity: 0;
|
||||
z-index: -1;
|
||||
}
|
||||
ul.navMenu > li ul.dropdown > li {
|
||||
font-size: 14px;
|
||||
cursor: pointer;
|
||||
border-top: 1px solid white;
|
||||
}
|
||||
ul.navMenu > li ul.dropdown > li:hover {
|
||||
background: #63065f;
|
||||
}
|
||||
|
||||
.menuprimary ul li a:link,.menuprimary ul li a:visited {
|
||||
color: white;
|
||||
@-webkit-keyframes slideInLeft {
|
||||
from {
|
||||
transform: translate(-25%, 0);
|
||||
opacity: 0;
|
||||
}
|
||||
to {
|
||||
transform: translate(0, 0);
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.menuprimary ul li a.selected {
|
||||
/*CSS class that's dynamically added to the currently active menu items' LI A element*/
|
||||
background: #63065f !important;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.menuprimary ul li a:hover {
|
||||
background: #63065f;
|
||||
/*background of menu items during onmouseover (hover state)*/
|
||||
color: white;
|
||||
}
|
||||
|
||||
/* sub menus */
|
||||
.menuprimary ul li ul {
|
||||
position: absolute;
|
||||
left: -3000px;
|
||||
display: none; /*collapse all sub menus to begin with*/
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
/*Sub level menu list items (alters style from Top level List Items)*/
|
||||
.menuprimary ul li ul li {
|
||||
display: list-item;
|
||||
float: none;
|
||||
}
|
||||
|
||||
/*All subsequent sub menu levels vertical offset after 1st level sub menu */
|
||||
.menuprimary ul li ul li ul {
|
||||
top: 0;
|
||||
}
|
||||
|
||||
/* Sub level menu links style */
|
||||
.menuprimary ul li ul li a {
|
||||
font: normal 13px Verdana;
|
||||
width: 160px; /*width of sub menus*/
|
||||
padding: 5px;
|
||||
margin: 0;
|
||||
border-top-width: 0;
|
||||
border-bottom: 1px solid gray;
|
||||
height: 90%;
|
||||
}
|
||||
|
||||
/* Holly Hack for IE \*/
|
||||
* html .menuprimary {
|
||||
height: 1%;
|
||||
} /*Holly Hack for IE7 and below*/
|
||||
|
||||
/* ######### CSS classes applied to down and right arrow images ######### */
|
||||
.downarrowclass {
|
||||
position: absolute;
|
||||
top: 12px;
|
||||
right: 7px;
|
||||
}
|
||||
|
||||
.rightarrowclass {
|
||||
position: absolute;
|
||||
top: 6px;
|
||||
right: 5px;
|
||||
}
|
||||
|
||||
/* ######### CSS for shadow added to sub menus ######### */
|
||||
.ddshadow {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 0;
|
||||
height: 0;
|
||||
background-color: #ccc;
|
||||
/* generally should be just a little lighter than the box-shadow color for CSS3 capable browsers */
|
||||
}
|
||||
|
||||
.toplevelshadow {
|
||||
margin: 5px 0 0 5px;
|
||||
/* in NON CSS3 capable browsers gives the offset of the shadow */
|
||||
opacity: 0.8;
|
||||
/* shadow opacity mostly for NON CSS3 capable browsers. Doesn't work in IE */
|
||||
}
|
||||
|
||||
.ddcss3support .ddshadow.toplevelshadow {
|
||||
margin: 0;
|
||||
/* in CSS3 capable browsers overrides offset from NON CSS3 capable browsers, allowing the box-shadow values in the next selector to govern that */
|
||||
/* opacity: 1; */
|
||||
/* optionally uncomment this to remove partial opacity for browsers supporting a box-shadow property which has its own slight gradient opacity */
|
||||
}
|
||||
|
||||
.ddcss3support .ddshadow {
|
||||
background-color: transparent;
|
||||
box-shadow: 5px 5px 5px #aaa;
|
||||
/* box-shadow color generally should be a little darker than that for the NON CSS3 capable browsers background-color */
|
||||
-moz-box-shadow: 5px 5px 5px #aaa;
|
||||
-webkit-box-shadow: 5px 5px 5px #aaa;
|
||||
}
|
||||
|
||||
/************************************************************************************************************/
|
||||
.menusecond {
|
||||
font: bold 12px Verdana;
|
||||
background: white; /*background of menu bar (default state)*/
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.menusecond ul {
|
||||
z-index: 100;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
/*Top level list items*/
|
||||
.menusecond ul li {
|
||||
position: relative;
|
||||
display: inline;
|
||||
float: left;
|
||||
}
|
||||
|
||||
/*Top level menu link items style*/
|
||||
.menusecond ul li a {
|
||||
display: block;
|
||||
background: white; /*background of menu items (default state)*/
|
||||
color: #721170;
|
||||
padding: 8px 10px;
|
||||
border-right: 1px solid #778;
|
||||
color: #2d2b2b;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
* html .menusecond ul li a {
|
||||
/*IE6 hack to get sub menu links to behave correctly*/
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.menusecond ul li a:link,.menusecond ul li a:visited {
|
||||
color: #721170;
|
||||
}
|
||||
|
||||
.menusecond ul li a.selected {
|
||||
/*CSS class that's dynamically added to the currently active menu items' LI A element*/
|
||||
background: #F0F0F0 !important;
|
||||
color: #414141;
|
||||
}
|
||||
|
||||
.menusecond ul li a:hover {
|
||||
background: #F0F0F0;
|
||||
/*background of menu items during onmouseover (hover state)*/
|
||||
color: #414141;
|
||||
}
|
||||
|
||||
/* sub menus */
|
||||
.menusecond ul li ul {
|
||||
position: absolute;
|
||||
left: -3000px;
|
||||
display: none; /*collapse all sub menus to begin with*/
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
/*Sub level menu list items (alters style from Top level List Items)*/
|
||||
.menusecond ul li ul li {
|
||||
display: list-item;
|
||||
float: none;
|
||||
}
|
||||
|
||||
/*All subsequent sub menu levels vertical offset after 1st level sub menu */
|
||||
.menusecond ul li ul li ul {
|
||||
top: 0;
|
||||
}
|
||||
|
||||
/* Sub level menu links style */
|
||||
.menusecond ul li ul li a {
|
||||
font: normal 13px Verdana;
|
||||
width: 160px; /*width of sub menus*/
|
||||
padding: 5px;
|
||||
margin: 0;
|
||||
border-top-width: 0;
|
||||
border-bottom: 1px solid gray;
|
||||
}
|
||||
|
||||
/* Holly Hack for IE \*/
|
||||
* html .menusecond {
|
||||
height: 1%;
|
||||
} /*Holly Hack for IE7 and below*/
|
||||
|
||||
/* ######### CSS classes applied to down and right arrow images ######### */
|
||||
.downarrowclass {
|
||||
position: absolute;
|
||||
top: 12px;
|
||||
right: 7px;
|
||||
}
|
||||
|
||||
.rightarrowclass {
|
||||
position: absolute;
|
||||
top: 6px;
|
||||
right: 5px;
|
||||
}
|
||||
|
||||
/* ######### CSS for shadow added to sub menus ######### */
|
||||
.ddshadow {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 0;
|
||||
height: 0;
|
||||
background-color: #ccc;
|
||||
/* generally should be just a little lighter than the box-shadow color for CSS3 capable browsers */
|
||||
}
|
||||
|
||||
.toplevelshadow {
|
||||
margin: 5px 0 0 5px;
|
||||
/* in NON CSS3 capable browsers gives the offset of the shadow */
|
||||
opacity: 0.8;
|
||||
/* shadow opacity mostly for NON CSS3 capable browsers. Doesn't work in IE */
|
||||
}
|
||||
|
||||
.ddcss3support .ddshadow.toplevelshadow {
|
||||
margin: 0;
|
||||
/* in CSS3 capable browsers overrides offset from NON CSS3 capable browsers, allowing the box-shadow values in the next selector to govern that */
|
||||
/* opacity: 1; */
|
||||
/* optionally uncomment this to remove partial opacity for browsers supporting a box-shadow property which has its own slight gradient opacity */
|
||||
}
|
||||
|
||||
.ddcss3support .ddshadow {
|
||||
background-color: transparent;
|
||||
box-shadow: 5px 5px 5px #aaa;
|
||||
/* box-shadow color generally should be a little darker than that for the NON CSS3 capable browsers background-color */
|
||||
-moz-box-shadow: 5px 5px 5px #aaa;
|
||||
-webkit-box-shadow: 5px 5px 5px #aaa;
|
||||
@keyframes slideInLeft {
|
||||
from {
|
||||
transform: translate(-25%, 0);
|
||||
opacity: 0;
|
||||
}
|
||||
to {
|
||||
transform: translate(0, 0);
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
@@ -17,9 +17,21 @@ $(function(){
|
||||
$(".datetimepicker").datetimepicker({format:'Y-m-d H:i'});
|
||||
$(".datepicker").datetimepicker({timepicker:false,format:'Y-m-d'});
|
||||
$(".timepicker").datetimepicker({datepicker:false,format:'H:i',step:10});
|
||||
|
||||
//$(".multipleselect").multipleSelect({});
|
||||
|
||||
|
||||
//maxkey navMenu
|
||||
$('.navMenu').children('ul').children('li').each(function(indexCount){
|
||||
// loop through each dropdown, count children and apply a animation delay based on their index value
|
||||
$(this).children('ul.dropdown').children('li').each(function(index){
|
||||
// Turn the index value into a reasonable animation delay
|
||||
var delay = 0.1 + index*0.03;
|
||||
// Apply the animation delay
|
||||
$(this).css("animation-delay", delay + "s")
|
||||
});
|
||||
});
|
||||
|
||||
//side navigation
|
||||
$('#side-nav-menu').metisMenu();
|
||||
|
||||
//on captcha image click ,new a captcha code
|
||||
$('.captcha-image').click(function () {//
|
||||
$(this).attr("src", webContextPath + "/captcha?"+(new Date()).getTime());
|
||||
|
||||
Reference in New Issue
Block a user