{"version":3,"file":"fd-base-pc.min.js","sources":["fd-base-pc.js"],"sourcesContent":["/**\r\n * familydoctor.com.cn base js for pc\r\n * Author: deiphi@qq.com\r\n */\r\n\r\nif (window.FD) { throw new Error('FD对象已存在'); }\r\n\r\nvar FD = {\r\n util: {\r\n /**\r\n * 判断是否是整数 \r\n * @param\t{string || number}\t\tstr\t\t字符串或数字\r\n * @return\t{boolean}\r\n * eg\r\n FD.util.isInt(3.14);\r\n */\r\n isInt: function (str) {\r\n return /^-?\\d+$/.test(str);\r\n },\r\n\r\n /**\r\n * 判断是否是数字(整数或浮点数)\r\n * @param\t{string || number}\t\tstr\t\t字符串或数字\r\n * @return\t{boolean}\r\n * eg\r\n FD.util.isNumber(3.14);\r\n */\r\n isNumber: function (str) {\r\n return /^(-?\\d+)(\\.\\d+)?$/i.test(str);\r\n },\r\n\r\n /**\r\n * 判断是否是手机(只做简单判断,以1开头后面是10位的数字)\r\n * @param\t{string || number}\t\tstr\t\t字符串或数字\r\n * @return\t{boolean}\r\n * eg\r\n FD.util.isMobile(13800138000);\r\n */\r\n isMobile: function (str) {\r\n return /^1\\d{10}$/.test(str);\r\n },\r\n\r\n /**\r\n * 判断是否是身份证号码\r\n * @param\t{string || number}\t\tstr\t\t字符串或数字\r\n * @return\t{boolean}\r\n * eg\r\n FD.util.isIdCard(123456789012345);\r\n */\r\n isIdCard: function (str) {\r\n return /(^\\d{15}$)|(^\\d{17}([0-9]|X)$)/i.test(str);\r\n },\r\n\r\n /**\r\n * 判断email\r\n * @param\t{string}\tstr\t\temail地址\r\n * @return\t{boolean}\r\n * eg\r\n FD.util.isEmail('abc@gmail.com');\r\n */\r\n isEmail: function (str) {\r\n var myReg = /^[-_A-Za-z0-9\\.]+@([_A-Za-z0-9]+\\.)+[A-Za-z0-9]{2,3}$/;\r\n if (myReg.test(str)) { return true; }\r\n return false;\r\n },\r\n\r\n /**\r\n * 为手机号做掩码\r\n * @param\t{string || number}\t\tstr\t\t字符串或数字\r\n * @return\t{string}\r\n * eg\r\n FD.util.maskMobile(13800138000); //返回:138******00\r\n */\r\n maskMobile: function (mobile) {\r\n if (!mobile) { return ''; }\r\n if (mobile.length !== 11) { return mobile; }\r\n mobile = mobile.substring(0, 3) + '******' + mobile.substring(9);\r\n return mobile;\r\n },\r\n\r\n /**\r\n * 删除字符串两端空格\r\n * @param\t{string}\t\tstr\t\t字符串\r\n * @return\t{string}\r\n * eg\r\n var newStr = FD.util.trim(str);\r\n */\r\n trim: function (str) {\r\n if (str === null || str === undefined || str === '') { return ''; }\r\n\r\n if (String.prototype.trim) {\r\n return str.trim();\r\n }\r\n\r\n return str.replace(/^\\s*((?:[\\S\\s]*\\S)?)\\s*$/, '$1');\r\n },\r\n\r\n /**\r\n * 数组去重\r\n * @param\t{Array} arr 原数组\r\n * @return\t{Array} 去重后的数组\r\n * eg\r\n var arr = [1, '1', 1, '1', 'a', 'a', 'b'];\r\n FD.util.unique(arr); // 返回:[1, '1', 'a', 'b']\r\n */\r\n unique: function (arr) {\r\n var r = [];\r\n\r\n for (var i = 0, l = arr.length; i < l; i++) {\r\n for (var j = i + 1; j < l; j++) {\r\n if (arr[i] === arr[j]) { j = ++i; }\r\n }\r\n\r\n r.push(arr[i]);\r\n }\r\n\r\n return r;\r\n },\r\n\r\n /**\r\n * 获取url参数\r\n * @param\t{string}\turl\t\t链接地址 \r\n * @param\t{string}\tname\t\tkey\r\n * @return\t{string}\tvalue\r\n * eg\r\n var val = FD.util.getQueryString(location.href, 'id');\r\n */\r\n getQueryString: function (url, name) {\r\n var reg = new RegExp('(^|\\\\?|&)' + name + '=([^&]*)(\\\\s|&|$)', 'i');\r\n var match = url.match(reg);\r\n if (match) {\r\n return decodeURIComponent(match[2].replace(/\\+/g, ' '));\r\n }\r\n return '';\r\n },\r\n\r\n /**\r\n * 格式化参数\r\n * @param\t{object}\tdata\t参数对象\r\n * @param\t{boolean}\tnoCache\t是否缓存(如果不缓存将会增加一个随机参数)\r\n * @return\t{string}\tqueryString\r\n * eg\r\n FD.util.formatParams({name: 'tom', age: 25});\r\n */\r\n formatParams: function (data, noCache) {\r\n var arr = [];\r\n\r\n if (noCache === void 0) { noCache = false; }\r\n\r\n for (var name in data) {\r\n arr.push(encodeURIComponent(name) + '=' + encodeURIComponent(data[name]));\r\n }\r\n\r\n noCache && arr.push('_random_=' + new Date().getTime());\r\n\r\n return arr.join('&');\r\n },\r\n\r\n /**\r\n * 把文本内容转换成html\r\n * @param {string} str 要转换的字符串,通常是从textarea控件获取得到\r\n * @return {string} 格式化好的html字符串\r\n */\r\n htmlEncode: function (str) {\r\n str = str.replace(/\\r\\n/g, '
');\r\n str = str.replace(/\\n/g, '
');\r\n str = str.replace(/\\r/g, '
');\r\n str = str.replace(/\\s/g, ' ');\r\n return str;\r\n },\r\n\r\n /**\r\n * 获取一个随机数\r\n * @param {number} n 最小值\r\n * @param {number} m 最大值\r\n * @return {number} 随机数\r\n */\r\n getRandom: function (n, m) {\r\n if (m === undefined) {\r\n m = n;\r\n n = 0;\r\n }\r\n\r\n return Math.round(Math.random() * (m - n) + n);\r\n }\r\n },\r\n\r\n /**\r\n\t * 异步加载图片\r\n\t * @param\t{string}\turl\t\t\t链接地址 \r\n\t * @param\t{function}\tcallback\t回调函数\r\n\t * @return\tnull\r\n\t * eg\r\n\t FD.loadImage('https://www.baidu.com/img/bdlogo.png', function(img){\r\n\t\t console.log('image width: '+ img.width + ' image height: '+ image.height);\r\n\t });\r\n\t*/\r\n loadImage: function (url, callback) {\r\n var img = new Image();\r\n img.src = url;\r\n\r\n if (img.complete) {\r\n callback(img);\r\n return;\r\n }\r\n\r\n img.onload = function () {\r\n callback(img);\r\n };\r\n },\r\n\r\n /**\r\n * 检测浏览器是否支持Fixed\r\n * eg\r\n FD.supportFixed();\r\n */\r\n supportFixed: function () {\r\n var check = function () {\r\n var outer = document.createElement('div'),\r\n inner = document.createElement('div'),\r\n result = true;\r\n\r\n outer.style.position = 'absolute';\r\n outer.style.top = '200px';\r\n inner.style.position = 'fixed';\r\n inner.style.top = '100px';\r\n outer.appendChild(inner);\r\n document.body.appendChild(outer);\r\n\r\n if (inner.getBoundingClientRect &&\r\n inner.getBoundingClientRect().top == outer.getBoundingClientRect().top) {\r\n result = false;\r\n }\r\n\r\n document.body.removeChild(outer);\r\n FD.util.supportFixed = function () { return result; };\r\n return result;\r\n };\r\n\r\n return check();\r\n },\r\n\r\n /**\r\n * 检测浏览器是否支持Transform\r\n * eg\r\n FD.supportTransform();\r\n */\r\n supportTransform: function () {\r\n var check = function () {\r\n var result = true;\r\n\r\n if (/msie/i.test(navigator.userAgent) && !('-ms-transform' in document.createElement('dummy').style)) {\r\n result = false;\r\n }\r\n\r\n FD.util.supportTransform = function () { return result; };\r\n return result;\r\n };\r\n\r\n return check();\r\n },\r\n\r\n /**\r\n\t * cookie操作\r\n\t * @param\t{string}\tsMainName\tcookie名称\r\n\t * @param\t{string}\tsSubName\tcookie名称(选填)\r\n\t * @param\t{string}\t返回的值\r\n\t * @return\tnull\r\n\t * eg\r\n\t var mycookie = FD.cookie.get('cookieName');\r\n FD.cookie.set('mykey', 'myvalue');\r\n\t*/\r\n cookie: {\r\n get: function (sMainName, sSubName) {\r\n var re = new RegExp((sSubName ? sMainName + '=(?:.*?&)*?' + sSubName + '=([^&;$]*)' : sMainName + '=([^;$]*)'), 'i');\r\n var match = re.exec(decodeURIComponent(document.cookie));\r\n return match ? match[1] : '';\r\n },\r\n set: function (cookieName, cookieValue, minutes, path, domain, secure) {\r\n var expires = new Date();\r\n expires.setTime(expires.getTime() + (minutes * 60 * 1000));\r\n document.cookie = encodeURIComponent(cookieName) + '=' + encodeURIComponent(cookieValue) +\r\n (expires ? '; expires=' + expires.toGMTString() : '') +\r\n (path ? '; path=' + path : '/') + \r\n (domain ? '; domain=' + domain : '') +\r\n (secure ? '; secure' : '');\r\n }\r\n },\r\n\r\n /**\r\n * 百度分享\r\n * @param {Element} elem 放置分享内容的DOM节点\r\n * @param\t{object}\t\toptions\t\t 配置参数\r\n * @param\t{array}\t\t\toptions.keys\t要显示分享的数组\r\n * @param\t{number}\t\toptions.size\t图标的尺寸(16px or 32px)\r\n * eg\r\n var share = document.getElementById('selector');\r\n FD.share.init(share, {keys: ['sina', 'tencent', 'wechat'], size: 32});\r\n */\r\n share: {\r\n init: function (elem, options) {\r\n if (elem.tagName !== 'DIV') { console.log('父标签必须是div元素'); }\r\n elem.innerHTML = this.getHtml(options);\r\n this.load();\r\n },\r\n _items: {\r\n sina: '',\r\n tencent: '',\r\n wechat: '',\r\n qzone: '',\r\n renren: '',\r\n douban: '',\r\n friend: '',\r\n tieba: '',\r\n qq: '',\r\n mshare: ''\r\n },\r\n getHtml: function (options) {\r\n var defaults = {\r\n keys: options && options.keys || ['sina', 'tencent', 'wechat', 'qzone', 'renren', 'douban', 'friend', 'tieba', 'qq', 'mshare'],\r\n size: 16\r\n };\r\n\r\n var buffer = '';\r\n\r\n FD.extend(defaults, options || {});\r\n\r\n buffer = '
';\r\n\r\n if (options && options.showMore !== false) {\r\n buffer += '';\r\n }\r\n\r\n for (var i = 0, len = defaults.keys.length; i < len; i++) {\r\n buffer += this._items[defaults.keys[i]];\r\n }\r\n\r\n buffer += '
';\r\n return buffer;\r\n },\r\n load: function () {\r\n // window._bd_share_config = { 'common': { 'bdSnsKey': {}, 'bdText': '', 'bdMini': '2', 'bdMiniList': false, 'bdPic': '', 'bdStyle': '0' }, 'share': [{ 'tag': 'share_16', 'bdSize': 16 }, { 'tag': 'share_32', 'bdSize': 32 }] }; with (document) 0[(getElementsByTagName('head')[0] || body).appendChild(createElement('script')).src = '//bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion=' + ~(-new Date() / 36e5)];\r\n \r\n window._bd_share_config = {\r\n common: {\r\n bdSnsKey: {},\r\n bdText: '',\r\n bdMini: '2',\r\n bdMiniList: false,\r\n bdPic: '',\r\n bdStyle: '0',\r\n },\r\n share: [\r\n { tag: 'share_16', bdSize: 16 },\r\n { tag: 'share_32', bdSize: 32 },\r\n ],\r\n };\r\n\r\n var head = document.getElementsByTagName('head')[0] || document.body;\r\n var script = document.createElement('script');\r\n script.src = '//bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion=' + ~(-new Date() / 36e5);\r\n head.appendChild(script);\r\n }\r\n },\r\n\r\n /**\r\n * 上传文件(基于iframe上传)\r\n * @param\t{string}\t\turl\t\t\t服务端处理上传的url\r\n * @param\t{node}\t\t\tfileEle\t\tinput[type=file]控件\r\n * @param\t{function}\t\tbefore\t\t上传之前回调\r\n * @param\t{function}\t\tcallback\t上传之后回调\r\n * eg\r\n file.onchange = new FD.Uploader({\r\n url: url,\r\n fileEle: file,\r\n before: function(){\r\n console.log('uploading...');\r\n //return 'abort'; //如果返回abort则停止上传\r\n },\r\n callback: function(data){\r\n console.log(data);\r\n }\r\n });\r\n */\r\n Uploader: function (options) {\r\n options.before = options.before || function () { };\r\n\r\n var upload = function () {\r\n var iframe = (/MSIE (6|7|8)/).test(navigator.userAgent) ? document.createElement('