mirror of
https://gitee.com/dotnetchina/OpenAuth.Net.git
synced 2025-05-10 23:58:02 +08:00
483 lines
18 KiB
JavaScript
483 lines
18 KiB
JavaScript
/*!
|
||
* B-JUI v1.2 (http://b-jui.com)
|
||
* Git@OSC (http://git.oschina.net/xknaan/B-JUI)
|
||
* Copyright 2014 K'naan (xknaan@163.com).
|
||
* Licensed under Apache (http://www.apache.org/licenses/LICENSE-2.0)
|
||
*/
|
||
|
||
/* ========================================================================
|
||
* B-JUI: bjui-extends.js v1.2
|
||
* @author K'naan (xknaan@163.com)
|
||
* -- Modified from dwz.core.js (author:ZhangHuihua@msn.com)
|
||
* http://git.oschina.net/xknaan/B-JUI/blob/master/BJUI/js/bjui-extends.js
|
||
* ========================================================================
|
||
* Copyright 2014 K'naan.
|
||
* Licensed under Apache (http://www.apache.org/licenses/LICENSE-2.0)
|
||
* ======================================================================== */
|
||
|
||
+function ($) {
|
||
'use strict';
|
||
|
||
$.fn.extend({
|
||
/**
|
||
* @param {Object} op: {type:GET/POST, url:ajax请求地址, data:ajax请求参数列表, callback:回调函数 }
|
||
*/
|
||
ajaxUrl: function(op) {
|
||
var $this = $(this)
|
||
|
||
$this.trigger(BJUI.eventType.beforeAjaxLoad)
|
||
|
||
if (op.loadingmask) {
|
||
$this.trigger(BJUI.eventType.ajaxStatus)
|
||
}
|
||
|
||
$.ajax({
|
||
type : op.type || 'GET',
|
||
url : op.url,
|
||
data : op.data || {},
|
||
cache : false,
|
||
dataType : 'html',
|
||
timeout : BJUI.ajaxTimeout,
|
||
success : function(response) {
|
||
var json = response.toJson(), $ajaxMask = $this.find('> .bjui-ajax-mask')
|
||
|
||
if (!json[BJUI.keys.statusCode]) {
|
||
$this.empty().html(response).append($ajaxMask).initui()
|
||
if ($.isFunction(op.callback)) op.callback(response)
|
||
} else {
|
||
if (json[BJUI.keys.statusCode] == BJUI.statusCode.error) {
|
||
if (json[BJUI.keys.message]) $this.alertmsg('error', json[BJUI.keys.message])
|
||
if (!$this.closest('.bjui-layout').length) {
|
||
if ($this.closest('.navtab-panel').length) $this.navtab('closeCurrentTab')
|
||
else $this.dialog('closeCurrent')
|
||
}
|
||
} else if (json[BJUI.keys.statusCode] == BJUI.statusCode.timeout) {
|
||
if ($this.closest('.bjui-dialog').length) $this.dialog('closeCurrent')
|
||
if ($this.closest('.navtab-panel').length) $this.navtab('closeCurrentTab')
|
||
|
||
$('body').alertmsg('info', (json[BJUI.keys.message] || BJUI.regional.sessiontimeout))
|
||
BJUI.loadLogin()
|
||
}
|
||
$ajaxMask.fadeOut('normal', function() {
|
||
$(this).remove()
|
||
})
|
||
}
|
||
},
|
||
error : function(xhr, ajaxOptions, thrownError) {
|
||
$this.bjuiajax('ajaxError', xhr, ajaxOptions, thrownError)
|
||
if (!$this.closest('.bjui-layout').length) {
|
||
if ($this.closest('.navtab-panel').length) $this.navtab('closeCurrentTab')
|
||
else $this.dialog('closeCurrent')
|
||
}
|
||
$this.trigger('bjui.ajaxError')
|
||
},
|
||
statusCode : {
|
||
503: function(xhr, ajaxOptions, thrownError) {
|
||
$this.alertmsg('error', FRAG.statusCode_503.replace('#statusCode_503#', BJUI.regional.statusCode_503) || thrownError)
|
||
}
|
||
}
|
||
})
|
||
},
|
||
loadUrl: function(url,data,callback) {
|
||
$(this).ajaxUrl({url:url, data:data, callback:callback})
|
||
},
|
||
doAjax: function(op) {
|
||
var $this = $(this), $target, $ajaxMask
|
||
|
||
if (!op.url) {
|
||
BJUI.debug('The ajax url is undefined!')
|
||
return
|
||
}
|
||
if (!op.callback) {
|
||
BJUI.debug('The ajax callback is undefined!')
|
||
return
|
||
} else {
|
||
op.callback = op.callback.toFunc()
|
||
}
|
||
if (op.loadingmask) {
|
||
$target = $this.getPageTarget()
|
||
$target.trigger(BJUI.eventType.ajaxStatus)
|
||
$ajaxMask = $target.find('> .bjui-ajax-mask')
|
||
}
|
||
if (!op.type) op.type = 'POST'
|
||
if (!op.dataType) op.dataType = 'json'
|
||
if (!op.cache) op.cache = false
|
||
op.timeout = BJUI.ajaxTimeout
|
||
op.success = function(response) {
|
||
if ($ajaxMask) {
|
||
if (op.callback) {
|
||
$.when(op.callback(response)).done(function() {
|
||
$target.trigger('bjui.ajaxStop')
|
||
})
|
||
} else {
|
||
$target.trigger('bjui.ajaxStop')
|
||
}
|
||
} else {
|
||
op.callback(response)
|
||
}
|
||
}
|
||
op.error = op.error || function(xhr, ajaxOptions, thrownError) {
|
||
$this.bjuiajax('ajaxError', xhr, ajaxOptions, thrownError)
|
||
if ($ajaxMask) {
|
||
$target.trigger('bjui.ajaxError')
|
||
}
|
||
}
|
||
|
||
$.ajax(op)
|
||
},
|
||
getPageTarget: function() {
|
||
var $target
|
||
|
||
if (this.closest('.bjui-layout').length) $target = this.closest('.bjui-layout')
|
||
else if (this.closest('.navtab-panel').length) $target = $.CurrentNavtab
|
||
else $target = $.CurrentDialog
|
||
|
||
return $target
|
||
},
|
||
resizePageH: function() {
|
||
return this.each(function() {
|
||
if ($(this).closest('.tab-content').length) return
|
||
|
||
var $box = $(this),
|
||
$pageHeader = $box.find('> .bjui-pageHeader'),
|
||
$pageContent = $box.find('> .bjui-pageContent'),
|
||
$pageFooter = $box.find('> .bjui-pageFooter'),
|
||
headH = $pageHeader.outerHeight() || 0,
|
||
footH = $pageFooter.outerHeight() || 0
|
||
|
||
if ($box.hasClass('navtabPage') && $box.is(':hidden')) {
|
||
$box.show()
|
||
headH = $pageHeader.outerHeight() || 0
|
||
footH = $pageFooter.outerHeight() || 0
|
||
$box.hide()
|
||
}
|
||
if ($pageFooter.css('bottom')) footH += parseInt($pageFooter.css('bottom')) || 0
|
||
if (footH == 0 && $box.hasClass('dialogContent')) footH = 5
|
||
$pageContent.css({top:headH, bottom:footH})
|
||
})
|
||
},
|
||
getMaxIndexObj: function($elements) {
|
||
var zIndex = 0, index = 0
|
||
|
||
$elements.each(function(i) {
|
||
var newZIndex = parseInt($(this).css('zIndex')) || 1
|
||
|
||
if (zIndex < newZIndex) {
|
||
zIndex = newZIndex
|
||
index = i
|
||
}
|
||
})
|
||
|
||
return $elements.eq(index)
|
||
},
|
||
/**
|
||
* 将表单数据转成JSON对象 用法:$(form).serializeJson() Author: K'naan
|
||
*/
|
||
serializeJson: function () {
|
||
var o = {}
|
||
var a = this.serializeArray()
|
||
|
||
$.each(a, function () {
|
||
if (o[this.name] !== undefined) {
|
||
if (!o[this.name].push) {
|
||
o[this.name] = [o[this.name]]
|
||
}
|
||
o[this.name].push(this.value || '')
|
||
} else {
|
||
o[this.name] = this.value || ''
|
||
}
|
||
})
|
||
|
||
return o
|
||
},
|
||
isTag: function(tn) {
|
||
if (!tn) return false
|
||
if (!$(this).prop('tagName')) return false
|
||
return $(this)[0].tagName.toLowerCase() == tn ? true : false
|
||
},
|
||
/**
|
||
* 判断当前元素是否已经绑定某个事件
|
||
* @param {Object} type
|
||
*/
|
||
isBind: function(type) {
|
||
var _events = $(this).data('events')
|
||
return _events && type && _events[type]
|
||
},
|
||
/**
|
||
* 输出firebug日志
|
||
* @param {Object} msg
|
||
*/
|
||
log: function(msg) {
|
||
return this.each(function() {
|
||
if (console) console.log('%s: %o', msg, this)
|
||
})
|
||
}
|
||
})
|
||
|
||
/**
|
||
* 扩展String方法
|
||
*/
|
||
$.extend(String.prototype, {
|
||
isPositiveInteger: function() {
|
||
return (new RegExp(/^[1-9]\d*$/).test(this))
|
||
},
|
||
isInteger: function() {
|
||
return (new RegExp(/^\d+$/).test(this))
|
||
},
|
||
isNumber: function() {
|
||
return (new RegExp(/^([-]{0,1}(\d+)[\.]+(\d+))|([-]{0,1}(\d+))$/).test(this))
|
||
},
|
||
includeChinese: function() {
|
||
return (new RegExp(/[\u4E00-\u9FA5]/).test(this))
|
||
},
|
||
trim: function() {
|
||
return this.replace(/(^\s*)|(\s*$)|\r|\n/g, '')
|
||
},
|
||
startsWith: function (pattern) {
|
||
return this.indexOf(pattern) === 0
|
||
},
|
||
endsWith: function(pattern) {
|
||
var d = this.length - pattern.length
|
||
return d >= 0 && this.lastIndexOf(pattern) === d
|
||
},
|
||
replaceSuffix: function(index) {
|
||
return this.replace(/\[[0-9]+\]/,'['+index+']').replace('#index#',index)
|
||
},
|
||
replaceSuffix2: function(index) {
|
||
return this.replace(/\-(i)([0-9]+)$/, '-i'+ index).replace('#index#', index)
|
||
},
|
||
trans: function() {
|
||
return this.replace(/</g, '<').replace(/>/g,'>').replace(/"/g, '"')
|
||
},
|
||
encodeTXT: function() {
|
||
return (this).replaceAll('&', '&').replaceAll('<','<').replaceAll('>', '>').replaceAll(' ', ' ')
|
||
},
|
||
replaceAll: function(os, ns) {
|
||
return this.replace(new RegExp(os,'gm'), ns)
|
||
},
|
||
/*替换占位符为对应选择器的值*/ //{^(.|\#)[A-Za-z0-9_-\s]*}
|
||
replacePlh: function($box) {
|
||
$box = $box || $(document)
|
||
return this.replace(/{\/?[^}]*}/g, function($1) {
|
||
var $input = $box.find($1.replace(/[{}]+/g, ''))
|
||
|
||
return $input && $input.val() ? $input.val() : $1
|
||
})
|
||
},
|
||
replaceMsg: function(holder) {
|
||
return this.replace(new RegExp('({.*})', 'g'), holder)
|
||
},
|
||
replaceTm: function($data) {
|
||
if (!$data) return this
|
||
|
||
return this.replace(RegExp('({[A-Za-z_]+[A-Za-z0-9_-]*})','g'), function($1) {
|
||
return $data[$1.replace(/[{}]+/g, '')]
|
||
})
|
||
},
|
||
replaceTmById: function(_box) {
|
||
var $parent = _box || $(document)
|
||
|
||
return this.replace(RegExp('({[A-Za-z_]+[A-Za-z0-9_-]*})','g'), function($1) {
|
||
var $input = $parent.find('#'+ $1.replace(/[{}]+/g, ''))
|
||
return $input.val() ? $input.val() : $1
|
||
})
|
||
},
|
||
isFinishedTm: function() {
|
||
return !(new RegExp('{\/?[^}]*}').test(this))
|
||
},
|
||
skipChar: function(ch) {
|
||
if (!this || this.length===0) return ''
|
||
if (this.charAt(0)===ch) return this.substring(1).skipChar(ch)
|
||
return this
|
||
},
|
||
isValidPwd: function() {
|
||
return (new RegExp(/^([_]|[a-zA-Z0-9]){6,32}$/).test(this))
|
||
},
|
||
isValidMail: function() {
|
||
return(new RegExp(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/).test(this.trim()))
|
||
},
|
||
isSpaces: function() {
|
||
for (var i = 0; i < this.length; i += 1) {
|
||
var ch = this.charAt(i)
|
||
|
||
if (ch!=' '&& ch!='\n' && ch!='\t' && ch!='\r') return false
|
||
}
|
||
return true
|
||
},
|
||
isPhone:function() {
|
||
return (new RegExp(/(^([0-9]{3,4}[-])?\d{3,8}(-\d{1,6})?$)|(^\([0-9]{3,4}\)\d{3,8}(\(\d{1,6}\))?$)|(^\d{3,8}$)/).test(this))
|
||
},
|
||
isUrl:function() {
|
||
return (new RegExp(/^[a-zA-z]+:\/\/([a-zA-Z0-9\-\.]+)([-\w .\/?%&=:]*)$/).test(this))
|
||
},
|
||
isExternalUrl:function() {
|
||
return this.isUrl() && this.indexOf('://'+ document.domain) == -1
|
||
},
|
||
toBool: function() {
|
||
return (this.toLowerCase() === 'true') ? true : false
|
||
},
|
||
toJson: function() {
|
||
var json = this
|
||
|
||
try {
|
||
if (typeof json == 'object') json = json.toString()
|
||
if (!json.trim().match("^\{(.+:.+,*){1,}\}$")) return this
|
||
else return JSON.parse(this)
|
||
} catch (e) {
|
||
return this
|
||
}
|
||
},
|
||
toObj: function() {
|
||
var obj = null
|
||
|
||
try {
|
||
obj = (new Function('return '+ this))()
|
||
} catch (e) {
|
||
obj = this
|
||
BJUI.debug('String toObj:Parse "String" to "Object" error! Your str is: '+ this)
|
||
}
|
||
return obj
|
||
},
|
||
/**
|
||
* String to Function
|
||
* 参数(方法字符串或方法名): 'function(){...}' 或 'getName' 或 'USER.getName' 均可
|
||
* Author: K'naan
|
||
*/
|
||
toFunc: function() {
|
||
if (!this || this.length == 0) return undefined
|
||
//if ($.isFunction(this)) return this
|
||
|
||
if (this.startsWith('function')) {
|
||
return (new Function('return '+ this))()
|
||
}
|
||
|
||
var m_arr = this.split('.')
|
||
var fn = window
|
||
|
||
for (var i = 0; i < m_arr.length; i++) {
|
||
fn = fn[m_arr[i]]
|
||
}
|
||
|
||
if (typeof fn === 'function') {
|
||
return fn
|
||
}
|
||
|
||
return undefined
|
||
},
|
||
setUrlParam: function(key, value) {
|
||
var str = '', url = this
|
||
|
||
if (url.indexOf('?') != -1)
|
||
str = url.substr(url.indexOf('?') + 1)
|
||
else
|
||
return url + '?' + key + '=' + value
|
||
|
||
var returnurl = '', setparam = '', arr, modify = '0'
|
||
|
||
if (str.indexOf('&') != -1) {
|
||
arr = str.split('&')
|
||
|
||
for (var i in arr) {
|
||
if (arr[i].split('=')[0] == key) {
|
||
setparam = value
|
||
modify = '1'
|
||
} else {
|
||
setparam = arr[i].split('=')[1]
|
||
}
|
||
returnurl = returnurl + arr[i].split('=')[0] + '=' + setparam + '&'
|
||
}
|
||
|
||
returnurl = returnurl.substr(0, returnurl.length - 1)
|
||
if (modify == '0') {
|
||
if (returnurl == str)
|
||
returnurl = returnurl + '&' + key + '=' + value
|
||
}
|
||
} else {
|
||
if (str.indexOf('=') != -1) {
|
||
arr = str.split('=')
|
||
if (arr[0] == key) {
|
||
setparam = value
|
||
modify = '1'
|
||
} else {
|
||
setparam = arr[1]
|
||
}
|
||
returnurl = arr[0] + '=' + setparam
|
||
if (modify == '0') {
|
||
if (returnurl == str)
|
||
returnurl = returnurl + '&' + key + '=' + value
|
||
}
|
||
} else {
|
||
returnurl = key + '=' + value
|
||
}
|
||
}
|
||
return url.substr(0, url.indexOf('?')) + '?' + returnurl
|
||
}
|
||
})
|
||
|
||
/* Function */
|
||
$.extend(Function.prototype, {
|
||
//to fixed String.prototype -> toFunc
|
||
toFunc: function() {
|
||
return this
|
||
}
|
||
})
|
||
|
||
/* Array */
|
||
$.extend(Array.prototype, {
|
||
remove: function(index) {
|
||
if (index < 0) return this
|
||
else return this.slice(0, index).concat(this.slice(index + 1, this.length))
|
||
},
|
||
unique: function() {
|
||
var temp = new Array()
|
||
|
||
this.sort()
|
||
for (var i = 0; i < this.length; i++) {
|
||
if (this[i] == this[i + 1]) continue
|
||
temp[temp.length] = this[i]
|
||
}
|
||
|
||
return temp
|
||
},
|
||
myIndexOf: function(e) {
|
||
if (!this || !this.length) return -1
|
||
|
||
for (var i = 0, j; j = this[i]; i++) {
|
||
if (j == e) return i
|
||
}
|
||
|
||
return -1
|
||
},
|
||
/* serializeArray to json */
|
||
toJson: function() {
|
||
var o = {}
|
||
var a = this
|
||
|
||
$.each(a, function () {
|
||
if (o[this.name] !== undefined) {
|
||
if (!o[this.name].push) {
|
||
o[this.name] = [o[this.name]]
|
||
}
|
||
o[this.name].push(this.value || '')
|
||
} else {
|
||
o[this.name] = this.value || ''
|
||
}
|
||
})
|
||
|
||
return o
|
||
}
|
||
})
|
||
|
||
/* Global */
|
||
$.isJson = function(obj) {
|
||
var flag = true
|
||
|
||
try {
|
||
flag = $.parseJSON(obj)
|
||
} catch (e) {
|
||
return false
|
||
}
|
||
return flag ? true : false
|
||
}
|
||
|
||
}(jQuery); |