v2.2.0RC1

v2.2.0RC1
上级 88128bec
......@@ -112,6 +112,8 @@ public class Apps extends JpaBaseDomain implements Serializable {
*/
private int isExtendAttr;
private String extendAttr;
private String userPropertys;
/**
* Signature for client verify create by SignaturePublicKey &
......@@ -388,6 +390,14 @@ public class Apps extends JpaBaseDomain implements Serializable {
this.extendAttr = extendAttr;
}
public String getUserPropertys() {
return userPropertys;
}
public void setUserPropertys(String userPropertys) {
this.userPropertys = userPropertys;
}
public int getVisible() {
return visible;
}
......
......@@ -58,194 +58,88 @@ public class AppsTokenBasedDetails extends Apps {
private String algorithmKey;
@Column
private String expires;
//
@Column
private int uid;
@Column
private int username;
@Column
private int email;
@Column
private int windowsAccount;
@Column
private int employeeNumber;
@Column
private int departmentId;
@Column
private int department;
public AppsTokenBasedDetails() {
super();
}
public String getRedirectUri() {
return redirectUri;
}
public void setRedirectUri(String redirectUri) {
this.redirectUri = redirectUri;
}
public String getCookieName() {
return cookieName;
}
public void setCookieName(String cookieName) {
this.cookieName = cookieName;
}
public String getAlgorithm() {
return algorithm;
}
public void setAlgorithm(String algorithm) {
this.algorithm = algorithm;
}
public String getAlgorithmKey() {
return algorithmKey;
}
public void setAlgorithmKey(String algorithmKey) {
this.algorithmKey = algorithmKey;
}
public String getExpires() {
return expires;
}
public void setExpires(String expires) {
this.expires = expires;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public int getUid() {
return uid;
}
public String getRedirectUri() {
return redirectUri;
}
public void setUid(int uid) {
this.uid = uid;
}
public void setRedirectUri(String redirectUri) {
this.redirectUri = redirectUri;
}
public String getTokenType() {
return tokenType;
}
public int getUsername() {
return username;
}
public void setTokenType(String tokenType) {
this.tokenType = tokenType;
}
public void setUsername(int username) {
this.username = username;
}
public String getCookieName() {
return cookieName;
}
public void setCookieName(String cookieName) {
this.cookieName = cookieName;
}
public int getEmail() {
return email;
}
public String getAlgorithm() {
return algorithm;
}
public void setEmail(int email) {
this.email = email;
}
public void setAlgorithm(String algorithm) {
this.algorithm = algorithm;
}
public String getAlgorithmKey() {
return algorithmKey;
}
public int getWindowsAccount() {
return windowsAccount;
}
public void setAlgorithmKey(String algorithmKey) {
this.algorithmKey = algorithmKey;
}
public void setWindowsAccount(int windowsAccount) {
this.windowsAccount = windowsAccount;
}
public String getExpires() {
return expires;
}
public void setExpires(String expires) {
this.expires = expires;
}
public String getTokenType() {
return tokenType;
}
public void setTokenType(String tokenType) {
this.tokenType = tokenType;
}
public int getEmployeeNumber() {
return employeeNumber;
}
public void setEmployeeNumber(int employeeNumber) {
this.employeeNumber = employeeNumber;
}
public int getDepartmentId() {
return departmentId;
}
public void setDepartmentId(int departmentId) {
this.departmentId = departmentId;
}
public int getDepartment() {
return department;
}
public void setDepartment(int department) {
this.department = department;
}
@Override
public String toString() {
return "TokenBasedDetails [redirectUri=" + redirectUri + ", cookieName=" + cookieName + ", algorithm="
+ algorithm + ", algorithmKey=" + algorithmKey + ", expires=" + expires + ", uid=" + uid + ", username="
+ username + ", email=" + email + ", windowsAccount=" + windowsAccount + ", employeeNumber="
+ employeeNumber + ", departmentId=" + departmentId + ", department=" + department + "]";
}
@Override
public String toString() {
return "AppsTokenBasedDetails [id=" + id + ", redirectUri=" + redirectUri + ", tokenType=" + tokenType
+ ", cookieName=" + cookieName + ", algorithm=" + algorithm + ", algorithmKey=" + algorithmKey
+ ", expires=" + expires + "]";
}
}
......@@ -56,6 +56,7 @@
ISEXTENDATTR,
EXTENDATTR,
USERPROPERTYS,
ISSIGNATURE,
......@@ -92,7 +93,7 @@
#{isExtendAttr},
#{extendAttr},
#{userPropertys},
#{isSignature},
#{isAdapter},
......@@ -133,7 +134,7 @@
ISEXTENDATTR = #{isExtendAttr},
EXTENDATTR = #{extendAttr},
USERPROPERTYS = #{userPropertys},
ISSIGNATURE = #{isSignature},
<if test="adapter != null">
......
......@@ -21,7 +21,6 @@ import java.util.Date;
import java.util.HashMap;
import org.maxkey.authz.endpoint.adapter.AbstractAuthorizeAdapter;
import org.maxkey.constants.Boolean;
import org.maxkey.domain.UserInfo;
import org.maxkey.domain.apps.AppsTokenBasedDetails;
import org.maxkey.util.DateUtils;
......@@ -40,27 +39,33 @@ public class TokenBasedDefaultAdapter extends AbstractAuthorizeAdapter {
beanMap.put("randomId",(new StringGenerator()).uuidGenerate());
if(Boolean.isTrue(details.getUid())){
beanMap.put("uid",userInfo.getId());
}
if(Boolean.isTrue(details.getUsername())){
beanMap.put("username", userInfo.getUsername());
}
if(Boolean.isTrue(details.getEmail())){
beanMap.put("email", userInfo.getEmail());
}
if(Boolean.isTrue(details.getWindowsAccount())){
beanMap.put("windowsAccount", userInfo.getWindowsAccount());
}
if(Boolean.isTrue(details.getEmployeeNumber())){
beanMap.put("employeeNumber", userInfo.getEmployeeNumber());
}
if(Boolean.isTrue(details.getDepartmentId())){
beanMap.put("departmentId", userInfo.getDepartmentId());
}
if(Boolean.isTrue(details.getDepartment())){
beanMap.put("department", userInfo.getDepartment());
}
if(details.getUserPropertys().indexOf("uid")>-1){
beanMap.put("uid",userInfo.getId());
}
if(details.getUserPropertys().indexOf("username")>-1){
beanMap.put("username",userInfo.getUsername());
}
if(details.getUserPropertys().indexOf("email")>-1){
beanMap.put("email",userInfo.getEmail());
}
if(details.getUserPropertys().indexOf("windowsAccount")>-1){
beanMap.put("windowsAccount",userInfo.getWindowsAccount());
}
if(details.getUserPropertys().indexOf("employeeNumber")>-1){
beanMap.put("employeeNumber",userInfo.getEmployeeNumber());
}
if(details.getUserPropertys().indexOf("department")>-1){
beanMap.put("department",userInfo.getDepartment());
}
if(details.getUserPropertys().indexOf("departmentId")>-1){
beanMap.put("departmentId",userInfo.getDepartmentId());
}
beanMap.put("displayName", userInfo.getDisplayName());
......
......@@ -20,7 +20,6 @@ package org.maxkey.authz.token.endpoint.adapter;
import java.util.Date;
import org.maxkey.authz.endpoint.adapter.AbstractAuthorizeAdapter;
import org.maxkey.constants.Boolean;
import org.maxkey.domain.UserInfo;
import org.maxkey.domain.apps.AppsTokenBasedDetails;
import org.maxkey.util.DateUtils;
......@@ -36,19 +35,22 @@ public class TokenBasedSimpleAdapter extends AbstractAuthorizeAdapter {
String tokenUsername="";
if(Boolean.isTrue(details.getUid())){
if(details.getUserPropertys().indexOf("uid")>-1){
tokenUsername=userInfo.getId();
}else if(Boolean.isTrue(details.getUsername())){
}else if(details.getUserPropertys().indexOf("username")>-1){
tokenUsername= userInfo.getUsername();
}else if(Boolean.isTrue(details.getEmail())){
}else if(details.getUserPropertys().indexOf("email")>-1){
tokenUsername=userInfo.getEmail();
}else if(Boolean.isTrue(details.getWindowsAccount())){
}else if(details.getUserPropertys().indexOf("windowsAccount")>-1){
tokenUsername= userInfo.getWindowsAccount();
}else if(Boolean.isTrue(details.getEmployeeNumber())){
}else if(details.getUserPropertys().indexOf("employeeNumber")>-1){
tokenUsername=userInfo.getEmployeeNumber();
}else if(Boolean.isTrue(details.getDepartmentId())){
}else if(details.getUserPropertys().indexOf("department")>-1){
tokenUsername= userInfo.getDepartmentId();
}
}else if(details.getUserPropertys().indexOf("departmentId")>-1){
tokenUsername= userInfo.getDepartment();
}
/*
* use UTC date time format
......
......@@ -52,6 +52,7 @@ public class TokenBasedDetailsController extends BaseAppContorller {
tokenBasedDetails.setProtocol(ConstantsProtocols.TOKENBASED);
tokenBasedDetails.setSecret(ReciprocalUtils.generateKey(ReciprocalUtils.Algorithm.AES));
tokenBasedDetails.setAlgorithmKey(tokenBasedDetails.getSecret());
tokenBasedDetails.setUserPropertys("userPropertys");
modelAndView.addObject("model",tokenBasedDetails);
return modelAndView;
}
......
......@@ -165,7 +165,7 @@ userinfo.employeeNumber=\u5458\u5DE5\u7F16\u53F7
userinfo.windowsAccount=AD\u57DF\u8D26\u53F7
userinfo.organization=\u6240\u5C5E\u673A\u6784
userinfo.division=\u5206\u652F\u673A\u6784
userinfo.department=\u90E8\u95E8
userinfo.department=\u90E8\u95E8\u540D\u79F0
userinfo.departmentId=\u90E8\u95E8\u7F16\u53F7
userinfo.costCenter=\u6210\u672C\u4E2D\u5FC3
userinfo.jobTitle=\u804C\u4F4D
......
......@@ -165,7 +165,7 @@ userinfo.employeeNumber=\u5458\u5DE5\u7F16\u53F7
userinfo.windowsAccount=AD\u57DF\u8D26\u53F7
userinfo.organization=\u6240\u5C5E\u673A\u6784
userinfo.division=\u5206\u652F\u673A\u6784
userinfo.department=\u90E8\u95E8
userinfo.department=\u90E8\u95E8\u540D\u79F0
userinfo.departmentId=\u90E8\u95E8\u7F16\u53F7
userinfo.costCenter=\u6210\u672C\u4E2D\u5FC3
userinfo.jobTitle=\u804C\u4F4D
......
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')) :
typeof define === 'function' && define.amd ? define(['jquery'], factory) :
(global = global || self, factory(global.jQuery));
}(this, function ($) { 'use strict';
$ = $ && $.hasOwnProperty('default') ? $['default'] : $;
/**
* Multiple Select en-US translation
* Author: Zhixin Wen<wenzhixin2010@gmail.com>
*/
$.fn.multipleSelect.locales['en-US'] = {
formatSelectAll: function formatSelectAll() {
return '[Select all]';
},
formatAllSelected: function formatAllSelected() {
return 'All selected';
},
formatCountSelected: function formatCountSelected(count, total) {
return count + ' of ' + total + ' selected';
},
formatNoMatchesFound: function formatNoMatchesFound() {
return 'No matches found';
}
};
$.extend($.fn.multipleSelect.defaults, $.fn.multipleSelect.locales['en-US']);
}));
/**
* multiple-select - Multiple select is a jQuery plugin to select multiple elements with checkboxes :).
*
* @version v1.5.2
* @homepage http://multiple-select.wenzhixin.net.cn
* @author wenzhixin <wenzhixin2010@gmail.com> (http://wenzhixin.net.cn/)
* @license MIT
*/
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],t):t((e=e||self).jQuery)}(this,(function(e){"use strict";(e=e&&e.hasOwnProperty("default")?e.default:e).fn.multipleSelect.locales["en-US"]={formatSelectAll:function(){return"[Select all]"},formatAllSelected:function(){return"All selected"},formatCountSelected:function(e,t){return e+" of "+t+" selected"},formatNoMatchesFound:function(){return"No matches found"}},e.extend(e.fn.multipleSelect.defaults,e.fn.multipleSelect.locales["en-US"])}));
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')) :
typeof define === 'function' && define.amd ? define(['jquery'], factory) :
(global = global || self, factory(global.jQuery));
}(this, function ($) { 'use strict';
$ = $ && $.hasOwnProperty('default') ? $['default'] : $;
/**
* Multiple Select en-US translation
* Author: Zhixin Wen<wenzhixin2010@gmail.com>
*/
$.fn.multipleSelect.locales['en-US'] = {
formatSelectAll: function formatSelectAll() {
return '[Select all]';
},
formatAllSelected: function formatAllSelected() {
return 'All selected';
},
formatCountSelected: function formatCountSelected(count, total) {
return count + ' of ' + total + ' selected';
},
formatNoMatchesFound: function formatNoMatchesFound() {
return 'No matches found';
}
};
$.extend($.fn.multipleSelect.defaults, $.fn.multipleSelect.locales['en-US']);
}));
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')) :
typeof define === 'function' && define.amd ? define(['jquery'], factory) :
(global = global || self, factory(global.jQuery));
}(this, function ($) { 'use strict';
$ = $ && $.hasOwnProperty('default') ? $['default'] : $;
/**
* Multiple Select es-ES translation
* Author: Zhixin Wen<wenzhixin2010@gmail.com>
*/
$.fn.multipleSelect.locales['es-ES'] = {
formatSelectAll: function formatSelectAll() {
return '[Seleccionar todo]';
},
formatAllSelected: function formatAllSelected() {
return 'Todos seleccionados';
},
formatCountSelected: function formatCountSelected(count, total) {
return count + ' de ' + total + ' seleccionado';
},
formatNoMatchesFound: function formatNoMatchesFound() {
return 'No se encontraron coincidencias';
}
};
$.extend($.fn.multipleSelect.defaults, $.fn.multipleSelect.locales['es-ES']);
}));
/**
* multiple-select - Multiple select is a jQuery plugin to select multiple elements with checkboxes :).
*
* @version v1.5.2
* @homepage http://multiple-select.wenzhixin.net.cn
* @author wenzhixin <wenzhixin2010@gmail.com> (http://wenzhixin.net.cn/)
* @license MIT
*/
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],t):t((e=e||self).jQuery)}(this,(function(e){"use strict";(e=e&&e.hasOwnProperty("default")?e.default:e).fn.multipleSelect.locales["es-ES"]={formatSelectAll:function(){return"[Seleccionar todo]"},formatAllSelected:function(){return"Todos seleccionados"},formatCountSelected:function(e,t){return e+" de "+t+" seleccionado"},formatNoMatchesFound:function(){return"No se encontraron coincidencias"}},e.extend(e.fn.multipleSelect.defaults,e.fn.multipleSelect.locales["es-ES"])}));
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')) :
typeof define === 'function' && define.amd ? define(['jquery'], factory) :
(global = global || self, factory(global.jQuery));
}(this, function ($) { 'use strict';
$ = $ && $.hasOwnProperty('default') ? $['default'] : $;
/**
* Multiple Select it-IT translation
* Author: Giuseppe Lodi Rizzini
*/
$.fn.multipleSelect.locales['it-IT'] = {
formatSelectAll: function formatSelectAll() {
return '[Seleziona tutti]';
},
formatAllSelected: function formatAllSelected() {
return 'Tutti selezionati';
},
formatCountSelected: function formatCountSelected(count, total) {
return count + ' di ' + total + ' selezionati';
},
formatNoMatchesFound: function formatNoMatchesFound() {
return 'Nessun risultato';
}
};
$.extend($.fn.multipleSelect.defaults, $.fn.multipleSelect.locales['it-IT']);
}));
/**
* multiple-select - Multiple select is a jQuery plugin to select multiple elements with checkboxes :).
*
* @version v1.5.2
* @homepage http://multiple-select.wenzhixin.net.cn
* @author wenzhixin <wenzhixin2010@gmail.com> (http://wenzhixin.net.cn/)
* @license MIT
*/
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],t):t((e=e||self).jQuery)}(this,(function(e){"use strict";(e=e&&e.hasOwnProperty("default")?e.default:e).fn.multipleSelect.locales["it-IT"]={formatSelectAll:function(){return"[Seleziona tutti]"},formatAllSelected:function(){return"Tutti selezionati"},formatCountSelected:function(e,t){return e+" di "+t+" selezionati"},formatNoMatchesFound:function(){return"Nessun risultato"}},e.extend(e.fn.multipleSelect.defaults,e.fn.multipleSelect.locales["it-IT"])}));
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')) :
typeof define === 'function' && define.amd ? define(['jquery'], factory) :
(global = global || self, factory(global.jQuery));
}(this, function ($) { 'use strict';
$ = $ && $.hasOwnProperty('default') ? $['default'] : $;
/**
* Multiple Select zh-CN translation
* Author: Zhixin Wen<wenzhixin2010@gmail.com>
*/
$.fn.multipleSelect.locales['zh-CN'] = {
formatSelectAll: function formatSelectAll() {
return '[全选]';
},
formatAllSelected: function formatAllSelected() {
return '已选择所有记录';
},
formatCountSelected: function formatCountSelected(count, total) {
return '已从' + total + '条记录中选择' + count + '';
},
formatNoMatchesFound: function formatNoMatchesFound() {
return '没有找到记录';
}
};
$.extend($.fn.multipleSelect.defaults, $.fn.multipleSelect.locales['zh-CN']);
}));
/**
* multiple-select - Multiple select is a jQuery plugin to select multiple elements with checkboxes :).
*
* @version v1.5.2
* @homepage http://multiple-select.wenzhixin.net.cn
* @author wenzhixin <wenzhixin2010@gmail.com> (http://wenzhixin.net.cn/)
* @license MIT
*/
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],t):t((e=e||self).jQuery)}(this,(function(e){"use strict";(e=e&&e.hasOwnProperty("default")?e.default:e).fn.multipleSelect.locales["zh-CN"]={formatSelectAll:function(){return"[全选]"},formatAllSelected:function(){return"已选择所有记录"},formatCountSelected:function(e,t){return"已从"+t+"条记录中选择"+e+""},formatNoMatchesFound:function(){return"没有找到记录"}},e.extend(e.fn.multipleSelect.defaults,e.fn.multipleSelect.locales["zh-CN"])}));
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')) :
typeof define === 'function' && define.amd ? define(['jquery'], factory) :
(global = global || self, factory(global.jQuery));
}(this, function ($) { 'use strict';
$ = $ && $.hasOwnProperty('default') ? $['default'] : $;
/**
* Multiple Select zh-TW translation
* Author: Zhixin Wen<wenzhixin2010@gmail.com>
*/
$.fn.multipleSelect.locales['zh-TW'] = {
formatSelectAll: function formatSelectAll() {
return '[全選]';
},
formatAllSelected: function formatAllSelected() {
return '已選擇所有記錄';
},
formatCountSelected: function formatCountSelected(count, total) {
return '已從' + total + '條記錄中選擇' + count + '';
},
formatNoMatchesFound: function formatNoMatchesFound() {
return '沒有找到記錄';
}
};
$.extend($.fn.multipleSelect.defaults, $.fn.multipleSelect.locales['zh-TW']);
}));
/**
* multiple-select - Multiple select is a jQuery plugin to select multiple elements with checkboxes :).
*
* @version v1.5.2
* @homepage http://multiple-select.wenzhixin.net.cn
* @author wenzhixin <wenzhixin2010@gmail.com> (http://wenzhixin.net.cn/)
* @license MIT
*/
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],t):t((e=e||self).jQuery)}(this,(function(e){"use strict";(e=e&&e.hasOwnProperty("default")?e.default:e).fn.multipleSelect.locales["zh-TW"]={formatSelectAll:function(){return"[全選]"},formatAllSelected:function(){return"已選擇所有記錄"},formatCountSelected:function(e,t){return"已從"+t+"條記錄中選擇"+e+""},formatNoMatchesFound:function(){return"沒有找到記錄"}},e.extend(e.fn.multipleSelect.defaults,e.fn.multipleSelect.locales["zh-TW"])}));
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')) :
typeof define === 'function' && define.amd ? define(['jquery'], factory) :
(global = global || self, factory(global.jQuery));
}(this, function ($) { 'use strict';
$ = $ && $.hasOwnProperty('default') ? $['default'] : $;
/**
* Multiple Select zh-CN translation
* Author: Zhixin Wen<wenzhixin2010@gmail.com>
*/
$.fn.multipleSelect.locales['zh-CN'] = {
formatSelectAll: function formatSelectAll() {
return '[全选]';
},
formatAllSelected: function formatAllSelected() {
return '已选择所有记录';
},
formatCountSelected: function formatCountSelected(count, total) {
return '已从' + total + '条记录中选择' + count + '';
},
formatNoMatchesFound: function formatNoMatchesFound() {
return '没有找到记录';
}
};
$.extend($.fn.multipleSelect.defaults, $.fn.multipleSelect.locales['zh-CN']);
}));
/**
* multiple-select - Multiple select is a jQuery plugin to select multiple elements with checkboxes :).
*
* @version v1.5.2
* @homepage http://multiple-select.wenzhixin.net.cn
* @author wenzhixin <wenzhixin2010@gmail.com> (http://wenzhixin.net.cn/)
* @license MIT
*/
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],t):t((e=e||self).jQuery)}(this,(function(e){"use strict";(e=e&&e.hasOwnProperty("default")?e.default:e).fn.multipleSelect.locales["en-US"]={formatSelectAll:function(){return"[Select all]"},formatAllSelected:function(){return"All selected"},formatCountSelected:function(e,t){return e+" of "+t+" selected"},formatNoMatchesFound:function(){return"No matches found"}},e.extend(e.fn.multipleSelect.defaults,e.fn.multipleSelect.locales["en-US"]),e.fn.multipleSelect.locales["es-ES"]={formatSelectAll:function(){return"[Seleccionar todo]"},formatAllSelected:function(){return"Todos seleccionados"},formatCountSelected:function(e,t){return e+" de "+t+" seleccionado"},formatNoMatchesFound:function(){return"No se encontraron coincidencias"}},e.extend(e.fn.multipleSelect.defaults,e.fn.multipleSelect.locales["es-ES"]),e.fn.multipleSelect.locales["it-IT"]={formatSelectAll:function(){return"[Seleziona tutti]"},formatAllSelected:function(){return"Tutti selezionati"},formatCountSelected:function(e,t){return e+" di "+t+" selezionati"},formatNoMatchesFound:function(){return"Nessun risultato"}},e.extend(e.fn.multipleSelect.defaults,e.fn.multipleSelect.locales["it-IT"]),e.fn.multipleSelect.locales["zh-CN"]={formatSelectAll:function(){return"[全选]"},formatAllSelected:function(){return"已选择所有记录"},formatCountSelected:function(e,t){return"已从"+t+"条记录中选择"+e+""},formatNoMatchesFound:function(){return"没有找到记录"}},e.extend(e.fn.multipleSelect.defaults,e.fn.multipleSelect.locales["zh-CN"]),e.fn.multipleSelect.locales["zh-TW"]={formatSelectAll:function(){return"[全選]"},formatAllSelected:function(){return"已選擇所有記錄"},formatCountSelected:function(e,t){return"已從"+t+"條記錄中選擇"+e+""},formatNoMatchesFound:function(){return"沒有找到記錄"}},e.extend(e.fn.multipleSelect.defaults,e.fn.multipleSelect.locales["zh-TW"])}));
/**
* multiple-select - Multiple select is a jQuery plugin to select multiple elements with checkboxes :).
*
* @version v1.5.2
* @homepage http://multiple-select.wenzhixin.net.cn
* @author wenzhixin <wenzhixin2010@gmail.com> (http://wenzhixin.net.cn/)
* @license MIT
*/
@charset "UTF-8";.ms-offscreen{clip:rect(0 0 0 0)!important;width:1px!important;height:1px!important;border:0!important;margin:0!important;padding:0!important;overflow:hidden!important;position:absolute!important;outline:0!important;left:auto!important;top:auto!important}.ms-parent{display:inline-block;position:relative;vertical-align:middle}.ms-choice{display:block;width:100%;height:26px;padding:0;overflow:hidden;cursor:pointer;border:1px solid #aaa;text-align:left;white-space:nowrap;line-height:26px;color:#444;text-decoration:none;border-radius:4px;background-color:#fff}.ms-choice.disabled{background-color:#f4f4f4;background-image:none;border:1px solid #ddd;cursor:default}.ms-choice>span{position:absolute;top:0;left:0;right:20px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;padding-left:8px}.ms-choice>span.placeholder{color:#999}.ms-choice>div.icon-close{position:absolute;top:0;right:16px;height:100%;width:16px}.ms-choice>div.icon-close:before{content:'×';color:#888;font-weight:bold;position:absolute;top:50%;margin-top:-14px}.ms-choice>div.icon-close:hover:before{color:#333}.ms-choice>div.icon-caret{position:absolute;width:0;height:0;top:50%;right:8px;margin-top:-2px;border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px}.ms-choice>div.icon-caret.open{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.ms-drop{width:auto;min-width:100%;overflow:hidden;display:none;margin-top:-1px;padding:0;position:absolute;z-index:1000;background:#fff;color:#000;border:1px solid #aaa;border-radius:4px}.ms-drop.bottom{top:100%;box-shadow:0 4px 5px rgba(0,0,0,0.15)}.ms-drop.top{bottom:100%;box-shadow:0 -4px 5px rgba(0,0,0,0.15)}.ms-search{display:inline-block;margin:0;min-height:26px;padding:2px;position:relative;white-space:nowrap;width:100%;z-index:10000;box-sizing:border-box}.ms-search input{width:100%;height:auto!important;min-height:24px;padding:0 5px;margin:0;outline:0;font-family:sans-serif;border:1px solid #aaa;border-radius:5px;box-shadow:none}.ms-drop ul{overflow:auto;margin:0;padding:0}.ms-drop ul>li{list-style:none;display:list-item;background-image:none;position:static;padding:.25rem 8px}.ms-drop ul>li .disabled{font-weight:normal!important;opacity:.35;filter:Alpha(Opacity=35);cursor:default}.ms-drop ul>li.multiple{display:block;float:left}.ms-drop ul>li.group{clear:both}.ms-drop ul>li.multiple label{width:100%;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ms-drop ul>li label{position:relative;padding-left:1.25rem;margin-bottom:0;font-weight:normal;display:block;white-space:nowrap;cursor:pointer}.ms-drop ul>li label.optgroup{font-weight:bold}.ms-drop ul>li.hide-radio{padding:0}.ms-drop ul>li.hide-radio:focus,.ms-drop ul>li.hide-radio:hover{background-color:#f8f9fa}.ms-drop ul>li.hide-radio.selected{color:#fff;background-color:#007bff}.ms-drop ul>li.hide-radio label{margin-bottom:0;padding:5px 8px}.ms-drop ul>li.hide-radio input{display:none}.ms-drop ul>li.option-level-1 label{padding-left:28px}.ms-drop input[type="radio"],.ms-drop input[type="checkbox"]{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.ms-drop .ms-no-results{display:none}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册