123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483 |
- /*!
- * 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);
|