commit caa983410d875d3b241c85415aa6f283b1a12735 Author: qiaodan <849557066@qq.com> Date: Fri Aug 23 13:37:59 2024 +0800 first commit diff --git a/.htaccess b/.htaccess new file mode 100644 index 0000000..e69de29 diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..35410ca --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +# 基于编辑器的 HTTP 客户端请求 +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/gqzt.iml b/.idea/gqzt.iml new file mode 100644 index 0000000..c956989 --- /dev/null +++ b/.idea/gqzt.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..7aadf77 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/php.xml b/.idea/php.xml new file mode 100644 index 0000000..8e445c2 --- /dev/null +++ b/.idea/php.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/admin.php b/admin.php new file mode 100644 index 0000000..bb3e648 --- /dev/null +++ b/admin.php @@ -0,0 +1,8 @@ +1则随机取所有广告中的(N-1)个进行播放 + 8、对于视频广告是否采用修正,0是不使用,1是使用,如果是1,则用户在网速慢的情况下会按设定的倒计时进行播放广告,计时结束则放正片(比较人性化),设置成0的话,则强制播放完广告才能播放正片 + 9、是否开启滚动文字广告,0是不开启,1是开启且不使用关闭按钮,2是开启并且使用关闭按钮,开启后将在加载视频的时候加载滚动文字广告 + 10、视频的调整方式 + =0是自动调整大小,意思是说大的话就变小,小的话就变大,同时保持长宽比例不变 + =1是大的化变小,小的话不变 + =2是什么也不变,就这么大 + =3是跟参考对像(pm_video的设置)参数设置的一样宽高 + 11、是否在多视频时分段加载,0不是,1是 + 12、缩放视频时是否进行平滑处理,0不是,1是 + 13、视频缓冲时间,单位:毫秒,建议不超过300 + 14、初始图片调整方式( + =0是自动调整大小,意思是说大的话就变小,小的话就变大,同时保持长宽比例不变 + =1是大的化变小,小的话不变 + =2是什么也不变,就这么大 + =3是跟pm_video参数设置的一样宽高 + 15、暂停广告调整方式( + =0是自动调整大小,意思是说大的话就变小,小的话就变大,同时保持长宽比例不变 + =1是大的化变小,小的话不变 + =2是什么也不变,就这么大 + =3是跟pm_video参数设置的一样宽 + 16、暂停广告是否使用关闭广告设置,0不使用,1使用 + 17、缓冲时是否播放广告,0是不显示,1是显示并同时隐藏掉缓冲图标和进度,2是显示并不隐藏缓冲图标 + 18、是否支持键盘空格键控制播放和暂停0不支持,1支持 + 19、是否支持键盘左右方向键控制快进快退0不支持,1支持 + 20、是否支持键盘上下方向键控制音量0不支持,1支持 + 21、播放器返回js交互函数的等级,0-2,等级越高,返回的参数越多 + 0是返回少量常用交互 + 1返回播放器在播放的时候的参数,不返回广告之类的参数 + 2返回全部参数 + 3返回全部参数,并且在参数前加上"播放器ID->",用于多播放器的监听 + 22、快进和快退的秒数 + 23、界面上图片元素加载失败重新加载次数 + 24、开启加载皮肤压缩文件包的加载进度提示 + 25、使用隐藏控制栏时显示简单进度条的功能,0是不使用,1是使用,2是只在普通状态下使用 + 26、控制栏隐藏设置(0不隐藏,1全屏时隐藏,2都隐藏 + 27、控制栏隐藏延时时间,即在鼠标离开控制栏后多少毫秒后隐藏控制栏 + 28、左右滚动时是否采用无缝,默认0采用,1是不采用 + 29、0是正常状态,1是控制栏默认隐藏,播放状态下鼠标经过播放器显示控制栏,2是一直隐藏控制栏 + 30、在播放rtmp视频时暂停后点击播放是否采用重新链接的方式,这里一共分0-2三个等级 + 31、当采用网址形式(flashvars里s=1/2时)读取视频地址时是采用默认0=get方法,1=post方式 + 32、是否启用播放按钮和暂停按钮 + 33、是否启用中间暂停按钮 + 34、是否启用静音按钮 + 35、是否启用全屏按钮 + 36、是否启用进度调节栏,0不启用,1是启用,2是只能前进(向右拖动),3是只能后退,4是只能前进但能回到第一次拖动时的位置,5是看过的地方可以随意拖动, + 37、是否启用调节音量 + 38、计算时间的间隔,毫秒 + 39、前置logo至少显示的时间,单位:毫秒 + 40、前置视频广告的默认音量 + 41、当s=3/4时加载插件是否从压缩包里加载,0不是,1是 + 42、加载风格是否采用加密方式传送,该功能普通用户不能使用 + 43、在s=1/2时,调用地址里的地址是否是相对地址(相对于调用文件),0不是,1是 + */ + pm_bg: '0x000000,100,230,180', + /*播放器整体的背景配置,请注意,这里只是一个初始化的设置,如果需要真正的改动播放器的背景和最小宽高,需要在风格文件里找到相同的参数进行更改。 + 1、整体背景颜色 + 2、背景透明度 + 3、播放器最小宽度 + 4、播放器最小高度 + 这里只是初始化时的设置,最终加载完播放器后显示的效果需要在style.swf/style.xml里设置该参数 + */ + mylogo: 'logo.swf', + /* + 视频加载前显示的logo文件,不使用设置成null,即mylogo='null'; + */ + pm_mylogo: '1,1,-100,-55', + /* + 视频加载前显示的logo文件(mylogo参数的)的位置 + 本软件所有的四个参数控制位置的方式全部都是统一的意思,如下 + 1、水平对齐方式,0是左,1是中,2是右 + 2、垂直对齐方式,0是上,1是中,2是下 + 3、水平偏移量,举例说明,如果第1个参数设置成0左对齐,第3个偏移量设置成10,就是离左边10个像素,第一个参数设置成2,偏移量如果设置的是正值就会移到播放器外面,只有设置成负值才行,设置成-1,按钮就会跑到播放器外面 + 4、垂直偏移量 + */ + logo: 'cklogo.png', + /* + 默认右上角一直显示的logo,不使用设置成null,即logo='null'; + */ + pm_logo: '2,0,-100,20', + /* + 播放器右上角的logo的位置 + 1、水平对齐方式,0是左,1是中,2是右 + 2、垂直对齐方式,0是上,1是中,2是下 + 3、水平偏移量 + 4、垂直偏移量 + 以下是播放器自带的二个插件 + */ + control_rel: 'related.swf,ckplayer/related.xml,0', + /* + 视频结束显示精彩视频的插件 + 1、视频播放结束后显示相关精彩视频的插件文件(注意,视频结束动作设置成3时(即var flashvars={e:3})有效), + 2、xml文件是调用精彩视频的示例文件,可以自定义文件类型(比如asp,php,jsp,.net只要输出的是xml格式就行),实际使用中一定要注意第二个参数的路径要正确 + 3、第三个参数是设置配置文件的编码,0是默认的utf-8,1是gbk2312 + */ + control_pv: 'Preview.swf,105,2000', + /* + 视频预览插件 + 1、插件文件名称(该插件和上面的精彩视频的插件都是放在风格压缩包里的) + 2、离进度栏的高(指的是插件的顶部离进度栏的位置) + 3、延迟时间(该处设置鼠标经过进度栏停顿多少毫秒后才显示插件) + 建议一定要设置延时时间,不然当鼠标在进度栏上划过的时候就会读取视频地址进行预览,很占资源 + */ + pm_repc: '', + /* + 视频地址替换符,该功能主要是用来做简单加密的功能,使用方法很简单,请注意,只针对f值是视频地址的时候有效,其它地方不能使用。具体的请查看http://www.ckplayer.com/manual.php?id=4#title_25 + */ + pm_spac: '|', + /* + 视频地址间隔符,这里主要是播放多段视频时使用普通调用方式或网址调用方式时使用的。默认使用|,如果视频地址里本身存在|的话需要另外设置一个间隔符,注意,即使只有一个视频也需要设置。另外在使用rtmp协议播放视频的时候,如果视频存在多级目录的话,这里要改成其它的符号,因为rtmp协议的视频地址多级的话也需要用到|隔开流地址和实例地址 + */ + pm_fpac: 'file->f', + /* + 该参数的功能是把自定义的flashvars里的变量替换成ckplayer里对应的变量,默认的参数的意思是把flashvars里的file值替换成f值,因为ckplayer里只认f值,多个替换之间用竖线隔开 + */ + pm_advtime: '2,0,-110,10,0,300,0', + /* + 前置广告倒计时文本位置,播放前置 广告时有个倒计时的显示文本框,这里是设置该文本框的位置和宽高,对齐方式的。一共7个参数,分别表示: + 1、水平对齐方式,0是左对齐,1是中间对齐,2是右对齐 + 2、垂直对齐方式,0是上对齐,1是中间对齐,2是低部对齐 + 3、水平位置偏移量 + 4、垂直位置偏移量 + 5、文字对齐方式,0是左对齐,1是中间对齐,2是右对齐,3是默认对齐 + 6、文本框宽席 + 7、文本框高度 + */ + pm_advstatus: '1,2,2,-200,-40', + /* + 前置广告静音按钮,静音按钮只在是视频广告时显示,当然也可以控制不显示 + 1、是否显示0不显示,1显示 + 2、水平对齐方式 + 3、垂直对齐方式 + 4、水平偏移量 + 5、垂直偏移量 + */ + pm_advjp: '1,1,2,2,-100,-40', + /* + 前置广告跳过广告按钮的位置 + 1、是否显示0不显示,1是显示 + 2、跳过按钮触发对象(值0/1,0是直接跳转,1是触发js:function ckadjump(){}) + 3、水平对齐方式 + 4、垂直对齐方式 + 5、水平偏移量 + 6、垂直偏移量 + */ + pm_padvc: '2,0,-10,-10', + /* + 暂停广告的关闭按钮的位置 + 1、水平对齐方式 + 2、垂直对齐方式 + 3、水平偏移量 + 4、垂直偏移量 + */ + pm_advms: '2,2,-46,-56', + /* + 滚动广告关闭按钮位置 + 1、水平对齐方式 + 2、垂直对齐方式 + 3、水平偏移量 + 4、垂直偏移量 + */ + pm_zip: '1,1,-20,-8,1,0,0', + /* + 加载皮肤压缩包时提示文字的位置 + 1、水平对齐方式,0是左对齐,1是中间对齐,2是右对齐 + 2、垂直对齐方式,0是上对齐,1是中间对齐,2是低部对齐 + 3、水平位置偏移量 + 4、垂直位置偏移量 + 5、文字对齐方式,0是左对齐,1是中间对齐,2是右对齐,3是默认对齐 + 6、文本框宽席 + 7、文本框高度 + */ + //pm_advmarquee: '1,2,50,-60,50,18,0,0x000000,50,0,20,1,15,2000', + pm_advmarquee: '1,2,50,-60,50,20,0,0x000000,50,0,20,1,30,2000', + /* + 滚动广告的控制,要使用的话需要在setup里的第9个参数设置成1 + 这里分二种情况,前六个参数是定位控制,第7个参数是设置定位方式(0:相对定位,1:绝对定位) + 第一种情况:第7个参数是0的时候,相对定位,就是播放器长宽变化的时候,控制栏也跟着变 + 1、默认1:中间对齐 + 2、上中下对齐(0是上,1是中,2是下) + 3、离左边的距离 + 4、Y轴偏移量 + 5、离右边的距离 + 6、高度 + 7、定位方式 + 第二种情况:第7个参数是1的时候,绝对定位,就是播放器长宽变化的时候,控制栏不跟着变,这种方式一般使用在控制栏大小不变的时候 + 1、左中右对齐方式(0是左,1是中间,2是右) + 2、上中下对齐(0是上,1是中,2是下) + 3、x偏移量 + 4、y偏移量 + 5、宽度 + 6、高度 + 7、定位方式 + 以上是前7个参数的作用 + 8、是文字广告的背景色 + 9、置背景色的透明度 + 10、控制滚动方向,0是水平滚动(包括左右),1是上下滚动(包括向上和向下) + 11、移动的单位时长,即移动单位像素所需要的时长,毫秒 + 12、移动的单位像素,正数同左/上,负数向右/下 + 13、是行高,这个在设置向上或向下滚动的时候有用处 + 14、控制向上或向下滚动时每次停止的时间 + */ + pm_glowfilter:'1,0x01485d, 100, 6, 3, 10, 1, 0, 0', + /*滚动文字广告是否采用发光滤镜 + 1、是否使用发光滤镜,0是不采用,1是使用 + 2、(default = 0xFF0000) — 光晕颜色,采用十六进制格式 0xRRGGBB。 默认值为 0xFF0000 + 3、(default = 100) — 颜色的 Alpha 透明度值。 有效值为 0 到 100。 例如,25 设置透明度为 25% + 4、(default = 6.0) — 水平模糊量。 有效值为 0 到 255(浮点)。 2 的乘方值(如 2、4、8、16 和 32)经过优化,呈现速度比其它值更快 + 5、(default = 6.0) — 垂直模糊量。 有效值为 0 到 255(浮点)。 2 的乘方值(如 2、4、8、16 和 32)经过优化,呈现速度比其它值更快 + 6、(default = 2) — 印记或跨页的强度。 该值越高,压印的颜色越深,而且发光与背景之间的对比度也越强。 有效值为 0 到 255 + 7、(default = 1) — 应用滤镜的次数 + 8、(default = 0) — 指定发光是否为内侧发光。 值 1 指定发光是内侧发光。 值 0 指定发光是外侧发光(对象外缘周围的发光) + 9、(default = 0) — 指定对象是否具有挖空效果。 值为 1 将使对象的填充变为透明,并显示文档的背景颜色 + */ + advmarquee: escape('{a href="http://www.ckplayer.com"}{font color="#FFFFFF" size="12"}这里可以放文字广告,播放器默认使用这里设置的广告内容,如果不想在这里使用可以清空这里的内容,如果想在页面中实时定义滚动文字广告内容,可以清空这里的内容,然后在页面中设置广告函数。{/font}{/a}'), + /* + 该处是滚动文字广告的内容,如果不想在这里设置,就把这里清空并且在页面中使用js的函数定义function ckmarqueeadv(){return '广告内容'} + */ + mainfuntion:'', + /* + 当flashvars里s=3/4时,调用的函数包名称,默认为空,调用时间轴上的函数setAppObj + */ + flashplayer:'', + /* + 当flashvars里的s=3/4时,也可以把swf文件放在这里 + */ + calljs:'ckplayer_status,ckadjump,playerstop,ckmarqueeadv', + /* + 跳过广告和播放结束时调用的js函数 + */ + myweb: escape(''), + /* + ------------------------------------------------------------------------------------------------------------------ + 以下内容部份是和插件相关的配置,请注意,自定义插件以及其配置的命名方式要注意,不要和系统的相重复,不然就会替换掉系统的相关设置,删除相关插件的话也可以同时删除相关的配置 + ------------------------------------------------------------------------------------------------------------------ + 以下内容定义自定义插件的相关配置,这里也可以自定义任何自己的插件需要配置的内容,当然,如果你某个插件不使用的话,也可以删除相关的配置 + ------------------------------------------------------------------------------------------------------------------ + */ + cpt_lights: '1', + /* + 该处定义是否使用开关灯,和right.swf插件配合作用,使用开灯效果时调用页面的js函数function closelights(){}; + */ + cpt_share: 'ckplayer/share.xml', + /* + 分享插件调用的配置文件地址 + 调用插件开始 + */ + cpt_list: ckcpt() + /* + ckcpt()是本文件最上方的定义插件的函数 + */ + } + return ck; +} +/* +html5部分开始 +以下代码是支持html5的,如果你不需要,可以删除。 +html5代码块的代码可以随意更改以适合你的应用,欢迎到论坛交流更改心得 +*/ +(function() { + var CKobject = { + _K_: function(d){return document.getElementById(d);}, + _T_: false, + _M_: false, + _G_: false, + _Y_: false, + _I_: null, + _J_: 0, + _O_: {}, + uaMatch:function(u,rMsie,rFirefox,rOpera,rChrome,rSafari,rSafari2,mozilla,mobile){ + var match = rMsie.exec(u); + if (match != null) { + return { + b: 'IE', + v: match[2] || '0' + } + } + match = rFirefox.exec(u); + if (match != null) { + return { + b: match[1] || '', + v: match[2] || '0' + } + } + match = rOpera.exec(u); + if (match != null) { + return { + b: match[1] || '', + v: match[2] || '0' + } + } + match = rChrome.exec(u); + if (match != null) { + return { + b: match[1] || '', + v: match[2] || '0' + } + } + match = rSafari.exec(u); + if (match != null) { + return { + b: match[2] || '', + v: match[1] || '0' + } + } + match = rSafari2.exec(u); + if (match != null) { + return { + b: match[1] || '', + v: match[2] || '0' + } + } + match = mozilla.exec(u); + if (match != null) { + return { + b: match[1] || '', + v: match[2] || '0' + } + } + match = mobile.exec(u); + if (match != null) { + return { + b: match[1] || '', + v: match[2] || '0' + } + } + else { + return { + b: 'unknown', + v: '0' + } + } + }, + browser: function() { + var u = navigator.userAgent, + rMsie = /(msie\s|trident.*rv:)([\w.]+)/, + rFirefox = /(firefox)\/([\w.]+)/, + rOpera = /(opera).+version\/([\w.]+)/, + rChrome = /(chrome)\/([\w.]+)/, + rSafari = /version\/([\w.]+).*(safari)/, + rSafari2 = /(safari)\/([\w.]+)/, + mozilla = /(mozilla)\/([\w.]+)/, + mobile = /(mobile)\/([\w.]+)/; + var c = u.toLowerCase(); + var d = this.uaMatch(c,rMsie,rFirefox,rOpera,rChrome,rSafari,rSafari2,mozilla,mobile); + if (d.b) { + b = d.b; + v = d.v; + } + return {B: b, V: v}; + }, + Platform: function() { + var w = ''; + var u = navigator.userAgent, + app = navigator.appVersion; + var b = { + iPhone: u.indexOf('iPhone') > -1 || u.indexOf('Mac') > -1, + iPad: u.indexOf('iPad') > -1, + ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), + android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, + webKit: u.indexOf('AppleWebKit') > -1, + trident: u.indexOf('Trident') > -1, + gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, + presto: u.indexOf('Presto') > -1, + mobile: !!u.match(/AppleWebKit.*Mobile.*/) || !!u.match(/AppleWebKit/), + webApp: u.indexOf('Safari') == -1 + }; + for (var k in b) { + if (b[k]) { + w = k; + break; + } + } + return w; + }, + isHTML5:function(){ + return !!document.createElement('video').canPlayType; + }, + getType:function(){ + return this._T_; + }, + getVideo: function() { + var v = ''; + var s = this._E_['v']; + if (s && s.length>1) { + for (var i = 0; i < s.length; i++) { + var a = s[i].split('->'); + if (a.length >= 1 && a[0] != '') { + v += '= 2 && a[1] != '') { + v += ' type="' + a[1] + '"'; + } + v += '>'; + } + } + return v; + }, + getVars: function(k) { + var o=this._A_; + if (typeof(o) == 'undefined') { + return null; + } + if (k in o) { + return o[k]; + } else { + return null; + } + }, + getParams: function() { + var p = ''; + if (this._A_) { + if (parseInt(this.getVars('p')) == 1) { + p += ' autoplay="autoplay"'; + } + if (parseInt(this.getVars('e')) == 1) { + p += ' loop="loop"'; + } + if (parseInt(this.getVars('p')) == 2) { + p += ' preload="metadata"'; + } + if (this.getVars('i')) { + p += ' poster="' + this.getVars('i') + '"'; + } + } + return p; + }, + getpath: function(z) { + var f='CDEFGHIJKLMNOPQRSTUVWXYZcdefghijklmnopqrstuvwxyz'; + var w=z.substr(0,1); + if(f.indexOf(w)>-1 && (z.substr(0,4)==w+'://' || z.substr(0,4)==w+':\\')){ + return z; + } + var d = unescape(window.location.href).replace('file:///', ''); + var k = parseInt(document.location.port); + var u = document.location.protocol + '//' + document.location.hostname; + var l = '', + e = '', + t = ''; + var s = 0; + var r = unescape(z).split('//'); + if (r.length > 0) { + l = r[0] + '//' + } + var h = 'http|https|ftp|rtsp|mms|ftp|rtmp|file'; + var a = h.split('|'); + if (k != 80 && k) { + u += ':' + k; + } + for (i = 0; i < a.length; i++) { + if ((a[i] + '://') == l) { + s = 1; + break; + } + } + if (s == 0) { + if (z.substr(0, 1) == '/') { + t = u + z; + } else { + e = d.substring(0, d.lastIndexOf('/') + 1).replace('\\', '/'); + var w = z.replace('../', './'); + var u = w.split('./'); + var n = u.length; + var r = w.replace('./', ''); + var q = e.split('/'); + var j = q.length - n; + for (i = 0; i < j; i++) { + t += q[i] + '/'; + } + t += r; + } + } else { + t = z; + } + return t; + }, + getXhr: function() { + var x; + try { + x = new ActiveXObject('Msxml2.XMLHTTP'); + } catch(e) { + try { + x = new ActiveXObject('Microsoft.XMLHTTP'); + } catch(e) { + x = false; + } + } + if (!x && typeof XMLHttpRequest != 'undefined') { + x = new XMLHttpRequest(); + } + return x; + }, + getX: function(){ + var f='ckstyle()'; + if (this.getVars('x') && parseInt(this.getVars('c'))!=1 ) { + f=this.getVars('x')+'()'; + } + try { + if (typeof(eval(f)) == 'object') { + this._X_ = eval(f); + } + } catch(e) { + try { + if (typeof(eval(ckstyle)) == 'object') { + this._X_ = ckstyle(); + } + } catch(e) { + this._X_ = ckstyle(); + } + } + }, + getSn: function(s, n) { + if(n>=0){ + return this._X_[s].split(',')[n]; + } + else{ + return this._X_[s]; + } + }, + getUrl: function(L, B) { + var b = ['get', 'utf-8']; + if (L && L.length == 2) { + var a = L[0]; + var c = L[1].split('/'); + if (c.length >= 2) { + b[0] = c[1]; + } + if (c.length >= 3) { + b[1] = c[2]; + } + this.ajax(b[0], b[1], a, + function(s) { + var C = CKobject; + if (s && s != 'error') { + var d = '', + e = s; + if (s.indexOf('}') > -1) { + var f = s.split('}'); + for (var i = 0; i < f.length - 1; i++) { + d += f[i] + '}'; + var h = f[i].replace('{', '').split('->'); + if (h.length == 2) { + C._A_[h[0]] = h[1]; + } + } + e = f[f.length - 1]; + } + C._E_['v'] = e.split(','); + if (B) { + C.showHtml5(); + } else { + C.changeParams(d); + C.newAdr(); + } + } + }); + } + }, + getflashvars: function(s) { + var v = '', + i = 0; + if (s) { + for (var k in s) { + if (i > 0) { + v += '&'; + } + if (k == 'f' && s[k] && ! this.getSn('pm_repc',-1)) { + s[k] = this.getpath(s[k]); + if (s[k].indexOf('&') > -1) { + s[k] = encodeURIComponent(s[k]); + } + } + if (k == 'y' && s[k]) { + s[k] = this.getpath(s[k]); + } + v += k + '=' + s[k]; + i++; + } + } + return v; + }, + getparam: function(s) { + var w = '', + v = '', + o = { + allowScriptAccess: 'always', + allowFullScreen: true, + quality: 'high', + bgcolor: '#000' + }; + if (s) { + for (var k in s) { + o[k] = s[k]; + } + } + for (var e in o) { + w += e + '="' + o[e] + '" '; + v += ''; + } + w = w.replace('movie=', 'src='); + return { + w: w, + v: v + }; + }, + getObjectById: function(s) { + if (this._T_) { + return this; + } + var x = null, + y = this._K_(s), + r = 'embed'; + if (y && y.nodeName == 'OBJECT') { + if (typeof y.SetVariable != 'undefined') { + x= y; + } else { + var z = y.getElementsByTagName(r)[0]; + if (z) { + x= z; + } + } + } + return x; + }, + ajax: function(b, u, s, f) { + var x = this.getXhr(); + var a = [], + m = ''; + if (b == 'get') { + if (s.indexOf('?') > -1) { + m = s + '&t=' + new Date().getTime(); + } else { + m = s + '?t=' + new Date().getTime(); + } + x.open('get', m); + } else { + a = s.split('?'); + s = a[0], + m = a[1]; + x.open('post', s, true); + } + x.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + x.setRequestHeader('charset', u); + if (b == 'post') { + x.send(m); + } else { + x.send(null); + } + x.onreadystatechange = function() { + if (x.readyState == 4) { + var g = x.responseText; + if (g != '') { + f(g); + } else { + f(null); + } + } + } + }, + addListener: function(e, f) { + var o=CKobject._V_; + if (o.addEventListener) { + try{ + o.addEventListener(e, f, false); + } + catch (e) { + this.getNot(); + } + } + else if (o.attachEvent) { + try{ + o.attachEvent('on' + e, f); + } + catch(e){ + this.getNot(); + } + } + else { + o['on' + e] = f; + } + }, + removeListener: function( e, f) { + var o=CKobject._V_; + if (o.removeEventListener) { + try{ + o.removeEventListener(e, f, false); + } + catch(e){ + this.getNot(); + } + } + else if (o.detachEvent) { + try{ + o.detachEvent('on' + e, f); + } + catch(e){ + this.getNot(); + } + } + else { + o['on' + e] = null; + } + }, + Flash: function() { + var f = false,v = 0; + if (document.all || this.browser()['B'].toLowerCase().indexOf('ie')>-1) { + try { + var s = new ActiveXObject('ShockwaveFlash.ShockwaveFlash'); + f = true; + var z = s.GetVariable('$version'); + v = parseInt(z.split(' ')[1].split(',')[0]); + } catch(e) {} + } else { + if (navigator.plugins && navigator.plugins.length > 0) { + var s = navigator.plugins['Shockwave Flash']; + if (s) { + f = true; + var w = s.description.split(' '); + for (var i = 0; i < w.length; ++i) { + if (isNaN(parseInt(w[i]))) continue; + v = parseInt(w[i]); + } + } + } + } + return { + f: f, + v: v + }; + }, + embed:function(f,d,i,w,h,b,v,e,p,j){ + var s=['all']; + if(b){ + if(this.isHTML5()){ + this.embedHTML5(d,i,w,h,e,v,s,j); + } + else{ + this.embedSWF(f,d,i,w,h,v,p); + } + } + else{ + if(this.Flash()['f'] && parseInt(this.Flash()['v'])>10){ + this.embedSWF(f,d,i,w,h,v,p); + } + else if(this.isHTML5()){ + this.embedHTML5(d,i,w,h,e,v,s,j); + } + else{ + this.embedSWF(f,d,i,w,h,v,p); + } + } + }, + embedSWF: function(C, D, N, W, H, V, P) { + if (!N) { + N = 'ckplayer_a1' + } + if (!P) { + P = { + bgcolor: '#FFF', + allowFullScreen: true, + allowScriptAccess: 'always', + wmode:'transparent' + }; + } + this._A_=V; + this.getX(); + var u = 'undefined', + g = false, + j = document, + r = 'http://www.macromedia.com/go/getflashplayer', + t = '请点击此处下载安装最新的flash插件', + error = { + w: '您的网页不符合w3c标准,无法显示播放器', + f: '您没有安装flash插件,无法播放视频,' + t, + v: '您的flash插件版本过低,无法播放视频,' + t + }, + w3c = typeof j.getElementById != u && typeof j.getElementsByTagName != u && typeof j.createElement != u, + i = 'id="' + N + '" name="' + N + '" ', + s = '', + l = ''; + P['movie'] = C; + P['flashvars'] = this.getflashvars(V); + if(W==-1){ + d=true; + this._K_(D).style.width='100%'; + W='100%'; + } + s += ''; + s += ''; + if (!w3c) { + l = error['w']; + g = true; + } else { + if (!this.Flash()['f']) { + l = error['f']; + g = true; + } else { + if (this.Flash()['v'] < 11) { + l = error['v']; + g = true; + } else { + l = s; + this._T_=false; + } + } + } + if (l) { + this._K_(D).innerHTML = l; + } + if (g){ + this._K_(D).style.color = '#0066cc'; + this._K_(D).style.lineHeight = this._K_(D).style.height; + this._K_(D).style.textAlign= 'center'; + } + }, + embedHTML5: function(C, P, W, H, V, A, S, J) { + this._E_ = { + c: C, + p: P, + w: W, + h: H, + v: V, + s: S, + j: J==undefined || J?true:false + }; + this._A_ = A; + this.getX(); + b = this.browser()['B'], + v = this.browser()['V'], + x = v.split('.'), + t = x[0], + m = b + v, + n = b + t, + w = '', + s = false, + f = this.Flash()['f'], + a = false; + if (!S) { + S = ['iPad', 'iPhone', 'ios']; + } + for (var i = 0; i < S.length; i++) { + w = S[i]; + if (w.toLowerCase() == 'all') { + s = true; + break; + } + if (w.toLowerCase() == 'all+false' && !f) { + s = true; + break; + } + if (w.indexOf('+') > -1) { + w = w.split('+')[0]; + a = true; + } else { + a = false; + } + if (this.Platform() == w || m == w || n == w || b == w) { + if (a) { + if (!f) { + s = true; + break; + } + }else { + s = true; + break; + } + } + } + if (s) { + if (V) { + var l = V[0].split('->'); + if (l && l.length == 2 && l[1].indexOf('ajax') > -1) { + this.getUrl(l, true); + return; + } + } + this.showHtml5(); + } + }, + status: function() { + this._H_ = parseInt(this.getSn('setup', 20)); + var f='ckplayer_status'; + if (this.getSn('calljs', 0)!='') { + f=this.getSn('calljs', 0); + } + try { + if (typeof(eval(f)) == 'function') { + this._L_=eval(f); + this._M_=true; + return true; + } + } catch(e) { + try { + if (typeof(eval(ckplayer_status)) == 'function') { + this._L_=ckplayer_status; + this._M_=true; + return true; + } + } catch(e) { + return false; + } + } + return false; + }, + showHtml5: function() { + var C = CKobject; + var p = C._E_['p'], + a = C._E_['v'], + c = C._E_['c'], + j = '', + b = false; + var s = this._E_['v']; + var w=C._E_['w'],h=C._E_['h']; + var d=false; + var r=''; + if(s.length==1){ + r=' src="'+s[0].split('->')[0]+'"'; + } + if(w==-1){ + d=true; + C._K_(c).style.width='100%'; + w='100%'; + } + if(w.toString().indexOf('%')>-1){ + w='100%'; + } + if(h.toString().indexOf('%')>-1){ + h='100%'; + } + if(C._E_['j']){ + j='controls="controls"'; + } + var v = ''; + C._K_(c).innerHTML = v; + C._K_(c).style.backgroundColor = '#000'; + C._V_ = C._K_(p); + if(!d){ + C._K_(c).style.width=C._E_['w'].toString().indexOf('%')>-1?(C._K_(c).offsetWidth*parseInt(C._E_['w'])*0.01)+'px':C._V_.width+'px'; + C._K_(c).style.height=C._E_['h'].toString().indexOf('%')>-1?(C._K_(c).offsetHeight*parseInt(C._E_['h'])*0.01)+'px':C._V_.height+'px'; + } + C._P_ = false; + C._T_ = true; + if (C.getVars('loaded')!='') { + var f=C.getVars('loaded')+'()'; + try { + if (typeof(eval(f)) == 'function') { + eval(f); + } + } catch(e) { + try { + if (typeof(eval(loadedHandler)) == 'function') { + loadedHandler(); + } + } catch(e) { + } + } + } + C.status(); + C.addListener('play', C.playHandler); + C.addListener('pause', C.playHandler); + C.addListener('error', C.errorHandler); + C.addListener('emptied', C.errorHandler); + C.addListener('loadedmetadata', C.loadedMetadataHandler); + C.addListener('ended', C.endedHandler); + C.addListener('volumechange', C.volumeChangeHandler); + if((C.getVars('m')!='' && C.getVars('m')!=null) || parseInt( C.getSn('setup', 0))>0){ + C._K_(c).style.cursor='pointer'; + } + if((C.getVars('m')!='' && C.getVars('m')!=null) || parseInt( C.getSn('setup', 1))==1){ + C.addListener('click', C.html5Click); + } + }, + videoPlay: function() { + if (this._T_) { + this._V_.play(); + } + }, + videoPause: function() { + if (this._T_) { + this._V_.pause(); + } + }, + playOrPause: function() { + if (this._T_) { + if (this._V_.paused) { + this._V_.play(); + } else { + this._V_.pause(); + } + } + }, + fastNext: function() { + if (this._T_) { + this._V_['currentTime'] = this._V_['currentTime'] + 10; + } + }, + fastBack: function() { + if (this._T_) { + this._V_['currentTime'] = this._V_['currentTime'] - 10; + } + }, + changeVolume: function(n) { + if (this._T_) { + this._V_['volume'] = n * 0.01; + } + }, + videoSeek: function(t) { + if (this._T_) { + this._V_['currentTime'] = t; + } + }, + newAddress: function(u) { + var s = []; + if (u) { + s = this.isHtml5New(u); + } else { + return; + } + if (s && this._T_) { + this.changeParams(u); + var l = s[0].split('->'); + if (l && l.length == 2 && l[1].indexOf('ajax') > -1) { + this.getUrl(l, false); + return; + } + this._E_['v'] = s; + this.newAdr(); + } + }, + quitFullScreen:function() { + if(document.cancelFullScreen) { + document.cancelFullScreen(); + } + else if(document.mozCancelFullScreen) { + document.mozCancelFullScreen(); + } else if(document.webkitCancelFullScreen) { + document.webkitCancelFullScreen(); + } + + }, + changeStatus:function(n){ + this._H_=n; + }, + newAdr: function() { + var s = this._E_['v']; + this._V_.pause(); + if(s.length==1){ + this._V_.src=s[0].split('->')[0]; + } + else{ + this._V_['innerHTML'] = this.getVideo(); + } + this._V_.load(); + }, + isHtml5New: function(s) { + if (s.indexOf('html5') == -1) { + return false; + } + var a = s.replace(/{/g, ''); + var b = a.split('}'); + var c = ''; + for (var i = 0; i < b.length; i++) { + if (b[i].indexOf('html5') > -1) { + c = b[i].replace('html5->', '').split(','); + break; + } + } + return c; + }, + changeParams: function(f) { + if (f) { + var a = f.replace(/{/g, ''); + var b = a.split('}'); + var c = ''; + for (var i = 0; i < b.length; i++) { + var d = b[i].split('->'); + if(d.length == 2){ + switch(d[0]){ + case 'p': + if(parseInt(d[1]) == 1){ + this._V_.autoplay = true; + } + else if(parseInt(d[1]) == 2){ + this._V_.preload = 'metadata'; + } + else{ + this._V_.autoplay = false; + if(this._I_!=null){ + clearInterval(this._I_); + this._I_=null; + } + } + break; + case 'e': + if(parseInt(d[1]) == 1){ + this._V_.loop = true; + } + else{ + this._V_.loop = false; + } + break; + case 'i': + this._V_.poster = d[1]; + break; + default: + break; + } + } + } + } + }, + frontAdPause: function(s) { + this.getNot(); + }, + frontAdUnload: function() { + this.getNot(); + }, + changeFace: function(s) { + this.getNot(); + }, + plugin: function(a, b, c, d, e, f, g) { + this.getNot(); + }, + videoClear: function() { + this.getNot(); + }, + videoBrightness: function(s) { + this.getNot(); + }, + videoContrast: function(s) { + this.getNot(); + }, + videoSaturation: function(s) { + this.getNot(); + }, + videoSetHue: function(s) { + this.getNot(); + }, + videoWAndH: function(a, b) { + this.getNot(); + }, + videoWHXY: function(a, b, c, d) { + this.getNot(); + }, + changeFlashvars: function(a) { + this.getNot(); + }, + changeMyObject: function(a, b) { + this.getNot(); + }, + getMyObject: function(a, b) { + this.getNot(); + }, + changeeFace: function() { + this.getNot(); + }, + changeStyle: function(a, b) { + this.getNot(); + }, + promptLoad: function() { + this.getNot(); + }, + promptUnload: function() { + this.getNot(); + }, + marqueeLoad: function(a,b) { + this.getNot(); + }, + marqueeClose: function(s) { + this.getNot(); + }, + getNot: function() { + var s='The ckplayer\'s API for HTML5 does not exist'; + return s; + }, + volumeChangeHandler: function() { + var C = CKobject; + if (C._V_.muted) { + C.returnStatus('volumechange:0', 1); + C._O_['volume'] = 0; + C._O_['mute'] = true; + } else { + C._O_['mute'] = false; + C._O_['volume'] = C._V_['volume'] * 100; + C.returnStatus('volumechange:'+C._V_['volume'] * 100, 1); + } + }, + endedHandler: function() { + var C = CKobject; + var e=parseInt(C.getVars('e')); + C.returnStatus('ended', 1); + if(C._I_){ + clearInterval(C._I_); + C._I_=null; + } + if ( e!= 0 && e !=4 && e !=6) { + return; + } + if(e==6){ + this.quitFullScreen(); + } + var f='playerstop()'; + if (C.getSn('calljs', 2)!='') { + f=C.getSn('calljs', 2)+'()'; + } + try { + if (typeof(eval(f)) == 'function') { + eval(f); + return; + } + } catch(e) { + try { + if (typeof(eval(playerstop)) == 'function') { + playerstop(); + return; + } + } catch(e) { + return; + } + } + }, + loadedMetadataHandler: function() { + var C = CKobject; + C.returnStatus('loadedmetadata', 1); + C._O_['totaltime'] = C._V_['duration']; + C._O_['width'] = C._V_['width']; + C._O_['height'] = C._V_['height']; + C._O_['awidth'] = C._V_['videoWidth']; + C._O_['aheight'] = C._V_['videoHeight']; + if (C._V_.defaultMuted) { + C.returnStatus('volumechange:0', 1); + C._O_['mute'] = true; + C._O_['volume'] = 0; + } else { + C._O_['mute'] = false; + C._O_['volume'] = C._V_['volume'] * 100; + C.returnStatus('volumechange:'+C._V_['volume'] * 100, 1); + } + if (parseInt(C.getVars('p')) == 1) { + C.playHandler(); + } + }, + errorHandler: function() { + CKobject.returnStatus('error', 1); + }, + playHandler: function() { + var C = CKobject; + if (C._V_.paused) { + C.returnStatus('pause', 1); + C.addO('play', false); + if(C._I_!=null){ + clearInterval(C._I_); + C._I_=null; + } + } else { + C.returnStatus('play', 1); + C.addO('play', true); + if (!C._P_) { + C.returnStatus('play', 1); + C._P_ = true; + } + C._I_ = setInterval(C.playTime, parseInt( C.getSn('setup', 37))); + if(!C._G_){ + C._G_=true; + for(var k in C._A_){ + if(k=='g' && C._A_[k]){ + var g=parseInt(C._A_[k]); + C.videoSeek(g); + } + } + } + if(!C._Y_){ + C._Y_=true; + for(var k in C._A_){ + if(k=='j' && C._A_[k]){ + var j=parseInt(C._A_[k]); + if(j>0){ + C._J_=j; + } + else{ + C._J_=parseInt(C._O_['totaltime'])+j; + } + } + } + } + } + }, + html5Click: function(){ + var C = CKobject; + if(C.getVars('m')!='' && C.getVars('m')!=null){ + window.open(C.getVars('m')); + } + }, + returnStatus: function(s, j) { + var h = s; + if (this._H_ == 3) { + h = this._E_['p'] +'->'+ h; + } + if (this._M_ && j <= this._H_ ) { + this._L_(h); + } + }, + addO: function(s, z) { + this._O_[s] = z; + }, + getStatus: function() { + return this._O_; + }, + playTime: function() { + var C = CKobject; + var t = C._V_['currentTime']; + C._O_['time'] = t; + if(C._J_>0 && t>C._J_){ + C._J_=0; + C.videoSeek(C._O_['totaltime']); + } + C.returnStatus('time:' + t, 1); + } + } + window.CKobject = CKobject; +})(); \ No newline at end of file diff --git a/api/ckplayer/ckplayer.swf b/api/ckplayer/ckplayer.swf new file mode 100644 index 0000000..7ea1a3d Binary files /dev/null and b/api/ckplayer/ckplayer.swf differ diff --git a/api/ckplayer/ckplayer.xml b/api/ckplayer/ckplayer.xml new file mode 100644 index 0000000..41b99e3 --- /dev/null +++ b/api/ckplayer/ckplayer.xml @@ -0,0 +1,280 @@ + + + + \ No newline at end of file diff --git a/api/ckplayer/config/code.html b/api/ckplayer/config/code.html new file mode 100644 index 0000000..43c30e2 --- /dev/null +++ b/api/ckplayer/config/code.html @@ -0,0 +1,46 @@ +
+
+
+{js_code} + \ No newline at end of file diff --git a/api/ckplayer/config/config.js b/api/ckplayer/config/config.js new file mode 100644 index 0000000..d2b089e --- /dev/null +++ b/api/ckplayer/config/config.js @@ -0,0 +1,68 @@ +function ckstyle_finecms() { + + var ck = { + + cpath: '', + + language: '', + + flashvars: '', + + setup: '1,1,1,1,1,2,0,1,2,0,0,1,200,0,2,1,0,1,1,1,2,10,3,0,1,2,3000,0,0,0,0,1,1,1,1,1,1,250,0,90,0,0', + pm_bg: '0x000000,100,230,180', + + mylogo: 'logo.swf', + + pm_mylogo: '1,1,-100,-55', + + logo: 'null', + + pm_logo: '2,0,-100,20', + + control_rel: 'related.swf,ckplayer/related.xml,0', + + control_pv: 'Preview.swf,105,2000', + + pm_repc: '', + + pm_spac: '|', + + pm_fpac: 'file->f', + + pm_advtime: '2,0,-110,10,0,300,0', + + pm_advstatus: '1,2,2,-200,-40', + + pm_advjp: '1,1,2,2,-100,-40', + + pm_padvc: '2,0,-10,-10', + + pm_advms: '2,2,-46,-56', + + pm_zip: '1,1,-20,-8,1,0,0', + + pm_advmarquee: '1,2,50,-60,50,20,0,0x000000,50,0,20,1,30,2000', + + pm_glowfilter:'1,0x01485d, 100, 6, 3, 10, 1, 0, 0', + + advmarquee: escape('{text}'), + + mainfuntion:'', + + flashplayer:'', + + calljs:'ckplayer_status,ckadjump,playerstop,ckmarqueeadv', + + myweb: escape(''), + + cpt_lights: '1', + + cpt_share: '{api_url}&at=share', + + cpt_list: ckcpt() + + } + + return ck; + +} \ No newline at end of file diff --git a/api/ckplayer/config/offlights.js b/api/ckplayer/config/offlights.js new file mode 100644 index 0000000..f949ae1 --- /dev/null +++ b/api/ckplayer/config/offlights.js @@ -0,0 +1,109 @@ +/* +该文件是从网上收集的方法,用来做开关灯的,相对于原来的程序做了一些改变,兼容了IE10 +*/ +var Offlights = { + create: function() { + return function() { + this.initialize.apply(this, arguments) + } + } +} +var OverLay = Offlights.create(); +OverLay.prototype = { + initialize: function(options) { + this.SetOptions(options); + this.browser = (function(ua){ + var a=new Object(); + var b = { + msie: /msie/.test(ua) && !/opera/.test(ua), + opera: /opera/.test(ua), + safari: /webkit/.test(ua) && !/chrome/.test(ua), + firefox: /firefox/.test(ua), + chrome: /chrome/.test(ua) + }; + var vMark = ""; + for (var i in b) { + if (b[i]) { vMark = "safari" == i ? "version" : i; break; } + } + b.version = vMark && RegExp("(?:" + vMark + ")[\\/: ]([\\d.]+)").test(ua) ? RegExp.$1 : "0"; + b.ie = b.msie; + b.ie6 = b.msie && parseInt(b.version, 10) == 6; + b.ie7 = b.msie && parseInt(b.version, 10) == 7; + b.ie8 = b.msie && parseInt(b.version, 10) == 8; + a.B=vMark; + a.V=b.version; + return a; + })(window.navigator.userAgent.toLowerCase()); + this.isIE = this.browser['B']=='msie' ? true : false; + this.isIE6 = (this.isIE && this.browser['V']==6)?true:false; + this._K_ = function(id) {return "string" == typeof id ? document.getElementById(id) : id}; + this.Lay = this._K_(this.options.Lay) || document.body.insertBefore(document.createElement("div"), document.body.childNodes[0]); + this.Color = this.options.Color; + this.Opacity = parseInt(this.options.Opacity); + this.zIndex = parseInt(this.options.zIndex); + with(this.Lay.style) { + display = "none"; + zIndex = this.zIndex; + left = top = 0; + position = "fixed"; + width = height = "100%" + } + if (this.isIE6) { + this.Lay.style.position = "absolute"; + this._resize = this.Bind(this, + function() { + this.Lay.style.width = Math.max(document.documentElement.scrollWidth, document.documentElement.clientWidth) + "px"; + this.Lay.style.height = Math.max(document.documentElement.scrollHeight, document.documentElement.clientHeight) + "px" + }); + this.Lay.innerHTML = '' + } + }, + Bind:function(object, fun) { + return function() { + return fun.apply(object, arguments) + } + }, + Extend :function(destination, source) { + for (var property in source) { + destination[property] = source[property] + } + }, + SetOptions: function(options) { + this.options = { + Lay: null, + Color: "#000", + Opacity: 100, + zIndex: 50 + }; + this.Extend(this.options, options || {}) + }, + Show: function() { + if (this.isIE6) { + this._resize(); + window.attachEvent("onresize", this._resize) + } + with(this.Lay.style) { + this.isIE ? filter = "alpha(opacity:" + this.Opacity + ")": opacity = this.Opacity / 100; + backgroundColor = this.Color; + display = "block" + } + }, + Close: function() { + this.Lay.style.display = "none"; + if (this.isIE6) { + window.detachEvent("onresize", this._resize) + } + } +}; +var LightBox = Offlights.create(); +LightBox.prototype = { + initialize: function(options) { + this.OverLay = new OverLay(options); + }, + Show: function(options) { + this.OverLay.Show(); + }, + Close: function() { + this.OverLay.Close(); + } +}; diff --git a/api/ckplayer/config/share.xml b/api/ckplayer/config/share.xml new file mode 100644 index 0000000..f2ee87f --- /dev/null +++ b/api/ckplayer/config/share.xml @@ -0,0 +1,61 @@ + + + + {embed src="{server_url}ckplayer.swf" flashvars="[$share]" quality="high" width="480" height="400" align="middle" allowScriptAccess="always" allowFullscreen="true" type="application/x-shockwave-flash"}{/embed} + + + {server_url}ckplayer.swf?[$share] + + + f,my_url,my_pic,a + + {server_url}share/ + + + 0 + + c25cf02c-1705-412d-bd4b-77a10b380f08 + + + + qqmb + qq.png + 20,50 + + + sinaminiblog + sina.png + 101,50 + + + qzone + qzone.png + 182,50 + + + renren + rr.png + 263,50 + + + kaixin001 + kaixin001.png + 20,85 + + + tianya + tianya.png + 101,85 + + + feixin + feixin.png + 182,85 + + + msn + msn.png + 263,85 + + + \ No newline at end of file diff --git a/api/ckplayer/language.xml b/api/ckplayer/language.xml new file mode 100644 index 0000000..a3ad7ab --- /dev/null +++ b/api/ckplayer/language.xml @@ -0,0 +1,73 @@ + + + + \ No newline at end of file diff --git a/api/ckplayer/related.xml b/api/ckplayer/related.xml new file mode 100644 index 0000000..c77b9b4 --- /dev/null +++ b/api/ckplayer/related.xml @@ -0,0 +1,121 @@ + + +{font color="#FFDD00" face="新宋体"}精彩视频推荐{/font} + + 600,400,0xFFDD00,20 + + 120,90 + + 150,175,100 + + {a href="[url]" target="_blank"}{font color="#FFFFFF" face="新宋体"}[title]{/font}{/a} + + + + 120,42,3 + + + + temp/1.jpg + http://www.ckplayer.com/index.php?id=1 + 1:这里调用的文件配置在ckplayer/related.xml里 + + + temp/2.jpg + http://www.ckplayer.com/index.php?id=2 + 2:支持多页调用 + + + temp/3.jpg + http://www.ckplayer.com/index.php?id=3 + 3:文本请保持在二行,不能多于三行,多于三行将不显示 + + + temp/4.jpg + http://www.ckplayer.com/index.php?id=3 + 4:支持多行调用,多页调用 + + + temp/5.jpg + http://www.ckplayer.com/index.php?id=2 + 5:感谢对ckplayer的支持 + + + temp/6.jpg + http://www.ckplayer.com/index.php?id=1 + 6:最多两行,请不要超过二行 + + + temp/3.jpg + http://www.ckplayer.com/index.php?id=1 + 7:这里调用的文件配置在ckplayer/related.xml里 + + + temp/5.jpg + http://www.ckplayer.com/index.php?id=2 + 8:支持多页调用 + + + temp/4.jpg + http://www.ckplayer.com/index.php?id=3 + 9:文本请保持在二行,不能多于三行,多于三行将不显示 + + + temp/1.jpg + http://www.ckplayer.com/index.php?id=3 + 10:支持多行调用,多页调用 + + + temp/2.jpg + http://www.ckplayer.com/index.php?id=2 + 11:感谢对ckplayer的支持 + + + temp/6.jpg + http://www.ckplayer.com/index.php?id=1 + 12:最多两行,请不要超过二行 + + + temp/5.jpg + http://www.ckplayer.com/index.php?id=1 + 13:这里调用的文件配置在ckplayer/related.xml里 + + + temp/4.jpg + http://www.ckplayer.com/index.php?id=2 + 14:支持多页调用 + + + temp/6.jpg + http://www.ckplayer.com/index.php?id=3 + 15:文本请保持在二行,不能多于三行,多于三行将不显示 + + + temp/3.jpg + http://www.ckplayer.com/index.php?id=3 + 16:支持多行调用,多页调用 + + + temp/1.jpg + http://www.ckplayer.com/index.php?id=2 + 17:感谢对ckplayer的支持 + + + temp/2.jpg + http://www.ckplayer.com/index.php?id=1 + 18:最多两行,请不要超过二行 + + + \ No newline at end of file diff --git a/api/ckplayer/share/feixin.png b/api/ckplayer/share/feixin.png new file mode 100644 index 0000000..2629ac5 Binary files /dev/null and b/api/ckplayer/share/feixin.png differ diff --git a/api/ckplayer/share/google.png b/api/ckplayer/share/google.png new file mode 100644 index 0000000..d5899d8 Binary files /dev/null and b/api/ckplayer/share/google.png differ diff --git a/api/ckplayer/share/kaixin001.png b/api/ckplayer/share/kaixin001.png new file mode 100644 index 0000000..32b0e43 Binary files /dev/null and b/api/ckplayer/share/kaixin001.png differ diff --git a/api/ckplayer/share/msn.png b/api/ckplayer/share/msn.png new file mode 100644 index 0000000..9acc0bc Binary files /dev/null and b/api/ckplayer/share/msn.png differ diff --git a/api/ckplayer/share/qq.png b/api/ckplayer/share/qq.png new file mode 100644 index 0000000..7d585a3 Binary files /dev/null and b/api/ckplayer/share/qq.png differ diff --git a/api/ckplayer/share/qq2.png b/api/ckplayer/share/qq2.png new file mode 100644 index 0000000..d2f1eff Binary files /dev/null and b/api/ckplayer/share/qq2.png differ diff --git a/api/ckplayer/share/qzone.png b/api/ckplayer/share/qzone.png new file mode 100644 index 0000000..d2f1eff Binary files /dev/null and b/api/ckplayer/share/qzone.png differ diff --git a/api/ckplayer/share/rr.png b/api/ckplayer/share/rr.png new file mode 100644 index 0000000..65d6407 Binary files /dev/null and b/api/ckplayer/share/rr.png differ diff --git a/api/ckplayer/share/sina.png b/api/ckplayer/share/sina.png new file mode 100644 index 0000000..023fd8d Binary files /dev/null and b/api/ckplayer/share/sina.png differ diff --git a/api/ckplayer/share/sohu.png b/api/ckplayer/share/sohu.png new file mode 100644 index 0000000..440a1e7 Binary files /dev/null and b/api/ckplayer/share/sohu.png differ diff --git a/api/ckplayer/share/tianya.png b/api/ckplayer/share/tianya.png new file mode 100644 index 0000000..cb4fc80 Binary files /dev/null and b/api/ckplayer/share/tianya.png differ diff --git a/api/ckplayer/style.swf b/api/ckplayer/style.swf new file mode 100644 index 0000000..0e5e612 Binary files /dev/null and b/api/ckplayer/style.swf differ diff --git a/api/emotions/aoman.gif b/api/emotions/aoman.gif new file mode 100644 index 0000000..96516b8 Binary files /dev/null and b/api/emotions/aoman.gif differ diff --git a/api/emotions/baiyan.gif b/api/emotions/baiyan.gif new file mode 100644 index 0000000..96b04df Binary files /dev/null and b/api/emotions/baiyan.gif differ diff --git a/api/emotions/bishi.gif b/api/emotions/bishi.gif new file mode 100644 index 0000000..27a30c1 Binary files /dev/null and b/api/emotions/bishi.gif differ diff --git a/api/emotions/bizui.gif b/api/emotions/bizui.gif new file mode 100644 index 0000000..2f45399 Binary files /dev/null and b/api/emotions/bizui.gif differ diff --git a/api/emotions/cahan.gif b/api/emotions/cahan.gif new file mode 100644 index 0000000..24a8eb6 Binary files /dev/null and b/api/emotions/cahan.gif differ diff --git a/api/emotions/caidao.gif b/api/emotions/caidao.gif new file mode 100644 index 0000000..e18da84 Binary files /dev/null and b/api/emotions/caidao.gif differ diff --git a/api/emotions/chajin.gif b/api/emotions/chajin.gif new file mode 100644 index 0000000..8f09d33 Binary files /dev/null and b/api/emotions/chajin.gif differ diff --git a/api/emotions/cheer.gif b/api/emotions/cheer.gif new file mode 100644 index 0000000..a2deec1 Binary files /dev/null and b/api/emotions/cheer.gif differ diff --git a/api/emotions/chong.gif b/api/emotions/chong.gif new file mode 100644 index 0000000..c0293c3 Binary files /dev/null and b/api/emotions/chong.gif differ diff --git a/api/emotions/ciya.gif b/api/emotions/ciya.gif new file mode 100644 index 0000000..3475300 Binary files /dev/null and b/api/emotions/ciya.gif differ diff --git a/api/emotions/da.gif b/api/emotions/da.gif new file mode 100644 index 0000000..489f0f9 Binary files /dev/null and b/api/emotions/da.gif differ diff --git a/api/emotions/dabian.gif b/api/emotions/dabian.gif new file mode 100644 index 0000000..1c52bde Binary files /dev/null and b/api/emotions/dabian.gif differ diff --git a/api/emotions/dabing.gif b/api/emotions/dabing.gif new file mode 100644 index 0000000..3c5227e Binary files /dev/null and b/api/emotions/dabing.gif differ diff --git a/api/emotions/dajiao.gif b/api/emotions/dajiao.gif new file mode 100644 index 0000000..4f26d7d Binary files /dev/null and b/api/emotions/dajiao.gif differ diff --git a/api/emotions/daku.gif b/api/emotions/daku.gif new file mode 100644 index 0000000..73fc097 Binary files /dev/null and b/api/emotions/daku.gif differ diff --git a/api/emotions/dangao.gif b/api/emotions/dangao.gif new file mode 100644 index 0000000..345cb43 Binary files /dev/null and b/api/emotions/dangao.gif differ diff --git a/api/emotions/danu.gif b/api/emotions/danu.gif new file mode 100644 index 0000000..7860ce1 Binary files /dev/null and b/api/emotions/danu.gif differ diff --git a/api/emotions/dao.gif b/api/emotions/dao.gif new file mode 100644 index 0000000..a0ccf2e Binary files /dev/null and b/api/emotions/dao.gif differ diff --git a/api/emotions/deyi.gif b/api/emotions/deyi.gif new file mode 100644 index 0000000..6ccdaa2 Binary files /dev/null and b/api/emotions/deyi.gif differ diff --git a/api/emotions/diaoxie.gif b/api/emotions/diaoxie.gif new file mode 100644 index 0000000..c0c6939 Binary files /dev/null and b/api/emotions/diaoxie.gif differ diff --git a/api/emotions/e.gif b/api/emotions/e.gif new file mode 100644 index 0000000..5f925c7 Binary files /dev/null and b/api/emotions/e.gif differ diff --git a/api/emotions/fadai.gif b/api/emotions/fadai.gif new file mode 100644 index 0000000..6d6f762 Binary files /dev/null and b/api/emotions/fadai.gif differ diff --git a/api/emotions/fadou.gif b/api/emotions/fadou.gif new file mode 100644 index 0000000..7f71a8c Binary files /dev/null and b/api/emotions/fadou.gif differ diff --git a/api/emotions/fan.gif b/api/emotions/fan.gif new file mode 100644 index 0000000..034933e Binary files /dev/null and b/api/emotions/fan.gif differ diff --git a/api/emotions/fanu.gif b/api/emotions/fanu.gif new file mode 100644 index 0000000..b512dd5 Binary files /dev/null and b/api/emotions/fanu.gif differ diff --git a/api/emotions/feiwen.gif b/api/emotions/feiwen.gif new file mode 100644 index 0000000..608d0ad Binary files /dev/null and b/api/emotions/feiwen.gif differ diff --git a/api/emotions/fendou.gif b/api/emotions/fendou.gif new file mode 100644 index 0000000..e24a180 Binary files /dev/null and b/api/emotions/fendou.gif differ diff --git a/api/emotions/gangga.gif b/api/emotions/gangga.gif new file mode 100644 index 0000000..905c15b Binary files /dev/null and b/api/emotions/gangga.gif differ diff --git a/api/emotions/geili.gif b/api/emotions/geili.gif new file mode 100644 index 0000000..b6cefd4 Binary files /dev/null and b/api/emotions/geili.gif differ diff --git a/api/emotions/gouyin.gif b/api/emotions/gouyin.gif new file mode 100644 index 0000000..076f0c6 Binary files /dev/null and b/api/emotions/gouyin.gif differ diff --git a/api/emotions/guzhang.gif b/api/emotions/guzhang.gif new file mode 100644 index 0000000..f60897e Binary files /dev/null and b/api/emotions/guzhang.gif differ diff --git a/api/emotions/haha.gif b/api/emotions/haha.gif new file mode 100644 index 0000000..f59dd58 Binary files /dev/null and b/api/emotions/haha.gif differ diff --git a/api/emotions/haixiu.gif b/api/emotions/haixiu.gif new file mode 100644 index 0000000..ceab122 Binary files /dev/null and b/api/emotions/haixiu.gif differ diff --git a/api/emotions/haqian.gif b/api/emotions/haqian.gif new file mode 100644 index 0000000..2893837 Binary files /dev/null and b/api/emotions/haqian.gif differ diff --git a/api/emotions/hua.gif b/api/emotions/hua.gif new file mode 100644 index 0000000..d58fcf6 Binary files /dev/null and b/api/emotions/hua.gif differ diff --git a/api/emotions/huaixiao.gif b/api/emotions/huaixiao.gif new file mode 100644 index 0000000..650d3dd Binary files /dev/null and b/api/emotions/huaixiao.gif differ diff --git a/api/emotions/hufen.gif b/api/emotions/hufen.gif new file mode 100644 index 0000000..0d112e0 Binary files /dev/null and b/api/emotions/hufen.gif differ diff --git a/api/emotions/huishou.gif b/api/emotions/huishou.gif new file mode 100644 index 0000000..05c1863 Binary files /dev/null and b/api/emotions/huishou.gif differ diff --git a/api/emotions/huitou.gif b/api/emotions/huitou.gif new file mode 100644 index 0000000..cf29be8 Binary files /dev/null and b/api/emotions/huitou.gif differ diff --git a/api/emotions/jidong.gif b/api/emotions/jidong.gif new file mode 100644 index 0000000..92ad35d Binary files /dev/null and b/api/emotions/jidong.gif differ diff --git a/api/emotions/jingkong.gif b/api/emotions/jingkong.gif new file mode 100644 index 0000000..c0aa92e Binary files /dev/null and b/api/emotions/jingkong.gif differ diff --git a/api/emotions/jingya.gif b/api/emotions/jingya.gif new file mode 100644 index 0000000..6a788f8 Binary files /dev/null and b/api/emotions/jingya.gif differ diff --git a/api/emotions/kafei.gif b/api/emotions/kafei.gif new file mode 100644 index 0000000..66d2113 Binary files /dev/null and b/api/emotions/kafei.gif differ diff --git a/api/emotions/keai.gif b/api/emotions/keai.gif new file mode 100644 index 0000000..cb8cf6d Binary files /dev/null and b/api/emotions/keai.gif differ diff --git a/api/emotions/kelian.gif b/api/emotions/kelian.gif new file mode 100644 index 0000000..b28d848 Binary files /dev/null and b/api/emotions/kelian.gif differ diff --git a/api/emotions/ketou.gif b/api/emotions/ketou.gif new file mode 100644 index 0000000..2b709e1 Binary files /dev/null and b/api/emotions/ketou.gif differ diff --git a/api/emotions/kiss.gif b/api/emotions/kiss.gif new file mode 100644 index 0000000..26274b8 Binary files /dev/null and b/api/emotions/kiss.gif differ diff --git a/api/emotions/ku.gif b/api/emotions/ku.gif new file mode 100644 index 0000000..ff42e74 Binary files /dev/null and b/api/emotions/ku.gif differ diff --git a/api/emotions/kuaikule.gif b/api/emotions/kuaikule.gif new file mode 100644 index 0000000..029cf0f Binary files /dev/null and b/api/emotions/kuaikule.gif differ diff --git a/api/emotions/kulou.gif b/api/emotions/kulou.gif new file mode 100644 index 0000000..92efec6 Binary files /dev/null and b/api/emotions/kulou.gif differ diff --git a/api/emotions/kun.gif b/api/emotions/kun.gif new file mode 100644 index 0000000..c527f3d Binary files /dev/null and b/api/emotions/kun.gif differ diff --git a/api/emotions/lanqiu.gif b/api/emotions/lanqiu.gif new file mode 100644 index 0000000..93222f6 Binary files /dev/null and b/api/emotions/lanqiu.gif differ diff --git a/api/emotions/lenghan.gif b/api/emotions/lenghan.gif new file mode 100644 index 0000000..3f4cb25 Binary files /dev/null and b/api/emotions/lenghan.gif differ diff --git a/api/emotions/liuhan.gif b/api/emotions/liuhan.gif new file mode 100644 index 0000000..cc083b7 Binary files /dev/null and b/api/emotions/liuhan.gif differ diff --git a/api/emotions/liulei.gif b/api/emotions/liulei.gif new file mode 100644 index 0000000..90c3d86 Binary files /dev/null and b/api/emotions/liulei.gif differ diff --git a/api/emotions/liwu.gif b/api/emotions/liwu.gif new file mode 100644 index 0000000..8f882f5 Binary files /dev/null and b/api/emotions/liwu.gif differ diff --git a/api/emotions/love.gif b/api/emotions/love.gif new file mode 100644 index 0000000..310ec65 Binary files /dev/null and b/api/emotions/love.gif differ diff --git a/api/emotions/ma.gif b/api/emotions/ma.gif new file mode 100644 index 0000000..073e743 Binary files /dev/null and b/api/emotions/ma.gif differ diff --git a/api/emotions/meng.gif b/api/emotions/meng.gif new file mode 100644 index 0000000..6242ac4 Binary files /dev/null and b/api/emotions/meng.gif differ diff --git a/api/emotions/nanguo.gif b/api/emotions/nanguo.gif new file mode 100644 index 0000000..debab8e Binary files /dev/null and b/api/emotions/nanguo.gif differ diff --git a/api/emotions/no.gif b/api/emotions/no.gif new file mode 100644 index 0000000..4d8b15e Binary files /dev/null and b/api/emotions/no.gif differ diff --git a/api/emotions/ok.gif b/api/emotions/ok.gif new file mode 100644 index 0000000..05726dc Binary files /dev/null and b/api/emotions/ok.gif differ diff --git a/api/emotions/peifu.gif b/api/emotions/peifu.gif new file mode 100644 index 0000000..fbf275b Binary files /dev/null and b/api/emotions/peifu.gif differ diff --git a/api/emotions/pijiu.gif b/api/emotions/pijiu.gif new file mode 100644 index 0000000..3f0e2b9 Binary files /dev/null and b/api/emotions/pijiu.gif differ diff --git a/api/emotions/pingpang.gif b/api/emotions/pingpang.gif new file mode 100644 index 0000000..33dd5d4 Binary files /dev/null and b/api/emotions/pingpang.gif differ diff --git a/api/emotions/pizui.gif b/api/emotions/pizui.gif new file mode 100644 index 0000000..a2644a9 Binary files /dev/null and b/api/emotions/pizui.gif differ diff --git a/api/emotions/qiang.gif b/api/emotions/qiang.gif new file mode 100644 index 0000000..61652a7 Binary files /dev/null and b/api/emotions/qiang.gif differ diff --git a/api/emotions/qinqin.gif b/api/emotions/qinqin.gif new file mode 100644 index 0000000..d41e8aa Binary files /dev/null and b/api/emotions/qinqin.gif differ diff --git a/api/emotions/qioudale.gif b/api/emotions/qioudale.gif new file mode 100644 index 0000000..4350491 Binary files /dev/null and b/api/emotions/qioudale.gif differ diff --git a/api/emotions/qiu.gif b/api/emotions/qiu.gif new file mode 100644 index 0000000..7e113ee Binary files /dev/null and b/api/emotions/qiu.gif differ diff --git a/api/emotions/quantou.gif b/api/emotions/quantou.gif new file mode 100644 index 0000000..d254af4 Binary files /dev/null and b/api/emotions/quantou.gif differ diff --git a/api/emotions/ruo.gif b/api/emotions/ruo.gif new file mode 100644 index 0000000..9a77936 Binary files /dev/null and b/api/emotions/ruo.gif differ diff --git a/api/emotions/se.gif b/api/emotions/se.gif new file mode 100644 index 0000000..40cfda4 Binary files /dev/null and b/api/emotions/se.gif differ diff --git a/api/emotions/shandian.gif b/api/emotions/shandian.gif new file mode 100644 index 0000000..e0f28a0 Binary files /dev/null and b/api/emotions/shandian.gif differ diff --git a/api/emotions/shengli.gif b/api/emotions/shengli.gif new file mode 100644 index 0000000..644748a Binary files /dev/null and b/api/emotions/shengli.gif differ diff --git a/api/emotions/shenma.gif b/api/emotions/shenma.gif new file mode 100644 index 0000000..659e465 Binary files /dev/null and b/api/emotions/shenma.gif differ diff --git a/api/emotions/shuai.gif b/api/emotions/shuai.gif new file mode 100644 index 0000000..c1e6ac9 Binary files /dev/null and b/api/emotions/shuai.gif differ diff --git a/api/emotions/shuijiao.gif b/api/emotions/shuijiao.gif new file mode 100644 index 0000000..f6c8834 Binary files /dev/null and b/api/emotions/shuijiao.gif differ diff --git a/api/emotions/taiyang.gif b/api/emotions/taiyang.gif new file mode 100644 index 0000000..27019f8 Binary files /dev/null and b/api/emotions/taiyang.gif differ diff --git a/api/emotions/tiao.gif b/api/emotions/tiao.gif new file mode 100644 index 0000000..b909e16 Binary files /dev/null and b/api/emotions/tiao.gif differ diff --git a/api/emotions/tiaopi.gif b/api/emotions/tiaopi.gif new file mode 100644 index 0000000..547529c Binary files /dev/null and b/api/emotions/tiaopi.gif differ diff --git a/api/emotions/tiaosheng.gif b/api/emotions/tiaosheng.gif new file mode 100644 index 0000000..c70e7d3 Binary files /dev/null and b/api/emotions/tiaosheng.gif differ diff --git a/api/emotions/tiaowu.gif b/api/emotions/tiaowu.gif new file mode 100644 index 0000000..1f27663 Binary files /dev/null and b/api/emotions/tiaowu.gif differ diff --git a/api/emotions/touxiao.gif b/api/emotions/touxiao.gif new file mode 100644 index 0000000..efd650f Binary files /dev/null and b/api/emotions/touxiao.gif differ diff --git a/api/emotions/tu.gif b/api/emotions/tu.gif new file mode 100644 index 0000000..e045ff2 Binary files /dev/null and b/api/emotions/tu.gif differ diff --git a/api/emotions/tuzi.gif b/api/emotions/tuzi.gif new file mode 100644 index 0000000..d1857ac Binary files /dev/null and b/api/emotions/tuzi.gif differ diff --git a/api/emotions/wabi.gif b/api/emotions/wabi.gif new file mode 100644 index 0000000..99139e1 Binary files /dev/null and b/api/emotions/wabi.gif differ diff --git a/api/emotions/weiqu.gif b/api/emotions/weiqu.gif new file mode 100644 index 0000000..dcfa48a Binary files /dev/null and b/api/emotions/weiqu.gif differ diff --git a/api/emotions/weixiao.gif b/api/emotions/weixiao.gif new file mode 100644 index 0000000..5be27cb Binary files /dev/null and b/api/emotions/weixiao.gif differ diff --git a/api/emotions/wen.gif b/api/emotions/wen.gif new file mode 100644 index 0000000..772eff2 Binary files /dev/null and b/api/emotions/wen.gif differ diff --git a/api/emotions/woshou.gif b/api/emotions/woshou.gif new file mode 100644 index 0000000..2329101 Binary files /dev/null and b/api/emotions/woshou.gif differ diff --git a/api/emotions/xia.gif b/api/emotions/xia.gif new file mode 100644 index 0000000..56352dd Binary files /dev/null and b/api/emotions/xia.gif differ diff --git a/api/emotions/xianwen.gif b/api/emotions/xianwen.gif new file mode 100644 index 0000000..748ded1 Binary files /dev/null and b/api/emotions/xianwen.gif differ diff --git a/api/emotions/xigua.gif b/api/emotions/xigua.gif new file mode 100644 index 0000000..edf96f0 Binary files /dev/null and b/api/emotions/xigua.gif differ diff --git a/api/emotions/xinsui.gif b/api/emotions/xinsui.gif new file mode 100644 index 0000000..51761ba Binary files /dev/null and b/api/emotions/xinsui.gif differ diff --git a/api/emotions/xu.gif b/api/emotions/xu.gif new file mode 100644 index 0000000..217c1c5 Binary files /dev/null and b/api/emotions/xu.gif differ diff --git a/api/emotions/yinxian.gif b/api/emotions/yinxian.gif new file mode 100644 index 0000000..69f183f Binary files /dev/null and b/api/emotions/yinxian.gif differ diff --git a/api/emotions/yongbao.gif b/api/emotions/yongbao.gif new file mode 100644 index 0000000..d0d0856 Binary files /dev/null and b/api/emotions/yongbao.gif differ diff --git a/api/emotions/youhengheng.gif b/api/emotions/youhengheng.gif new file mode 100644 index 0000000..f3cb074 Binary files /dev/null and b/api/emotions/youhengheng.gif differ diff --git a/api/emotions/youtaiji.gif b/api/emotions/youtaiji.gif new file mode 100644 index 0000000..d7c2066 Binary files /dev/null and b/api/emotions/youtaiji.gif differ diff --git a/api/emotions/yueliang.gif b/api/emotions/yueliang.gif new file mode 100644 index 0000000..9cb9aa7 Binary files /dev/null and b/api/emotions/yueliang.gif differ diff --git a/api/emotions/yun.gif b/api/emotions/yun.gif new file mode 100644 index 0000000..e9d4213 Binary files /dev/null and b/api/emotions/yun.gif differ diff --git a/api/emotions/zaijian.gif b/api/emotions/zaijian.gif new file mode 100644 index 0000000..734f6d8 Binary files /dev/null and b/api/emotions/zaijian.gif differ diff --git a/api/emotions/zhadan.gif b/api/emotions/zhadan.gif new file mode 100644 index 0000000..24284cf Binary files /dev/null and b/api/emotions/zhadan.gif differ diff --git a/api/emotions/zhemo.gif b/api/emotions/zhemo.gif new file mode 100644 index 0000000..d6da2c3 Binary files /dev/null and b/api/emotions/zhemo.gif differ diff --git a/api/emotions/zhuakuang.gif b/api/emotions/zhuakuang.gif new file mode 100644 index 0000000..b6af218 Binary files /dev/null and b/api/emotions/zhuakuang.gif differ diff --git a/api/emotions/zhuanquan.gif b/api/emotions/zhuanquan.gif new file mode 100644 index 0000000..5ef6d38 Binary files /dev/null and b/api/emotions/zhuanquan.gif differ diff --git a/api/emotions/zhutou.gif b/api/emotions/zhutou.gif new file mode 100644 index 0000000..8d5c4fd Binary files /dev/null and b/api/emotions/zhutou.gif differ diff --git a/api/emotions/zuohengheng.gif b/api/emotions/zuohengheng.gif new file mode 100644 index 0000000..5c8e071 Binary files /dev/null and b/api/emotions/zuohengheng.gif differ diff --git a/api/emotions/zuotaiji.gif b/api/emotions/zuotaiji.gif new file mode 100644 index 0000000..be9eaa0 Binary files /dev/null and b/api/emotions/zuotaiji.gif differ diff --git a/api/emotions/zuqiu.gif b/api/emotions/zuqiu.gif new file mode 100644 index 0000000..7e113ee Binary files /dev/null and b/api/emotions/zuqiu.gif differ diff --git a/api/pay/.DS_Store b/api/pay/.DS_Store new file mode 100644 index 0000000..8d08f40 Binary files /dev/null and b/api/pay/.DS_Store differ diff --git a/api/pay/alipay/alipay_core.function.php b/api/pay/alipay/alipay_core.function.php new file mode 100644 index 0000000..023e96e --- /dev/null +++ b/api/pay/alipay/alipay_core.function.php @@ -0,0 +1,201 @@ +\n"); + } else { + if (trim($input_charset) == '') { + fputs($fp, "POST ".$urlarr["path"]." HTTP/1.1\r\n"); + } + else { + fputs($fp, "POST ".$urlarr["path"].'?_input_charset='.$input_charset." HTTP/1.1\r\n"); + } + fputs($fp, "Host: ".$urlarr["host"]."\r\n"); + fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n"); + fputs($fp, "Content-length: ".strlen($urlarr["query"])."\r\n"); + fputs($fp, "Connection: close\r\n\r\n"); + fputs($fp, $urlarr["query"] . "\r\n\r\n"); + while(!feof($fp)) { + $responseText .= @fgets($fp, 1024); + } + fclose($fp); + $responseText = trim(stristr($responseText,"\r\n\r\n"),"\r\n"); + + return $responseText; + } +} +/** + * 实现多种字符编码方式 + * @param $input 需要编码的字符串 + * @param $_output_charset 输出的编码格式 + * @param $_input_charset 输入的编码格式 + * return 编码后的字符串 + */ +function charsetEncode($input,$_output_charset ,$_input_charset) { + $output = ""; + if(!isset($_output_charset) )$_output_charset = $_input_charset; + if($_input_charset == $_output_charset || $input ==null ) { + $output = $input; + } elseif (function_exists("mb_convert_encoding")) { + $output = mb_convert_encoding($input,$_output_charset,$_input_charset); + } elseif(function_exists("iconv")) { + $output = iconv($_input_charset,$_output_charset,$input); + } else die("sorry, you have no libs support for charset change."); + return $output; +} +/** + * 实现多种字符解码方式 + * @param $input 需要解码的字符串 + * @param $_output_charset 输出的解码格式 + * @param $_input_charset 输入的解码格式 + * return 解码后的字符串 + */ +function charsetDecode($input,$_input_charset ,$_output_charset) { + $output = ""; + if(!isset($_input_charset) )$_input_charset = $_input_charset ; + if($_input_charset == $_output_charset || $input ==null ) { + $output = $input; + } elseif (function_exists("mb_convert_encoding")) { + $output = mb_convert_encoding($input,$_output_charset,$_input_charset); + } elseif(function_exists("iconv")) { + $output = iconv($_input_charset,$_output_charset,$input); + } else die("sorry, you have no libs support for charset changes."); + return $output; +} +?> \ No newline at end of file diff --git a/api/pay/alipay/alipay_notify.class.php b/api/pay/alipay/alipay_notify.class.php new file mode 100644 index 0000000..98b756f --- /dev/null +++ b/api/pay/alipay/alipay_notify.class.php @@ -0,0 +1,140 @@ +aliapy_config = $aliapy_config; + } + function AlipayNotify($aliapy_config) { + $this->__construct($aliapy_config); + } + /** + * 针对notify_url验证消息是否是支付宝发出的合法消息 + * @return 验证结果 + */ + function verifyNotify(){ + if(empty($_POST)) {//判断POST来的数组是否为空 + return false; + } + else { + //生成签名结果 + $mysign = $this->getMysign($_POST); + //获取支付宝远程服务器ATN结果(验证是否是支付宝发来的消息) + $responseTxt = 'true'; + if (! empty($_POST["notify_id"])) {$responseTxt = $this->getResponse($_POST["notify_id"]);} + + //写日志记录 + //$log_text = "responseTxt=".$responseTxt."\n notify_url_log:sign=".$_POST["sign"]."&mysign=".$mysign.","; + //$log_text = $log_text.createLinkString($_POST); + //logResult($log_text); + + //验证 + //$responsetTxt的结果不是true,与服务器设置问题、合作身份者ID、notify_id一分钟失效有关 + //mysign与sign不等,与安全校验码、请求时的参数格式(如:带自定义参数等)、编码格式有关 + if (preg_match("/true$/i",$responseTxt) && $mysign == $_POST["sign"]) { + return true; + } else { + return false; + } + } + } + + /** + * 针对return_url验证消息是否是支付宝发出的合法消息 + * @return 验证结果 + */ + function verifyReturn(){ + if(empty($_GET)) {//判断POST来的数组是否为空 + return false; + } + else { + //生成签名结果 + $mysign = $this->getMysign($_GET); + //获取支付宝远程服务器ATN结果(验证是否是支付宝发来的消息) + $responseTxt = 'true'; + if (! empty($_GET["notify_id"])) {$responseTxt = $this->getResponse($_GET["notify_id"]);} + + //写日志记录 + //$log_text = "responseTxt=".$responseTxt."\n notify_url_log:sign=".$_GET["sign"]."&mysign=".$mysign.","; + //$log_text = $log_text.createLinkString($_GET); + //logResult($log_text); + + //验证 + //$responsetTxt的结果不是true,与服务器设置问题、合作身份者ID、notify_id一分钟失效有关 + //mysign与sign不等,与安全校验码、请求时的参数格式(如:带自定义参数等)、编码格式有关 + if (preg_match("/true$/i",$responseTxt) && $mysign == $_GET["sign"]) { + return true; + } else { + return false; + } + } + } + + /** + * 根据反馈回来的信息,生成签名结果 + * @param $para_temp 通知返回来的参数数组 + * @return 生成的签名结果 + */ + function getMysign($para_temp) { + //除去待签名参数数组中的空值和签名参数 + $para_filter = paraFilter($para_temp); + + //对待签名参数数组排序 + $para_sort = argSort($para_filter); + + //生成签名结果 + $mysign = buildMysign($para_sort, trim($this->aliapy_config['key']), strtoupper(trim($this->aliapy_config['sign_type']))); + + return $mysign; + } + + /** + * 获取远程服务器ATN结果,验证返回URL + * @param $notify_id 通知校验ID + * @return 服务器ATN结果 + * 验证结果集: + * invalid命令参数不对 出现这个错误,请检测返回处理中partner和key是否为空 + * true 返回正确信息 + * false 请检查防火墙或者是服务器阻止端口问题以及验证时间是否超过一分钟 + */ + function getResponse($notify_id) { + $transport = strtolower(trim($this->aliapy_config['transport'])); + $partner = trim($this->aliapy_config['partner']); + $veryfy_url = ''; + if($transport == 'https') { + $veryfy_url = $this->https_verify_url; + } + else { + $veryfy_url = $this->http_verify_url; + } + $veryfy_url = $veryfy_url."partner=" . $partner . "¬ify_id=" . $notify_id; + $responseTxt = getHttpResponse($veryfy_url); + + return $responseTxt; + } +} +?> diff --git a/api/pay/alipay/alipay_service.class.php b/api/pay/alipay/alipay_service.class.php new file mode 100644 index 0000000..63ad279 --- /dev/null +++ b/api/pay/alipay/alipay_service.class.php @@ -0,0 +1,78 @@ +aliapy_config = $aliapy_config; + } + function AlipayService($aliapy_config) { + $this->__construct($aliapy_config); + } + /** + * 构造即时到帐接口 + * @param $para_temp 请求参数数组 + * @return 表单提交HTML信息 + */ + function create_direct_pay_by_user($para_temp) { + //设置按钮名称 + $button_name = ""; + //生成表单提交HTML文本信息 + $alipaySubmit = new AlipaySubmit(); + $html_text = $alipaySubmit->buildForm($para_temp, $this->alipay_gateway_new, "get", $button_name,$this->aliapy_config); + + return $html_text; + } + + /** + * 用于防钓鱼,调用接口query_timestamp来获取时间戳的处理函数 + * 注意:该功能PHP5环境及以上支持,因此必须服务器、本地电脑中装有支持DOMDocument、SSL的PHP配置环境。建议本地调试时使用PHP开发软件 + * return 时间戳字符串 + */ + function query_timestamp() { + $url = $this->alipay_gateway_new."service=query_timestamp&partner=".trim($this->aliapy_config['partner']); + $encrypt_key = ""; + + $doc = new DOMDocument(); + $doc->load($url); + $itemEncrypt_key = $doc->getElementsByTagName( "encrypt_key" ); + $encrypt_key = $itemEncrypt_key->item(0)->nodeValue; + + return $encrypt_key; + } + + /** + * 构造支付宝其他接口 + * @param $para_temp 请求参数数组 + * @return 表单提交HTML信息/支付宝返回XML处理结果 + */ + function alipay_interface($para_temp) { + //获取远程数据 + $alipaySubmit = new AlipaySubmit(); + $html_text = ""; + //请根据不同的接口特性,选择一种请求方式 + //1.构造表单提交HTML数据:($method可赋值为get或post) + //$alipaySubmit->buildForm($para_temp, $this->alipay_gateway, "get", $button_name,$this->aliapy_config); + //2.构造模拟远程HTTP的POST请求,获取支付宝的返回XML处理结果: + //注意:若要使用远程HTTP获取数据,必须开通SSL服务,该服务请找到php.ini配置文件设置开启,建议与您的网络管理员联系解决。 + //$alipaySubmit->sendPostInfo($para_temp, $this->alipay_gateway, $this->aliapy_config); + + return $html_text; + } +} +?> \ No newline at end of file diff --git a/api/pay/alipay/alipay_submit.class.php b/api/pay/alipay/alipay_submit.class.php new file mode 100644 index 0000000..64d7078 --- /dev/null +++ b/api/pay/alipay/alipay_submit.class.php @@ -0,0 +1,101 @@ +buildRequestPara($para_temp,$aliapy_config); + + //把参数组中所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串,并对参数值做urlencode编码 + $request_data = createLinkstringUrlencode($para); + + return $request_data; + } + + /** + * 构造提交表单HTML数据 + * @param $para_temp 请求参数数组 + * @param $gateway 网关地址 + * @param $method 提交方式。两个值可选:post、get + * @param $button_name 确认按钮显示文字 + * @return 提交表单HTML文本 + */ + function buildForm($para_temp, $gateway, $method, $button_name, $aliapy_config) { + //待请求参数数组 + $para = $this->buildRequestPara($para_temp,$aliapy_config); + + $sHtml = "
"; + while (list ($key, $val) = each ($para)) { + $sHtml.= "" . PHP_EOL; + } + + //submit按钮控件请不要含有name属性 + $sHtml = $sHtml."
"; + $sHtml = $sHtml.""; + + return $sHtml; + } + + /** + * 构造模拟远程HTTP的POST请求,获取支付宝的返回XML处理结果 + * 注意:该功能PHP5环境及以上支持,因此必须服务器、本地电脑中装有支持DOMDocument、SSL的PHP配置环境。建议本地调试时使用PHP开发软件 + * @param $para_temp 请求参数数组 + * @param $gateway 网关地址 + * @param $aliapy_config 基本配置信息数组 + * @return 支付宝返回XML处理结果 + */ + function sendPostInfo($para_temp, $gateway, $aliapy_config) { + $xml_str = ''; + + //待请求参数数组字符串 + $request_data = $this->buildRequestParaToString($para_temp,$aliapy_config); + //请求的url完整链接 + $url = $gateway . $request_data; + //远程获取数据 + $xml_data = getHttpResponse($url,trim(strtolower($aliapy_config['input_charset']))); + //解析XML + $doc = new DOMDocument(); + $doc->loadXML($xml_data); + + return $doc; + } +} +?> \ No newline at end of file diff --git a/api/pay/alipay/call.php b/api/pay/alipay/call.php new file mode 100644 index 0000000..56cac63 --- /dev/null +++ b/api/pay/alipay/call.php @@ -0,0 +1,54 @@ + $pay['key'], + 'partner' => $pay['id'], + 'sign_type' => 'MD5', + 'transport' => 'http', + 'return_url' => SITE_URL.'api/pay/alipay/return_url.php', + 'notify_url' => SITE_URL.'api/pay/alipay/notify_url.php', + 'seller_email' => $pay['username'], + 'input_charset' => 'utf-8', +); + +if (DR_PAY_FILE == 'return') { + require WEBPATH.'api/pay/alipay/alipay_notify.class.php'; + $alipayNotify = new AlipayNotify($alipay_config); + if ($verify_result = $alipayNotify->verifyReturn()) { + //验证成功 + $trade_no = $_GET['trade_no']; //获取支付宝交易号 + $total_fee = $_GET['total_fee']; //获取总价格 + $out_trade_no = $_GET['out_trade_no']; //获取订单号 + if ($_GET['trade_status'] == 'TRADE_FINISHED' || $_GET['trade_status'] == 'TRADE_SUCCESS') { + $money = number_format($total_fee, 2, '.', ''); + $module = $this->pay_model->pay_success($out_trade_no, $money, '交易号:'.$trade_no); + $this->pay_msg( + "即时到帐支付成功($money)", + SITE_URL.'index.php?s=member&c=pay&m=call&module='.$module, + 1 + ); + } else { + $this->pay_msg('trade_status='.$_GET['trade_status']); + } + } else { + //验证失败 + $this->pay_msg('验证失败'); + } +} else { + require WEBPATH.'api/pay/alipay/alipay_notify.class.php'; + //计算得出通知验证结果 + $alipayNotify = new AlipayNotify($alipay_config); + if ($verify_result = $alipayNotify->verifyNotify()) { + //验证成功 + $trade_no = $_POST['trade_no']; //获取支付宝交易号 + $total_fee = $_POST['total_fee']; //获取总价格 + $out_trade_no = $_POST['out_trade_no']; //获取订单号 + $this->pay_model->pay_success($out_trade_no, number_format($total_fee, 2, '.', ''), '交易号:'.$trade_no); + echo "success"; //请不要修改或删除 + } else { + //验证失败 + echo "fail"; + } +} \ No newline at end of file diff --git a/api/pay/alipay/config.php b/api/pay/alipay/config.php new file mode 100644 index 0000000..ec05e09 --- /dev/null +++ b/api/pay/alipay/config.php @@ -0,0 +1,21 @@ + 1, //1 + 'username' => '1328900140@qq.com', //1328900140@qq.com + 'id' => '2088131382468772', //2088131382468772 + 'key' => 'z5l976geltamvuev8lmtidop2n89fsxn', //z5l976geltamvuev8lmtidop2n89fsxn + 'name' => '支付宝', //支付宝 + +); \ No newline at end of file diff --git a/api/pay/alipay/logo.png b/api/pay/alipay/logo.png new file mode 100644 index 0000000..c3c2d6a Binary files /dev/null and b/api/pay/alipay/logo.png differ diff --git a/api/pay/alipay/notify_url.php b/api/pay/alipay/notify_url.php new file mode 100644 index 0000000..58e3731 --- /dev/null +++ b/api/pay/alipay/notify_url.php @@ -0,0 +1,6 @@ +mobile && $pay['wap']) { + // 手机接口 + + $alipay_config['return_url'] = SITE_URL.'api/pay/alipay/wap_return_url.php'; + $alipay_config['notify_url'] = SITE_URL.'api/pay/alipay/wap_notify_url.php'; + + require_once(WEBPATH.'api/pay/alipay/wap/alipay_submit.class.php'); + + /**************************调用授权接口alipay.wap.trade.create.direct获取授权码token**************************/ + //返回格式 + $format = "xml"; + $v = "2.0"; + $req_id = date('Ymdhis').rand(0, 9999); + //必填,须保证每次请求都是唯一 + + //**req_data详细信息** + $notify_url = $alipay_config['notify_url']; + $call_back_url = $alipay_config['return_url']; + $merchant_url = SITE_URL; + $seller_email = $alipay_config['seller_email']; + $out_trade_no = $sn; + $subject = $title; + $total_fee = $money; + $req_data = '' . $notify_url . '' . $call_back_url . '' . $seller_email . '' . $out_trade_no . '' . $subject . '' . $total_fee . '' . $merchant_url . ''; + + /************************************************************/ + + //构造要请求的参数数组,无需改动 + $para_token = array( + "service" => "alipay.wap.trade.create.direct", + "partner" => trim($alipay_config['partner']), + "sec_id" => trim($alipay_config['sign_type']), + "format" => $format, + "v" => $v, + "app_pay" => "Y", + "req_id" => $req_id, + "req_data" => $req_data, + "_input_charset" => trim(strtolower($alipay_config['input_charset'])) + ); + + //建立请求 + $alipaySubmit = new AlipaySubmit($alipay_config); + + $html_text = $alipaySubmit->buildRequestHttp($para_token); + + //URLDECODE返回的信息 + $html_text = urldecode($html_text); + + //解析远程模拟提交后返回的信息 + $para_html_text = $alipaySubmit->parseResponse($html_text); + + //获取request_token + $request_token = $para_html_text['request_token']; + + + /**************************根据授权码token调用交易接口alipay.wap.auth.authAndExecute**************************/ + + $req_data = '' . $request_token . ''; + + //构造要请求的参数数组,无需改动 + $parameter = array( + "service" => "alipay.wap.auth.authAndExecute", + "partner" => trim($alipay_config['partner']), + "sec_id" => trim($alipay_config['sign_type']), + "format" => $format, + "v" => $v, + "req_id" => $req_id, + "req_data" => $req_data, + "_input_charset" => trim(strtolower($alipay_config['input_charset'])) + ); + + //建立请求 + $alipaySubmit = new AlipaySubmit($alipay_config); + $result['form'] = $alipaySubmit->buildRequestForm($parameter, 'get', '确认'); + +} else { + // PC 接口 + + require WEBPATH.'api/pay/alipay/alipay_submit.class.php'; + require WEBPATH.'api/pay/alipay/alipay_service.class.php'; + + /**************************请求参数**************************/ + + //构造要请求的参数数组 + $parameter = array( + 'service' => 'create_direct_pay_by_user', + 'payment_type' => '1', + + 'partner' => trim($alipay_config['partner']), + '_input_charset' => trim(strtolower($alipay_config['input_charset'])), + 'seller_email' => trim($alipay_config['seller_email']), + 'return_url' => trim($alipay_config['return_url']), + 'notify_url' => trim($alipay_config['notify_url']), + + 'out_trade_no' => $sn, + 'subject' => $title, + 'body' => fc_lang('会员(%s)支付订单ID:%s', $this->member['username'], $id), + 'total_fee' => $money, + ); + + //构造即时到帐接口 + $alipayService = new AlipayService($alipay_config); + $result['form'] = $alipayService->create_direct_pay_by_user($parameter); +} \ No newline at end of file diff --git a/api/pay/alipay/return_url.php b/api/pay/alipay/return_url.php new file mode 100644 index 0000000..bc36070 --- /dev/null +++ b/api/pay/alipay/return_url.php @@ -0,0 +1,6 @@ + + 启用手机接口: + checked="checked" value="1" /> + + + 支付宝账号(Email): + + + 合作者身份(parterID): + + + + 交易安全校验码(key): + + \ No newline at end of file diff --git a/api/pay/alipay/wap/alipay_core.function.php b/api/pay/alipay/wap/alipay_core.function.php new file mode 100644 index 0000000..4f8dc58 --- /dev/null +++ b/api/pay/alipay/wap/alipay_core.function.php @@ -0,0 +1,176 @@ + \ No newline at end of file diff --git a/api/pay/alipay/wap/alipay_md5.function.php b/api/pay/alipay/wap/alipay_md5.function.php new file mode 100644 index 0000000..7bb643f --- /dev/null +++ b/api/pay/alipay/wap/alipay_md5.function.php @@ -0,0 +1,41 @@ + \ No newline at end of file diff --git a/api/pay/alipay/wap/alipay_notify.class.php b/api/pay/alipay/wap/alipay_notify.class.php new file mode 100644 index 0000000..1331ddf --- /dev/null +++ b/api/pay/alipay/wap/alipay_notify.class.php @@ -0,0 +1,207 @@ +alipay_config = $alipay_config; + } + function AlipayNotify($alipay_config) { + $this->__construct($alipay_config); + } + /** + * 针对notify_url验证消息是否是支付宝发出的合法消息 + * @return 验证结果 + */ + function verifyNotify(){ + if(empty($_POST)) {//判断POST来的数组是否为空 + return false; + } + else { + + //对notify_data解密 + $decrypt_post_para = $_POST; + if ($this->alipay_config['sign_type'] == '0001') { + $decrypt_post_para['notify_data'] = rsaDecrypt($decrypt_post_para['notify_data'], $this->alipay_config['private_key_path']); + } + + //notify_id从decrypt_post_para中解析出来(也就是说decrypt_post_para中已经包含notify_id的内容) + $doc = new DOMDocument(); + $doc->loadXML($decrypt_post_para['notify_data']); + $notify_id = $doc->getElementsByTagName( "notify_id" )->item(0)->nodeValue; + + //获取支付宝远程服务器ATN结果(验证是否是支付宝发来的消息) + $responseTxt = 'true'; + if (! empty($notify_id)) {$responseTxt = $this->getResponse($notify_id);} + + //生成签名结果 + $isSign = $this->getSignVeryfy($decrypt_post_para, $_POST["sign"],false); + + //写日志记录 + //if ($isSign) { + // $isSignStr = 'true'; + //} + //else { + // $isSignStr = 'false'; + //} + //$log_text = "responseTxt=".$responseTxt."\n notify_url_log:isSign=".$isSignStr.","; + //$log_text = $log_text.createLinkString($_POST); + //logResult($log_text); + + //验证 + //$responsetTxt的结果不是true,与服务器设置问题、合作身份者ID、notify_id一分钟失效有关 + //isSign的结果不是true,与安全校验码、请求时的参数格式(如:带自定义参数等)、编码格式有关 + if (preg_match("/true$/i",$responseTxt) && $isSign) { + return true; + } else { + return false; + } + } + } + + /** + * 针对return_url验证消息是否是支付宝发出的合法消息 + * @return 验证结果 + */ + function verifyReturn(){ + if(empty($_GET)) {//判断GET来的数组是否为空 + return false; + } + else { + //生成签名结果 + $isSign = $this->getSignVeryfy($_GET, $_GET["sign"],true); + + //写日志记录 + //if ($isSign) { + // $isSignStr = 'true'; + //} + //else { + // $isSignStr = 'false'; + //} + //$log_text = "return_url_log:isSign=".$isSignStr.","; + //$log_text = $log_text.createLinkString($_GET); + //logResult($log_text); + + //验证 + //$responsetTxt的结果不是true,与服务器设置问题、合作身份者ID、notify_id一分钟失效有关 + //isSign的结果不是true,与安全校验码、请求时的参数格式(如:带自定义参数等)、编码格式有关 + if ($isSign) { + return true; + } else { + return false; + } + } + } + + /** + * 解密 + * @param $input_para 要解密数据 + * @return 解密后结果 + */ + function decrypt($prestr) { + return rsaDecrypt($prestr, trim($this->alipay_config['private_key_path'])); + } + + /** + * 异步通知时,对参数做固定排序 + * @param $para 排序前的参数组 + * @return 排序后的参数组 + */ + function sortNotifyPara($para) { + $para_sort['service'] = $para['service']; + $para_sort['v'] = $para['v']; + $para_sort['sec_id'] = $para['sec_id']; + $para_sort['notify_data'] = $para['notify_data']; + return $para_sort; + } + + /** + * 获取返回时的签名验证结果 + * @param $para_temp 通知返回来的参数数组 + * @param $sign 返回的签名结果 + * @param $isSort 是否对待签名数组排序 + * @return 签名验证结果 + */ + function getSignVeryfy($para_temp, $sign, $isSort) { + //除去待签名参数数组中的空值和签名参数 + $para = paraFilter($para_temp); + + //对待签名参数数组排序 + if($isSort) { + $para = argSort($para); + } else { + $para = $this->sortNotifyPara($para); + } + + //把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串 + $prestr = createLinkstring($para); + + $isSgin = false; + switch (strtoupper(trim($this->alipay_config['sign_type']))) { + case "MD5" : + $isSgin = md5Verify($prestr, $sign, $this->alipay_config['key']); + break; + case "RSA" : + $isSgin = rsaVerify($prestr, trim($this->alipay_config['ali_public_key_path']), $sign); + break; + case "0001" : + $isSgin = rsaVerify($prestr, trim($this->alipay_config['ali_public_key_path']), $sign); + break; + default : + $isSgin = false; + } + + return $isSgin; + } + + /** + * 获取远程服务器ATN结果,验证返回URL + * @param $notify_id 通知校验ID + * @return 服务器ATN结果 + * 验证结果集: + * invalid命令参数不对 出现这个错误,请检测返回处理中partner和key是否为空 + * true 返回正确信息 + * false 请检查防火墙或者是服务器阻止端口问题以及验证时间是否超过一分钟 + */ + function getResponse($notify_id) { + $transport = strtolower(trim($this->alipay_config['transport'])); + $partner = trim($this->alipay_config['partner']); + $veryfy_url = ''; + if($transport == 'https') { + $veryfy_url = $this->https_verify_url; + } + else { + $veryfy_url = $this->http_verify_url; + } + $veryfy_url = $veryfy_url."partner=" . $partner . "¬ify_id=" . $notify_id; + $responseTxt = getHttpResponseGET($veryfy_url, $this->alipay_config['cacert']); + + return $responseTxt; + } +} +?> diff --git a/api/pay/alipay/wap/alipay_rsa.function.php b/api/pay/alipay/wap/alipay_rsa.function.php new file mode 100644 index 0000000..8c3ff73 --- /dev/null +++ b/api/pay/alipay/wap/alipay_rsa.function.php @@ -0,0 +1,64 @@ + \ No newline at end of file diff --git a/api/pay/alipay/wap/alipay_submit.class.php b/api/pay/alipay/wap/alipay_submit.class.php new file mode 100644 index 0000000..87327c9 --- /dev/null +++ b/api/pay/alipay/wap/alipay_submit.class.php @@ -0,0 +1,212 @@ +alipay_config = $alipay_config; + } + function AlipaySubmit($alipay_config) { + $this->__construct($alipay_config); + } + + /** + * 生成签名结果 + * @param $para_sort 已排序要签名的数组 + * return 签名结果字符串 + */ + function buildRequestMysign($para_sort) { + //把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串 + $prestr = createLinkstring($para_sort); + + $mysign = ""; + switch (strtoupper(trim($this->alipay_config['sign_type']))) { + case "MD5" : + $mysign = md5Sign($prestr, $this->alipay_config['key']); + break; + case "RSA" : + $mysign = rsaSign($prestr, $this->alipay_config['private_key_path']); + break; + case "0001" : + $mysign = rsaSign($prestr, $this->alipay_config['private_key_path']); + break; + default : + $mysign = ""; + } + + return $mysign; + } + + /** + * 生成要请求给支付宝的参数数组 + * @param $para_temp 请求前的参数数组 + * @return 要请求的参数数组 + */ + function buildRequestPara($para_temp) { + //除去待签名参数数组中的空值和签名参数 + $para_filter = paraFilter($para_temp); + + //对待签名参数数组排序 + $para_sort = argSort($para_filter); + + //生成签名结果 + $mysign = $this->buildRequestMysign($para_sort); + + //签名结果与签名方式加入请求提交参数组中 + $para_sort['sign'] = $mysign; + if($para_sort['service'] != 'alipay.wap.trade.create.direct' && $para_sort['service'] != 'alipay.wap.auth.authAndExecute') { + $para_sort['sign_type'] = strtoupper(trim($this->alipay_config['sign_type'])); + } + + return $para_sort; + } + + /** + * 生成要请求给支付宝的参数数组 + * @param $para_temp 请求前的参数数组 + * @return 要请求的参数数组字符串 + */ + function buildRequestParaToString($para_temp) { + //待请求参数数组 + $para = $this->buildRequestPara($para_temp); + + //把参数组中所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串,并对字符串做urlencode编码 + $request_data = createLinkstringUrlencode($para); + + return $request_data; + } + + /** + * 建立请求,以表单HTML形式构造(默认) + * @param $para_temp 请求参数数组 + * @param $method 提交方式。两个值可选:post、get + * @param $button_name 确认按钮显示文字 + * @return 提交表单HTML文本 + */ + function buildRequestForm($para_temp, $method, $button_name) { + //待请求参数数组 + $para = $this->buildRequestPara($para_temp); + + $sHtml = "
"; + while (list ($key, $val) = each ($para)) { + $sHtml.= ""; + } + + //submit按钮控件请不要含有name属性 + $sHtml = $sHtml."
"; + + $sHtml = $sHtml.""; + + return $sHtml; + } + + /** + * 建立请求,以模拟远程HTTP的POST请求方式构造并获取支付宝的处理结果 + * @param $para_temp 请求参数数组 + * @return 支付宝处理结果 + */ + function buildRequestHttp($para_temp) { + $sResult = ''; + + //待请求参数数组字符串 + $request_data = $this->buildRequestPara($para_temp); + + //远程获取数据 + $sResult = getHttpResponsePOST($this->alipay_gateway_new, $this->alipay_config['cacert'],$request_data,trim(strtolower($this->alipay_config['input_charset']))); + + return $sResult; + } + + /** + * 建立请求,以模拟远程HTTP的POST请求方式构造并获取支付宝的处理结果,带文件上传功能 + * @param $para_temp 请求参数数组 + * @param $file_para_name 文件类型的参数名 + * @param $file_name 文件完整绝对路径 + * @return 支付宝返回处理结果 + */ + function buildRequestHttpInFile($para_temp, $file_para_name, $file_name) { + + //待请求参数数组 + $para = $this->buildRequestPara($para_temp); + $para[$file_para_name] = "@".$file_name; + + //远程获取数据 + $sResult = getHttpResponsePOST($this->alipay_gateway_new, $this->alipay_config['cacert'],$para,trim(strtolower($this->alipay_config['input_charset']))); + + return $sResult; + } + + /** + * 解析远程模拟提交后返回的信息 + * @param $str_text 要解析的字符串 + * @return 解析结果 + */ + function parseResponse($str_text) { + //以“&”字符切割字符串 + $para_split = explode('&',$str_text); + //把切割后的字符串数组变成变量与数值组合的数组 + foreach ($para_split as $item) { + //获得第一个=字符的位置 + $nPos = strpos($item,'='); + //获得字符串长度 + $nLen = strlen($item); + //获得变量名 + $key = substr($item,0,$nPos); + //获得数值 + $value = substr($item,$nPos+1,$nLen-$nPos-1); + //放入数组中 + $para_text[$key] = $value; + } + + if( ! empty ($para_text['res_data'])) { + //解析加密部分字符串 + if($this->alipay_config['sign_type'] == '0001') { + $para_text['res_data'] = rsaDecrypt($para_text['res_data'], $this->alipay_config['private_key_path']); + } + + //token从res_data中解析出来(也就是说res_data中已经包含token的内容) + $doc = new DOMDocument(); + $doc->loadXML($para_text['res_data']); + $para_text['request_token'] = $doc->getElementsByTagName( "request_token" )->item(0)->nodeValue; + } + + return $para_text; + } + + /** + * 用于防钓鱼,调用接口query_timestamp来获取时间戳的处理函数 + * 注意:该功能PHP5环境及以上支持,因此必须服务器、本地电脑中装有支持DOMDocument、SSL的PHP配置环境。建议本地调试时使用PHP开发软件 + * return 时间戳字符串 + */ + function query_timestamp() { + $url = $this->alipay_gateway_new."service=query_timestamp&partner=".trim(strtolower($this->alipay_config['partner']))."&_input_charset=".trim(strtolower($this->alipay_config['input_charset'])); + $encrypt_key = ""; + + $doc = new DOMDocument(); + $doc->load($url); + $itemEncrypt_key = $doc->getElementsByTagName( "encrypt_key" ); + $encrypt_key = $itemEncrypt_key->item(0)->nodeValue; + + return $encrypt_key; + } +} +?> \ No newline at end of file diff --git a/api/pay/alipay/wap/call.php b/api/pay/alipay/wap/call.php new file mode 100644 index 0000000..602e3d1 --- /dev/null +++ b/api/pay/alipay/wap/call.php @@ -0,0 +1,63 @@ + $pay['key'], + 'partner' => $pay['id'], + 'sign_type' => 'MD5', + 'transport' => 'http', + 'return_url' => SITE_URL.'api/pay/alipay/wap_return_url.php', + 'notify_url' => SITE_URL.'api/pay/alipay/wap_notify_url.php', + 'seller_email' => $pay['username'], + 'input_charset' => 'utf-8', +); + +require WEBPATH.'api/pay/alipay/wap/alipay_notify.class.php'; + +if (DR_PAY_FILE == 'return') { + //计算得出通知验证结果 + $alipayNotify = new AlipayNotify($alipay_config); + $verify_result = $alipayNotify->verifyReturn(); + if($verify_result) { + //验证成功 + $trade_no = $_GET['trade_no']; //获取支付宝交易号 + $total_fee = $_GET['total_fee']; //获取总价格 + $out_trade_no = $_GET['out_trade_no']; //获取订单号 + $money = number_format($total_fee, 2, '.', ''); + $module = $this->pay_model->pay_success($out_trade_no, $money, '交易号:'.$trade_no); + $this->pay_msg( + "支付成功", + SITE_URL.'index.php?s=member&c=pay&m=call&module='.$module, + 1 + ); + } else { + $this->pay_msg('验证失败'); + } +} else { + //计算得出通知验证结果 + $alipayNotify = new AlipayNotify($alipay_config); + $verify_result = $alipayNotify->verifyNotify(); + if($verify_result) { + //验证成功 + + //解密(如果是RSA签名需要解密,如果是MD5签名则下面一行清注释掉) + $notify_data = $alipayNotify->decrypt($_POST['notify_data']); + //获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表 + $doc = new DOMDocument(); + $doc->loadXML($notify_data); + if (!empty($doc->getElementsByTagName( "notify" )->item(0)->nodeValue)) { + //验证成功 + $trade_no =$doc->getElementsByTagName( "trade_no" )->item(0)->nodeValue; //获取支付宝交易号 + $total_fee = $doc->getElementsByTagName( "total_fee" )->item(0)->nodeValu; //获取总价格 + $out_trade_no = $doc->getElementsByTagName( "out_trade_no" )->item(0)->nodeValue; //获取订单号 + $this->pay_model->pay_success($out_trade_no, number_format($total_fee, 2, '.', ''), '交易号:'.$trade_no); + echo "success"; //请不要修改或删除 + } + } else { + //验证失败 + echo "fail"; + //调试用,写文本函数记录程序运行情况是否正常 + //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录"); + } +} \ No newline at end of file diff --git a/api/pay/alipay/wap_notify_url.php b/api/pay/alipay/wap_notify_url.php new file mode 100644 index 0000000..7d87d39 --- /dev/null +++ b/api/pay/alipay/wap_notify_url.php @@ -0,0 +1,6 @@ +IsOut_trade_noSet()) { + return dr_return_data(0, "缺少统一支付接口必填参数out_trade_no!"); + }else if(!$inputObj->IsBodySet()){ + return dr_return_data(0, "缺少统一支付接口必填参数body!"); + }else if(!$inputObj->IsTotal_feeSet()) { + return dr_return_data(0, "缺少统一支付接口必填参数total_fee!"); + }else if(!$inputObj->IsTrade_typeSet()) { + return dr_return_data(0, "缺少统一支付接口必填参数trade_type!"); + } + + //关联参数 + if($inputObj->GetTrade_type() == "JSAPI" && !$inputObj->IsOpenidSet()){ + return dr_return_data(0, "统一支付接口中,缺少必填参数openid!trade_type为JSAPI时,openid为必填参数!"); + } + + if($inputObj->GetTrade_type() == "NATIVE" && !$inputObj->IsProduct_idSet()){ + return dr_return_data(0, "统一支付接口中,缺少必填参数product_id!trade_type为JSAPI时,product_id为必填参数!"); + } + + //异步通知url未设置,则使用配置文件中的url + if(!$inputObj->IsNotify_urlSet()){ + $inputObj->SetNotify_url(NOTIFY_URL);//异步通知url + } + + $inputObj->SetAppid(APPID);//公众账号ID + $inputObj->SetMch_id(MCHID);//商户号 + $inputObj->SetSpbill_create_ip($_SERVER['REMOTE_ADDR']);//终端ip + //$inputObj->SetSpbill_create_ip("1.1.1.1"); + $inputObj->SetNonce_str(self::getNonceStr());//随机字符串 + + //签名 + $inputObj->SetSign(); + $xml = $inputObj->ToXml(); + + $startTimeStamp = self::getMillisecond();//请求开始时间 + $response = self::postXmlCurl($xml, $url, false, $timeOut); + if (strpos($response, '') === 0) { + $result = WxPayResults::Init($response); + if (isset($result['code']) && $result['code']==0) { + return $result; + } elseif (isset($result['return_code']) && $result['return_code']=='FAIL') { + return dr_return_data(0, $result['return_msg']); + } + + self::reportCostTime($url, $startTimeStamp, $result);//上报请求花费时间 + return $result; + } elseif (isset($response['code']) && $response['code']==0) { + return $response; + } else { + return dr_return_data(0, '无法从微信服务端获取fc需要的数据'); + } + } + + /** + * + * 查询订单,WxPayOrderQuery中out_trade_no、transaction_id至少填一个 + * appid、mchid、spbill_create_ip、nonce_str不需要填入 + * @param WxPayOrderQuery $inputObj + * @param int $timeOut + * @throws WxPayException + * @return 成功时返回,其他抛异常 + */ + public static function orderQuery($inputObj, $timeOut = 6) + { + $url = "https://api.mch.weixin.qq.com/pay/orderquery"; + //检测必填参数 + if(!$inputObj->IsOut_trade_noSet() && !$inputObj->IsTransaction_idSet()) { + return dr_return_data(0, "订单查询接口中,out_trade_no、transaction_id至少填一个!"); + } + $inputObj->SetAppid(APPID);//公众账号ID + $inputObj->SetMch_id(MCHID);//商户号 + $inputObj->SetNonce_str(self::getNonceStr());//随机字符串 + + $inputObj->SetSign();//签名 + $xml = $inputObj->ToXml(); + + $startTimeStamp = self::getMillisecond();//请求开始时间 + $response = self::postXmlCurl($xml, $url, false, $timeOut); + $result = WxPayResults::Init($response); + self::reportCostTime($url, $startTimeStamp, $result);//上报请求花费时间 + + return $result; + } + + /** + * + * 关闭订单,WxPayCloseOrder中out_trade_no必填 + * appid、mchid、spbill_create_ip、nonce_str不需要填入 + * @param WxPayCloseOrder $inputObj + * @param int $timeOut + * @throws WxPayException + * @return 成功时返回,其他抛异常 + */ + public static function closeOrder($inputObj, $timeOut = 6) + { + $url = "https://api.mch.weixin.qq.com/pay/closeorder"; + //检测必填参数 + if(!$inputObj->IsOut_trade_noSet()) { + return dr_return_data(0, "订单查询接口中,out_trade_no必填!"); + } + $inputObj->SetAppid(APPID);//公众账号ID + $inputObj->SetMch_id(MCHID);//商户号 + $inputObj->SetNonce_str(self::getNonceStr());//随机字符串 + + $inputObj->SetSign();//签名 + $xml = $inputObj->ToXml(); + + $startTimeStamp = self::getMillisecond();//请求开始时间 + $response = self::postXmlCurl($xml, $url, false, $timeOut); + $result = WxPayResults::Init($response); + self::reportCostTime($url, $startTimeStamp, $result);//上报请求花费时间 + + return $result; + } + + /** + * + * 申请退款,WxPayRefund中out_trade_no、transaction_id至少填一个且 + * out_refund_no、total_fee、refund_fee、op_user_id为必填参数 + * appid、mchid、spbill_create_ip、nonce_str不需要填入 + * @param WxPayRefund $inputObj + * @param int $timeOut + * @throws WxPayException + * @return 成功时返回,其他抛异常 + */ + public static function refund($inputObj, $timeOut = 6) + { + $url = "https://api.mch.weixin.qq.com/secapi/pay/refund"; + //检测必填参数 + if(!$inputObj->IsOut_trade_noSet() && !$inputObj->IsTransaction_idSet()) { + return dr_return_data(0, "退款申请接口中,out_trade_no、transaction_id至少填一个!"); + }else if(!$inputObj->IsOut_refund_noSet()){ + return dr_return_data(0, "退款申请接口中,缺少必填参数out_refund_no!"); + }else if(!$inputObj->IsTotal_feeSet()){ + return dr_return_data(0, "退款申请接口中,缺少必填参数total_fee!"); + }else if(!$inputObj->IsRefund_feeSet()){ + return dr_return_data(0, "退款申请接口中,缺少必填参数refund_fee!"); + }else if(!$inputObj->IsOp_user_idSet()){ + return dr_return_data(0, "退款申请接口中,缺少必填参数op_user_id!"); + } + $inputObj->SetAppid(APPID);//公众账号ID + $inputObj->SetMch_id(MCHID);//商户号 + $inputObj->SetNonce_str(self::getNonceStr());//随机字符串 + + $inputObj->SetSign();//签名 + $xml = $inputObj->ToXml(); + $startTimeStamp = self::getMillisecond();//请求开始时间 + $response = self::postXmlCurl($xml, $url, true, $timeOut); + $result = WxPayResults::Init($response); + self::reportCostTime($url, $startTimeStamp, $result);//上报请求花费时间 + + return $result; + } + + /** + * + * 查询退款 + * 提交退款申请后,通过调用该接口查询退款状态。退款有一定延时, + * 用零钱支付的退款20分钟内到账,银行卡支付的退款3个工作日后重新查询退款状态。 + * WxPayRefundQuery中out_refund_no、out_trade_no、transaction_id、refund_id四个参数必填一个 + * appid、mchid、spbill_create_ip、nonce_str不需要填入 + * @param WxPayRefundQuery $inputObj + * @param int $timeOut + * @throws WxPayException + * @return 成功时返回,其他抛异常 + */ + public static function refundQuery($inputObj, $timeOut = 6) + { + $url = "https://api.mch.weixin.qq.com/pay/refundquery"; + //检测必填参数 + if(!$inputObj->IsOut_refund_noSet() && + !$inputObj->IsOut_trade_noSet() && + !$inputObj->IsTransaction_idSet() && + !$inputObj->IsRefund_idSet()) { + return dr_return_data(0, "退款查询接口中,out_refund_no、out_trade_no、transaction_id、refund_id四个参数必填一个!"); + } + $inputObj->SetAppid(APPID);//公众账号ID + $inputObj->SetMch_id(MCHID);//商户号 + $inputObj->SetNonce_str(self::getNonceStr());//随机字符串 + + $inputObj->SetSign();//签名 + $xml = $inputObj->ToXml(); + + $startTimeStamp = self::getMillisecond();//请求开始时间 + $response = self::postXmlCurl($xml, $url, false, $timeOut); + $result = WxPayResults::Init($response); + self::reportCostTime($url, $startTimeStamp, $result);//上报请求花费时间 + + return $result; + } + + /** + * 下载对账单,WxPayDownloadBill中bill_date为必填参数 + * appid、mchid、spbill_create_ip、nonce_str不需要填入 + * @param WxPayDownloadBill $inputObj + * @param int $timeOut + * @throws WxPayException + * @return 成功时返回,其他抛异常 + */ + public static function downloadBill($inputObj, $timeOut = 6) + { + $url = "https://api.mch.weixin.qq.com/pay/downloadbill"; + //检测必填参数 + if(!$inputObj->IsBill_dateSet()) { + return dr_return_data(0, "对账单接口中,缺少必填参数bill_date!"); + } + $inputObj->SetAppid(APPID);//公众账号ID + $inputObj->SetMch_id(MCHID);//商户号 + $inputObj->SetNonce_str(self::getNonceStr());//随机字符串 + + $inputObj->SetSign();//签名 + $xml = $inputObj->ToXml(); + + $response = self::postXmlCurl($xml, $url, false, $timeOut); + if(substr($response, 0 , 5) == ""){ + return ""; + } + return $response; + } + + /** + * 提交被扫支付API + * 收银员使用扫码设备读取微信用户刷卡授权码以后,二维码或条码信息传送至商户收银台, + * 由商户收银台或者商户后台调用该接口发起支付。 + * WxPayWxPayMicroPay中body、out_trade_no、total_fee、auth_code参数必填 + * appid、mchid、spbill_create_ip、nonce_str不需要填入 + * @param WxPayWxPayMicroPay $inputObj + * @param int $timeOut + */ + public static function micropay($inputObj, $timeOut = 10) + { + $url = "https://api.mch.weixin.qq.com/pay/micropay"; + //检测必填参数 + if(!$inputObj->IsBodySet()) { + return dr_return_data(0, "提交被扫支付API接口中,缺少必填参数body!"); + } else if(!$inputObj->IsOut_trade_noSet()) { + return dr_return_data(0, "提交被扫支付API接口中,缺少必填参数out_trade_no!"); + } else if(!$inputObj->IsTotal_feeSet()) { + return dr_return_data(0, "提交被扫支付API接口中,缺少必填参数total_fee!"); + } else if(!$inputObj->IsAuth_codeSet()) { + return dr_return_data(0, "提交被扫支付API接口中,缺少必填参数auth_code!"); + } + + $inputObj->SetSpbill_create_ip($_SERVER['REMOTE_ADDR']);//终端ip + $inputObj->SetAppid(APPID);//公众账号ID + $inputObj->SetMch_id(MCHID);//商户号 + $inputObj->SetNonce_str(self::getNonceStr());//随机字符串 + + $inputObj->SetSign();//签名 + $xml = $inputObj->ToXml(); + + $startTimeStamp = self::getMillisecond();//请求开始时间 + $response = self::postXmlCurl($xml, $url, false, $timeOut); + $result = WxPayResults::Init($response); + self::reportCostTime($url, $startTimeStamp, $result);//上报请求花费时间 + + return $result; + } + + /** + * + * 撤销订单API接口,WxPayReverse中参数out_trade_no和transaction_id必须填写一个 + * appid、mchid、spbill_create_ip、nonce_str不需要填入 + * @param WxPayReverse $inputObj + * @param int $timeOut + * @throws WxPayException + */ + public static function reverse($inputObj, $timeOut = 6) + { + $url = "https://api.mch.weixin.qq.com/secapi/pay/reverse"; + //检测必填参数 + if(!$inputObj->IsOut_trade_noSet() && !$inputObj->IsTransaction_idSet()) { + return dr_return_data(0, "撤销订单API接口中,参数out_trade_no和transaction_id必须填写一个!"); + } + + $inputObj->SetAppid(APPID);//公众账号ID + $inputObj->SetMch_id(MCHID);//商户号 + $inputObj->SetNonce_str(self::getNonceStr());//随机字符串 + + $inputObj->SetSign();//签名 + $xml = $inputObj->ToXml(); + + $startTimeStamp = self::getMillisecond();//请求开始时间 + $response = self::postXmlCurl($xml, $url, true, $timeOut); + $result = WxPayResults::Init($response); + self::reportCostTime($url, $startTimeStamp, $result);//上报请求花费时间 + + return $result; + } + + /** + * + * 测速上报,该方法内部封装在report中,使用时请注意异常流程 + * WxPayReport中interface_url、return_code、result_code、user_ip、execute_time_必填 + * appid、mchid、spbill_create_ip、nonce_str不需要填入 + * @param WxPayReport $inputObj + * @param int $timeOut + * @throws WxPayException + * @return 成功时返回,其他抛异常 + */ + public static function report($inputObj, $timeOut = 1) + { + $url = "https://api.mch.weixin.qq.com/payitil/report"; + //检测必填参数 + if(!$inputObj->IsInterface_urlSet()) { + return dr_return_data(0, "接口URL,缺少必填参数interface_url!"); + } if(!$inputObj->IsReturn_codeSet()) { + return dr_return_data(0, "返回状态码,缺少必填参数return_code!"); + } if(!$inputObj->IsResult_codeSet()) { + return dr_return_data(0, "业务结果,缺少必填参数result_code!"); + } if(!$inputObj->IsUser_ipSet()) { + return dr_return_data(0, "访问接口IP,缺少必填参数user_ip!"); + } if(!$inputObj->IsExecute_time_Set()) { + return dr_return_data(0, "接口耗时,缺少必填参数execute_time_!"); + } + $inputObj->SetAppid(APPID);//公众账号ID + $inputObj->SetMch_id(MCHID);//商户号 + $inputObj->SetUser_ip($_SERVER['REMOTE_ADDR']);//终端ip + $inputObj->SetTime(date("YmdHis"));//商户上报时间 + $inputObj->SetNonce_str(self::getNonceStr());//随机字符串 + + $inputObj->SetSign();//签名 + $xml = $inputObj->ToXml(); + + $startTimeStamp = self::getMillisecond();//请求开始时间 + $response = self::postXmlCurl($xml, $url, false, $timeOut); + return $response; + } + + /** + * + * 生成二维码规则,模式一生成支付二维码 + * appid、mchid、spbill_create_ip、nonce_str不需要填入 + * @param WxPayBizPayUrl $inputObj + * @param int $timeOut + * @throws WxPayException + * @return 成功时返回,其他抛异常 + */ + public static function bizpayurl($inputObj, $timeOut = 6) + { + if(!$inputObj->IsProduct_idSet()){ + return dr_return_data(0, "生成二维码,缺少必填参数product_id!"); + } + + $inputObj->SetAppid(APPID);//公众账号ID + $inputObj->SetMch_id(MCHID);//商户号 + $inputObj->SetTime_stamp(time());//时间戳 + $inputObj->SetNonce_str(self::getNonceStr());//随机字符串 + + $inputObj->SetSign();//签名 + + return $inputObj->GetValues(); + } + + /** + * + * 转换短链接 + * 该接口主要用于扫码原生支付模式一中的二维码链接转成短链接(weixin://wxpay/s/XXXXXX), + * 减小二维码数据量,提升扫描速度和精确度。 + * appid、mchid、spbill_create_ip、nonce_str不需要填入 + * @param WxPayShortUrl $inputObj + * @param int $timeOut + * @throws WxPayException + * @return 成功时返回,其他抛异常 + */ + public static function shorturl($inputObj, $timeOut = 6) + { + $url = "https://api.mch.weixin.qq.com/tools/shorturl"; + //检测必填参数 + if(!$inputObj->IsLong_urlSet()) { + return dr_return_data(0, "需要转换的URL,签名用原串,传输需URL encode!"); + } + $inputObj->SetAppid(APPID);//公众账号ID + $inputObj->SetMch_id(MCHID);//商户号 + $inputObj->SetNonce_str(self::getNonceStr());//随机字符串 + + $inputObj->SetSign();//签名 + $xml = $inputObj->ToXml(); + + $startTimeStamp = self::getMillisecond();//请求开始时间 + $response = self::postXmlCurl($xml, $url, false, $timeOut); + $result = WxPayResults::Init($response); + self::reportCostTime($url, $startTimeStamp, $result);//上报请求花费时间 + + return $result; + } + + /** + * + * 支付结果通用通知 + * @param function $callback + * 直接回调函数使用方法: notify(you_function); + * 回调类成员函数方法:notify(array($this, you_function)); + * $callback 原型为:function function_name($data){} + */ + public static function notify($callback, &$msg) + { + //获取通知的数据 + $xml = file_get_contents('php://input'); + //如果返回成功则验证签名 + try { + $result = WxPayResults::Init($xml); + } catch (WxPayException $e){ + $msg = $e->errorMessage(); + return false; + } + + return call_user_func($callback, $result); + } + + /** + * + * 产生随机字符串,不长于32位 + * @param int $length + * @return 产生的随机字符串 + */ + public static function getNonceStr($length = 32) + { + $chars = "abcdefghijklmnopqrstuvwxyz0123456789"; + $str =""; + for ( $i = 0; $i < $length; $i++ ) { + $str .= substr($chars, mt_rand(0, strlen($chars)-1), 1); + } + return $str; + } + + /** + * 直接输出xml + * @param string $xml + */ + public static function replyNotify($xml) + { + echo $xml; + } + + /** + * + * 上报数据, 上报的时候将屏蔽所有异常流程 + * @param string $usrl + * @param int $startTimeStamp + * @param array $data + */ + private static function reportCostTime($url, $startTimeStamp, $data) + { + //如果不需要上报数据 + if(REPORT_LEVENL == 0){ + return; + } + //如果仅失败上报 + if(REPORT_LEVENL == 1 && + array_key_exists("return_code", $data) && + $data["return_code"] == "SUCCESS" && + array_key_exists("result_code", $data) && + $data["result_code"] == "SUCCESS") + { + return; + } + + //上报逻辑 + $endTimeStamp = self::getMillisecond(); + $objInput = new WxPayReport(); + $objInput->SetInterface_url($url); + $objInput->SetExecute_time_($endTimeStamp - $startTimeStamp); + //返回状态码 + if(array_key_exists("return_code", $data)){ + $objInput->SetReturn_code($data["return_code"]); + } + //返回信息 + if(array_key_exists("return_msg", $data)){ + $objInput->SetReturn_msg($data["return_msg"]); + } + //业务结果 + if(array_key_exists("result_code", $data)){ + $objInput->SetResult_code($data["result_code"]); + } + //错误代码 + if(array_key_exists("err_code", $data)){ + $objInput->SetErr_code($data["err_code"]); + } + //错误代码描述 + if(array_key_exists("err_code_des", $data)){ + $objInput->SetErr_code_des($data["err_code_des"]); + } + //商户订单号 + if(array_key_exists("out_trade_no", $data)){ + $objInput->SetOut_trade_no($data["out_trade_no"]); + } + //设备号 + if(array_key_exists("device_info", $data)){ + $objInput->SetDevice_info($data["device_info"]); + } + + try{ + self::report($objInput); + } catch (WxPayException $e){ + //不做任何处理 + } + } + + /** + * 以post方式提交xml到对应的接口url + * + * @param string $xml 需要post的xml数据 + * @param string $url url + * @param bool $useCert 是否需要证书,默认不需要 + * @param int $second url执行超时时间,默认30s + * @throws WxPayException + */ + private static function postXmlCurl($xml, $url, $useCert = false, $second = 30) + { + $ch = curl_init(); + //设置超时 + curl_setopt($ch, CURLOPT_TIMEOUT, $second); + + //如果有配置代理这里就设置代理 + if(CURL_PROXY_HOST != "0.0.0.0" + && CURL_PROXY_PORT != 0){ + curl_setopt($ch,CURLOPT_PROXY, CURL_PROXY_HOST); + curl_setopt($ch,CURLOPT_PROXYPORT, CURL_PROXY_PORT); + } + curl_setopt($ch,CURLOPT_URL, $url); + curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE); + curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);//严格校验 + //设置header + curl_setopt($ch, CURLOPT_HEADER, FALSE); + //要求结果为字符串且输出到屏幕上 + curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); + + if($useCert == true){ + //设置证书 + //使用证书:cert 与 key 分别属于两个.pem文件 + curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM'); + curl_setopt($ch,CURLOPT_SSLCERT, SSLCERT_PATH); + curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM'); + curl_setopt($ch,CURLOPT_SSLKEY, SSLKEY_PATH); + } + //post提交方式 + curl_setopt($ch, CURLOPT_POST, TRUE); + curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); + //运行curl + $data = curl_exec($ch); + //返回结果 + if($data){ + curl_close($ch); + return $data; + } else { + $error = curl_errno($ch); + curl_close($ch); + return dr_return_data(0, "curl出错,错误码:$error"); + } + } + + /** + * 获取毫秒级别的时间戳 + */ + private static function getMillisecond() + { + //获取毫秒的时间戳 + $time = explode ( " ", microtime () ); + $time = $time[1] . ($time[0] * 1000); + $time2 = explode( ".", $time ); + $time = $time2[0]; + return $time; + } +} + diff --git a/api/pay/weixin/WxPay.Data.php b/api/pay/weixin/WxPay.Data.php new file mode 100644 index 0000000..dda1cbd --- /dev/null +++ b/api/pay/weixin/WxPay.Data.php @@ -0,0 +1,2996 @@ + $code, + 'msg' => $msg, + 'data' => $data, + ); + } +} + + + +/** + * + * 数据对象基础类,该类中定义数据类最基本的行为,包括: + * 计算/设置/获取签名、输出xml格式的参数、从xml读取数据对象等 + * @author widyhu + * + */ +class WxPayDataBase +{ + protected $values = array(); + + /** + * 设置签名,详见签名生成算法 + * @param string $value + **/ + public function SetSign() + { + $sign = $this->MakeSign(); + $this->values['sign'] = $sign; + return $sign; + } + + /** + * 获取签名,详见签名生成算法的值 + * @return 值 + **/ + public function GetSign() + { + return $this->values['sign']; + } + + /** + * 判断签名,详见签名生成算法是否存在 + * @return true 或 false + **/ + public function IsSignSet() + { + return array_key_exists('sign', $this->values); + } + + /** + * 输出xml字符 + * @throws WxPayException + **/ + public function ToXml() + { + if(!is_array($this->values) + || count($this->values) <= 0) + { + return dr_return_data(0, "数组数据异常!"); + } + + $xml = ""; + foreach ($this->values as $key=>$val) + { + if (is_numeric($val)){ + $xml.="<".$key.">".$val.""; + }else{ + $xml.="<".$key.">"; + } + } + $xml.=""; + return $xml; + } + + /** + * 将xml转为array + * @param string $xml + * @throws WxPayException + */ + public function FromXml($xml) + { + if(!$xml){ + return dr_return_data(0, "xml数据异常!"); + } + //将XML转为array + //禁止引用外部xml实体 + libxml_disable_entity_loader(true); + $this->values = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true); + return $this->values; + } + + /** + * 格式化参数格式化成url参数 + */ + public function ToUrlParams() + { + $buff = ""; + foreach ($this->values as $k => $v) + { + if($k != "sign" && $v != "" && !is_array($v)){ + $buff .= $k . "=" . $v . "&"; + } + } + + $buff = trim($buff, "&"); + return $buff; + } + + /** + * 生成签名 + * @return 签名,本函数不覆盖sign成员变量,如要设置签名需要调用SetSign方法赋值 + */ + public function MakeSign() + { + //签名步骤一:按字典序排序参数 + ksort($this->values); + $string = $this->ToUrlParams(); + //签名步骤二:在string后加入KEY + $string = $string . "&key=".KEY; + //签名步骤三:MD5加密 + $string = md5($string); + //签名步骤四:所有字符转为大写 + $result = strtoupper($string); + return $result; + } + + /** + * 获取设置的值 + */ + public function GetValues() + { + return $this->values; + } +} + +/** + * + * 接口调用结果类 + * @author widyhu + * + */ +class WxPayResults extends WxPayDataBase +{ + /** + * + * 检测签名 + */ + public function CheckSign() + { + //fix异常 + if(!$this->IsSignSet()){ + return dr_return_data(0, "签名错误!"); + } + + $sign = $this->MakeSign(); + if($this->GetSign() == $sign){ + return true; + } + return dr_return_data(0, "签名错误!"); + } + + /** + * + * 使用数组初始化 + * @param array $array + */ + public function FromArray($array) + { + $this->values = $array; + } + + /** + * + * 使用数组初始化对象 + * @param array $array + * @param 是否检测签名 $noCheckSign + */ + public static function InitFromArray($array, $noCheckSign = false) + { + $obj = new self(); + $obj->FromArray($array); + if($noCheckSign == false){ + $obj->CheckSign(); + } + return $obj; + } + + /** + * + * 设置参数 + * @param string $key + * @param string $value + */ + public function SetData($key, $value) + { + $this->values[$key] = $value; + } + + /** + * 将xml转为array + * @param string $xml + * @throws WxPayException + */ + public static function Init($xml) + { + $obj = new self(); + $obj->FromXml($xml); + //fix bug 2015-06-29 + if($obj->values['return_code'] != 'SUCCESS'){ + return $obj->GetValues(); + } + $obj->CheckSign(); + return $obj->GetValues(); + } +} + +/** + * + * 回调基础类 + * @author widyhu + * + */ +class WxPayNotifyReply extends WxPayDataBase +{ + /** + * + * 设置错误码 FAIL 或者 SUCCESS + * @param string + */ + public function SetReturn_code($return_code) + { + $this->values['return_code'] = $return_code; + } + + /** + * + * 获取错误码 FAIL 或者 SUCCESS + * @return string $return_code + */ + public function GetReturn_code() + { + return $this->values['return_code']; + } + + /** + * + * 设置错误信息 + * @param string $return_code + */ + public function SetReturn_msg($return_msg) + { + $this->values['return_msg'] = $return_msg; + } + + /** + * + * 获取错误信息 + * @return string + */ + public function GetReturn_msg() + { + return $this->values['return_msg']; + } + + /** + * + * 设置返回参数 + * @param string $key + * @param string $value + */ + public function SetData($key, $value) + { + $this->values[$key] = $value; + } +} + +/** + * + * 统一下单输入对象 + * @author widyhu + * + */ +class WxPayUnifiedOrder extends WxPayDataBase +{ + /** + * 设置微信分配的公众账号ID + * @param string $value + **/ + public function SetAppid($value) + { + $this->values['appid'] = $value; + } + /** + * 获取微信分配的公众账号ID的值 + * @return 值 + **/ + public function GetAppid() + { + return $this->values['appid']; + } + /** + * 判断微信分配的公众账号ID是否存在 + * @return true 或 false + **/ + public function IsAppidSet() + { + return array_key_exists('appid', $this->values); + } + + + /** + * 设置微信支付分配的商户号 + * @param string $value + **/ + public function SetMch_id($value) + { + $this->values['mch_id'] = $value; + } + /** + * 获取微信支付分配的商户号的值 + * @return 值 + **/ + public function GetMch_id() + { + return $this->values['mch_id']; + } + /** + * 判断微信支付分配的商户号是否存在 + * @return true 或 false + **/ + public function IsMch_idSet() + { + return array_key_exists('mch_id', $this->values); + } + + + /** + * 设置微信支付分配的终端设备号,商户自定义 + * @param string $value + **/ + public function SetDevice_info($value) + { + $this->values['device_info'] = $value; + } + /** + * 获取微信支付分配的终端设备号,商户自定义的值 + * @return 值 + **/ + public function GetDevice_info() + { + return $this->values['device_info']; + } + /** + * 判断微信支付分配的终端设备号,商户自定义是否存在 + * @return true 或 false + **/ + public function IsDevice_infoSet() + { + return array_key_exists('device_info', $this->values); + } + + + /** + * 设置随机字符串,不长于32位。推荐随机数生成算法 + * @param string $value + **/ + public function SetNonce_str($value) + { + $this->values['nonce_str'] = $value; + } + /** + * 获取随机字符串,不长于32位。推荐随机数生成算法的值 + * @return 值 + **/ + public function GetNonce_str() + { + return $this->values['nonce_str']; + } + /** + * 判断随机字符串,不长于32位。推荐随机数生成算法是否存在 + * @return true 或 false + **/ + public function IsNonce_strSet() + { + return array_key_exists('nonce_str', $this->values); + } + + /** + * 设置商品或支付单简要描述 + * @param string $value + **/ + public function SetBody($value) + { + $this->values['body'] = $value; + } + /** + * 获取商品或支付单简要描述的值 + * @return 值 + **/ + public function GetBody() + { + return $this->values['body']; + } + /** + * 判断商品或支付单简要描述是否存在 + * @return true 或 false + **/ + public function IsBodySet() + { + return array_key_exists('body', $this->values); + } + + + /** + * 设置商品名称明细列表 + * @param string $value + **/ + public function SetDetail($value) + { + $this->values['detail'] = $value; + } + /** + * 获取商品名称明细列表的值 + * @return 值 + **/ + public function GetDetail() + { + return $this->values['detail']; + } + /** + * 判断商品名称明细列表是否存在 + * @return true 或 false + **/ + public function IsDetailSet() + { + return array_key_exists('detail', $this->values); + } + + + /** + * 设置附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据 + * @param string $value + **/ + public function SetAttach($value) + { + $this->values['attach'] = $value; + } + /** + * 获取附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据的值 + * @return 值 + **/ + public function GetAttach() + { + return $this->values['attach']; + } + /** + * 判断附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据是否存在 + * @return true 或 false + **/ + public function IsAttachSet() + { + return array_key_exists('attach', $this->values); + } + + + /** + * 设置商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号 + * @param string $value + **/ + public function SetOut_trade_no($value) + { + $this->values['out_trade_no'] = $value; + } + /** + * 获取商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号的值 + * @return 值 + **/ + public function GetOut_trade_no() + { + return $this->values['out_trade_no']; + } + /** + * 判断商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号是否存在 + * @return true 或 false + **/ + public function IsOut_trade_noSet() + { + return array_key_exists('out_trade_no', $this->values); + } + + + /** + * 设置符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型 + * @param string $value + **/ + public function SetFee_type($value) + { + $this->values['fee_type'] = $value; + } + /** + * 获取符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型的值 + * @return 值 + **/ + public function GetFee_type() + { + return $this->values['fee_type']; + } + /** + * 判断符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型是否存在 + * @return true 或 false + **/ + public function IsFee_typeSet() + { + return array_key_exists('fee_type', $this->values); + } + + + /** + * 设置订单总金额,只能为整数,详见支付金额 + * @param string $value + **/ + public function SetTotal_fee($value) + { + $this->values['total_fee'] = $value; + } + /** + * 获取订单总金额,只能为整数,详见支付金额的值 + * @return 值 + **/ + public function GetTotal_fee() + { + return $this->values['total_fee']; + } + /** + * 判断订单总金额,只能为整数,详见支付金额是否存在 + * @return true 或 false + **/ + public function IsTotal_feeSet() + { + return array_key_exists('total_fee', $this->values); + } + + + /** + * 设置APP和网页支付提交用户端ip,Native支付填调用微信支付API的机器IP。 + * @param string $value + **/ + public function SetSpbill_create_ip($value) + { + $this->values['spbill_create_ip'] = $value; + } + /** + * 获取APP和网页支付提交用户端ip,Native支付填调用微信支付API的机器IP。的值 + * @return 值 + **/ + public function GetSpbill_create_ip() + { + return $this->values['spbill_create_ip']; + } + /** + * 判断APP和网页支付提交用户端ip,Native支付填调用微信支付API的机器IP。是否存在 + * @return true 或 false + **/ + public function IsSpbill_create_ipSet() + { + return array_key_exists('spbill_create_ip', $this->values); + } + + + /** + * 设置订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则 + * @param string $value + **/ + public function SetTime_start($value) + { + $this->values['time_start'] = $value; + } + /** + * 获取订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则的值 + * @return 值 + **/ + public function GetTime_start() + { + return $this->values['time_start']; + } + /** + * 判断订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则是否存在 + * @return true 或 false + **/ + public function IsTime_startSet() + { + return array_key_exists('time_start', $this->values); + } + + + /** + * 设置订单失效时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。其他详见时间规则 + * @param string $value + **/ + public function SetTime_expire($value) + { + $this->values['time_expire'] = $value; + } + /** + * 获取订单失效时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。其他详见时间规则的值 + * @return 值 + **/ + public function GetTime_expire() + { + return $this->values['time_expire']; + } + /** + * 判断订单失效时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。其他详见时间规则是否存在 + * @return true 或 false + **/ + public function IsTime_expireSet() + { + return array_key_exists('time_expire', $this->values); + } + + + /** + * 设置商品标记,代金券或立减优惠功能的参数,说明详见代金券或立减优惠 + * @param string $value + **/ + public function SetGoods_tag($value) + { + $this->values['goods_tag'] = $value; + } + /** + * 获取商品标记,代金券或立减优惠功能的参数,说明详见代金券或立减优惠的值 + * @return 值 + **/ + public function GetGoods_tag() + { + return $this->values['goods_tag']; + } + /** + * 判断商品标记,代金券或立减优惠功能的参数,说明详见代金券或立减优惠是否存在 + * @return true 或 false + **/ + public function IsGoods_tagSet() + { + return array_key_exists('goods_tag', $this->values); + } + + + /** + * 设置接收微信支付异步通知回调地址 + * @param string $value + **/ + public function SetNotify_url($value) + { + $this->values['notify_url'] = $value; + } + /** + * 获取接收微信支付异步通知回调地址的值 + * @return 值 + **/ + public function GetNotify_url() + { + return $this->values['notify_url']; + } + /** + * 判断接收微信支付异步通知回调地址是否存在 + * @return true 或 false + **/ + public function IsNotify_urlSet() + { + return array_key_exists('notify_url', $this->values); + } + + + /** + * 设置取值如下:JSAPI,NATIVE,APP,详细说明见参数规定 + * @param string $value + **/ + public function SetTrade_type($value) + { + $this->values['trade_type'] = $value; + } + /** + * 获取取值如下:JSAPI,NATIVE,APP,详细说明见参数规定的值 + * @return 值 + **/ + public function GetTrade_type() + { + return $this->values['trade_type']; + } + /** + * 判断取值如下:JSAPI,NATIVE,APP,详细说明见参数规定是否存在 + * @return true 或 false + **/ + public function IsTrade_typeSet() + { + return array_key_exists('trade_type', $this->values); + } + + + /** + * 设置trade_type=NATIVE,此参数必传。此id为二维码中包含的商品ID,商户自行定义。 + * @param string $value + **/ + public function SetProduct_id($value) + { + $this->values['product_id'] = $value; + } + /** + * 获取trade_type=NATIVE,此参数必传。此id为二维码中包含的商品ID,商户自行定义。的值 + * @return 值 + **/ + public function GetProduct_id() + { + return $this->values['product_id']; + } + /** + * 判断trade_type=NATIVE,此参数必传。此id为二维码中包含的商品ID,商户自行定义。是否存在 + * @return true 或 false + **/ + public function IsProduct_idSet() + { + return array_key_exists('product_id', $this->values); + } + + + /** + * 设置trade_type=JSAPI,此参数必传,用户在商户appid下的唯一标识。下单前需要调用【网页授权获取用户信息】接口获取到用户的Openid。 + * @param string $value + **/ + public function SetOpenid($value) + { + $this->values['openid'] = $value; + } + /** + * 获取trade_type=JSAPI,此参数必传,用户在商户appid下的唯一标识。下单前需要调用【网页授权获取用户信息】接口获取到用户的Openid。 的值 + * @return 值 + **/ + public function GetOpenid() + { + return $this->values['openid']; + } + /** + * 判断trade_type=JSAPI,此参数必传,用户在商户appid下的唯一标识。下单前需要调用【网页授权获取用户信息】接口获取到用户的Openid。 是否存在 + * @return true 或 false + **/ + public function IsOpenidSet() + { + return array_key_exists('openid', $this->values); + } +} + +/** + * + * 订单查询输入对象 + * @author widyhu + * + */ +class WxPayOrderQuery extends WxPayDataBase +{ + /** + * 设置微信分配的公众账号ID + * @param string $value + **/ + public function SetAppid($value) + { + $this->values['appid'] = $value; + } + /** + * 获取微信分配的公众账号ID的值 + * @return 值 + **/ + public function GetAppid() + { + return $this->values['appid']; + } + /** + * 判断微信分配的公众账号ID是否存在 + * @return true 或 false + **/ + public function IsAppidSet() + { + return array_key_exists('appid', $this->values); + } + + + /** + * 设置微信支付分配的商户号 + * @param string $value + **/ + public function SetMch_id($value) + { + $this->values['mch_id'] = $value; + } + /** + * 获取微信支付分配的商户号的值 + * @return 值 + **/ + public function GetMch_id() + { + return $this->values['mch_id']; + } + /** + * 判断微信支付分配的商户号是否存在 + * @return true 或 false + **/ + public function IsMch_idSet() + { + return array_key_exists('mch_id', $this->values); + } + + + /** + * 设置微信的订单号,优先使用 + * @param string $value + **/ + public function SetTransaction_id($value) + { + $this->values['transaction_id'] = $value; + } + /** + * 获取微信的订单号,优先使用的值 + * @return 值 + **/ + public function GetTransaction_id() + { + return $this->values['transaction_id']; + } + /** + * 判断微信的订单号,优先使用是否存在 + * @return true 或 false + **/ + public function IsTransaction_idSet() + { + return array_key_exists('transaction_id', $this->values); + } + + + /** + * 设置商户系统内部的订单号,当没提供transaction_id时需要传这个。 + * @param string $value + **/ + public function SetOut_trade_no($value) + { + $this->values['out_trade_no'] = $value; + } + /** + * 获取商户系统内部的订单号,当没提供transaction_id时需要传这个。的值 + * @return 值 + **/ + public function GetOut_trade_no() + { + return $this->values['out_trade_no']; + } + /** + * 判断商户系统内部的订单号,当没提供transaction_id时需要传这个。是否存在 + * @return true 或 false + **/ + public function IsOut_trade_noSet() + { + return array_key_exists('out_trade_no', $this->values); + } + + + /** + * 设置随机字符串,不长于32位。推荐随机数生成算法 + * @param string $value + **/ + public function SetNonce_str($value) + { + $this->values['nonce_str'] = $value; + } + /** + * 获取随机字符串,不长于32位。推荐随机数生成算法的值 + * @return 值 + **/ + public function GetNonce_str() + { + return $this->values['nonce_str']; + } + /** + * 判断随机字符串,不长于32位。推荐随机数生成算法是否存在 + * @return true 或 false + **/ + public function IsNonce_strSet() + { + return array_key_exists('nonce_str', $this->values); + } +} + +/** + * + * 关闭订单输入对象 + * @author widyhu + * + */ +class WxPayCloseOrder extends WxPayDataBase +{ + /** + * 设置微信分配的公众账号ID + * @param string $value + **/ + public function SetAppid($value) + { + $this->values['appid'] = $value; + } + /** + * 获取微信分配的公众账号ID的值 + * @return 值 + **/ + public function GetAppid() + { + return $this->values['appid']; + } + /** + * 判断微信分配的公众账号ID是否存在 + * @return true 或 false + **/ + public function IsAppidSet() + { + return array_key_exists('appid', $this->values); + } + + + /** + * 设置微信支付分配的商户号 + * @param string $value + **/ + public function SetMch_id($value) + { + $this->values['mch_id'] = $value; + } + /** + * 获取微信支付分配的商户号的值 + * @return 值 + **/ + public function GetMch_id() + { + return $this->values['mch_id']; + } + /** + * 判断微信支付分配的商户号是否存在 + * @return true 或 false + **/ + public function IsMch_idSet() + { + return array_key_exists('mch_id', $this->values); + } + + + /** + * 设置商户系统内部的订单号 + * @param string $value + **/ + public function SetOut_trade_no($value) + { + $this->values['out_trade_no'] = $value; + } + /** + * 获取商户系统内部的订单号的值 + * @return 值 + **/ + public function GetOut_trade_no() + { + return $this->values['out_trade_no']; + } + /** + * 判断商户系统内部的订单号是否存在 + * @return true 或 false + **/ + public function IsOut_trade_noSet() + { + return array_key_exists('out_trade_no', $this->values); + } + + + /** + * 设置商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号 + * @param string $value + **/ + public function SetNonce_str($value) + { + $this->values['nonce_str'] = $value; + } + /** + * 获取商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号的值 + * @return 值 + **/ + public function GetNonce_str() + { + return $this->values['nonce_str']; + } + /** + * 判断商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号是否存在 + * @return true 或 false + **/ + public function IsNonce_strSet() + { + return array_key_exists('nonce_str', $this->values); + } +} + +/** + * + * 提交退款输入对象 + * @author widyhu + * + */ +class WxPayRefund extends WxPayDataBase +{ + /** + * 设置微信分配的公众账号ID + * @param string $value + **/ + public function SetAppid($value) + { + $this->values['appid'] = $value; + } + /** + * 获取微信分配的公众账号ID的值 + * @return 值 + **/ + public function GetAppid() + { + return $this->values['appid']; + } + /** + * 判断微信分配的公众账号ID是否存在 + * @return true 或 false + **/ + public function IsAppidSet() + { + return array_key_exists('appid', $this->values); + } + + + /** + * 设置微信支付分配的商户号 + * @param string $value + **/ + public function SetMch_id($value) + { + $this->values['mch_id'] = $value; + } + /** + * 获取微信支付分配的商户号的值 + * @return 值 + **/ + public function GetMch_id() + { + return $this->values['mch_id']; + } + /** + * 判断微信支付分配的商户号是否存在 + * @return true 或 false + **/ + public function IsMch_idSet() + { + return array_key_exists('mch_id', $this->values); + } + + + /** + * 设置微信支付分配的终端设备号,与下单一致 + * @param string $value + **/ + public function SetDevice_info($value) + { + $this->values['device_info'] = $value; + } + /** + * 获取微信支付分配的终端设备号,与下单一致的值 + * @return 值 + **/ + public function GetDevice_info() + { + return $this->values['device_info']; + } + /** + * 判断微信支付分配的终端设备号,与下单一致是否存在 + * @return true 或 false + **/ + public function IsDevice_infoSet() + { + return array_key_exists('device_info', $this->values); + } + + + /** + * 设置随机字符串,不长于32位。推荐随机数生成算法 + * @param string $value + **/ + public function SetNonce_str($value) + { + $this->values['nonce_str'] = $value; + } + /** + * 获取随机字符串,不长于32位。推荐随机数生成算法的值 + * @return 值 + **/ + public function GetNonce_str() + { + return $this->values['nonce_str']; + } + /** + * 判断随机字符串,不长于32位。推荐随机数生成算法是否存在 + * @return true 或 false + **/ + public function IsNonce_strSet() + { + return array_key_exists('nonce_str', $this->values); + } + + /** + * 设置微信订单号 + * @param string $value + **/ + public function SetTransaction_id($value) + { + $this->values['transaction_id'] = $value; + } + /** + * 获取微信订单号的值 + * @return 值 + **/ + public function GetTransaction_id() + { + return $this->values['transaction_id']; + } + /** + * 判断微信订单号是否存在 + * @return true 或 false + **/ + public function IsTransaction_idSet() + { + return array_key_exists('transaction_id', $this->values); + } + + + /** + * 设置商户系统内部的订单号,transaction_id、out_trade_no二选一,如果同时存在优先级:transaction_id> out_trade_no + * @param string $value + **/ + public function SetOut_trade_no($value) + { + $this->values['out_trade_no'] = $value; + } + /** + * 获取商户系统内部的订单号,transaction_id、out_trade_no二选一,如果同时存在优先级:transaction_id> out_trade_no的值 + * @return 值 + **/ + public function GetOut_trade_no() + { + return $this->values['out_trade_no']; + } + /** + * 判断商户系统内部的订单号,transaction_id、out_trade_no二选一,如果同时存在优先级:transaction_id> out_trade_no是否存在 + * @return true 或 false + **/ + public function IsOut_trade_noSet() + { + return array_key_exists('out_trade_no', $this->values); + } + + + /** + * 设置商户系统内部的退款单号,商户系统内部唯一,同一退款单号多次请求只退一笔 + * @param string $value + **/ + public function SetOut_refund_no($value) + { + $this->values['out_refund_no'] = $value; + } + /** + * 获取商户系统内部的退款单号,商户系统内部唯一,同一退款单号多次请求只退一笔的值 + * @return 值 + **/ + public function GetOut_refund_no() + { + return $this->values['out_refund_no']; + } + /** + * 判断商户系统内部的退款单号,商户系统内部唯一,同一退款单号多次请求只退一笔是否存在 + * @return true 或 false + **/ + public function IsOut_refund_noSet() + { + return array_key_exists('out_refund_no', $this->values); + } + + + /** + * 设置订单总金额,单位为分,只能为整数,详见支付金额 + * @param string $value + **/ + public function SetTotal_fee($value) + { + $this->values['total_fee'] = $value; + } + /** + * 获取订单总金额,单位为分,只能为整数,详见支付金额的值 + * @return 值 + **/ + public function GetTotal_fee() + { + return $this->values['total_fee']; + } + /** + * 判断订单总金额,单位为分,只能为整数,详见支付金额是否存在 + * @return true 或 false + **/ + public function IsTotal_feeSet() + { + return array_key_exists('total_fee', $this->values); + } + + + /** + * 设置退款总金额,订单总金额,单位为分,只能为整数,详见支付金额 + * @param string $value + **/ + public function SetRefund_fee($value) + { + $this->values['refund_fee'] = $value; + } + /** + * 获取退款总金额,订单总金额,单位为分,只能为整数,详见支付金额的值 + * @return 值 + **/ + public function GetRefund_fee() + { + return $this->values['refund_fee']; + } + /** + * 判断退款总金额,订单总金额,单位为分,只能为整数,详见支付金额是否存在 + * @return true 或 false + **/ + public function IsRefund_feeSet() + { + return array_key_exists('refund_fee', $this->values); + } + + + /** + * 设置货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型 + * @param string $value + **/ + public function SetRefund_fee_type($value) + { + $this->values['refund_fee_type'] = $value; + } + /** + * 获取货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型的值 + * @return 值 + **/ + public function GetRefund_fee_type() + { + return $this->values['refund_fee_type']; + } + /** + * 判断货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型是否存在 + * @return true 或 false + **/ + public function IsRefund_fee_typeSet() + { + return array_key_exists('refund_fee_type', $this->values); + } + + + /** + * 设置操作员帐号, 默认为商户号 + * @param string $value + **/ + public function SetOp_user_id($value) + { + $this->values['op_user_id'] = $value; + } + /** + * 获取操作员帐号, 默认为商户号的值 + * @return 值 + **/ + public function GetOp_user_id() + { + return $this->values['op_user_id']; + } + /** + * 判断操作员帐号, 默认为商户号是否存在 + * @return true 或 false + **/ + public function IsOp_user_idSet() + { + return array_key_exists('op_user_id', $this->values); + } +} + +/** + * + * 退款查询输入对象 + * @author widyhu + * + */ +class WxPayRefundQuery extends WxPayDataBase +{ + /** + * 设置微信分配的公众账号ID + * @param string $value + **/ + public function SetAppid($value) + { + $this->values['appid'] = $value; + } + /** + * 获取微信分配的公众账号ID的值 + * @return 值 + **/ + public function GetAppid() + { + return $this->values['appid']; + } + /** + * 判断微信分配的公众账号ID是否存在 + * @return true 或 false + **/ + public function IsAppidSet() + { + return array_key_exists('appid', $this->values); + } + + + /** + * 设置微信支付分配的商户号 + * @param string $value + **/ + public function SetMch_id($value) + { + $this->values['mch_id'] = $value; + } + /** + * 获取微信支付分配的商户号的值 + * @return 值 + **/ + public function GetMch_id() + { + return $this->values['mch_id']; + } + /** + * 判断微信支付分配的商户号是否存在 + * @return true 或 false + **/ + public function IsMch_idSet() + { + return array_key_exists('mch_id', $this->values); + } + + + /** + * 设置微信支付分配的终端设备号 + * @param string $value + **/ + public function SetDevice_info($value) + { + $this->values['device_info'] = $value; + } + /** + * 获取微信支付分配的终端设备号的值 + * @return 值 + **/ + public function GetDevice_info() + { + return $this->values['device_info']; + } + /** + * 判断微信支付分配的终端设备号是否存在 + * @return true 或 false + **/ + public function IsDevice_infoSet() + { + return array_key_exists('device_info', $this->values); + } + + + /** + * 设置随机字符串,不长于32位。推荐随机数生成算法 + * @param string $value + **/ + public function SetNonce_str($value) + { + $this->values['nonce_str'] = $value; + } + /** + * 获取随机字符串,不长于32位。推荐随机数生成算法的值 + * @return 值 + **/ + public function GetNonce_str() + { + return $this->values['nonce_str']; + } + /** + * 判断随机字符串,不长于32位。推荐随机数生成算法是否存在 + * @return true 或 false + **/ + public function IsNonce_strSet() + { + return array_key_exists('nonce_str', $this->values); + } + + /** + * 设置微信订单号 + * @param string $value + **/ + public function SetTransaction_id($value) + { + $this->values['transaction_id'] = $value; + } + /** + * 获取微信订单号的值 + * @return 值 + **/ + public function GetTransaction_id() + { + return $this->values['transaction_id']; + } + /** + * 判断微信订单号是否存在 + * @return true 或 false + **/ + public function IsTransaction_idSet() + { + return array_key_exists('transaction_id', $this->values); + } + + + /** + * 设置商户系统内部的订单号 + * @param string $value + **/ + public function SetOut_trade_no($value) + { + $this->values['out_trade_no'] = $value; + } + /** + * 获取商户系统内部的订单号的值 + * @return 值 + **/ + public function GetOut_trade_no() + { + return $this->values['out_trade_no']; + } + /** + * 判断商户系统内部的订单号是否存在 + * @return true 或 false + **/ + public function IsOut_trade_noSet() + { + return array_key_exists('out_trade_no', $this->values); + } + + + /** + * 设置商户退款单号 + * @param string $value + **/ + public function SetOut_refund_no($value) + { + $this->values['out_refund_no'] = $value; + } + /** + * 获取商户退款单号的值 + * @return 值 + **/ + public function GetOut_refund_no() + { + return $this->values['out_refund_no']; + } + /** + * 判断商户退款单号是否存在 + * @return true 或 false + **/ + public function IsOut_refund_noSet() + { + return array_key_exists('out_refund_no', $this->values); + } + + + /** + * 设置微信退款单号refund_id、out_refund_no、out_trade_no、transaction_id四个参数必填一个,如果同时存在优先级为:refund_id>out_refund_no>transaction_id>out_trade_no + * @param string $value + **/ + public function SetRefund_id($value) + { + $this->values['refund_id'] = $value; + } + /** + * 获取微信退款单号refund_id、out_refund_no、out_trade_no、transaction_id四个参数必填一个,如果同时存在优先级为:refund_id>out_refund_no>transaction_id>out_trade_no的值 + * @return 值 + **/ + public function GetRefund_id() + { + return $this->values['refund_id']; + } + /** + * 判断微信退款单号refund_id、out_refund_no、out_trade_no、transaction_id四个参数必填一个,如果同时存在优先级为:refund_id>out_refund_no>transaction_id>out_trade_no是否存在 + * @return true 或 false + **/ + public function IsRefund_idSet() + { + return array_key_exists('refund_id', $this->values); + } +} + +/** + * + * 下载对账单输入对象 + * @author widyhu + * + */ +class WxPayDownloadBill extends WxPayDataBase +{ + /** + * 设置微信分配的公众账号ID + * @param string $value + **/ + public function SetAppid($value) + { + $this->values['appid'] = $value; + } + /** + * 获取微信分配的公众账号ID的值 + * @return 值 + **/ + public function GetAppid() + { + return $this->values['appid']; + } + /** + * 判断微信分配的公众账号ID是否存在 + * @return true 或 false + **/ + public function IsAppidSet() + { + return array_key_exists('appid', $this->values); + } + + + /** + * 设置微信支付分配的商户号 + * @param string $value + **/ + public function SetMch_id($value) + { + $this->values['mch_id'] = $value; + } + /** + * 获取微信支付分配的商户号的值 + * @return 值 + **/ + public function GetMch_id() + { + return $this->values['mch_id']; + } + /** + * 判断微信支付分配的商户号是否存在 + * @return true 或 false + **/ + public function IsMch_idSet() + { + return array_key_exists('mch_id', $this->values); + } + + + /** + * 设置微信支付分配的终端设备号,填写此字段,只下载该设备号的对账单 + * @param string $value + **/ + public function SetDevice_info($value) + { + $this->values['device_info'] = $value; + } + /** + * 获取微信支付分配的终端设备号,填写此字段,只下载该设备号的对账单的值 + * @return 值 + **/ + public function GetDevice_info() + { + return $this->values['device_info']; + } + /** + * 判断微信支付分配的终端设备号,填写此字段,只下载该设备号的对账单是否存在 + * @return true 或 false + **/ + public function IsDevice_infoSet() + { + return array_key_exists('device_info', $this->values); + } + + + /** + * 设置随机字符串,不长于32位。推荐随机数生成算法 + * @param string $value + **/ + public function SetNonce_str($value) + { + $this->values['nonce_str'] = $value; + } + /** + * 获取随机字符串,不长于32位。推荐随机数生成算法的值 + * @return 值 + **/ + public function GetNonce_str() + { + return $this->values['nonce_str']; + } + /** + * 判断随机字符串,不长于32位。推荐随机数生成算法是否存在 + * @return true 或 false + **/ + public function IsNonce_strSet() + { + return array_key_exists('nonce_str', $this->values); + } + + /** + * 设置下载对账单的日期,格式:20140603 + * @param string $value + **/ + public function SetBill_date($value) + { + $this->values['bill_date'] = $value; + } + /** + * 获取下载对账单的日期,格式:20140603的值 + * @return 值 + **/ + public function GetBill_date() + { + return $this->values['bill_date']; + } + /** + * 判断下载对账单的日期,格式:20140603是否存在 + * @return true 或 false + **/ + public function IsBill_dateSet() + { + return array_key_exists('bill_date', $this->values); + } + + + /** + * 设置ALL,返回当日所有订单信息,默认值SUCCESS,返回当日成功支付的订单REFUND,返回当日退款订单REVOKED,已撤销的订单 + * @param string $value + **/ + public function SetBill_type($value) + { + $this->values['bill_type'] = $value; + } + /** + * 获取ALL,返回当日所有订单信息,默认值SUCCESS,返回当日成功支付的订单REFUND,返回当日退款订单REVOKED,已撤销的订单的值 + * @return 值 + **/ + public function GetBill_type() + { + return $this->values['bill_type']; + } + /** + * 判断ALL,返回当日所有订单信息,默认值SUCCESS,返回当日成功支付的订单REFUND,返回当日退款订单REVOKED,已撤销的订单是否存在 + * @return true 或 false + **/ + public function IsBill_typeSet() + { + return array_key_exists('bill_type', $this->values); + } +} + +/** + * + * 测速上报输入对象 + * @author widyhu + * + */ +class WxPayReport extends WxPayDataBase +{ + /** + * 设置微信分配的公众账号ID + * @param string $value + **/ + public function SetAppid($value) + { + $this->values['appid'] = $value; + } + /** + * 获取微信分配的公众账号ID的值 + * @return 值 + **/ + public function GetAppid() + { + return $this->values['appid']; + } + /** + * 判断微信分配的公众账号ID是否存在 + * @return true 或 false + **/ + public function IsAppidSet() + { + return array_key_exists('appid', $this->values); + } + + + /** + * 设置微信支付分配的商户号 + * @param string $value + **/ + public function SetMch_id($value) + { + $this->values['mch_id'] = $value; + } + /** + * 获取微信支付分配的商户号的值 + * @return 值 + **/ + public function GetMch_id() + { + return $this->values['mch_id']; + } + /** + * 判断微信支付分配的商户号是否存在 + * @return true 或 false + **/ + public function IsMch_idSet() + { + return array_key_exists('mch_id', $this->values); + } + + + /** + * 设置微信支付分配的终端设备号,商户自定义 + * @param string $value + **/ + public function SetDevice_info($value) + { + $this->values['device_info'] = $value; + } + /** + * 获取微信支付分配的终端设备号,商户自定义的值 + * @return 值 + **/ + public function GetDevice_info() + { + return $this->values['device_info']; + } + /** + * 判断微信支付分配的终端设备号,商户自定义是否存在 + * @return true 或 false + **/ + public function IsDevice_infoSet() + { + return array_key_exists('device_info', $this->values); + } + + + /** + * 设置随机字符串,不长于32位。推荐随机数生成算法 + * @param string $value + **/ + public function SetNonce_str($value) + { + $this->values['nonce_str'] = $value; + } + /** + * 获取随机字符串,不长于32位。推荐随机数生成算法的值 + * @return 值 + **/ + public function GetNonce_str() + { + return $this->values['nonce_str']; + } + /** + * 判断随机字符串,不长于32位。推荐随机数生成算法是否存在 + * @return true 或 false + **/ + public function IsNonce_strSet() + { + return array_key_exists('nonce_str', $this->values); + } + + + /** + * 设置上报对应的接口的完整URL,类似:https://api.mch.weixin.qq.com/pay/unifiedorder对于被扫支付,为更好的和商户共同分析一次业务行为的整体耗时情况,对于两种接入模式,请都在门店侧对一次被扫行为进行一次单独的整体上报,上报URL指定为:https://api.mch.weixin.qq.com/pay/micropay/total关于两种接入模式具体可参考本文档章节:被扫支付商户接入模式其它接口调用仍然按照调用一次,上报一次来进行。 + * @param string $value + **/ + public function SetInterface_url($value) + { + $this->values['interface_url'] = $value; + } + /** + * 获取上报对应的接口的完整URL,类似:https://api.mch.weixin.qq.com/pay/unifiedorder对于被扫支付,为更好的和商户共同分析一次业务行为的整体耗时情况,对于两种接入模式,请都在门店侧对一次被扫行为进行一次单独的整体上报,上报URL指定为:https://api.mch.weixin.qq.com/pay/micropay/total关于两种接入模式具体可参考本文档章节:被扫支付商户接入模式其它接口调用仍然按照调用一次,上报一次来进行。的值 + * @return 值 + **/ + public function GetInterface_url() + { + return $this->values['interface_url']; + } + /** + * 判断上报对应的接口的完整URL,类似:https://api.mch.weixin.qq.com/pay/unifiedorder对于被扫支付,为更好的和商户共同分析一次业务行为的整体耗时情况,对于两种接入模式,请都在门店侧对一次被扫行为进行一次单独的整体上报,上报URL指定为:https://api.mch.weixin.qq.com/pay/micropay/total关于两种接入模式具体可参考本文档章节:被扫支付商户接入模式其它接口调用仍然按照调用一次,上报一次来进行。是否存在 + * @return true 或 false + **/ + public function IsInterface_urlSet() + { + return array_key_exists('interface_url', $this->values); + } + + + /** + * 设置接口耗时情况,单位为毫秒 + * @param string $value + **/ + public function SetExecute_time_($value) + { + $this->values['execute_time_'] = $value; + } + /** + * 获取接口耗时情况,单位为毫秒的值 + * @return 值 + **/ + public function GetExecute_time_() + { + return $this->values['execute_time_']; + } + /** + * 判断接口耗时情况,单位为毫秒是否存在 + * @return true 或 false + **/ + public function IsExecute_time_Set() + { + return array_key_exists('execute_time_', $this->values); + } + + + /** + * 设置SUCCESS/FAIL此字段是通信标识,非交易标识,交易是否成功需要查看trade_state来判断 + * @param string $value + **/ + public function SetReturn_code($value) + { + $this->values['return_code'] = $value; + } + /** + * 获取SUCCESS/FAIL此字段是通信标识,非交易标识,交易是否成功需要查看trade_state来判断的值 + * @return 值 + **/ + public function GetReturn_code() + { + return $this->values['return_code']; + } + /** + * 判断SUCCESS/FAIL此字段是通信标识,非交易标识,交易是否成功需要查看trade_state来判断是否存在 + * @return true 或 false + **/ + public function IsReturn_codeSet() + { + return array_key_exists('return_code', $this->values); + } + + + /** + * 设置返回信息,如非空,为错误原因签名失败参数格式校验错误 + * @param string $value + **/ + public function SetReturn_msg($value) + { + $this->values['return_msg'] = $value; + } + /** + * 获取返回信息,如非空,为错误原因签名失败参数格式校验错误的值 + * @return 值 + **/ + public function GetReturn_msg() + { + return $this->values['return_msg']; + } + /** + * 判断返回信息,如非空,为错误原因签名失败参数格式校验错误是否存在 + * @return true 或 false + **/ + public function IsReturn_msgSet() + { + return array_key_exists('return_msg', $this->values); + } + + + /** + * 设置SUCCESS/FAIL + * @param string $value + **/ + public function SetResult_code($value) + { + $this->values['result_code'] = $value; + } + /** + * 获取SUCCESS/FAIL的值 + * @return 值 + **/ + public function GetResult_code() + { + return $this->values['result_code']; + } + /** + * 判断SUCCESS/FAIL是否存在 + * @return true 或 false + **/ + public function IsResult_codeSet() + { + return array_key_exists('result_code', $this->values); + } + + + /** + * 设置ORDERNOTEXIST—订单不存在SYSTEMERROR—系统错误 + * @param string $value + **/ + public function SetErr_code($value) + { + $this->values['err_code'] = $value; + } + /** + * 获取ORDERNOTEXIST—订单不存在SYSTEMERROR—系统错误的值 + * @return 值 + **/ + public function GetErr_code() + { + return $this->values['err_code']; + } + /** + * 判断ORDERNOTEXIST—订单不存在SYSTEMERROR—系统错误是否存在 + * @return true 或 false + **/ + public function IsErr_codeSet() + { + return array_key_exists('err_code', $this->values); + } + + + /** + * 设置结果信息描述 + * @param string $value + **/ + public function SetErr_code_des($value) + { + $this->values['err_code_des'] = $value; + } + /** + * 获取结果信息描述的值 + * @return 值 + **/ + public function GetErr_code_des() + { + return $this->values['err_code_des']; + } + /** + * 判断结果信息描述是否存在 + * @return true 或 false + **/ + public function IsErr_code_desSet() + { + return array_key_exists('err_code_des', $this->values); + } + + + /** + * 设置商户系统内部的订单号,商户可以在上报时提供相关商户订单号方便微信支付更好的提高服务质量。 + * @param string $value + **/ + public function SetOut_trade_no($value) + { + $this->values['out_trade_no'] = $value; + } + /** + * 获取商户系统内部的订单号,商户可以在上报时提供相关商户订单号方便微信支付更好的提高服务质量。 的值 + * @return 值 + **/ + public function GetOut_trade_no() + { + return $this->values['out_trade_no']; + } + /** + * 判断商户系统内部的订单号,商户可以在上报时提供相关商户订单号方便微信支付更好的提高服务质量。 是否存在 + * @return true 或 false + **/ + public function IsOut_trade_noSet() + { + return array_key_exists('out_trade_no', $this->values); + } + + + /** + * 设置发起接口调用时的机器IP + * @param string $value + **/ + public function SetUser_ip($value) + { + $this->values['user_ip'] = $value; + } + /** + * 获取发起接口调用时的机器IP 的值 + * @return 值 + **/ + public function GetUser_ip() + { + return $this->values['user_ip']; + } + /** + * 判断发起接口调用时的机器IP 是否存在 + * @return true 或 false + **/ + public function IsUser_ipSet() + { + return array_key_exists('user_ip', $this->values); + } + + + /** + * 设置系统时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。其他详见时间规则 + * @param string $value + **/ + public function SetTime($value) + { + $this->values['time'] = $value; + } + /** + * 获取系统时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。其他详见时间规则的值 + * @return 值 + **/ + public function GetTime() + { + return $this->values['time']; + } + /** + * 判断系统时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。其他详见时间规则是否存在 + * @return true 或 false + **/ + public function IsTimeSet() + { + return array_key_exists('time', $this->values); + } +} + +/** + * + * 短链转换输入对象 + * @author widyhu + * + */ +class WxPayShortUrl extends WxPayDataBase +{ + /** + * 设置微信分配的公众账号ID + * @param string $value + **/ + public function SetAppid($value) + { + $this->values['appid'] = $value; + } + /** + * 获取微信分配的公众账号ID的值 + * @return 值 + **/ + public function GetAppid() + { + return $this->values['appid']; + } + /** + * 判断微信分配的公众账号ID是否存在 + * @return true 或 false + **/ + public function IsAppidSet() + { + return array_key_exists('appid', $this->values); + } + + + /** + * 设置微信支付分配的商户号 + * @param string $value + **/ + public function SetMch_id($value) + { + $this->values['mch_id'] = $value; + } + /** + * 获取微信支付分配的商户号的值 + * @return 值 + **/ + public function GetMch_id() + { + return $this->values['mch_id']; + } + /** + * 判断微信支付分配的商户号是否存在 + * @return true 或 false + **/ + public function IsMch_idSet() + { + return array_key_exists('mch_id', $this->values); + } + + + /** + * 设置需要转换的URL,签名用原串,传输需URL encode + * @param string $value + **/ + public function SetLong_url($value) + { + $this->values['long_url'] = $value; + } + /** + * 获取需要转换的URL,签名用原串,传输需URL encode的值 + * @return 值 + **/ + public function GetLong_url() + { + return $this->values['long_url']; + } + /** + * 判断需要转换的URL,签名用原串,传输需URL encode是否存在 + * @return true 或 false + **/ + public function IsLong_urlSet() + { + return array_key_exists('long_url', $this->values); + } + + + /** + * 设置随机字符串,不长于32位。推荐随机数生成算法 + * @param string $value + **/ + public function SetNonce_str($value) + { + $this->values['nonce_str'] = $value; + } + /** + * 获取随机字符串,不长于32位。推荐随机数生成算法的值 + * @return 值 + **/ + public function GetNonce_str() + { + return $this->values['nonce_str']; + } + /** + * 判断随机字符串,不长于32位。推荐随机数生成算法是否存在 + * @return true 或 false + **/ + public function IsNonce_strSet() + { + return array_key_exists('nonce_str', $this->values); + } +} + +/** + * + * 提交被扫输入对象 + * @author widyhu + * + */ +class WxPayMicroPay extends WxPayDataBase +{ + /** + * 设置微信分配的公众账号ID + * @param string $value + **/ + public function SetAppid($value) + { + $this->values['appid'] = $value; + } + /** + * 获取微信分配的公众账号ID的值 + * @return 值 + **/ + public function GetAppid() + { + return $this->values['appid']; + } + /** + * 判断微信分配的公众账号ID是否存在 + * @return true 或 false + **/ + public function IsAppidSet() + { + return array_key_exists('appid', $this->values); + } + + + /** + * 设置微信支付分配的商户号 + * @param string $value + **/ + public function SetMch_id($value) + { + $this->values['mch_id'] = $value; + } + /** + * 获取微信支付分配的商户号的值 + * @return 值 + **/ + public function GetMch_id() + { + return $this->values['mch_id']; + } + /** + * 判断微信支付分配的商户号是否存在 + * @return true 或 false + **/ + public function IsMch_idSet() + { + return array_key_exists('mch_id', $this->values); + } + + + /** + * 设置终端设备号(商户自定义,如门店编号) + * @param string $value + **/ + public function SetDevice_info($value) + { + $this->values['device_info'] = $value; + } + /** + * 获取终端设备号(商户自定义,如门店编号)的值 + * @return 值 + **/ + public function GetDevice_info() + { + return $this->values['device_info']; + } + /** + * 判断终端设备号(商户自定义,如门店编号)是否存在 + * @return true 或 false + **/ + public function IsDevice_infoSet() + { + return array_key_exists('device_info', $this->values); + } + + + /** + * 设置随机字符串,不长于32位。推荐随机数生成算法 + * @param string $value + **/ + public function SetNonce_str($value) + { + $this->values['nonce_str'] = $value; + } + /** + * 获取随机字符串,不长于32位。推荐随机数生成算法的值 + * @return 值 + **/ + public function GetNonce_str() + { + return $this->values['nonce_str']; + } + /** + * 判断随机字符串,不长于32位。推荐随机数生成算法是否存在 + * @return true 或 false + **/ + public function IsNonce_strSet() + { + return array_key_exists('nonce_str', $this->values); + } + + /** + * 设置商品或支付单简要描述 + * @param string $value + **/ + public function SetBody($value) + { + $this->values['body'] = $value; + } + /** + * 获取商品或支付单简要描述的值 + * @return 值 + **/ + public function GetBody() + { + return $this->values['body']; + } + /** + * 判断商品或支付单简要描述是否存在 + * @return true 或 false + **/ + public function IsBodySet() + { + return array_key_exists('body', $this->values); + } + + + /** + * 设置商品名称明细列表 + * @param string $value + **/ + public function SetDetail($value) + { + $this->values['detail'] = $value; + } + /** + * 获取商品名称明细列表的值 + * @return 值 + **/ + public function GetDetail() + { + return $this->values['detail']; + } + /** + * 判断商品名称明细列表是否存在 + * @return true 或 false + **/ + public function IsDetailSet() + { + return array_key_exists('detail', $this->values); + } + + + /** + * 设置附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据 + * @param string $value + **/ + public function SetAttach($value) + { + $this->values['attach'] = $value; + } + /** + * 获取附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据的值 + * @return 值 + **/ + public function GetAttach() + { + return $this->values['attach']; + } + /** + * 判断附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据是否存在 + * @return true 或 false + **/ + public function IsAttachSet() + { + return array_key_exists('attach', $this->values); + } + + + /** + * 设置商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号 + * @param string $value + **/ + public function SetOut_trade_no($value) + { + $this->values['out_trade_no'] = $value; + } + /** + * 获取商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号的值 + * @return 值 + **/ + public function GetOut_trade_no() + { + return $this->values['out_trade_no']; + } + /** + * 判断商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号是否存在 + * @return true 或 false + **/ + public function IsOut_trade_noSet() + { + return array_key_exists('out_trade_no', $this->values); + } + + + /** + * 设置订单总金额,单位为分,只能为整数,详见支付金额 + * @param string $value + **/ + public function SetTotal_fee($value) + { + $this->values['total_fee'] = $value; + } + /** + * 获取订单总金额,单位为分,只能为整数,详见支付金额的值 + * @return 值 + **/ + public function GetTotal_fee() + { + return $this->values['total_fee']; + } + /** + * 判断订单总金额,单位为分,只能为整数,详见支付金额是否存在 + * @return true 或 false + **/ + public function IsTotal_feeSet() + { + return array_key_exists('total_fee', $this->values); + } + + + /** + * 设置符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型 + * @param string $value + **/ + public function SetFee_type($value) + { + $this->values['fee_type'] = $value; + } + /** + * 获取符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型的值 + * @return 值 + **/ + public function GetFee_type() + { + return $this->values['fee_type']; + } + /** + * 判断符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型是否存在 + * @return true 或 false + **/ + public function IsFee_typeSet() + { + return array_key_exists('fee_type', $this->values); + } + + + /** + * 设置调用微信支付API的机器IP + * @param string $value + **/ + public function SetSpbill_create_ip($value) + { + $this->values['spbill_create_ip'] = $value; + } + /** + * 获取调用微信支付API的机器IP 的值 + * @return 值 + **/ + public function GetSpbill_create_ip() + { + return $this->values['spbill_create_ip']; + } + /** + * 判断调用微信支付API的机器IP 是否存在 + * @return true 或 false + **/ + public function IsSpbill_create_ipSet() + { + return array_key_exists('spbill_create_ip', $this->values); + } + + + /** + * 设置订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。详见时间规则 + * @param string $value + **/ + public function SetTime_start($value) + { + $this->values['time_start'] = $value; + } + /** + * 获取订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。详见时间规则的值 + * @return 值 + **/ + public function GetTime_start() + { + return $this->values['time_start']; + } + /** + * 判断订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。详见时间规则是否存在 + * @return true 或 false + **/ + public function IsTime_startSet() + { + return array_key_exists('time_start', $this->values); + } + + + /** + * 设置订单失效时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。详见时间规则 + * @param string $value + **/ + public function SetTime_expire($value) + { + $this->values['time_expire'] = $value; + } + /** + * 获取订单失效时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。详见时间规则的值 + * @return 值 + **/ + public function GetTime_expire() + { + return $this->values['time_expire']; + } + /** + * 判断订单失效时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。详见时间规则是否存在 + * @return true 或 false + **/ + public function IsTime_expireSet() + { + return array_key_exists('time_expire', $this->values); + } + + + /** + * 设置商品标记,代金券或立减优惠功能的参数,说明详见代金券或立减优惠 + * @param string $value + **/ + public function SetGoods_tag($value) + { + $this->values['goods_tag'] = $value; + } + /** + * 获取商品标记,代金券或立减优惠功能的参数,说明详见代金券或立减优惠的值 + * @return 值 + **/ + public function GetGoods_tag() + { + return $this->values['goods_tag']; + } + /** + * 判断商品标记,代金券或立减优惠功能的参数,说明详见代金券或立减优惠是否存在 + * @return true 或 false + **/ + public function IsGoods_tagSet() + { + return array_key_exists('goods_tag', $this->values); + } + + + /** + * 设置扫码支付授权码,设备读取用户微信中的条码或者二维码信息 + * @param string $value + **/ + public function SetAuth_code($value) + { + $this->values['auth_code'] = $value; + } + /** + * 获取扫码支付授权码,设备读取用户微信中的条码或者二维码信息的值 + * @return 值 + **/ + public function GetAuth_code() + { + return $this->values['auth_code']; + } + /** + * 判断扫码支付授权码,设备读取用户微信中的条码或者二维码信息是否存在 + * @return true 或 false + **/ + public function IsAuth_codeSet() + { + return array_key_exists('auth_code', $this->values); + } +} + +/** + * + * 撤销输入对象 + * @author widyhu + * + */ +class WxPayReverse extends WxPayDataBase +{ + /** + * 设置微信分配的公众账号ID + * @param string $value + **/ + public function SetAppid($value) + { + $this->values['appid'] = $value; + } + /** + * 获取微信分配的公众账号ID的值 + * @return 值 + **/ + public function GetAppid() + { + return $this->values['appid']; + } + /** + * 判断微信分配的公众账号ID是否存在 + * @return true 或 false + **/ + public function IsAppidSet() + { + return array_key_exists('appid', $this->values); + } + + + /** + * 设置微信支付分配的商户号 + * @param string $value + **/ + public function SetMch_id($value) + { + $this->values['mch_id'] = $value; + } + /** + * 获取微信支付分配的商户号的值 + * @return 值 + **/ + public function GetMch_id() + { + return $this->values['mch_id']; + } + /** + * 判断微信支付分配的商户号是否存在 + * @return true 或 false + **/ + public function IsMch_idSet() + { + return array_key_exists('mch_id', $this->values); + } + + + /** + * 设置微信的订单号,优先使用 + * @param string $value + **/ + public function SetTransaction_id($value) + { + $this->values['transaction_id'] = $value; + } + /** + * 获取微信的订单号,优先使用的值 + * @return 值 + **/ + public function GetTransaction_id() + { + return $this->values['transaction_id']; + } + /** + * 判断微信的订单号,优先使用是否存在 + * @return true 或 false + **/ + public function IsTransaction_idSet() + { + return array_key_exists('transaction_id', $this->values); + } + + + /** + * 设置商户系统内部的订单号,transaction_id、out_trade_no二选一,如果同时存在优先级:transaction_id> out_trade_no + * @param string $value + **/ + public function SetOut_trade_no($value) + { + $this->values['out_trade_no'] = $value; + } + /** + * 获取商户系统内部的订单号,transaction_id、out_trade_no二选一,如果同时存在优先级:transaction_id> out_trade_no的值 + * @return 值 + **/ + public function GetOut_trade_no() + { + return $this->values['out_trade_no']; + } + /** + * 判断商户系统内部的订单号,transaction_id、out_trade_no二选一,如果同时存在优先级:transaction_id> out_trade_no是否存在 + * @return true 或 false + **/ + public function IsOut_trade_noSet() + { + return array_key_exists('out_trade_no', $this->values); + } + + + /** + * 设置随机字符串,不长于32位。推荐随机数生成算法 + * @param string $value + **/ + public function SetNonce_str($value) + { + $this->values['nonce_str'] = $value; + } + /** + * 获取随机字符串,不长于32位。推荐随机数生成算法的值 + * @return 值 + **/ + public function GetNonce_str() + { + return $this->values['nonce_str']; + } + /** + * 判断随机字符串,不长于32位。推荐随机数生成算法是否存在 + * @return true 或 false + **/ + public function IsNonce_strSet() + { + return array_key_exists('nonce_str', $this->values); + } +} + +/** + * + * 提交JSAPI输入对象 + * @author widyhu + * + */ +class WxPayJsApiPay extends WxPayDataBase +{ + /** + * 设置微信分配的公众账号ID + * @param string $value + **/ + public function SetAppid($value) + { + $this->values['appId'] = $value; + } + /** + * 获取微信分配的公众账号ID的值 + * @return 值 + **/ + public function GetAppid() + { + return $this->values['appId']; + } + /** + * 判断微信分配的公众账号ID是否存在 + * @return true 或 false + **/ + public function IsAppidSet() + { + return array_key_exists('appId', $this->values); + } + + + /** + * 设置支付时间戳 + * @param string $value + **/ + public function SetTimeStamp($value) + { + $this->values['timeStamp'] = $value; + } + /** + * 获取支付时间戳的值 + * @return 值 + **/ + public function GetTimeStamp() + { + return $this->values['timeStamp']; + } + /** + * 判断支付时间戳是否存在 + * @return true 或 false + **/ + public function IsTimeStampSet() + { + return array_key_exists('timeStamp', $this->values); + } + + /** + * 随机字符串 + * @param string $value + **/ + public function SetNonceStr($value) + { + $this->values['nonceStr'] = $value; + } + /** + * 获取notify随机字符串值 + * @return 值 + **/ + public function GetReturn_code() + { + return $this->values['nonceStr']; + } + /** + * 判断随机字符串是否存在 + * @return true 或 false + **/ + public function IsReturn_codeSet() + { + return array_key_exists('nonceStr', $this->values); + } + + + /** + * 设置订单详情扩展字符串 + * @param string $value + **/ + public function SetPackage($value) + { + $this->values['package'] = $value; + } + /** + * 获取订单详情扩展字符串的值 + * @return 值 + **/ + public function GetPackage() + { + return $this->values['package']; + } + /** + * 判断订单详情扩展字符串是否存在 + * @return true 或 false + **/ + public function IsPackageSet() + { + return array_key_exists('package', $this->values); + } + + /** + * 设置签名方式 + * @param string $value + **/ + public function SetSignType($value) + { + $this->values['signType'] = $value; + } + /** + * 获取签名方式 + * @return 值 + **/ + public function GetSignType() + { + return $this->values['signType']; + } + /** + * 判断签名方式是否存在 + * @return true 或 false + **/ + public function IsSignTypeSet() + { + return array_key_exists('signType', $this->values); + } + + /** + * 设置签名方式 + * @param string $value + **/ + public function SetPaySign($value) + { + $this->values['paySign'] = $value; + } + /** + * 获取签名方式 + * @return 值 + **/ + public function GetPaySign() + { + return $this->values['paySign']; + } + /** + * 判断签名方式是否存在 + * @return true 或 false + **/ + public function IsPaySignSet() + { + return array_key_exists('paySign', $this->values); + } +} + +/** + * + * 扫码支付模式一生成二维码参数 + * @author widyhu + * + */ +class WxPayBizPayUrl extends WxPayDataBase +{ + /** + * 设置微信分配的公众账号ID + * @param string $value + **/ + public function SetAppid($value) + { + $this->values['appid'] = $value; + } + /** + * 获取微信分配的公众账号ID的值 + * @return 值 + **/ + public function GetAppid() + { + return $this->values['appid']; + } + /** + * 判断微信分配的公众账号ID是否存在 + * @return true 或 false + **/ + public function IsAppidSet() + { + return array_key_exists('appid', $this->values); + } + + + /** + * 设置微信支付分配的商户号 + * @param string $value + **/ + public function SetMch_id($value) + { + $this->values['mch_id'] = $value; + } + /** + * 获取微信支付分配的商户号的值 + * @return 值 + **/ + public function GetMch_id() + { + return $this->values['mch_id']; + } + /** + * 判断微信支付分配的商户号是否存在 + * @return true 或 false + **/ + public function IsMch_idSet() + { + return array_key_exists('mch_id', $this->values); + } + + /** + * 设置支付时间戳 + * @param string $value + **/ + public function SetTime_stamp($value) + { + $this->values['time_stamp'] = $value; + } + /** + * 获取支付时间戳的值 + * @return 值 + **/ + public function GetTime_stamp() + { + return $this->values['time_stamp']; + } + /** + * 判断支付时间戳是否存在 + * @return true 或 false + **/ + public function IsTime_stampSet() + { + return array_key_exists('time_stamp', $this->values); + } + + /** + * 设置随机字符串 + * @param string $value + **/ + public function SetNonce_str($value) + { + $this->values['nonce_str'] = $value; + } + /** + * 获取随机字符串的值 + * @return 值 + **/ + public function GetNonce_str() + { + return $this->values['nonce_str']; + } + /** + * 判断随机字符串是否存在 + * @return true 或 false + **/ + public function IsNonce_strSet() + { + return array_key_exists('nonce_str', $this->values); + } + + /** + * 设置商品ID + * @param string $value + **/ + public function SetProduct_id($value) + { + $this->values['product_id'] = $value; + } + /** + * 获取商品ID的值 + * @return 值 + **/ + public function GetProduct_id() + { + return $this->values['product_id']; + } + /** + * 判断商品ID是否存在 + * @return true 或 false + **/ + public function IsProduct_idSet() + { + return array_key_exists('product_id', $this->values); + } +} diff --git a/api/pay/weixin/WxPay.JsApiPay.php b/api/pay/weixin/WxPay.JsApiPay.php new file mode 100644 index 0000000..b905dce --- /dev/null +++ b/api/pay/weixin/WxPay.JsApiPay.php @@ -0,0 +1,208 @@ +__CreateOauthUrlForCode($baseUrl); + Header("Location: $url"); + exit(); + } else { + //获取code码,以获取openid + $code = $_GET['code']; + $openid = $this->getOpenidFromMp($code); + return $openid; + } + } + + /** + * + * 获取jsapi支付的参数 + * @param array $UnifiedOrderResult 统一支付接口返回的数据 + * @throws WxPayException + * + * @return json数据,可直接填入js函数作为参数 + */ + public function GetJsApiParameters($UnifiedOrderResult) + { + if(!array_key_exists("appid", $UnifiedOrderResult) + || !array_key_exists("prepay_id", $UnifiedOrderResult) + || $UnifiedOrderResult['prepay_id'] == "") + { + return dr_return_data(0, "参数错误"); + } + $jsapi = new WxPayJsApiPay(); + $jsapi->SetAppid($UnifiedOrderResult["appid"]); + $timeStamp = time(); + $jsapi->SetTimeStamp("$timeStamp"); + $jsapi->SetNonceStr(WxPayApi::getNonceStr()); + $jsapi->SetPackage("prepay_id=" . $UnifiedOrderResult['prepay_id']); + $jsapi->SetSignType("MD5"); + $jsapi->SetPaySign($jsapi->MakeSign()); + $parameters = json_encode($jsapi->GetValues()); + return $parameters; + } + + /** + * + * 通过code从工作平台获取openid机器access_token + * @param string $code 微信跳转回来带上的code + * + * @return openid + */ + public function GetOpenidFromMp($code) + { + $url = $this->__CreateOauthUrlForOpenid($code); + //初始化curl + $ch = curl_init(); + //设置超时 + curl_setopt($ch, CURLOPT_TIMEOUT, $this->curl_timeout); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,FALSE); + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,FALSE); + curl_setopt($ch, CURLOPT_HEADER, FALSE); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); + if(CURL_PROXY_HOST != "0.0.0.0" + && CURL_PROXY_PORT != 0){ + curl_setopt($ch,CURLOPT_PROXY, CURL_PROXY_HOST); + curl_setopt($ch,CURLOPT_PROXYPORT, CURL_PROXY_PORT); + } + //运行curl,结果以jason形式返回 + $res = curl_exec($ch); + curl_close($ch); + //取出openid + $data = json_decode($res,true); + $this->data = $data; + $openid = $data['openid']; + return $openid; + } + + /** + * + * 拼接签名字符串 + * @param array $urlObj + * + * @return 返回已经拼接好的字符串 + */ + private function ToUrlParams($urlObj) + { + $buff = ""; + foreach ($urlObj as $k => $v) + { + if($k != "sign"){ + $buff .= $k . "=" . $v . "&"; + } + } + + $buff = trim($buff, "&"); + return $buff; + } + + /** + * + * 获取地址js参数 + * + * @return 获取共享收货地址js函数需要的参数,json格式可以直接做参数使用 + */ + public function GetEditAddressParameters() + { + $getData = $this->data; + $data = array(); + $data["appid"] = APPID; + $data["url"] = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; + $time = time(); + $data["timestamp"] = "$time"; + $data["noncestr"] = "1234568"; + $data["accesstoken"] = $getData["access_token"]; + ksort($data); + $params = $this->ToUrlParams($data); + $addrSign = sha1($params); + + $afterData = array( + "addrSign" => $addrSign, + "signType" => "sha1", + "scope" => "jsapi_address", + "appId" => APPID, + "timeStamp" => $data["timestamp"], + "nonceStr" => $data["noncestr"] + ); + $parameters = json_encode($afterData); + return $parameters; + } + + /** + * + * 构造获取code的url连接 + * @param string $redirectUrl 微信服务器回跳的url,需要url编码 + * + * @return 返回构造好的url + */ + private function __CreateOauthUrlForCode($redirectUrl) + { + $urlObj["appid"] = APPID; + $urlObj["redirect_uri"] = "$redirectUrl"; + $urlObj["response_type"] = "code"; + $urlObj["scope"] = "snsapi_base"; + $urlObj["state"] = "STATE"."#wechat_redirect"; + $bizString = $this->ToUrlParams($urlObj); + return "https://open.weixin.qq.com/connect/oauth2/authorize?".$bizString; + } + + /** + * + * 构造获取open和access_toke的url地址 + * @param string $code,微信跳转带回的code + * + * @return 请求的url + */ + private function __CreateOauthUrlForOpenid($code) + { + $urlObj["appid"] = APPID; + $urlObj["secret"] = APPSECRET; + $urlObj["code"] = $code; + $urlObj["grant_type"] = "authorization_code"; + $bizString = $this->ToUrlParams($urlObj); + return "https://api.weixin.qq.com/sns/oauth2/access_token?".$bizString; + } +} \ No newline at end of file diff --git a/api/pay/weixin/WxPay.NativePay.php b/api/pay/weixin/WxPay.NativePay.php new file mode 100644 index 0000000..b1510bb --- /dev/null +++ b/api/pay/weixin/WxPay.NativePay.php @@ -0,0 +1,56 @@ +SetProduct_id($productId); + $values = WxpayApi::bizpayurl($biz); + $url = "weixin://wxpay/bizpayurl?" . $this->ToUrlParams($values); + return $url; + } + + /** + * + * 参数数组转换为url参数 + * @param array $urlObj + */ + private function ToUrlParams($urlObj) + { + $buff = ""; + foreach ($urlObj as $k => $v) + { + $buff .= $k . "=" . $v . "&"; + } + + $buff = trim($buff, "&"); + return $buff; + } + + /** + * + * 生成直接支付url,支付url有效期为2小时,模式二 + * @param UnifiedOrderInput $input + */ + public function GetPayUrl($input) + { + if($input->GetTrade_type() == "NATIVE") + { + $result = WxPayApi::unifiedOrder($input); + return $result; + } + } +} \ No newline at end of file diff --git a/api/pay/weixin/WxPay.Notify.php b/api/pay/weixin/WxPay.Notify.php new file mode 100644 index 0000000..9ce34bb --- /dev/null +++ b/api/pay/weixin/WxPay.Notify.php @@ -0,0 +1,85 @@ +SetReturn_code("FAIL"); + $this->SetReturn_msg($msg); + $this->ReplyNotify(false); + return; + } else { + //该分支在成功回调到NotifyCallBack方法,处理完成之后流程 + $this->SetReturn_code("SUCCESS"); + $this->SetReturn_msg("OK"); + } + $this->ReplyNotify($needSign); + } + + /** + * + * 回调方法入口,子类可重写该方法 + * 注意: + * 1、微信回调超时时间为2s,建议用户使用异步处理流程,确认成功之后立刻回复微信服务器 + * 2、微信服务器在调用失败或者接到回包为非确认包的时候,会发起重试,需确保你的回调是可以重入 + * @param array $data 回调解释出的参数 + * @param string $msg 如果回调处理失败,可以将错误信息输出到该方法 + * @return true回调出来完成不需要继续回调,false回调处理未完成需要继续回调 + */ + public function NotifyProcess($data, &$msg) + { + //TODO 用户基础该类之后需要重写该方法,成功的时候返回true,失败返回false + return true; + } + + /** + * + * notify回调方法,该方法中需要赋值需要输出的参数,不可重写 + * @param array $data + * @return true回调出来完成不需要继续回调,false回调处理未完成需要继续回调 + */ + final public function NotifyCallBack($data) + { + $msg = "OK"; + $result = $this->NotifyProcess($data, $msg); + + if($result == true){ + $this->SetReturn_code("SUCCESS"); + $this->SetReturn_msg("OK"); + } else { + $this->SetReturn_code("FAIL"); + $this->SetReturn_msg($msg); + } + return $result; + } + + /** + * + * 回复通知 + * @param bool $needSign 是否需要签名输出 + */ + final private function ReplyNotify($needSign = true) + { + //如果需要签名 + if($needSign == true && + $this->GetReturn_code($return_code) == "SUCCESS") + { + $this->SetSign(); + } + WxpayApi::replyNotify($this->ToXml()); + } +} \ No newline at end of file diff --git a/api/pay/weixin/WxPayPubHelper/SDKRuntimeException.php b/api/pay/weixin/WxPayPubHelper/SDKRuntimeException.php new file mode 100644 index 0000000..669b649 --- /dev/null +++ b/api/pay/weixin/WxPayPubHelper/SDKRuntimeException.php @@ -0,0 +1,11 @@ +getMessage(); + } + +} + +?> \ No newline at end of file diff --git a/api/pay/weixin/WxPayPubHelper/WxPayPubHelper.php b/api/pay/weixin/WxPayPubHelper/WxPayPubHelper.php new file mode 100644 index 0000000..d3b2584 --- /dev/null +++ b/api/pay/weixin/WxPayPubHelper/WxPayPubHelper.php @@ -0,0 +1,873 @@ + $v) + { + if($urlencode) + { + $v = urlencode($v); + } + //$buff .= strtolower($k) . "=" . $v . "&"; + $buff .= $k . "=" . $v . "&"; + } + } + $reqPar; + if (strlen($buff) > 0) + { + $reqPar = substr($buff, 0, strlen($buff)-1); + } + return $reqPar; + } + + /** + * 作用:生成签名 + */ + public function getSign($Obj) + { + foreach ($Obj as $k => $v) + { + $Parameters[$k] = $v; + } + //签名步骤一:按字典序排序参数 + ksort($Parameters); + $String = $this->formatBizQueryParaMap($Parameters, false); + //echo '【string1】'.$String.'
'; + //签名步骤二:在string后加入KEY + $String = $String."&key=".KEY; + //echo "【string2】".$String."
"; + //签名步骤三:MD5加密 + $String = md5($String); + //echo "【string3】 ".$String."
"; + //签名步骤四:所有字符转为大写 + $result_ = strtoupper($String); + //echo "【result】 ".$result_."
"; + return $result_; + } + + /** + * 作用:array转xml + */ + function arrayToXml($arr) + { + $xml = ""; + foreach ($arr as $key=>$val) + { + if (is_numeric($val)) + { + $xml.="<".$key.">".$val.""; + + } + else + $xml.="<".$key.">"; + } + $xml.=""; + return $xml; + } + + /** + * 作用:将xml转为array + */ + public function xmlToArray($xml) + { + //将XML转为array + $array_data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true); + return $array_data; + } + + /** + * 作用:以post方式提交xml到对应的接口url + */ + public function postXmlCurl($xml,$url,$second=30) + { + //初始化curl + $ch = curl_init(); + //设置超时 + @curl_setopt($ch, CURLOP_TIMEOUT, $second); + //这里设置代理,如果有的话 + //curl_setopt($ch,CURLOPT_PROXY, '8.8.8.8'); + //curl_setopt($ch,CURLOPT_PROXYPORT, 8080); + curl_setopt($ch,CURLOPT_URL, $url); + curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE); + curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE); + //设置header + curl_setopt($ch, CURLOPT_HEADER, FALSE); + //要求结果为字符串且输出到屏幕上 + curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); + //post提交方式 + curl_setopt($ch, CURLOPT_POST, TRUE); + curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); + //运行curl + $data = curl_exec($ch); + curl_close($ch); + //返回结果 + if($data) + { + @curl_close($ch); + return $data; + } + else + { + $error = curl_errno($ch); + echo "curl出错,错误码:$error"."
"; + echo "错误原因查询
"; + @curl_close($ch); + return false; + } + } + + /** + * 作用:使用证书,以post方式提交xml到对应的接口url + */ + function postXmlSSLCurl($xml,$url,$second=30) + { + $ch = curl_init(); + //超时时间 + curl_setopt($ch,CURLOPT_TIMEOUT,$second); + //这里设置代理,如果有的话 + //curl_setopt($ch,CURLOPT_PROXY, '8.8.8.8'); + //curl_setopt($ch,CURLOPT_PROXYPORT, 8080); + curl_setopt($ch,CURLOPT_URL, $url); + curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE); + curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE); + //设置header + curl_setopt($ch,CURLOPT_HEADER,FALSE); + //要求结果为字符串且输出到屏幕上 + curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE); + //设置证书 + //使用证书:cert 与 key 分别属于两个.pem文件 + //默认格式为PEM,可以注释 + curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM'); + curl_setopt($ch,CURLOPT_SSLCERT, SSLCERT_PATH); + //默认格式为PEM,可以注释 + curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM'); + curl_setopt($ch,CURLOPT_SSLKEY, SSLKEY_PATH); + //post提交方式 + curl_setopt($ch,CURLOPT_POST, true); + curl_setopt($ch,CURLOPT_POSTFIELDS,$xml); + $data = curl_exec($ch); + //返回结果 + if($data){ + curl_close($ch); + return $data; + } + else { + $error = curl_errno($ch); + echo "curl出错,错误码:$error"."
"; + echo "错误原因查询
"; + curl_close($ch); + return false; + } + } + + /** + * 作用:打印数组 + */ + function printErr($wording='',$err='') + { + print_r('
');
+		echo $wording."
"; + var_dump($err); + print_r('
'); + } +} + +/** + * 请求型接口的基类 + */ +class Wxpay_client_pub extends Common_util_pub +{ + var $parameters;//请求参数,类型为关联数组 + public $response;//微信返回的响应 + public $result;//返回参数,类型为关联数组 + var $url;//接口链接 + var $curl_timeout;//curl超时时间 + + /** + * 作用:设置请求参数 + */ + function setParameter($parameter, $parameterValue) + { + $this->parameters[$this->trimString($parameter)] = $this->trimString($parameterValue); + } + + /** + * 作用:设置标配的请求参数,生成签名,生成接口参数xml + */ + function createXml() + { + $this->parameters["appid"] = APPID;//公众账号ID + $this->parameters["mch_id"] = MCHID;//商户号 + $this->parameters["nonce_str"] = $this->createNoncestr();//随机字符串 + $this->parameters["sign"] = $this->getSign($this->parameters);//签名 + return $this->arrayToXml($this->parameters); + } + + /** + * 作用:post请求xml + */ + function postXml() + { + $xml = $this->createXml(); + $this->response = $this->postXmlCurl($xml,$this->url,$this->curl_timeout); + return $this->response; + } + + /** + * 作用:使用证书post请求xml + */ + function postXmlSSL() + { + $xml = $this->createXml(); + $this->response = $this->postXmlSSLCurl($xml,$this->url,$this->curl_timeout); + return $this->response; + } + + /** + * 作用:获取结果,默认不使用证书 + */ + function getResult() + { + $this->postXml(); + $this->result = $this->xmlToArray($this->response); + return $this->result; + } +} + + +/** + * 统一支付接口类 + */ +class UnifiedOrder_pub extends Wxpay_client_pub +{ + function __construct() + { + //设置接口链接 + $this->url = "https://api.mch.weixin.qq.com/pay/unifiedorder"; + //设置curl超时时间 + $this->curl_timeout = 30; + } + + /** + * 生成接口参数xml + */ + function createXml() + { + try + { + //检测必填参数 + if($this->parameters["out_trade_no"] == null) + { + throw new SDKRuntimeException("缺少统一支付接口必填参数out_trade_no!"."
"); + }elseif($this->parameters["body"] == null){ + throw new SDKRuntimeException("缺少统一支付接口必填参数body!"."
"); + }elseif ($this->parameters["total_fee"] == null ) { + throw new SDKRuntimeException("缺少统一支付接口必填参数total_fee!"."
"); + }elseif ($this->parameters["notify_url"] == null) { + throw new SDKRuntimeException("缺少统一支付接口必填参数notify_url!"."
"); + }elseif ($this->parameters["trade_type"] == null) { + throw new SDKRuntimeException("缺少统一支付接口必填参数trade_type!"."
"); + }elseif ($this->parameters["trade_type"] == "JSAPI" && + $this->parameters["openid"] == NULL){ + throw new SDKRuntimeException("统一支付接口中,缺少必填参数openid!trade_type为JSAPI时,openid为必填参数!"."
"); + } + $this->parameters["appid"] = APPID;//公众账号ID + $this->parameters["mch_id"] = MCHID;//商户号 + $this->parameters["spbill_create_ip"] = $_SERVER['REMOTE_ADDR'];//终端ip + $this->parameters["nonce_str"] = $this->createNoncestr();//随机字符串 + $this->parameters["sign"] = $this->getSign($this->parameters);//签名 + return $this->arrayToXml($this->parameters); + }catch (SDKRuntimeException $e) + { + die($e->errorMessage()); + } + } + + /** + * 获取prepay_id + */ + function getPrepayId() + { + $this->postXml(); + $this->result = $this->xmlToArray($this->response); + $prepay_id = $this->result["prepay_id"]; + return $prepay_id; + } + +} + +/** + * 订单查询接口 + */ +class OrderQuery_pub extends Wxpay_client_pub +{ + function __construct() + { + //设置接口链接 + $this->url = "https://api.mch.weixin.qq.com/pay/orderquery"; + //设置curl超时时间 + $this->curl_timeout = 30; + } + + /** + * 生成接口参数xml + */ + function createXml() + { + try + { + //检测必填参数 + if($this->parameters["out_trade_no"] == null && + $this->parameters["transaction_id"] == null) + { + throw new SDKRuntimeException("订单查询接口中,out_trade_no、transaction_id至少填一个!"."
"); + } + $this->parameters["appid"] = APPID;//公众账号ID + $this->parameters["mch_id"] = MCHID;//商户号 + $this->parameters["nonce_str"] = $this->createNoncestr();//随机字符串 + $this->parameters["sign"] = $this->getSign($this->parameters);//签名 + return $this->arrayToXml($this->parameters); + }catch (SDKRuntimeException $e) + { + die($e->errorMessage()); + } + } + +} + +/** + * 退款申请接口 + */ +class Refund_pub extends Wxpay_client_pub +{ + + function __construct() { + //设置接口链接 + $this->url = "https://api.mch.weixin.qq.com/secapi/pay/refund"; + //设置curl超时时间 + $this->curl_timeout = 30; + } + + /** + * 生成接口参数xml + */ + function createXml() + { + try + { + //检测必填参数 + if($this->parameters["out_trade_no"] == null && $this->parameters["transaction_id"] == null) { + throw new SDKRuntimeException("退款申请接口中,out_trade_no、transaction_id至少填一个!"."
"); + }elseif($this->parameters["out_refund_no"] == null){ + throw new SDKRuntimeException("退款申请接口中,缺少必填参数out_refund_no!"."
"); + }elseif($this->parameters["total_fee"] == null){ + throw new SDKRuntimeException("退款申请接口中,缺少必填参数total_fee!"."
"); + }elseif($this->parameters["refund_fee"] == null){ + throw new SDKRuntimeException("退款申请接口中,缺少必填参数refund_fee!"."
"); + }elseif($this->parameters["op_user_id"] == null){ + throw new SDKRuntimeException("退款申请接口中,缺少必填参数op_user_id!"."
"); + } + $this->parameters["appid"] = APPID;//公众账号ID + $this->parameters["mch_id"] = MCHID;//商户号 + $this->parameters["nonce_str"] = $this->createNoncestr();//随机字符串 + $this->parameters["sign"] = $this->getSign($this->parameters);//签名 + return $this->arrayToXml($this->parameters); + }catch (SDKRuntimeException $e) + { + die($e->errorMessage()); + } + } + /** + * 作用:获取结果,使用证书通信 + */ + function getResult() + { + $this->postXmlSSL(); + $this->result = $this->xmlToArray($this->response); + return $this->result; + } + +} + + +/** + * 退款查询接口 + */ +class RefundQuery_pub extends Wxpay_client_pub +{ + + function __construct() { + //设置接口链接 + $this->url = "https://api.mch.weixin.qq.com/pay/refundquery"; + //设置curl超时时间 + $this->curl_timeout = 30; + } + + /** + * 生成接口参数xml + */ + function createXml() + { + try + { + if($this->parameters["out_refund_no"] == null && + $this->parameters["out_trade_no"] == null && + $this->parameters["transaction_id"] == null && + $this->parameters["refund_id "] == null) + { + throw new SDKRuntimeException("退款查询接口中,out_refund_no、out_trade_no、transaction_id、refund_id四个参数必填一个!"."
"); + } + $this->parameters["appid"] = APPID;//公众账号ID + $this->parameters["mch_id"] = MCHID;//商户号 + $this->parameters["nonce_str"] = $this->createNoncestr();//随机字符串 + $this->parameters["sign"] = $this->getSign($this->parameters);//签名 + return $this->arrayToXml($this->parameters); + }catch (SDKRuntimeException $e) + { + die($e->errorMessage()); + } + } + + /** + * 作用:获取结果,使用证书通信 + */ + function getResult() + { + $this->postXmlSSL(); + $this->result = $this->xmlToArray($this->response); + return $this->result; + } + +} + +/** + * 对账单接口 + */ +class DownloadBill_pub extends Wxpay_client_pub +{ + + function __construct() + { + //设置接口链接 + $this->url = "https://api.mch.weixin.qq.com/pay/downloadbill"; + //设置curl超时时间 + $this->curl_timeout = 30; + } + + /** + * 生成接口参数xml + */ + function createXml() + { + try + { + if($this->parameters["bill_date"] == null ) + { + throw new SDKRuntimeException("对账单接口中,缺少必填参数bill_date!"."
"); + } + $this->parameters["appid"] = APPID;//公众账号ID + $this->parameters["mch_id"] = MCHID;//商户号 + $this->parameters["nonce_str"] = $this->createNoncestr();//随机字符串 + $this->parameters["sign"] = $this->getSign($this->parameters);//签名 + return $this->arrayToXml($this->parameters); + }catch (SDKRuntimeException $e) + { + die($e->errorMessage()); + } + } + + /** + * 作用:获取结果,默认不使用证书 + */ + function getResult() + { + $this->postXml(); + $this->result = $this->xmlToArray($this->result_xml); + return $this->result; + } + + + +} + +/** + * 短链接转换接口 + */ +class ShortUrl_pub extends Wxpay_client_pub +{ + function __construct() + { + //设置接口链接 + $this->url = "https://api.mch.weixin.qq.com/tools/shorturl"; + //设置curl超时时间 + $this->curl_timeout = 30; + } + + /** + * 生成接口参数xml + */ + function createXml() + { + try + { + if($this->parameters["long_url"] == null ) + { + throw new SDKRuntimeException("短链接转换接口中,缺少必填参数long_url!"."
"); + } + $this->parameters["appid"] = APPID;//公众账号ID + $this->parameters["mch_id"] = MCHID;//商户号 + $this->parameters["nonce_str"] = $this->createNoncestr();//随机字符串 + $this->parameters["sign"] = $this->getSign($this->parameters);//签名 + return $this->arrayToXml($this->parameters); + }catch (SDKRuntimeException $e) + { + die($e->errorMessage()); + } + } + + /** + * 获取prepay_id + */ + function getShortUrl() + { + $this->postXml(); + $prepay_id = $this->result["short_url"]; + return $prepay_id; + } + +} + +/** + * 响应型接口基类 + */ +class Wxpay_server_pub extends Common_util_pub +{ + public $data;//接收到的数据,类型为关联数组 + var $returnParameters;//返回参数,类型为关联数组 + + /** + * 将微信的请求xml转换成关联数组,以方便数据处理 + */ + function saveData($xml) + { + $this->data = $this->xmlToArray($xml); + } + + function checkSign() + { + $tmpData = $this->data; + unset($tmpData['sign']); + $sign = $this->getSign($tmpData);//本地签名 + if ($this->data['sign'] == $sign) { + return TRUE; + } + return FALSE; + } + + /** + * 获取微信的请求数据 + */ + function getData() + { + return $this->data; + } + + /** + * 设置返回微信的xml数据 + */ + function setReturnParameter($parameter, $parameterValue) + { + $this->returnParameters[$this->trimString($parameter)] = $this->trimString($parameterValue); + } + + /** + * 生成接口参数xml + */ + function createXml() + { + return $this->arrayToXml($this->returnParameters); + } + + /** + * 将xml数据返回微信 + */ + function returnXml() + { + $returnXml = $this->createXml(); + return $returnXml; + } +} + + +/** + * 通用通知接口 + */ +class Notify_pub extends Wxpay_server_pub +{ + +} + + + + +/** + * 请求商家获取商品信息接口 + */ +class NativeCall_pub extends Wxpay_server_pub +{ + /** + * 生成接口参数xml + */ + function createXml() + { + if($this->returnParameters["return_code"] == "SUCCESS"){ + $this->returnParameters["appid"] = APPID;//公众账号ID + $this->returnParameters["mch_id"] = MCHID;//商户号 + $this->returnParameters["nonce_str"] = $this->createNoncestr();//随机字符串 + $this->returnParameters["sign"] = $this->getSign($this->returnParameters);//签名 + } + return $this->arrayToXml($this->returnParameters); + } + + /** + * 获取product_id + */ + function getProductId() + { + $product_id = $this->data["product_id"]; + return $product_id; + } + +} + +/** + * 静态链接二维码 + */ +class NativeLink_pub extends Common_util_pub +{ + var $parameters;//静态链接参数 + var $url;//静态链接 + + function __construct() + { + } + + /** + * 设置参数 + */ + function setParameter($parameter, $parameterValue) + { + $this->parameters[$this->trimString($parameter)] = $this->trimString($parameterValue); + } + + /** + * 生成Native支付链接二维码 + */ + function createLink() + { + try + { + if($this->parameters["product_id"] == null) + { + throw new SDKRuntimeException("缺少Native支付二维码链接必填参数product_id!"."
"); + } + $this->parameters["appid"] = APPID;//公众账号ID + $this->parameters["mch_id"] = MCHID;//商户号 + $time_stamp = time(); + $this->parameters["time_stamp"] = "$time_stamp";//时间戳 + $this->parameters["nonce_str"] = $this->createNoncestr();//随机字符串 + $this->parameters["sign"] = $this->getSign($this->parameters);//签名 + $bizString = $this->formatBizQueryParaMap($this->parameters, false); + $this->url = "weixin://wxpay/bizpayurl?".$bizString; + }catch (SDKRuntimeException $e) + { + die($e->errorMessage()); + } + } + + /** + * 返回链接 + */ + function getUrl() + { + $this->createLink(); + return $this->url; + } +} + +/** +* JSAPI支付——H5网页端调起支付接口 +*/ +class JsApi_pub extends Common_util_pub +{ + var $code;//code码,用以获取openid + var $openid;//用户的openid + var $parameters;//jsapi参数,格式为json + var $prepay_id;//使用统一支付接口得到的预支付id + var $curl_timeout;//curl超时时间 + + function __construct() + { + //设置curl超时时间 + $this->curl_timeout = 30; + } + + /** + * 作用:生成可以获得code的url + */ + function createOauthUrlForCode($redirectUrl) + { + $urlObj["appid"] = APPID; + $urlObj["redirect_uri"] = "$redirectUrl"; + $urlObj["response_type"] = "code"; + $urlObj["scope"] = "snsapi_base"; + $urlObj["state"] = "STATE"."#wechat_redirect"; + $bizString = $this->formatBizQueryParaMap($urlObj, false); + return "https://open.weixin.qq.com/connect/oauth2/authorize?".$bizString; + } + + /** + * 作用:生成可以获得openid的url + */ + function createOauthUrlForOpenid() + { + $urlObj["appid"] = APPID; + $urlObj["secret"] = APPSECRET; + $urlObj["code"] = $this->code; + $urlObj["grant_type"] = "authorization_code"; + $bizString = $this->formatBizQueryParaMap($urlObj, false); + return "https://api.weixin.qq.com/sns/oauth2/access_token?".$bizString; + } + + + /** + * 作用:通过curl向微信提交code,以获取openid + */ + function getOpenid() + { + $url = $this->createOauthUrlForOpenid(); + //初始化curl + $ch = curl_init(); + //设置超时 + curl_setopt($ch, CURLOP_TIMEOUT, $this->curl_timeout); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE); + curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE); + curl_setopt($ch, CURLOPT_HEADER, FALSE); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); + //运行curl,结果以jason形式返回 + $res = curl_exec($ch); + curl_close($ch); + //取出openid + $data = json_decode($res,true); + $this->openid = $data['openid']; + return $this->openid; + } + + /** + * 作用:设置prepay_id + */ + function setPrepayId($prepayId) + { + $this->prepay_id = $prepayId; + } + + /** + * 作用:设置code + */ + function setCode($code_) + { + $this->code = $code_; + } + + /** + * 作用:设置jsapi的参数 + */ + public function getParameters() + { + $jsApiObj["appId"] = APPID; + $timeStamp = time(); + $jsApiObj["timeStamp"] = "$timeStamp"; + $jsApiObj["nonceStr"] = $this->createNoncestr(); + $jsApiObj["package"] = "prepay_id=$this->prepay_id"; + $jsApiObj["signType"] = "MD5"; + $jsApiObj["paySign"] = $this->getSign($jsApiObj); + $this->parameters = json_encode($jsApiObj); + + return $this->parameters; + } +} + + + +?> diff --git a/api/pay/weixin/call.php b/api/pay/weixin/call.php new file mode 100644 index 0000000..554570d --- /dev/null +++ b/api/pay/weixin/call.php @@ -0,0 +1,108 @@ +saveData($xml); + if($nativeCall->checkSign() == FALSE){ + $nativeCall->setReturnParameter("return_code","FAIL");//返回状态码 + $nativeCall->setReturnParameter("return_msg","签名失败");//返回信息 + }else{ + //【支付成功】 + $sn = $nativeCall->data["out_trade_no"]; + $money = $nativeCall->data["total_fee"]; + $transaction_id = $nativeCall->data["transaction_id"]; + //使用统一支付接口 + $unifiedOrder = new UnifiedOrder_pub(); + $nativeCall->setReturnParameter("return_code","SUCCESS");//返回状态码 + $nativeCall->setReturnParameter("result_code","SUCCESS");//业务结果 + $this->pay_model->pay_success($sn, number_format($money/100, 2, '.', ''), '交易号:'.$transaction_id); + } + //将结果返回微信 + $returnXml = $nativeCall->returnXml(); + echo $returnXml; +} elseif (DR_PAY_FILE == 'return_js') { + //使用js通知接口 + + define('REPORT_LEVENL', 0); + + require "WxPay.Data.php"; + require "WxPay.Api.php"; + require "WxPay.Notify.php"; + + + class PayNotifyCallBack extends WxPayNotify + { + public $ci; + + //查询订单 + public function Queryorder($transaction_id) + { + $input = new WxPayOrderQuery(); + $input->SetTransaction_id($transaction_id); + $result = WxPayApi::orderQuery($input); + if(array_key_exists("return_code", $result) + && array_key_exists("result_code", $result) + && $result["return_code"] == "SUCCESS" + && $result["result_code"] == "SUCCESS") + { + return true; + } + return false; + } + + //重写回调处理函数 + public function NotifyProcess($data, &$msg) + { + $notfiyOutput = array(); + + if(!array_key_exists("transaction_id", $data)){ + //$msg = "输入参数不正确"; + return false; + } + + /* + //查询订单,判断订单真实性 + if(!$this->Queryorder($data["transaction_id"])){ + //$msg = "订单查询失败"; + + file_put_contents(WEBPATH."wx.txt", var_export($rt, true)); + return false; + }*/ + + // 处理支付表状态 + $money = $data["total_fee"]; + $this->ci->pay_model->pay_success($data['out_trade_no'], number_format($money/100, 2, '.', ''), '交易号:'.$data["transaction_id"]); + + return true; + } + } + + $notify = new PayNotifyCallBack(); + $notify->ci = $this; + $notify->Handle(false); +} else { + // 查询支付状态,并返回到扫码页面 + $sn = $this->input->get('sn'); + list($a, $id, $uid, $module, $order) = explode('-', $sn); + // 查询支付记录 + $data = $this->db->where('id', $id)->limit(1)->get('member_paylog')->row_array(); + $callback = $_GET['callback']; + if ($data['status']) { + echo $callback.'('.json_encode(array('status' => 1)).')'; + } else { + echo $callback.'('.json_encode(array('status' => 0)).')'; + } +} \ No newline at end of file diff --git a/api/pay/weixin/config.php b/api/pay/weixin/config.php new file mode 100644 index 0000000..a1a7fb2 --- /dev/null +++ b/api/pay/weixin/config.php @@ -0,0 +1,21 @@ + 1, //1 + 'appsecret' => '', // + 'mchid' => '', // + 'key' => '', // + 'name' => '微信支付', //微信支付 + +); \ No newline at end of file diff --git a/api/pay/weixin/logo.png b/api/pay/weixin/logo.png new file mode 100644 index 0000000..8dc0c64 Binary files /dev/null and b/api/pay/weixin/logo.png differ diff --git a/api/pay/weixin/notify_url.php b/api/pay/weixin/notify_url.php new file mode 100644 index 0000000..1de3298 --- /dev/null +++ b/api/pay/weixin/notify_url.php @@ -0,0 +1,6 @@ +GetOpenid(); + $result['name'] = '微信支付'; + if (!$openId) { + $result['html'] = 'Openid没有获取到,请重新试试'; + } else { + // 统一下单 + $input = new WxPayUnifiedOrder(); + $input->SetBody($title); + $input->SetOut_trade_no($sn); + $input->SetTotal_fee($money * 100); // 金额 + $input->SetTime_start(date("YmdHis", SYS_TIME)); + $input->SetTime_expire(date("YmdHis", SYS_TIME + 7200)); + $input->SetNotify_url(JS_API_CALL_URL); + $input->SetTrade_type("JSAPI"); // JSAPI,NATIVE,APP + $input->SetProduct_id($id); + $input->SetOpenid($openId); + $order = WxPayApi::unifiedOrder($input); + + + if (!$order) { + $result['html'] = '未获取到返回数据'; + } elseif (isset($order['code']) && $order['code'] == 0) { + $result['html'] = '错误2:'.$order['msg']; + } elseif ($order["err_code_des"]) { + $result['html'] = '错误3:'.$order['err_code_des']; + } else { + $jsApiParameters = $tools->GetJsApiParameters($order); + if (is_array($jsApiParameters) && isset($jsApiParameters['code']) && $jsApiParameters['code'] == 0) { + // 有错误时 、 + $result['html'] = 'js参数生成错误'; + } else { + //获取共享收货地址js函数参数 + $editAddress = $tools->GetEditAddressParameters(); + // 存储支付结果 + $order['sn'] = $sn; + //$this->db->where('id', $id)->update('member_paylog', array('result' => dr_array2string($order))); + $result['html'] = ' + +
+

支付单号:' . $sn . '

+

支付金额:' . $money . '

+

+
+ + '; + } + + } + } + +} else { + // 电脑扫码支付 + +//使用统一支付接口 + require WEBPATH . 'api/pay/weixin/WxPayPubHelper/WxPayPubHelper.php'; + $unifiedOrder = new UnifiedOrder_pub(); + + $unifiedOrder->setParameter("body", $title);//商品描述 +//自定义订单号,此处仅作举例 + $unifiedOrder->setParameter("out_trade_no", $sn);//商户订单号 + $unifiedOrder->setParameter("total_fee", $money * 100);//总金额 + $unifiedOrder->setParameter("notify_url", NOTIFY_URL);//通知地址 + $unifiedOrder->setParameter("trade_type", "NATIVE");//交易类型 + $unifiedOrder->setParameter("product_id", $id);//商品ID + + $notify_url = SITE_URL . 'api/pay/weixin/notify_url.php?sn=' . $sn; + +//获取统一支付接口结果 + $unifiedOrderResult = $unifiedOrder->getResult(); + +//商户根据实际情况设置相应的处理流程 + if ($unifiedOrderResult["return_code"] == "FAIL") { + //商户自行增加处理流程 + echo "通信出错:" . $unifiedOrderResult['return_msg']; + exit; + } elseif ($unifiedOrderResult["result_code"] == "FAIL") { + //商户自行增加处理流程 + if ($unifiedOrderResult['err_code'] == 'ORDERPAID') { + $this->pay_model->pay_success($sn, $money, '交易成功'); + } + echo "错误代码:" . $unifiedOrderResult['err_code'] . "
"; + echo "错误代码描述:" . $unifiedOrderResult['err_code_des']; + exit; + } elseif ($unifiedOrderResult["code_url"] != NULL) { + //从统一支付接口获取到code_url + $code_url = $unifiedOrderResult["code_url"]; + //商户自行增加处理流程 + //...... + } + + $result['name'] = '微信支付'; + $result['html'] = ' +
+

支付单号:' . $sn . '

+

支付金额:' . $money . '

+
+
+
+ + + '; +} \ No newline at end of file diff --git a/api/pay/weixin/qrcode.js b/api/pay/weixin/qrcode.js new file mode 100644 index 0000000..b2ae4a6 --- /dev/null +++ b/api/pay/weixin/qrcode.js @@ -0,0 +1,88 @@ + +var qrcode=function(){var qrcode=function(typeNumber,errorCorrectLevel){var PAD0=0xEC;var PAD1=0x11;var _typeNumber=typeNumber;var _errorCorrectLevel=QRErrorCorrectLevel[errorCorrectLevel];var _modules=null;var _moduleCount=0;var _dataCache=null;var _dataList=new Array();var _this={};var makeImpl=function(test,maskPattern){_moduleCount=_typeNumber*4+17;_modules=function(moduleCount){var modules=new Array(moduleCount);for(var row=0;row=7){setupTypeNumber(test);} +if(_dataCache==null){_dataCache=createData(_typeNumber,_errorCorrectLevel,_dataList);} +mapData(_dataCache,maskPattern);};var setupPositionProbePattern=function(row,col){for(var r=-1;r<=7;r+=1){if(row+r<=-1||_moduleCount<=row+r)continue;for(var c=-1;c<=7;c+=1){if(col+c<=-1||_moduleCount<=col+c)continue;if((0<=r&&r<=6&&(c==0||c==6))||(0<=c&&c<=6&&(r==0||r==6))||(2<=r&&r<=4&&2<=c&&c<=4)){_modules[row+r][col+c]=true;}else{_modules[row+r][col+c]=false;}}}};var getBestMaskPattern=function(){var minLostPoint=0;var pattern=0;for(var i=0;i<8;i+=1){makeImpl(true,i);var lostPoint=QRUtil.getLostPoint(_this);if(i==0||minLostPoint>lostPoint){minLostPoint=lostPoint;pattern=i;}} +return pattern;};var setupTimingPattern=function(){for(var r=8;r<_moduleCount-8;r+=1){if(_modules[r][6]!=null){continue;} +_modules[r][6]=(r%2==0);} +for(var c=8;c<_moduleCount-8;c+=1){if(_modules[6][c]!=null){continue;} +_modules[6][c]=(c%2==0);}};var setupPositionAdjustPattern=function(){var pos=QRUtil.getPatternPosition(_typeNumber);for(var i=0;i>i)&1)==1);_modules[Math.floor(i/3)][i%3+_moduleCount-8-3]=mod;} +for(var i=0;i<18;i+=1){var mod=(!test&&((bits>>i)&1)==1);_modules[i%3+_moduleCount-8-3][Math.floor(i/3)]=mod;}};var setupTypeInfo=function(test,maskPattern){var data=(_errorCorrectLevel<<3)|maskPattern;var bits=QRUtil.getBCHTypeInfo(data);for(var i=0;i<15;i+=1){var mod=(!test&&((bits>>i)&1)==1);if(i<6){_modules[i][8]=mod;}else if(i<8){_modules[i+1][8]=mod;}else{_modules[_moduleCount-15+i][8]=mod;}} +for(var i=0;i<15;i+=1){var mod=(!test&&((bits>>i)&1)==1);if(i<8){_modules[8][_moduleCount-i-1]=mod;}else if(i<9){_modules[8][15-i-1+1]=mod;}else{_modules[8][15-i-1]=mod;}} +_modules[_moduleCount-8][8]=(!test);};var mapData=function(data,maskPattern){var inc=-1;var row=_moduleCount-1;var bitIndex=7;var byteIndex=0;var maskFunc=QRUtil.getMaskFunction(maskPattern);for(var col=_moduleCount-1;col>0;col-=2){if(col==6)col-=1;while(true){for(var c=0;c<2;c+=1){if(_modules[row][col-c]==null){var dark=false;if(byteIndex>>bitIndex)&1)==1);} +var mask=maskFunc(row,col-c);if(mask){dark=!dark;} +_modules[row][col-c]=dark;bitIndex-=1;if(bitIndex==-1){byteIndex+=1;bitIndex=7;}}} +row+=inc;if(row<0||_moduleCount<=row){row-=inc;inc=-inc;break;}}}};var createBytes=function(buffer,rsBlocks){var offset=0;var maxDcCount=0;var maxEcCount=0;var dcdata=new Array(rsBlocks.length);var ecdata=new Array(rsBlocks.length);for(var r=0;r=0)?modPoly.getAt(modIndex):0;}} +var totalCodeCount=0;for(var i=0;itotalDataCount*8){throw new Error('code length overflow. (' ++buffer.getLengthInBits() ++'>' ++totalDataCount*8 ++')');} +if(buffer.getLengthInBits()+4<=totalDataCount*8){buffer.put(0,4);} +while(buffer.getLengthInBits()%8!=0){buffer.putBit(false);} +while(true){if(buffer.getLengthInBits()>=totalDataCount*8){break;} +buffer.put(PAD0,8);if(buffer.getLengthInBits()>=totalDataCount*8){break;} +buffer.put(PAD1,8);} +return createBytes(buffer,rsBlocks);};_this.addData=function(data){var newData=qr8BitByte(data);_dataList.push(newData);_dataCache=null;};_this.isDark=function(row,col){if(row<0||_moduleCount<=row||col<0||_moduleCount<=col){throw new Error(row+','+col);} +return _modules[row][col];};_this.getModuleCount=function(){return _moduleCount;};_this.make=function(){makeImpl(false,getBestMaskPattern());};_this.createTableTag=function(cellSize,margin){cellSize=cellSize||2;margin=(typeof margin=='undefined')?cellSize*4:margin;var qrHtml='';qrHtml+='';qrHtml+='';for(var r=0;r<_this.getModuleCount();r+=1){qrHtml+='';for(var c=0;c<_this.getModuleCount();c+=1){qrHtml+='';} +qrHtml+='';qrHtml+='
';} +qrHtml+='
';return qrHtml;};_this.createImgTag=function(cellSize,margin){cellSize=cellSize||2;margin=(typeof margin=='undefined')?cellSize*4:margin;var size=_this.getModuleCount()*cellSize+margin*2;var min=margin;var max=size-margin;return createImgTag(size,size,function(x,y){if(min<=x&&x>>8);bytes.push(b&0xff);}}else{bytes.push(unknownChar);}}} +return bytes;};};var QRMode={MODE_NUMBER:1<<0,MODE_ALPHA_NUM:1<<1,MODE_8BIT_BYTE:1<<2,MODE_KANJI:1<<3};var QRErrorCorrectLevel={L:1,M:0,Q:3,H:2};var QRMaskPattern={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};var QRUtil=function(){var PATTERN_POSITION_TABLE=[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]];var G15=(1<<10)|(1<<8)|(1<<5)|(1<<4)|(1<<2)|(1<<1)|(1<<0);var G18=(1<<12)|(1<<11)|(1<<10)|(1<<9)|(1<<8)|(1<<5)|(1<<2)|(1<<0);var G15_MASK=(1<<14)|(1<<12)|(1<<10)|(1<<4)|(1<<1);var _this={};var getBCHDigit=function(data){var digit=0;while(data!=0){digit+=1;data>>>=1;} +return digit;};_this.getBCHTypeInfo=function(data){var d=data<<10;while(getBCHDigit(d)-getBCHDigit(G15)>=0){d^=(G15<<(getBCHDigit(d)-getBCHDigit(G15)));} +return((data<<10)|d)^G15_MASK;};_this.getBCHTypeNumber=function(data){var d=data<<12;while(getBCHDigit(d)-getBCHDigit(G18)>=0){d^=(G18<<(getBCHDigit(d)-getBCHDigit(G18)));} +return(data<<12)|d;};_this.getPatternPosition=function(typeNumber){return PATTERN_POSITION_TABLE[typeNumber-1];};_this.getMaskFunction=function(maskPattern){switch(maskPattern){case QRMaskPattern.PATTERN000:return function(i,j){return(i+j)%2==0;};case QRMaskPattern.PATTERN001:return function(i,j){return i%2==0;};case QRMaskPattern.PATTERN010:return function(i,j){return j%3==0;};case QRMaskPattern.PATTERN011:return function(i,j){return(i+j)%3==0;};case QRMaskPattern.PATTERN100:return function(i,j){return(Math.floor(i/2)+Math.floor(j/3))%2==0;};case QRMaskPattern.PATTERN101:return function(i,j){return(i*j)%2+(i*j)%3==0;};case QRMaskPattern.PATTERN110:return function(i,j){return((i*j)%2+(i*j)%3)%2==0;};case QRMaskPattern.PATTERN111:return function(i,j){return((i*j)%3+(i+j)%2)%2==0;};default:throw new Error('bad maskPattern:'+maskPattern);}};_this.getErrorCorrectPolynomial=function(errorCorrectLength){var a=qrPolynomial([1],0);for(var i=0;i5){lostPoint+=(3+sameCount-5);}}};for(var row=0;row=256){n-=255;} +return EXP_TABLE[n];};return _this;}();function qrPolynomial(num,shift){if(typeof num.length=='undefined'){throw new Error(num.length+'/'+shift);} +var _num=function(){var offset=0;while(offset>>(7-index%8))&1)==1;};_this.put=function(num,length){for(var i=0;i>>(length-i-1))&1)==1);}};_this.getLengthInBits=function(){return _length;};_this.putBit=function(bit){var bufIndex=Math.floor(_length/8);if(_buffer.length<=bufIndex){_buffer.push(0);} +if(bit){_buffer[bufIndex]|=(0x80>>>(_length%8));} +_length+=1;};return _this;};var qr8BitByte=function(data){var _mode=QRMode.MODE_8BIT_BYTE;var _data=data;var _bytes=qrcode.stringToBytes(data);var _this={};_this.getMode=function(){return _mode;};_this.getLength=function(buffer){return _bytes.length;};_this.write=function(buffer){for(var i=0;i<_bytes.length;i+=1){buffer.put(_bytes[i],8);}};return _this;};var byteArrayOutputStream=function(){var _bytes=new Array();var _this={};_this.writeByte=function(b){_bytes.push(b&0xff);};_this.writeShort=function(i){_this.writeByte(i);_this.writeByte(i>>>8);};_this.writeBytes=function(b,off,len){off=off||0;len=len||b.length;for(var i=0;i0){s+=',';} +s+=_bytes[i];} +s+=']';return s;};return _this;};var base64EncodeOutputStream=function(){var _buffer=0;var _buflen=0;var _length=0;var _base64='';var _this={};var writeEncoded=function(b){_base64+=String.fromCharCode(encode(b&0x3f));};var encode=function(n){if(n<0){}else if(n<26){return 0x41+n;}else if(n<52){return 0x61+(n-26);}else if(n<62){return 0x30+(n-52);}else if(n==62){return 0x2b;}else if(n==63){return 0x2f;} +throw new Error('n:'+n);};_this.writeByte=function(n){_buffer=(_buffer<<8)|(n&0xff);_buflen+=8;_length+=1;while(_buflen>=6){writeEncoded(_buffer>>>(_buflen-6));_buflen-=6;}};_this.flush=function(){if(_buflen>0){writeEncoded(_buffer<<(6-_buflen));_buffer=0;_buflen=0;} +if(_length%3!=0){var padlen=3-_length%3;for(var i=0;i=_str.length){if(_buflen==0){return-1;} +throw new Error('unexpected end of file./'+_buflen);} +var c=_str.charAt(_pos);_pos+=1;if(c=='='){_buflen=0;return-1;}else if(c.match(/^\s$/)){continue;} +_buffer=(_buffer<<6)|decode(c.charCodeAt(0));_buflen+=6;} +var n=(_buffer>>>(_buflen-8))&0xff;_buflen-=8;return n;};var decode=function(c){if(0x41<=c&&c<=0x5a){return c-0x41;}else if(0x61<=c&&c<=0x7a){return c-0x61+26;}else if(0x30<=c&&c<=0x39){return c-0x30+52;}else if(c==0x2b){return 62;}else if(c==0x2f){return 63;}else{throw new Error('c:'+c);}};return _this;};var gifImage=function(width,height){var _width=width;var _height=height;var _data=new Array(width*height);var _this={};_this.setPixel=function(x,y,pixel){_data[y*_width+x]=pixel;};_this.write=function(out){out.writeString('GIF87a');out.writeShort(_width);out.writeShort(_height);out.writeByte(0x80);out.writeByte(0);out.writeByte(0);out.writeByte(0x00);out.writeByte(0x00);out.writeByte(0x00);out.writeByte(0xff);out.writeByte(0xff);out.writeByte(0xff);out.writeString(',');out.writeShort(0);out.writeShort(0);out.writeShort(_width);out.writeShort(_height);out.writeByte(0);var lzwMinCodeSize=2;var raster=getLZWRaster(lzwMinCodeSize);out.writeByte(lzwMinCodeSize);var offset=0;while(raster.length-offset>255){out.writeByte(255);out.writeBytes(raster,offset,255);offset+=255;} +out.writeByte(raster.length-offset);out.writeBytes(raster,offset,raster.length-offset);out.writeByte(0x00);out.writeString(';');};var bitOutputStream=function(out){var _out=out;var _bitLength=0;var _bitBuffer=0;var _this={};_this.write=function(data,length){if((data>>>length)!=0){throw new Error('length over');} +while(_bitLength+length>=8){_out.writeByte(0xff&((data<<_bitLength)|_bitBuffer));length-=(8-_bitLength);data>>>=(8-_bitLength);_bitBuffer=0;_bitLength=0;} +_bitBuffer=(data<<_bitLength)|_bitBuffer;_bitLength=_bitLength+length;};_this.flush=function(){if(_bitLength>0){_out.writeByte(_bitBuffer);}};return _this;};var getLZWRaster=function(lzwMinCodeSize){var clearCode=1< + AppId: + + + + AppSecret: + + + + MCHID: + + + + KEY: + + + \ No newline at end of file diff --git a/api/thumb/00b6a87af06b0552424cb21028f232b1.jpg b/api/thumb/00b6a87af06b0552424cb21028f232b1.jpg new file mode 100644 index 0000000..6d6e6e5 Binary files /dev/null and b/api/thumb/00b6a87af06b0552424cb21028f232b1.jpg differ diff --git a/api/thumb/13b4a86325fc944ce7c3ac184ec1eacd.jpg b/api/thumb/13b4a86325fc944ce7c3ac184ec1eacd.jpg new file mode 100644 index 0000000..b3f87cb Binary files /dev/null and b/api/thumb/13b4a86325fc944ce7c3ac184ec1eacd.jpg differ diff --git a/api/thumb/1afbb4e0482bfc3f49a115f2b41f864d.jpg b/api/thumb/1afbb4e0482bfc3f49a115f2b41f864d.jpg new file mode 100644 index 0000000..454b71f Binary files /dev/null and b/api/thumb/1afbb4e0482bfc3f49a115f2b41f864d.jpg differ diff --git a/api/thumb/219163dda405ef4bafe82138a58692ac.jpg b/api/thumb/219163dda405ef4bafe82138a58692ac.jpg new file mode 100644 index 0000000..914af38 Binary files /dev/null and b/api/thumb/219163dda405ef4bafe82138a58692ac.jpg differ diff --git a/api/thumb/44e2896341e6cf3465a48b0b0d6dfc7d.jpg b/api/thumb/44e2896341e6cf3465a48b0b0d6dfc7d.jpg new file mode 100644 index 0000000..ef29c5e Binary files /dev/null and b/api/thumb/44e2896341e6cf3465a48b0b0d6dfc7d.jpg differ diff --git a/api/thumb/455c92f13dd0e60da0a5d39c8747dc12.jpg b/api/thumb/455c92f13dd0e60da0a5d39c8747dc12.jpg new file mode 100644 index 0000000..2cec6d7 Binary files /dev/null and b/api/thumb/455c92f13dd0e60da0a5d39c8747dc12.jpg differ diff --git a/api/thumb/488adffcaf704211cc6b89a5b5ac87f6.jpg b/api/thumb/488adffcaf704211cc6b89a5b5ac87f6.jpg new file mode 100644 index 0000000..7d4be57 Binary files /dev/null and b/api/thumb/488adffcaf704211cc6b89a5b5ac87f6.jpg differ diff --git a/api/thumb/498f7e15804526d7199946a874bbfa09.jpg b/api/thumb/498f7e15804526d7199946a874bbfa09.jpg new file mode 100644 index 0000000..ffa3e2f Binary files /dev/null and b/api/thumb/498f7e15804526d7199946a874bbfa09.jpg differ diff --git a/api/thumb/4f30182a49494237121e6f582c879b74.jpg b/api/thumb/4f30182a49494237121e6f582c879b74.jpg new file mode 100644 index 0000000..e3ec628 Binary files /dev/null and b/api/thumb/4f30182a49494237121e6f582c879b74.jpg differ diff --git a/api/thumb/63ee53ad6fbd8cd1892c6de799cd4c49.jpg b/api/thumb/63ee53ad6fbd8cd1892c6de799cd4c49.jpg new file mode 100644 index 0000000..89ed46c Binary files /dev/null and b/api/thumb/63ee53ad6fbd8cd1892c6de799cd4c49.jpg differ diff --git a/api/thumb/6cc7e566eceadceaf7614b6954bd15a5.jpg b/api/thumb/6cc7e566eceadceaf7614b6954bd15a5.jpg new file mode 100644 index 0000000..ae9cb8c Binary files /dev/null and b/api/thumb/6cc7e566eceadceaf7614b6954bd15a5.jpg differ diff --git a/api/thumb/6dfbe9206c874004910146a42792c51d.jpg b/api/thumb/6dfbe9206c874004910146a42792c51d.jpg new file mode 100644 index 0000000..a0433c6 Binary files /dev/null and b/api/thumb/6dfbe9206c874004910146a42792c51d.jpg differ diff --git a/api/thumb/7e9883a4bf8310f7023a68521bda83e9.jpg b/api/thumb/7e9883a4bf8310f7023a68521bda83e9.jpg new file mode 100644 index 0000000..99ad08a Binary files /dev/null and b/api/thumb/7e9883a4bf8310f7023a68521bda83e9.jpg differ diff --git a/api/thumb/9cb90bc95571b9f192620f9b7082cac5.jpg b/api/thumb/9cb90bc95571b9f192620f9b7082cac5.jpg new file mode 100644 index 0000000..70063f6 Binary files /dev/null and b/api/thumb/9cb90bc95571b9f192620f9b7082cac5.jpg differ diff --git a/api/thumb/ae457871a8d7cda5b5c6d7ee364205a4.jpg b/api/thumb/ae457871a8d7cda5b5c6d7ee364205a4.jpg new file mode 100644 index 0000000..400a431 Binary files /dev/null and b/api/thumb/ae457871a8d7cda5b5c6d7ee364205a4.jpg differ diff --git a/api/thumb/aeba53ac5cbf8fa65a8846545f5f586a.jpg b/api/thumb/aeba53ac5cbf8fa65a8846545f5f586a.jpg new file mode 100644 index 0000000..a6dcea7 Binary files /dev/null and b/api/thumb/aeba53ac5cbf8fa65a8846545f5f586a.jpg differ diff --git a/api/thumb/b88f7ad356702068b7d9ef934a90201f.jpg b/api/thumb/b88f7ad356702068b7d9ef934a90201f.jpg new file mode 100644 index 0000000..a9b4d3b Binary files /dev/null and b/api/thumb/b88f7ad356702068b7d9ef934a90201f.jpg differ diff --git a/api/thumb/d20d1f5bb765b1532f1ba6182d52feb7.jpg b/api/thumb/d20d1f5bb765b1532f1ba6182d52feb7.jpg new file mode 100644 index 0000000..da6e27b Binary files /dev/null and b/api/thumb/d20d1f5bb765b1532f1ba6182d52feb7.jpg differ diff --git a/api/thumb/f1b3971f86143258eb79f9e8f6fe8b04.jpg b/api/thumb/f1b3971f86143258eb79f9e8f6fe8b04.jpg new file mode 100644 index 0000000..09f288a Binary files /dev/null and b/api/thumb/f1b3971f86143258eb79f9e8f6fe8b04.jpg differ diff --git a/api/thumb/f20b5bfaf8609362cc5189c000f58d3a.jpg b/api/thumb/f20b5bfaf8609362cc5189c000f58d3a.jpg new file mode 100644 index 0000000..7ffaece Binary files /dev/null and b/api/thumb/f20b5bfaf8609362cc5189c000f58d3a.jpg differ diff --git a/api/thumb/f86294ffd86e0a4763644622a99e74b1.jpg b/api/thumb/f86294ffd86e0a4763644622a99e74b1.jpg new file mode 100644 index 0000000..4260271 Binary files /dev/null and b/api/thumb/f86294ffd86e0a4763644622a99e74b1.jpg differ diff --git a/api/uc.php b/api/uc.php new file mode 100644 index 0000000..169fd51 --- /dev/null +++ b/api/uc.php @@ -0,0 +1,5 @@ +', '>', $string); + $string = str_replace("{", '', $string); + $string = str_replace('}', '', $string); + return $string; +} + +defined('MAGIC_QUOTES_GPC') || define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc()); +if (!is_file(DISCUZ_ROOT.'./config.inc.php')) { + exit('未启用'); +} +require_once DISCUZ_ROOT.'./config.inc.php'; + +$_DCACHE = $get = $post = array(); + +$code = @uc_safe_replace($_GET['code']); +parse_str(_authcode($code, 'DECODE', UC_KEY), $get); +if(MAGIC_QUOTES_GPC) { + $get = _stripslashes($get); +} + +$timestamp = time(); +if($timestamp - $get['time'] > 3600) { + exit('Authracation has expiried'); +} +if(empty($get)) { + exit('Invalid Request'); +} +$action = uc_safe_replace($get['action']); + +require_once DISCUZ_ROOT.'./uc_client/lib/xml.class.php'; +$post = xml_unserialize(file_get_contents('php://input')); + +if(in_array($get['action'], array('test', 'deleteuser', 'renameuser', 'gettag', 'synlogin', 'synlogout', 'updatepw', 'updatebadwords', 'updatehosts', 'updateapps', 'updateclient', 'updatecredit', 'getcreditsettings', 'updatecreditsettings'))) { + if(function_exists("mysql_connect")) { + require_once DISCUZ_ROOT.'./include/db_mysql.class.php'; + $GLOBALS['db'] = new dbstuff; + } else { + require_once DISCUZ_ROOT.'./include/db_mysqli.class.php'; + $GLOBALS['db'] = new dbstuffi; + } + $GLOBALS['db']->connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect, true, $dbcharset); + $GLOBALS['tablepre'] = $tablepre; + unset($dbhost, $dbuser, $dbpw, $dbname, $pconnect); + $uc_note = new uc_note(); + exit($uc_note->$get['action']($get, $post)); +} else { + exit(API_RETURN_FAILED); +} + + +class uc_note { + + var $dbconfig = ''; + var $db = ''; + var $tablepre = ''; + var $appdir = ''; + + function _serialize($arr, $htmlon = 0) { + if(!function_exists('xml_serialize')) { + include_once DISCUZ_ROOT.'./uc_client/lib/xml.class.php'; + } + return xml_serialize($arr, $htmlon); + } + + function uc_note() { + $this->appdir = substr(dirname(__FILE__), 0, -3); + $this->dbconfig = $this->appdir.'./config.inc.php'; + $this->db = $GLOBALS['db']; + $this->tablepre = $GLOBALS['tablepre']; + } + + function test($get, $post) { + return API_RETURN_SUCCEED; + } + + function deleteuser($get, $post) { + $uids = $get['ids']; + !API_DELETEUSER && exit(API_RETURN_FORBIDDEN); + + return API_RETURN_SUCCEED; + } + + function renameuser($get, $post) { + $uid = (int)$get['uid']; + $usernameold = $get['oldusername']; + $usernamenew = $get['newusername']; + if(!API_RENAMEUSER) { + return API_RETURN_FORBIDDEN; + } + + return API_RETURN_SUCCEED; + } + + function gettag($get, $post) { + $name = (int)$get['id']; + if(!API_GETTAG) { + return API_RETURN_FORBIDDEN; + } + + $return = array(); + return $this->_serialize($return, 1); + } + + /*finecms 同步登录*/ + function synlogin($get, $post) { + //$uid = $get['uid']; + $username = $get['username']; + if(!API_SYNLOGIN) { + return API_RETURN_FORBIDDEN; + } + $data = $this->db->fetch_first('select uid,password from ' . $this->tablepre . 'member where username=\'' . mysql_real_escape_string($username) . '\' limit 1'); + header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"'); + if (isset($data['uid'])) { + _setcookie('member_uid', $data['uid'], 86400 * 365); + _setcookie('member_cookie', substr(md5(SITE_KEY.$data['password']), 5, 20), 86400 * 365); + } + } + + /*finecms 同步退出*/ + function synlogout($get, $post) { + if(!API_SYNLOGOUT) { + return API_RETURN_FORBIDDEN; + } + $uid = (int)$_COOKIE[SITE_PREFIX.'member_uid']; + //note 同步登出 API 接口 + header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"'); + _setcookie('member_uid', '', -86400 * 365); + _setcookie('member_cookie', '', -86400 * 365); + if ($uid) $this->db->query('delete from '.$this->tablepre.'member_online where uid='.$uid); + } + + /*finecms 修改密码*/ + function updatepw($get, $post) { + // 不做更改 + return API_RETURN_SUCCEED; + } + + function updatebadwords($get, $post) { + if(!API_UPDATEBADWORDS) { + return API_RETURN_FORBIDDEN; + } + $cachefile = $this->appdir.'./uc_client/data/cache/badwords.php'; + $fp = fopen($cachefile, 'w'); + $data = array(); + if(is_array($post)) { + foreach($post as $k => $v) { + $data['findpattern'][$k] = $v['findpattern']; + $data['replace'][$k] = $v['replacement']; + } + } + $s = "appdir.'./uc_client/data/cache/hosts.php'; + $fp = fopen($cachefile, 'w'); + $s = "appdir.'./uc_client/data/cache/apps.php'; + $fp = fopen($cachefile, 'w'); + $s = "appdir.'./config.inc.php')) { + $configfile = trim(file_get_contents($this->appdir.'./config.inc.php')); + $configfile = substr($configfile, -2) == '?>' ? substr($configfile, 0, -2) : $configfile; + $configfile = preg_replace("/define\('UC_API',\s*'.*?'\);/i", "define('UC_API', '".addslashes($UC_API)."');", $configfile); + if($fp = @fopen($this->appdir.'./config.inc.php', 'w')) { + @fwrite($fp, trim($configfile)); + @fclose($fp); + } + } + + return API_RETURN_SUCCEED; + } + + function updateclient($get, $post) { + if(!API_UPDATECLIENT) { + return API_RETURN_FORBIDDEN; + } + $cachefile = $this->appdir.'./uc_client/data/cache/settings.php'; + $fp = fopen($cachefile, 'w'); + $s = "_serialize($credits); + } + + function updatecreditsettings($get, $post) { + if(!API_UPDATECREDITSETTINGS) { + return API_RETURN_FORBIDDEN; + } + return API_RETURN_SUCCEED; + } +} + +function _setcookie($var, $value, $life = 0) { + global $cookiedomain, $timestamp, $_SERVER; + setcookie(SITE_PREFIX.$var, $value, + $life ? $timestamp + $life : 0, '/', + $cookiedomain, $_SERVER['SERVER_PORT'] == 443 ? 1 : 0); +} + +function _authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) { + $ckey_length = 4; + + $key = md5($key ? $key : UC_KEY); + $keya = md5(substr($key, 0, 16)); + $keyb = md5(substr($key, 16, 16)); + $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : ''; + + $cryptkey = $keya.md5($keya.$keyc); + $key_length = strlen($cryptkey); + + $string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string; + $string_length = strlen($string); + + $result = ''; + $box = range(0, 255); + + $rndkey = array(); + for($i = 0; $i <= 255; $i++) { + $rndkey[$i] = ord($cryptkey[$i % $key_length]); + } + + for($j = $i = 0; $i < 256; $i++) { + $j = ($j + $box[$i] + $rndkey[$i]) % 256; + $tmp = $box[$i]; + $box[$i] = $box[$j]; + $box[$j] = $tmp; + } + + for($a = $j = $i = 0; $i < $string_length; $i++) { + $a = ($a + 1) % 256; + $j = ($j + $box[$a]) % 256; + $tmp = $box[$a]; + $box[$a] = $box[$j]; + $box[$j] = $tmp; + $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256])); + } + + if($operation == 'DECODE') { + if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) { + return substr($result, 26); + } else { + return ''; + } + } else { + return $keyc.str_replace('=', '', base64_encode($result)); + } + +} + +function _stripslashes($string) { + if(is_array($string)) { + foreach($string as $key => $val) { + $string[$key] = _stripslashes($val); + } + } else { + $string = stripslashes($string); + } + return $string; +} + +function get_real_ip(){ + $ip=false; + if(!empty($_SERVER["HTTP_CLIENT_IP"])){ + $ip = $_SERVER["HTTP_CLIENT_IP"]; + } + if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { + $ips = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR']); + if ($ip) { array_unshift($ips, $ip); $ip = FALSE; } + for ($i = 0; $i < count($ips); $i++) { + if (!eregi ("^(10|172\.16|192\.168)\.", $ips[$i])) { + $ip = $ips[$i]; + break; + } + } + } + return ($ip ? $ip : $_SERVER['REMOTE_ADDR']); +} \ No newline at end of file diff --git a/api/ucenter/config.inc.php b/api/ucenter/config.inc.php new file mode 100644 index 0000000..7eb2bb1 --- /dev/null +++ b/api/ucenter/config.inc.php @@ -0,0 +1,29 @@ + \ No newline at end of file diff --git a/api/ucenter/include/db_mysql.class.php b/api/ucenter/include/db_mysql.class.php new file mode 100644 index 0000000..70c9888 --- /dev/null +++ b/api/ucenter/include/db_mysql.class.php @@ -0,0 +1,123 @@ +dbname = $dbname; + if(!$this->db = @$func($dbhost, $dbuser, $dbpw)) { + $halt && $this->halt('Can not connect to MySQL server'); + } else { + if($this->version() > '4.1') { + global $charset, $dbcharset; + $dbcharset = !$dbcharset && in_array(strtolower($charset), array('gbk', 'big5', 'utf-8')) ? str_replace('-', '', $charset) : $dbcharset; + $serverset = $dbcharset ? 'character_set_connection='.$dbcharset.', character_set_results='.$dbcharset.', character_set_client=binary' : ''; + $serverset .= $this->version() > '5.0.1' ? ((empty($serverset) ? '' : ',').'sql_mode=\'\'') : ''; + $serverset && mysql_query("SET $serverset", $this->db); + } + $dbname && @mysql_select_db($dbname, $this->db); + } + + } + + function select_db($dbname) { + return mysql_select_db($dbname, $this->db); + } + + function fetch_array($query, $result_type = MYSQL_ASSOC) { + return mysql_fetch_array($query, $result_type); + } + + function fetch_first($sql) { + return $this->fetch_array($this->query($sql)); + } + + function result_first($sql) { + return $this->result($this->query($sql), 0); + } + function query($sql, $type = '') { + global $debug, $discuz_starttime, $sqldebug, $sqlspenttimes; + + $func = $type == 'UNBUFFERED' && @function_exists('mysql_unbuffered_query') ? + 'mysql_unbuffered_query' : 'mysql_query'; + if(!($query = $func($sql, $this->db))) { + if(in_array($this->errno(), array(2006, 2013)) && substr($type, 0, 5) != 'RETRY') { + $this->close(); + require './config.inc.php'; + $this->connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect); + $this->query($sql, 'RETRY'.$type); + } elseif($type != 'SILENT' && substr($type, 5) != 'SILENT') { + $this->halt('MySQL Query Error', $sql); + } + } + + $this->querynum++; + return $query; + } + + function affected_rows() { + return mysql_affected_rows($this->db); + } + + function error() { + return (($this->db) ? mysql_error($this->db) : mysql_error()); + } + + function errno() { + return intval(($this->db) ? mysql_errno($this->db) : mysql_errno()); + } + + function result($query, $row) { + $query = @mysql_result($query, $row); + return $query; + } + + function num_rows($query) { + $query = mysql_num_rows($query); + return $query; + } + + function num_fields($query) { + return mysql_num_fields($query); + } + + function free_result($query) { + return mysql_free_result($query); + } + + function insert_id() { + return ($id = mysql_insert_id($this->db)) >= 0 ? $id : $this->result($this->query("SELECT last_insert_id()"), 0); + } + + function fetch_row($query) { + $query = mysql_fetch_row($query); + return $query; + } + + function fetch_fields($query) { + return mysql_fetch_field($query); + } + + function version() { + if(empty($this->version)) { + $this->version = mysql_get_server_info($this->db); + } + return $this->version; + } + + function close() { + return mysql_close($this->db); + } + + function halt($message = '', $sql = '') { + echo 'SQL Error:
'.$message.'
'.$sql; + } +} + +?> \ No newline at end of file diff --git a/api/ucenter/include/db_mysqli.class.php b/api/ucenter/include/db_mysqli.class.php new file mode 100644 index 0000000..27e06a4 --- /dev/null +++ b/api/ucenter/include/db_mysqli.class.php @@ -0,0 +1,134 @@ +dbname = $dbname; + if(!$this->db = new mysqli($dbhost, $dbuser, $dbpw, $dbname)) { + $this->halt('Can not connect to MySQLi server'); + } + + if($this->version() > '4.1') { + if($dbcharset) { + $this->db->set_charset($dbcharset); + } + + if($this->version() > '5.0.1') { + $this->db->query("SET sql_mode=''"); + } + } + + + } + + function fetch_array($query, $result_type = MYSQLI_ASSOC) { + return $query ? $query->fetch_array($result_type) : null; + } + + + function result_first($sql) { + $query = $this->query($sql); + return $this->result($query, 0); + } + + function fetch_first($sql) { + $query = $this->query($sql); + return $this->fetch_array($query); + } + + function fetch_all($sql, $id = '') { + $arr = array(); + $query = $this->query($sql); + while($data = $this->fetch_array($query)) { + $id ? $arr[$data[$id]] = $data : $arr[] = $data; + } + return $arr; + } + + function cache_gc() { + $this->query("DELETE FROM {$this->tablepre}sqlcaches WHERE expiry<$this->time"); + } + + function query($sql, $type = '', $cachetime = FALSE) { + $resultmode = $type == 'UNBUFFERED' ? MYSQLI_USE_RESULT : MYSQLI_STORE_RESULT; + if(!($query = $this->db->query($sql, $resultmode)) && $type != 'SILENT') { + $this->halt('MySQLi Query Error', $sql); + } + $this->querynum++; + $this->histories[] = $sql; + return $query; + } + + function affected_rows() { + return $this->db->affected_rows; + } + + function error() { + return (($this->db) ? $this->db->error : mysqli_error()); + } + + function errno() { + return intval(($this->db) ? $this->db->errno : mysqli_errno()); + } + + function result($query, $row) { + if(!$query || $query->num_rows == 0) { + return null; + } + $query->data_seek($row); + $assocs = $query->fetch_row(); + return $assocs[0]; + } + + function num_rows($query) { + $query = $query ? $query->num_rows : 0; + return $query; + } + + function num_fields($query) { + return $query ? $query->field_count : 0; + } + + function free_result($query) { + return $query ? $query->free() : false; + } + + function insert_id() { + return ($id = $this->db->insert_id) >= 0 ? $id : $this->result($this->query("SELECT last_insert_id()"), 0); + } + + function fetch_row($query) { + $query = $query ? $query->fetch_row() : null; + return $query; + } + + function fetch_fields($query) { + return $query ? $query->fetch_field() : null; + } + + function version() { + return $this->db->server_info; + } + + function escape_string($str) { + return $this->db->escape_string($str); + } + + function close() { + return $this->db->close(); + } + + function halt($message = '', $sql = '') { + echo 'SQL Error:
'.$message.'
'.$sql; + } +} + +?> \ No newline at end of file diff --git a/api/ucenter/uc_client/client.php b/api/ucenter/uc_client/client.php new file mode 100644 index 0000000..562a539 --- /dev/null +++ b/api/ucenter/uc_client/client.php @@ -0,0 +1,580 @@ +没有正确配置UCenter,尝试更新系统缓存'); +} + + +define('IN_UC', TRUE); +define('UC_CLIENT_VERSION', '1.6.0'); +define('UC_CLIENT_RELEASE', '20110501'); +define('UC_ROOT', substr(__FILE__, 0, -10)); +define('UC_DATADIR', UC_ROOT.'./data/'); +define('UC_DATAURL', UC_API.'/data'); +define('UC_API_FUNC', UC_CONNECT == 'mysql' ? 'uc_api_mysql' : 'uc_api_post'); +$GLOBALS['uc_controls'] = array(); + +function uc_addslashes($string, $force = 0, $strip = FALSE) { + !defined('MAGIC_QUOTES_GPC') && define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc()); + if(!MAGIC_QUOTES_GPC || $force) { + if(is_array($string)) { + foreach($string as $key => $val) { + $string[$key] = uc_addslashes($val, $force, $strip); + } + } else { + $string = addslashes($strip ? stripslashes($string) : $string); + } + } + return $string; +} + +if(!function_exists('daddslashes')) { + function daddslashes($string, $force = 0) { + return uc_addslashes($string, $force); + } +} + +function uc_stripslashes($string) { + !defined('MAGIC_QUOTES_GPC') && define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc()); + if(MAGIC_QUOTES_GPC) { + return stripslashes($string); + } else { + return $string; + } +} + +function uc_api_post($module, $action, $arg = array()) { + $s = $sep = ''; + foreach($arg as $k => $v) { + $k = urlencode($k); + if(is_array($v)) { + $s2 = $sep2 = ''; + foreach($v as $k2 => $v2) { + $k2 = urlencode($k2); + $s2 .= "$sep2{$k}[$k2]=".urlencode(uc_stripslashes($v2)); + $sep2 = '&'; + } + $s .= $sep.$s2; + } else { + $s .= "$sep$k=".urlencode(uc_stripslashes($v)); + } + $sep = '&'; + } + $postdata = uc_api_requestdata($module, $action, $s); + return uc_fopen2(UC_API.'/index.php', 500000, $postdata, '', TRUE, UC_IP, 20); +} + +function uc_api_requestdata($module, $action, $arg='', $extra='') { + $input = uc_api_input($arg); + $post = "m=$module&a=$action&inajax=2&release=".UC_CLIENT_RELEASE."&input=$input&appid=".UC_APPID.$extra; + return $post; +} + +function uc_api_url($module, $action, $arg='', $extra='') { + $url = UC_API.'/index.php?'.uc_api_requestdata($module, $action, $arg, $extra); + return $url; +} + +function uc_api_input($data) { + $s = urlencode(uc_authcode($data.'&agent='.md5($_SERVER['HTTP_USER_AGENT'])."&time=".time(), 'ENCODE', UC_KEY)); + return $s; +} + +function uc_api_mysql($model, $action, $args=array()) { + global $uc_controls; + if(empty($uc_controls[$model])) { + include_once UC_ROOT.'./lib/db.class.php'; + include_once UC_ROOT.'./model/base.php'; + include_once UC_ROOT."./control/$model.php"; + eval("\$uc_controls['$model'] = new {$model}control();"); + } + if($action{0} != '_') { + $args = uc_addslashes($args, 1, TRUE); + $action = 'on'.$action; + $uc_controls[$model]->input = $args; + return $uc_controls[$model]->$action($args); + } else { + return ''; + } +} + +function uc_serialize($arr, $htmlon = 0) { + include_once UC_ROOT.'./lib/xml.class.php'; + return xml_serialize($arr, $htmlon); +} + +function uc_unserialize($s) { + include_once UC_ROOT.'./lib/xml.class.php'; + return xml_unserialize($s); +} + +function uc_authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) { + + $ckey_length = 4; + + $key = md5($key ? $key : UC_KEY); + $keya = md5(substr($key, 0, 16)); + $keyb = md5(substr($key, 16, 16)); + $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : ''; + + $cryptkey = $keya.md5($keya.$keyc); + $key_length = strlen($cryptkey); + + $string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string; + $string_length = strlen($string); + + $result = ''; + $box = range(0, 255); + + $rndkey = array(); + for($i = 0; $i <= 255; $i++) { + $rndkey[$i] = ord($cryptkey[$i % $key_length]); + } + + for($j = $i = 0; $i < 256; $i++) { + $j = ($j + $box[$i] + $rndkey[$i]) % 256; + $tmp = $box[$i]; + $box[$i] = $box[$j]; + $box[$j] = $tmp; + } + + for($a = $j = $i = 0; $i < $string_length; $i++) { + $a = ($a + 1) % 256; + $j = ($j + $box[$a]) % 256; + $tmp = $box[$a]; + $box[$a] = $box[$j]; + $box[$j] = $tmp; + $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256])); + } + + if($operation == 'DECODE') { + if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) { + return substr($result, 26); + } else { + return ''; + } + } else { + return $keyc.str_replace('=', '', base64_encode($result)); + } +} + +function uc_fopen2($url, $limit = 0, $post = '', $cookie = '', $bysocket = FALSE, $ip = '', $timeout = 15, $block = TRUE) { + $__times__ = isset($_GET['__times__']) ? intval($_GET['__times__']) + 1 : 1; + if($__times__ > 2) { + return ''; + } + $url .= (strpos($url, '?') === FALSE ? '?' : '&')."__times__=$__times__"; + return uc_fopen($url, $limit, $post, $cookie, $bysocket, $ip, $timeout, $block); +} + +function uc_fopen($url, $limit = 0, $post = '', $cookie = '', $bysocket = FALSE, $ip = '', $timeout = 15, $block = TRUE) { + $return = ''; + $matches = parse_url($url); + !isset($matches['host']) && $matches['host'] = ''; + !isset($matches['path']) && $matches['path'] = ''; + !isset($matches['query']) && $matches['query'] = ''; + !isset($matches['port']) && $matches['port'] = ''; + $host = $matches['host']; + $path = $matches['path'] ? $matches['path'].($matches['query'] ? '?'.$matches['query'] : '') : '/'; + $port = !empty($matches['port']) ? $matches['port'] : 80; + if($post) { + $out = "POST $path HTTP/1.0\r\n"; + $out .= "Accept: */*\r\n"; + //$out .= "Referer: $boardurl\r\n"; + $out .= "Accept-Language: zh-cn\r\n"; + $out .= "Content-Type: application/x-www-form-urlencoded\r\n"; + $out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n"; + $out .= "Host: $host\r\n"; + $out .= 'Content-Length: '.strlen($post)."\r\n"; + $out .= "Connection: Close\r\n"; + $out .= "Cache-Control: no-cache\r\n"; + $out .= "Cookie: $cookie\r\n\r\n"; + $out .= $post; + } else { + $out = "GET $path HTTP/1.0\r\n"; + $out .= "Accept: */*\r\n"; + //$out .= "Referer: $boardurl\r\n"; + $out .= "Accept-Language: zh-cn\r\n"; + $out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n"; + $out .= "Host: $host\r\n"; + $out .= "Connection: Close\r\n"; + $out .= "Cookie: $cookie\r\n\r\n"; + } + + if(function_exists('fsockopen')) { + $fp = @fsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout); + } elseif (function_exists('pfsockopen')) { + $fp = @pfsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout); + } else { + $fp = false; + } + + if(!$fp) { + return ''; + } else { + stream_set_blocking($fp, $block); + stream_set_timeout($fp, $timeout); + @fwrite($fp, $out); + $status = stream_get_meta_data($fp); + if(!$status['timed_out']) { + while (!feof($fp)) { + if(($header = @fgets($fp)) && ($header == "\r\n" || $header == "\n")) { + break; + } + } + + $stop = false; + while(!feof($fp) && !$stop) { + $data = fread($fp, ($limit == 0 || $limit > 8192 ? 8192 : $limit)); + $return .= $data; + if($limit) { + $limit -= strlen($data); + $stop = $limit <= 0; + } + } + } + @fclose($fp); + return $return; + } +} + +function uc_app_ls() { + $return = call_user_func(UC_API_FUNC, 'app', 'ls', array()); + return UC_CONNECT == 'mysql' ? $return : uc_unserialize($return); +} + +function uc_feed_add($icon, $uid, $username, $title_template='', $title_data='', $body_template='', $body_data='', $body_general='', $target_ids='', $images = array()) { + return call_user_func(UC_API_FUNC, 'feed', 'add', + array( 'icon'=>$icon, + 'appid'=>UC_APPID, + 'uid'=>$uid, + 'username'=>$username, + 'title_template'=>$title_template, + 'title_data'=>$title_data, + 'body_template'=>$body_template, + 'body_data'=>$body_data, + 'body_general'=>$body_general, + 'target_ids'=>$target_ids, + 'image_1'=>$images[0]['url'], + 'image_1_link'=>$images[0]['link'], + 'image_2'=>$images[1]['url'], + 'image_2_link'=>$images[1]['link'], + 'image_3'=>$images[2]['url'], + 'image_3_link'=>$images[2]['link'], + 'image_4'=>$images[3]['url'], + 'image_4_link'=>$images[3]['link'] + ) + ); +} + +function uc_feed_get($limit = 100, $delete = TRUE) { + $return = call_user_func(UC_API_FUNC, 'feed', 'get', array('limit'=>$limit, 'delete'=>$delete)); + return UC_CONNECT == 'mysql' ? $return : uc_unserialize($return); +} + +function uc_friend_add($uid, $friendid, $comment='') { + return call_user_func(UC_API_FUNC, 'friend', 'add', array('uid'=>$uid, 'friendid'=>$friendid, 'comment'=>$comment)); +} + +function uc_friend_delete($uid, $friendids) { + return call_user_func(UC_API_FUNC, 'friend', 'delete', array('uid'=>$uid, 'friendids'=>$friendids)); +} + +function uc_friend_totalnum($uid, $direction = 0) { + return call_user_func(UC_API_FUNC, 'friend', 'totalnum', array('uid'=>$uid, 'direction'=>$direction)); +} + +function uc_friend_ls($uid, $page = 1, $pagesize = 10, $totalnum = 10, $direction = 0) { + $return = call_user_func(UC_API_FUNC, 'friend', 'ls', array('uid'=>$uid, 'page'=>$page, 'pagesize'=>$pagesize, 'totalnum'=>$totalnum, 'direction'=>$direction)); + return UC_CONNECT == 'mysql' ? $return : uc_unserialize($return); +} + +function uc_user_register($username, $password, $email, $questionid = '', $answer = '', $regip = '') { + return call_user_func(UC_API_FUNC, 'user', 'register', array('username'=>$username, 'password'=>$password, 'email'=>$email, 'questionid'=>$questionid, 'answer'=>$answer, 'regip' => $regip)); +} + +function uc_user_login($username, $password, $isuid = 0, $checkques = 0, $questionid = '', $answer = '') { + $isuid = intval($isuid); + $return = call_user_func(UC_API_FUNC, 'user', 'login', array('username'=>$username, 'password'=>$password, 'isuid'=>$isuid, 'checkques'=>$checkques, 'questionid'=>$questionid, 'answer'=>$answer)); + return UC_CONNECT == 'mysql' ? $return : uc_unserialize($return); +} + +function uc_user_synlogin($uid) { + $uid = intval($uid); + if(@include UC_ROOT.'./data/cache/apps.php') { + if(count($_CACHE['apps']) > 1) { + $return = uc_api_post('user', 'synlogin', array('uid'=>$uid)); + } else { + $return = ''; + } + } + return $return; +} + +function uc_user_synlogout() { + if(@include UC_ROOT.'./data/cache/apps.php') { + if(count($_CACHE['apps']) > 1) { + $return = uc_api_post('user', 'synlogout', array()); + } else { + $return = ''; + } + } + return $return; +} + +function uc_user_edit($username, $oldpw, $newpw, $email, $ignoreoldpw = 0, $questionid = '', $answer = '') { + return call_user_func(UC_API_FUNC, 'user', 'edit', array('username'=>$username, 'oldpw'=>$oldpw, 'newpw'=>$newpw, 'email'=>$email, 'ignoreoldpw'=>$ignoreoldpw, 'questionid'=>$questionid, 'answer'=>$answer)); +} + +function uc_user_delete($uid) { + return call_user_func(UC_API_FUNC, 'user', 'delete', array('uid'=>$uid)); +} + +function uc_user_deleteavatar($uid) { + uc_api_post('user', 'deleteavatar', array('uid'=>$uid)); +} + +function uc_user_checkname($username) { + return call_user_func(UC_API_FUNC, 'user', 'check_username', array('username'=>$username)); +} + +function uc_user_checkemail($email) { + return call_user_func(UC_API_FUNC, 'user', 'check_email', array('email'=>$email)); +} + +function uc_user_addprotected($username, $admin='') { + return call_user_func(UC_API_FUNC, 'user', 'addprotected', array('username'=>$username, 'admin'=>$admin)); +} + +function uc_user_deleteprotected($username) { + return call_user_func(UC_API_FUNC, 'user', 'deleteprotected', array('username'=>$username)); +} + +function uc_user_getprotected() { + $return = call_user_func(UC_API_FUNC, 'user', 'getprotected', array('1'=>1)); + return UC_CONNECT == 'mysql' ? $return : uc_unserialize($return); +} + +function uc_get_user($username, $isuid=0) { + $return = call_user_func(UC_API_FUNC, 'user', 'get_user', array('username'=>$username, 'isuid'=>$isuid)); + return UC_CONNECT == 'mysql' ? $return : uc_unserialize($return); +} + +function uc_user_merge($oldusername, $newusername, $uid, $password, $email) { + return call_user_func(UC_API_FUNC, 'user', 'merge', array('oldusername'=>$oldusername, 'newusername'=>$newusername, 'uid'=>$uid, 'password'=>$password, 'email'=>$email)); +} + +function uc_user_merge_remove($username) { + return call_user_func(UC_API_FUNC, 'user', 'merge_remove', array('username'=>$username)); +} + +function uc_user_getcredit($appid, $uid, $credit) { + return uc_api_post('user', 'getcredit', array('appid'=>$appid, 'uid'=>$uid, 'credit'=>$credit)); +} + +function uc_pm_location($uid, $newpm = 0) { + $apiurl = uc_api_url('pm_client', 'ls', "uid=$uid", ($newpm ? '&folder=newbox' : '')); + @header("Expires: 0"); + @header("Cache-Control: private, post-check=0, pre-check=0, max-age=0", FALSE); + @header("Pragma: no-cache"); + @header("location: $apiurl"); +} + +function uc_pm_checknew($uid, $more = 0) { + $return = call_user_func(UC_API_FUNC, 'pm', 'check_newpm', array('uid'=>$uid, 'more'=>$more)); + return (!$more || UC_CONNECT == 'mysql') ? $return : uc_unserialize($return); +} + +function uc_pm_send($fromuid, $msgto, $subject, $message, $instantly = 1, $replypmid = 0, $isusername = 0, $type = 0) { + if($instantly) { + $replypmid = @is_numeric($replypmid) ? $replypmid : 0; + return call_user_func(UC_API_FUNC, 'pm', 'sendpm', array('fromuid'=>$fromuid, 'msgto'=>$msgto, 'subject'=>$subject, 'message'=>$message, 'replypmid'=>$replypmid, 'isusername'=>$isusername, 'type' => $type)); + } else { + $fromuid = intval($fromuid); + $subject = rawurlencode($subject); + $msgto = rawurlencode($msgto); + $message = rawurlencode($message); + $replypmid = @is_numeric($replypmid) ? $replypmid : 0; + $replyadd = $replypmid ? "&pmid=$replypmid&do=reply" : ''; + $apiurl = uc_api_url('pm_client', 'send', "uid=$fromuid", "&msgto=$msgto&subject=$subject&message=$message$replyadd"); + @header("Expires: 0"); + @header("Cache-Control: private, post-check=0, pre-check=0, max-age=0", FALSE); + @header("Pragma: no-cache"); + @header("location: ".$apiurl); + } +} + +function uc_pm_delete($uid, $folder, $pmids) { + return call_user_func(UC_API_FUNC, 'pm', 'delete', array('uid'=>$uid, 'pmids'=>$pmids)); +} + +function uc_pm_deleteuser($uid, $touids) { + return call_user_func(UC_API_FUNC, 'pm', 'deleteuser', array('uid'=>$uid, 'touids'=>$touids)); +} + +function uc_pm_deletechat($uid, $plids, $type = 0) { + return call_user_func(UC_API_FUNC, 'pm', 'deletechat', array('uid'=>$uid, 'plids'=>$plids, 'type'=>$type)); +} + +function uc_pm_readstatus($uid, $uids, $plids = array(), $status = 0) { + return call_user_func(UC_API_FUNC, 'pm', 'readstatus', array('uid'=>$uid, 'uids'=>$uids, 'plids'=>$plids, 'status'=>$status)); +} + +function uc_pm_list($uid, $page = 1, $pagesize = 10, $folder = 'inbox', $filter = 'newpm', $msglen = 0) { + $uid = intval($uid); + $page = intval($page); + $pagesize = intval($pagesize); + $return = call_user_func(UC_API_FUNC, 'pm', 'ls', array('uid'=>$uid, 'page'=>$page, 'pagesize'=>$pagesize, 'filter'=>$filter, 'msglen'=>$msglen)); + return UC_CONNECT == 'mysql' ? $return : uc_unserialize($return); +} + +function uc_pm_ignore($uid) { + $uid = intval($uid); + return call_user_func(UC_API_FUNC, 'pm', 'ignore', array('uid'=>$uid)); +} + +function uc_pm_view($uid, $pmid = 0, $touid = 0, $daterange = 1, $page = 0, $pagesize = 10, $type = 0, $isplid = 0) { + $uid = intval($uid); + $touid = intval($touid); + $page = intval($page); + $pagesize = intval($pagesize); + $pmid = @is_numeric($pmid) ? $pmid : 0; + $return = call_user_func(UC_API_FUNC, 'pm', 'view', array('uid'=>$uid, 'pmid'=>$pmid, 'touid'=>$touid, 'daterange'=>$daterange, 'page' => $page, 'pagesize' => $pagesize, 'type'=>$type, 'isplid'=>$isplid)); + return UC_CONNECT == 'mysql' ? $return : uc_unserialize($return); +} + +function uc_pm_view_num($uid, $touid, $isplid) { + $uid = intval($uid); + $touid = intval($touid); + $isplid = intval($isplid); + return call_user_func(UC_API_FUNC, 'pm', 'viewnum', array('uid' => $uid, 'touid' => $touid, 'isplid' => $isplid)); +} + +function uc_pm_viewnode($uid, $type, $pmid) { + $uid = intval($uid); + $type = intval($type); + $pmid = @is_numeric($pmid) ? $pmid : 0; + $return = call_user_func(UC_API_FUNC, 'pm', 'viewnode', array('uid'=>$uid, 'type'=>$type, 'pmid'=>$pmid)); + return UC_CONNECT == 'mysql' ? $return : uc_unserialize($return); +} + +function uc_pm_chatpmmemberlist($uid, $plid = 0) { + $uid = intval($uid); + $plid = intval($plid); + $return = call_user_func(UC_API_FUNC, 'pm', 'chatpmmemberlist', array('uid'=>$uid, 'plid'=>$plid)); + return UC_CONNECT == 'mysql' ? $return : uc_unserialize($return); +} + +function uc_pm_kickchatpm($plid, $uid, $touid) { + $uid = intval($uid); + $plid = intval($plid); + $touid = intval($touid); + return call_user_func(UC_API_FUNC, 'pm', 'kickchatpm', array('uid'=>$uid, 'plid'=>$plid, 'touid'=>$touid)); +} + +function uc_pm_appendchatpm($plid, $uid, $touid) { + $uid = intval($uid); + $plid = intval($plid); + $touid = intval($touid); + return call_user_func(UC_API_FUNC, 'pm', 'appendchatpm', array('uid'=>$uid, 'plid'=>$plid, 'touid'=>$touid)); +} + +function uc_pm_blackls_get($uid) { + $uid = intval($uid); + return call_user_func(UC_API_FUNC, 'pm', 'blackls_get', array('uid'=>$uid)); +} + +function uc_pm_blackls_set($uid, $blackls) { + $uid = intval($uid); + return call_user_func(UC_API_FUNC, 'pm', 'blackls_set', array('uid'=>$uid, 'blackls'=>$blackls)); +} + +function uc_pm_blackls_add($uid, $username) { + $uid = intval($uid); + return call_user_func(UC_API_FUNC, 'pm', 'blackls_add', array('uid'=>$uid, 'username'=>$username)); +} + +function uc_pm_blackls_delete($uid, $username) { + $uid = intval($uid); + return call_user_func(UC_API_FUNC, 'pm', 'blackls_delete', array('uid'=>$uid, 'username'=>$username)); +} + +function uc_domain_ls() { + $return = call_user_func(UC_API_FUNC, 'domain', 'ls', array('1'=>1)); + return UC_CONNECT == 'mysql' ? $return : uc_unserialize($return); +} + +function uc_credit_exchange_request($uid, $from, $to, $toappid, $amount) { + $uid = intval($uid); + $from = intval($from); + $toappid = intval($toappid); + $to = intval($to); + $amount = intval($amount); + return uc_api_post('credit', 'request', array('uid'=>$uid, 'from'=>$from, 'to'=>$to, 'toappid'=>$toappid, 'amount'=>$amount)); +} + +function uc_tag_get($tagname, $nums = 0) { + $return = call_user_func(UC_API_FUNC, 'tag', 'gettag', array('tagname'=>$tagname, 'nums'=>$nums)); + return UC_CONNECT == 'mysql' ? $return : uc_unserialize($return); +} + +function uc_avatar($uid, $type = 'virtual', $returnhtml = 1) { + $uid = intval($uid); + $uc_input = uc_api_input("uid=$uid"); + $uc_avatarflash = UC_API.'/images/camera.swf?inajax=1&appid='.UC_APPID.'&input='.$uc_input.'&agent='.md5($_SERVER['HTTP_USER_AGENT']).'&ucapi='.urlencode(str_replace('http://', '', UC_API)).'&avatartype='.$type.'&uploadSize=2048'; + if($returnhtml) { + return ' + + + + + + + + + '; + } else { + return array( + 'width', '450', + 'height', '253', + 'scale', 'exactfit', + 'src', $uc_avatarflash, + 'id', 'mycamera', + 'name', 'mycamera', + 'quality','high', + 'bgcolor','#ffffff', + 'menu', 'false', + 'swLiveConnect', 'true', + 'allowScriptAccess', 'always' + ); + } +} + +function uc_mail_queue($uids, $emails, $subject, $message, $frommail = '', $charset = 'gbk', $htmlon = FALSE, $level = 1) { + return call_user_func(UC_API_FUNC, 'mail', 'add', array('uids' => $uids, 'emails' => $emails, 'subject' => $subject, 'message' => $message, 'frommail' => $frommail, 'charset' => $charset, 'htmlon' => $htmlon, 'level' => $level)); +} + +function uc_check_avatar($uid, $size = 'middle', $type = 'virtual') { + $url = UC_API."/avatar.php?uid=$uid&size=$size&type=$type&check_file_exists=1"; + $res = uc_fopen2($url, 500000, '', '', TRUE, UC_IP, 20); + if($res == 1) { + return 1; + } else { + return 0; + } +} + +function uc_check_version() { + $return = uc_api_post('version', 'check', array()); + $data = uc_unserialize($return); + return is_array($data) ? $data : $return; +} + +?> \ No newline at end of file diff --git a/api/ucenter/uc_client/control/app.php b/api/ucenter/uc_client/control/app.php new file mode 100644 index 0000000..afaa446 --- /dev/null +++ b/api/ucenter/uc_client/control/app.php @@ -0,0 +1,50 @@ +appcontrol(); + } + + function appcontrol() { + parent::__construct(); + $this->load('app'); + } + + function onls() { + $this->init_input(); + $applist = $_ENV['app']->get_apps('appid, type, name, url, tagtemplates, viewprourl, synlogin'); + $applist2 = array(); + foreach($applist as $key => $app) { + $app['tagtemplates'] = $this->unserialize($app['tagtemplates']); + $applist2[$app['appid']] = $app; + } + return $applist2; + } + + function onadd() { + } + + function onucinfo() { + } + + function _random($length, $numeric = 0) { + } + + function _generate_key() { + } + + function _format_notedata($notedata) { + } +} + +?> \ No newline at end of file diff --git a/api/ucenter/uc_client/control/cache.php b/api/ucenter/uc_client/control/cache.php new file mode 100644 index 0000000..d4197e7 --- /dev/null +++ b/api/ucenter/uc_client/control/cache.php @@ -0,0 +1,29 @@ +cachecontrol(); + } + + function cachecontrol() { + parent::__construct(); + } + + function onupdate($arr) { + $this->load("cache"); + $_ENV['cache']->updatedata(); + } + +} + +?> \ No newline at end of file diff --git a/api/ucenter/uc_client/control/domain.php b/api/ucenter/uc_client/control/domain.php new file mode 100644 index 0000000..0b1f657 --- /dev/null +++ b/api/ucenter/uc_client/control/domain.php @@ -0,0 +1,29 @@ +domaincontrol(); + } + + function domaincontrol() { + parent::__construct(); + $this->init_input(); + $this->load('domain'); + } + + function onls() { + return $_ENV['domain']->get_list(1, 9999, 9999); + } +} + +?> \ No newline at end of file diff --git a/api/ucenter/uc_client/control/feed.php b/api/ucenter/uc_client/control/feed.php new file mode 100644 index 0000000..a664258 --- /dev/null +++ b/api/ucenter/uc_client/control/feed.php @@ -0,0 +1,105 @@ +feedcontrol(); + } + + function feedcontrol() { + parent::__construct(); + $this->init_input(); + } + + function onadd() { + $this->load('misc'); + $appid = intval($this->input('appid')); + $icon = $this->input('icon'); + $uid = intval($this->input('uid')); + $username = $this->input('username'); + $body_data = $_ENV['misc']->array2string($this->input('body_data')); + $title_data = $_ENV['misc']->array2string($this->input('title_data')); + + $title_template = $this->_parsetemplate($this->input('title_template')); + $body_template = $this->_parsetemplate($this->input('body_template')); + $body_general = $this->input('body_general'); + $target_ids = $this->input('target_ids'); + $image_1 = $this->input('image_1'); + $image_1_link = $this->input('image_1_link'); + $image_2 = $this->input('image_2'); + $image_2_link = $this->input('image_2_link'); + $image_3 = $this->input('image_3'); + $image_3_link = $this->input('image_3_link'); + $image_4 = $this->input('image_4'); + $image_4_link = $this->input('image_4_link'); + + $hash_template = md5($title_template.$body_template); + $hash_data = md5($title_template.$title_data.$body_template.$body_data); + $dateline = $this->time; + $this->db->query("INSERT INTO ".UC_DBTABLEPRE."feeds SET appid='$appid', icon='$icon', uid='$uid', username='$username', + title_template='$title_template', title_data='$title_data', body_template='$body_template', body_data='$body_data', body_general='$body_general', + image_1='$image_1', image_1_link='$image_1_link', image_2='$image_2', image_2_link='$image_2_link', + image_3='$image_3', image_3_link='$image_3_link', image_4='$image_4', image_4_link='$image_4_link', + hash_template='$hash_template', hash_data='$hash_data', target_ids='$target_ids', dateline='$dateline'"); + return $this->db->insert_id(); + } + + function ondelete() { + $start = $this->input('start'); + $limit = $this->input('limit'); + $end = $start + $limit; + $this->db->query("DELETE FROM ".UC_DBTABLEPRE."feeds WHERE feedid>'$start' AND feedid<'$end'"); + } + + function onget() { + $this->load('misc'); + $limit = intval($this->input('limit')); + $delete = $this->input('delete'); + $feedlist = $this->db->fetch_all("SELECT * FROM ".UC_DBTABLEPRE."feeds ORDER BY feedid DESC LIMIT $limit"); + if($feedlist) { + $maxfeedid = $feedlist[0]['feedid']; + foreach($feedlist as $key => $feed) { + $feed['body_data'] = $_ENV['misc']->string2array($feed['body_data']); + $feed['title_data'] = $_ENV['misc']->string2array($feed['title_data']); + $feedlist[$key] = $feed; + } + } + if(!empty($feedlist)) { + if(!isset($delete) || $delete) { + $this->_delete(0, $maxfeedid); + } + } + return $feedlist; + } + + function _delete($start, $end) { + $this->db->query("DELETE FROM ".UC_DBTABLEPRE."feeds WHERE feedid>='$start' AND feedid<='$end'"); + } + + function _parsetemplate($template) { + $template = str_replace(array("\r", "\n"), '', $template); + $template = str_replace(array('
', '
', '
', '
'), "\n", $template); + $template = str_replace(array('', ''), '[B]', $template); + $template = str_replace(array('', ''), '[I]', $template); + $template = str_replace(array('', ''), '[U]', $template); + $template = str_replace(array('', ''), '[/B]', $template); + $template = str_replace(array('', ''), '[/I]', $template); + $template = str_replace(array('', ''), '[/U]', $template); + $template = htmlspecialchars($template); + $template = nl2br($template); + $template = str_replace(array('[B]', '[I]', '[U]', '[/B]', '[/I]', '[/U]'), array('', '', '', '', '', ''), $template); + return $template; + } + +} + +?> \ No newline at end of file diff --git a/api/ucenter/uc_client/control/friend.php b/api/ucenter/uc_client/control/friend.php new file mode 100644 index 0000000..0d4b33f --- /dev/null +++ b/api/ucenter/uc_client/control/friend.php @@ -0,0 +1,59 @@ +friendcontrol(); + } + + function friendcontrol() { + parent::__construct(); + $this->init_input(); + $this->load('friend'); + } + + function ondelete() { + $uid = intval($this->input('uid')); + $friendids = $this->input('friendids'); + $id = $_ENV['friend']->delete($uid, $friendids); + return $id; + } + + function onadd() { + $uid = intval($this->input('uid')); + $friendid = $this->input('friendid'); + $comment = $this->input('comment'); + $id = $_ENV['friend']->add($uid, $friendid, $comment); + return $id; + } + + function ontotalnum() { + $uid = intval($this->input('uid')); + $direction = intval($this->input('direction')); + $totalnum = $_ENV['friend']->get_totalnum_by_uid($uid, $direction); + return $totalnum; + } + + function onls() { + $uid = intval($this->input('uid')); + $page = intval($this->input('page')); + $pagesize = intval($this->input('pagesize')); + $totalnum = intval($this->input('totalnum')); + $direction = intval($this->input('direction')); + $pagesize = $pagesize ? $pagesize : UC_PPP; + $totalnum = $totalnum ? $totalnum : $_ENV['friend']->get_totalnum_by_uid($uid); + $data = $_ENV['friend']->get_list($uid, $page, $pagesize, $totalnum, $direction); + return $data; + } +} + +?> \ No newline at end of file diff --git a/api/ucenter/uc_client/control/mail.php b/api/ucenter/uc_client/control/mail.php new file mode 100644 index 0000000..5ded576 --- /dev/null +++ b/api/ucenter/uc_client/control/mail.php @@ -0,0 +1,41 @@ +mailcontrol(); + } + + function mailcontrol() { + parent::__construct(); + $this->init_input(); + } + + function onadd() { + $this->load('mail'); + $mail = array(); + $mail['appid'] = UC_APPID; + $mail['uids'] = explode(',', $this->input('uids')); + $mail['emails'] = explode(',', $this->input('emails')); + $mail['subject'] = $this->input('subject'); + $mail['message'] = $this->input('message'); + $mail['charset'] = $this->input('charset'); + $mail['htmlon'] = intval($this->input('htmlon')); + $mail['level'] = abs(intval($this->input('level'))); + $mail['frommail'] = $this->input('frommail'); + $mail['dateline'] = $this->time; + return $_ENV['mail']->add($mail); + } + +} + +?> \ No newline at end of file diff --git a/api/ucenter/uc_client/control/pm.php b/api/ucenter/uc_client/control/pm.php new file mode 100644 index 0000000..dd14252 --- /dev/null +++ b/api/ucenter/uc_client/control/pm.php @@ -0,0 +1,373 @@ +pmcontrol(); + } + + function pmcontrol() { + parent::__construct(); + $this->load('user'); + $this->load('pm'); + } + + function oncheck_newpm() { + $this->init_input(); + $uid = intval($this->input('uid')); + $more = intval($this->input('more')); + if(!$_ENV['pm']->isnewpm($uid) && !$more) { + return 0; + } + $newprvpm = $_ENV['pm']->getpmnum($uid, 1, 1); + $newchatpm = $_ENV['pm']->getpmnum($uid, 2, 1); + $newpm = $newprvpm + $newchatpm; + if($more == 0) { + return $newpm; + } elseif($more == 1) { + return array('newpm' => $newpm, 'newprivatepm' => $newprvpm); + } elseif($more == 2 || $more == 3) { + if($more == 2) { + return array('newpm' => $newpm, 'newprivatepm' => $newprvpm, 'newchatpm' => $newchatpm); + } else { + $lastpm = $_ENV['pm']->lastpm($uid); + require_once UC_ROOT.'lib/uccode.class.php'; + $this->uccode = new uccode(); + $lastpm['lastsummary'] = $this->uccode->complie($lastpm['lastsummary']); + return array('newpm' => $newpm, 'newprivatepm' => $newprvpm, 'newchatpm' => $newchatpm, 'lastdate' => $lastpm['lastdateline'], 'lastmsgfromid' => $lastpm['lastauthorid'], 'lastmsgfrom' => $lastpm['lastauthorusername'], 'lastmsg' => $lastpm['lastsummary']); + } + } elseif($more == 4) { + return array('newpm' => $newpm, 'newprivatepm' => $newprvpm, 'newchatpm' => $newchatpm); + } else { + return 0; + } + } + + function onsendpm() { + $this->init_input(); + $fromuid = $this->input('fromuid'); + $msgto = $this->input('msgto'); + $subject = $this->input('subject'); + $message = $this->input('message'); + $replypmid = $this->input('replypmid'); + $isusername = $this->input('isusername'); + $type = $this->input('type'); + + if(!$fromuid) { + return 0; + } + + $user = $_ENV['user']->get_user_by_uid($fromuid); + $user = daddslashes($user, 1); + if(!$user) { + return 0; + } + $this->user['uid'] = $user['uid']; + $this->user['username'] = $user['username']; + + if($replypmid) { + $isusername = 0; + $plid = $_ENV['pm']->getplidbypmid($replypmid); + $msgto = $_ENV['pm']->getuidbyplid($plid); + unset($msgto[$this->user['uid']]); + } else { + if(!empty($msgto)) { + $msgto = array_unique(explode(',', $msgto)); + } + } + + if($isusername) { + $msgto = $_ENV['user']->name2id($msgto); + } + $countmsgto = count($msgto); + + if($this->settings['pmsendregdays']) { + if($user['regdate'] > $this->time - $this->settings['pmsendregdays'] * 86400) { + return PMSENDREGDAYS; + } + } + if($this->settings['chatpmmemberlimit']) { + if($type == 1 && ($countmsgto > ($this->settings['chatpmmemberlimit'] - 1))) { + return CHATPMMEMBERLIMIT_ERROR; + } + } + if($this->settings['pmfloodctrl']) { + if(!$_ENV['pm']->ispminterval($this->user['uid'], $this->settings['pmfloodctrl'])) { + return PMFLOODCTRL_ERROR; + } + } + if($this->settings['privatepmthreadlimit']) { + if(!$_ENV['pm']->isprivatepmthreadlimit($this->user['uid'], $this->settings['privatepmthreadlimit'])) { + return PRIVATEPMTHREADLIMIT_ERROR; + } + } + if($this->settings['chatpmthreadlimit']) { + if(!$_ENV['pm']->ischatpmthreadlimit($this->user['uid'], $this->settings['chatpmthreadlimit'])) { + return CHATPMTHREADLIMIT_ERROR; + } + } + + $lastpmid = 0; + if($replypmid) { + $lastpmid = $_ENV['pm']->replypm($plid, $this->user['uid'], $this->user['username'], $message); + } else { + $lastpmid = $_ENV['pm']->sendpm($this->user['uid'], $this->user['username'], $msgto, $subject, $message, $type); + } + return $lastpmid; + } + + function ondelete() { + $this->init_input(); + $this->user['uid'] = intval($this->input('uid')); + $pmids = $this->input('pmids'); + if(empty($pmids)) { + return 0; + } + if(is_array($pmids)) { + $this->apps = $this->cache('apps'); + if($this->apps[$this->app['appid']]['type'] == 'UCHOME') { + $id = $_ENV['pm']->deletepmbyplids($this->user['uid'], $this->input('pmids')); + } else { + $id = $_ENV['pm']->deletepmbypmids($this->user['uid'], $this->input('pmids')); + } + } else { + $id = $_ENV['pm']->deletepmbypmid($this->user['uid'], $this->input('pmids')); + } + return $id; + } + + function ondeletechat() { + $this->init_input(); + $this->user['uid'] = intval($this->input('uid')); + $plids = $this->input('plids'); + $type = intval($this->input('type')); + if($type == 1) { + return $_ENV['pm']->deletepmbyplids($this->user['uid'], $plids); + } else { + return $_ENV['pm']->quitchatpm($this->user['uid'], $plids); + } + } + + function ondeleteuser() { + $this->init_input(); + $this->user['uid'] = intval($this->input('uid')); + $id = $_ENV['pm']->deletepmbyplids($this->user['uid'], $this->input('touids'), 1); + return $id; + } + + function onreadstatus() { + $this->init_input(); + $this->user['uid'] = intval($this->input('uid')); + $_ENV['pm']->setpmstatus($this->user['uid'], $this->input('uids'), $this->input('plids'), $this->input('status')); + } + + function onignore() { + $this->init_input(); + $this->user['uid'] = intval($this->input('uid')); + return $_ENV['pm']->set_ignore($this->user['uid']); + } + + function onls() { + $this->init_input(); + $pagesize = $this->input('pagesize'); + $filter = $this->input('filter'); + $page = $this->input('page'); + $msglen = $this->input('msglen'); + $this->user['uid'] = intval($this->input('uid')); + + $filter = $filter ? (in_array($filter, array('newpm', 'privatepm')) ? $filter : '') : ''; + if($filter == 'newpm') { + $type = 0; + $new = 1; +/* + } elseif($filter == 'privatepm') { + $type = 1; + $new = 0; + } elseif($filter == 'chatpm') { + $type = 2; + $new = 0; +*/ + } elseif($filter == 'privatepm') { + $type = 0; + $new = 0; + } else { + return array(); + } + $pmnum = $_ENV['pm']->getpmnum($this->user['uid'], $type, $new); + $start = $this->page_get_start($page, $pagesize, $pmnum); + + if($pagesize > 0) { + $pms = $_ENV['pm']->getpmlist($this->user['uid'], $filter, $start, $pagesize); + if(is_array($pms) && !empty($pms)) { + foreach($pms as $key => $pm) { + if($msglen) { + $pms[$key]['lastsummary'] = $_ENV['pm']->removecode($pms[$key]['lastsummary'], $msglen); + } else { + unset($pms[$key]['lastsummary']); + } + } + } + $result['data'] = $pms; + } + $result['count'] = $pmnum; + return $result; + } + + function onview() { + $this->init_input(); + $this->user['uid'] = intval($this->input('uid')); + $pmid = $this->input('pmid'); + $touid = $this->input('touid'); + $daterange = $this->input('daterange'); + $page = $this->input('page'); + $pagesize = $this->input('pagesize'); + $isplid = $this->input('isplid'); + $type = $this->input('type'); + + $daterange = empty($daterange) ? 1 : $daterange; + $today = $this->time - ($this->time + $this->settings['timeoffset']) % 86400; + if($daterange == 1) { + $starttime = $today; + } elseif($daterange == 2) { + $starttime = $today - 86400; + } elseif($daterange == 3) { + $starttime = $today - 172800; + } elseif($daterange == 4) { + $starttime = $today - 604800; + } elseif($daterange == 5) { + $starttime = 0; + } + $endtime = $this->time; + + if(!$isplid) { + $plid = $_ENV['pm']->getplidbytouid($this->user['uid'], $touid); + } else { + $plid = $touid; + } + if($page) { + $pmnum = $_ENV['pm']->getpmnumbyplid($this->user['uid'], $plid); + $start = $this->page_get_start($page, $pagesize, $pmnum); + $ppp = $pagesize; + } else { + $pmnum = 0; + $start = 0; + $ppp = 0; + } + + if($pmid) { + $pms = $_ENV['pm']->getpmbypmid($this->user['uid'], $pmid); + } else { + $pms = $_ENV['pm']->getpmbyplid($this->user['uid'], $plid, $starttime, $endtime, $start, $ppp, $type); + } + + require_once UC_ROOT.'lib/uccode.class.php'; + $this->uccode = new uccode(); + if($pms) { + foreach($pms as $key => $pm) { + $pms[$key]['message'] = $this->uccode->complie($pms[$key]['message']); + } + } + return $pms; + } + + function onviewnum() { + $this->init_input(); + $this->user['uid'] = intval($this->input('uid')); + $touid = $this->input('touid'); + $isplid = $this->input('isplid'); + if(!$isplid) { + $plid = $_ENV['pm']->getplidbytouid($this->user['uid'], $touid); + } else { + $plid = $touid; + } + $pmnum = $_ENV['pm']->getpmnumbyplid($this->user['uid'], $plid); + return $pmnum; + } + + function onviewnode() { + $this->init_input(); + $this->user['uid'] = intval($this->input('uid')); + $type = $this->input('type'); + $pmid = $this->input('pmid'); + $type = 0; + $pms = $_ENV['pm']->getpmbypmid($this->user['uid'], $pmid); + + require_once UC_ROOT.'lib/uccode.class.php'; + $this->uccode = new uccode(); + if($pms) { + foreach($pms as $key => $pm) { + $pms[$key]['message'] = $this->uccode->complie($pms[$key]['message']); + } + } + $pms = $pms[0]; + return $pms; + } + + function onchatpmmemberlist() { + $this->init_input(); + $this->user['uid'] = intval($this->input('uid')); + $plid = intval($this->input('plid')); + return $_ENV['pm']->chatpmmemberlist($this->user['uid'], $plid); + } + + function onkickchatpm() { + $this->init_input(); + $this->user['uid'] = intval($this->input('uid')); + $plid = intval($this->input('plid')); + $touid = intval($this->input('touid')); + return $_ENV['pm']->kickchatpm($plid, $this->user['uid'], $touid); + } + + function onappendchatpm() { + $this->init_input(); + $this->user['uid'] = intval($this->input('uid')); + $plid = intval($this->input('plid')); + $touid = intval($this->input('touid')); + return $_ENV['pm']->appendchatpm($plid, $this->user['uid'], $touid); + } + + function onblackls_get() { + $this->init_input(); + $this->user['uid'] = intval($this->input('uid')); + return $_ENV['pm']->get_blackls($this->user['uid']); + } + + function onblackls_set() { + $this->init_input(); + $this->user['uid'] = intval($this->input('uid')); + $blackls = $this->input('blackls'); + return $_ENV['pm']->set_blackls($this->user['uid'], $blackls); + } + + function onblackls_add() { + $this->init_input(); + $this->user['uid'] = intval($this->input('uid')); + $username = $this->input('username'); + return $_ENV['pm']->update_blackls($this->user['uid'], $username, 1); + } + + function onblackls_delete($arr) { + $this->init_input(); + $this->user['uid'] = intval($this->input('uid')); + $username = $this->input('username'); + return $_ENV['pm']->update_blackls($this->user['uid'], $username, 2); + } +} + +?> \ No newline at end of file diff --git a/api/ucenter/uc_client/control/tag.php b/api/ucenter/uc_client/control/tag.php new file mode 100644 index 0000000..5d68b25 --- /dev/null +++ b/api/ucenter/uc_client/control/tag.php @@ -0,0 +1,85 @@ +tagcontrol(); + } + + function tagcontrol() { + parent::__construct(); + $this->init_input(); + $this->load('tag'); + $this->load('misc'); + } + + function ongettag() { + $appid = $this->input('appid'); + $tagname = $this->input('tagname'); + $nums = $this->input('nums'); + if(empty($tagname)) { + return NULL; + } + $return = $apparray = $appadd = array(); + + if($nums && is_array($nums)) { + foreach($nums as $k => $num) { + $apparray[$k] = $k; + } + } + + $data = $_ENV['tag']->get_tag_by_name($tagname); + if($data) { + $apparraynew = array(); + foreach($data as $tagdata) { + $row = $r = array(); + $tmp = explode("\t", $tagdata['data']); + $type = $tmp[0]; + array_shift($tmp); + foreach($tmp as $tmp1) { + $tmp1 != '' && $r[] = $_ENV['misc']->string2array($tmp1); + } + if(in_array($tagdata['appid'], $apparray)) { + if($tagdata['expiration'] > 0 && $this->time - $tagdata['expiration'] > 3600) { + $appadd[] = $tagdata['appid']; + $_ENV['tag']->formatcache($tagdata['appid'], $tagname); + } else { + $apparraynew[] = $tagdata['appid']; + } + $datakey = array(); + $count = 0; + foreach($r as $data) { + $return[$tagdata['appid']]['data'][] = $data; + $return[$tagdata['appid']]['type'] = $type; + $count++; + if($count >= $nums[$tagdata['appid']]) { + break; + } + } + } + } + $apparray = array_diff($apparray, $apparraynew); + } else { + foreach($apparray as $appid) { + $_ENV['tag']->formatcache($appid, $tagname); + } + } + if($apparray) { + $this->load('note'); + $_ENV['note']->add('gettag', "id=$tagname", '', $appadd, -1); + } + return $return; + } + +} + +?> \ No newline at end of file diff --git a/api/ucenter/uc_client/control/user.php b/api/ucenter/uc_client/control/user.php new file mode 100644 index 0000000..10a6f52 --- /dev/null +++ b/api/ucenter/uc_client/control/user.php @@ -0,0 +1,262 @@ +usercontrol(); + } + + function usercontrol() { + parent::__construct(); + $this->load('user'); + $this->app = $this->cache['apps'][UC_APPID]; + } + + // -1 δ + function onsynlogin() { + $this->init_input(); + $uid = $this->input('uid'); + if($this->app['synlogin']) { + if($this->user = $_ENV['user']->get_user_by_uid($uid)) { + $synstr = ''; + foreach($this->cache['apps'] as $appid => $app) { + if($app['synlogin'] && $app['appid'] != $this->app['appid']) { + $synstr .= ''; + } + } + return $synstr; + } + } + return ''; + } + + function onsynlogout() { + $this->init_input(); + if($this->app['synlogin']) { + $synstr = ''; + foreach($this->cache['apps'] as $appid => $app) { + if($app['synlogin'] && $app['appid'] != $this->app['appid']) { + $synstr .= ''; + } + } + return $synstr; + } + return ''; + } + + function onregister() { + $this->init_input(); + $username = $this->input('username'); + $password = $this->input('password'); + $email = $this->input('email'); + $questionid = $this->input('questionid'); + $answer = $this->input('answer'); + $regip = $this->input('regip'); + + if(($status = $this->_check_username($username)) < 0) { + return $status; + } + if(($status = $this->_check_email($email)) < 0) { + return $status; + } + $uid = $_ENV['user']->add_user($username, $password, $email, 0, $questionid, $answer, $regip); + return $uid; + } + + function onedit() { + $this->init_input(); + $username = $this->input('username'); + $oldpw = $this->input('oldpw'); + $newpw = $this->input('newpw'); + $email = $this->input('email'); + $ignoreoldpw = $this->input('ignoreoldpw'); + $questionid = $this->input('questionid'); + $answer = $this->input('answer'); + + if(!$ignoreoldpw && $email && ($status = $this->_check_email($email, $username)) < 0) { + return $status; + } + $status = $_ENV['user']->edit_user($username, $oldpw, $newpw, $email, $ignoreoldpw, $questionid, $answer); + + if($newpw && $status > 0) { + $this->load('note'); + $_ENV['note']->add('updatepw', 'username='.urlencode($username).'&password='.$newpw); + $_ENV['note']->send(); + } + return $status; + } + + function onlogin() { + $this->init_input(); + $isuid = $this->input('isuid'); + $username = $this->input('username'); + $password = $this->input('password'); + $checkques = $this->input('checkques'); + $questionid = $this->input('questionid'); + $answer = $this->input('answer'); + if($isuid == 1) { + $user = $_ENV['user']->get_user_by_uid($username); + } elseif($isuid == 2) { + $user = $_ENV['user']->get_user_by_email($username); + } else { + $user = $_ENV['user']->get_user_by_username($username); + } + + $passwordmd5 = preg_match('/^\w{32}$/', $password) ? $password : md5($password); + if(empty($user)) { + $status = -1; + } elseif($user['password'] != md5($passwordmd5.$user['salt'])) { + $status = -2; + } elseif($checkques && $user['secques'] != '' && $user['secques'] != $_ENV['user']->quescrypt($questionid, $answer)) { + $status = -3; + } else { + $status = $user['uid']; + } + $merge = $status != -1 && !$isuid && $_ENV['user']->check_mergeuser($username) ? 1 : 0; + return array($status, $user['username'], $password, $user['email'], $merge); + } + + function oncheck_email() { + $this->init_input(); + $email = $this->input('email'); + return $this->_check_email($email); + } + + function oncheck_username() { + $this->init_input(); + $username = $this->input('username'); + if(($status = $this->_check_username($username)) < 0) { + return $status; + } else { + return 1; + } + } + + function onget_user() { + $this->init_input(); + $username = $this->input('username'); + if(!$this->input('isuid')) { + $status = $_ENV['user']->get_user_by_username($username); + } else { + $status = $_ENV['user']->get_user_by_uid($username); + } + if($status) { + return array($status['uid'],$status['username'],$status['email']); + } else { + return 0; + } + } + + + function ongetprotected() { + $protectedmembers = $this->db->fetch_all("SELECT uid,username FROM ".UC_DBTABLEPRE."protectedmembers GROUP BY username"); + return $protectedmembers; + } + + function ondelete() { + $this->init_input(); + $uid = $this->input('uid'); + return $_ENV['user']->delete_user($uid); + } + + function onaddprotected() { + $this->init_input(); + $username = $this->input('username'); + $admin = $this->input('admin'); + $appid = $this->app['appid']; + $usernames = (array)$username; + foreach($usernames as $username) { + $user = $_ENV['user']->get_user_by_username($username); + $uid = $user['uid']; + $this->db->query("REPLACE INTO ".UC_DBTABLEPRE."protectedmembers SET uid='$uid', username='$username', appid='$appid', dateline='{$this->time}', admin='$admin'", 'SILENT'); + } + return $this->db->errno() ? -1 : 1; + } + + function ondeleteprotected() { + $this->init_input(); + $username = $this->input('username'); + $appid = $this->app['appid']; + $usernames = (array)$username; + foreach($usernames as $username) { + $this->db->query("DELETE FROM ".UC_DBTABLEPRE."protectedmembers WHERE username='$username' AND appid='$appid'"); + } + return $this->db->errno() ? -1 : 1; + } + + function onmerge() { + $this->init_input(); + $oldusername = $this->input('oldusername'); + $newusername = $this->input('newusername'); + $uid = $this->input('uid'); + $password = $this->input('password'); + $email = $this->input('email'); + if(($status = $this->_check_username($newusername)) < 0) { + return $status; + } + $uid = $_ENV['user']->add_user($newusername, $password, $email, $uid); + $this->db->query("DELETE FROM ".UC_DBTABLEPRE."mergemembers WHERE appid='".$this->app['appid']."' AND username='$oldusername'"); + return $uid; + } + + function onmerge_remove() { + $this->init_input(); + $username = $this->input('username'); + $this->db->query("DELETE FROM ".UC_DBTABLEPRE."mergemembers WHERE appid='".$this->app['appid']."' AND username='$username'"); + return NULL; + } + + function _check_username($username) { + $username = addslashes(trim(stripslashes($username))); + if(!$_ENV['user']->check_username($username)) { + return UC_USER_CHECK_USERNAME_FAILED; + } elseif(!$_ENV['user']->check_usernamecensor($username)) { + return UC_USER_USERNAME_BADWORD; + } elseif($_ENV['user']->check_usernameexists($username)) { + return UC_USER_USERNAME_EXISTS; + } + return 1; + } + + function _check_email($email, $username = '') { + if(empty($this->settings)) { + $this->settings = $this->cache('settings'); + } + if(!$_ENV['user']->check_emailformat($email)) { + return UC_USER_EMAIL_FORMAT_ILLEGAL; + } elseif(!$_ENV['user']->check_emailaccess($email)) { + return UC_USER_EMAIL_ACCESS_ILLEGAL; + } elseif(!$this->settings['doublee'] && $_ENV['user']->check_emailexists($email, $username)) { + return UC_USER_EMAIL_EXISTS; + } else { + return 1; + } + } + + function onuploadavatar() { + } + + function onrectavatar() { + } + function flashdata_decode($s) { + } +} + +?> \ No newline at end of file diff --git a/api/ucenter/uc_client/data/cache/apps.php b/api/ucenter/uc_client/data/cache/apps.php new file mode 100644 index 0000000..8c75162 --- /dev/null +++ b/api/ucenter/uc_client/data/cache/apps.php @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/api/ucenter/uc_client/data/cache/settings.php b/api/ucenter/uc_client/data/cache/settings.php new file mode 100644 index 0000000..80d02c5 --- /dev/null +++ b/api/ucenter/uc_client/data/cache/settings.php @@ -0,0 +1,27 @@ + '', + 'censoremail' => '', + 'censorusername' => 'adminss', + 'dateformat' => 'y-n-j', + 'doublee' => '0', + 'timeoffset' => '28800', + 'privatepmthreadlimit' => '25', + 'chatpmthreadlimit' => '30', + 'chatpmmemberlimit' => '35', + 'pmfloodctrl' => '15', + 'pmcenter' => '1', + 'sendpmseccode' => '1', + 'pmsendregdays' => '0', + 'maildefault' => 'username@21cn.com', + 'mailsend' => '1', + 'mailserver' => 'smtp.21cn.com', + 'mailport' => '25', + 'mailauth' => '1', + 'mailfrom' => 'UCenter ', + 'mailauth_username' => 'username@21cn.com', + 'mailauth_password' => 'password', + 'maildelimiter' => '0', + 'mailusername' => '1', + 'mailsilent' => '1', +); diff --git a/api/ucenter/uc_client/lib/db.class.php b/api/ucenter/uc_client/lib/db.class.php new file mode 100644 index 0000000..21fd1f9 --- /dev/null +++ b/api/ucenter/uc_client/lib/db.class.php @@ -0,0 +1,172 @@ +dbhost = $dbhost; + $this->dbuser = $dbuser; + $this->dbpw = $dbpw; + $this->dbname = $dbname; + $this->dbcharset = $dbcharset; + $this->pconnect = $pconnect; + $this->tablepre = $tablepre; + $this->time = $time; + + if($pconnect) { + if(!$this->db = mysql_pconnect($dbhost, $dbuser, $dbpw)) { + $this->halt('Can not connect to MySQL server'); + } + } else { + if(!$this->db = mysql_connect($dbhost, $dbuser, $dbpw)) { + $this->halt('Can not connect to MySQL server'); + } + } + + if($this->version() > '4.1') { + if($dbcharset) { + mysql_query("SET character_set_connection=".$dbcharset.", character_set_results=".$dbcharset.", character_set_client=binary", $this->db); + } + + if($this->version() > '5.0.1') { + mysql_query("SET sql_mode=''", $this->db); + } + } + + if($dbname) { + mysql_select_db($dbname, $this->db); + } + + } + + function fetch_array($query, $result_type = MYSQL_ASSOC) { + return mysql_fetch_array($query, $result_type); + } + + function result_first($sql) { + $query = $this->query($sql); + return $this->result($query, 0); + } + + function fetch_first($sql) { + $query = $this->query($sql); + return $this->fetch_array($query); + } + + function fetch_all($sql, $id = '') { + $arr = array(); + $query = $this->query($sql); + while($data = $this->fetch_array($query)) { + $id ? $arr[$data[$id]] = $data : $arr[] = $data; + } + return $arr; + } + + function cache_gc() { + $this->query("DELETE FROM {$this->tablepre}sqlcaches WHERE expiry<$this->time"); + } + + function query($sql, $type = '', $cachetime = FALSE) { + $func = $type == 'UNBUFFERED' && @function_exists('mysql_unbuffered_query') ? 'mysql_unbuffered_query' : 'mysql_query'; + if(!($query = $func($sql, $this->db)) && $type != 'SILENT') { + $this->halt('MySQL Query Error', $sql); + } + $this->querynum++; + $this->histories[] = $sql; + return $query; + } + + function affected_rows() { + return mysql_affected_rows($this->db); + } + + function error() { + return (($this->db) ? mysql_error($this->db) : mysql_error()); + } + + function errno() { + return intval(($this->db) ? mysql_errno($this->db) : mysql_errno()); + } + + function result($query, $row) { + $query = @mysql_result($query, $row); + return $query; + } + + function num_rows($query) { + $query = mysql_num_rows($query); + return $query; + } + + function num_fields($query) { + return mysql_num_fields($query); + } + + function free_result($query) { + return mysql_free_result($query); + } + + function insert_id() { + return ($id = mysql_insert_id($this->db)) >= 0 ? $id : $this->result($this->query("SELECT last_insert_id()"), 0); + } + + function fetch_row($query) { + $query = mysql_fetch_row($query); + return $query; + } + + function fetch_fields($query) { + return mysql_fetch_field($query); + } + + function version() { + return mysql_get_server_info($this->db); + } + + function close() { + return mysql_close($this->db); + } + + function halt($message = '', $sql = '') { + $error = mysql_error(); + $errorno = mysql_errno(); + if($errorno == 2006 && $this->goneaway-- > 0) { + $this->connect($this->dbhost, $this->dbuser, $this->dbpw, $this->dbname, $this->dbcharset, $this->pconnect, $this->tablepre, $this->time); + $this->query($sql); + } else { + $s = ''; + if($message) { + $s = "UCenter info: $message
"; + } + if($sql) { + $s .= 'SQL:'.htmlspecialchars($sql).'
'; + } + $s .= 'Error:'.$error.'
'; + $s .= 'Errno:'.$errorno.'
'; + $s = str_replace(UC_DBTABLEPRE, '[Table]', $s); + exit($s); + } + } +} + +?> \ No newline at end of file diff --git a/api/ucenter/uc_client/lib/dbi.class.php b/api/ucenter/uc_client/lib/dbi.class.php new file mode 100644 index 0000000..339e95f --- /dev/null +++ b/api/ucenter/uc_client/lib/dbi.class.php @@ -0,0 +1,162 @@ +dbhost = $dbhost; + $this->dbuser = $dbuser; + $this->dbpw = $dbpw; + $this->dbname = $dbname; + $this->dbcharset = $dbcharset; + $this->pconnect = $pconnect; + $this->tablepre = $tablepre; + $this->time = $time; + + if(!$this->db = new mysqli($dbhost, $dbuser, $dbpw, $dbname)) { + $this->halt('Can not connect to MySQLi server'); + } + + if($this->version() > '4.1') { + if($dbcharset) { + $this->db->set_charset($dbcharset); + } + + if($this->version() > '5.0.1') { + $this->db->query("SET sql_mode=''"); + } + } + } + + function fetch_array($query, $result_type = MYSQLI_ASSOC) { + return $query ? $query->fetch_array($result_type) : null; + } + + function result_first($sql) { + $query = $this->query($sql); + return $this->result($query, 0); + } + + function fetch_first($sql) { + $query = $this->query($sql); + return $this->fetch_array($query); + } + + function fetch_all($sql, $id = '') { + $arr = array(); + $query = $this->query($sql); + while($data = $this->fetch_array($query)) { + $id ? $arr[$data[$id]] = $data : $arr[] = $data; + } + return $arr; + } + + function cache_gc() { + $this->query("DELETE FROM {$this->tablepre}sqlcaches WHERE expiry<$this->time"); + } + + function query($sql, $type = '', $cachetime = FALSE) { + $resultmode = $type == 'UNBUFFERED' ? MYSQLI_USE_RESULT : MYSQLI_STORE_RESULT; + if(!($query = $this->db->query($sql, $resultmode)) && $type != 'SILENT') { + $this->halt('MySQLi Query Error', $sql); + } + $this->querynum++; + $this->histories[] = $sql; + return $query; + } + + function affected_rows() { + return $this->db->affected_rows; + } + + function error() { + return (($this->db) ? $this->db->error : mysqli_error()); + } + + function errno() { + return intval(($this->db) ? $this->db->errno : mysqli_errno()); + } + + function result($query, $row) { + if(!$query || $query->num_rows == 0) { + return null; + } + $query->data_seek($row); + $assocs = $query->fetch_row(); + return $assocs[0]; + } + + function num_rows($query) { + $query = $query ? $query->num_rows : 0; + return $query; + } + + function num_fields($query) { + return $query ? $query->field_count : 0; + } + + function free_result($query) { + return $query ? $query->free() : false; + } + + function insert_id() { + return ($id = $this->db->insert_id) >= 0 ? $id : $this->result($this->query("SELECT last_insert_id()"), 0); + } + + function fetch_row($query) { + $query = $query ? $query->fetch_row() : null; + return $query; + } + + function fetch_fields($query) { + return $query ? $query->fetch_field() : null; + } + + function version() { + return $this->db->server_info; + } + + function escape_string($str) { + return $this->db->escape_string($str); + } + + function close() { + return $this->db->close(); + } + + function halt($message = '', $sql = '') { + $error = $this->error(); + $errorno = $this->errno(); + if($errorno == 2006 && $this->goneaway-- > 0) { + $this->connect($this->dbhost, $this->dbuser, $this->dbpw, $this->dbname, $this->dbcharset, $this->pconnect, $this->tablepre, $this->time); + $this->query($sql); + } else { + $s = ''; + if($message) { + $s = "UCenter info: $message
"; + } + if($sql) { + $s .= 'SQL:'.htmlspecialchars($sql).'
'; + } + $s .= 'Error:'.$error.'
'; + $s .= 'Errno:'.$errorno.'
'; + $s = str_replace(UC_DBTABLEPRE, '[Table]', $s); + exit($s); + } + } +} + +?> \ No newline at end of file diff --git a/api/ucenter/uc_client/lib/sendmail.inc.php b/api/ucenter/uc_client/lib/sendmail.inc.php new file mode 100644 index 0000000..f8a8b95 --- /dev/null +++ b/api/ucenter/uc_client/lib/sendmail.inc.php @@ -0,0 +1,142 @@ +base->cache['apps'][$mail['appid']]['name']; +$mail['subject'] = '=?'.$mail['charset'].'?B?'.base64_encode(str_replace("\r", '', str_replace("\n", '', '['.$appname.'] '.$mail['subject']))).'?='; +$mail['message'] = chunk_split(base64_encode(str_replace("\r\n.", " \r\n..", str_replace("\n", "\r\n", str_replace("\r", "\n", str_replace("\r\n", "\n", str_replace("\n\r", "\r", $mail['message']))))))); + +$email_from = $mail['frommail'] == '' ? '=?'.$mail['charset'].'?B?'.base64_encode($appname)."?= <$mail_setting[maildefault]>" : (preg_match('/^(.+?) \<(.+?)\>$/',$email_from, $from) ? '=?'.$mail['charset'].'?B?'.base64_encode($from[1])."?= <$from[2]>" : $mail['frommail']); + +foreach(explode(',', $mail['email_to']) as $touser) { + $tousers[] = preg_match('/^(.+?) \<(.+?)\>$/',$touser, $to) ? ($mailusername ? '=?'.$mail['charset'].'?B?'.base64_encode($to[1])."?= <$to[2]>" : $to[2]) : $touser; +} + +$mail['email_to'] = implode(',', $tousers); + +$headers = "From: $email_from{$maildelimiter}X-Priority: 3{$maildelimiter}X-Mailer: Discuz! $version{$maildelimiter}MIME-Version: 1.0{$maildelimiter}Content-type: text/".($mail['htmlon'] ? 'html' : 'plain')."; charset=$mail[charset]{$maildelimiter}Content-Transfer-Encoding: base64{$maildelimiter}"; + +$mail_setting['mailport'] = $mail_setting['mailport'] ? $mail_setting['mailport'] : 25; + +if($mail_setting['mailsend'] == 1 && function_exists('mail')) { + + return @mail($mail['email_to'], $mail['subject'], $mail['message'], $headers); + +} elseif($mail_setting['mailsend'] == 2) { + + if(!$fp = fsockopen($mail_setting['mailserver'], $mail_setting['mailport'], $errno, $errstr, 30)) { + return false; + } + + stream_set_blocking($fp, true); + + $lastmessage = fgets($fp, 512); + if(substr($lastmessage, 0, 3) != '220') { + return false; + } + + fputs($fp, ($mail_setting['mailauth'] ? 'EHLO' : 'HELO')." discuz\r\n"); + $lastmessage = fgets($fp, 512); + if(substr($lastmessage, 0, 3) != 220 && substr($lastmessage, 0, 3) != 250) { + return false; + } + + while(1) { + if(substr($lastmessage, 3, 1) != '-' || empty($lastmessage)) { + break; + } + $lastmessage = fgets($fp, 512); + } + + if($mail_setting['mailauth']) { + fputs($fp, "AUTH LOGIN\r\n"); + $lastmessage = fgets($fp, 512); + if(substr($lastmessage, 0, 3) != 334) { + return false; + } + + fputs($fp, base64_encode($mail_setting['mailauth_username'])."\r\n"); + $lastmessage = fgets($fp, 512); + if(substr($lastmessage, 0, 3) != 334) { + return false; + } + + fputs($fp, base64_encode($mail_setting['mailauth_password'])."\r\n"); + $lastmessage = fgets($fp, 512); + if(substr($lastmessage, 0, 3) != 235) { + return false; + } + + $email_from = $mail_setting['mailfrom']; + } + + fputs($fp, "MAIL FROM: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $email_from).">\r\n"); + $lastmessage = fgets($fp, 512); + if(substr($lastmessage, 0, 3) != 250) { + fputs($fp, "MAIL FROM: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $email_from).">\r\n"); + $lastmessage = fgets($fp, 512); + if(substr($lastmessage, 0, 3) != 250) { + return false; + } + } + + $email_tos = array(); + foreach(explode(',', $mail['email_to']) as $touser) { + $touser = trim($touser); + if($touser) { + fputs($fp, "RCPT TO: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $touser).">\r\n"); + $lastmessage = fgets($fp, 512); + if(substr($lastmessage, 0, 3) != 250) { + fputs($fp, "RCPT TO: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $touser).">\r\n"); + $lastmessage = fgets($fp, 512); + return false; + } + } + } + + fputs($fp, "DATA\r\n"); + $lastmessage = fgets($fp, 512); + if(substr($lastmessage, 0, 3) != 354) { + return false; + } + + $headers .= 'Message-ID: <'.gmdate('YmdHs').'.'.substr(md5($mail['message'].microtime()), 0, 6).rand(100000, 999999).'@'.$_SERVER['HTTP_HOST'].">{$maildelimiter}"; + + fputs($fp, "Date: ".gmdate('r')."\r\n"); + fputs($fp, "To: ".$mail['email_to']."\r\n"); + fputs($fp, "Subject: ".$mail['subject']."\r\n"); + fputs($fp, $headers."\r\n"); + fputs($fp, "\r\n\r\n"); + fputs($fp, "$mail[message]\r\n.\r\n"); + $lastmessage = fgets($fp, 512); + if(substr($lastmessage, 0, 3) != 250) { + return false; + } + + fputs($fp, "QUIT\r\n"); + return true; + +} elseif($mail_setting['mailsend'] == 3) { + + ini_set('SMTP', $mail_setting['mailserver']); + ini_set('smtp_port', $mail_setting['mailport']); + ini_set('sendmail_from', $email_from); + + return @mail($mail['email_to'], $mail['subject'], $mail['message'], $headers); + +} + +?> \ No newline at end of file diff --git a/api/ucenter/uc_client/lib/uccode.class.php b/api/ucenter/uc_client/lib/uccode.class.php new file mode 100644 index 0000000..cd6e1a4 --- /dev/null +++ b/api/ucenter/uc_client/lib/uccode.class.php @@ -0,0 +1,141 @@ +uccode = array( + 'pcodecount' => -1, + 'codecount' => 0, + 'codehtml' => '' + ); + } + + function codedisp($code) { + $this->uccode['pcodecount']++; + $code = str_replace('\\"', '"', preg_replace("/^[\n\r]*(.+?)[\n\r]*$/is", "\\1", $code)); + $this->uccode['codehtml'][$this->uccode['pcodecount']] = $this->tpl_codedisp($code); + $this->uccode['codecount']++; + return "[\tUCENTER_CODE_".$this->uccode[pcodecount]."\t]"; + } + + function complie($message) { + $message = htmlspecialchars($message); + if(strpos($message, '[/code]') !== FALSE) { + $message = preg_replace("/\s*\[code\](.+?)\[\/code\]\s*/ies", "\$this->codedisp('\\1')", $message); + } + if(strpos($message, '[/url]') !== FALSE) { + $message = preg_replace("/\[url(=((https?|ftp|gopher|news|telnet|rtsp|mms|callto|bctp|ed2k|thunder|synacast){1}:\/\/|www\.)([^\[\"']+?))?\](.+?)\[\/url\]/ies", "\$this->parseurl('\\1', '\\5')", $message); + } + if(strpos($message, '[/email]') !== FALSE) { + $message = preg_replace("/\[email(=([a-z0-9\-_.+]+)@([a-z0-9\-_]+[.][a-z0-9\-_.]+))?\](.+?)\[\/email\]/ies", "\$this->parseemail('\\1', '\\4')", $message); + } + $message = str_replace(array( + '[/color]', '[/size]', '[/font]', '[/align]', '[b]', '[/b]', + '[i]', '[/i]', '[u]', '[/u]', '[list]', '[list=1]', '[list=a]', + '[list=A]', '[*]', '[/list]', '[indent]', '[/indent]', '[/float]' + ), array( + '', '', '', '

', '', '', '', + '', '', '', ''},initialize:function(t){this.PointClass=i.Point.extend({strokeWidth:this.options.pointDotStrokeWidth,radius:this.options.pointDotRadius,display:this.options.pointDot,hitDetectionRadius:this.options.pointHitDetectionRadius,ctx:this.chart.ctx}),this.datasets=[],this.buildScale(t),this.options.showTooltips&&e.bindEvents(this,this.options.tooltipEvents,function(t){var i="mouseout"!==t.type?this.getPointsAtEvent(t):[];this.eachPoints(function(t){t.restore(["fillColor","strokeColor"])}),e.each(i,function(t){t.fillColor=t.highlightFill,t.strokeColor=t.highlightStroke}),this.showTooltip(i)}),e.each(t.datasets,function(i){var s={label:i.label||null,fillColor:i.fillColor,strokeColor:i.strokeColor,pointColor:i.pointColor,pointStrokeColor:i.pointStrokeColor,points:[]};this.datasets.push(s),e.each(i.data,function(n,o){if(e.isNumber(n)){var a;this.scale.animation||(a=this.scale.getPointPosition(o,this.scale.calculateCenterOffset(n))),s.points.push(new this.PointClass({value:n,label:t.labels[o],datasetLabel:i.label,x:this.options.animation?this.scale.xCenter:a.x,y:this.options.animation?this.scale.yCenter:a.y,strokeColor:i.pointStrokeColor,fillColor:i.pointColor,highlightFill:i.pointHighlightFill||i.pointColor,highlightStroke:i.pointHighlightStroke||i.pointStrokeColor}))}},this)},this),this.render()},eachPoints:function(t){e.each(this.datasets,function(i){e.each(i.points,t,this)},this)},getPointsAtEvent:function(t){var i=e.getRelativePosition(t),s=e.getAngleFromPoint({x:this.scale.xCenter,y:this.scale.yCenter},i),n=2*Math.PI/this.scale.valuesCount,o=Math.round((s.angle-1.5*Math.PI)/n),a=[];return(o>=this.scale.valuesCount||0>o)&&(o=0),s.distance<=this.scale.drawingArea&&e.each(this.datasets,function(t){a.push(t.points[o])}),a},buildScale:function(t){this.scale=new i.RadialScale({display:this.options.showScale,fontStyle:this.options.scaleFontStyle,fontSize:this.options.scaleFontSize,fontFamily:this.options.scaleFontFamily,fontColor:this.options.scaleFontColor,showLabels:this.options.scaleShowLabels,showLabelBackdrop:this.options.scaleShowLabelBackdrop,backdropColor:this.options.scaleBackdropColor,backdropPaddingY:this.options.scaleBackdropPaddingY,backdropPaddingX:this.options.scaleBackdropPaddingX,lineWidth:this.options.scaleShowLine?this.options.scaleLineWidth:0,lineColor:this.options.scaleLineColor,angleLineColor:this.options.angleLineColor,angleLineWidth:this.options.angleShowLineOut?this.options.angleLineWidth:0,pointLabelFontColor:this.options.pointLabelFontColor,pointLabelFontSize:this.options.pointLabelFontSize,pointLabelFontFamily:this.options.pointLabelFontFamily,pointLabelFontStyle:this.options.pointLabelFontStyle,height:this.chart.height,width:this.chart.width,xCenter:this.chart.width/2,yCenter:this.chart.height/2,ctx:this.chart.ctx,templateString:this.options.scaleLabel,labels:t.labels,valuesCount:t.datasets[0].data.length}),this.scale.setScaleSize(),this.updateScaleRange(t.datasets),this.scale.buildYLabels()},updateScaleRange:function(t){var i=function(){var i=[];return e.each(t,function(t){t.data?i=i.concat(t.data):e.each(t.points,function(t){i.push(t.value)})}),i}(),s=this.options.scaleOverride?{steps:this.options.scaleSteps,stepValue:this.options.scaleStepWidth,min:this.options.scaleStartValue,max:this.options.scaleStartValue+this.options.scaleSteps*this.options.scaleStepWidth}:e.calculateScaleRange(i,e.min([this.chart.width,this.chart.height])/2,this.options.scaleFontSize,this.options.scaleBeginAtZero,this.options.scaleIntegersOnly);e.extend(this.scale,s)},addData:function(t,i){this.scale.valuesCount++,e.each(t,function(t,s){if(e.isNumber(t)){var n=this.scale.getPointPosition(this.scale.valuesCount,this.scale.calculateCenterOffset(t));this.datasets[s].points.push(new this.PointClass({value:t,label:i,x:n.x,y:n.y,strokeColor:this.datasets[s].pointStrokeColor,fillColor:this.datasets[s].pointColor}))}},this),this.scale.labels.push(i),this.reflow(),this.update()},removeData:function(){this.scale.valuesCount--,this.scale.labels.shift(),e.each(this.datasets,function(t){t.points.shift()},this),this.reflow(),this.update()},update:function(){this.eachPoints(function(t){t.save()}),this.reflow(),this.render()},reflow:function(){e.extend(this.scale,{width:this.chart.width,height:this.chart.height,size:e.min([this.chart.width,this.chart.height]),xCenter:this.chart.width/2,yCenter:this.chart.height/2}),this.updateScaleRange(this.datasets),this.scale.setScaleSize(),this.scale.buildYLabels()},draw:function(t){var i=t||1,s=this.chart.ctx;this.clear(),this.scale.draw(),e.each(this.datasets,function(t){e.each(t.points,function(t,e){t.transition(this.scale.getPointPosition(e,this.scale.calculateCenterOffset(t.value)),i)},this),s.lineWidth=this.options.datasetStrokeWidth,s.strokeStyle=t.strokeColor,s.beginPath(),e.each(t.points,function(t,i){0===i?s.moveTo(t.x,t.y):s.lineTo(t.x,t.y)},this),s.closePath(),s.stroke(),s.fillStyle=t.fillColor,s.fill(),e.each(t.points,function(t){t.draw()})},this)}})}.call(this); \ No newline at end of file diff --git a/statics/admin/weixin/js/lib/css.min.js b/statics/admin/weixin/js/lib/css.min.js new file mode 100644 index 0000000..a3084f4 --- /dev/null +++ b/statics/admin/weixin/js/lib/css.min.js @@ -0,0 +1 @@ +define(function(){if(typeof window=="undefined")return{load:function(n,r,load){load()}};var head=document.getElementsByTagName("head")[0];var engine=window.navigator.userAgent.match(/Trident\/([^ ;]*)|AppleWebKit\/([^ ;]*)|Opera\/([^ ;]*)|rv\:([^ ;]*)(.*?)Gecko\/([^ ;]*)|MSIE\s([^ ;]*)/)||0;var useImportLoad=false;var useOnload=true;if(engine[1]||engine[7])useImportLoad=parseInt(engine[1])<6||parseInt(engine[7])<=9;else if(engine[2])useOnload=false;else if(engine[4])useImportLoad=parseInt(engine[4])<18;var cssAPI={};cssAPI.pluginBuilder="./css-builder";var curStyle;var createStyle=function(){curStyle=document.createElement("style");head.appendChild(curStyle)};var importLoad=function(url,callback){createStyle();var curSheet=curStyle.styleSheet||curStyle.sheet;if(curSheet&&curSheet.addImport){curSheet.addImport(url);curStyle.onload=callback}else{curStyle.textContent='@import "'+url+'";';var loadInterval=setInterval(function(){try{curStyle.sheet.cssRules;clearInterval(loadInterval);callback()}catch(e){}},10)}};var linkLoad=function(url,callback){var link=document.createElement("link");link.type="text/css";link.rel="stylesheet";if(useOnload)link.onload=function(){link.onload=function(){};setTimeout(callback,7)};else var loadInterval=setInterval(function(){for(var i=0;ia?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="
",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h; +if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="
a",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/\s*$/g,rb={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:k.htmlSerialize?[0,"",""]:[1,"X
","
"]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?""!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("
')),_jTools=$("#"+idTools),_jArea=$("#"+idIframeArea),headHTML='';var h=settings.loadCSS;if(h)if(is(h,"array"))for(var c in h)headHTML+='';else headHTML+=h.match(/\s*]*?)?>[\s\S]+?<\/style>\s*/i)?h:'';var d=''+headHTML+"{#defaultReadTip} "+(settings.readTip?settings.readTip:"")+"";o&&(d+=""),d+='',_this.win=_win=$("#"+idIframe)[0].contentWindow,_jWin=$(_win);try{this.doc=_doc=_win.document,_jDoc=$(_doc),_doc.open(),_doc.write(getLang(d)),_doc.close(),isIE?_doc.body.contentEditable="true":_doc.designMode="On"}catch(u){}setTimeout(setOpts,300),_this.setSource(),_win.setInterval=null,_jTools.append(getLang(l.join(""))).bind("mousedown contextmenu",returnFalse).click(function(e){var t=$(e.target).closest("a");return t.is(".xheEnabled")&&(clearTimeout(timer),_jTools.find("a").attr("tabindex","-1"),ev=e,_this.exec(t.attr("cmd"))),!1}),_jTools.find(".xheButton").hover(function(e){var t=$(this),i=settings.hoverExecDelay,s=lastAngle;if(lastAngle=null,-1===i||bDisableHoverExec||!t.is(".xheEnabled"))return!1;if(s&&s>10)return bDisableHoverExec=!0,setTimeout(function(){bDisableHoverExec=!1},100),!1;var a=t.attr("cmd"),n=1===arrTools[a].h;return n?(bQuickHoverExec&&(i=0),i>=0&&(timer=setTimeout(function(){ev=e,lastPoint={x:ev.clientX,y:ev.clientY},_this.exec(a)},i)),undefined):(_this.hidePanel(),!1)},function(){lastPoint=null,timer&&clearTimeout(timer)}).mousemove(function(e){if(lastPoint){var t={x:e.clientX-lastPoint.x,y:e.clientY-lastPoint.y};if(Math.abs(t.x)>1||Math.abs(t.y)>1){if(t.x>0&&t.y>0){var i=Math.round(Math.atan(t.y/t.x)/.017453293);lastAngle=lastAngle?(lastAngle+i)/2:i}else lastAngle=null;lastPoint={x:e.clientX,y:e.clientY}}}}),_jPanel=$("#xhePanel"),_jShadow=$("#xheShadow"),_jCntLine=$("#xheCntLine"),0===_jPanel.length&&(_jPanel=$('
').mousedown(function(e){e.stopPropagation()}),_jShadow=$('
'),_jCntLine=$('
'),setTimeout(function(){$(document.body).append(_jPanel).append(_jShadow).append(_jCntLine)},10)),$("#"+idContainer).show(),_jText.hide(),_jArea.css("height",editorHeight-_jTools.outerHeight()),isIE&8>browerVer&&setTimeout(function(){_jArea.css("height",editorHeight-_jTools.outerHeight())},1),_jText.focus(_this.focus),_jForm.submit(saveResult).bind("reset",loadReset),settings.submitID&&$("#"+settings.submitID).mousedown(saveResult),$(window).bind("unload beforeunload",saveResult).bind("resize",fixFullHeight),$(document).mousedown(clickCancelPanel),bCheckEscInit||($(document).keydown(checkEsc),bCheckEscInit=!0),_jWin.focus(function(){settings.focus&&settings.focus()}).blur(function(){settings.blur&&settings.blur()}),isWebkit&&_jWin.click(fixAppleSel),_jDoc.mousedown(clickCancelPanel).keydown(checkShortcuts).keypress(forcePtag).dblclick(checkDblClick).bind("mousedown click",function(e){_jText.trigger(e.type)}),isIE&&(_jDoc.keydown(function(e){var t=_this.getRng();return 8===e.which&&t.item?($(t.item(0)).remove(),!1):undefined}),_jDoc.bind("controlselect",function(t){t=t.target,$.nodeName(t,"IMG")&&$(t).unbind("resizeend",e).bind("resizeend",e)})),_jDoc.keydown(function(e){var t=e.which;return e.altKey&&t>=49&&57>=t?(_jTools.find("a").attr("tabindex","0"),_jTools.find(".xheGStart").eq(t-49).next().find("a").focus(),_doc.title="\ufeff\ufeff",!1):undefined}).click(function(){_jTools.find("a").attr("tabindex","-1")}),_jTools.keydown(function(e){var t=e.which;if(27==t)_jTools.find("a").attr("tabindex","-1"),_this.focus();else if(e.altKey&&t>=49&&57>=t)return _jTools.find(".xheGStart").eq(t-49).next().find("a").focus(),!1});var p=$(_doc.documentElement);isOpera?p.bind("keydown",function(e){e.ctrlKey&&86===e.which&&cleanPaste()}):p.bind(isIE?"beforepaste":"paste",cleanPaste),settings.disableContextmenu&&p.bind("contextmenu",returnFalse),settings.html5Upload&&p.bind("dragenter dragover",function(e){var t;return(t=e.originalEvent.dataTransfer.types)&&-1!==$.inArray("Files",t)?!1:undefined}).bind("drop",function(e){function t(e){var t,i,s;for(a=0;e.length>a;a++){if(i=e[a].name.replace(/.+\./,""),!(t=o.match(RegExp("(\\w+):[^:]*,"+i+"(?:,|$)","i"))))return 1;if(s){if(s!==t[1])return 2}else s=t[1]}return s}var i,s=e.originalEvent.dataTransfer;if(s&&(i=s.files)&&i.length>0){var a,n,o,l=["Link","Img","Flash","Media"],r=[];for(a in l)n=l[a],settings["up"+n+"Url"]&&settings["up"+n+"Url"].match(/^[^!].*/i)&&r.push(n+":,"+settings["up"+n+"Ext"]);return 0===r.length?!1:(o=r.join(","),n=t(i),1===n?alert(getLang("upload.extLimit",o.replace(/\w+:,/g,""))):2===n?alert(getLang("upload.typeLimit")):n&&_this.startUpload(i,settings["up"+n+"Url"],"*",function(e){var t,i=[],s=settings.onUpload;s&&s(e);for(var a=0,o=e.length;o>a;a++)t=e[a],url=is(t,"string")?t:t.url,"!"===url.substr(0,1)&&(url=url.substr(1)),i.push(url);_this.exec(n),$("#xhe"+n+"Url").val(i.join(" ")),$("#xheSave").click()}),!1)}});var g=settings.shortcuts;g&&$.each(g,function(e,t){_this.addShortcuts(e,t)}),xCount++,bInit=!0,settings.fullscreen?_this.toggleFullscreen():settings.sourceMode&&setTimeout(_this.toggleSource,20);var f=settings.plugins;return f&&$.each(f,function(e,t){var i=t.i;i!==undefined&&i(_this)}),!0},this.remove=function(){_this.hidePanel(),saveResult(),_jText.unbind("focus",_this.focus),_jForm.unbind("submit",saveResult).unbind("reset",loadReset),settings.submitID&&$("#"+settings.submitID).unbind("mousedown",saveResult),$(window).unbind("unload beforeunload",saveResult).unbind("resize",fixFullHeight),$(document).unbind("mousedown",clickCancelPanel),$("#"+idContainer).remove(),$("#"+idFixFFCursor).remove(),_jText.show(),bInit=!1},this.saveBookmark=function(){if(!bSource){_this.focus();var e=_this.getRng();e=e.cloneRange?e.cloneRange():e,bookmark={top:_jWin.scrollTop(),rng:e}}},this.loadBookmark=function(){if(!bSource&&bookmark){_this.focus();var e=bookmark.rng;if(isIE)e.select();else{var t=_this.getSel();t.removeAllRanges(),t.addRange(e)}_jWin.scrollTop(bookmark.top),bookmark=null}},this.focus=function(){if(bSource?$("#sourceCode",_doc).focus():_win.focus(),isIE){var e=_this.getRng();e.parentElement&&e.parentElement().ownerDocument!==_doc&&_this.setTextCursor()}return!1},this.setTextCursor=function(e){var t=_this.getRng(!0),i=_doc.body;if(isIE)t.moveToElementText(i);else{for(var s=e?"lastChild":"firstChild";3!=i.nodeType&&i[s];)i=i[s];t.selectNode(i)}if(t.collapse(e?!1:!0),isIE)t.select();else{var a=_this.getSel();a.removeAllRanges(),a.addRange(t)}},this.getSel=function(){return _doc.selection?_doc.selection:_win.getSelection()},this.getRng=function(e){var t,i;try{e||(t=_this.getSel(),i=t.createRange?t.createRange():t.rangeCount>0?t.getRangeAt(0):null),i||(i=_doc.body.createTextRange?_doc.body.createTextRange():_doc.createRange())}catch(s){}return i},this.getParent=function(e){var t,i=_this.getRng();return isIE?t=i.item?i.item(0):i.parentElement():(t=i.commonAncestorContainer,i.collapsed||i.startContainer===i.endContainer&&2>i.startOffset-i.endOffset&&i.startContainer.hasChildNodes()&&(t=i.startContainer.childNodes[i.startOffset])),e=e?e:"*",t=$(t),t.is(e)||(t=$(t).closest(e)),t},this.getSelect=function(e){var t=_this.getSel(),i=_this.getRng(),s=!0;if(s=!i||i.item?!1:!t||0===i.boundingWidth||i.collapsed,"text"===e)return s?"":i.text||(t.toString?""+t:"");var a;if(i.cloneContents){var n,o=$("
");n=i.cloneContents(),n&&o.append(n),a=o.html()}else a=is(i.item)?i.item(0).outerHTML:is(i.htmlText)?i.htmlText:""+i;return s&&(a=""),a=_this.processHTML(a,"read"),a=_this.cleanHTML(a),a=_this.formatXHTML(a)},this.pasteHTML=function(e,t){if(bSource)return!1;_this.focus(),e=_this.processHTML(e,"write");var i=_this.getSel(),s=_this.getRng();if(t!==undefined){if(s.item){var a=s.item(0);s=_this.getRng(!0),s.moveToElementText(a),s.select()}s.collapse(t)}if(e+="<"+(isIE?"img":"span")+' id="_xhe_temp" width="0" height="0" />',s.insertNode){if($(s.startContainer).closest("style,script").length>0)return!1;s.deleteContents(),s.insertNode(s.createContextualFragment(e))}else"control"===i.type.toLowerCase()&&(i.clear(),s=_this.getRng()),s.pasteHTML(e);var n=$("#_xhe_temp",_doc),o=n[0];isIE?(s.moveToElementText(o),s.select()):(s.selectNode(o),i.removeAllRanges(),i.addRange(s)),n.remove()},this.pasteText=function(e,t){e||(e=""),e=_this.domEncode(e),e=e.replace(/\r?\n/g,"
"),_this.pasteHTML(e,t)},this.appendHTML=function(e){return bSource?!1:(_this.focus(),e=_this.processHTML(e,"write"),$(_doc.body).append(e),_this.setTextCursor(!0),undefined)},this.domEncode=function(e){return e.replace(regEntities,function(e){return arrEntities[e]})},this.setSource=function(e){bookmark=null,"string"!=typeof e&&""!==e&&(e=_text.value),bSource?$("#sourceCode",_doc).val(e):(settings.beforeSetSource&&(e=settings.beforeSetSource(e)),e=_this.cleanHTML(e),e=_this.formatXHTML(e),e=_this.processHTML(e,"write"),isIE?(_doc.body.innerHTML=''+e,$("#_xhe_temp",_doc).remove()):_doc.body.innerHTML=e)},this.processHTML=function(e,t){function i(e,t,i,s,a,o){var l,r,h,c,d="";if(l=s.match(/font-family\s*:\s*([^;"]+)/i),l&&(d+=' face="'+l[1]+'"'),r=s.match(/font-size\s*:\s*([^;"]+)/i)){r=r[1].toLowerCase();for(var u=0;n.length>u;u++)if(r===n[u].n||r===n[u].s){h=u+1;break}h&&(d+=' size="'+h+'"',s=s.replace(/(^|;)(\s*font-size\s*:\s*[^;"]+;?)+/gi,"$1"))}if(c=s.match(/(?:^|[\s;])color\s*:\s*([^;"]+)/i)){var p;if(p=c[1].match(/\s*rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/i)){c[1]="#";for(var g=1;3>=g;g++)c[1]+=("0"+(p[g]-0).toString(16)).slice(-2)}c[1]=c[1].replace(/^#([0-9a-f])([0-9a-f])([0-9a-f])$/i,"#$1$1$2$2$3$3"),d+=' color="'+c[1]+'"'}return s=s.replace(/(^|;)(\s*(font-family|color)\s*:\s*[^;"]+;?)+/gi,"$1"),""!==d?(s&&(d+=' style="'+s+'"'),""+o+"
"):e}function s(e,t,i,s,a){for(var n,l,r=(i?i:"")+(s?s:""),h=[],c=[],d=0;o.length>d;d++)n=o[d].r,l=o[d].t,r=r.replace(n,function(){return h.push("<"+l+">"),c.push(""),""});return r=r.replace(/\s+style\s*=\s*"\s*"/i,""),(r?"":"")+h.join("")+a+c.join("")+(r?"":"")}var a=' class="Apple-style-span"',n=settings.listFontsize;if("write"===t)e=e.replace(/(<(\/?)(\w+))((?:\s+[\w\-:]+\s*=\s*(?:"[^"]*"|'[^']*'|[^>\s]+))*)\s*((\/?)>)/g,function(e,t,i,s,n,o,l){s=s.toLowerCase(),isMozilla?"strong"===s?s="b":"em"===s&&(s="i"):isWebkit&&("strong"===s?(s="span",i||(n+=a+' style="font-weight: bold;"')):"em"===s?(s="span",i||(n+=a+' style="font-style: italic;"')):"u"===s?(s="span",i||(n+=a+' style="text-decoration: underline;"')):"strike"===s&&(s="span",i||(n+=a+' style="text-decoration: line-through;"')));var r,h="";if("del"===s)s="strike";else if("img"===s)n=n.replace(/\s+emot\s*=\s*("[^"]*"|'[^']*'|[^>\s]+)/i,function(e,t){return r=t.match(/^(["']?)(.*)\1/)[2],r=r.split(","),r[1]||(r[1]=r[0],r[0]=""),"default"===r[0]&&(r[0]=""),settings.emotMark?e:""});else if("a"===s)!n.match(/ href=[^ ]/i)&&n.match(/ name=[^ ]/i)&&(h+=" xhe-anchor"),l&&(o=">");else if("table"===s&&!i){var c=n.match(/\s+border\s*=\s*("[^"]*"|'[^']*'|[^>\s]+)/i);(!c||c[1].match(/^(["']?)\s*0\s*\1$/))&&(h+=" xhe-border")}var d;if(n=n.replace(/\s+([\w\-:]+)\s*=\s*("[^"]*"|'[^']*'|[^>\s]+)/g,function(e,t,i){return t=t.toLowerCase(),i=i.match(/^(["']?)(.*)\1/)[2],aft="",isIE&&t.match(/^(disabled|checked|readonly|selected)$/)&&i.match(/^(false|0)$/i)?"":"img"===s&&r&&"src"===t?"":(t.match(/^(src|href)$/)&&(aft=" _xhe_"+t+'="'+i+'"',urlBase&&(i=getLocalUrl(i,"abs",urlBase))),h&&"class"===t&&(i+=" "+h,h=""),isWebkit&&"style"===t&&"span"===s&&i.match(/(^|;)\s*(font-family|font-size|color|background-color)\s*:\s*[^;]+\s*(;|$)/i)&&(d=!0)," "+t+'="'+i+'"'+aft)}),r){var u=emotPath+(r[0]?r[0]:"default")+"/"+r[1]+".gif";n+=' src="'+u+'" _xhe_src="'+u+'"'}return d&&(n+=a),h&&(n+=' class="'+h+'"'),"<"+i+s+n+o}),isIE&&(e=e.replace(/'/gi,"'")),isWebkit||(e=e.replace(/<(span)(\s+[^>]*?)?\s+style\s*=\s*"((?:[^"]*?;)?\s*(?:font-family|font-size|color)\s*:[^"]*)"( [^>]*)?>(((?!<\1(\s+[^>]*?)?>)[\s\S]|<\1(\s+[^>]*?)?>((?!<\1(\s+[^>]*?)?>)[\s\S]|<\1(\s+[^>]*?)?>((?!<\1(\s+[^>]*?)?>)[\s\S])*?<\/\1>)*?<\/\1>)*?)<\/\1>/gi,i),e=e.replace(/<(span)(\s+[^>]*?)?\s+style\s*=\s*"((?:[^"]*?;)?\s*(?:font-family|font-size|color)\s*:[^"]*)"( [^>]*)?>(((?!<\1(\s+[^>]*?)?>)[\s\S]|<\1(\s+[^>]*?)?>((?!<\1(\s+[^>]*?)?>)[\s\S])*?<\/\1>)*?)<\/\1>/gi,i),e=e.replace(/<(span)(\s+[^>]*?)?\s+style\s*=\s*"((?:[^"]*?;)?\s*(?:font-family|font-size|color)\s*:[^"]*)"( [^>]*)?>(((?!<\1(\s+[^>]*?)?>)[\s\S])*?)<\/\1>/gi,i)),e=e.replace(/<(td|th)(\s+[^>]*?)?>(\s| )*<\/\1>/gi,"<$1$2>"+(isIE?"":"
")+"");else{if(isWebkit)for(var o=[{r:/font-weight\s*:\s*bold;?/gi,t:"strong"},{r:/font-style\s*:\s*italic;?/gi,t:"em"},{r:/text-decoration\s*:\s*underline;?/gi,t:"u"},{r:/text-decoration\s*:\s*line-through;?/gi,t:"strike"}],l=0;2>l;l++)e=e.replace(/<(span)(\s+[^>]*?)?\s+class\s*=\s*"Apple-style-span"(\s+[^>]*?)?>(((?!<\1(\s+[^>]*?)?>)[\s\S]|<\1(\s+[^>]*?)?>((?!<\1(\s+[^>]*?)?>)[\s\S]|<\1(\s+[^>]*?)?>((?!<\1(\s+[^>]*?)?>)[\s\S])*?<\/\1>)*?<\/\1>)*?)<\/\1>/gi,s),e=e.replace(/<(span)(\s+[^>]*?)?\s+class\s*=\s*"Apple-style-span"(\s+[^>]*?)?>(((?!<\1(\s+[^>]*?)?>)[\s\S]|<\1(\s+[^>]*?)?>((?!<\1(\s+[^>]*?)?>)[\s\S])*?<\/\1>)*?)<\/\1>/gi,s),e=e.replace(/<(span)(\s+[^>]*?)?\s+class\s*=\s*"Apple-style-span"(\s+[^>]*?)?>(((?!<\1(\s+[^>]*?)?>)[\s\S])*?)<\/\1>/gi,s);e=e.replace(/(<(\w+))((?:\s+[\w\-:]+\s*=\s*(?:"[^"]*"|'[^']*'|[^>\s]+))*)\s*(\/?>)/g,function(e,t,i,s,a){i=i.toLowerCase(); +var o;return s=s.replace(/\s+_xhe_(?:src|href)\s*=\s*("[^"]*"|'[^']*'|[^>\s]+)/i,function(e,t){return o=t.match(/^(["']?)(.*)\1/)[2],""}),o&&urlType&&(o=getLocalUrl(o,urlType,urlBase)),s=s.replace(/\s+([\w\-:]+)\s*=\s*("[^"]*"|'[^']*'|[^>\s]+)/g,function(e,t,i){if(t=t.toLowerCase(),i=i.match(/^(["']?)(.*)\1/)[2].replace(/"/g,"'"),"class"===t){if(i.match(/^["']?(apple|webkit)/i))return"";if(i=i.replace(/\s?xhe-[a-z]+/gi,""),""===i)return""}else{if(t.match(/^((_xhe_|_moz_|_webkit_)|jquery\d+)/i))return"";if(o&&t.match(/^(src|href)$/i))return" "+t+'="'+o+'"';"style"===t&&(i=i.replace(/(^|;)\s*(font-size)\s*:\s*([a-z-]+)\s*(;|$)/i,function(e,t,i,s,a){for(var o,l,r=0;n.length>r;r++)if(o=n[r],s===o.n){l=o.s;break}return t+i+":"+l+a}))}return" "+t+'="'+i+'"'}),"img"!==i||s.match(/\s+alt\s*=\s*("[^"]*"|'[^']*'|[^>\s]+)/i)||(s+=' alt=""'),t+s+a}),e=e.replace(/(<(td|th)(?:\s+[^>]*?)?>)\s*([\s\S]*?)()?\s*<\/\2>/gi,function(e,t,i,s){return t+(s?s:" ")+""}),e=e.replace(/^\s*(?:<(p|div)(?:\s+[^>]*?)?>)?\s*(]*?)?>\s*<\/span>|]*?)?>| )*\s*(?:<\/\1>)?\s*$/i,"")}return e=e.replace(/(]*?)?>)([\s\S]+?)(<\/pre>)/gi,function(e,t,i,s){return t+i.replace(//gi,"\r\n")+s})},this.getSource=function(e){var t,i=settings.beforeGetSource;return bSource?(t=$("#sourceCode",_doc).val(),i||(t=_this.formatXHTML(t,!1))):(t=_this.processHTML(_doc.body.innerHTML,"read"),t=_this.cleanHTML(t),t=_this.formatXHTML(t,e),i&&(t=i(t))),_text.value=t,t},this.cleanWord=function(e){function t(e,t,i){return i}var i=settings.cleanPaste;if(i>0&&3>i&&/mso(-|normal)|WordDocument|]*?x:str|\s+class\s*=\s*"?xl[67]\d"/i.test(e)){e=e.replace(/||]*?)?>[\s\S]*?<\/style>/gi,""),e=e.replace(/\r?\n/gi,""),isIE?(e=e.replace(/]*)?>[\s\S]*<\/v:shapetype>/gi,""),e=e.replace(/]+)?>[\s\S]*?]+)?>\s*<\/v:imagedata>[\s\S]*?<\/v:shape>/gi,function(e,t,i){var s;if(s=i.match(/\s+src\s*=\s*("[^"]+"|'[^']+'|[^>\s]+)/i)){s=s[1].match(/^(["']?)(.*)\1/)[2];var a='\s]+)/i),s&&(s=s[1].match(/^(["']?)(.*)\1/)[2],a+=' style="'+s+'"'),a+=" />"}return""})):e=e.replace(/]*(v:shapes|msohtmlclip)[^<>]*)\/?>/gi,function(e,t){var i,s='"}),e=e.replace(/(<(\/?)([\w\-:]+))((?:\s+[\w\-:]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^>\s]+))?)*)\s*(\/?>)/g,function(e,t,s,a,n,o){return a=a.toLowerCase(),a.match(/^(link)$/)&&n.match(/file:\/\//i)||a.match(/:/)||"span"===a&&2===i?"":(s||(n=n.replace(/\s([\w\-:]+)(?:\s*=\s*("[^"]*"|'[^']*'|[^>\s]+))?/gi,function(e,t,s){if(t=t.toLowerCase(),/:/.test(t))return"";if(s=s.match(/^(["']?)(.*)\1/)[2],1===i)switch(a){case"p":if("style"===t)return s=s.replace(/"|"/gi,"'").replace(/\s*([^:]+)\s*:\s*(.*?)(;|$)/gi,function(e,t,i){return/^(text-align)$/i.test(t)?t+":"+i+";":""}).replace(/^\s+|\s+$/g,""),s?" "+t+'="'+s+'"':"";break;case"span":if("style"===t)return s=s.replace(/"|"/gi,"'").replace(/\s*([^:]+)\s*:\s*(.*?)(;|$)/gi,function(e,t,i){return/^(color|background|font-size|font-family)$/i.test(t)?t+":"+i+";":""}).replace(/^\s+|\s+$/g,""),s?" "+t+'="'+s+'"':"";break;case"table":if(t.match(/^(cellspacing|cellpadding|border|width)$/i))return e;break;case"td":if(t.match(/^(rowspan|colspan)$/i))return e;if("style"===t)return s=s.replace(/"|"/gi,"'").replace(/\s*([^:]+)\s*:\s*(.*?)(;|$)/gi,function(e,t,i){return/^(width|height)$/i.test(t)?t+":"+i+";":""}).replace(/^\s+|\s+$/g,""),s?" "+t+'="'+s+'"':"";break;case"a":if(t.match(/^(href)$/i))return e;break;case"font":case"img":return e}else if(2===i)switch(a){case"td":if(t.match(/^(rowspan|colspan)$/i))return e;break;case"img":return e}return""})),t+n+o)});for(var s=0;3>s;s++)e=e.replace(/<([^\s>]+)(\s+[^>]*)?>\s*<\/\1>/g,"");for(var s=0;3>s;s++)e=e.replace(/<(span|a)>(((?!<\1(\s+[^>]*?)?>)[\s\S]|<\1(\s+[^>]*?)?>((?!<\1(\s+[^>]*?)?>)[\s\S]|<\1(\s+[^>]*?)?>((?!<\1(\s+[^>]*?)?>)[\s\S])*?<\/\1>)*?<\/\1>)*?)<\/\1>/gi,t);for(var s=0;3>s;s++)e=e.replace(/<(span|a)>(((?!<\1(\s+[^>]*?)?>)[\s\S]|<\1(\s+[^>]*?)?>((?!<\1(\s+[^>]*?)?>)[\s\S])*?<\/\1>)*?)<\/\1>/gi,t);for(var s=0;3>s;s++)e=e.replace(/<(span|a)>(((?!<\1(\s+[^>]*?)?>)[\s\S])*?)<\/\1>/gi,t);for(var s=0;3>s;s++)e=e.replace(/]+)>]+)>/gi,function(e,t,i){return""});e=e.replace(/(<(\/?)(tr|td)(?:\s+[^>]+)?>)[^<>]+/gi,function(e,t,i,s){return!i&&/^td$/i.test(s)?e:t})}return e},this.cleanHTML=function(e){e=e.replace(/]*?)?>/gi,"");var t;return e=e.replace(/]*?)?>([\s\S]*?)<\/head>/i,function(e,i){return t=i.match(/<(script|style)(\s+[^>]*?)?>[\s\S]*?<\/\1>/gi),""}),t&&(e=t.join("")+e),e=e.replace(/<\??xml(:\w+)?(\s+[^>]*?)?>([\s\S]*?<\/xml>)?/gi,""),settings.internalScript||(e=e.replace(/]*?)?>[\s\S]*?<\/script>/gi,"")),settings.internalStyle||(e=e.replace(/]*?)?>[\s\S]*?<\/style>/gi,"")),settings.linkTag&&settings.inlineScript&&settings.inlineStyle||(e=e.replace(/(<(\w+))((?:\s+[\w-]+\s*=\s*(?:"[^"]*"|'[^']*'|[^>\s]+))*)\s*(\/?>)/gi,function(e,t,i,s,a){return settings.linkTag||"link"!==i.toLowerCase()?(settings.inlineScript||(s=s.replace(/\s+on(?:click|dblclick|mouse(down|up|move|over|out|enter|leave|wheel)|key(down|press|up)|change|select|submit|reset|blur|focus|load|unload)\s*=\s*("[^"]*"|'[^']*'|[^>\s]+)/gi,"")),settings.inlineStyle||(s=s.replace(/\s+(style|class)\s*=\s*("[^"]*"|'[^']*'|[^>\s]+)/gi,"")),t+s+a):""})),e=e.replace(/<\/(strong|b|u|strike|em|i)>((?:\s|| )*?)<\1(\s+[^>]*?)?>/gi,"$2")},this.formatXHTML=function(e,t){function i(e){for(var t={},i=e.split(","),s=0;i.length>s;s++)t[i[s]]=!0;return t}function s(e){e=e.toLowerCase();var t=b[e];return t?t:e}function a(e,t,i){if(p[e])for(;y.last()&&g[y.last()];)n(y.last());f[e]&&y.last()===e&&n(e),i=u[e]||!!i,i||y.push(e);var s=[];s.push("<"+e),t.replace(_,function(e,t){t=t.toLowerCase();var i=arguments[2]?arguments[2]:arguments[3]?arguments[3]:arguments[4]?arguments[4]:m[t]?t:"";s.push(" "+t+'="'+i.replace(/"/g,"'")+'"')}),s.push((i?" /":"")+">"),h(s.join(""),e,!0),"pre"===e&&(P=!0)}function n(e){if(e)for(var t=y.length-1;t>=0&&y[t]!==e;t--);else var t=0;if(t>=0){for(var i=y.length-1;i>=t;i--)h("",y[i]);y.length=t}"pre"===e&&(P=!1,M--)}function o(e){h(_this.domEncode(e))}function l(e){w.push(e.replace(/^[\s\r\n]+|[\s\r\n]+$/g,""))}function r(e){w.push(e)}function h(e,i,s){if(P||(e=e.replace(/(\t*\r?\n\t*)+/g,"")),P||t!==!0)w.push(e);else{if(e.match(/^\s*$/))return w.push(e),undefined;var a=p[i],n=a?i:"";a?(s&&M++,""===E&&M--):E&&M++,(n!==E||a)&&c(),w.push(e),"br"===i&&c(),!a||!u[i]&&s||M--,E=a?i:"",L=s}}function c(){if(w.push("\r\n"),M>0)for(var e=M;e--;)w.push(" ")}function d(e,t,i,s){if(!i)return s;var a="";return i=i.replace(/ face\s*=\s*"\s*([^"]*)\s*"/i,function(e,t){return t&&(a+="font-family:"+t+";"),""}),i=i.replace(/ size\s*=\s*"\s*(\d+)\s*"/i,function(e,t){return a+="font-size:"+I[(t>7?7:1>t?1:t)-1].s+";",""}),i=i.replace(/ color\s*=\s*"\s*([^"]*)\s*"/i,function(e,t){return t&&(a+="color:"+t+";"),""}),i=i.replace(/ style\s*=\s*"\s*([^"]*)\s*"/i,function(e,t){return t&&(a+=t),""}),i+=' style="'+a+'"',i?""+s+"":s}var u=i("area,base,basefont,br,col,frame,hr,img,input,isindex,link,meta,param,embed"),p=i("address,applet,blockquote,button,center,dd,dir,div,dl,dt,fieldset,form,frameset,h1,h2,h3,h4,h5,h6,hr,iframe,ins,isindex,li,map,menu,noframes,noscript,object,ol,p,pre,table,tbody,td,tfoot,th,thead,tr,ul,script"),g=i("a,abbr,acronym,applet,b,basefont,bdo,big,br,button,cite,code,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,textarea,tt,u,var"),f=i("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr"),m=i("checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected"),v=i("script,style"),b={b:"strong",i:"em",s:"del",strike:"del"},x=/<(?:\/([^\s>]+)|!([^>]*?)|([\w\-:]+)((?:"[^"]*"|'[^']*'|[^"'<>])*)\s*(\/?))>/g,_=/\s*([\w\-:]+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s]+)))?/g,w=[],y=[];y.last=function(){return this[this.length-1]};for(var k,C,T,S,$,F,L,j=0,M=-1,E="body",P=!1;k=x.exec(e);)C=k.index,C>j&&(F=e.substring(j,C),S?$.push(F):o(F)),j=x.lastIndex,!(T=k[1])||(T=s(T),S&&T===S&&(l($.join("")),S=null,$=null),S)?S?$.push(k[0]):(T=k[3])?(T=s(T),a(T,k[4],k[5]),v[T]&&(S=T,$=[])):k[2]&&r(k[0]):n(T);e.length>j&&o(e.substring(j,e.length)),n(),e=w.join(""),w=null;var I=settings.listFontsize;return e=e.replace(/<(font)(\s+[^>]*?)?>(((?!<\1(\s+[^>]*?)?>)[\s\S]|<\1(\s+[^>]*?)?>((?!<\1(\s+[^>]*?)?>)[\s\S]|<\1(\s+[^>]*?)?>((?!<\1(\s+[^>]*?)?>)[\s\S])*?<\/\1>)*?<\/\1>)*?)<\/\1>/gi,d),e=e.replace(/<(font)(\s+[^>]*?)?>(((?!<\1(\s+[^>]*?)?>)[\s\S]|<\1(\s+[^>]*?)?>((?!<\1(\s+[^>]*?)?>)[\s\S])*?<\/\1>)*?)<\/\1>/gi,d),e=e.replace(/<(font)(\s+[^>]*?)?>(((?!<\1(\s+[^>]*?)?>)[\s\S])*?)<\/\1>/gi,d),e=e.replace(/^(\s*\r?\n)+|(\s*\r?\n)+$/g,"")},this.toggleShowBlocktag=function(e){if(bShowBlocktag!==e){bShowBlocktag=!bShowBlocktag;var t=$(_doc.body);bShowBlocktag?(bodyClass+=" showBlocktag",t.addClass("showBlocktag")):(bodyClass=bodyClass.replace(" showBlocktag",""),t.removeClass("showBlocktag"))}},this.toggleSource=function(e){if(bSource!==e){_jTools.find("[cmd=Source]").toggleClass("xheEnabled").toggleClass("xheActive");var t,i,s=_doc.body,a=$(s),n='',o=0,l="";if(bSource?(t=_this.getSource(),a.html("").removeAttr("scroll").attr("class","editMode"+bodyClass),isIE?s.contentEditable="true":_doc.designMode="On",isMozilla&&(_this._exec("inserthtml","-"),$("#"+idFixFFCursor).show().focus().hide()),l="Source"):(_this.pasteHTML(n,!0),t=_this.getSource(!0),o=t.indexOf(n),isOpera||(o=t.substring(0,o).replace(/\r/g,"").length),t=t.replace(/(\r?\n\s*|)<\/span>(\s*\r?\n|)/,function(e,t,i){return t&&i?"\r\n":t+i}),isIE?s.contentEditable="false":_doc.designMode="Off",a.attr("scroll","no").attr("class","sourceMode").html('", l.noCloneChecked = !!a.cloneNode(!0).lastChild.defaultValue, b.appendChild(a), c = d.createElement("input"), c.setAttribute("type", "radio"), c.setAttribute("checked", "checked"), c.setAttribute("name", "t"), a.appendChild(c), l.checkClone = a.cloneNode(!0).cloneNode(!0).lastChild.checked, l.noCloneEvent = !!a.addEventListener, a[n.expando] = 1, l.attributes = !a.getAttribute(n.expando) + }(); + var da = { + option: [1, ""], + legend: [1, "
", "
"], + area: [1, "", ""], + param: [1, "", ""], + thead: [1, "", "
"], + tr: [2, "", "
"], + col: [2, "", "
"], + td: [3, "", "
"], + _default: l.htmlSerialize ? [0, "", ""] : [1, "X
", "
"] + }; + da.optgroup = da.option, da.tbody = da.tfoot = da.colgroup = da.caption = da.thead, da.th = da.td; + + function ea(a, b) { + var c, d, e = 0, + f = "undefined" != typeof a.getElementsByTagName ? a.getElementsByTagName(b || "*") : "undefined" != typeof a.querySelectorAll ? a.querySelectorAll(b || "*") : void 0; + if (!f) + for (f = [], c = a.childNodes || a; null != (d = c[e]); e++) !b || n.nodeName(d, b) ? f.push(d) : n.merge(f, ea(d, b)); + return void 0 === b || b && n.nodeName(a, b) ? n.merge([a], f) : f + } + + function fa(a, b) { + for (var c, d = 0; null != (c = a[d]); d++) n._data(c, "globalEval", !b || n._data(b[d], "globalEval")) + } + var ga = /<|&#?\w+;/, + ha = / r; r++) + if (g = a[r], g || 0 === g) + if ("object" === n.type(g)) n.merge(q, g.nodeType ? [g] : g); + else if (ga.test(g)) { + i = i || p.appendChild(b.createElement("div")), j = ($.exec(g) || ["", ""])[1].toLowerCase(), m = da[j] || da._default, i.innerHTML = m[1] + n.htmlPrefilter(g) + m[2], f = m[0]; + while (f--) i = i.lastChild; + if (!l.leadingWhitespace && aa.test(g) && q.push(b.createTextNode(aa.exec(g)[0])), !l.tbody) { + g = "table" !== j || ha.test(g) ? "" !== m[1] || ha.test(g) ? 0 : i : i.firstChild, f = g && g.childNodes.length; + while (f--) n.nodeName(k = g.childNodes[f], "tbody") && !k.childNodes.length && g.removeChild(k) + } + n.merge(q, i.childNodes), i.textContent = ""; + while (i.firstChild) i.removeChild(i.firstChild); + i = p.lastChild + } else q.push(b.createTextNode(g)); + i && p.removeChild(i), l.appendChecked || n.grep(ea(q, "input"), ia), r = 0; + while (g = q[r++]) + if (d && n.inArray(g, d) > -1) e && e.push(g); + else if (h = n.contains(g.ownerDocument, g), i = ea(p.appendChild(g), "script"), h && fa(i), c) { + f = 0; + while (g = i[f++]) _.test(g.type || "") && c.push(g) + } + return i = null, p + }! function() { + var b, c, e = d.createElement("div"); + for (b in { + submit: !0, + change: !0, + focusin: !0 + }) c = "on" + b, (l[b] = c in a) || (e.setAttribute(c, "t"), l[b] = e.attributes[c].expando === !1); + e = null + }(); + var ka = /^(?:input|select|textarea)$/i, + la = /^key/, + ma = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + na = /^(?:focusinfocus|focusoutblur)$/, + oa = /^([^.]*)(?:\.(.+)|)/; + + function pa() { + return !0 + } + + function qa() { + return !1 + } + + function ra() { + try { + return d.activeElement + } catch (a) {} + } + + function sa(a, b, c, d, e, f) { + var g, h; + if ("object" == typeof b) { + "string" != typeof c && (d = d || c, c = void 0); + for (h in b) sa(a, h, c, d, b[h], f); + return a + } + if (null == d && null == e ? (e = c, d = c = void 0) : null == e && ("string" == typeof c ? (e = d, d = void 0) : (e = d, d = c, c = void 0)), e === !1) e = qa; + else if (!e) return a; + return 1 === f && (g = e, e = function(a) { + return n().off(a), g.apply(this, arguments) + }, e.guid = g.guid || (g.guid = n.guid++)), a.each(function() { + n.event.add(this, b, e, d, c) + }) + } + n.event = { + global: {}, + add: function(a, b, c, d, e) { + var f, g, h, i, j, k, l, m, o, p, q, r = n._data(a); + if (r) { + c.handler && (i = c, c = i.handler, e = i.selector), c.guid || (c.guid = n.guid++), (g = r.events) || (g = r.events = {}), (k = r.handle) || (k = r.handle = function(a) { + return "undefined" == typeof n || a && n.event.triggered === a.type ? void 0 : n.event.dispatch.apply(k.elem, arguments) + }, k.elem = a), b = (b || "").match(G) || [""], h = b.length; + while (h--) f = oa.exec(b[h]) || [], o = q = f[1], p = (f[2] || "").split(".").sort(), o && (j = n.event.special[o] || {}, o = (e ? j.delegateType : j.bindType) || o, j = n.event.special[o] || {}, l = n.extend({ + type: o, + origType: q, + data: d, + handler: c, + guid: c.guid, + selector: e, + needsContext: e && n.expr.match.needsContext.test(e), + namespace: p.join(".") + }, i), (m = g[o]) || (m = g[o] = [], m.delegateCount = 0, j.setup && j.setup.call(a, d, p, k) !== !1 || (a.addEventListener ? a.addEventListener(o, k, !1) : a.attachEvent && a.attachEvent("on" + o, k))), j.add && (j.add.call(a, l), l.handler.guid || (l.handler.guid = c.guid)), e ? m.splice(m.delegateCount++, 0, l) : m.push(l), n.event.global[o] = !0); + a = null + } + }, + remove: function(a, b, c, d, e) { + var f, g, h, i, j, k, l, m, o, p, q, r = n.hasData(a) && n._data(a); + if (r && (k = r.events)) { + b = (b || "").match(G) || [""], j = b.length; + while (j--) + if (h = oa.exec(b[j]) || [], o = q = h[1], p = (h[2] || "").split(".").sort(), o) { + l = n.event.special[o] || {}, o = (d ? l.delegateType : l.bindType) || o, m = k[o] || [], h = h[2] && new RegExp("(^|\\.)" + p.join("\\.(?:.*\\.|)") + "(\\.|$)"), i = f = m.length; + while (f--) g = m[f], !e && q !== g.origType || c && c.guid !== g.guid || h && !h.test(g.namespace) || d && d !== g.selector && ("**" !== d || !g.selector) || (m.splice(f, 1), g.selector && m.delegateCount--, l.remove && l.remove.call(a, g)); + i && !m.length && (l.teardown && l.teardown.call(a, p, r.handle) !== !1 || n.removeEvent(a, o, r.handle), delete k[o]) + } else + for (o in k) n.event.remove(a, o + b[j], c, d, !0); + n.isEmptyObject(k) && (delete r.handle, n._removeData(a, "events")) + } + }, + trigger: function(b, c, e, f) { + var g, h, i, j, l, m, o, p = [e || d], + q = k.call(b, "type") ? b.type : b, + r = k.call(b, "namespace") ? b.namespace.split(".") : []; + if (i = m = e = e || d, 3 !== e.nodeType && 8 !== e.nodeType && !na.test(q + n.event.triggered) && (q.indexOf(".") > -1 && (r = q.split("."), q = r.shift(), r.sort()), h = q.indexOf(":") < 0 && "on" + q, b = b[n.expando] ? b : new n.Event(q, "object" == typeof b && b), b.isTrigger = f ? 2 : 3, b.namespace = r.join("."), b.rnamespace = b.namespace ? new RegExp("(^|\\.)" + r.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, b.result = void 0, b.target || (b.target = e), c = null == c ? [b] : n.makeArray(c, [b]), l = n.event.special[q] || {}, f || !l.trigger || l.trigger.apply(e, c) !== !1)) { + if (!f && !l.noBubble && !n.isWindow(e)) { + for (j = l.delegateType || q, na.test(j + q) || (i = i.parentNode); i; i = i.parentNode) p.push(i), m = i; + m === (e.ownerDocument || d) && p.push(m.defaultView || m.parentWindow || a) + } + o = 0; + while ((i = p[o++]) && !b.isPropagationStopped()) b.type = o > 1 ? j : l.bindType || q, g = (n._data(i, "events") || {})[b.type] && n._data(i, "handle"), g && g.apply(i, c), g = h && i[h], g && g.apply && M(i) && (b.result = g.apply(i, c), b.result === !1 && b.preventDefault()); + if (b.type = q, !f && !b.isDefaultPrevented() && (!l._default || l._default.apply(p.pop(), c) === !1) && M(e) && h && e[q] && !n.isWindow(e)) { + m = e[h], m && (e[h] = null), n.event.triggered = q; + try { + e[q]() + } catch (s) {} + n.event.triggered = void 0, m && (e[h] = m) + } + return b.result + } + }, + dispatch: function(a) { + a = n.event.fix(a); + var b, c, d, f, g, h = [], + i = e.call(arguments), + j = (n._data(this, "events") || {})[a.type] || [], + k = n.event.special[a.type] || {}; + if (i[0] = a, a.delegateTarget = this, !k.preDispatch || k.preDispatch.call(this, a) !== !1) { + h = n.event.handlers.call(this, a, j), b = 0; + while ((f = h[b++]) && !a.isPropagationStopped()) { + a.currentTarget = f.elem, c = 0; + while ((g = f.handlers[c++]) && !a.isImmediatePropagationStopped()) a.rnamespace && !a.rnamespace.test(g.namespace) || (a.handleObj = g, a.data = g.data, d = ((n.event.special[g.origType] || {}).handle || g.handler).apply(f.elem, i), void 0 !== d && (a.result = d) === !1 && (a.preventDefault(), a.stopPropagation())) + } + return k.postDispatch && k.postDispatch.call(this, a), a.result + } + }, + handlers: function(a, b) { + var c, d, e, f, g = [], + h = b.delegateCount, + i = a.target; + if (h && i.nodeType && ("click" !== a.type || isNaN(a.button) || a.button < 1)) + for (; i != this; i = i.parentNode || this) + if (1 === i.nodeType && (i.disabled !== !0 || "click" !== a.type)) { + for (d = [], c = 0; h > c; c++) f = b[c], e = f.selector + " ", void 0 === d[e] && (d[e] = f.needsContext ? n(e, this).index(i) > -1 : n.find(e, this, null, [i]).length), d[e] && d.push(f); + d.length && g.push({ + elem: i, + handlers: d + }) + } return h < b.length && g.push({ + elem: this, + handlers: b.slice(h) + }), g + }, + fix: function(a) { + if (a[n.expando]) return a; + var b, c, e, f = a.type, + g = a, + h = this.fixHooks[f]; + h || (this.fixHooks[f] = h = ma.test(f) ? this.mouseHooks : la.test(f) ? this.keyHooks : {}), e = h.props ? this.props.concat(h.props) : this.props, a = new n.Event(g), b = e.length; + while (b--) c = e[b], a[c] = g[c]; + return a.target || (a.target = g.srcElement || d), 3 === a.target.nodeType && (a.target = a.target.parentNode), a.metaKey = !!a.metaKey, h.filter ? h.filter(a, g) : a + }, + props: "altKey bubbles cancelable ctrlKey currentTarget detail eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + fixHooks: {}, + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function(a, b) { + return null == a.which && (a.which = null != b.charCode ? b.charCode : b.keyCode), a + } + }, + mouseHooks: { + props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function(a, b) { + var c, e, f, g = b.button, + h = b.fromElement; + return null == a.pageX && null != b.clientX && (e = a.target.ownerDocument || d, f = e.documentElement, c = e.body, a.pageX = b.clientX + (f && f.scrollLeft || c && c.scrollLeft || 0) - (f && f.clientLeft || c && c.clientLeft || 0), a.pageY = b.clientY + (f && f.scrollTop || c && c.scrollTop || 0) - (f && f.clientTop || c && c.clientTop || 0)), !a.relatedTarget && h && (a.relatedTarget = h === a.target ? b.toElement : h), a.which || void 0 === g || (a.which = 1 & g ? 1 : 2 & g ? 3 : 4 & g ? 2 : 0), a + } + }, + special: { + load: { + noBubble: !0 + }, + focus: { + trigger: function() { + if (this !== ra() && this.focus) try { + return this.focus(), !1 + } catch (a) {} + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + return this === ra() && this.blur ? (this.blur(), !1) : void 0 + }, + delegateType: "focusout" + }, + click: { + trigger: function() { + return n.nodeName(this, "input") && "checkbox" === this.type && this.click ? (this.click(), !1) : void 0 + }, + _default: function(a) { + return n.nodeName(a.target, "a") + } + }, + beforeunload: { + postDispatch: function(a) { + void 0 !== a.result && a.originalEvent && (a.originalEvent.returnValue = a.result) + } + } + }, + simulate: function(a, b, c) { + var d = n.extend(new n.Event, c, { + type: a, + isSimulated: !0 + }); + n.event.trigger(d, null, b), d.isDefaultPrevented() && c.preventDefault() + } + }, n.removeEvent = d.removeEventListener ? function(a, b, c) { + a.removeEventListener && a.removeEventListener(b, c) + } : function(a, b, c) { + var d = "on" + b; + a.detachEvent && ("undefined" == typeof a[d] && (a[d] = null), a.detachEvent(d, c)) + }, n.Event = function(a, b) { + return this instanceof n.Event ? (a && a.type ? (this.originalEvent = a, this.type = a.type, this.isDefaultPrevented = a.defaultPrevented || void 0 === a.defaultPrevented && a.returnValue === !1 ? pa : qa) : this.type = a, b && n.extend(this, b), this.timeStamp = a && a.timeStamp || n.now(), void(this[n.expando] = !0)) : new n.Event(a, b) + }, n.Event.prototype = { + constructor: n.Event, + isDefaultPrevented: qa, + isPropagationStopped: qa, + isImmediatePropagationStopped: qa, + preventDefault: function() { + var a = this.originalEvent; + this.isDefaultPrevented = pa, a && (a.preventDefault ? a.preventDefault() : a.returnValue = !1) + }, + stopPropagation: function() { + var a = this.originalEvent; + this.isPropagationStopped = pa, a && !this.isSimulated && (a.stopPropagation && a.stopPropagation(), a.cancelBubble = !0) + }, + stopImmediatePropagation: function() { + var a = this.originalEvent; + this.isImmediatePropagationStopped = pa, a && a.stopImmediatePropagation && a.stopImmediatePropagation(), this.stopPropagation() + } + }, n.each({ + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" + }, function(a, b) { + n.event.special[a] = { + delegateType: b, + bindType: b, + handle: function(a) { + var c, d = this, + e = a.relatedTarget, + f = a.handleObj; + return e && (e === d || n.contains(d, e)) || (a.type = f.origType, c = f.handler.apply(this, arguments), a.type = b), c + } + } + }), l.submit || (n.event.special.submit = { + setup: function() { + return n.nodeName(this, "form") ? !1 : void n.event.add(this, "click._submit keypress._submit", function(a) { + var b = a.target, + c = n.nodeName(b, "input") || n.nodeName(b, "button") ? n.prop(b, "form") : void 0; + c && !n._data(c, "submit") && (n.event.add(c, "submit._submit", function(a) { + a._submitBubble = !0 + }), n._data(c, "submit", !0)) + }) + }, + postDispatch: function(a) { + a._submitBubble && (delete a._submitBubble, this.parentNode && !a.isTrigger && n.event.simulate("submit", this.parentNode, a)) + }, + teardown: function() { + return n.nodeName(this, "form") ? !1 : void n.event.remove(this, "._submit") + } + }), l.change || (n.event.special.change = { + setup: function() { + return ka.test(this.nodeName) ? ("checkbox" !== this.type && "radio" !== this.type || (n.event.add(this, "propertychange._change", function(a) { + "checked" === a.originalEvent.propertyName && (this._justChanged = !0) + }), n.event.add(this, "click._change", function(a) { + this._justChanged && !a.isTrigger && (this._justChanged = !1), n.event.simulate("change", this, a) + })), !1) : void n.event.add(this, "beforeactivate._change", function(a) { + var b = a.target; + ka.test(b.nodeName) && !n._data(b, "change") && (n.event.add(b, "change._change", function(a) { + !this.parentNode || a.isSimulated || a.isTrigger || n.event.simulate("change", this.parentNode, a) + }), n._data(b, "change", !0)) + }) + }, + handle: function(a) { + var b = a.target; + return this !== b || a.isSimulated || a.isTrigger || "radio" !== b.type && "checkbox" !== b.type ? a.handleObj.handler.apply(this, arguments) : void 0 + }, + teardown: function() { + return n.event.remove(this, "._change"), !ka.test(this.nodeName) + } + }), l.focusin || n.each({ + focus: "focusin", + blur: "focusout" + }, function(a, b) { + var c = function(a) { + n.event.simulate(b, a.target, n.event.fix(a)) + }; + n.event.special[b] = { + setup: function() { + var d = this.ownerDocument || this, + e = n._data(d, b); + e || d.addEventListener(a, c, !0), n._data(d, b, (e || 0) + 1) + }, + teardown: function() { + var d = this.ownerDocument || this, + e = n._data(d, b) - 1; + e ? n._data(d, b, e) : (d.removeEventListener(a, c, !0), n._removeData(d, b)) + } + } + }), n.fn.extend({ + on: function(a, b, c, d) { + return sa(this, a, b, c, d) + }, + one: function(a, b, c, d) { + return sa(this, a, b, c, d, 1) + }, + off: function(a, b, c) { + var d, e; + if (a && a.preventDefault && a.handleObj) return d = a.handleObj, n(a.delegateTarget).off(d.namespace ? d.origType + "." + d.namespace : d.origType, d.selector, d.handler), this; + if ("object" == typeof a) { + for (e in a) this.off(e, b, a[e]); + return this + } + return b !== !1 && "function" != typeof b || (c = b, b = void 0), c === !1 && (c = qa), this.each(function() { + n.event.remove(this, a, c, b) + }) + }, + trigger: function(a, b) { + return this.each(function() { + n.event.trigger(a, b, this) + }) + }, + triggerHandler: function(a, b) { + var c = this[0]; + return c ? n.event.trigger(a, b, c, !0) : void 0 + } + }); + var ta = / jQuery\d+="(?:null|\d+)"/g, + ua = new RegExp("<(?:" + ba + ")[\\s/>]", "i"), + va = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi, + wa = /\s*$/g, + Aa = ca(d), + Ba = Aa.appendChild(d.createElement("div")); + + function Ca(a, b) { + return n.nodeName(a, "table") && n.nodeName(11 !== b.nodeType ? b : b.firstChild, "tr") ? a.getElementsByTagName("tbody")[0] || a.appendChild(a.ownerDocument.createElement("tbody")) : a + } + + function Da(a) { + return a.type = (null !== n.find.attr(a, "type")) + "/" + a.type, a + } + + function Ea(a) { + var b = ya.exec(a.type); + return b ? a.type = b[1] : a.removeAttribute("type"), a + } + + function Fa(a, b) { + if (1 === b.nodeType && n.hasData(a)) { + var c, d, e, f = n._data(a), + g = n._data(b, f), + h = f.events; + if (h) { + delete g.handle, g.events = {}; + for (c in h) + for (d = 0, e = h[c].length; e > d; d++) n.event.add(b, c, h[c][d]) + } + g.data && (g.data = n.extend({}, g.data)) + } + } + + function Ga(a, b) { + var c, d, e; + if (1 === b.nodeType) { + if (c = b.nodeName.toLowerCase(), !l.noCloneEvent && b[n.expando]) { + e = n._data(b); + for (d in e.events) n.removeEvent(b, d, e.handle); + b.removeAttribute(n.expando) + } + "script" === c && b.text !== a.text ? (Da(b).text = a.text, Ea(b)) : "object" === c ? (b.parentNode && (b.outerHTML = a.outerHTML), l.html5Clone && a.innerHTML && !n.trim(b.innerHTML) && (b.innerHTML = a.innerHTML)) : "input" === c && Z.test(a.type) ? (b.defaultChecked = b.checked = a.checked, b.value !== a.value && (b.value = a.value)) : "option" === c ? b.defaultSelected = b.selected = a.defaultSelected : "input" !== c && "textarea" !== c || (b.defaultValue = a.defaultValue) + } + } + + function Ha(a, b, c, d) { + b = f.apply([], b); + var e, g, h, i, j, k, m = 0, + o = a.length, + p = o - 1, + q = b[0], + r = n.isFunction(q); + if (r || o > 1 && "string" == typeof q && !l.checkClone && xa.test(q)) return a.each(function(e) { + var f = a.eq(e); + r && (b[0] = q.call(this, e, f.html())), Ha(f, b, c, d) + }); + if (o && (k = ja(b, a[0].ownerDocument, !1, a, d), e = k.firstChild, 1 === k.childNodes.length && (k = e), e || d)) { + for (i = n.map(ea(k, "script"), Da), h = i.length; o > m; m++) g = k, m !== p && (g = n.clone(g, !0, !0), h && n.merge(i, ea(g, "script"))), c.call(a[m], g, m); + if (h) + for (j = i[i.length - 1].ownerDocument, n.map(i, Ea), m = 0; h > m; m++) g = i[m], _.test(g.type || "") && !n._data(g, "globalEval") && n.contains(j, g) && (g.src ? n._evalUrl && n._evalUrl(g.src) : n.globalEval((g.text || g.textContent || g.innerHTML || "").replace(za, ""))); + k = e = null + } + return a + } + + function Ia(a, b, c) { + for (var d, e = b ? n.filter(b, a) : a, f = 0; null != (d = e[f]); f++) c || 1 !== d.nodeType || n.cleanData(ea(d)), d.parentNode && (c && n.contains(d.ownerDocument, d) && fa(ea(d, "script")), d.parentNode.removeChild(d)); + return a + } + n.extend({ + htmlPrefilter: function(a) { + return a.replace(va, "<$1>") + }, + clone: function(a, b, c) { + var d, e, f, g, h, i = n.contains(a.ownerDocument, a); + if (l.html5Clone || n.isXMLDoc(a) || !ua.test("<" + a.nodeName + ">") ? f = a.cloneNode(!0) : (Ba.innerHTML = a.outerHTML, Ba.removeChild(f = Ba.firstChild)), !(l.noCloneEvent && l.noCloneChecked || 1 !== a.nodeType && 11 !== a.nodeType || n.isXMLDoc(a))) + for (d = ea(f), h = ea(a), g = 0; null != (e = h[g]); ++g) d[g] && Ga(e, d[g]); + if (b) + if (c) + for (h = h || ea(a), d = d || ea(f), g = 0; null != (e = h[g]); g++) Fa(e, d[g]); + else Fa(a, f); + return d = ea(f, "script"), d.length > 0 && fa(d, !i && ea(a, "script")), d = h = e = null, f + }, + cleanData: function(a, b) { + for (var d, e, f, g, h = 0, i = n.expando, j = n.cache, k = l.attributes, m = n.event.special; null != (d = a[h]); h++) + if ((b || M(d)) && (f = d[i], g = f && j[f])) { + if (g.events) + for (e in g.events) m[e] ? n.event.remove(d, e) : n.removeEvent(d, e, g.handle); + j[f] && (delete j[f], k || "undefined" == typeof d.removeAttribute ? d[i] = void 0 : d.removeAttribute(i), c.push(f)) + } + } + }), n.fn.extend({ + domManip: Ha, + detach: function(a) { + return Ia(this, a, !0) + }, + remove: function(a) { + return Ia(this, a) + }, + text: function(a) { + return Y(this, function(a) { + return void 0 === a ? n.text(this) : this.empty().append((this[0] && this[0].ownerDocument || d).createTextNode(a)) + }, null, a, arguments.length) + }, + append: function() { + return Ha(this, arguments, function(a) { + if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) { + var b = Ca(this, a); + b.appendChild(a) + } + }) + }, + prepend: function() { + return Ha(this, arguments, function(a) { + if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) { + var b = Ca(this, a); + b.insertBefore(a, b.firstChild) + } + }) + }, + before: function() { + return Ha(this, arguments, function(a) { + this.parentNode && this.parentNode.insertBefore(a, this) + }) + }, + after: function() { + return Ha(this, arguments, function(a) { + this.parentNode && this.parentNode.insertBefore(a, this.nextSibling) + }) + }, + empty: function() { + for (var a, b = 0; null != (a = this[b]); b++) { + 1 === a.nodeType && n.cleanData(ea(a, !1)); + while (a.firstChild) a.removeChild(a.firstChild); + a.options && n.nodeName(a, "select") && (a.options.length = 0) + } + return this + }, + clone: function(a, b) { + return a = null == a ? !1 : a, b = null == b ? a : b, this.map(function() { + return n.clone(this, a, b) + }) + }, + html: function(a) { + return Y(this, function(a) { + var b = this[0] || {}, + c = 0, + d = this.length; + if (void 0 === a) return 1 === b.nodeType ? b.innerHTML.replace(ta, "") : void 0; + if ("string" == typeof a && !wa.test(a) && (l.htmlSerialize || !ua.test(a)) && (l.leadingWhitespace || !aa.test(a)) && !da[($.exec(a) || ["", ""])[1].toLowerCase()]) { + a = n.htmlPrefilter(a); + try { + for (; d > c; c++) b = this[c] || {}, 1 === b.nodeType && (n.cleanData(ea(b, !1)), b.innerHTML = a); + b = 0 + } catch (e) {} + } + b && this.empty().append(a) + }, null, a, arguments.length) + }, + replaceWith: function() { + var a = []; + return Ha(this, arguments, function(b) { + var c = this.parentNode; + n.inArray(this, a) < 0 && (n.cleanData(ea(this)), c && c.replaceChild(b, this)) + }, a) + } + }), n.each({ + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" + }, function(a, b) { + n.fn[a] = function(a) { + for (var c, d = 0, e = [], f = n(a), h = f.length - 1; h >= d; d++) c = d === h ? this : this.clone(!0), n(f[d])[b](c), g.apply(e, c.get()); + return this.pushStack(e) + } + }); + var Ja, Ka = { + HTML: "block", + BODY: "block" + }; + + function La(a, b) { + var c = n(b.createElement(a)).appendTo(b.body), + d = n.css(c[0], "display"); + return c.detach(), d + } + + function Ma(a) { + var b = d, + c = Ka[a]; + return c || (c = La(a, b), "none" !== c && c || (Ja = (Ja || n("';break;case 3:b.title=!1,b.closeBtn=!1,-1===b.icon&&0===b.icon,f.closeAll("loading");break;case 4:j||(b.content=[b.content,"body"]),b.follow=b.content[1],b.content=b.content[0]+'',b.title=!1,b.fix=!1,b.tips="object"==typeof b.tips?b.tips:[b.tips,!0],b.tipsMore||f.closeAll("tips")}a.vessel(j,function(d,e){c("body").append(d[0]),j?function(){2==b.type||4==b.type?function(){c("body").append(d[1])}():function(){i.parents("."+h[0])[0]||(i.show().addClass("layui-layer-wrap").wrap(d[1]),c("#"+h[0]+g).find("."+h[5]).before(e))}()}():c("body").append(d[1]),a.layero=c("#"+h[0]+g),b.scrollbar||h.html.css("overflow","hidden").attr("layer-full",g)}).auto(g),2==b.type&&f.ie6&&a.layero.find("iframe").attr("src",i[0]),c(document).off("keydown",e.enter).on("keydown",e.enter),a.layero.on("keydown",function(a){c(document).off("keydown",e.enter)}),4==b.type?a.tips():a.offset(),b.fix&&d.on("resize",function(){a.offset(),(/^\d+%$/.test(b.area[0])||/^\d+%$/.test(b.area[1]))&&a.auto(g),4==b.type&&a.tips()}),b.time<=0||setTimeout(function(){f.close(a.index)},b.time),a.move().callback()}},g.pt.auto=function(a){function b(a){a=g.find(a),a.height(i[1]-j-k-2*(0|parseFloat(a.css("padding"))))}var e=this,f=e.config,g=c("#"+h[0]+a);""===f.area[0]&&f.maxWidth>0&&(/MSIE 7/.test(navigator.userAgent)&&f.btn&&g.width(g.innerWidth()),g.outerWidth()>f.maxWidth&&g.width(f.maxWidth));var i=[g.innerWidth(),g.innerHeight()],j=g.find(h[1]).outerHeight()||0,k=g.find("."+h[6]).outerHeight()||0;switch(f.type){case 2:b("iframe");break;default:""===f.area[1]?f.fix&&i[1]>=d.height()&&(i[1]=d.height(),b("."+h[5])):b("."+h[5])}return e},g.pt.offset=function(){var a=this,b=a.config,c=a.layero,e=[c.outerWidth(),c.outerHeight()],f="object"==typeof b.offset;a.offsetTop=(d.height()-e[1])/2,a.offsetLeft=(d.width()-e[0])/2,f?(a.offsetTop=b.offset[0],a.offsetLeft=b.offset[1]||a.offsetLeft):"auto"!==b.offset&&(a.offsetTop=b.offset,"rb"===b.offset&&(a.offsetTop=d.height()-e[1],a.offsetLeft=d.width()-e[0])),b.fix||(a.offsetTop=/%$/.test(a.offsetTop)?d.height()*parseFloat(a.offsetTop)/100:parseFloat(a.offsetTop),a.offsetLeft=/%$/.test(a.offsetLeft)?d.width()*parseFloat(a.offsetLeft)/100:parseFloat(a.offsetLeft),a.offsetTop+=d.scrollTop(),a.offsetLeft+=d.scrollLeft()),c.css({top:a.offsetTop,left:a.offsetLeft})},g.pt.tips=function(){var a=this,b=a.config,e=a.layero,f=[e.outerWidth(),e.outerHeight()],g=c(b.follow);g[0]||(g=c("body"));var i={width:g.outerWidth(),height:g.outerHeight(),top:g.offset().top,left:g.offset().left},j=e.find(".layui-layer-TipsG"),k=b.tips[0];b.tips[1]||j.remove(),i.autoLeft=function(){i.left+f[0]-d.width()>0?(i.tipLeft=i.left+i.width-f[0],j.css({right:12,left:"auto"})):i.tipLeft=i.left},i.where=[function(){i.autoLeft(),i.tipTop=i.top-f[1]-10,j.removeClass("layui-layer-TipsB").addClass("layui-layer-TipsT").css("border-right-color",b.tips[1])},function(){i.tipLeft=i.left+i.width+10,i.tipTop=i.top,j.removeClass("layui-layer-TipsL").addClass("layui-layer-TipsR").css("border-bottom-color",b.tips[1])},function(){i.autoLeft(),i.tipTop=i.top+i.height+10,j.removeClass("layui-layer-TipsT").addClass("layui-layer-TipsB").css("border-right-color",b.tips[1])},function(){i.tipLeft=i.left-f[0]-10,i.tipTop=i.top,j.removeClass("layui-layer-TipsR").addClass("layui-layer-TipsL").css("border-bottom-color",b.tips[1])}],i.where[k-1](),1===k?i.top-(d.scrollTop()+f[1]+16)<0&&i.where[2]():2===k?d.width()-(i.left+i.width+f[0]+16)>0||i.where[3]():3===k?i.top-d.scrollTop()+i.height+f[1]+16-d.height()>0&&i.where[0]():4===k&&f[0]+16-i.left>0&&i.where[1](),e.find("."+h[5]).css({"background-color":b.tips[1],"padding-right":b.closeBtn?"30px":""}),e.css({left:i.tipLeft,top:i.tipTop})},g.pt.move=function(){var a=this,b=a.config,e={setY:0,moveLayer:function(){var a=e.layero,b=parseInt(a.css("margin-left")),c=parseInt(e.move.css("left"));0===b||(c-=b),"fixed"!==a.css("position")&&(c-=a.parent().offset().left,e.setY=0),a.css({left:c,top:parseInt(e.move.css("top"))-e.setY})}},f=a.layero.find(b.move);return b.move&&f.attr("move","ok"),f.css({cursor:b.move?"move":"auto"}),c(b.move).on("mousedown",function(a){if(a.preventDefault(),"ok"===c(this).attr("move")){e.ismove=!0,e.layero=c(this).parents("."+h[0]);var f=e.layero.offset().left,g=e.layero.offset().top,i=e.layero.outerWidth()-6,j=e.layero.outerHeight()-6;c("#layui-layer-moves")[0]||c("body").append('
'),e.move=c("#layui-layer-moves"),b.moveType&&e.move.css({visibility:"hidden"}),e.moveX=a.pageX-e.move.position().left,e.moveY=a.pageY-e.move.position().top,"fixed"!==e.layero.css("position")||(e.setY=d.scrollTop())}}),c(document).mousemove(function(a){if(e.ismove){var c=a.pageX-e.moveX,f=a.pageY-e.moveY;if(a.preventDefault(),!b.moveOut){e.setY=d.scrollTop();var g=d.width()-e.move.outerWidth(),h=e.setY;0>c&&(c=0),c>g&&(c=g),h>f&&(f=h),f>d.height()-e.move.outerHeight()+e.setY&&(f=d.height()-e.move.outerHeight()+e.setY)}e.move.css({left:c,top:f}),b.moveType&&e.moveLayer(),c=f=g=h=null}}).mouseup(function(){try{e.ismove&&(e.moveLayer(),e.move.remove(),b.moveEnd&&b.moveEnd()),e.ismove=!1}catch(a){e.ismove=!1}}),a},g.pt.callback=function(){function a(){var a=g.cancel&&g.cancel(b.index);a===!1||f.close(b.index)}var b=this,d=b.layero,g=b.config;b.openLayer(),g.success&&(2==g.type?d.find("iframe").on("load",function(){g.success(d,b.index)}):g.success(d,b.index)),f.ie6&&b.IE6(d),d.find("."+h[6]).children("a").on("click",function(){var e=c(this).index();g["btn"+(e+1)]&&g["btn"+(e+1)](b.index,d),0===e?g.yes?g.yes(b.index,d):f.close(b.index):1===e?a():g["btn"+(e+1)]||f.close(b.index)}),d.find("."+h[7]).on("click",a),g.shadeClose&&c("#layui-layer-shade"+b.index).on("click",function(){f.close(b.index)}),d.find(".layui-layer-min").on("click",function(){f.min(b.index,g),g.min&&g.min(d)}),d.find(".layui-layer-max").on("click",function(){c(this).hasClass("layui-layer-maxmin")?(f.restore(b.index),g.restore&&g.restore(d)):(f.full(b.index,g),g.full&&g.full(d))}),g.end&&(e.end[b.index]=g.end)},e.reselect=function(){c.each(c("select"),function(a,b){var d=c(this);d.parents("."+h[0])[0]||1==d.attr("layer")&&c("."+h[0]).length<1&&d.removeAttr("layer").show(),d=null})},g.pt.IE6=function(a){function b(){a.css({top:f+(e.config.fix?d.scrollTop():0)})}var e=this,f=a.offset().top;b(),d.scroll(b),c("select").each(function(a,b){var d=c(this);d.parents("."+h[0])[0]||"none"===d.css("display")||d.attr({layer:"1"}).hide(),d=null})},g.pt.openLayer=function(){var a=this;f.zIndex=a.config.zIndex,f.setTop=function(a){var b=function(){f.zIndex++,a.css("z-index",f.zIndex+1)};return f.zIndex=parseInt(a[0].style.zIndex),a.on("mousedown",b),f.zIndex}},e.record=function(a){var b=[a.outerWidth(),a.outerHeight(),a.position().top,a.position().left+parseFloat(a.css("margin-left"))];a.find(".layui-layer-max").addClass("layui-layer-maxmin"),a.attr({area:b})},e.rescollbar=function(a){h.html.attr("layer-full")==a&&(h.html[0].style.removeProperty?h.html[0].style.removeProperty("overflow"):h.html[0].style.removeAttribute("overflow"),h.html.removeAttr("layer-full"))},a.layer=f,f.getChildFrame=function(a,b){return b=b||c("."+h[4]).attr("times"),c("#"+h[0]+b).find("iframe").contents().find(a)},f.getFrameIndex=function(a){return c("#"+a).parents("."+h[4]).attr("times")},f.iframeAuto=function(a){if(a){var b=f.getChildFrame("html",a).outerHeight(),d=c("#"+h[0]+a),e=d.find(h[1]).outerHeight()||0,g=d.find("."+h[6]).outerHeight()||0;d.css({height:b+e+g}),d.find("iframe").css({height:b})}},f.iframeSrc=function(a,b){c("#"+h[0]+a).find("iframe").attr("src",b)},f.style=function(a,b){var d=c("#"+h[0]+a),f=d.attr("type"),g=d.find(h[1]).outerHeight()||0,i=d.find("."+h[6]).outerHeight()||0;(f===e.type[1]||f===e.type[2])&&(d.css(b),f===e.type[2]&&d.find("iframe").css({height:parseFloat(b.height)-g-i}))},f.min=function(a,b){var d=c("#"+h[0]+a),g=d.find(h[1]).outerHeight()||0;e.record(d),f.style(a,{width:180,height:g,overflow:"hidden"}),d.find(".layui-layer-min").hide(),"page"===d.attr("type")&&d.find(h[4]).hide(),e.rescollbar(a)},f.restore=function(a){var b=c("#"+h[0]+a),d=b.attr("area").split(",");b.attr("type");f.style(a,{width:parseFloat(d[0]),height:parseFloat(d[1]),top:parseFloat(d[2]),left:parseFloat(d[3]),overflow:"visible"}),b.find(".layui-layer-max").removeClass("layui-layer-maxmin"),b.find(".layui-layer-min").show(),"page"===b.attr("type")&&b.find(h[4]).show(),e.rescollbar(a)},f.full=function(a){var b,g=c("#"+h[0]+a);e.record(g),h.html.attr("layer-full")||h.html.css("overflow","hidden").attr("layer-full",a),clearTimeout(b),b=setTimeout(function(){var b="fixed"===g.css("position");f.style(a,{top:b?0:d.scrollTop(),left:b?0:d.scrollLeft(),width:d.width(),height:d.height()}),g.find(".layui-layer-min").hide()},100)},f.title=function(a,b){var d=c("#"+h[0]+(b||f.index)).find(h[1]);d.html(a)},f.close=function(a){var b=c("#"+h[0]+a),d=b.attr("type");if(b[0]){if(d===e.type[1]&&"object"===b.attr("conType")){b.children(":not(."+h[5]+")").remove();for(var g=0;2>g;g++)b.find(".layui-layer-wrap").unwrap().hide()}else{if(d===e.type[2])try{var i=c("#"+h[4]+a)[0];i.contentWindow.document.write(""),i.contentWindow.close(),b.find("."+h[5])[0].removeChild(i)}catch(j){}b[0].innerHTML="",b.remove()}c("#layui-layer-moves, #layui-layer-shade"+a).remove(),f.ie6&&e.reselect(),e.rescollbar(a),c(document).off("keydown",e.enter),"function"==typeof e.end[a]&&e.end[a](),delete e.end[a]}},f.closeAll=function(a){c.each(c("."+h[0]),function(){var b=c(this),d=a?b.attr("type")===a:1;d&&f.close(b.attr("times")),d=null})},e.run=function(){c=jQuery,d=c(a),h.html=c("html"),f.open=function(a){var b=new g(a);return b.index}},"function"==typeof define?define(function(){return e.run(),f}):function(){e.run(),f.use("skin/layer.css")}()}(window); \ No newline at end of file diff --git a/statics/js/layer/skin/default/icon-ext.png b/statics/js/layer/skin/default/icon-ext.png new file mode 100644 index 0000000..bbbb669 Binary files /dev/null and b/statics/js/layer/skin/default/icon-ext.png differ diff --git a/statics/js/layer/skin/default/icon.png b/statics/js/layer/skin/default/icon.png new file mode 100644 index 0000000..3e17da8 Binary files /dev/null and b/statics/js/layer/skin/default/icon.png differ diff --git a/statics/js/layer/skin/default/loading-0.gif b/statics/js/layer/skin/default/loading-0.gif new file mode 100644 index 0000000..6f3c953 Binary files /dev/null and b/statics/js/layer/skin/default/loading-0.gif differ diff --git a/statics/js/layer/skin/default/loading-1.gif b/statics/js/layer/skin/default/loading-1.gif new file mode 100644 index 0000000..db3a483 Binary files /dev/null and b/statics/js/layer/skin/default/loading-1.gif differ diff --git a/statics/js/layer/skin/default/loading-2.gif b/statics/js/layer/skin/default/loading-2.gif new file mode 100644 index 0000000..5bb90fd Binary files /dev/null and b/statics/js/layer/skin/default/loading-2.gif differ diff --git a/statics/js/layer/skin/layer.css b/statics/js/layer/skin/layer.css new file mode 100644 index 0000000..42a613d --- /dev/null +++ b/statics/js/layer/skin/layer.css @@ -0,0 +1,7 @@ +/*! + + @Name: layer's style + @Author: 贤心 + @Blog: sentsin.com + + */*html{background-image:url(about:blank);background-attachment:fixed}html #layui_layer_skinlayercss{display:none;position:absolute;width:1989px}.layui-layer,.layui-layer-shade{position:fixed;_position:absolute;pointer-events:auto}.layui-layer-shade{top:0;left:0;width:100%;height:100%;_height:expression(document.body.offsetHeight+"px")}.layui-layer{top:150px;left:50%;margin:0;padding:0;background-color:#fff;-webkit-background-clip:content;box-shadow:1px 1px 50px rgba(0,0,0,.3);border-radius:2px;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.3s;animation-duration:.3s}.layui-layer-close{position:absolute}.layui-layer-content{position:relative}.layui-layer-border{border:1px solid #B2B2B2;border:1px solid rgba(0,0,0,.3);box-shadow:1px 1px 5px rgba(0,0,0,.2)}.layui-layer-moves{position:absolute;border:3px solid #666;border:3px solid rgba(0,0,0,.5);cursor:move;background-color:#fff;background-color:rgba(255,255,255,.3);filter:alpha(opacity=50)}.layui-layer-load{background:url(default/loading-0.gif) center center no-repeat #fff}.layui-layer-ico{background:url(default/icon.png) no-repeat}.layui-layer-btn a,.layui-layer-dialog .layui-layer-ico,.layui-layer-setwin a{display:inline-block;*display:inline;*zoom:1;vertical-align:top}@-webkit-keyframes bounceIn{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes bounceIn{0%{opacity:0;-webkit-transform:scale(.5);-ms-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layui-anim{-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceOut{100%{opacity:0;-webkit-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.03);transform:scale(1.03)}0%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes bounceOut{100%{opacity:0;-webkit-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.03);-ms-transform:scale(1.03);transform:scale(1.03)}0%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layui-anim-close{-webkit-animation-name:bounceOut;animation-name:bounceOut;-webkit-animation-duration:.2s;animation-duration:.2s}@-webkit-keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);-ms-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);-ms-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layui-anim-01{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);-ms-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.layui-anim-02{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);-ms-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);-ms-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layui-anim-03{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}@keyframes rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);-ms-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);-ms-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}.layui-anim-04{-webkit-animation-name:rollIn;animation-name:rollIn}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.layui-anim-05{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes shake{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);transform:translateX(10px)}}@keyframes shake{0%,100%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);-ms-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);-ms-transform:translateX(10px);transform:translateX(10px)}}.layui-anim-06{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.layui-layer-title{padding:0 80px 0 20px;height:42px;line-height:42px;border-bottom:1px solid #eee;font-size:14px;color:#333;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background-color:#F8F8F8;border-radius:2px 2px 0 0}.layui-layer-setwin{position:absolute;right:15px;*right:0;top:15px;font-size:0;line-height:initial}.layui-layer-setwin a{position:relative;width:16px;height:16px;margin-left:10px;font-size:12px;_overflow:hidden}.layui-layer-setwin .layui-layer-min cite{position:absolute;width:14px;height:2px;left:0;top:50%;margin-top:-1px;background-color:#2E2D3C;cursor:pointer;_overflow:hidden}.layui-layer-setwin .layui-layer-min:hover cite{background-color:#2D93CA}.layui-layer-setwin .layui-layer-max{background-position:-32px -40px}.layui-layer-setwin .layui-layer-max:hover{background-position:-16px -40px}.layui-layer-setwin .layui-layer-maxmin{background-position:-65px -40px}.layui-layer-setwin .layui-layer-maxmin:hover{background-position:-49px -40px}.layui-layer-setwin .layui-layer-close1{background-position:0 -40px;cursor:pointer}.layui-layer-setwin .layui-layer-close1:hover{opacity:.7}.layui-layer-setwin .layui-layer-close2{position:absolute;right:-28px;top:-28px;width:30px;height:30px;margin-left:0;background-position:-149px -31px;*right:-18px;_display:none}.layui-layer-setwin .layui-layer-close2:hover{background-position:-180px -31px}.layui-layer-btn{text-align:right;padding:0 10px 12px;pointer-events:auto}.layui-layer-btn a{height:28px;line-height:28px;margin:0 6px;padding:0 15px;border:1px solid #dedede;background-color:#f1f1f1;color:#333;border-radius:2px;font-weight:400;cursor:pointer;text-decoration:none}.layui-layer-btn a:hover{opacity:.9;text-decoration:none}.layui-layer-btn a:active{opacity:.7}.layui-layer-btn .layui-layer-btn0{border-color:#4898d5;background-color:#2e8ded;color:#fff}.layui-layer-dialog{min-width:260px}.layui-layer-dialog .layui-layer-content{position:relative;padding:20px;line-height:24px;word-break:break-all;font-size:14px;overflow:auto}.layui-layer-dialog .layui-layer-content .layui-layer-ico{position:absolute;top:16px;left:15px;_left:-40px;width:30px;height:30px}.layui-layer-ico1{background-position:-30px 0}.layui-layer-ico2{background-position:-60px 0}.layui-layer-ico3{background-position:-90px 0}.layui-layer-ico4{background-position:-120px 0}.layui-layer-ico5{background-position:-150px 0}.layui-layer-ico6{background-position:-180px 0}.layui-layer-rim{border:6px solid #8D8D8D;border:6px solid rgba(0,0,0,.3);border-radius:5px;box-shadow:none}.layui-layer-msg{min-width:180px;border:1px solid #D3D4D3;box-shadow:none}.layui-layer-hui{min-width:100px;background-color:#000;filter:alpha(opacity=60);background-color:rgba(0,0,0,.6);color:#fff;border:none}.layui-layer-hui .layui-layer-content{padding:12px 25px;text-align:center}.layui-layer-dialog .layui-layer-padding{padding:20px 20px 20px 55px;text-align:left}.layui-layer-page .layui-layer-content{position:relative;overflow:auto}.layui-layer-iframe .layui-layer-btn,.layui-layer-page .layui-layer-btn{padding-top:10px}.layui-layer-nobg{background:0 0}.layui-layer-iframe .layui-layer-content{overflow:hidden}.layui-layer-iframe iframe{display:block;width:100%}.layui-layer-loading{border-radius:100%;background:0 0;box-shadow:none;border:none}.layui-layer-loading .layui-layer-content{width:60px;height:24px;background:url(default/loading-0.gif) no-repeat}.layui-layer-loading .layui-layer-loading1{width:37px;height:37px;background:url(default/loading-1.gif) no-repeat}.layui-layer-ico16,.layui-layer-loading .layui-layer-loading2{width:32px;height:32px;background:url(default/loading-2.gif) no-repeat}.layui-layer-tips{background:0 0;box-shadow:none;border:none}.layui-layer-tips .layui-layer-content{position:relative;line-height:22px;min-width:12px;padding:5px 10px;font-size:12px;_float:left;border-radius:3px;box-shadow:1px 1px 3px rgba(0,0,0,.3);background-color:#F90;color:#fff}.layui-layer-tips .layui-layer-close{right:-2px;top:-1px}.layui-layer-tips i.layui-layer-TipsG{position:absolute;width:0;height:0;border-width:8px;border-color:transparent;border-style:dashed;*overflow:hidden}.layui-layer-tips i.layui-layer-TipsB,.layui-layer-tips i.layui-layer-TipsT{left:5px;border-right-style:solid;border-right-color:#F90}.layui-layer-tips i.layui-layer-TipsT{bottom:-8px}.layui-layer-tips i.layui-layer-TipsB{top:-8px}.layui-layer-tips i.layui-layer-TipsL,.layui-layer-tips i.layui-layer-TipsR{top:1px;border-bottom-style:solid;border-bottom-color:#F90}.layui-layer-tips i.layui-layer-TipsR{left:-8px}.layui-layer-tips i.layui-layer-TipsL{right:-8px}.layui-layer-lan[type=dialog]{min-width:280px}.layui-layer-lan .layui-layer-title{background:#4476A7;color:#fff;border:none}.layui-layer-lan .layui-layer-btn{padding:10px;text-align:right;border-top:1px solid #E9E7E7}.layui-layer-lan .layui-layer-btn a{background:#BBB5B5;border:none}.layui-layer-lan .layui-layer-btn .layui-layer-btn1{background:#C9C5C5}.layui-layer-molv .layui-layer-title{background:#009f95;color:#fff;border:none}.layui-layer-molv .layui-layer-btn a{background:#009f95}.layui-layer-molv .layui-layer-btn .layui-layer-btn1{background:#92B8B1} \ No newline at end of file diff --git a/statics/js/layer/skin/layer.ext.css b/statics/js/layer/skin/layer.ext.css new file mode 100644 index 0000000..a2bd781 --- /dev/null +++ b/statics/js/layer/skin/layer.ext.css @@ -0,0 +1,8 @@ +/*! + + @Name: layer拓展样式 + @Date: 2012.12.13 + @Author: 贤心 + @blog: sentsin.com + + */.layui-layer-imgbar,.layui-layer-imgtit a,.layui-layer-tab .layui-layer-title span{text-overflow:ellipsis;white-space:nowrap}.layui-layer-iconext{background:url(default/icon-ext.png) no-repeat}html #layui_layer_skinlayerextcss{display:none;position:absolute;width:1989px}.layui-layer-prompt .layui-layer-input{display:block;width:220px;height:30px;margin:0 auto;line-height:30px;padding:0 5px;border:1px solid #ccc;box-shadow:1px 1px 5px rgba(0,0,0,.1) inset;color:#333}.layui-layer-prompt textarea.layui-layer-input{width:300px;height:100px;line-height:20px}.layui-layer-tab{box-shadow:1px 1px 50px rgba(0,0,0,.4)}.layui-layer-tab .layui-layer-title{padding-left:0;border-bottom:1px solid #ccc;background-color:#eee;overflow:visible}.layui-layer-tab .layui-layer-title span{position:relative;float:left;min-width:80px;max-width:260px;padding:0 20px;text-align:center;cursor:default;overflow:hidden}.layui-layer-tab .layui-layer-title span.layui-layer-tabnow{height:43px;border-left:1px solid #ccc;border-right:1px solid #ccc;background-color:#fff;z-index:10}.layui-layer-tab .layui-layer-title span:first-child{border-left:none}.layui-layer-tabmain{line-height:24px;clear:both}.layui-layer-tabmain .layui-layer-tabli{display:none}.layui-layer-tabmain .layui-layer-tabli.xubox_tab_layer{display:block}.xubox_tabclose{position:absolute;right:10px;top:5px;cursor:pointer}.layui-layer-photos{-webkit-animation-duration:1s;animation-duration:1s}.layui-layer-photos .layui-layer-content{overflow:hidden;text-align:center}.layui-layer-photos .layui-layer-phimg img{position:relative;width:100%;display:inline-block;*display:inline;*zoom:1;vertical-align:top}.layui-layer-imgbar,.layui-layer-imguide{display:none}.layui-layer-imgnext,.layui-layer-imgprev{position:absolute;top:50%;width:27px;_width:44px;height:44px;margin-top:-22px;outline:0;blr:expression(this.onFocus=this.blur())}.layui-layer-imgprev{left:10px;background-position:-5px -5px;_background-position:-70px -5px}.layui-layer-imgprev:hover{background-position:-33px -5px;_background-position:-120px -5px}.layui-layer-imgnext{right:10px;_right:8px;background-position:-5px -50px;_background-position:-70px -50px}.layui-layer-imgnext:hover{background-position:-33px -50px;_background-position:-120px -50px}.layui-layer-imgbar{position:absolute;left:0;bottom:0;width:100%;height:32px;line-height:32px;background-color:rgba(0,0,0,.8);background-color:#000\9;filter:Alpha(opacity=80);color:#fff;overflow:hidden;font-size:0}.layui-layer-imgtit *{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:12px}.layui-layer-imgtit a{max-width:65%;overflow:hidden;color:#fff}.layui-layer-imgtit a:hover{color:#fff;text-decoration:underline}.layui-layer-imgtit em{padding-left:10px;font-style:normal} \ No newline at end of file diff --git a/statics/js/lib.js b/statics/js/lib.js new file mode 100644 index 0000000..b42cac7 --- /dev/null +++ b/statics/js/lib.js @@ -0,0 +1,249 @@ +// 前端模板 +! function (a) { + "use strict"; + var b = function (a, c) { + var d = /[^\w\-\.:]/.test(a) ? new Function(b.arg + ",tmpl", "var _e=tmpl.encode" + b.helper + ",_s='" + a.replace(b.regexp, b.func) + "';return _s;") : b.cache[a] = b.cache[a] || b(b.load(a)); + return c ? d(c, b) : function (a) { + return d(a, b) + } + }; + b.cache = {}, b.load = function (a) { + return document.getElementById(a).innerHTML + }, b.regexp = /([\s'\\])(?!(?:[^{]|\{(?!%))*%\})|(?:\{%(=|#)([\s\S]+?)%\})|(\{%)|(%\})/g, b.func = function (a, b, c, d, e, f) { + return b ? { + "\n": "\\n", + "\r": "\\r", + " ": "\\t", + " ": " " + }[b] || "\\" + b : c ? "=" === c ? "'+_e(" + d + ")+'" : "'+(" + d + "==null?'':" + d + ")+'" : e ? "';" : f ? "_s+='" : void 0 + }, b.encReg = /[<>&"'\x00]/g, b.encMap = { + "<": "<", + ">": ">", + "&": "&", + '"': """, + "'": "'" + }, b.encode = function (a) { + return (null == a ? "" : "" + a).replace(b.encReg, function (a) { + return b.encMap[a] || "" + }) + }, b.arg = "o", b.helper = ",print=function(s,e){_s+=e?(s==null?'':s):_e(s);},include=function(s,d){_s+=tmpl(s,d);}", "function" == typeof define && define.amd ? define(function () { + return b + }) : a.tmpl = b +}(this); +// 迷你发布订阅系统 +(function ($) { + var o = $({}); + $.subscribe = function () { + o.on.apply(o, arguments); + }; + $.unsubscribe = function () { + o.off.apply(o, arguments); + }; + $.publish = function () { + o.trigger.apply(o, arguments); + }; +}($)); + +$(function () { + 'use strict'; + var win = window; + win.GLOBAL = win.GLOBAL || {}; + win.hr = win.hr || {}; + + win.hr.version = '1.6.11'; + win.hr.page = win.hr.page || {}; + win.hr.component = win.hr.component || {}; + + /** + * @description 注册组件 + * @param {String} name 组件名字 + * @param {Object} obj 组件 Javascript 逻辑,JSON 格式 + * @return {Object} 返回 window.hr.component 对象 + * @example + * hr.regComponent('组件名', { + * init: function () { // 此 init 方法为必需,组件注册后会执行的方法 + * this.someAction(); + * }, + * someAction: function () { + * // 组件 Javascript 逻辑,可以根据需要写多个 Function + * } + * }); + * 组件注册后如果要再次调用,可以用 hr.component.组件名 获取组件对象 + */ + win.hr.regComponent = function (name, obj) { + if (typeof name == 'string' && name !== '') { + win.hr.util._createNamespace(name.split('.'), obj, win.hr.component); + } + }; + + /** + * @description 注册页面 + * @param {String} name 页面名字 + * @param {Object} obj 页面 Javascript 逻辑,JSON 格式 + * @return {Object} 返回 window.hr.page 对象 + * @example + * hr.regPage('页面名', { + * init: function () { // 此 init 方法为必需,组件页面后会执行的方法 + * this.someAction(); + * }, + * someAction: function () { + * // 页面 Javascript 逻辑,可以根据需要写多个 Function + * } + * }); + * 页面注册后如果要再次调用,可以用 hr.page.页面名 获取页面对象 + */ + win.hr.regPage = function (name, obj) { + if (typeof name == 'string' && name !== '') { + win.hr.util._createNamespace(name.split('.'), obj, win.hr.page); + } + }; + + win.hr.util = { + /** + * @description 渲染模板 + * @param {JSON} opt 包含以下内容 + * @param {String} opt.tmpl 模板区域的 ID 名 + * @param {Object} opt.data 要渲染的 JSON 数据 + * @param {Object} opt.to 要追加进的 jQuery DOM 对象 + * @param {Object} opt.insertTo 要插入到其之前或之后的 jQuery DOM 对象 + * @param {String} opt.method 渲染的方式,包括 replace、append 和 prepend,当同时有 insertTo 时,是以 insertTo 为基准 + * @param {Function} opt.callbackFn 回调函数 + */ + renderTmpl: function (opt) { + var strTargetTmpl = opt.tmpl || ''; + var jsonData = opt.data || {}; + var $target = opt.to; + var method = opt.method || 'append'; + var $insertTo = opt.insertTo || null; + if ($target) { + var tmpled = tmpl(strTargetTmpl, jsonData); + switch (method) { + case 'replace': + $target.html(tmpled); + break; + case 'append': + if ($insertTo) { + $(tmpled).insertAfter($insertTo); + } else { + $target.append(tmpled); + } + break; + case 'prepend': + if ($insertTo) { + $(tmpled).insertBefore($insertTo); + } else { + $target.prepend(tmpled); + } + break; + default: + break; + } + } + $.isFunction(opt.callbackFn) && opt.callbackFn(); + }, + /** + * @description 从 URL 中获取指定参数值 + * @param {String} str 要从 URL 中获取的参数值 + */ + getUrlParam: function (str) { + var s = location.search; + var tmp = []; + var value = ''; + if (s) { + tmp = s.substr(1).split('&'); + } + for (var i = 0; i < tmp.length; i++) { + if (tmp[i].substring(0, tmp[i].indexOf('=')) === str) { + value = tmp[i].substr(tmp[i].indexOf('=') + 1); + break; + } + } + return value; + }, + /** + * @description 使用 rem 单位时自动计算 html 初始字体尺寸。比如设计稿是 750px 的,那么对应的 1rem 就等于 100px;如果设计稿是非标准尺寸,比如 844px,那么可以传入参数 baseWidth 844,这样可以保证 1rem 等于 100px,便于计算。 + * @param {Number} baseWidth 基准尺寸 + */ + resizePage: function (baseWidth) { + var baseW = baseWidth || 750; + var docEl = document.documentElement, + resizeEvt = 'orientationchange' in win ? 'orientationchange' : 'resize', + recalc = function () { + var clientWidth = docEl.clientWidth; + if (!clientWidth) { + return; + } + if (clientWidth > baseW) { + clientWidth = baseW; + } + docEl.style.fontSize = 100 * (clientWidth / baseW) + 'px'; + }; + if (!document.addEventListener) { + return; + } + win.addEventListener(resizeEvt, recalc, false); + recalc(); + }, + /** + * @description 内部方法,创建一个命名空间 + */ + _createNamespace: function (parts, obj, parent) { + var obj = obj || { + init: function () { } + }; + var i = 0; + if (parts[0] === 'hr') { + parts = parts.slice(1); + } + for (i = 0; i < parts.length; i++) { + if (typeof parent[parts[i]] == 'undefined') { + parent[parts[i]] = obj; + // 组件或页面注册后执行 + obj.init(); + } + parent = parent[parts[i]]; + } + }, + globleMethods: function (params) { + $(".menuBtn") && $(".menuBtn").click(function () { + $(".header").addClass("open-nav").find(".nav").stop().slideToggle(); + window.event ? window.event.cancelBubble = true : e.stopPropagation(); + }) + // 选项卡 鼠标点击切换 + $(".TAB_CLICK li") && $(".TAB_CLICK li").click(function () { + var tab = $(this).parent(".TAB_CLICK"); + var con = tab.attr("id"); + var on = tab.find("li").index(this); + $(this).addClass('on').siblings(tab.find("li")).removeClass('on'); + $(con).eq(on).show().siblings(con).hide(); + }); + var _width = $(window).innerWidth(); + if (_width < 1280) { + $(".header .nav li a").click(function () { + $(".header").find(".nav").stop().slideUp(); + }) + } + // 获取用户代理字符串 + var userAgent = navigator.userAgent; + // 判断是否为苹果浏览器 + var isAppleBrowser = /(Mac|iPhone|iPod|iPad)/i.test(userAgent) && !/(Android|Windows)/i.test(userAgent); + + if (isAppleBrowser) { + // 是苹果浏览器 + $('body').addClass("safri") + } else { + // 不是苹果浏览器 + console.log('当前浏览器不是苹果浏览器'); + } + + } + }; + + win.hr.init = function () { + // TODO 这里放页面初始化时需要执行的代码 + win.hr.util.globleMethods() + + }; + + win.hr.init(); +}); \ No newline at end of file diff --git a/statics/js/lib2.js b/statics/js/lib2.js new file mode 100644 index 0000000..1b32bfe --- /dev/null +++ b/statics/js/lib2.js @@ -0,0 +1,180 @@ +$(document).ready(function ($) { + // 导航 + $(".so-bar").click(function () { + $(".search-block").stop().fadeIn(); + $(".so-bar").fadeOut() + }); + $(".search-top-close").click(function () { + $(".search-block").stop().fadeOut(); + $(".so-bar").fadeIn() + }); + $(".menuBtn").click(function () { + $(".page-hd").toggleClass("open-nav"); + window.event ? window.event.cancelBubble = true : e.stopPropagation(); + }) + var _width = $(window).innerWidth(); + $(".index-list1 li .item .online i").click(function () { + $(this).toggleClass("active"); + if ($(this).text() == '收藏') { + $(this).text('已收藏') + } else { + $(this).text('收藏') + } + }) + if ($(window).width() > 1280) { + $('.ul-nav li').mouseenter(function () { + $(this).find('.child').stop().slideDown(150); + }) + $('.ul-nav li').mouseleave(function () { + $(this).find('.child').stop().slideUp(150); + }) + } + + $('.footer .ft-link .item h4').on('click', function () { + if ($(window).width() < 1199) { + $(this).siblings('.link').stop().slideToggle(150); + $(this).parents('.item').siblings('.itema').find('.link').slideUp(150); + } + }) + + $('.menu').on('click', function () { + $('.mobile-con').stop().slideToggle(150); + }) + if (_width < 1000) { + $(".page-nav dt .arrow").attr("href", "javascript:;"); + $(".fd-top-yc .left dt").click(function (e) { + $(this).toggleClass("active").siblings("dd").stop().slideToggle(); + }); + $(".page-nav dt").click(function (e) { + $(this).toggleClass("open").siblings("dd").stop().slideToggle(); + window.event ? window.event.cancelBubble = true : e.stopPropagation(); + }); + $(".popup-nav-mask").click(function () { + $(".page-hd").removeClass("open-nav"); + }); + $(".so-bar").click(function () { + $(".search-block").hide(); + $(".select-result-m").stop().fadeIn(); + }); + $(".result-cancle").click(function () { + $(".select-result-m").stop().fadeOut(); + $(".so-bar").fadeIn() + }); + } + //返回顶部 + $('.totop').click(function () { + $('body,html').animate({ + 'scrollTop': 0 + }, 500); + }); + $(window).scroll(function () { + var _top = $(window).scrollTop(); + if (_top < 100) { + $('.totop').stop().fadeOut(500); + } else { + $('.totop').stop().fadeIn(500); + } + if ($(".full-career")) { + $(".full-career").addClass("close") + } + }); + + // 选项卡 鼠标点击切换 + $(".TAB_CLICK li").click(function () { + var tab = $(this).parent(".TAB_CLICK"); + var con = tab.attr("id"); + var on = tab.find("li").index(this); + $(this).addClass('on').siblings(tab.find("li")).removeClass('on'); + $(con).eq(on).show().siblings(con).hide(); + }); + // 选项卡 鼠标经过切换 + $(".TAB li").mousemove(function () { + var tab = $(this).parent(".TAB"); + var con = tab.attr("id"); + var on = tab.find("li").index(this); + $(this).addClass('hover').siblings(tab.find("li")).removeClass('hover'); + $(con).eq(on).show().siblings(con).hide(); + }); + var clientHeight = document.body.clientHeight; + var _focusElem = null; + document.body.addEventListener("focus", function (e) { + _focusElem = e.target || e.srcElement; + }, true); + window.addEventListener("resize", function () { + if (_focusElem && document.body.clientHeight < clientHeight) { + _focusElem.scrollIntoView(true); + } + }); + (function () { + // 自定义多选 + $('[role=checkbox]').each(function () { + var input = $(this).find('input[type="checkbox"]'); + + input.each(function () { + if ($(this).attr('checked')) { + $(this).parents('label').addClass('checked'); + $(this).prop("checked", true) + } + }) + + input.change(function () { + $(this).parents('label').toggleClass('checked'); + }); + }) + + })(); + + (function () { + // 自定义单选 + $('[role=radio]').each(function () { + var input = $(this).find('input[type="radio"]'), + label = $(this).find('label'); + + input.each(function () { + if ($(this).attr('checked')) { + $(this).parents('label').addClass('checked'); + $(this).prop("checked", true) + } + }) + + input.change(function () { + label.removeClass('checked'); + $(this).parents('label').addClass('checked'); + input.removeAttr('checked'); + $(this).prop("checked", true) + }) + }) + })(); + (function () { + // 自定义单选 + $('[role=radio2]').each(function () { + var input = $(this).find('input[type="radio"]'), + label = $(this).find('label'); + + input.each(function () { + console.log(111); + if ($(this).attr('checked')) { + $(this).parents('label').addClass('checked'); + $(this).prop("checked", true) + } + }) + + input.change(function () { + label.removeClass('checked'); + $(this).parents('label').addClass('checked'); + input.removeAttr('checked'); + $(this).prop("checked", true) + }) + }) + })(); + // 打开关闭弹窗 + $('.myfancy').click(function () { + var _id = $(this).attr('href'); + $(_id).fadeIn(150); + $('body').addClass('ovh') +}); +$('.g-close').click(function() { + $(this).parents('.g-pop,.edu-pop').hide(); + $('body').removeClass('ovh') +}); +}); \ No newline at end of file diff --git a/statics/js/skins/default.css b/statics/js/skins/default.css new file mode 100644 index 0000000..ec3adbf --- /dev/null +++ b/statics/js/skins/default.css @@ -0,0 +1,355 @@ +@charset "utf-8"; +/* + * artDialog skin + * http://code.google.com/p/artdialog/ + * (c) 2009-2011 TangBin,http://www.planeArt.cn + * + * This is licensed under the GNU LGPL,version 2.1 or later. + * For details,see:http://creativecommons.org/licenses/LGPL/2.1/ + */ + +/* common start */ +body { + _margin:0; + _height:100%; + /*IE6 BUG*/ +} +.aui_outer { + text-align:left; +} +table.aui_border,table.aui_dialog { + border:0; + margin:0; + border-collapse:collapse; + width:auto; +} +.aui_nw,.aui_n,.aui_ne,.aui_w,.aui_c,.aui_e,.aui_sw,.aui_s,.aui_se,.aui_header,.aui_tdIcon,.aui_main,.aui_footer { + padding:0; +} +.aui_header,.aui_buttons button { + font:12px/1.11 'Microsoft Yahei',Tahoma,Arial,Helvetica,STHeiti; + _font-family:Tahoma,Arial,Helvetica,STHeiti; + -o-font-family:Tahoma,Arial; +} +.aui_title { + overflow:hidden; + text-overflow:ellipsis; +} +.aui_state_noTitle .aui_title { + display:none; +} +.aui_close { + display:block; + position:absolute; + text-decoration:none; + outline:none; + _cursor:pointer; +} +.aui_close:hover { + text-decoration:none; +} +.aui_main { + text-align:center; + min-width:9em; + min-width:0\9/*IE8 BUG*/; +} +.aui_content { + display:inline-block; + *zoom:1; + *display:inline; + text-align:left; + border:none 0; +} +.aui_content.aui_state_full { + display:block; + width:100%; + margin:0; + padding:0!important; + height:100%; +} +.aui_loading { + width:96px; + height:32px; + text-align:left; + text-indent:-999em; + overflow:hidden; + background:url(icons/loading.gif) no-repeat center center; + padding-bottom:40px; +} +.aui_icon { + vertical-align:middle; +} +.aui_icon div { + width:48px; + height:48px; + margin:10px 0 10px 10px; + background-position:center center; + background-repeat:no-repeat; +} +.aui_buttons { + padding:8px; + text-align:right; + white-space:nowrap; +} +.aui_buttons button { + margin-left:15px; + padding:6px 8px; + cursor:pointer; + display:inline-block; + text-align:center; + line-height:1; + *padding:4px 10px; + *height:2em; + letter-spacing:2px; + font-family:Tahoma,Arial/9!important; + width:auto; + overflow:visible; + *width:1; + color:#333; + border:solid 1px #999; + border-radius:5px; + background:#DDD; + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFF',endColorstr='#DDDDDD'); + background:linear-gradient(top,#FFF,#DDD); + background:-moz-linear-gradient(top,#FFF,#DDD); + background:-webkit-gradient(linear,0% 0%,0% 100%,from(#FFF),to(#DDD)); + text-shadow:0px 1px 1px rgba(255,255,255,1); + box-shadow:0 1px 0 rgba(255,255,255,.7),0 -1px 0 rgba(0,0,0,.09); + -moz-transition:-moz-box-shadow linear .2s; + -webkit-transition:-webkit-box-shadow linear .2s; + transition:box-shadow linear .2s; +} +.aui_buttons button::-moz-focus-inner { + border:0; + padding:0; + margin:0; +} +.aui_buttons button:focus { + outline:none 0; + border-color:#426DC9; + box-shadow:0 0 8px rgba(66,109,201,.9); +} +.aui_buttons button:hover { + color:#000; + border-color:#666; +} +.aui_buttons button:active { + border-color:#666; + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#DDDDDD',endColorstr='#FFFFFF'); + background:linear-gradient(top,#DDD,#FFF); + background:-moz-linear-gradient(top,#DDD,#FFF); + background:-webkit-gradient(linear,0% 0%,0% 100%,from(#DDD),to(#FFF)); + box-shadow:inset 0 1px 5px rgba(66,109,201,.9),inset 0 1px 1em rgba(0,0,0,.3); +} +.aui_buttons button[disabled] { + cursor:default; + color:#666; + background:#DDD; + border:solid 1px #999; + filter:alpha(opacity=50); + opacity:.5; + box-shadow:none; +} +button.aui_state_highlight { + color:#FFF; + border:solid 1px #1c6a9e; + background:#2288cc; + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee',endColorstr='#2288cc'); + background:linear-gradient(top,#33bbee,#2288cc); + background:-moz-linear-gradient(top,#33bbee,#2288cc); + background:-webkit-gradient(linear,0% 0%,0% 100%,from(#33bbee),to(#2288cc)); + text-shadow:-1px -1px 1px #1c6a9e; +} +button.aui_state_highlight:hover { + color:#FFF; + border-color:#0F3A56; +} +button.aui_state_highlight:active { + border-color:#1c6a9e; + + + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#33bbee',endColorstr='#2288cc'); + background:linear-gradient(top,#33bbee,#2288cc); + background:-moz-linear-gradient(top,#33bbee,#2288cc); + background:-webkit-gradient(linear,0% 0%,0% 100%,from(#33bbee),to(#2288cc)); +} +/* common end */ + +.aui_inner { + background-color:#FFF; +} +.aui_main , .aui_icon { + padding-bottom: 20px; +} +.aui_border { + +} +.aui_n, .aui_s { + height: 8px; +} +.aui_w, .aui_e { + width: 8px; +} +.aui_nw { + border-radius: 8px 0 0 0; +} +.aui_ne { + border-radius: 0 8px 0 0; +} +.aui_sw { + border-radius: 0 0 0 8px; +} +.aui_se { + border-radius: 0 0 8px 0; +} +.aui_nw,.aui_ne,.aui_sw,.aui_se { + width:8px; + height:8px; +} +.dr_tips .aui_nw,.dr_tips .aui_n,.dr_tips .aui_ne,.dr_tips .aui_w,.dr_tips .aui_e,.dr_tips .aui_sw,.dr_tips .aui_s,.dr_tips .aui_se { + background: none; + opacity: 0.2; + overflow: hidden; +} +.aui_nw,.aui_n,.aui_ne,.aui_w,.aui_e,.aui_sw,.aui_s,.aui_se { + background: none repeat scroll 0 0 #000000; + opacity: 0.2; + overflow: hidden; +} +.aui_state_drag .aui_outer,.aui_outer:active { + box-shadow:none; +} +.aui_titleBar { + position:relative; + height:100%; +} +.aui_title { + height:28px; + line-height:27px; + padding:0 28px 0 10px; + text-shadow:0 1px 0 rgba(255,255,255,.7); + font-weight:bold; + color: #336699!important; + font-family:Tahoma,Arial/9!important; +} +.aui_state_focus .aui_title { + color:#4c5a5f; +} + +.aui_state_drag .aui_titleBar { + box-shadow:none; +} +.aui_close { + padding:0; + top:4px; + right:4px; + width:21px; + height:21px; + line-height:21px; + font-size:18px; + color: #333333; + text-align:center; + overflow: hidden; + text-indent: -9999px; + background: url("icons/cls.gif") no-repeat scroll 0 0 transparent; +} +.aui_close:hover { + background-position: 0 -20px; +} +.aui_close:active { + box-shadow:none; +} +.aui_content { + color:#666; +} +.aui_state_focus .aui_content { + color:#000; +} +.aui_buttons { + background-color:#F6F6F6; + border-top:solid 1px #DADEE5; +} +.aui_state_noTitle .aui_nw,.aui_state_noTitle .aui_ne,.aui_state_noTitle .aui_sw,.aui_state_noTitle .aui_se { + width:3px; + height:3px; +} +.dr_tips .aui_inner { + background-color:transparent !important; +} +.aui_state_noTitle .aui_outer { + border:none 0; + box-shadow:none; +} + +.aui_state_noTitle .aui_titleBar { + bottom:0; + _bottom:0; + _margin-top:0; +} +.aui_state_noTitle .aui_close { + top:0; + right:0; + width:18px; + height:18px; + line-height:18px; + text-align:center; + text-indent:0; + font-size:18px; + text-decoration:none; + color:#214FA3; + background:none; + filter:none !important; +} +.aui_state_noTitle .aui_close:hover,.aui_state_noTitle .aui_close:active { + text-decoration:none; + color:#900; +} +.aui_state_noTitle .aui_dialog { + box-shadow:none; +} +.dr_tips { + padding-bottom:5px!important; +} +.dr_tipbox { + height: 54px; + line-height: 54px; + font-family:WEIRUANYAHEI; + font-size:14px; +} +.dr_tipbox .tip-l { + background-image: url("icons/tip_layer.png"); + background-position: -5px 0; + background-repeat: no-repeat; + float: left; + height: 54px; + width: 45px; +} +.dr_tipbox .tip-c { + background-image: url("icons/tip_layer.png"); + background-position: 0 -161px; + background-repeat: repeat-x; + float: left; + height: 54px; + line-height: 52px; + padding: 0 10px 0 5px; +} +.dr_tipbox .tip-r { + background-image: url("icons/tip_layer.png"); + background-position: 0 0; + background-repeat: no-repeat; + float: left; + height: 54px; + width: 5px; +} +.tip-success .tip-l { + background-position: -6px 0; +} +.tip-alert .tip-l { + background-position: -6px -54px; +} +.tip-error .tip-l { + background-position: -6px -108px; +} +.aui_border tr { + height:auto; +} \ No newline at end of file diff --git a/statics/js/skins/icons/cls.gif b/statics/js/skins/icons/cls.gif new file mode 100644 index 0000000..f3e30ac Binary files /dev/null and b/statics/js/skins/icons/cls.gif differ diff --git a/statics/js/skins/icons/error.png b/statics/js/skins/icons/error.png new file mode 100644 index 0000000..4929a2e Binary files /dev/null and b/statics/js/skins/icons/error.png differ diff --git a/statics/js/skins/icons/face-sad.png b/statics/js/skins/icons/face-sad.png new file mode 100644 index 0000000..5d819d8 Binary files /dev/null and b/statics/js/skins/icons/face-sad.png differ diff --git a/statics/js/skins/icons/face-smile.png b/statics/js/skins/icons/face-smile.png new file mode 100644 index 0000000..f952c13 Binary files /dev/null and b/statics/js/skins/icons/face-smile.png differ diff --git a/statics/js/skins/icons/loading.gif b/statics/js/skins/icons/loading.gif new file mode 100644 index 0000000..c69e937 Binary files /dev/null and b/statics/js/skins/icons/loading.gif differ diff --git a/statics/js/skins/icons/question.png b/statics/js/skins/icons/question.png new file mode 100644 index 0000000..941a4c9 Binary files /dev/null and b/statics/js/skins/icons/question.png differ diff --git a/statics/js/skins/icons/succeed.png b/statics/js/skins/icons/succeed.png new file mode 100644 index 0000000..c78d40b Binary files /dev/null and b/statics/js/skins/icons/succeed.png differ diff --git a/statics/js/skins/icons/tip_layer.png b/statics/js/skins/icons/tip_layer.png new file mode 100644 index 0000000..74ab5f5 Binary files /dev/null and b/statics/js/skins/icons/tip_layer.png differ diff --git a/statics/js/skins/icons/warning.png b/statics/js/skins/icons/warning.png new file mode 100644 index 0000000..bcaab1e Binary files /dev/null and b/statics/js/skins/icons/warning.png differ diff --git a/statics/js/skrollr.min.js b/statics/js/skrollr.min.js new file mode 100644 index 0000000..a3b4da8 --- /dev/null +++ b/statics/js/skrollr.min.js @@ -0,0 +1,506 @@ +/*! skrollr 0.6.30 (2015-08-12) | Alexander Prinzhorn - https://github.com/Prinzhorn/skrollr | Free to use under terms of MIT license */ ! function(a, b, c) { + "use strict"; + + function d(c) { + if (e = b.documentElement, f = b.body, T(), ha = this, c = c || {}, ma = c.constants || {}, c.easing) + for (var d in c.easing) W[d] = c.easing[d]; + ta = c.edgeStrategy || "set", ka = { + beforerender: c.beforerender, + render: c.render, + keyframe: c.keyframe + }, la = c.forceHeight !== !1, la && (Ka = c.scale || 1), na = c.mobileDeceleration || y, pa = c.smoothScrolling !== !1, qa = c.smoothScrollingDuration || A, ra = { + targetTop: ha.getScrollTop() + }, Sa = (c.mobileCheck || function() { + return /Android|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent || navigator.vendor || a.opera) + })(), Sa ? (ja = b.getElementById(c.skrollrBody || z), ja && ga(), X(), Ea(e, [s, v], [t])) : Ea(e, [s, u], [t]), ha.refresh(), wa(a, "resize orientationchange", function() { + var a = e.clientWidth, + b = e.clientHeight; + (b !== Pa || a !== Oa) && (Pa = b, Oa = a, Qa = !0) + }); + var g = U(); + return function h() { + $(), va = g(h) + }(), ha + } + var e, f, g = { + get: function() { + return ha + }, + init: function(a) { + return ha || new d(a) + }, + VERSION: "0.6.30" + }, + h = Object.prototype.hasOwnProperty, + i = a.Math, + j = a.getComputedStyle, + k = "touchstart", + l = "touchmove", + m = "touchcancel", + n = "touchend", + o = "skrollable", + p = o + "-before", + q = o + "-between", + r = o + "-after", + s = "skrollr", + t = "no-" + s, + u = s + "-desktop", + v = s + "-mobile", + w = "linear", + x = 1e3, + y = .004, + z = "skrollr-body", + A = 200, + B = "start", + C = "end", + D = "center", + E = "bottom", + F = "___skrollable_id", + G = /^(?:input|textarea|button|select)$/i, + H = /^\s+|\s+$/g, + I = /^data(?:-(_\w+))?(?:-?(-?\d*\.?\d+p?))?(?:-?(start|end|top|center|bottom))?(?:-?(top|center|bottom))?$/, + J = /\s*(@?[\w\-\[\]]+)\s*:\s*(.+?)\s*(?:;|$)/gi, + K = /^(@?[a-z\-]+)\[(\w+)\]$/, + L = /-([a-z0-9_])/g, + M = function(a, b) { + return b.toUpperCase() + }, + N = /[\-+]?[\d]*\.?[\d]+/g, + O = /\{\?\}/g, + P = /rgba?\(\s*-?\d+\s*,\s*-?\d+\s*,\s*-?\d+/g, + Q = /[a-z\-]+-gradient/g, + R = "", + S = "", + T = function() { + var a = /^(?:O|Moz|webkit|ms)|(?:-(?:o|moz|webkit|ms)-)/; + if (j) { + var b = j(f, null); + for (var c in b) + if (R = c.match(a) || +c == c && b[c].match(a)) break; + if (!R) return void(R = S = ""); + R = R[0], "-" === R.slice(0, 1) ? (S = R, R = { + "-webkit-": "webkit", + "-moz-": "Moz", + "-ms-": "ms", + "-o-": "O" + } [R]) : S = "-" + R.toLowerCase() + "-" + } + }, + U = function() { + var b = a.requestAnimationFrame || a[R.toLowerCase() + "RequestAnimationFrame"], + c = Ha(); + return (Sa || !b) && (b = function(b) { + var d = Ha() - c, + e = i.max(0, 1e3 / 60 - d); + return a.setTimeout(function() { + c = Ha(), b() + }, e) + }), b + }, + V = function() { + var b = a.cancelAnimationFrame || a[R.toLowerCase() + "CancelAnimationFrame"]; + return (Sa || !b) && (b = function(b) { + return a.clearTimeout(b) + }), b + }, + W = { + begin: function() { + return 0 + }, + end: function() { + return 1 + }, + linear: function(a) { + return a + }, + quadratic: function(a) { + return a * a + }, + cubic: function(a) { + return a * a * a + }, + swing: function(a) { + return -i.cos(a * i.PI) / 2 + .5 + }, + sqrt: function(a) { + return i.sqrt(a) + }, + outCubic: function(a) { + return i.pow(a - 1, 3) + 1 + }, + bounce: function(a) { + var b; + if (.5083 >= a) b = 3; + else if (.8489 >= a) b = 9; + else if (.96208 >= a) b = 27; + else { + if (!(.99981 >= a)) return 1; + b = 91 + } + return 1 - i.abs(3 * i.cos(a * b * 1.028) / b) + } + }; + d.prototype.refresh = function(a) { + var d, e, f = !1; + for (a === c ? (f = !0, ia = [], Ra = 0, a = b.getElementsByTagName("*")) : a.length === c && (a = [a]), d = 0, e = a.length; e > d; d++) { + var g = a[d], + h = g, + i = [], + j = pa, + k = ta, + l = !1; + if (f && F in g && delete g[F], g.attributes) { + for (var m = 0, n = g.attributes.length; n > m; m++) { + var p = g.attributes[m]; + if ("data-anchor-target" !== p.name) + if ("data-smooth-scrolling" !== p.name) + if ("data-edge-strategy" !== p.name) + if ("data-emit-events" !== p.name) { + var q = p.name.match(I); + if (null !== q) { + var r = { + props: p.value, + element: g, + eventType: p.name.replace(L, M) + }; + i.push(r); + var s = q[1]; + s && (r.constant = s.substr(1)); + var t = q[2]; + /p$/.test(t) ? (r.isPercentage = !0, r.offset = (0 | t.slice(0, -1)) / 100) : r.offset = 0 | t; + var u = q[3], + v = q[4] || u; + u && u !== B && u !== C ? (r.mode = "relative", r.anchors = [u, v]) : (r.mode = "absolute", u === C ? r.isEnd = !0 : r.isPercentage || (r.offset = r.offset * Ka)) + } + } else l = !0; + else k = p.value; + else j = "off" !== p.value; + else if (h = b.querySelector(p.value), null === h) throw 'Unable to find anchor target "' + p.value + '"' + } + if (i.length) { + var w, x, y; + !f && F in g ? (y = g[F], w = ia[y].styleAttr, x = ia[y].classAttr) : (y = g[F] = Ra++, w = g.style.cssText, x = Da(g)), ia[y] = { + element: g, + styleAttr: w, + classAttr: x, + anchorTarget: h, + keyFrames: i, + smoothScrolling: j, + edgeStrategy: k, + emitEvents: l, + lastFrameIndex: -1 + }, Ea(g, [o], []) + } + } + } + for (Aa(), d = 0, e = a.length; e > d; d++) { + var z = ia[a[d][F]]; + z !== c && (_(z), ba(z)) + } + return ha + }, d.prototype.relativeToAbsolute = function(a, b, c) { + var d = e.clientHeight, + f = a.getBoundingClientRect(), + g = f.top, + h = f.bottom - f.top; + return b === E ? g -= d : b === D && (g -= d / 2), c === E ? g += h : c === D && (g += h / 2), g += ha.getScrollTop(), g + .5 | 0 + }, d.prototype.animateTo = function(a, b) { + b = b || {}; + var d = Ha(), + e = ha.getScrollTop(), + f = b.duration === c ? x : b.duration; + return oa = { + startTop: e, + topDiff: a - e, + targetTop: a, + duration: f, + startTime: d, + endTime: d + f, + easing: W[b.easing || w], + done: b.done + }, oa.topDiff || (oa.done && oa.done.call(ha, !1), oa = c), ha + }, d.prototype.stopAnimateTo = function() { + oa && oa.done && oa.done.call(ha, !0), oa = c + }, d.prototype.isAnimatingTo = function() { + return !!oa + }, d.prototype.isMobile = function() { + return Sa + }, d.prototype.setScrollTop = function(b, c) { + return sa = c === !0, Sa ? Ta = i.min(i.max(b, 0), Ja) : a.scrollTo(0, b), ha + }, d.prototype.getScrollTop = function() { + return Sa ? Ta : a.pageYOffset || e.scrollTop || f.scrollTop || 0 + }, d.prototype.getMaxScrollTop = function() { + return Ja + }, d.prototype.on = function(a, b) { + return ka[a] = b, ha + }, d.prototype.off = function(a) { + return delete ka[a], ha + }, d.prototype.destroy = function() { + var a = V(); + a(va), ya(), Ea(e, [t], [s, u, v]); + for (var b = 0, d = ia.length; d > b; b++) fa(ia[b].element); + e.style.overflow = f.style.overflow = "", e.style.height = f.style.height = "", ja && g.setStyle(ja, "transform", "none"), ha = c, ja = c, ka = c, la = c, Ja = 0, Ka = 1, ma = c, na = c, La = "down", Ma = -1, Oa = 0, Pa = 0, Qa = !1, oa = c, pa = c, qa = c, ra = c, sa = c, Ra = 0, ta = c, Sa = !1, Ta = 0, ua = c + }; + var X = function() { + var d, g, h, j, o, p, q, r, s, t, u, v; + wa(e, [k, l, m, n].join(" "), function(a) { + var e = a.changedTouches[0]; + for (j = a.target; 3 === j.nodeType;) j = j.parentNode; + switch (o = e.clientY, p = e.clientX, t = a.timeStamp, G.test(j.tagName) || a.preventDefault(), a.type) { + case k: + d && d.blur(), ha.stopAnimateTo(), d = j, g = q = o, h = p, s = t; + break; + case l: + G.test(j.tagName) && b.activeElement !== j && a.preventDefault(), r = o - q, v = t - u, ha.setScrollTop(Ta - r, !0), q = o, u = t; + break; + default: + case m: + case n: + var f = g - o, + w = h - p, + x = w * w + f * f; + if (49 > x) { + if (!G.test(d.tagName)) { + d.focus(); + var y = b.createEvent("MouseEvents"); + y.initMouseEvent("click", !0, !0, a.view, 1, e.screenX, e.screenY, e.clientX, e.clientY, a.ctrlKey, a.altKey, a.shiftKey, a.metaKey, 0, null), d.dispatchEvent(y) + } + return + } + d = c; + var z = r / v; + z = i.max(i.min(z, 3), -3); + var A = i.abs(z / na), + B = z * A + .5 * na * A * A, + C = ha.getScrollTop() - B, + D = 0; + C > Ja ? (D = (Ja - C) / B, C = Ja) : 0 > C && (D = -C / B, C = 0), A *= 1 - D, ha.animateTo(C + .5 | 0, { + easing: "outCubic", + duration: A + }) + } + }), a.scrollTo(0, 0), e.style.overflow = f.style.overflow = "hidden" + }, + Y = function() { + var a, b, c, d, f, g, h, j, k, l, m, n = e.clientHeight, + o = Ba(); + for (j = 0, k = ia.length; k > j; j++) + for (a = ia[j], b = a.element, c = a.anchorTarget, d = a.keyFrames, f = 0, g = d.length; g > f; f++) h = d[f], l = h.offset, m = o[h.constant] || 0, h.frame = l, h.isPercentage && (l *= n, h.frame = l), "relative" === h.mode && (fa(b), h.frame = ha.relativeToAbsolute(c, h.anchors[0], h.anchors[1]) - l, fa(b, !0)), h.frame += m, la && !h.isEnd && h.frame > Ja && (Ja = h.frame); + for (Ja = i.max(Ja, Ca()), j = 0, k = ia.length; k > j; j++) { + for (a = ia[j], d = a.keyFrames, f = 0, g = d.length; g > f; f++) h = d[f], m = o[h.constant] || 0, h.isEnd && (h.frame = Ja - h.offset + m); + a.keyFrames.sort(Ia) + } + }, + Z = function(a, b) { + for (var c = 0, d = ia.length; d > c; c++) { + var e, f, i = ia[c], + j = i.element, + k = i.smoothScrolling ? a : b, + l = i.keyFrames, + m = l.length, + n = l[0], + s = l[l.length - 1], + t = k < n.frame, + u = k > s.frame, + v = t ? n : s, + w = i.emitEvents, + x = i.lastFrameIndex; + if (t || u) { + if (t && -1 === i.edge || u && 1 === i.edge) continue; + switch (t ? (Ea(j, [p], [r, q]), w && x > -1 && (za(j, n.eventType, La), i.lastFrameIndex = -1)) : (Ea(j, [r], [p, q]), w && m > x && (za(j, s.eventType, La), i.lastFrameIndex = m)), i.edge = t ? -1 : 1, i.edgeStrategy) { + case "reset": + fa(j); + continue; + case "ease": + k = v.frame; + break; + default: + case "set": + var y = v.props; + for (e in y) h.call(y, e) && (f = ea(y[e].value), 0 === e.indexOf("@") ? j.setAttribute(e.substr(1), f) : g.setStyle(j, e, f)); + continue + } + } else 0 !== i.edge && (Ea(j, [o, q], [p, r]), i.edge = 0); + for (var z = 0; m - 1 > z; z++) + if (k >= l[z].frame && k <= l[z + 1].frame) { + var A = l[z], + B = l[z + 1]; + for (e in A.props) + if (h.call(A.props, e)) { + var C = (k - A.frame) / (B.frame - A.frame); + C = A.props[e].easing(C), f = da(A.props[e].value, B.props[e].value, C), f = ea(f), 0 === e.indexOf("@") ? j.setAttribute(e.substr(1), f) : g.setStyle(j, e, f) + } w && x !== z && ("down" === La ? za(j, A.eventType, La) : za(j, B.eventType, La), i.lastFrameIndex = z); + break + } + } + }, + $ = function() { + Qa && (Qa = !1, Aa()); + var a, b, d = ha.getScrollTop(), + e = Ha(); + if (oa) e >= oa.endTime ? (d = oa.targetTop, a = oa.done, oa = c) : (b = oa.easing((e - oa.startTime) / oa.duration), d = oa.startTop + b * oa.topDiff | 0), ha.setScrollTop(d, !0); + else if (!sa) { + var f = ra.targetTop - d; + f && (ra = { + startTop: Ma, + topDiff: d - Ma, + targetTop: d, + startTime: Na, + endTime: Na + qa + }), e <= ra.endTime && (b = W.sqrt((e - ra.startTime) / qa), d = ra.startTop + b * ra.topDiff | 0) + } + if (sa || Ma !== d) { + La = d > Ma ? "down" : Ma > d ? "up" : La, sa = !1; + var h = { + curTop: d, + lastTop: Ma, + maxTop: Ja, + direction: La + }, + i = ka.beforerender && ka.beforerender.call(ha, h); + i !== !1 && (Z(d, ha.getScrollTop()), Sa && ja && g.setStyle(ja, "transform", "translate(0, " + -Ta + "px) " + ua), Ma = d, ka.render && ka.render.call(ha, h)), a && a.call(ha, !1) + } + Na = e + }, + _ = function(a) { + for (var b = 0, c = a.keyFrames.length; c > b; b++) { + for (var d, e, f, g, h = a.keyFrames[b], i = {}; null !== (g = J.exec(h.props));) f = g[1], e = g[2], d = f.match(K), null !== d ? (f = d[1], d = d[2]) : d = w, e = e.indexOf("!") ? aa(e) : [e.slice(1)], i[f] = { + value: e, + easing: W[d] + }; + h.props = i + } + }, + aa = function(a) { + var b = []; + return P.lastIndex = 0, a = a.replace(P, function(a) { + return a.replace(N, function(a) { + return a / 255 * 100 + "%" + }) + }), S && (Q.lastIndex = 0, a = a.replace(Q, function(a) { + return S + a + })), a = a.replace(N, function(a) { + return b.push(+a), "{?}" + }), b.unshift(a), b + }, + ba = function(a) { + var b, c, d = {}; + for (b = 0, c = a.keyFrames.length; c > b; b++) ca(a.keyFrames[b], d); + for (d = {}, b = a.keyFrames.length - 1; b >= 0; b--) ca(a.keyFrames[b], d) + }, + ca = function(a, b) { + var c; + for (c in b) h.call(a.props, c) || (a.props[c] = b[c]); + for (c in a.props) b[c] = a.props[c] + }, + da = function(a, b, c) { + var d, e = a.length; + if (e !== b.length) throw "Can't interpolate between \"" + a[0] + '" and "' + b[0] + '"'; + var f = [a[0]]; + for (d = 1; e > d; d++) f[d] = a[d] + (b[d] - a[d]) * c; + return f + }, + ea = function(a) { + var b = 1; + return O.lastIndex = 0, a[0].replace(O, function() { + return a[b++] + }) + }, + fa = function(a, b) { + a = [].concat(a); + for (var c, d, e = 0, f = a.length; f > e; e++) d = a[e], c = ia[d[F]], c && (b ? (d.style.cssText = c.dirtyStyleAttr, Ea(d, c.dirtyClassAttr)) : (c.dirtyStyleAttr = d.style.cssText, c.dirtyClassAttr = Da(d), d.style.cssText = c.styleAttr, Ea(d, c.classAttr))) + }, + ga = function() { + ua = "translateZ(0)", g.setStyle(ja, "transform", ua); + var a = j(ja), + b = a.getPropertyValue("transform"), + c = a.getPropertyValue(S + "transform"), + d = b && "none" !== b || c && "none" !== c; + d || (ua = "") + }; + g.setStyle = function(a, b, c) { + var d = a.style; + if (b = b.replace(L, M).replace("-", ""), "zIndex" === b) isNaN(c) ? d[b] = c : d[b] = "" + (0 | c); + else if ("float" === b) d.styleFloat = d.cssFloat = c; + else try { + R && (d[R + b.slice(0, 1).toUpperCase() + b.slice(1)] = c), d[b] = c + } catch (e) {} + }; + var ha, ia, ja, ka, la, ma, na, oa, pa, qa, ra, sa, ta, ua, va, wa = g.addEvent = function(b, c, d) { + var e = function(b) { + return b = b || a.event, b.target || (b.target = b.srcElement), b.preventDefault || (b.preventDefault = function() { + b.returnValue = !1, b.defaultPrevented = !0 + }), d.call(this, b) + }; + c = c.split(" "); + for (var f, g = 0, h = c.length; h > g; g++) f = c[g], b.addEventListener ? b.addEventListener(f, d, !1) : b.attachEvent("on" + f, e), Ua.push({ + element: b, + name: f, + listener: d + }) + }, + xa = g.removeEvent = function(a, b, c) { + b = b.split(" "); + for (var d = 0, e = b.length; e > d; d++) a.removeEventListener ? a.removeEventListener(b[d], c, !1) : a.detachEvent("on" + b[d], c) + }, + ya = function() { + for (var a, b = 0, c = Ua.length; c > b; b++) a = Ua[b], xa(a.element, a.name, a.listener); + Ua = [] + }, + za = function(a, b, c) { + ka.keyframe && ka.keyframe.call(ha, a, b, c) + }, + Aa = function() { + var a = ha.getScrollTop(); + Ja = 0, la && !Sa && (f.style.height = ""), Y(), la && !Sa && (f.style.height = Ja + e.clientHeight + "px"), Sa ? ha.setScrollTop(i.min(ha.getScrollTop(), Ja)) : ha.setScrollTop(a, !0), sa = !0 + }, + Ba = function() { + var a, b, c = e.clientHeight, + d = {}; + for (a in ma) b = ma[a], "function" == typeof b ? b = b.call(ha) : /p$/.test(b) && (b = b.slice(0, -1) / 100 * c), d[a] = b; + return d + }, + Ca = function() { + var a, b = 0; + return ja && (b = i.max(ja.offsetHeight, ja.scrollHeight)), a = i.max(b, f.scrollHeight, f.offsetHeight, e.scrollHeight, e.offsetHeight, e.clientHeight), a - e.clientHeight + }, + Da = function(b) { + var c = "className"; + return a.SVGElement && b instanceof a.SVGElement && (b = b[c], c = "baseVal"), b[c] + }, + Ea = function(b, d, e) { + var f = "className"; + if (a.SVGElement && b instanceof a.SVGElement && (b = b[f], f = "baseVal"), e === c) return void(b[f] = d); + for (var g = b[f], h = 0, i = e.length; i > h; h++) g = Ga(g).replace(Ga(e[h]), " "); + g = Fa(g); + for (var j = 0, k = d.length; k > j; j++) - 1 === Ga(g).indexOf(Ga(d[j])) && (g += " " + d[j]); + b[f] = Fa(g) + }, + Fa = function(a) { + return a.replace(H, "") + }, + Ga = function(a) { + return " " + a + " " + }, + Ha = Date.now || function() { + return +new Date + }, + Ia = function(a, b) { + return a.frame - b.frame + }, + Ja = 0, + Ka = 1, + La = "down", + Ma = -1, + Na = Ha(), + Oa = 0, + Pa = 0, + Qa = !1, + Ra = 0, + Sa = !1, + Ta = 0, + Ua = []; + "function" == typeof define && define.amd ? define([], function() { + return g + }) : "undefined" != typeof module && module.exports ? module.exports = g : a.skrollr = g +}(window, document); \ No newline at end of file diff --git a/statics/js/slick.min.js b/statics/js/slick.min.js new file mode 100644 index 0000000..914c2f2 --- /dev/null +++ b/statics/js/slick.min.js @@ -0,0 +1,646 @@ +/* + _ _ _ _ + ___| (_) ___| | __ (_)___ +/ __| | |/ __| |/ / | / __| +\__ \ | | (__| < _ | \__ \ +|___/_|_|\___|_|\_(_)/ |___/ + |__/ + + Version: 1.5.9 + Author: Ken Wheeler + Website: http://kenwheeler.github.io + Docs: http://kenwheeler.github.io/slick + Repo: http://github.com/kenwheeler/slick + Issues: http://github.com/kenwheeler/slick/issues + + */ +! function(a) { + "use strict"; + "function" == typeof define && define.amd ? define(["jquery"], a) : "undefined" != typeof exports ? module.exports = a(require("jquery")) : a(jQuery) +}(function(a) { + "use strict"; + var b = window.Slick || {}; + b = function() { + function c(c, d) { + var f, e = this; + e.defaults = { + accessibility: !0, + adaptiveHeight: !1, + appendArrows: a(c), + appendDots: a(c), + arrows: !0, + asNavFor: null, + prevArrow: '', + nextArrow: '', + autoplay: !1, + autoplaySpeed: 3e3, + centerMode: !1, + centerPadding: "50px", + cssEase: "ease", + customPaging: function(a, b) { + return '" + }, + dots: !1, + dotsClass: "slick-dots", + draggable: !0, + easing: "linear", + edgeFriction: .35, + fade: !1, + focusOnSelect: !1, + infinite: !0, + initialSlide: 0, + lazyLoad: "ondemand", + mobileFirst: !1, + pauseOnHover: !0, + pauseOnDotsHover: !1, + respondTo: "window", + responsive: null, + rows: 1, + rtl: !1, + slide: "", + slidesPerRow: 1, + slidesToShow: 1, + slidesToScroll: 1, + speed: 500, + swipe: !0, + swipeToSlide: !1, + touchMove: !0, + touchThreshold: 5, + useCSS: !0, + useTransform: !1, + variableWidth: !1, + vertical: !1, + verticalSwiping: !1, + waitForAnimate: !0, + zIndex: 1e3 + }, e.initials = { + animating: !1, + dragging: !1, + autoPlayTimer: null, + currentDirection: 0, + currentLeft: null, + currentSlide: 0, + direction: 1, + $dots: null, + listWidth: null, + listHeight: null, + loadIndex: 0, + $nextArrow: null, + $prevArrow: null, + slideCount: null, + slideWidth: null, + $slideTrack: null, + $slides: null, + sliding: !1, + slideOffset: 0, + swipeLeft: null, + $list: null, + touchObject: {}, + transformsEnabled: !1, + unslicked: !1 + }, a.extend(e, e.initials), e.activeBreakpoint = null, e.animType = null, e.animProp = null, e.breakpoints = [], e.breakpointSettings = [], e.cssTransitions = !1, e.hidden = "hidden", e.paused = !1, e.positionProp = null, e.respondTo = null, e.rowCount = 1, e.shouldClick = !0, e.$slider = a(c), e.$slidesCache = null, e.transformType = null, e.transitionType = null, e.visibilityChange = "visibilitychange", e.windowWidth = 0, e.windowTimer = null, f = a(c).data("slick") || {}, e.options = a.extend({}, e.defaults, f, d), e.currentSlide = e.options.initialSlide, e.originalSettings = e.options, "undefined" != typeof document.mozHidden ? (e.hidden = "mozHidden", e.visibilityChange = "mozvisibilitychange") : "undefined" != typeof document.webkitHidden && (e.hidden = "webkitHidden", e.visibilityChange = "webkitvisibilitychange"), e.autoPlay = a.proxy(e.autoPlay, e), e.autoPlayClear = a.proxy(e.autoPlayClear, e), e.changeSlide = a.proxy(e.changeSlide, e), e.clickHandler = a.proxy(e.clickHandler, e), e.selectHandler = a.proxy(e.selectHandler, e), e.setPosition = a.proxy(e.setPosition, e), e.swipeHandler = a.proxy(e.swipeHandler, e), e.dragHandler = a.proxy(e.dragHandler, e), e.keyHandler = a.proxy(e.keyHandler, e), e.autoPlayIterator = a.proxy(e.autoPlayIterator, e), e.instanceUid = b++, e.htmlExpr = /^(?:\s*(<[\w\W]+>)[^>]*)$/, e.registerBreakpoints(), e.init(!0), e.checkResponsive(!0) + } + var b = 0; + return c + }(), b.prototype.addSlide = b.prototype.slickAdd = function(b, c, d) { + var e = this; + if ("boolean" == typeof c) d = c, c = null; + else if (0 > c || c >= e.slideCount) return !1; + e.unload(), "number" == typeof c ? 0 === c && 0 === e.$slides.length ? a(b).appendTo(e.$slideTrack) : d ? a(b).insertBefore(e.$slides.eq(c)) : a(b).insertAfter(e.$slides.eq(c)) : d === !0 ? a(b).prependTo(e.$slideTrack) : a(b).appendTo(e.$slideTrack), e.$slides = e.$slideTrack.children(this.options.slide), e.$slideTrack.children(this.options.slide).detach(), e.$slideTrack.append(e.$slides), e.$slides.each(function(b, c) { + a(c).attr("data-slick-index", b) + }), e.$slidesCache = e.$slides, e.reinit() + }, b.prototype.animateHeight = function() { + var a = this; + if (1 === a.options.slidesToShow && a.options.adaptiveHeight === !0 && a.options.vertical === !1) { + var b = a.$slides.eq(a.currentSlide).outerHeight(!0); + a.$list.animate({ + height: b + }, a.options.speed) + } + }, b.prototype.animateSlide = function(b, c) { + var d = {}, + e = this; + e.animateHeight(), e.options.rtl === !0 && e.options.vertical === !1 && (b = -b), e.transformsEnabled === !1 ? e.options.vertical === !1 ? e.$slideTrack.animate({ + left: b + }, e.options.speed, e.options.easing, c) : e.$slideTrack.animate({ + top: b + }, e.options.speed, e.options.easing, c) : e.cssTransitions === !1 ? (e.options.rtl === !0 && (e.currentLeft = -e.currentLeft), a({ + animStart: e.currentLeft + }).animate({ + animStart: b + }, { + duration: e.options.speed, + easing: e.options.easing, + step: function(a) { + a = Math.ceil(a), e.options.vertical === !1 ? (d[e.animType] = "translate(" + a + "px, 0px)", e.$slideTrack.css(d)) : (d[e.animType] = "translate(0px," + a + "px)", e.$slideTrack.css(d)) + }, + complete: function() { + c && c.call() + } + })) : (e.applyTransition(), b = Math.ceil(b), e.options.vertical === !1 ? d[e.animType] = "translate3d(" + b + "px, 0px, 0px)" : d[e.animType] = "translate3d(0px," + b + "px, 0px)", e.$slideTrack.css(d), c && setTimeout(function() { + e.disableTransition(), c.call() + }, e.options.speed)) + }, b.prototype.asNavFor = function(b) { + var c = this, + d = c.options.asNavFor; + d && null !== d && (d = a(d).not(c.$slider)), null !== d && "object" == typeof d && d.each(function() { + var c = a(this).slick("getSlick"); + c.unslicked || c.slideHandler(b, !0) + }) + }, b.prototype.applyTransition = function(a) { + var b = this, + c = {}; + b.options.fade === !1 ? c[b.transitionType] = b.transformType + " " + b.options.speed + "ms " + b.options.cssEase : c[b.transitionType] = "opacity " + b.options.speed + "ms " + b.options.cssEase, b.options.fade === !1 ? b.$slideTrack.css(c) : b.$slides.eq(a).css(c) + }, b.prototype.autoPlay = function() { + var a = this; + a.autoPlayTimer && clearInterval(a.autoPlayTimer), a.slideCount > a.options.slidesToShow && a.paused !== !0 && (a.autoPlayTimer = setInterval(a.autoPlayIterator, a.options.autoplaySpeed)) + }, b.prototype.autoPlayClear = function() { + var a = this; + a.autoPlayTimer && clearInterval(a.autoPlayTimer) + }, b.prototype.autoPlayIterator = function() { + var a = this; + a.options.infinite === !1 ? 1 === a.direction ? (a.currentSlide + 1 === a.slideCount - 1 && (a.direction = 0), a.slideHandler(a.currentSlide + a.options.slidesToScroll)) : (a.currentSlide - 1 === 0 && (a.direction = 1), a.slideHandler(a.currentSlide - a.options.slidesToScroll)) : a.slideHandler(a.currentSlide + a.options.slidesToScroll) + }, b.prototype.buildArrows = function() { + var b = this; + b.options.arrows === !0 && (b.$prevArrow = a(b.options.prevArrow).addClass("slick-arrow"), b.$nextArrow = a(b.options.nextArrow).addClass("slick-arrow"), b.slideCount > b.options.slidesToShow ? (b.$prevArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"), b.$nextArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"), b.htmlExpr.test(b.options.prevArrow) && b.$prevArrow.prependTo(b.options.appendArrows), b.htmlExpr.test(b.options.nextArrow) && b.$nextArrow.appendTo(b.options.appendArrows), b.options.infinite !== !0 && b.$prevArrow.addClass("slick-disabled").attr("aria-disabled", "true")) : b.$prevArrow.add(b.$nextArrow).addClass("slick-hidden").attr({ + "aria-disabled": "true", + tabindex: "-1" + })) + }, b.prototype.buildDots = function() { + var c, d, b = this; + if (b.options.dots === !0 && b.slideCount > b.options.slidesToShow) { + for (d = '
    ', c = 0; c <= b.getDotCount(); c += 1) d += "
  • " + b.options.customPaging.call(this, b, c) + "
  • "; + d += "
", b.$dots = a(d).appendTo(b.options.appendDots), b.$dots.find("li").first().addClass("slick-active").attr("aria-hidden", "false") + } + }, b.prototype.buildOut = function() { + var b = this; + b.$slides = b.$slider.children(b.options.slide + ":not(.slick-cloned)").addClass("slick-slide"), b.slideCount = b.$slides.length, b.$slides.each(function(b, c) { + a(c).attr("data-slick-index", b).data("originalStyling", a(c).attr("style") || "") + }), b.$slider.addClass("slick-slider"), b.$slideTrack = 0 === b.slideCount ? a('
').appendTo(b.$slider) : b.$slides.wrapAll('
').parent(), b.$list = b.$slideTrack.wrap('
').parent(), b.$slideTrack.css("opacity", 0), (b.options.centerMode === !0 || b.options.swipeToSlide === !0) && (b.options.slidesToScroll = 1), a("img[data-lazy]", b.$slider).not("[src]").addClass("slick-loading"), b.setupInfinite(), b.buildArrows(), b.buildDots(), b.updateDots(), b.setSlideClasses("number" == typeof b.currentSlide ? b.currentSlide : 0), b.options.draggable === !0 && b.$list.addClass("draggable") + }, b.prototype.buildRows = function() { + var b, c, d, e, f, g, h, a = this; + if (e = document.createDocumentFragment(), g = a.$slider.children(), a.options.rows > 1) { + for (h = a.options.slidesPerRow * a.options.rows, f = Math.ceil(g.length / h), b = 0; f > b; b++) { + var i = document.createElement("div"); + for (c = 0; c < a.options.rows; c++) { + var j = document.createElement("div"); + for (d = 0; d < a.options.slidesPerRow; d++) { + var k = b * h + (c * a.options.slidesPerRow + d); + g.get(k) && j.appendChild(g.get(k)) + } + i.appendChild(j) + } + e.appendChild(i) + } + a.$slider.html(e), a.$slider.children().children().children().css({ + width: 100 / a.options.slidesPerRow + "%", + display: "inline-block" + }) + } + }, b.prototype.checkResponsive = function(b, c) { + var e, f, g, d = this, + h = !1, + i = d.$slider.width(), + j = window.innerWidth || a(window).width(); + if ("window" === d.respondTo ? g = j : "slider" === d.respondTo ? g = i : "min" === d.respondTo && (g = Math.min(j, i)), d.options.responsive && d.options.responsive.length && null !== d.options.responsive) { + f = null; + for (e in d.breakpoints) d.breakpoints.hasOwnProperty(e) && (d.originalSettings.mobileFirst === !1 ? g < d.breakpoints[e] && (f = d.breakpoints[e]) : g > d.breakpoints[e] && (f = d.breakpoints[e])); + null !== f ? null !== d.activeBreakpoint ? (f !== d.activeBreakpoint || c) && (d.activeBreakpoint = f, "unslick" === d.breakpointSettings[f] ? d.unslick(f) : (d.options = a.extend({}, d.originalSettings, d.breakpointSettings[f]), b === !0 && (d.currentSlide = d.options.initialSlide), d.refresh(b)), h = f) : (d.activeBreakpoint = f, "unslick" === d.breakpointSettings[f] ? d.unslick(f) : (d.options = a.extend({}, d.originalSettings, d.breakpointSettings[f]), b === !0 && (d.currentSlide = d.options.initialSlide), d.refresh(b)), h = f) : null !== d.activeBreakpoint && (d.activeBreakpoint = null, d.options = d.originalSettings, b === !0 && (d.currentSlide = d.options.initialSlide), d.refresh(b), h = f), b || h === !1 || d.$slider.trigger("breakpoint", [d, h]) + } + }, b.prototype.changeSlide = function(b, c) { + var f, g, h, d = this, + e = a(b.target); + switch (e.is("a") && b.preventDefault(), e.is("li") || (e = e.closest("li")), h = d.slideCount % d.options.slidesToScroll !== 0, f = h ? 0 : (d.slideCount - d.currentSlide) % d.options.slidesToScroll, b.data.message) { + case "previous": + g = 0 === f ? d.options.slidesToScroll : d.options.slidesToShow - f, d.slideCount > d.options.slidesToShow && d.slideHandler(d.currentSlide - g, !1, c); + break; + case "next": + g = 0 === f ? d.options.slidesToScroll : f, d.slideCount > d.options.slidesToShow && d.slideHandler(d.currentSlide + g, !1, c); + break; + case "index": + var i = 0 === b.data.index ? 0 : b.data.index || e.index() * d.options.slidesToScroll; + d.slideHandler(d.checkNavigable(i), !1, c), e.children().trigger("focus"); + break; + default: + return + } + }, b.prototype.checkNavigable = function(a) { + var c, d, b = this; + if (c = b.getNavigableIndexes(), d = 0, a > c[c.length - 1]) a = c[c.length - 1]; + else + for (var e in c) { + if (a < c[e]) { + a = d; + break + } + d = c[e] + } + return a + }, b.prototype.cleanUpEvents = function() { + var b = this; + b.options.dots && null !== b.$dots && (a("li", b.$dots).off("click.slick", b.changeSlide), b.options.pauseOnDotsHover === !0 && b.options.autoplay === !0 && a("li", b.$dots).off("mouseenter.slick", a.proxy(b.setPaused, b, !0)).off("mouseleave.slick", a.proxy(b.setPaused, b, !1))), b.options.arrows === !0 && b.slideCount > b.options.slidesToShow && (b.$prevArrow && b.$prevArrow.off("click.slick", b.changeSlide), b.$nextArrow && b.$nextArrow.off("click.slick", b.changeSlide)), b.$list.off("touchstart.slick mousedown.slick", b.swipeHandler), b.$list.off("touchmove.slick mousemove.slick", b.swipeHandler), b.$list.off("touchend.slick mouseup.slick", b.swipeHandler), b.$list.off("touchcancel.slick mouseleave.slick", b.swipeHandler), b.$list.off("click.slick", b.clickHandler), a(document).off(b.visibilityChange, b.visibility), b.$list.off("mouseenter.slick", a.proxy(b.setPaused, b, !0)), b.$list.off("mouseleave.slick", a.proxy(b.setPaused, b, !1)), b.options.accessibility === !0 && b.$list.off("keydown.slick", b.keyHandler), b.options.focusOnSelect === !0 && a(b.$slideTrack).children().off("click.slick", b.selectHandler), a(window).off("orientationchange.slick.slick-" + b.instanceUid, b.orientationChange), a(window).off("resize.slick.slick-" + b.instanceUid, b.resize), a("[draggable!=true]", b.$slideTrack).off("dragstart", b.preventDefault), a(window).off("load.slick.slick-" + b.instanceUid, b.setPosition), a(document).off("ready.slick.slick-" + b.instanceUid, b.setPosition) + }, b.prototype.cleanUpRows = function() { + var b, a = this; + a.options.rows > 1 && (b = a.$slides.children().children(), b.removeAttr("style"), a.$slider.html(b)) + }, b.prototype.clickHandler = function(a) { + var b = this; + b.shouldClick === !1 && (a.stopImmediatePropagation(), a.stopPropagation(), a.preventDefault()) + }, b.prototype.destroy = function(b) { + var c = this; + c.autoPlayClear(), c.touchObject = {}, c.cleanUpEvents(), a(".slick-cloned", c.$slider).detach(), c.$dots && c.$dots.remove(), c.$prevArrow && c.$prevArrow.length && (c.$prevArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display", ""), c.htmlExpr.test(c.options.prevArrow) && c.$prevArrow.remove()), c.$nextArrow && c.$nextArrow.length && (c.$nextArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display", ""), c.htmlExpr.test(c.options.nextArrow) && c.$nextArrow.remove()), c.$slides && (c.$slides.removeClass("slick-slide slick-active slick-center slick-visible slick-current").removeAttr("aria-hidden").removeAttr("data-slick-index").each(function() { + a(this).attr("style", a(this).data("originalStyling")) + }), c.$slideTrack.children(this.options.slide).detach(), c.$slideTrack.detach(), c.$list.detach(), c.$slider.append(c.$slides)), c.cleanUpRows(), c.$slider.removeClass("slick-slider"), c.$slider.removeClass("slick-initialized"), c.unslicked = !0, b || c.$slider.trigger("destroy", [c]) + }, b.prototype.disableTransition = function(a) { + var b = this, + c = {}; + c[b.transitionType] = "", b.options.fade === !1 ? b.$slideTrack.css(c) : b.$slides.eq(a).css(c) + }, b.prototype.fadeSlide = function(a, b) { + var c = this; + c.cssTransitions === !1 ? (c.$slides.eq(a).css({ + zIndex: c.options.zIndex + }), c.$slides.eq(a).animate({ + opacity: 1 + }, c.options.speed, c.options.easing, b)) : (c.applyTransition(a), c.$slides.eq(a).css({ + opacity: 1, + zIndex: c.options.zIndex + }), b && setTimeout(function() { + c.disableTransition(a), b.call() + }, c.options.speed)) + }, b.prototype.fadeSlideOut = function(a) { + var b = this; + b.cssTransitions === !1 ? b.$slides.eq(a).animate({ + opacity: 0, + zIndex: b.options.zIndex - 2 + }, b.options.speed, b.options.easing) : (b.applyTransition(a), b.$slides.eq(a).css({ + opacity: 0, + zIndex: b.options.zIndex - 2 + })) + }, b.prototype.filterSlides = b.prototype.slickFilter = function(a) { + var b = this; + null !== a && (b.$slidesCache = b.$slides, b.unload(), b.$slideTrack.children(this.options.slide).detach(), b.$slidesCache.filter(a).appendTo(b.$slideTrack), b.reinit()) + }, b.prototype.getCurrent = b.prototype.slickCurrentSlide = function() { + var a = this; + return a.currentSlide + }, b.prototype.getDotCount = function() { + var a = this, + b = 0, + c = 0, + d = 0; + if (a.options.infinite === !0) + for (; b < a.slideCount;) ++d, b = c + a.options.slidesToScroll, c += a.options.slidesToScroll <= a.options.slidesToShow ? a.options.slidesToScroll : a.options.slidesToShow; + else if (a.options.centerMode === !0) d = a.slideCount; + else + for (; b < a.slideCount;) ++d, b = c + a.options.slidesToScroll, c += a.options.slidesToScroll <= a.options.slidesToShow ? a.options.slidesToScroll : a.options.slidesToShow; + return d - 1 + }, b.prototype.getLeft = function(a) { + var c, d, f, b = this, + e = 0; + return b.slideOffset = 0, d = b.$slides.first().outerHeight(!0), b.options.infinite === !0 ? (b.slideCount > b.options.slidesToShow && (b.slideOffset = b.slideWidth * b.options.slidesToShow * -1, e = d * b.options.slidesToShow * -1), b.slideCount % b.options.slidesToScroll !== 0 && a + b.options.slidesToScroll > b.slideCount && b.slideCount > b.options.slidesToShow && (a > b.slideCount ? (b.slideOffset = (b.options.slidesToShow - (a - b.slideCount)) * b.slideWidth * -1, e = (b.options.slidesToShow - (a - b.slideCount)) * d * -1) : (b.slideOffset = b.slideCount % b.options.slidesToScroll * b.slideWidth * -1, e = b.slideCount % b.options.slidesToScroll * d * -1))) : a + b.options.slidesToShow > b.slideCount && (b.slideOffset = (a + b.options.slidesToShow - b.slideCount) * b.slideWidth, e = (a + b.options.slidesToShow - b.slideCount) * d), b.slideCount <= b.options.slidesToShow && (b.slideOffset = 0, e = 0), b.options.centerMode === !0 && b.options.infinite === !0 ? b.slideOffset += b.slideWidth * Math.floor(b.options.slidesToShow / 2) - b.slideWidth : b.options.centerMode === !0 && (b.slideOffset = 0, b.slideOffset += b.slideWidth * Math.floor(b.options.slidesToShow / 2)), c = b.options.vertical === !1 ? a * b.slideWidth * -1 + b.slideOffset : a * d * -1 + e, b.options.variableWidth === !0 && (f = b.slideCount <= b.options.slidesToShow || b.options.infinite === !1 ? b.$slideTrack.children(".slick-slide").eq(a) : b.$slideTrack.children(".slick-slide").eq(a + b.options.slidesToShow), c = b.options.rtl === !0 ? f[0] ? -1 * (b.$slideTrack.width() - f[0].offsetLeft - f.width()) : 0 : f[0] ? -1 * f[0].offsetLeft : 0, b.options.centerMode === !0 && (f = b.slideCount <= b.options.slidesToShow || b.options.infinite === !1 ? b.$slideTrack.children(".slick-slide").eq(a) : b.$slideTrack.children(".slick-slide").eq(a + b.options.slidesToShow + 1), c = b.options.rtl === !0 ? f[0] ? -1 * (b.$slideTrack.width() - f[0].offsetLeft - f.width()) : 0 : f[0] ? -1 * f[0].offsetLeft : 0, c += (b.$list.width() - f.outerWidth()) / 2)), c + }, b.prototype.getOption = b.prototype.slickGetOption = function(a) { + var b = this; + return b.options[a] + }, b.prototype.getNavigableIndexes = function() { + var e, a = this, + b = 0, + c = 0, + d = []; + for (a.options.infinite === !1 ? e = a.slideCount : (b = -1 * a.options.slidesToScroll, c = -1 * a.options.slidesToScroll, e = 2 * a.slideCount); e > b;) d.push(b), b = c + a.options.slidesToScroll, c += a.options.slidesToScroll <= a.options.slidesToShow ? a.options.slidesToScroll : a.options.slidesToShow; + return d + }, b.prototype.getSlick = function() { + return this + }, b.prototype.getSlideCount = function() { + var c, d, e, b = this; + return e = b.options.centerMode === !0 ? b.slideWidth * Math.floor(b.options.slidesToShow / 2) : 0, b.options.swipeToSlide === !0 ? (b.$slideTrack.find(".slick-slide").each(function(c, f) { + return f.offsetLeft - e + a(f).outerWidth() / 2 > -1 * b.swipeLeft ? (d = f, !1) : void 0 + }), c = Math.abs(a(d).attr("data-slick-index") - b.currentSlide) || 1) : b.options.slidesToScroll + }, b.prototype.goTo = b.prototype.slickGoTo = function(a, b) { + var c = this; + c.changeSlide({ + data: { + message: "index", + index: parseInt(a) + } + }, b) + }, b.prototype.init = function(b) { + var c = this; + a(c.$slider).hasClass("slick-initialized") || (a(c.$slider).addClass("slick-initialized"), c.buildRows(), c.buildOut(), c.setProps(), c.startLoad(), c.loadSlider(), c.initializeEvents(), c.updateArrows(), c.updateDots()), b && c.$slider.trigger("init", [c]), c.options.accessibility === !0 && c.initADA() + }, b.prototype.initArrowEvents = function() { + var a = this; + a.options.arrows === !0 && a.slideCount > a.options.slidesToShow && (a.$prevArrow.on("click.slick", { + message: "previous" + }, a.changeSlide), a.$nextArrow.on("click.slick", { + message: "next" + }, a.changeSlide)) + }, b.prototype.initDotEvents = function() { + var b = this; + b.options.dots === !0 && b.slideCount > b.options.slidesToShow && a("li", b.$dots).on("click.slick", { + message: "index" + }, b.changeSlide), b.options.dots === !0 && b.options.pauseOnDotsHover === !0 && b.options.autoplay === !0 && a("li", b.$dots).on("mouseenter.slick", a.proxy(b.setPaused, b, !0)).on("mouseleave.slick", a.proxy(b.setPaused, b, !1)) + }, b.prototype.initializeEvents = function() { + var b = this; + b.initArrowEvents(), b.initDotEvents(), b.$list.on("touchstart.slick mousedown.slick", { + action: "start" + }, b.swipeHandler), b.$list.on("touchmove.slick mousemove.slick", { + action: "move" + }, b.swipeHandler), b.$list.on("touchend.slick mouseup.slick", { + action: "end" + }, b.swipeHandler), b.$list.on("touchcancel.slick mouseleave.slick", { + action: "end" + }, b.swipeHandler), b.$list.on("click.slick", b.clickHandler), a(document).on(b.visibilityChange, a.proxy(b.visibility, b)), b.$list.on("mouseenter.slick", a.proxy(b.setPaused, b, !0)), b.$list.on("mouseleave.slick", a.proxy(b.setPaused, b, !1)), b.options.accessibility === !0 && b.$list.on("keydown.slick", b.keyHandler), b.options.focusOnSelect === !0 && a(b.$slideTrack).children().on("click.slick", b.selectHandler), a(window).on("orientationchange.slick.slick-" + b.instanceUid, a.proxy(b.orientationChange, b)), a(window).on("resize.slick.slick-" + b.instanceUid, a.proxy(b.resize, b)), a("[draggable!=true]", b.$slideTrack).on("dragstart", b.preventDefault), a(window).on("load.slick.slick-" + b.instanceUid, b.setPosition), a(document).on("ready.slick.slick-" + b.instanceUid, b.setPosition) + }, b.prototype.initUI = function() { + var a = this; + a.options.arrows === !0 && a.slideCount > a.options.slidesToShow && (a.$prevArrow.show(), a.$nextArrow.show()), a.options.dots === !0 && a.slideCount > a.options.slidesToShow && a.$dots.show(), a.options.autoplay === !0 && a.autoPlay() + }, b.prototype.keyHandler = function(a) { + var b = this; + a.target.tagName.match("TEXTAREA|INPUT|SELECT") || (37 === a.keyCode && b.options.accessibility === !0 ? b.changeSlide({ + data: { + message: "previous" + } + }) : 39 === a.keyCode && b.options.accessibility === !0 && b.changeSlide({ + data: { + message: "next" + } + })) + }, b.prototype.lazyLoad = function() { + function g(b) { + a("img[data-lazy]", b).each(function() { + var b = a(this), + c = a(this).attr("data-lazy"), + d = document.createElement("img"); + d.onload = function() { + b.animate({ + opacity: 0 + }, 100, function() { + b.attr("src", c).animate({ + opacity: 1 + }, 200, function() { + b.removeAttr("data-lazy").removeClass("slick-loading") + }) + }) + }, d.src = c + }) + } + var c, d, e, f, b = this; + b.options.centerMode === !0 ? b.options.infinite === !0 ? (e = b.currentSlide + (b.options.slidesToShow / 2 + 1), f = e + b.options.slidesToShow + 2) : (e = Math.max(0, b.currentSlide - (b.options.slidesToShow / 2 + 1)), f = 2 + (b.options.slidesToShow / 2 + 1) + b.currentSlide) : (e = b.options.infinite ? b.options.slidesToShow + b.currentSlide : b.currentSlide, f = e + b.options.slidesToShow, b.options.fade === !0 && (e > 0 && e--, f <= b.slideCount && f++)), c = b.$slider.find(".slick-slide").slice(e, f), g(c), b.slideCount <= b.options.slidesToShow ? (d = b.$slider.find(".slick-slide"), g(d)) : b.currentSlide >= b.slideCount - b.options.slidesToShow ? (d = b.$slider.find(".slick-cloned").slice(0, b.options.slidesToShow), g(d)) : 0 === b.currentSlide && (d = b.$slider.find(".slick-cloned").slice(-1 * b.options.slidesToShow), g(d)) + }, b.prototype.loadSlider = function() { + var a = this; + a.setPosition(), a.$slideTrack.css({ + opacity: 1 + }), a.$slider.removeClass("slick-loading"), a.initUI(), "progressive" === a.options.lazyLoad && a.progressiveLazyLoad() + }, b.prototype.next = b.prototype.slickNext = function() { + var a = this; + a.changeSlide({ + data: { + message: "next" + } + }) + }, b.prototype.orientationChange = function() { + var a = this; + a.checkResponsive(), a.setPosition() + }, b.prototype.pause = b.prototype.slickPause = function() { + var a = this; + a.autoPlayClear(), a.paused = !0 + }, b.prototype.play = b.prototype.slickPlay = function() { + var a = this; + a.paused = !1, a.autoPlay() + }, b.prototype.postSlide = function(a) { + var b = this; + b.$slider.trigger("afterChange", [b, a]), b.animating = !1, b.setPosition(), b.swipeLeft = null, b.options.autoplay === !0 && b.paused === !1 && b.autoPlay(), b.options.accessibility === !0 && b.initADA() + }, b.prototype.prev = b.prototype.slickPrev = function() { + var a = this; + a.changeSlide({ + data: { + message: "previous" + } + }) + }, b.prototype.preventDefault = function(a) { + a.preventDefault() + }, b.prototype.progressiveLazyLoad = function() { + var c, d, b = this; + c = a("img[data-lazy]", b.$slider).length, c > 0 && (d = a("img[data-lazy]", b.$slider).first(), d.attr("src", null), d.attr("src", d.attr("data-lazy")).removeClass("slick-loading").load(function() { + d.removeAttr("data-lazy"), b.progressiveLazyLoad(), b.options.adaptiveHeight === !0 && b.setPosition() + }).error(function() { + d.removeAttr("data-lazy"), b.progressiveLazyLoad() + })) + }, b.prototype.refresh = function(b) { + var d, e, c = this; + e = c.slideCount - c.options.slidesToShow, c.options.infinite || (c.slideCount <= c.options.slidesToShow ? c.currentSlide = 0 : c.currentSlide > e && (c.currentSlide = e)), d = c.currentSlide, c.destroy(!0), a.extend(c, c.initials, { + currentSlide: d + }), c.init(), b || c.changeSlide({ + data: { + message: "index", + index: d + } + }, !1) + }, b.prototype.registerBreakpoints = function() { + var c, d, e, b = this, + f = b.options.responsive || null; + if ("array" === a.type(f) && f.length) { + b.respondTo = b.options.respondTo || "window"; + for (c in f) + if (e = b.breakpoints.length - 1, d = f[c].breakpoint, f.hasOwnProperty(c)) { + for (; e >= 0;) b.breakpoints[e] && b.breakpoints[e] === d && b.breakpoints.splice(e, 1), e--; + b.breakpoints.push(d), b.breakpointSettings[d] = f[c].settings + } + b.breakpoints.sort(function(a, c) { + return b.options.mobileFirst ? a - c : c - a + }) + } + }, b.prototype.reinit = function() { + var b = this; + b.$slides = b.$slideTrack.children(b.options.slide).addClass("slick-slide"), b.slideCount = b.$slides.length, b.currentSlide >= b.slideCount && 0 !== b.currentSlide && (b.currentSlide = b.currentSlide - b.options.slidesToScroll), b.slideCount <= b.options.slidesToShow && (b.currentSlide = 0), b.registerBreakpoints(), b.setProps(), b.setupInfinite(), b.buildArrows(), b.updateArrows(), b.initArrowEvents(), b.buildDots(), b.updateDots(), b.initDotEvents(), b.checkResponsive(!1, !0), b.options.focusOnSelect === !0 && a(b.$slideTrack).children().on("click.slick", b.selectHandler), b.setSlideClasses(0), b.setPosition(), b.$slider.trigger("reInit", [b]), b.options.autoplay === !0 && b.focusHandler() + }, b.prototype.resize = function() { + var b = this; + a(window).width() !== b.windowWidth && (clearTimeout(b.windowDelay), b.windowDelay = window.setTimeout(function() { + b.windowWidth = a(window).width(), b.checkResponsive(), b.unslicked || b.setPosition() + }, 50)) + }, b.prototype.removeSlide = b.prototype.slickRemove = function(a, b, c) { + var d = this; + return "boolean" == typeof a ? (b = a, a = b === !0 ? 0 : d.slideCount - 1) : a = b === !0 ? --a : a, d.slideCount < 1 || 0 > a || a > d.slideCount - 1 ? !1 : (d.unload(), c === !0 ? d.$slideTrack.children().remove() : d.$slideTrack.children(this.options.slide).eq(a).remove(), d.$slides = d.$slideTrack.children(this.options.slide), d.$slideTrack.children(this.options.slide).detach(), d.$slideTrack.append(d.$slides), d.$slidesCache = d.$slides, void d.reinit()) + }, b.prototype.setCSS = function(a) { + var d, e, b = this, + c = {}; + b.options.rtl === !0 && (a = -a), d = "left" == b.positionProp ? Math.ceil(a) + "px" : "0px", e = "top" == b.positionProp ? Math.ceil(a) + "px" : "0px", c[b.positionProp] = a, b.transformsEnabled === !1 ? b.$slideTrack.css(c) : (c = {}, b.cssTransitions === !1 ? (c[b.animType] = "translate(" + d + ", " + e + ")", b.$slideTrack.css(c)) : (c[b.animType] = "translate3d(" + d + ", " + e + ", 0px)", b.$slideTrack.css(c))) + }, b.prototype.setDimensions = function() { + var a = this; + a.options.vertical === !1 ? a.options.centerMode === !0 && a.$list.css({ + padding: "0px " + a.options.centerPadding + }) : (a.$list.height(a.$slides.first().outerHeight(!0) * a.options.slidesToShow), a.options.centerMode === !0 && a.$list.css({ + padding: a.options.centerPadding + " 0px" + })), a.listWidth = a.$list.width(), a.listHeight = a.$list.height(), a.options.vertical === !1 && a.options.variableWidth === !1 ? (a.slideWidth = Math.ceil(a.listWidth / a.options.slidesToShow), a.$slideTrack.width(Math.ceil(a.slideWidth * a.$slideTrack.children(".slick-slide").length))) : a.options.variableWidth === !0 ? a.$slideTrack.width(5e3 * a.slideCount) : (a.slideWidth = Math.ceil(a.listWidth), a.$slideTrack.height(Math.ceil(a.$slides.first().outerHeight(!0) * a.$slideTrack.children(".slick-slide").length))); + var b = a.$slides.first().outerWidth(!0) - a.$slides.first().width(); + a.options.variableWidth === !1 && a.$slideTrack.children(".slick-slide").width(a.slideWidth - b) + }, b.prototype.setFade = function() { + var c, b = this; + b.$slides.each(function(d, e) { + c = b.slideWidth * d * -1, b.options.rtl === !0 ? a(e).css({ + position: "relative", + right: c, + top: 0, + zIndex: b.options.zIndex - 2, + opacity: 0 + }) : a(e).css({ + position: "relative", + left: c, + top: 0, + zIndex: b.options.zIndex - 2, + opacity: 0 + }) + }), b.$slides.eq(b.currentSlide).css({ + zIndex: b.options.zIndex - 1, + opacity: 1 + }) + }, b.prototype.setHeight = function() { + var a = this; + if (1 === a.options.slidesToShow && a.options.adaptiveHeight === !0 && a.options.vertical === !1) { + var b = a.$slides.eq(a.currentSlide).outerHeight(!0); + a.$list.css("height", b) + } + }, b.prototype.setOption = b.prototype.slickSetOption = function(b, c, d) { + var f, g, e = this; + if ("responsive" === b && "array" === a.type(c)) + for (g in c) + if ("array" !== a.type(e.options.responsive)) e.options.responsive = [c[g]]; + else { + for (f = e.options.responsive.length - 1; f >= 0;) e.options.responsive[f].breakpoint === c[g].breakpoint && e.options.responsive.splice(f, 1), f--; + e.options.responsive.push(c[g]) + } + else e.options[b] = c; + d === !0 && (e.unload(), e.reinit()) + }, b.prototype.setPosition = function() { + var a = this; + a.setDimensions(), a.setHeight(), a.options.fade === !1 ? a.setCSS(a.getLeft(a.currentSlide)) : a.setFade(), a.$slider.trigger("setPosition", [a]) + }, b.prototype.setProps = function() { + var a = this, + b = document.body.style; + a.positionProp = a.options.vertical === !0 ? "top" : "left", "top" === a.positionProp ? a.$slider.addClass("slick-vertical") : a.$slider.removeClass("slick-vertical"), (void 0 !== b.WebkitTransition || void 0 !== b.MozTransition || void 0 !== b.msTransition) && a.options.useCSS === !0 && (a.cssTransitions = !0), a.options.fade && ("number" == typeof a.options.zIndex ? a.options.zIndex < 3 && (a.options.zIndex = 3) : a.options.zIndex = a.defaults.zIndex), void 0 !== b.OTransform && (a.animType = "OTransform", a.transformType = "-o-transform", a.transitionType = "OTransition", void 0 === b.perspectiveProperty && void 0 === b.webkitPerspective && (a.animType = !1)), void 0 !== b.MozTransform && (a.animType = "MozTransform", a.transformType = "-moz-transform", a.transitionType = "MozTransition", void 0 === b.perspectiveProperty && void 0 === b.MozPerspective && (a.animType = !1)), void 0 !== b.webkitTransform && (a.animType = "webkitTransform", a.transformType = "-webkit-transform", a.transitionType = "webkitTransition", void 0 === b.perspectiveProperty && void 0 === b.webkitPerspective && (a.animType = !1)), void 0 !== b.msTransform && (a.animType = "msTransform", a.transformType = "-ms-transform", a.transitionType = "msTransition", void 0 === b.msTransform && (a.animType = !1)), void 0 !== b.transform && a.animType !== !1 && (a.animType = "transform", a.transformType = "transform", a.transitionType = "transition"), a.transformsEnabled = a.options.useTransform && null !== a.animType && a.animType !== !1 + }, b.prototype.setSlideClasses = function(a) { + var c, d, e, f, b = this; + d = b.$slider.find(".slick-slide").removeClass("slick-active slick-center slick-current").attr("aria-hidden", "true"), b.$slides.eq(a).addClass("slick-current"), b.options.centerMode === !0 ? (c = Math.floor(b.options.slidesToShow / 2), b.options.infinite === !0 && (a >= c && a <= b.slideCount - 1 - c ? b.$slides.slice(a - c, a + c + 1).addClass("slick-active").attr("aria-hidden", "false") : (e = b.options.slidesToShow + a, d.slice(e - c + 1, e + c + 2).addClass("slick-active").attr("aria-hidden", "false")), 0 === a ? d.eq(d.length - 1 - b.options.slidesToShow).addClass("slick-center") : a === b.slideCount - 1 && d.eq(b.options.slidesToShow).addClass("slick-center")), b.$slides.eq(a).addClass("slick-center")) : a >= 0 && a <= b.slideCount - b.options.slidesToShow ? b.$slides.slice(a, a + b.options.slidesToShow).addClass("slick-active").attr("aria-hidden", "false") : d.length <= b.options.slidesToShow ? d.addClass("slick-active").attr("aria-hidden", "false") : (f = b.slideCount % b.options.slidesToShow, e = b.options.infinite === !0 ? b.options.slidesToShow + a : a, b.options.slidesToShow == b.options.slidesToScroll && b.slideCount - a < b.options.slidesToShow ? d.slice(e - (b.options.slidesToShow - f), e + f).addClass("slick-active").attr("aria-hidden", "false") : d.slice(e, e + b.options.slidesToShow).addClass("slick-active").attr("aria-hidden", "false")), "ondemand" === b.options.lazyLoad && b.lazyLoad() + }, b.prototype.setupInfinite = function() { + var c, d, e, b = this; + if (b.options.fade === !0 && (b.options.centerMode = !1), b.options.infinite === !0 && b.options.fade === !1 && (d = null, b.slideCount > b.options.slidesToShow)) { + for (e = b.options.centerMode === !0 ? b.options.slidesToShow + 1 : b.options.slidesToShow, c = b.slideCount; c > b.slideCount - e; c -= 1) d = c - 1, a(b.$slides[d]).clone(!0).attr("id", "").attr("data-slick-index", d - b.slideCount).prependTo(b.$slideTrack).addClass("slick-cloned"); + for (c = 0; e > c; c += 1) d = c, a(b.$slides[d]).clone(!0).attr("id", "").attr("data-slick-index", d + b.slideCount).appendTo(b.$slideTrack).addClass("slick-cloned"); + b.$slideTrack.find(".slick-cloned").find("[id]").each(function() { + a(this).attr("id", "") + }) + } + }, b.prototype.setPaused = function(a) { + var b = this; + b.options.autoplay === !0 && b.options.pauseOnHover === !0 && (b.paused = a, a ? b.autoPlayClear() : b.autoPlay()) + }, b.prototype.selectHandler = function(b) { + var c = this, + d = a(b.target).is(".slick-slide") ? a(b.target) : a(b.target).parents(".slick-slide"), + e = parseInt(d.attr("data-slick-index")); + return e || (e = 0), c.slideCount <= c.options.slidesToShow ? (c.setSlideClasses(e), void c.asNavFor(e)) : void c.slideHandler(e) + }, b.prototype.slideHandler = function(a, b, c) { + var d, e, f, g, h = null, + i = this; + return b = b || !1, i.animating === !0 && i.options.waitForAnimate === !0 || i.options.fade === !0 && i.currentSlide === a || i.slideCount <= i.options.slidesToShow ? void 0 : (b === !1 && i.asNavFor(a), d = a, h = i.getLeft(d), g = i.getLeft(i.currentSlide), i.currentLeft = null === i.swipeLeft ? g : i.swipeLeft, i.options.infinite === !1 && i.options.centerMode === !1 && (0 > a || a > i.getDotCount() * i.options.slidesToScroll) ? void(i.options.fade === !1 && (d = i.currentSlide, c !== !0 ? i.animateSlide(g, function() { + i.postSlide(d); + }) : i.postSlide(d))) : i.options.infinite === !1 && i.options.centerMode === !0 && (0 > a || a > i.slideCount - i.options.slidesToScroll) ? void(i.options.fade === !1 && (d = i.currentSlide, c !== !0 ? i.animateSlide(g, function() { + i.postSlide(d) + }) : i.postSlide(d))) : (i.options.autoplay === !0 && clearInterval(i.autoPlayTimer), e = 0 > d ? i.slideCount % i.options.slidesToScroll !== 0 ? i.slideCount - i.slideCount % i.options.slidesToScroll : i.slideCount + d : d >= i.slideCount ? i.slideCount % i.options.slidesToScroll !== 0 ? 0 : d - i.slideCount : d, i.animating = !0, i.$slider.trigger("beforeChange", [i, i.currentSlide, e]), f = i.currentSlide, i.currentSlide = e, i.setSlideClasses(i.currentSlide), i.updateDots(), i.updateArrows(), i.options.fade === !0 ? (c !== !0 ? (i.fadeSlideOut(f), i.fadeSlide(e, function() { + i.postSlide(e) + })) : i.postSlide(e), void i.animateHeight()) : void(c !== !0 ? i.animateSlide(h, function() { + i.postSlide(e) + }) : i.postSlide(e)))) + }, b.prototype.startLoad = function() { + var a = this; + a.options.arrows === !0 && a.slideCount > a.options.slidesToShow && (a.$prevArrow.hide(), a.$nextArrow.hide()), a.options.dots === !0 && a.slideCount > a.options.slidesToShow && a.$dots.hide(), a.$slider.addClass("slick-loading") + }, b.prototype.swipeDirection = function() { + var a, b, c, d, e = this; + return a = e.touchObject.startX - e.touchObject.curX, b = e.touchObject.startY - e.touchObject.curY, c = Math.atan2(b, a), d = Math.round(180 * c / Math.PI), 0 > d && (d = 360 - Math.abs(d)), 45 >= d && d >= 0 ? e.options.rtl === !1 ? "left" : "right" : 360 >= d && d >= 315 ? e.options.rtl === !1 ? "left" : "right" : d >= 135 && 225 >= d ? e.options.rtl === !1 ? "right" : "left" : e.options.verticalSwiping === !0 ? d >= 35 && 135 >= d ? "left" : "right" : "vertical" + }, b.prototype.swipeEnd = function(a) { + var c, b = this; + if (b.dragging = !1, b.shouldClick = b.touchObject.swipeLength > 10 ? !1 : !0, void 0 === b.touchObject.curX) return !1; + if (b.touchObject.edgeHit === !0 && b.$slider.trigger("edge", [b, b.swipeDirection()]), b.touchObject.swipeLength >= b.touchObject.minSwipe) switch (b.swipeDirection()) { + case "left": + c = b.options.swipeToSlide ? b.checkNavigable(b.currentSlide + b.getSlideCount()) : b.currentSlide + b.getSlideCount(), b.slideHandler(c), b.currentDirection = 0, b.touchObject = {}, b.$slider.trigger("swipe", [b, "left"]); + break; + case "right": + c = b.options.swipeToSlide ? b.checkNavigable(b.currentSlide - b.getSlideCount()) : b.currentSlide - b.getSlideCount(), b.slideHandler(c), b.currentDirection = 1, b.touchObject = {}, b.$slider.trigger("swipe", [b, "right"]) + } else b.touchObject.startX !== b.touchObject.curX && (b.slideHandler(b.currentSlide), b.touchObject = {}) + }, b.prototype.swipeHandler = function(a) { + var b = this; + if (!(b.options.swipe === !1 || "ontouchend" in document && b.options.swipe === !1 || b.options.draggable === !1 && -1 !== a.type.indexOf("mouse"))) switch (b.touchObject.fingerCount = a.originalEvent && void 0 !== a.originalEvent.touches ? a.originalEvent.touches.length : 1, b.touchObject.minSwipe = b.listWidth / b.options.touchThreshold, b.options.verticalSwiping === !0 && (b.touchObject.minSwipe = b.listHeight / b.options.touchThreshold), a.data.action) { + case "start": + b.swipeStart(a); + break; + case "move": + b.swipeMove(a); + break; + case "end": + b.swipeEnd(a) + } + }, b.prototype.swipeMove = function(a) { + var d, e, f, g, h, b = this; + return h = void 0 !== a.originalEvent ? a.originalEvent.touches : null, !b.dragging || h && 1 !== h.length ? !1 : (d = b.getLeft(b.currentSlide), b.touchObject.curX = void 0 !== h ? h[0].pageX : a.clientX, b.touchObject.curY = void 0 !== h ? h[0].pageY : a.clientY, b.touchObject.swipeLength = Math.round(Math.sqrt(Math.pow(b.touchObject.curX - b.touchObject.startX, 2))), b.options.verticalSwiping === !0 && (b.touchObject.swipeLength = Math.round(Math.sqrt(Math.pow(b.touchObject.curY - b.touchObject.startY, 2)))), e = b.swipeDirection(), "vertical" !== e ? (void 0 !== a.originalEvent && b.touchObject.swipeLength > 4 && a.preventDefault(), g = (b.options.rtl === !1 ? 1 : -1) * (b.touchObject.curX > b.touchObject.startX ? 1 : -1), b.options.verticalSwiping === !0 && (g = b.touchObject.curY > b.touchObject.startY ? 1 : -1), f = b.touchObject.swipeLength, b.touchObject.edgeHit = !1, b.options.infinite === !1 && (0 === b.currentSlide && "right" === e || b.currentSlide >= b.getDotCount() && "left" === e) && (f = b.touchObject.swipeLength * b.options.edgeFriction, b.touchObject.edgeHit = !0), b.options.vertical === !1 ? b.swipeLeft = d + f * g : b.swipeLeft = d + f * (b.$list.height() / b.listWidth) * g, b.options.verticalSwiping === !0 && (b.swipeLeft = d + f * g), b.options.fade === !0 || b.options.touchMove === !1 ? !1 : b.animating === !0 ? (b.swipeLeft = null, !1) : void b.setCSS(b.swipeLeft)) : void 0) + }, b.prototype.swipeStart = function(a) { + var c, b = this; + return 1 !== b.touchObject.fingerCount || b.slideCount <= b.options.slidesToShow ? (b.touchObject = {}, !1) : (void 0 !== a.originalEvent && void 0 !== a.originalEvent.touches && (c = a.originalEvent.touches[0]), b.touchObject.startX = b.touchObject.curX = void 0 !== c ? c.pageX : a.clientX, b.touchObject.startY = b.touchObject.curY = void 0 !== c ? c.pageY : a.clientY, void(b.dragging = !0)) + }, b.prototype.unfilterSlides = b.prototype.slickUnfilter = function() { + var a = this; + null !== a.$slidesCache && (a.unload(), a.$slideTrack.children(this.options.slide).detach(), a.$slidesCache.appendTo(a.$slideTrack), a.reinit()) + }, b.prototype.unload = function() { + var b = this; + a(".slick-cloned", b.$slider).remove(), b.$dots && b.$dots.remove(), b.$prevArrow && b.htmlExpr.test(b.options.prevArrow) && b.$prevArrow.remove(), b.$nextArrow && b.htmlExpr.test(b.options.nextArrow) && b.$nextArrow.remove(), b.$slides.removeClass("slick-slide slick-active slick-visible slick-current").attr("aria-hidden", "true").css("width", "") + }, b.prototype.unslick = function(a) { + var b = this; + b.$slider.trigger("unslick", [b, a]), b.destroy() + }, b.prototype.updateArrows = function() { + var b, a = this; + b = Math.floor(a.options.slidesToShow / 2), a.options.arrows === !0 && a.slideCount > a.options.slidesToShow && !a.options.infinite && (a.$prevArrow.removeClass("slick-disabled").attr("aria-disabled", "false"), a.$nextArrow.removeClass("slick-disabled").attr("aria-disabled", "false"), 0 === a.currentSlide ? (a.$prevArrow.addClass("slick-disabled").attr("aria-disabled", "true"), a.$nextArrow.removeClass("slick-disabled").attr("aria-disabled", "false")) : a.currentSlide >= a.slideCount - a.options.slidesToShow && a.options.centerMode === !1 ? (a.$nextArrow.addClass("slick-disabled").attr("aria-disabled", "true"), a.$prevArrow.removeClass("slick-disabled").attr("aria-disabled", "false")) : a.currentSlide >= a.slideCount - 1 && a.options.centerMode === !0 && (a.$nextArrow.addClass("slick-disabled").attr("aria-disabled", "true"), a.$prevArrow.removeClass("slick-disabled").attr("aria-disabled", "false"))) + }, b.prototype.updateDots = function() { + var a = this; + null !== a.$dots && (a.$dots.find("li").removeClass("slick-active").attr("aria-hidden", "true"), a.$dots.find("li").eq(Math.floor(a.currentSlide / a.options.slidesToScroll)).addClass("slick-active").attr("aria-hidden", "false")) + }, b.prototype.visibility = function() { + var a = this; + document[a.hidden] ? (a.paused = !0, a.autoPlayClear()) : a.options.autoplay === !0 && (a.paused = !1, a.autoPlay()) + }, b.prototype.initADA = function() { + var b = this; + b.$slides.add(b.$slideTrack.find(".slick-cloned")).attr({ + "aria-hidden": "true", + tabindex: "-1" + }).find("a, input, button, select").attr({ + tabindex: "-1" + }), b.$slideTrack.attr("role", "listbox"), b.$slides.not(b.$slideTrack.find(".slick-cloned")).each(function(c) { + a(this).attr({ + role: "option", + "aria-describedby": "slick-slide" + b.instanceUid + c + }) + }), null !== b.$dots && b.$dots.attr("role", "tablist").find("li").each(function(c) { + a(this).attr({ + role: "presentation", + "aria-selected": "false", + "aria-controls": "navigation" + b.instanceUid + c, + id: "slick-slide" + b.instanceUid + c + }) + }).first().attr("aria-selected", "true").end().find("button").attr("role", "button").end().closest("div").attr("role", "toolbar"), b.activateADA() + }, b.prototype.activateADA = function() { + var a = this; + a.$slideTrack.find(".slick-active").attr({ + "aria-hidden": "false" + }).find("a, input, button, select").attr({ + tabindex: "0" + }) + }, b.prototype.focusHandler = function() { + var b = this; + b.$slider.on("focus.slick blur.slick", "*", function(c) { + c.stopImmediatePropagation(); + var d = a(this); + setTimeout(function() { + b.isPlay && (d.is(":focus") ? (b.autoPlayClear(), b.paused = !0) : (b.paused = !1, b.autoPlay())) + }, 0) + }) + }, a.fn.slick = function() { + var f, g, a = this, + c = arguments[0], + d = Array.prototype.slice.call(arguments, 1), + e = a.length; + for (f = 0; e > f; f++) + if ("object" == typeof c || "undefined" == typeof c ? a[f].slick = new b(a[f], c) : g = a[f].slick[c].apply(a[f].slick, d), "undefined" != typeof g) return g; + return a + } +}); \ No newline at end of file diff --git a/statics/js/swfobject.js b/statics/js/swfobject.js new file mode 100644 index 0000000..98c03e8 --- /dev/null +++ b/statics/js/swfobject.js @@ -0,0 +1,14 @@ +/* SWFObject v2.0 + Copyright (c) 2007 Geoff Stearns, Michael Williams, and Bobby van der Sluis + This software is released under the MIT License + */ +var swfobject=function(){var UNDEF="undefined",OBJECT="object",SHOCKWAVE_FLASH="Shockwave Flash",SHOCKWAVE_FLASH_AX="ShockwaveFlash.ShockwaveFlash",FLASH_MIME_TYPE="application/x-shockwave-flash",EXPRESS_INSTALL_ID="SWFObjectExprInst",win=window,doc=document,nav=navigator,domLoadFnArr=[],regObjArr=[],timer=null,storedAltContent=null,storedAltContentId=null,isDomLoaded=false,isExpressInstallActive=false;var ua=function(){var w3cdom=typeof doc.getElementById!=UNDEF&&typeof doc.getElementsByTagName!=UNDEF&&typeof doc.createElement!=UNDEF&&typeof doc.appendChild!=UNDEF&&typeof doc.replaceChild!=UNDEF&&typeof doc.removeChild!=UNDEF&&typeof doc.cloneNode!=UNDEF,playerVersion=[0,0,0],d=null;if(typeof nav.plugins!=UNDEF&&typeof nav.plugins[SHOCKWAVE_FLASH]==OBJECT){d=nav.plugins[SHOCKWAVE_FLASH].description;if(d){d=d.replace(/^.*\s+(\S+\s+\S+$)/,"$1");playerVersion[0]=parseInt(d.replace(/^(.*)\..*$/,"$1"),10);playerVersion[1]=parseInt(d.replace(/^.*\.(.*)\s.*$/,"$1"),10);playerVersion[2]=/r/.test(d)?parseInt(d.replace(/^.*r(.*)$/,"$1"),10):0}}else{if(typeof win.ActiveXObject!=UNDEF){var a=null,fp6Crash=false;try{a=new ActiveXObject(SHOCKWAVE_FLASH_AX+".7")}catch(e){try{a=new ActiveXObject(SHOCKWAVE_FLASH_AX+".6");playerVersion=[6,0,21];a.AllowScriptAccess="always"}catch(e){if(playerVersion[0]==6){fp6Crash=true}}if(!fp6Crash){try{a=new ActiveXObject(SHOCKWAVE_FLASH_AX)}catch(e){}}}if(!fp6Crash&&a){try{d=a.GetVariable("$version");if(d){d=d.split(" ")[1].split(",");playerVersion=[parseInt(d[0],10),parseInt(d[1],10),parseInt(d[2],10)]}}catch(e){}}}}var u=nav.userAgent.toLowerCase(),p=nav.platform.toLowerCase(),webkit=/webkit/.test(u)?parseFloat(u.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,ie=false,windows=p?/win/.test(p):/win/.test(u),mac=p?/mac/.test(p):/mac/.test(u); + /*@cc_on + ie = true; + @if (@_win32) + windows = true; + @elif (@_mac) + mac = true; + @end + @*/ + return{w3cdom:w3cdom,pv:playerVersion,webkit:webkit,ie:ie,win:windows,mac:mac}}();var onDomLoad=function(){if(!ua.w3cdom){return}addDomLoadEvent(main);if(ua.ie&&ua.win){try{doc.write(" +
+ + + {/list} +
{$pages}
+
+
+ + +
+ {template "sidebar.html"} +
+ + {template "footer.html"} + + + \ No newline at end of file diff --git a/statics/space/default/flash/css.css b/statics/space/default/flash/css.css new file mode 100644 index 0000000..0ca91ec --- /dev/null +++ b/statics/space/default/flash/css.css @@ -0,0 +1,5 @@ +.flash6{ position:relative; font-size:0px;} +.flash6 .bx-pager{ position:absolute;bottom:10px;right:10px;z-index:999;} +.flash6 .bx-pager .pager-link{float:left;width:15px;height:15px; line-height:15px; text-align:center;margin:0 0 0 10px; background:#FC0; color:#930;} +.flash6 .bx-pager .pager-link:hover{ text-decoration:none;} +.flash6 .bx-pager .pager-active{ background:#0C3; color:#fff;} \ No newline at end of file diff --git a/statics/space/default/flash/dot.png b/statics/space/default/flash/dot.png new file mode 100644 index 0000000..db3a45c Binary files /dev/null and b/statics/space/default/flash/dot.png differ diff --git a/statics/space/default/flash/dot_current.png b/statics/space/default/flash/dot_current.png new file mode 100644 index 0000000..cb98342 Binary files /dev/null and b/statics/space/default/flash/dot_current.png differ diff --git a/statics/space/default/flash/jquery.bxSlider.min.js b/statics/space/default/flash/jquery.bxSlider.min.js new file mode 100644 index 0000000..5afc044 --- /dev/null +++ b/statics/space/default/flash/jquery.bxSlider.min.js @@ -0,0 +1,12 @@ +/** + * jQuery bxSlider v3.0 + * http://bxslider.com + * + * Copyright 2010, Steven Wanderski + * http://bxcreative.com + * + * Free to use and abuse under the MIT license. + * http://www.opensource.org/licenses/mit-license.php + * + */ +(function(a){a.fn.bxSlider=function(b){function Z(b,c,d,e){var f=[];var g=d;var h=false;if(e=="backward"){b=a.makeArray(b);b.reverse()}while(g>0){a.each(b,function(b,d){if(g>0){if(!h){if(b==c){h=true;f.push(a(this).clone());g--}}else{f.push(a(this).clone());g--}}else{return false}})}return f}function Y(){var a=i.outerHeight()*b.displaySlideQty;return a}function X(){var a=i.outerWidth()*b.displaySlideQty;return a}function W(b,c){if(c=="left"){var d=a(".pager",h).eq(b).position().left}else if(c=="top"){var d=a(".pager",h).eq(b).position().top}return d}function V(){if(!b.infiniteLoop&&b.hideControlOnEnd){if(x==F){a(".bx-prev",h).hide()}else{a(".bx-prev",h).show()}if(x==G){a(".bx-next",h).hide()}else{a(".bx-next",h).show()}}}function U(c,e,f,g){p=a('');if(c=="text"){r=e}else{r=''}if(f=="text"){s=g}else{s=''}if(b.autoControlsSelector){a(b.autoControlsSelector).append(p)}else{h.append('
');a(".bx-auto",h).html(p)}p.click(function(){if(b.ticker){if(a(this).hasClass("stop")){d.stopTicker()}else if(a(this).hasClass("start")){d.startTicker()}}else{if(a(this).hasClass("stop")){d.stopShow(true)}else if(a(this).hasClass("start")){d.startShow(true)}}return false})}function T(){var c=a("img",g.eq(x)).attr("title");if(c!=""){if(b.captionsSelector){a(b.captionsSelector).html(c)}else{a(".bx-captions",h).html(c)}}else{if(b.captionsSelector){a(b.captionsSelector).html(" ")}else{a(".bx-captions",h).html(" ")}}}function S(c){var e=g.length;if(b.moveSlideQty>1){if(g.length%b.moveSlideQty!=0){e=Math.ceil(g.length/b.moveSlideQty)}else{e=g.length/b.moveSlideQty}}var f="";if(b.buildPager){for(var i=0;i'+i+""}}else if(c=="short"){f=''+(b.startingSlide+1)+" "+b.pagerShortSeparator+' '+g.length+""}if(b.pagerSelector){a(b.pagerSelector).append(f);n=a(b.pagerSelector)}else{var j=a('
');j.append(f);if(b.pagerLocation=="top"){h.prepend(j)}else if(b.pagerLocation=="bottom"){h.append(j)}n=a(".bx-pager",h)}n.children().click(function(){if(b.pagerType=="full"){var a=n.children().index(this);if(b.moveSlideQty>1){a*=b.moveSlideQty}d.goToSlide(a)}return false})}function R(c,e,f,g){var i=a('');var j=a('');if(c=="text"){i.html(e)}else{i.html('')}if(f=="text"){j.html(g)}else{j.html('')}if(b.prevSelector){a(b.prevSelector).append(j)}else{h.append(j)}if(b.nextSelector){a(b.nextSelector).append(i)}else{h.append(i)}i.click(function(){d.goToNextSlide();return false});j.click(function(){d.goToPreviousSlide();return false})}function Q(c){if(b.pagerType=="full"&&b.pager){a("a",n).removeClass(b.pagerActiveClass);a("a",n).eq(c).addClass(b.pagerActiveClass)}else if(b.pagerType=="short"&&b.pager){a(".bx-pager-current",n).html(x+1)}}function P(){g.not(":eq("+x+")").fadeTo(b.speed,0).css("zIndex",98);g.eq(x).css("zIndex",99).fadeTo(b.speed,1,function(){E=false;if(jQuery.browser.msie){g.eq(x).get(0).style.removeAttribute("filter")}b.onAfterSlide(x,g.length,g.eq(x))})}function O(){e.hover(function(){if(t){d.stopTicker(false)}},function(){if(t){d.startTicker(false)}})}function N(){h.find(".bx-window").hover(function(){if(t){d.stopShow(false)}},function(){if(t){d.startShow(false)}})}function M(){if(b.startImage!=""){startContent=b.startImage;startType="image"}else{startContent=b.startText;startType="text"}if(b.stopImage!=""){stopContent=b.stopImage;stopType="image"}else{stopContent=b.stopText;stopType="text"}U(startType,startContent,stopType,stopContent)}function L(a,c,d){if(b.mode=="horizontal"){if(b.tickerDirection=="next"){e.animate({left:"-="+c+"px"},d,"linear",function(){e.css("left",a);L(a,A,b.tickerSpeed)})}else if(b.tickerDirection=="prev"){e.animate({left:"+="+c+"px"},d,"linear",function(){e.css("left",a);L(a,A,b.tickerSpeed)})}}else if(b.mode=="vertical"){if(b.tickerDirection=="next"){e.animate({top:"-="+c+"px"},d,"linear",function(){e.css("top",a);L(a,B,b.tickerSpeed)})}else if(b.tickerDirection=="prev"){e.animate({top:"+="+c+"px"},d,"linear",function(){e.css("top",a);L(a,B,b.tickerSpeed)})}}}function K(){if(b.auto){if(!b.infiniteLoop){if(b.autoDirection=="next"){o=setInterval(function(){x+=b.moveSlideQty;if(x>G){x=x%g.length}d.goToSlide(x,false)},b.pause)}else if(b.autoDirection=="prev"){o=setInterval(function(){x-=b.moveSlideQty;if(x<0){negativeOffset=x%g.length;if(negativeOffset==0){x=0}else{x=g.length+negativeOffset}}d.goToSlide(x,false)},b.pause)}}else{if(b.autoDirection=="next"){o=setInterval(function(){d.goToNextSlide(false)},b.pause)}else if(b.autoDirection=="prev"){o=setInterval(function(){d.goToPreviousSlide(false)},b.pause)}}}else if(b.ticker){b.tickerSpeed*=10;a(".pager",h).each(function(b){A+=a(this).width();B+=a(this).height()});if(b.tickerDirection=="prev"&&b.mode=="horizontal"){e.css("left","-"+(A+y)+"px")}else if(b.tickerDirection=="prev"&&b.mode=="vertical"){e.css("top","-"+(B+z)+"px")}if(b.mode=="horizontal"){C=parseInt(e.css("left"));L(C,A,b.tickerSpeed)}else if(b.mode=="vertical"){D=parseInt(e.css("top"));L(D,B,b.tickerSpeed)}if(b.tickerHover){O()}}}function J(){if(b.nextImage!=""){nextContent=b.nextImage;nextType="image"}else{nextContent=b.nextText;nextType="text"}if(b.prevImage!=""){prevContent=b.prevImage;prevType="image"}else{prevContent=b.prevText;prevType="text"}R(nextType,nextContent,prevType,prevContent)}function I(){if(b.mode=="horizontal"||b.mode=="vertical"){var c=Z(g,0,b.moveSlideQty,"backward");a.each(c,function(b){e.prepend(a(this))});var d=g.length+b.moveSlideQty-1;var f=g.length-b.displaySlideQty;var h=d-f;var i=Z(g,0,h,"forward");if(b.infiniteLoop){a.each(i,function(b){e.append(a(this))})}}}function H(){I(b.startingSlide);if(b.mode=="horizontal"){e.wrap('
').wrap('
').css({width:"999999px",position:"relative",left:"-"+y+"px"});e.children().css({width:j,"float":"left",listStyle:"none"});h=e.parent().parent();g.addClass("pager")}else if(b.mode=="vertical"){e.wrap('
').wrap('
').css({height:"999999px",position:"relative",top:"-"+z+"px"});e.children().css({listStyle:"none",height:w});h=e.parent().parent();g.addClass("pager")}else if(b.mode=="fade"){e.wrap('
').wrap('
');e.children().css({listStyle:"none",position:"absolute",top:0,left:0,zIndex:98});h=e.parent().parent();g.not(":eq("+x+")").fadeTo(0,0);g.eq(x).css("zIndex",99)}if(b.captions&&b.captionsSelector==null){h.append('
')}}var c={mode:"horizontal",infiniteLoop:true,hideControlOnEnd:false,controls:true,speed:500,easing:"swing",pager:false,pagerSelector:null,pagerType:"full",pagerLocation:"bottom",pagerShortSeparator:"/",pagerActiveClass:"pager-active",nextText:"next",nextImage:"",nextSelector:null,prevText:"prev",prevImage:"",prevSelector:null,captions:false,captionsSelector:null,auto:false,autoDirection:"next",autoControls:false,autoControlsSelector:null,autoStart:true,autoHover:false,autoDelay:0,pause:3e3,startText:"start",startImage:"",stopText:"stop",stopImage:"",ticker:false,tickerSpeed:5e3,tickerDirection:"next",tickerHover:false,wrapperClass:"bx-wrapper",startingSlide:0,displaySlideQty:1,moveSlideQty:1,randomStart:false,onBeforeSlide:function(){},onAfterSlide:function(){},onLastSlide:function(){},onFirstSlide:function(){},onNextSlide:function(){},onPrevSlide:function(){},buildPager:null};var b=a.extend(c,b);var d=this;var e="";var f="";var g="";var h="";var i="";var j="";var k="";var l="";var m="";var n="";var o="";var p="";var q="";var r="";var s="";var t=true;var u=false;var v=0;var w=0;var x=0;var y=0;var z=0;var A=0;var B=0;var C=0;var D=0;var E=false;var F=0;var G=g.length-1;this.goToSlide=function(a,c){if(!E){E=true;x=a;b.onBeforeSlide(x,g.length,g.eq(x));if(typeof c=="undefined"){var c=true}if(c){if(b.auto){d.stopShow(true)}}slide=a;if(slide==F){b.onFirstSlide(x,g.length,g.eq(x))}if(slide==G){b.onLastSlide(x,g.length,g.eq(x))}if(b.mode=="horizontal"){e.animate({left:"-"+W(slide,"left")+"px"},b.speed,b.easing,function(){E=false;b.onAfterSlide(x,g.length,g.eq(x))})}else if(b.mode=="vertical"){e.animate({top:"-"+W(slide,"top")+"px"},b.speed,b.easing,function(){E=false;b.onAfterSlide(x,g.length,g.eq(x))})}else if(b.mode=="fade"){P()}V();if(b.moveSlideQty>1){a=Math.floor(a/b.moveSlideQty)}Q(a);T()}};this.goToNextSlide=function(a){if(typeof a=="undefined"){var a=true}if(a){if(b.auto){d.stopShow(true)}}if(!b.infiniteLoop){if(!E){var c=false;x=x+b.moveSlideQty;if(x<=G){V();b.onNextSlide(x,g.length,g.eq(x));d.goToSlide(x)}else{x-=b.moveSlideQty}}}else{if(!E){E=true;var c=false;x=x+b.moveSlideQty;if(x>G){x=x%g.length;c=true}b.onNextSlide(x,g.length,g.eq(x));b.onBeforeSlide(x,g.length,g.eq(x));if(b.mode=="horizontal"){var f=b.moveSlideQty*k;e.animate({left:"-="+f+"px"},b.speed,b.easing,function(){E=false;if(c){e.css("left","-"+W(x,"left")+"px")}b.onAfterSlide(x,g.length,g.eq(x))})}else if(b.mode=="vertical"){var h=b.moveSlideQty*w;e.animate({top:"-="+h+"px"},b.speed,b.easing,function(){E=false;if(c){e.css("top","-"+W(x,"top")+"px")}b.onAfterSlide(x,g.length,g.eq(x))})}else if(b.mode=="fade"){P()}if(b.moveSlideQty>1){Q(Math.ceil(x/b.moveSlideQty))}else{Q(x)}T()}}};this.goToPreviousSlide=function(c){if(typeof c=="undefined"){var c=true}if(c){if(b.auto){d.stopShow(true)}}if(!b.infiniteLoop){if(!E){var f=false;x=x-b.moveSlideQty;if(x<0){x=0;if(b.hideControlOnEnd){a(".bx-prev",h).hide()}}V();b.onPrevSlide(x,g.length,g.eq(x));d.goToSlide(x)}}else{if(!E){E=true;var f=false;x=x-b.moveSlideQty;if(x<0){negativeOffset=x%g.length;if(negativeOffset==0){x=0}else{x=g.length+negativeOffset}f=true}b.onPrevSlide(x,g.length,g.eq(x));b.onBeforeSlide(x,g.length,g.eq(x));if(b.mode=="horizontal"){var i=b.moveSlideQty*k;e.animate({left:"+="+i+"px"},b.speed,b.easing,function(){E=false;if(f){e.css("left","-"+W(x,"left")+"px")}b.onAfterSlide(x,g.length,g.eq(x))})}else if(b.mode=="vertical"){var j=b.moveSlideQty*w;e.animate({top:"+="+j+"px"},b.speed,b.easing,function(){E=false;if(f){e.css("top","-"+W(x,"top")+"px")}b.onAfterSlide(x,g.length,g.eq(x))})}else if(b.mode=="fade"){P()}if(b.moveSlideQty>1){Q(Math.ceil(x/b.moveSlideQty))}else{Q(x)}T()}}};this.goToFirstSlide=function(a){if(typeof a=="undefined"){var a=true}d.goToSlide(F,a)};this.goToLastSlide=function(){if(typeof a=="undefined"){var a=true}d.goToSlide(G,a)};this.getCurrentSlide=function(){return x};this.getSlideCount=function(){return g.length};this.stopShow=function(a){clearInterval(o);if(typeof a=="undefined"){var a=true}if(a&&b.autoControls){p.html(r).removeClass("stop").addClass("start");t=false}};this.startShow=function(a){if(typeof a=="undefined"){var a=true}K();if(a&&b.autoControls){p.html(s).removeClass("start").addClass("stop");t=true}};this.stopTicker=function(a){e.stop();if(typeof a=="undefined"){var a=true}if(a&&b.ticker){p.html(r).removeClass("stop").addClass("start");t=false}};this.startTicker=function(a){if(b.mode=="horizontal"){if(b.tickerDirection=="next"){var c=parseInt(e.css("left"));var d=A+c+g.eq(0).width()}else if(b.tickerDirection=="prev"){var c=-parseInt(e.css("left"));var d=c-g.eq(0).width()}var f=d*b.tickerSpeed/A;L(C,d,f)}else if(b.mode=="vertical"){if(b.tickerDirection=="next"){var h=parseInt(e.css("top"));var d=B+h+g.eq(0).height()}else if(b.tickerDirection=="prev"){var h=-parseInt(e.css("top"));var d=h-g.eq(0).height()}var f=d*b.tickerSpeed/B;L(D,d,f);if(typeof a=="undefined"){var a=true}if(a&&b.ticker){p.html(s).removeClass("start").addClass("stop");t=true}}};this.initShow=function(){e=a(this);f=e.clone();g=e.children();h="";i=e.children(":first");j=i.width();v=0;k=i.outerWidth();w=0;l=X();m=Y();E=false;n="";x=0;y=0;z=0;o="";p="";q="";r="";s="";t=true;u=false;A=0;B=0;C=0;D=0;F=0;G=g.length-1;g.each(function(b){if(a(this).outerHeight()>w){w=a(this).outerHeight()}if(a(this).outerWidth()>v){v=a(this).outerWidth()}});if(b.randomStart){var c=Math.floor(Math.random()*g.length);x=c;y=k*(b.moveSlideQty+c);z=w*(b.moveSlideQty+c)}else{x=b.startingSlide;y=k*(b.moveSlideQty+b.startingSlide);z=w*(b.moveSlideQty+b.startingSlide)}H();if(b.pager&&!b.ticker){if(b.pagerType=="full"){S("full")}else if(b.pagerType=="short"){S("short")}}if(b.controls&&!b.ticker){J()}if(b.auto||b.ticker){if(b.autoControls){M()}if(b.autoStart){setTimeout(function(){d.startShow(true)},b.autoDelay)}else{d.stopShow(true)}if(b.autoHover&&!b.ticker){N()}}if(b.moveSlideQty>1){Q(Math.ceil(x/b.moveSlideQty))}else{Q(x)}V();if(b.captions){T()}b.onAfterSlide(x,g.length,g.eq(x))};this.destroyShow=function(){clearInterval(o);a(".bx-next, .bx-prev, .bx-pager, .bx-auto",h).remove();e.unwrap().unwrap().removeAttr("style");e.children().removeAttr("style").not(".pager").remove();g.removeClass("pager")};this.reloadShow=function(){d.destroyShow();d.initShow()};this.each(function(){if(a(this).children().length>0){d.initShow()}});return this};jQuery.fx.prototype.cur=function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var a=parseFloat(jQuery.css(this.elem,this.prop));return a}})(jQuery) \ No newline at end of file diff --git a/statics/space/default/follow.html b/statics/space/default/follow.html new file mode 100644 index 0000000..59a6d1d --- /dev/null +++ b/statics/space/default/follow.html @@ -0,0 +1,54 @@ +{template "head.html"} +{template "header.html"} +
+
+
+
+
+
+
+

{$title}

+
+
+
+ {list action=table table=sns_follow fid=$space.uid order=ctime page=1 pagesize=10 urlrule=$urlrule} +
+
+ +
+
+
+ {if $ci->db->where('uid', $t.uid)->count_all_results('member_online')} + + {else} + + {/if} + {$t.username} + + +
+
+ {php $m=dr_sns_info($t.uid);} + 关注{$m.follow}| + 粉丝{$m.fans}| + 动态{$m.weibo} +
+
+ +
+
+
+ {/list} +
{$pages}
+
+
+
+
+
+ {template "sidebar.html"} +
+
+ {template "footer.html"} +
+ + \ No newline at end of file diff --git a/statics/space/default/fonts/glyphicons-halflings-regular.eot b/statics/space/default/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 0000000..b93a495 Binary files /dev/null and b/statics/space/default/fonts/glyphicons-halflings-regular.eot differ diff --git a/statics/space/default/fonts/glyphicons-halflings-regular.svg b/statics/space/default/fonts/glyphicons-halflings-regular.svg new file mode 100644 index 0000000..94fb549 --- /dev/null +++ b/statics/space/default/fonts/glyphicons-halflings-regular.svg @@ -0,0 +1,288 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/statics/space/default/fonts/glyphicons-halflings-regular.ttf b/statics/space/default/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000..1413fc6 Binary files /dev/null and b/statics/space/default/fonts/glyphicons-halflings-regular.ttf differ diff --git a/statics/space/default/fonts/glyphicons-halflings-regular.woff b/statics/space/default/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 0000000..9e61285 Binary files /dev/null and b/statics/space/default/fonts/glyphicons-halflings-regular.woff differ diff --git a/statics/space/default/fonts/glyphicons-halflings-regular.woff2 b/statics/space/default/fonts/glyphicons-halflings-regular.woff2 new file mode 100644 index 0000000..64539b5 Binary files /dev/null and b/statics/space/default/fonts/glyphicons-halflings-regular.woff2 differ diff --git a/statics/space/default/footer.html b/statics/space/default/footer.html new file mode 100644 index 0000000..5a84f7f --- /dev/null +++ b/statics/space/default/footer.html @@ -0,0 +1,18 @@ + \ No newline at end of file diff --git a/statics/space/default/head.html b/statics/space/default/head.html new file mode 100644 index 0000000..33bd1a8 --- /dev/null +++ b/statics/space/default/head.html @@ -0,0 +1,51 @@ + + + + + +{$meta_title} + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/statics/space/default/header.html b/statics/space/default/header.html new file mode 100644 index 0000000..be344e2 --- /dev/null +++ b/statics/space/default/header.html @@ -0,0 +1,32 @@ + +
+
+
+
+ +
+

浏览:{$space.hits}次

+
+
+
+ + +
+
+
当前位置:首页 > {dr_space_catpos($spaceid, $catid, ' > ')}
+
diff --git a/statics/space/default/images/bg.png b/statics/space/default/images/bg.png new file mode 100644 index 0000000..cfbab34 Binary files /dev/null and b/statics/space/default/images/bg.png differ diff --git a/statics/space/default/images/core_bg.png b/statics/space/default/images/core_bg.png new file mode 100644 index 0000000..67d1b38 Binary files /dev/null and b/statics/space/default/images/core_bg.png differ diff --git a/statics/space/default/images/hh.png b/statics/space/default/images/hh.png new file mode 100644 index 0000000..6a8c30b Binary files /dev/null and b/statics/space/default/images/hh.png differ diff --git a/statics/space/default/images/mini_add.png b/statics/space/default/images/mini_add.png new file mode 100644 index 0000000..43dcba0 Binary files /dev/null and b/statics/space/default/images/mini_add.png differ diff --git a/statics/space/default/images/mini_mail.png b/statics/space/default/images/mini_mail.png new file mode 100644 index 0000000..72e5e92 Binary files /dev/null and b/statics/space/default/images/mini_mail.png differ diff --git a/statics/space/default/images/mnfollow.png b/statics/space/default/images/mnfollow.png new file mode 100644 index 0000000..b346ef6 Binary files /dev/null and b/statics/space/default/images/mnfollow.png differ diff --git a/statics/space/default/index.html b/statics/space/default/index.html new file mode 100644 index 0000000..70a49b2 --- /dev/null +++ b/statics/space/default/index.html @@ -0,0 +1,115 @@ +{template "head.html"} +{template "header.html"} +
+
+
+ +
+ + + {list action=table table=sns_feed uid=$space.uid order=inputtime num=6} +
+
+
+ +
+
+

+ {$t.username} + +

+ + {dr_sns_content($t.content)} + {php $images = $t.images ? @explode('|', $t.images) : '';} + {if $images} +
+
+
    + {loop $images $img} +
  • + +
  • + {/loop} +
+
+ {/if} + {if $t.repost_id && $repost = dr_sns_feed($t.repost_id)} +
+
+
+ @{$repost.username}
+
{dr_sns_content($repost.content)}
+

+ + 原文转发({$repost.repost})| + 原文评论({$repost.comment}) + + +   {dr_fdate($repost.inputtime)} + {$repost.source} + +

+
+ {/if} +
+

+ + 转发 + | + {if @in_array($t.id, $favorite)}取消收藏{else}收藏{/if} + | + 赞({$t.digg}) + | + 评论({$t.comment}) + + + +   {dr_fdate($t.inputtime)} + + {$t.source} + {if $member.adminid || $t.uid==$member.uid} + +   删除 + + {/if} + +

+ +
+
+
+ {/list} + {if $count} + + {else} +
+ 这家伙很懒!什么也没有留下~~ +
+ {/if} +
+
+
+ {template "sidebar.html"} +
+
+ {template "footer.html"} +
+ + + + \ No newline at end of file diff --git a/statics/space/default/js/bootstrap.js b/statics/space/default/js/bootstrap.js new file mode 100644 index 0000000..5debfd7 --- /dev/null +++ b/statics/space/default/js/bootstrap.js @@ -0,0 +1,2363 @@ +/*! + * Bootstrap v3.3.5 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under the MIT license + */ + +if (typeof jQuery === 'undefined') { + throw new Error('Bootstrap\'s JavaScript requires jQuery') +} + ++function ($) { + 'use strict'; + var version = $.fn.jquery.split(' ')[0].split('.') + if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1)) { + throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher') + } +}(jQuery); + +/* ======================================================================== + * Bootstrap: transition.js v3.3.5 + * http://getbootstrap.com/javascript/#transitions + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) + // ============================================================ + + function transitionEnd() { + var el = document.createElement('bootstrap') + + var transEndEventNames = { + WebkitTransition : 'webkitTransitionEnd', + MozTransition : 'transitionend', + OTransition : 'oTransitionEnd otransitionend', + transition : 'transitionend' + } + + for (var name in transEndEventNames) { + if (el.style[name] !== undefined) { + return { end: transEndEventNames[name] } + } + } + + return false // explicit for ie8 ( ._.) + } + + // http://blog.alexmaccaw.com/css-transitions + $.fn.emulateTransitionEnd = function (duration) { + var called = false + var $el = this + $(this).one('bsTransitionEnd', function () { called = true }) + var callback = function () { if (!called) $($el).trigger($.support.transition.end) } + setTimeout(callback, duration) + return this + } + + $(function () { + $.support.transition = transitionEnd() + + if (!$.support.transition) return + + $.event.special.bsTransitionEnd = { + bindType: $.support.transition.end, + delegateType: $.support.transition.end, + handle: function (e) { + if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments) + } + } + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: alert.js v3.3.5 + * http://getbootstrap.com/javascript/#alerts + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // ALERT CLASS DEFINITION + // ====================== + + var dismiss = '[data-dismiss="alert"]' + var Alert = function (el) { + $(el).on('click', dismiss, this.close) + } + + Alert.VERSION = '3.3.5' + + Alert.TRANSITION_DURATION = 150 + + Alert.prototype.close = function (e) { + var $this = $(this) + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + var $parent = $(selector) + + if (e) e.preventDefault() + + if (!$parent.length) { + $parent = $this.closest('.alert') + } + + $parent.trigger(e = $.Event('close.bs.alert')) + + if (e.isDefaultPrevented()) return + + $parent.removeClass('in') + + function removeElement() { + // detach from parent, fire event then clean up data + $parent.detach().trigger('closed.bs.alert').remove() + } + + $.support.transition && $parent.hasClass('fade') ? + $parent + .one('bsTransitionEnd', removeElement) + .emulateTransitionEnd(Alert.TRANSITION_DURATION) : + removeElement() + } + + + // ALERT PLUGIN DEFINITION + // ======================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.alert') + + if (!data) $this.data('bs.alert', (data = new Alert(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + var old = $.fn.alert + + $.fn.alert = Plugin + $.fn.alert.Constructor = Alert + + + // ALERT NO CONFLICT + // ================= + + $.fn.alert.noConflict = function () { + $.fn.alert = old + return this + } + + + // ALERT DATA-API + // ============== + + $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: button.js v3.3.5 + * http://getbootstrap.com/javascript/#buttons + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // BUTTON PUBLIC CLASS DEFINITION + // ============================== + + var Button = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Button.DEFAULTS, options) + this.isLoading = false + } + + Button.VERSION = '3.3.5' + + Button.DEFAULTS = { + loadingText: 'loading...' + } + + Button.prototype.setState = function (state) { + var d = 'disabled' + var $el = this.$element + var val = $el.is('input') ? 'val' : 'html' + var data = $el.data() + + state += 'Text' + + if (data.resetText == null) $el.data('resetText', $el[val]()) + + // push to event loop to allow forms to submit + setTimeout($.proxy(function () { + $el[val](data[state] == null ? this.options[state] : data[state]) + + if (state == 'loadingText') { + this.isLoading = true + $el.addClass(d).attr(d, d) + } else if (this.isLoading) { + this.isLoading = false + $el.removeClass(d).removeAttr(d) + } + }, this), 0) + } + + Button.prototype.toggle = function () { + var changed = true + var $parent = this.$element.closest('[data-toggle="buttons"]') + + if ($parent.length) { + var $input = this.$element.find('input') + if ($input.prop('type') == 'radio') { + if ($input.prop('checked')) changed = false + $parent.find('.active').removeClass('active') + this.$element.addClass('active') + } else if ($input.prop('type') == 'checkbox') { + if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false + this.$element.toggleClass('active') + } + $input.prop('checked', this.$element.hasClass('active')) + if (changed) $input.trigger('change') + } else { + this.$element.attr('aria-pressed', !this.$element.hasClass('active')) + this.$element.toggleClass('active') + } + } + + + // BUTTON PLUGIN DEFINITION + // ======================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.button') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.button', (data = new Button(this, options))) + + if (option == 'toggle') data.toggle() + else if (option) data.setState(option) + }) + } + + var old = $.fn.button + + $.fn.button = Plugin + $.fn.button.Constructor = Button + + + // BUTTON NO CONFLICT + // ================== + + $.fn.button.noConflict = function () { + $.fn.button = old + return this + } + + + // BUTTON DATA-API + // =============== + + $(document) + .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) { + var $btn = $(e.target) + if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') + Plugin.call($btn, 'toggle') + if (!($(e.target).is('input[type="radio"]') || $(e.target).is('input[type="checkbox"]'))) e.preventDefault() + }) + .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) { + $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type)) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: carousel.js v3.3.5 + * http://getbootstrap.com/javascript/#carousel + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // CAROUSEL CLASS DEFINITION + // ========================= + + var Carousel = function (element, options) { + this.$element = $(element) + this.$indicators = this.$element.find('.carousel-indicators') + this.options = options + this.paused = null + this.sliding = null + this.interval = null + this.$active = null + this.$items = null + + this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this)) + + this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element + .on('mouseenter.bs.carousel', $.proxy(this.pause, this)) + .on('mouseleave.bs.carousel', $.proxy(this.cycle, this)) + } + + Carousel.VERSION = '3.3.5' + + Carousel.TRANSITION_DURATION = 600 + + Carousel.DEFAULTS = { + interval: 5000, + pause: 'hover', + wrap: true, + keyboard: true + } + + Carousel.prototype.keydown = function (e) { + if (/input|textarea/i.test(e.target.tagName)) return + switch (e.which) { + case 37: this.prev(); break + case 39: this.next(); break + default: return + } + + e.preventDefault() + } + + Carousel.prototype.cycle = function (e) { + e || (this.paused = false) + + this.interval && clearInterval(this.interval) + + this.options.interval + && !this.paused + && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) + + return this + } + + Carousel.prototype.getItemIndex = function (item) { + this.$items = item.parent().children('.item') + return this.$items.index(item || this.$active) + } + + Carousel.prototype.getItemForDirection = function (direction, active) { + var activeIndex = this.getItemIndex(active) + var willWrap = (direction == 'prev' && activeIndex === 0) + || (direction == 'next' && activeIndex == (this.$items.length - 1)) + if (willWrap && !this.options.wrap) return active + var delta = direction == 'prev' ? -1 : 1 + var itemIndex = (activeIndex + delta) % this.$items.length + return this.$items.eq(itemIndex) + } + + Carousel.prototype.to = function (pos) { + var that = this + var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active')) + + if (pos > (this.$items.length - 1) || pos < 0) return + + if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid" + if (activeIndex == pos) return this.pause().cycle() + + return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos)) + } + + Carousel.prototype.pause = function (e) { + e || (this.paused = true) + + if (this.$element.find('.next, .prev').length && $.support.transition) { + this.$element.trigger($.support.transition.end) + this.cycle(true) + } + + this.interval = clearInterval(this.interval) + + return this + } + + Carousel.prototype.next = function () { + if (this.sliding) return + return this.slide('next') + } + + Carousel.prototype.prev = function () { + if (this.sliding) return + return this.slide('prev') + } + + Carousel.prototype.slide = function (type, next) { + var $active = this.$element.find('.item.active') + var $next = next || this.getItemForDirection(type, $active) + var isCycling = this.interval + var direction = type == 'next' ? 'left' : 'right' + var that = this + + if ($next.hasClass('active')) return (this.sliding = false) + + var relatedTarget = $next[0] + var slideEvent = $.Event('slide.bs.carousel', { + relatedTarget: relatedTarget, + direction: direction + }) + this.$element.trigger(slideEvent) + if (slideEvent.isDefaultPrevented()) return + + this.sliding = true + + isCycling && this.pause() + + if (this.$indicators.length) { + this.$indicators.find('.active').removeClass('active') + var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)]) + $nextIndicator && $nextIndicator.addClass('active') + } + + var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid" + if ($.support.transition && this.$element.hasClass('slide')) { + $next.addClass(type) + $next[0].offsetWidth // force reflow + $active.addClass(direction) + $next.addClass(direction) + $active + .one('bsTransitionEnd', function () { + $next.removeClass([type, direction].join(' ')).addClass('active') + $active.removeClass(['active', direction].join(' ')) + that.sliding = false + setTimeout(function () { + that.$element.trigger(slidEvent) + }, 0) + }) + .emulateTransitionEnd(Carousel.TRANSITION_DURATION) + } else { + $active.removeClass('active') + $next.addClass('active') + this.sliding = false + this.$element.trigger(slidEvent) + } + + isCycling && this.cycle() + + return this + } + + + // CAROUSEL PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.carousel') + var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) + var action = typeof option == 'string' ? option : options.slide + + if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) + if (typeof option == 'number') data.to(option) + else if (action) data[action]() + else if (options.interval) data.pause().cycle() + }) + } + + var old = $.fn.carousel + + $.fn.carousel = Plugin + $.fn.carousel.Constructor = Carousel + + + // CAROUSEL NO CONFLICT + // ==================== + + $.fn.carousel.noConflict = function () { + $.fn.carousel = old + return this + } + + + // CAROUSEL DATA-API + // ================= + + var clickHandler = function (e) { + var href + var $this = $(this) + var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7 + if (!$target.hasClass('carousel')) return + var options = $.extend({}, $target.data(), $this.data()) + var slideIndex = $this.attr('data-slide-to') + if (slideIndex) options.interval = false + + Plugin.call($target, options) + + if (slideIndex) { + $target.data('bs.carousel').to(slideIndex) + } + + e.preventDefault() + } + + $(document) + .on('click.bs.carousel.data-api', '[data-slide]', clickHandler) + .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler) + + $(window).on('load', function () { + $('[data-ride="carousel"]').each(function () { + var $carousel = $(this) + Plugin.call($carousel, $carousel.data()) + }) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: collapse.js v3.3.5 + * http://getbootstrap.com/javascript/#collapse + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // COLLAPSE PUBLIC CLASS DEFINITION + // ================================ + + var Collapse = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Collapse.DEFAULTS, options) + this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' + + '[data-toggle="collapse"][data-target="#' + element.id + '"]') + this.transitioning = null + + if (this.options.parent) { + this.$parent = this.getParent() + } else { + this.addAriaAndCollapsedClass(this.$element, this.$trigger) + } + + if (this.options.toggle) this.toggle() + } + + Collapse.VERSION = '3.3.5' + + Collapse.TRANSITION_DURATION = 350 + + Collapse.DEFAULTS = { + toggle: true + } + + Collapse.prototype.dimension = function () { + var hasWidth = this.$element.hasClass('width') + return hasWidth ? 'width' : 'height' + } + + Collapse.prototype.show = function () { + if (this.transitioning || this.$element.hasClass('in')) return + + var activesData + var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing') + + if (actives && actives.length) { + activesData = actives.data('bs.collapse') + if (activesData && activesData.transitioning) return + } + + var startEvent = $.Event('show.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + if (actives && actives.length) { + Plugin.call(actives, 'hide') + activesData || actives.data('bs.collapse', null) + } + + var dimension = this.dimension() + + this.$element + .removeClass('collapse') + .addClass('collapsing')[dimension](0) + .attr('aria-expanded', true) + + this.$trigger + .removeClass('collapsed') + .attr('aria-expanded', true) + + this.transitioning = 1 + + var complete = function () { + this.$element + .removeClass('collapsing') + .addClass('collapse in')[dimension]('') + this.transitioning = 0 + this.$element + .trigger('shown.bs.collapse') + } + + if (!$.support.transition) return complete.call(this) + + var scrollSize = $.camelCase(['scroll', dimension].join('-')) + + this.$element + .one('bsTransitionEnd', $.proxy(complete, this)) + .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize]) + } + + Collapse.prototype.hide = function () { + if (this.transitioning || !this.$element.hasClass('in')) return + + var startEvent = $.Event('hide.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + var dimension = this.dimension() + + this.$element[dimension](this.$element[dimension]())[0].offsetHeight + + this.$element + .addClass('collapsing') + .removeClass('collapse in') + .attr('aria-expanded', false) + + this.$trigger + .addClass('collapsed') + .attr('aria-expanded', false) + + this.transitioning = 1 + + var complete = function () { + this.transitioning = 0 + this.$element + .removeClass('collapsing') + .addClass('collapse') + .trigger('hidden.bs.collapse') + } + + if (!$.support.transition) return complete.call(this) + + this.$element + [dimension](0) + .one('bsTransitionEnd', $.proxy(complete, this)) + .emulateTransitionEnd(Collapse.TRANSITION_DURATION) + } + + Collapse.prototype.toggle = function () { + this[this.$element.hasClass('in') ? 'hide' : 'show']() + } + + Collapse.prototype.getParent = function () { + return $(this.options.parent) + .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]') + .each($.proxy(function (i, element) { + var $element = $(element) + this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element) + }, this)) + .end() + } + + Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) { + var isOpen = $element.hasClass('in') + + $element.attr('aria-expanded', isOpen) + $trigger + .toggleClass('collapsed', !isOpen) + .attr('aria-expanded', isOpen) + } + + function getTargetFromTrigger($trigger) { + var href + var target = $trigger.attr('data-target') + || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7 + + return $(target) + } + + + // COLLAPSE PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.collapse') + var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) + + if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false + if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.collapse + + $.fn.collapse = Plugin + $.fn.collapse.Constructor = Collapse + + + // COLLAPSE NO CONFLICT + // ==================== + + $.fn.collapse.noConflict = function () { + $.fn.collapse = old + return this + } + + + // COLLAPSE DATA-API + // ================= + + $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) { + var $this = $(this) + + if (!$this.attr('data-target')) e.preventDefault() + + var $target = getTargetFromTrigger($this) + var data = $target.data('bs.collapse') + var option = data ? 'toggle' : $this.data() + + Plugin.call($target, option) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: dropdown.js v3.3.5 + * http://getbootstrap.com/javascript/#dropdowns + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // DROPDOWN CLASS DEFINITION + // ========================= + + var backdrop = '.dropdown-backdrop' + var toggle = '[data-toggle="dropdown"]' + var Dropdown = function (element) { + $(element).on('click.bs.dropdown', this.toggle) + } + + Dropdown.VERSION = '3.3.5' + + function getParent($this) { + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + var $parent = selector && $(selector) + + return $parent && $parent.length ? $parent : $this.parent() + } + + function clearMenus(e) { + if (e && e.which === 3) return + $(backdrop).remove() + $(toggle).each(function () { + var $this = $(this) + var $parent = getParent($this) + var relatedTarget = { relatedTarget: this } + + if (!$parent.hasClass('open')) return + + if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return + + $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget)) + + if (e.isDefaultPrevented()) return + + $this.attr('aria-expanded', 'false') + $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget) + }) + } + + Dropdown.prototype.toggle = function (e) { + var $this = $(this) + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + clearMenus() + + if (!isActive) { + if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { + // if mobile we use a backdrop because click events don't delegate + $(document.createElement('div')) + .addClass('dropdown-backdrop') + .insertAfter($(this)) + .on('click', clearMenus) + } + + var relatedTarget = { relatedTarget: this } + $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget)) + + if (e.isDefaultPrevented()) return + + $this + .trigger('focus') + .attr('aria-expanded', 'true') + + $parent + .toggleClass('open') + .trigger('shown.bs.dropdown', relatedTarget) + } + + return false + } + + Dropdown.prototype.keydown = function (e) { + if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return + + var $this = $(this) + + e.preventDefault() + e.stopPropagation() + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + if (!isActive && e.which != 27 || isActive && e.which == 27) { + if (e.which == 27) $parent.find(toggle).trigger('focus') + return $this.trigger('click') + } + + var desc = ' li:not(.disabled):visible a' + var $items = $parent.find('.dropdown-menu' + desc) + + if (!$items.length) return + + var index = $items.index(e.target) + + if (e.which == 38 && index > 0) index-- // up + if (e.which == 40 && index < $items.length - 1) index++ // down + if (!~index) index = 0 + + $items.eq(index).trigger('focus') + } + + + // DROPDOWN PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.dropdown') + + if (!data) $this.data('bs.dropdown', (data = new Dropdown(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + var old = $.fn.dropdown + + $.fn.dropdown = Plugin + $.fn.dropdown.Constructor = Dropdown + + + // DROPDOWN NO CONFLICT + // ==================== + + $.fn.dropdown.noConflict = function () { + $.fn.dropdown = old + return this + } + + + // APPLY TO STANDARD DROPDOWN ELEMENTS + // =================================== + + $(document) + .on('click.bs.dropdown.data-api', clearMenus) + .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) + .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle) + .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown) + .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: modal.js v3.3.5 + * http://getbootstrap.com/javascript/#modals + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // MODAL CLASS DEFINITION + // ====================== + + var Modal = function (element, options) { + this.options = options + this.$body = $(document.body) + this.$element = $(element) + this.$dialog = this.$element.find('.modal-dialog') + this.$backdrop = null + this.isShown = null + this.originalBodyPad = null + this.scrollbarWidth = 0 + this.ignoreBackdropClick = false + + if (this.options.remote) { + this.$element + .find('.modal-content') + .load(this.options.remote, $.proxy(function () { + this.$element.trigger('loaded.bs.modal') + }, this)) + } + } + + Modal.VERSION = '3.3.5' + + Modal.TRANSITION_DURATION = 300 + Modal.BACKDROP_TRANSITION_DURATION = 150 + + Modal.DEFAULTS = { + backdrop: true, + keyboard: true, + show: true + } + + Modal.prototype.toggle = function (_relatedTarget) { + return this.isShown ? this.hide() : this.show(_relatedTarget) + } + + Modal.prototype.show = function (_relatedTarget) { + var that = this + var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget }) + + this.$element.trigger(e) + + if (this.isShown || e.isDefaultPrevented()) return + + this.isShown = true + + this.checkScrollbar() + this.setScrollbar() + this.$body.addClass('modal-open') + + this.escape() + this.resize() + + this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this)) + + this.$dialog.on('mousedown.dismiss.bs.modal', function () { + that.$element.one('mouseup.dismiss.bs.modal', function (e) { + if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true + }) + }) + + this.backdrop(function () { + var transition = $.support.transition && that.$element.hasClass('fade') + + if (!that.$element.parent().length) { + that.$element.appendTo(that.$body) // don't move modals dom position + } + + that.$element + .show() + .scrollTop(0) + + that.adjustDialog() + + if (transition) { + that.$element[0].offsetWidth // force reflow + } + + that.$element.addClass('in') + + that.enforceFocus() + + var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget }) + + transition ? + that.$dialog // wait for modal to slide in + .one('bsTransitionEnd', function () { + that.$element.trigger('focus').trigger(e) + }) + .emulateTransitionEnd(Modal.TRANSITION_DURATION) : + that.$element.trigger('focus').trigger(e) + }) + } + + Modal.prototype.hide = function (e) { + if (e) e.preventDefault() + + e = $.Event('hide.bs.modal') + + this.$element.trigger(e) + + if (!this.isShown || e.isDefaultPrevented()) return + + this.isShown = false + + this.escape() + this.resize() + + $(document).off('focusin.bs.modal') + + this.$element + .removeClass('in') + .off('click.dismiss.bs.modal') + .off('mouseup.dismiss.bs.modal') + + this.$dialog.off('mousedown.dismiss.bs.modal') + + $.support.transition && this.$element.hasClass('fade') ? + this.$element + .one('bsTransitionEnd', $.proxy(this.hideModal, this)) + .emulateTransitionEnd(Modal.TRANSITION_DURATION) : + this.hideModal() + } + + Modal.prototype.enforceFocus = function () { + $(document) + .off('focusin.bs.modal') // guard against infinite focus loop + .on('focusin.bs.modal', $.proxy(function (e) { + if (this.$element[0] !== e.target && !this.$element.has(e.target).length) { + this.$element.trigger('focus') + } + }, this)) + } + + Modal.prototype.escape = function () { + if (this.isShown && this.options.keyboard) { + this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) { + e.which == 27 && this.hide() + }, this)) + } else if (!this.isShown) { + this.$element.off('keydown.dismiss.bs.modal') + } + } + + Modal.prototype.resize = function () { + if (this.isShown) { + $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this)) + } else { + $(window).off('resize.bs.modal') + } + } + + Modal.prototype.hideModal = function () { + var that = this + this.$element.hide() + this.backdrop(function () { + that.$body.removeClass('modal-open') + that.resetAdjustments() + that.resetScrollbar() + that.$element.trigger('hidden.bs.modal') + }) + } + + Modal.prototype.removeBackdrop = function () { + this.$backdrop && this.$backdrop.remove() + this.$backdrop = null + } + + Modal.prototype.backdrop = function (callback) { + var that = this + var animate = this.$element.hasClass('fade') ? 'fade' : '' + + if (this.isShown && this.options.backdrop) { + var doAnimate = $.support.transition && animate + + this.$backdrop = $(document.createElement('div')) + .addClass('modal-backdrop ' + animate) + .appendTo(this.$body) + + this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) { + if (this.ignoreBackdropClick) { + this.ignoreBackdropClick = false + return + } + if (e.target !== e.currentTarget) return + this.options.backdrop == 'static' + ? this.$element[0].focus() + : this.hide() + }, this)) + + if (doAnimate) this.$backdrop[0].offsetWidth // force reflow + + this.$backdrop.addClass('in') + + if (!callback) return + + doAnimate ? + this.$backdrop + .one('bsTransitionEnd', callback) + .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : + callback() + + } else if (!this.isShown && this.$backdrop) { + this.$backdrop.removeClass('in') + + var callbackRemove = function () { + that.removeBackdrop() + callback && callback() + } + $.support.transition && this.$element.hasClass('fade') ? + this.$backdrop + .one('bsTransitionEnd', callbackRemove) + .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : + callbackRemove() + + } else if (callback) { + callback() + } + } + + // these following methods are used to handle overflowing modals + + Modal.prototype.handleUpdate = function () { + this.adjustDialog() + } + + Modal.prototype.adjustDialog = function () { + var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight + + this.$element.css({ + paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '', + paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : '' + }) + } + + Modal.prototype.resetAdjustments = function () { + this.$element.css({ + paddingLeft: '', + paddingRight: '' + }) + } + + Modal.prototype.checkScrollbar = function () { + var fullWindowWidth = window.innerWidth + if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8 + var documentElementRect = document.documentElement.getBoundingClientRect() + fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left) + } + this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth + this.scrollbarWidth = this.measureScrollbar() + } + + Modal.prototype.setScrollbar = function () { + var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10) + this.originalBodyPad = document.body.style.paddingRight || '' + if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth) + } + + Modal.prototype.resetScrollbar = function () { + this.$body.css('padding-right', this.originalBodyPad) + } + + Modal.prototype.measureScrollbar = function () { // thx walsh + var scrollDiv = document.createElement('div') + scrollDiv.className = 'modal-scrollbar-measure' + this.$body.append(scrollDiv) + var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth + this.$body[0].removeChild(scrollDiv) + return scrollbarWidth + } + + + // MODAL PLUGIN DEFINITION + // ======================= + + function Plugin(option, _relatedTarget) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.modal') + var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option) + + if (!data) $this.data('bs.modal', (data = new Modal(this, options))) + if (typeof option == 'string') data[option](_relatedTarget) + else if (options.show) data.show(_relatedTarget) + }) + } + + var old = $.fn.modal + + $.fn.modal = Plugin + $.fn.modal.Constructor = Modal + + + // MODAL NO CONFLICT + // ================= + + $.fn.modal.noConflict = function () { + $.fn.modal = old + return this + } + + + // MODAL DATA-API + // ============== + + $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) { + var $this = $(this) + var href = $this.attr('href') + var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7 + var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data()) + + if ($this.is('a')) e.preventDefault() + + $target.one('show.bs.modal', function (showEvent) { + if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown + $target.one('hidden.bs.modal', function () { + $this.is(':visible') && $this.trigger('focus') + }) + }) + Plugin.call($target, option, this) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: tooltip.js v3.3.5 + * http://getbootstrap.com/javascript/#tooltip + * Inspired by the original jQuery.tipsy by Jason Frame + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // TOOLTIP PUBLIC CLASS DEFINITION + // =============================== + + var Tooltip = function (element, options) { + this.type = null + this.options = null + this.enabled = null + this.timeout = null + this.hoverState = null + this.$element = null + this.inState = null + + this.init('tooltip', element, options) + } + + Tooltip.VERSION = '3.3.5' + + Tooltip.TRANSITION_DURATION = 150 + + Tooltip.DEFAULTS = { + animation: true, + placement: 'top', + selector: false, + template: '', + trigger: 'hover focus', + title: '', + delay: 0, + html: false, + container: false, + viewport: { + selector: 'body', + padding: 0 + } + } + + Tooltip.prototype.init = function (type, element, options) { + this.enabled = true + this.type = type + this.$element = $(element) + this.options = this.getOptions(options) + this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport)) + this.inState = { click: false, hover: false, focus: false } + + if (this.$element[0] instanceof document.constructor && !this.options.selector) { + throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!') + } + + var triggers = this.options.trigger.split(' ') + + for (var i = triggers.length; i--;) { + var trigger = triggers[i] + + if (trigger == 'click') { + this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) + } else if (trigger != 'manual') { + var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin' + var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout' + + this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this)) + this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this)) + } + } + + this.options.selector ? + (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : + this.fixTitle() + } + + Tooltip.prototype.getDefaults = function () { + return Tooltip.DEFAULTS + } + + Tooltip.prototype.getOptions = function (options) { + options = $.extend({}, this.getDefaults(), this.$element.data(), options) + + if (options.delay && typeof options.delay == 'number') { + options.delay = { + show: options.delay, + hide: options.delay + } + } + + return options + } + + Tooltip.prototype.getDelegateOptions = function () { + var options = {} + var defaults = this.getDefaults() + + this._options && $.each(this._options, function (key, value) { + if (defaults[key] != value) options[key] = value + }) + + return options + } + + Tooltip.prototype.enter = function (obj) { + var self = obj instanceof this.constructor ? + obj : $(obj.currentTarget).data('bs.' + this.type) + + if (!self) { + self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) + $(obj.currentTarget).data('bs.' + this.type, self) + } + + if (obj instanceof $.Event) { + self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true + } + + if (self.tip().hasClass('in') || self.hoverState == 'in') { + self.hoverState = 'in' + return + } + + clearTimeout(self.timeout) + + self.hoverState = 'in' + + if (!self.options.delay || !self.options.delay.show) return self.show() + + self.timeout = setTimeout(function () { + if (self.hoverState == 'in') self.show() + }, self.options.delay.show) + } + + Tooltip.prototype.isInStateTrue = function () { + for (var key in this.inState) { + if (this.inState[key]) return true + } + + return false + } + + Tooltip.prototype.leave = function (obj) { + var self = obj instanceof this.constructor ? + obj : $(obj.currentTarget).data('bs.' + this.type) + + if (!self) { + self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) + $(obj.currentTarget).data('bs.' + this.type, self) + } + + if (obj instanceof $.Event) { + self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false + } + + if (self.isInStateTrue()) return + + clearTimeout(self.timeout) + + self.hoverState = 'out' + + if (!self.options.delay || !self.options.delay.hide) return self.hide() + + self.timeout = setTimeout(function () { + if (self.hoverState == 'out') self.hide() + }, self.options.delay.hide) + } + + Tooltip.prototype.show = function () { + var e = $.Event('show.bs.' + this.type) + + if (this.hasContent() && this.enabled) { + this.$element.trigger(e) + + var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0]) + if (e.isDefaultPrevented() || !inDom) return + var that = this + + var $tip = this.tip() + + var tipId = this.getUID(this.type) + + this.setContent() + $tip.attr('id', tipId) + this.$element.attr('aria-describedby', tipId) + + if (this.options.animation) $tip.addClass('fade') + + var placement = typeof this.options.placement == 'function' ? + this.options.placement.call(this, $tip[0], this.$element[0]) : + this.options.placement + + var autoToken = /\s?auto?\s?/i + var autoPlace = autoToken.test(placement) + if (autoPlace) placement = placement.replace(autoToken, '') || 'top' + + $tip + .detach() + .css({ top: 0, left: 0, display: 'block' }) + .addClass(placement) + .data('bs.' + this.type, this) + + this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) + this.$element.trigger('inserted.bs.' + this.type) + + var pos = this.getPosition() + var actualWidth = $tip[0].offsetWidth + var actualHeight = $tip[0].offsetHeight + + if (autoPlace) { + var orgPlacement = placement + var viewportDim = this.getPosition(this.$viewport) + + placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' : + placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' : + placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' : + placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' : + placement + + $tip + .removeClass(orgPlacement) + .addClass(placement) + } + + var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight) + + this.applyPlacement(calculatedOffset, placement) + + var complete = function () { + var prevHoverState = that.hoverState + that.$element.trigger('shown.bs.' + that.type) + that.hoverState = null + + if (prevHoverState == 'out') that.leave(that) + } + + $.support.transition && this.$tip.hasClass('fade') ? + $tip + .one('bsTransitionEnd', complete) + .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : + complete() + } + } + + Tooltip.prototype.applyPlacement = function (offset, placement) { + var $tip = this.tip() + var width = $tip[0].offsetWidth + var height = $tip[0].offsetHeight + + // manually read margins because getBoundingClientRect includes difference + var marginTop = parseInt($tip.css('margin-top'), 10) + var marginLeft = parseInt($tip.css('margin-left'), 10) + + // we must check for NaN for ie 8/9 + if (isNaN(marginTop)) marginTop = 0 + if (isNaN(marginLeft)) marginLeft = 0 + + offset.top += marginTop + offset.left += marginLeft + + // $.fn.offset doesn't round pixel values + // so we use setOffset directly with our own function B-0 + $.offset.setOffset($tip[0], $.extend({ + using: function (props) { + $tip.css({ + top: Math.round(props.top), + left: Math.round(props.left) + }) + } + }, offset), 0) + + $tip.addClass('in') + + // check to see if placing tip in new offset caused the tip to resize itself + var actualWidth = $tip[0].offsetWidth + var actualHeight = $tip[0].offsetHeight + + if (placement == 'top' && actualHeight != height) { + offset.top = offset.top + height - actualHeight + } + + var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight) + + if (delta.left) offset.left += delta.left + else offset.top += delta.top + + var isVertical = /top|bottom/.test(placement) + var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight + var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight' + + $tip.offset(offset) + this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical) + } + + Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) { + this.arrow() + .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%') + .css(isVertical ? 'top' : 'left', '') + } + + Tooltip.prototype.setContent = function () { + var $tip = this.tip() + var title = this.getTitle() + + $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) + $tip.removeClass('fade in top bottom left right') + } + + Tooltip.prototype.hide = function (callback) { + var that = this + var $tip = $(this.$tip) + var e = $.Event('hide.bs.' + this.type) + + function complete() { + if (that.hoverState != 'in') $tip.detach() + that.$element + .removeAttr('aria-describedby') + .trigger('hidden.bs.' + that.type) + callback && callback() + } + + this.$element.trigger(e) + + if (e.isDefaultPrevented()) return + + $tip.removeClass('in') + + $.support.transition && $tip.hasClass('fade') ? + $tip + .one('bsTransitionEnd', complete) + .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : + complete() + + this.hoverState = null + + return this + } + + Tooltip.prototype.fixTitle = function () { + var $e = this.$element + if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') { + $e.attr('data-original-title', $e.attr('title') || '').attr('title', '') + } + } + + Tooltip.prototype.hasContent = function () { + return this.getTitle() + } + + Tooltip.prototype.getPosition = function ($element) { + $element = $element || this.$element + + var el = $element[0] + var isBody = el.tagName == 'BODY' + + var elRect = el.getBoundingClientRect() + if (elRect.width == null) { + // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093 + elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top }) + } + var elOffset = isBody ? { top: 0, left: 0 } : $element.offset() + var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() } + var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null + + return $.extend({}, elRect, scroll, outerDims, elOffset) + } + + Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) { + return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } : + placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } : + placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } : + /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width } + + } + + Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) { + var delta = { top: 0, left: 0 } + if (!this.$viewport) return delta + + var viewportPadding = this.options.viewport && this.options.viewport.padding || 0 + var viewportDimensions = this.getPosition(this.$viewport) + + if (/right|left/.test(placement)) { + var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll + var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight + if (topEdgeOffset < viewportDimensions.top) { // top overflow + delta.top = viewportDimensions.top - topEdgeOffset + } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow + delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset + } + } else { + var leftEdgeOffset = pos.left - viewportPadding + var rightEdgeOffset = pos.left + viewportPadding + actualWidth + if (leftEdgeOffset < viewportDimensions.left) { // left overflow + delta.left = viewportDimensions.left - leftEdgeOffset + } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow + delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset + } + } + + return delta + } + + Tooltip.prototype.getTitle = function () { + var title + var $e = this.$element + var o = this.options + + title = $e.attr('data-original-title') + || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) + + return title + } + + Tooltip.prototype.getUID = function (prefix) { + do prefix += ~~(Math.random() * 1000000) + while (document.getElementById(prefix)) + return prefix + } + + Tooltip.prototype.tip = function () { + if (!this.$tip) { + this.$tip = $(this.options.template) + if (this.$tip.length != 1) { + throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!') + } + } + return this.$tip + } + + Tooltip.prototype.arrow = function () { + return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')) + } + + Tooltip.prototype.enable = function () { + this.enabled = true + } + + Tooltip.prototype.disable = function () { + this.enabled = false + } + + Tooltip.prototype.toggleEnabled = function () { + this.enabled = !this.enabled + } + + Tooltip.prototype.toggle = function (e) { + var self = this + if (e) { + self = $(e.currentTarget).data('bs.' + this.type) + if (!self) { + self = new this.constructor(e.currentTarget, this.getDelegateOptions()) + $(e.currentTarget).data('bs.' + this.type, self) + } + } + + if (e) { + self.inState.click = !self.inState.click + if (self.isInStateTrue()) self.enter(self) + else self.leave(self) + } else { + self.tip().hasClass('in') ? self.leave(self) : self.enter(self) + } + } + + Tooltip.prototype.destroy = function () { + var that = this + clearTimeout(this.timeout) + this.hide(function () { + that.$element.off('.' + that.type).removeData('bs.' + that.type) + if (that.$tip) { + that.$tip.detach() + } + that.$tip = null + that.$arrow = null + that.$viewport = null + }) + } + + + // TOOLTIP PLUGIN DEFINITION + // ========================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.tooltip') + var options = typeof option == 'object' && option + + if (!data && /destroy|hide/.test(option)) return + if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.tooltip + + $.fn.tooltip = Plugin + $.fn.tooltip.Constructor = Tooltip + + + // TOOLTIP NO CONFLICT + // =================== + + $.fn.tooltip.noConflict = function () { + $.fn.tooltip = old + return this + } + +}(jQuery); + +/* ======================================================================== + * Bootstrap: popover.js v3.3.5 + * http://getbootstrap.com/javascript/#popovers + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // POPOVER PUBLIC CLASS DEFINITION + // =============================== + + var Popover = function (element, options) { + this.init('popover', element, options) + } + + if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js') + + Popover.VERSION = '3.3.5' + + Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, { + placement: 'right', + trigger: 'click', + content: '', + template: '' + }) + + + // NOTE: POPOVER EXTENDS tooltip.js + // ================================ + + Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype) + + Popover.prototype.constructor = Popover + + Popover.prototype.getDefaults = function () { + return Popover.DEFAULTS + } + + Popover.prototype.setContent = function () { + var $tip = this.tip() + var title = this.getTitle() + var content = this.getContent() + + $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) + $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events + this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text' + ](content) + + $tip.removeClass('fade top bottom left right in') + + // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do + // this manually by checking the contents. + if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide() + } + + Popover.prototype.hasContent = function () { + return this.getTitle() || this.getContent() + } + + Popover.prototype.getContent = function () { + var $e = this.$element + var o = this.options + + return $e.attr('data-content') + || (typeof o.content == 'function' ? + o.content.call($e[0]) : + o.content) + } + + Popover.prototype.arrow = function () { + return (this.$arrow = this.$arrow || this.tip().find('.arrow')) + } + + + // POPOVER PLUGIN DEFINITION + // ========================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.popover') + var options = typeof option == 'object' && option + + if (!data && /destroy|hide/.test(option)) return + if (!data) $this.data('bs.popover', (data = new Popover(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.popover + + $.fn.popover = Plugin + $.fn.popover.Constructor = Popover + + + // POPOVER NO CONFLICT + // =================== + + $.fn.popover.noConflict = function () { + $.fn.popover = old + return this + } + +}(jQuery); + +/* ======================================================================== + * Bootstrap: scrollspy.js v3.3.5 + * http://getbootstrap.com/javascript/#scrollspy + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // SCROLLSPY CLASS DEFINITION + // ========================== + + function ScrollSpy(element, options) { + this.$body = $(document.body) + this.$scrollElement = $(element).is(document.body) ? $(window) : $(element) + this.options = $.extend({}, ScrollSpy.DEFAULTS, options) + this.selector = (this.options.target || '') + ' .nav li > a' + this.offsets = [] + this.targets = [] + this.activeTarget = null + this.scrollHeight = 0 + + this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this)) + this.refresh() + this.process() + } + + ScrollSpy.VERSION = '3.3.5' + + ScrollSpy.DEFAULTS = { + offset: 10 + } + + ScrollSpy.prototype.getScrollHeight = function () { + return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight) + } + + ScrollSpy.prototype.refresh = function () { + var that = this + var offsetMethod = 'offset' + var offsetBase = 0 + + this.offsets = [] + this.targets = [] + this.scrollHeight = this.getScrollHeight() + + if (!$.isWindow(this.$scrollElement[0])) { + offsetMethod = 'position' + offsetBase = this.$scrollElement.scrollTop() + } + + this.$body + .find(this.selector) + .map(function () { + var $el = $(this) + var href = $el.data('target') || $el.attr('href') + var $href = /^#./.test(href) && $(href) + + return ($href + && $href.length + && $href.is(':visible') + && [[$href[offsetMethod]().top + offsetBase, href]]) || null + }) + .sort(function (a, b) { return a[0] - b[0] }) + .each(function () { + that.offsets.push(this[0]) + that.targets.push(this[1]) + }) + } + + ScrollSpy.prototype.process = function () { + var scrollTop = this.$scrollElement.scrollTop() + this.options.offset + var scrollHeight = this.getScrollHeight() + var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height() + var offsets = this.offsets + var targets = this.targets + var activeTarget = this.activeTarget + var i + + if (this.scrollHeight != scrollHeight) { + this.refresh() + } + + if (scrollTop >= maxScroll) { + return activeTarget != (i = targets[targets.length - 1]) && this.activate(i) + } + + if (activeTarget && scrollTop < offsets[0]) { + this.activeTarget = null + return this.clear() + } + + for (i = offsets.length; i--;) { + activeTarget != targets[i] + && scrollTop >= offsets[i] + && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1]) + && this.activate(targets[i]) + } + } + + ScrollSpy.prototype.activate = function (target) { + this.activeTarget = target + + this.clear() + + var selector = this.selector + + '[data-target="' + target + '"],' + + this.selector + '[href="' + target + '"]' + + var active = $(selector) + .parents('li') + .addClass('active') + + if (active.parent('.dropdown-menu').length) { + active = active + .closest('li.dropdown') + .addClass('active') + } + + active.trigger('activate.bs.scrollspy') + } + + ScrollSpy.prototype.clear = function () { + $(this.selector) + .parentsUntil(this.options.target, '.active') + .removeClass('active') + } + + + // SCROLLSPY PLUGIN DEFINITION + // =========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.scrollspy') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.scrollspy + + $.fn.scrollspy = Plugin + $.fn.scrollspy.Constructor = ScrollSpy + + + // SCROLLSPY NO CONFLICT + // ===================== + + $.fn.scrollspy.noConflict = function () { + $.fn.scrollspy = old + return this + } + + + // SCROLLSPY DATA-API + // ================== + + $(window).on('load.bs.scrollspy.data-api', function () { + $('[data-spy="scroll"]').each(function () { + var $spy = $(this) + Plugin.call($spy, $spy.data()) + }) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: tab.js v3.3.5 + * http://getbootstrap.com/javascript/#tabs + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // TAB CLASS DEFINITION + // ==================== + + var Tab = function (element) { + // jscs:disable requireDollarBeforejQueryAssignment + this.element = $(element) + // jscs:enable requireDollarBeforejQueryAssignment + } + + Tab.VERSION = '3.3.5' + + Tab.TRANSITION_DURATION = 150 + + Tab.prototype.show = function () { + var $this = this.element + var $ul = $this.closest('ul:not(.dropdown-menu)') + var selector = $this.data('target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + if ($this.parent('li').hasClass('active')) return + + var $previous = $ul.find('.active:last a') + var hideEvent = $.Event('hide.bs.tab', { + relatedTarget: $this[0] + }) + var showEvent = $.Event('show.bs.tab', { + relatedTarget: $previous[0] + }) + + $previous.trigger(hideEvent) + $this.trigger(showEvent) + + if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return + + var $target = $(selector) + + this.activate($this.closest('li'), $ul) + this.activate($target, $target.parent(), function () { + $previous.trigger({ + type: 'hidden.bs.tab', + relatedTarget: $this[0] + }) + $this.trigger({ + type: 'shown.bs.tab', + relatedTarget: $previous[0] + }) + }) + } + + Tab.prototype.activate = function (element, container, callback) { + var $active = container.find('> .active') + var transition = callback + && $.support.transition + && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length) + + function next() { + $active + .removeClass('active') + .find('> .dropdown-menu > .active') + .removeClass('active') + .end() + .find('[data-toggle="tab"]') + .attr('aria-expanded', false) + + element + .addClass('active') + .find('[data-toggle="tab"]') + .attr('aria-expanded', true) + + if (transition) { + element[0].offsetWidth // reflow for transition + element.addClass('in') + } else { + element.removeClass('fade') + } + + if (element.parent('.dropdown-menu').length) { + element + .closest('li.dropdown') + .addClass('active') + .end() + .find('[data-toggle="tab"]') + .attr('aria-expanded', true) + } + + callback && callback() + } + + $active.length && transition ? + $active + .one('bsTransitionEnd', next) + .emulateTransitionEnd(Tab.TRANSITION_DURATION) : + next() + + $active.removeClass('in') + } + + + // TAB PLUGIN DEFINITION + // ===================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.tab') + + if (!data) $this.data('bs.tab', (data = new Tab(this))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.tab + + $.fn.tab = Plugin + $.fn.tab.Constructor = Tab + + + // TAB NO CONFLICT + // =============== + + $.fn.tab.noConflict = function () { + $.fn.tab = old + return this + } + + + // TAB DATA-API + // ============ + + var clickHandler = function (e) { + e.preventDefault() + Plugin.call($(this), 'show') + } + + $(document) + .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler) + .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: affix.js v3.3.5 + * http://getbootstrap.com/javascript/#affix + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // AFFIX CLASS DEFINITION + // ====================== + + var Affix = function (element, options) { + this.options = $.extend({}, Affix.DEFAULTS, options) + + this.$target = $(this.options.target) + .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this)) + .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this)) + + this.$element = $(element) + this.affixed = null + this.unpin = null + this.pinnedOffset = null + + this.checkPosition() + } + + Affix.VERSION = '3.3.5' + + Affix.RESET = 'affix affix-top affix-bottom' + + Affix.DEFAULTS = { + offset: 0, + target: window + } + + Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) { + var scrollTop = this.$target.scrollTop() + var position = this.$element.offset() + var targetHeight = this.$target.height() + + if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false + + if (this.affixed == 'bottom') { + if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom' + return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom' + } + + var initializing = this.affixed == null + var colliderTop = initializing ? scrollTop : position.top + var colliderHeight = initializing ? targetHeight : height + + if (offsetTop != null && scrollTop <= offsetTop) return 'top' + if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom' + + return false + } + + Affix.prototype.getPinnedOffset = function () { + if (this.pinnedOffset) return this.pinnedOffset + this.$element.removeClass(Affix.RESET).addClass('affix') + var scrollTop = this.$target.scrollTop() + var position = this.$element.offset() + return (this.pinnedOffset = position.top - scrollTop) + } + + Affix.prototype.checkPositionWithEventLoop = function () { + setTimeout($.proxy(this.checkPosition, this), 1) + } + + Affix.prototype.checkPosition = function () { + if (!this.$element.is(':visible')) return + + var height = this.$element.height() + var offset = this.options.offset + var offsetTop = offset.top + var offsetBottom = offset.bottom + var scrollHeight = Math.max($(document).height(), $(document.body).height()) + + if (typeof offset != 'object') offsetBottom = offsetTop = offset + if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element) + if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element) + + var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom) + + if (this.affixed != affix) { + if (this.unpin != null) this.$element.css('top', '') + + var affixType = 'affix' + (affix ? '-' + affix : '') + var e = $.Event(affixType + '.bs.affix') + + this.$element.trigger(e) + + if (e.isDefaultPrevented()) return + + this.affixed = affix + this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null + + this.$element + .removeClass(Affix.RESET) + .addClass(affixType) + .trigger(affixType.replace('affix', 'affixed') + '.bs.affix') + } + + if (affix == 'bottom') { + this.$element.offset({ + top: scrollHeight - height - offsetBottom + }) + } + } + + + // AFFIX PLUGIN DEFINITION + // ======================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.affix') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.affix', (data = new Affix(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.affix + + $.fn.affix = Plugin + $.fn.affix.Constructor = Affix + + + // AFFIX NO CONFLICT + // ================= + + $.fn.affix.noConflict = function () { + $.fn.affix = old + return this + } + + + // AFFIX DATA-API + // ============== + + $(window).on('load', function () { + $('[data-spy="affix"]').each(function () { + var $spy = $(this) + var data = $spy.data() + + data.offset = data.offset || {} + + if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom + if (data.offsetTop != null) data.offset.top = data.offsetTop + + Plugin.call($spy, data) + }) + }) + +}(jQuery); diff --git a/statics/space/default/js/bootstrap.min.js b/statics/space/default/js/bootstrap.min.js new file mode 100644 index 0000000..133aeec --- /dev/null +++ b/statics/space/default/js/bootstrap.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v3.3.5 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under the MIT license + */ +if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.5",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.5",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),a(c.target).is('input[type="radio"]')||a(c.target).is('input[type="checkbox"]')||c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.5",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.5",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.5",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&jdocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth
',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),c.isInStateTrue()?void 0:(clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide())},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-mo.width?"left":"left"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.5",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.5",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b=e[a]&&(void 0===e[a+1]||b .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.5",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file diff --git a/statics/space/default/js/core.js b/statics/space/default/js/core.js new file mode 100644 index 0000000..a0b55f3 --- /dev/null +++ b/statics/space/default/js/core.js @@ -0,0 +1,26 @@ + +// 关注 +function dr_guanzhu(_this) { + var url = memberpath+"index.php?s=space&c=api&m=guanzhu&uid="+$(_this).attr('uid')+"&"+Math.random(); + $.ajax({type: "GET", url:url, dataType:'jsonp',jsonp:"callback",async: false, + success: function (data) { + if (data.status == 0) { + dr_tips(data.msg); + } else if (data.msg == 0) { + dr_tips('关注失败'); + } else if (data.msg == 1) { + dr_tips('关注成功', 2, 1); + $(_this).addClass('unfollow'); + $(_this).html('取消关注'); + } else if (data.msg == 2) { + dr_tips('相互关注', 2, 1); + $(_this).addClass('unfollow'); + $(_this).html('取消关注'); + } else if (data.msg == -1) { + dr_tips('取消关注', 2, 1); + $(_this).removeClass('unfollow'); + $(_this).html('加关注'); + } + } + }); +} \ No newline at end of file diff --git a/statics/space/default/js/jquery.min.js b/statics/space/default/js/jquery.min.js new file mode 100644 index 0000000..3883779 --- /dev/null +++ b/statics/space/default/js/jquery.min.js @@ -0,0 +1,2 @@ +/*! jQuery v1.8.3 jquery.com | jquery.org/license */ +(function(e,t){function _(e){var t=M[e]={};return v.each(e.split(y),function(e,n){t[n]=!0}),t}function H(e,n,r){if(r===t&&e.nodeType===1){var i="data-"+n.replace(P,"-$1").toLowerCase();r=e.getAttribute(i);if(typeof r=="string"){try{r=r==="true"?!0:r==="false"?!1:r==="null"?null:+r+""===r?+r:D.test(r)?v.parseJSON(r):r}catch(s){}v.data(e,n,r)}else r=t}return r}function B(e){var t;for(t in e){if(t==="data"&&v.isEmptyObject(e[t]))continue;if(t!=="toJSON")return!1}return!0}function et(){return!1}function tt(){return!0}function ut(e){return!e||!e.parentNode||e.parentNode.nodeType===11}function at(e,t){do e=e[t];while(e&&e.nodeType!==1);return e}function ft(e,t,n){t=t||0;if(v.isFunction(t))return v.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return v.grep(e,function(e,r){return e===t===n});if(typeof t=="string"){var r=v.grep(e,function(e){return e.nodeType===1});if(it.test(t))return v.filter(t,r,!n);t=v.filter(t,r)}return v.grep(e,function(e,r){return v.inArray(e,t)>=0===n})}function lt(e){var t=ct.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function At(e,t){if(t.nodeType!==1||!v.hasData(e))return;var n,r,i,s=v._data(e),o=v._data(t,s),u=s.events;if(u){delete o.handle,o.events={};for(n in u)for(r=0,i=u[n].length;r").appendTo(i.body),n=t.css("display");t.remove();if(n==="none"||n===""){Pt=i.body.appendChild(Pt||v.extend(i.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!Ht||!Pt.createElement)Ht=(Pt.contentWindow||Pt.contentDocument).document,Ht.write(""),Ht.close();t=Ht.body.appendChild(Ht.createElement(e)),n=Dt(t,"display"),i.body.removeChild(Pt)}return Wt[e]=n,n}function fn(e,t,n,r){var i;if(v.isArray(t))v.each(t,function(t,i){n||sn.test(e)?r(e,i):fn(e+"["+(typeof i=="object"?t:"")+"]",i,n,r)});else if(!n&&v.type(t)==="object")for(i in t)fn(e+"["+i+"]",t[i],n,r);else r(e,t)}function Cn(e){return function(t,n){typeof t!="string"&&(n=t,t="*");var r,i,s,o=t.toLowerCase().split(y),u=0,a=o.length;if(v.isFunction(n))for(;u)[^>]*$|#([\w\-]*)$)/,E=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,S=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,T=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,N=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,C=/^-ms-/,k=/-([\da-z])/gi,L=function(e,t){return(t+"").toUpperCase()},A=function(){i.addEventListener?(i.removeEventListener("DOMContentLoaded",A,!1),v.ready()):i.readyState==="complete"&&(i.detachEvent("onreadystatechange",A),v.ready())},O={};v.fn=v.prototype={constructor:v,init:function(e,n,r){var s,o,u,a;if(!e)return this;if(e.nodeType)return this.context=this[0]=e,this.length=1,this;if(typeof e=="string"){e.charAt(0)==="<"&&e.charAt(e.length-1)===">"&&e.length>=3?s=[null,e,null]:s=w.exec(e);if(s&&(s[1]||!n)){if(s[1])return n=n instanceof v?n[0]:n,a=n&&n.nodeType?n.ownerDocument||n:i,e=v.parseHTML(s[1],a,!0),E.test(s[1])&&v.isPlainObject(n)&&this.attr.call(e,n,!0),v.merge(this,e);o=i.getElementById(s[2]);if(o&&o.parentNode){if(o.id!==s[2])return r.find(e);this.length=1,this[0]=o}return this.context=i,this.selector=e,this}return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e)}return v.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),v.makeArray(e,this))},selector:"",jquery:"1.8.3",length:0,size:function(){return this.length},toArray:function(){return l.call(this)},get:function(e){return e==null?this.toArray():e<0?this[this.length+e]:this[e]},pushStack:function(e,t,n){var r=v.merge(this.constructor(),e);return r.prevObject=this,r.context=this.context,t==="find"?r.selector=this.selector+(this.selector?" ":"")+n:t&&(r.selector=this.selector+"."+t+"("+n+")"),r},each:function(e,t){return v.each(this,e,t)},ready:function(e){return v.ready.promise().done(e),this},eq:function(e){return e=+e,e===-1?this.slice(e):this.slice(e,e+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(l.apply(this,arguments),"slice",l.call(arguments).join(","))},map:function(e){return this.pushStack(v.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:[].sort,splice:[].splice},v.fn.init.prototype=v.fn,v.extend=v.fn.extend=function(){var e,n,r,i,s,o,u=arguments[0]||{},a=1,f=arguments.length,l=!1;typeof u=="boolean"&&(l=u,u=arguments[1]||{},a=2),typeof u!="object"&&!v.isFunction(u)&&(u={}),f===a&&(u=this,--a);for(;a0)return;r.resolveWith(i,[v]),v.fn.trigger&&v(i).trigger("ready").off("ready")},isFunction:function(e){return v.type(e)==="function"},isArray:Array.isArray||function(e){return v.type(e)==="array"},isWindow:function(e){return e!=null&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return e==null?String(e):O[h.call(e)]||"object"},isPlainObject:function(e){if(!e||v.type(e)!=="object"||e.nodeType||v.isWindow(e))return!1;try{if(e.constructor&&!p.call(e,"constructor")&&!p.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||p.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw new Error(e)},parseHTML:function(e,t,n){var r;return!e||typeof e!="string"?null:(typeof t=="boolean"&&(n=t,t=0),t=t||i,(r=E.exec(e))?[t.createElement(r[1])]:(r=v.buildFragment([e],t,n?null:[]),v.merge([],(r.cacheable?v.clone(r.fragment):r.fragment).childNodes)))},parseJSON:function(t){if(!t||typeof t!="string")return null;t=v.trim(t);if(e.JSON&&e.JSON.parse)return e.JSON.parse(t);if(S.test(t.replace(T,"@").replace(N,"]").replace(x,"")))return(new Function("return "+t))();v.error("Invalid JSON: "+t)},parseXML:function(n){var r,i;if(!n||typeof n!="string")return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(s){r=t}return(!r||!r.documentElement||r.getElementsByTagName("parsererror").length)&&v.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&g.test(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(C,"ms-").replace(k,L)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,n,r){var i,s=0,o=e.length,u=o===t||v.isFunction(e);if(r){if(u){for(i in e)if(n.apply(e[i],r)===!1)break}else for(;s0&&e[0]&&e[a-1]||a===0||v.isArray(e));if(f)for(;u-1)a.splice(n,1),i&&(n<=o&&o--,n<=u&&u--)}),this},has:function(e){return v.inArray(e,a)>-1},empty:function(){return a=[],this},disable:function(){return a=f=n=t,this},disabled:function(){return!a},lock:function(){return f=t,n||c.disable(),this},locked:function(){return!f},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],a&&(!r||f)&&(i?f.push(t):l(t)),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!r}};return c},v.extend({Deferred:function(e){var t=[["resolve","done",v.Callbacks("once memory"),"resolved"],["reject","fail",v.Callbacks("once memory"),"rejected"],["notify","progress",v.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return v.Deferred(function(n){v.each(t,function(t,r){var s=r[0],o=e[t];i[r[1]](v.isFunction(o)?function(){var e=o.apply(this,arguments);e&&v.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[s+"With"](this===i?n:this,[e])}:n[s])}),e=null}).promise()},promise:function(e){return e!=null?v.extend(e,r):r}},i={};return r.pipe=r.then,v.each(t,function(e,s){var o=s[2],u=s[3];r[s[1]]=o.add,u&&o.add(function(){n=u},t[e^1][2].disable,t[2][2].lock),i[s[0]]=o.fire,i[s[0]+"With"]=o.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=l.call(arguments),r=n.length,i=r!==1||e&&v.isFunction(e.promise)?r:0,s=i===1?e:v.Deferred(),o=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?l.call(arguments):r,n===u?s.notifyWith(t,n):--i||s.resolveWith(t,n)}},u,a,f;if(r>1){u=new Array(r),a=new Array(r),f=new Array(r);for(;t
a",n=p.getElementsByTagName("*"),r=p.getElementsByTagName("a")[0];if(!n||!r||!n.length)return{};s=i.createElement("select"),o=s.appendChild(i.createElement("option")),u=p.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:r.getAttribute("href")==="/a",opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:u.value==="on",optSelected:o.selected,getSetAttribute:p.className!=="t",enctype:!!i.createElement("form").enctype,html5Clone:i.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",boxModel:i.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},u.checked=!0,t.noCloneChecked=u.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!o.disabled;try{delete p.test}catch(d){t.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",h=function(){t.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick"),p.detachEvent("onclick",h)),u=i.createElement("input"),u.value="t",u.setAttribute("type","radio"),t.radioValue=u.value==="t",u.setAttribute("checked","checked"),u.setAttribute("name","t"),p.appendChild(u),a=i.createDocumentFragment(),a.appendChild(p.lastChild),t.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,t.appendChecked=u.checked,a.removeChild(u),a.appendChild(p);if(p.attachEvent)for(l in{submit:!0,change:!0,focusin:!0})f="on"+l,c=f in p,c||(p.setAttribute(f,"return;"),c=typeof p[f]=="function"),t[l+"Bubbles"]=c;return v(function(){var n,r,s,o,u="padding:0;margin:0;border:0;display:block;overflow:hidden;",a=i.getElementsByTagName("body")[0];if(!a)return;n=i.createElement("div"),n.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",a.insertBefore(n,a.firstChild),r=i.createElement("div"),n.appendChild(r),r.innerHTML="
t
",s=r.getElementsByTagName("td"),s[0].style.cssText="padding:0;margin:0;border:0;display:none",c=s[0].offsetHeight===0,s[0].style.display="",s[1].style.display="none",t.reliableHiddenOffsets=c&&s[0].offsetHeight===0,r.innerHTML="",r.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",t.boxSizing=r.offsetWidth===4,t.doesNotIncludeMarginInBodyOffset=a.offsetTop!==1,e.getComputedStyle&&(t.pixelPosition=(e.getComputedStyle(r,null)||{}).top!=="1%",t.boxSizingReliable=(e.getComputedStyle(r,null)||{width:"4px"}).width==="4px",o=i.createElement("div"),o.style.cssText=r.style.cssText=u,o.style.marginRight=o.style.width="0",r.style.width="1px",r.appendChild(o),t.reliableMarginRight=!parseFloat((e.getComputedStyle(o,null)||{}).marginRight)),typeof r.style.zoom!="undefined"&&(r.innerHTML="",r.style.cssText=u+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=r.offsetWidth===3,r.style.display="block",r.style.overflow="visible",r.innerHTML="
",r.firstChild.style.width="5px",t.shrinkWrapBlocks=r.offsetWidth!==3,n.style.zoom=1),a.removeChild(n),n=r=s=o=null}),a.removeChild(p),n=r=s=o=u=a=p=null,t}();var D=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;v.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(v.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?v.cache[e[v.expando]]:e[v.expando],!!e&&!B(e)},data:function(e,n,r,i){if(!v.acceptData(e))return;var s,o,u=v.expando,a=typeof n=="string",f=e.nodeType,l=f?v.cache:e,c=f?e[u]:e[u]&&u;if((!c||!l[c]||!i&&!l[c].data)&&a&&r===t)return;c||(f?e[u]=c=v.deletedIds.pop()||v.guid++:c=u),l[c]||(l[c]={},f||(l[c].toJSON=v.noop));if(typeof n=="object"||typeof n=="function")i?l[c]=v.extend(l[c],n):l[c].data=v.extend(l[c].data,n);return s=l[c],i||(s.data||(s.data={}),s=s.data),r!==t&&(s[v.camelCase(n)]=r),a?(o=s[n],o==null&&(o=s[v.camelCase(n)])):o=s,o},removeData:function(e,t,n){if(!v.acceptData(e))return;var r,i,s,o=e.nodeType,u=o?v.cache:e,a=o?e[v.expando]:v.expando;if(!u[a])return;if(t){r=n?u[a]:u[a].data;if(r){v.isArray(t)||(t in r?t=[t]:(t=v.camelCase(t),t in r?t=[t]:t=t.split(" ")));for(i=0,s=t.length;i1,null,!1))},removeData:function(e){return this.each(function(){v.removeData(this,e)})}}),v.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=v._data(e,t),n&&(!r||v.isArray(n)?r=v._data(e,t,v.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=v.queue(e,t),r=n.length,i=n.shift(),s=v._queueHooks(e,t),o=function(){v.dequeue(e,t)};i==="inprogress"&&(i=n.shift(),r--),i&&(t==="fx"&&n.unshift("inprogress"),delete s.stop,i.call(e,o,s)),!r&&s&&s.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return v._data(e,n)||v._data(e,n,{empty:v.Callbacks("once memory").add(function(){v.removeData(e,t+"queue",!0),v.removeData(e,n,!0)})})}}),v.fn.extend({queue:function(e,n){var r=2;return typeof e!="string"&&(n=e,e="fx",r--),arguments.length1)},removeAttr:function(e){return this.each(function(){v.removeAttr(this,e)})},prop:function(e,t){return v.access(this,v.prop,e,t,arguments.length>1)},removeProp:function(e){return e=v.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,s,o,u;if(v.isFunction(e))return this.each(function(t){v(this).addClass(e.call(this,t,this.className))});if(e&&typeof e=="string"){t=e.split(y);for(n=0,r=this.length;n=0)r=r.replace(" "+n[s]+" "," ");i.className=e?v.trim(r):""}}}return this},toggleClass:function(e,t){var n=typeof e,r=typeof t=="boolean";return v.isFunction(e)?this.each(function(n){v(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if(n==="string"){var i,s=0,o=v(this),u=t,a=e.split(y);while(i=a[s++])u=r?u:!o.hasClass(i),o[u?"addClass":"removeClass"](i)}else if(n==="undefined"||n==="boolean")this.className&&v._data(this,"__className__",this.className),this.className=this.className||e===!1?"":v._data(this,"__className__")||""})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;n=0)return!0;return!1},val:function(e){var n,r,i,s=this[0];if(!arguments.length){if(s)return n=v.valHooks[s.type]||v.valHooks[s.nodeName.toLowerCase()],n&&"get"in n&&(r=n.get(s,"value"))!==t?r:(r=s.value,typeof r=="string"?r.replace(R,""):r==null?"":r);return}return i=v.isFunction(e),this.each(function(r){var s,o=v(this);if(this.nodeType!==1)return;i?s=e.call(this,r,o.val()):s=e,s==null?s="":typeof s=="number"?s+="":v.isArray(s)&&(s=v.map(s,function(e){return e==null?"":e+""})),n=v.valHooks[this.type]||v.valHooks[this.nodeName.toLowerCase()];if(!n||!("set"in n)||n.set(this,s,"value")===t)this.value=s})}}),v.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,s=e.type==="select-one"||i<0,o=s?null:[],u=s?i+1:r.length,a=i<0?u:s?i:0;for(;a=0}),n.length||(e.selectedIndex=-1),n}}},attrFn:{},attr:function(e,n,r,i){var s,o,u,a=e.nodeType;if(!e||a===3||a===8||a===2)return;if(i&&v.isFunction(v.fn[n]))return v(e)[n](r);if(typeof e.getAttribute=="undefined")return v.prop(e,n,r);u=a!==1||!v.isXMLDoc(e),u&&(n=n.toLowerCase(),o=v.attrHooks[n]||(X.test(n)?F:j));if(r!==t){if(r===null){v.removeAttr(e,n);return}return o&&"set"in o&&u&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r)}return o&&"get"in o&&u&&(s=o.get(e,n))!==null?s:(s=e.getAttribute(n),s===null?t:s)},removeAttr:function(e,t){var n,r,i,s,o=0;if(t&&e.nodeType===1){r=t.split(y);for(;o=0}})});var $=/^(?:textarea|input|select)$/i,J=/^([^\.]*|)(?:\.(.+)|)$/,K=/(?:^|\s)hover(\.\S+|)\b/,Q=/^key/,G=/^(?:mouse|contextmenu)|click/,Y=/^(?:focusinfocus|focusoutblur)$/,Z=function(e){return v.event.special.hover?e:e.replace(K,"mouseenter$1 mouseleave$1")};v.event={add:function(e,n,r,i,s){var o,u,a,f,l,c,h,p,d,m,g;if(e.nodeType===3||e.nodeType===8||!n||!r||!(o=v._data(e)))return;r.handler&&(d=r,r=d.handler,s=d.selector),r.guid||(r.guid=v.guid++),a=o.events,a||(o.events=a={}),u=o.handle,u||(o.handle=u=function(e){return typeof v=="undefined"||!!e&&v.event.triggered===e.type?t:v.event.dispatch.apply(u.elem,arguments)},u.elem=e),n=v.trim(Z(n)).split(" ");for(f=0;f=0&&(y=y.slice(0,-1),a=!0),y.indexOf(".")>=0&&(b=y.split("."),y=b.shift(),b.sort());if((!s||v.event.customEvent[y])&&!v.event.global[y])return;n=typeof n=="object"?n[v.expando]?n:new v.Event(y,n):new v.Event(y),n.type=y,n.isTrigger=!0,n.exclusive=a,n.namespace=b.join("."),n.namespace_re=n.namespace?new RegExp("(^|\\.)"+b.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,h=y.indexOf(":")<0?"on"+y:"";if(!s){u=v.cache;for(f in u)u[f].events&&u[f].events[y]&&v.event.trigger(n,r,u[f].handle.elem,!0);return}n.result=t,n.target||(n.target=s),r=r!=null?v.makeArray(r):[],r.unshift(n),p=v.event.special[y]||{};if(p.trigger&&p.trigger.apply(s,r)===!1)return;m=[[s,p.bindType||y]];if(!o&&!p.noBubble&&!v.isWindow(s)){g=p.delegateType||y,l=Y.test(g+y)?s:s.parentNode;for(c=s;l;l=l.parentNode)m.push([l,g]),c=l;c===(s.ownerDocument||i)&&m.push([c.defaultView||c.parentWindow||e,g])}for(f=0;f=0:v.find(h,this,null,[s]).length),u[h]&&f.push(c);f.length&&w.push({elem:s,matches:f})}d.length>m&&w.push({elem:this,matches:d.slice(m)});for(r=0;r0?this.on(t,null,e,n):this.trigger(t)},Q.test(t)&&(v.event.fixHooks[t]=v.event.keyHooks),G.test(t)&&(v.event.fixHooks[t]=v.event.mouseHooks)}),function(e,t){function nt(e,t,n,r){n=n||[],t=t||g;var i,s,a,f,l=t.nodeType;if(!e||typeof e!="string")return n;if(l!==1&&l!==9)return[];a=o(t);if(!a&&!r)if(i=R.exec(e))if(f=i[1]){if(l===9){s=t.getElementById(f);if(!s||!s.parentNode)return n;if(s.id===f)return n.push(s),n}else if(t.ownerDocument&&(s=t.ownerDocument.getElementById(f))&&u(t,s)&&s.id===f)return n.push(s),n}else{if(i[2])return S.apply(n,x.call(t.getElementsByTagName(e),0)),n;if((f=i[3])&&Z&&t.getElementsByClassName)return S.apply(n,x.call(t.getElementsByClassName(f),0)),n}return vt(e.replace(j,"$1"),t,n,r,a)}function rt(e){return function(t){var n=t.nodeName.toLowerCase();return n==="input"&&t.type===e}}function it(e){return function(t){var n=t.nodeName.toLowerCase();return(n==="input"||n==="button")&&t.type===e}}function st(e){return N(function(t){return t=+t,N(function(n,r){var i,s=e([],n.length,t),o=s.length;while(o--)n[i=s[o]]&&(n[i]=!(r[i]=n[i]))})})}function ot(e,t,n){if(e===t)return n;var r=e.nextSibling;while(r){if(r===t)return-1;r=r.nextSibling}return 1}function ut(e,t){var n,r,s,o,u,a,f,l=L[d][e+" "];if(l)return t?0:l.slice(0);u=e,a=[],f=i.preFilter;while(u){if(!n||(r=F.exec(u)))r&&(u=u.slice(r[0].length)||u),a.push(s=[]);n=!1;if(r=I.exec(u))s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=r[0].replace(j," ");for(o in i.filter)(r=J[o].exec(u))&&(!f[o]||(r=f[o](r)))&&(s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=o,n.matches=r);if(!n)break}return t?u.length:u?nt.error(e):L(e,a).slice(0)}function at(e,t,r){var i=t.dir,s=r&&t.dir==="parentNode",o=w++;return t.first?function(t,n,r){while(t=t[i])if(s||t.nodeType===1)return e(t,n,r)}:function(t,r,u){if(!u){var a,f=b+" "+o+" ",l=f+n;while(t=t[i])if(s||t.nodeType===1){if((a=t[d])===l)return t.sizset;if(typeof a=="string"&&a.indexOf(f)===0){if(t.sizset)return t}else{t[d]=l;if(e(t,r,u))return t.sizset=!0,t;t.sizset=!1}}}else while(t=t[i])if(s||t.nodeType===1)if(e(t,r,u))return t}}function ft(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function lt(e,t,n,r,i){var s,o=[],u=0,a=e.length,f=t!=null;for(;u-1&&(s[f]=!(o[f]=c))}}else g=lt(g===o?g.splice(d,g.length):g),i?i(null,o,g,a):S.apply(o,g)})}function ht(e){var t,n,r,s=e.length,o=i.relative[e[0].type],u=o||i.relative[" "],a=o?1:0,f=at(function(e){return e===t},u,!0),l=at(function(e){return T.call(t,e)>-1},u,!0),h=[function(e,n,r){return!o&&(r||n!==c)||((t=n).nodeType?f(e,n,r):l(e,n,r))}];for(;a1&&ft(h),a>1&&e.slice(0,a-1).join("").replace(j,"$1"),n,a0,s=e.length>0,o=function(u,a,f,l,h){var p,d,v,m=[],y=0,w="0",x=u&&[],T=h!=null,N=c,C=u||s&&i.find.TAG("*",h&&a.parentNode||a),k=b+=N==null?1:Math.E;T&&(c=a!==g&&a,n=o.el);for(;(p=C[w])!=null;w++){if(s&&p){for(d=0;v=e[d];d++)if(v(p,a,f)){l.push(p);break}T&&(b=k,n=++o.el)}r&&((p=!v&&p)&&y--,u&&x.push(p))}y+=w;if(r&&w!==y){for(d=0;v=t[d];d++)v(x,m,a,f);if(u){if(y>0)while(w--)!x[w]&&!m[w]&&(m[w]=E.call(l));m=lt(m)}S.apply(l,m),T&&!u&&m.length>0&&y+t.length>1&&nt.uniqueSort(l)}return T&&(b=k,c=N),x};return o.el=0,r?N(o):o}function dt(e,t,n){var r=0,i=t.length;for(;r2&&(f=u[0]).type==="ID"&&t.nodeType===9&&!s&&i.relative[u[1].type]){t=i.find.ID(f.matches[0].replace($,""),t,s)[0];if(!t)return n;e=e.slice(u.shift().length)}for(o=J.POS.test(e)?-1:u.length-1;o>=0;o--){f=u[o];if(i.relative[l=f.type])break;if(c=i.find[l])if(r=c(f.matches[0].replace($,""),z.test(u[0].type)&&t.parentNode||t,s)){u.splice(o,1),e=r.length&&u.join("");if(!e)return S.apply(n,x.call(r,0)),n;break}}}return a(e,h)(r,t,s,n,z.test(e)),n}function mt(){}var n,r,i,s,o,u,a,f,l,c,h=!0,p="undefined",d=("sizcache"+Math.random()).replace(".",""),m=String,g=e.document,y=g.documentElement,b=0,w=0,E=[].pop,S=[].push,x=[].slice,T=[].indexOf||function(e){var t=0,n=this.length;for(;ti.cacheLength&&delete e[t.shift()],e[n+" "]=r},e)},k=C(),L=C(),A=C(),O="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",_=M.replace("w","w#"),D="([*^$|!~]?=)",P="\\["+O+"*("+M+")"+O+"*(?:"+D+O+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+_+")|)|)"+O+"*\\]",H=":("+M+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+P+")|[^:]|\\\\.)*|.*))\\)|)",B=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+O+"*((?:-\\d)?\\d*)"+O+"*\\)|)(?=[^-]|$)",j=new RegExp("^"+O+"+|((?:^|[^\\\\])(?:\\\\.)*)"+O+"+$","g"),F=new RegExp("^"+O+"*,"+O+"*"),I=new RegExp("^"+O+"*([\\x20\\t\\r\\n\\f>+~])"+O+"*"),q=new RegExp(H),R=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,U=/^:not/,z=/[\x20\t\r\n\f]*[+~]/,W=/:not\($/,X=/h\d/i,V=/input|select|textarea|button/i,$=/\\(?!\\)/g,J={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),NAME:new RegExp("^\\[name=['\"]?("+M+")['\"]?\\]"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+H),POS:new RegExp(B,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+O+"*(even|odd|(([+-]|)(\\d*)n|)"+O+"*(?:([+-]|)"+O+"*(\\d+)|))"+O+"*\\)|)","i"),needsContext:new RegExp("^"+O+"*[>+~]|"+B,"i")},K=function(e){var t=g.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}},Q=K(function(e){return e.appendChild(g.createComment("")),!e.getElementsByTagName("*").length}),G=K(function(e){return e.innerHTML="",e.firstChild&&typeof e.firstChild.getAttribute!==p&&e.firstChild.getAttribute("href")==="#"}),Y=K(function(e){e.innerHTML="";var t=typeof e.lastChild.getAttribute("multiple");return t!=="boolean"&&t!=="string"}),Z=K(function(e){return e.innerHTML="",!e.getElementsByClassName||!e.getElementsByClassName("e").length?!1:(e.lastChild.className="e",e.getElementsByClassName("e").length===2)}),et=K(function(e){e.id=d+0,e.innerHTML="
",y.insertBefore(e,y.firstChild);var t=g.getElementsByName&&g.getElementsByName(d).length===2+g.getElementsByName(d+0).length;return r=!g.getElementById(d),y.removeChild(e),t});try{x.call(y.childNodes,0)[0].nodeType}catch(tt){x=function(e){var t,n=[];for(;t=this[e];e++)n.push(t);return n}}nt.matches=function(e,t){return nt(e,null,null,t)},nt.matchesSelector=function(e,t){return nt(t,null,null,[e]).length>0},s=nt.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(i===1||i===9||i===11){if(typeof e.textContent=="string")return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=s(e)}else if(i===3||i===4)return e.nodeValue}else for(;t=e[r];r++)n+=s(t);return n},o=nt.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?t.nodeName!=="HTML":!1},u=nt.contains=y.contains?function(e,t){var n=e.nodeType===9?e.documentElement:e,r=t&&t.parentNode;return e===r||!!(r&&r.nodeType===1&&n.contains&&n.contains(r))}:y.compareDocumentPosition?function(e,t){return t&&!!(e.compareDocumentPosition(t)&16)}:function(e,t){while(t=t.parentNode)if(t===e)return!0;return!1},nt.attr=function(e,t){var n,r=o(e);return r||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):r||Y?e.getAttribute(t):(n=e.getAttributeNode(t),n?typeof e[t]=="boolean"?e[t]?t:null:n.specified?n.value:null:null)},i=nt.selectors={cacheLength:50,createPseudo:N,match:J,attrHandle:G?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},find:{ID:r?function(e,t,n){if(typeof t.getElementById!==p&&!n){var r=t.getElementById(e);return r&&r.parentNode?[r]:[]}}:function(e,n,r){if(typeof n.getElementById!==p&&!r){var i=n.getElementById(e);return i?i.id===e||typeof i.getAttributeNode!==p&&i.getAttributeNode("id").value===e?[i]:t:[]}},TAG:Q?function(e,t){if(typeof t.getElementsByTagName!==p)return t.getElementsByTagName(e)}:function(e,t){var n=t.getElementsByTagName(e);if(e==="*"){var r,i=[],s=0;for(;r=n[s];s++)r.nodeType===1&&i.push(r);return i}return n},NAME:et&&function(e,t){if(typeof t.getElementsByName!==p)return t.getElementsByName(name)},CLASS:Z&&function(e,t,n){if(typeof t.getElementsByClassName!==p&&!n)return t.getElementsByClassName(e)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace($,""),e[3]=(e[4]||e[5]||"").replace($,""),e[2]==="~="&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),e[1]==="nth"?(e[2]||nt.error(e[0]),e[3]=+(e[3]?e[4]+(e[5]||1):2*(e[2]==="even"||e[2]==="odd")),e[4]=+(e[6]+e[7]||e[2]==="odd")):e[2]&&nt.error(e[0]),e},PSEUDO:function(e){var t,n;if(J.CHILD.test(e[0]))return null;if(e[3])e[2]=e[3];else if(t=e[4])q.test(t)&&(n=ut(t,!0))&&(n=t.indexOf(")",t.length-n)-t.length)&&(t=t.slice(0,n),e[0]=e[0].slice(0,n)),e[2]=t;return e.slice(0,3)}},filter:{ID:r?function(e){return e=e.replace($,""),function(t){return t.getAttribute("id")===e}}:function(e){return e=e.replace($,""),function(t){var n=typeof t.getAttributeNode!==p&&t.getAttributeNode("id");return n&&n.value===e}},TAG:function(e){return e==="*"?function(){return!0}:(e=e.replace($,"").toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[d][e+" "];return t||(t=new RegExp("(^|"+O+")"+e+"("+O+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==p&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r,i){var s=nt.attr(r,e);return s==null?t==="!=":t?(s+="",t==="="?s===n:t==="!="?s!==n:t==="^="?n&&s.indexOf(n)===0:t==="*="?n&&s.indexOf(n)>-1:t==="$="?n&&s.substr(s.length-n.length)===n:t==="~="?(" "+s+" ").indexOf(n)>-1:t==="|="?s===n||s.substr(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r){return e==="nth"?function(e){var t,i,s=e.parentNode;if(n===1&&r===0)return!0;if(s){i=0;for(t=s.firstChild;t;t=t.nextSibling)if(t.nodeType===1){i++;if(e===t)break}}return i-=r,i===n||i%n===0&&i/n>=0}:function(t){var n=t;switch(e){case"only":case"first":while(n=n.previousSibling)if(n.nodeType===1)return!1;if(e==="first")return!0;n=t;case"last":while(n=n.nextSibling)if(n.nodeType===1)return!1;return!0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||nt.error("unsupported pseudo: "+e);return r[d]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?N(function(e,n){var i,s=r(e,t),o=s.length;while(o--)i=T.call(e,s[o]),e[i]=!(n[i]=s[o])}):function(e){return r(e,0,n)}):r}},pseudos:{not:N(function(e){var t=[],n=[],r=a(e.replace(j,"$1"));return r[d]?N(function(e,t,n,i){var s,o=r(e,null,i,[]),u=e.length;while(u--)if(s=o[u])e[u]=!(t[u]=s)}):function(e,i,s){return t[0]=e,r(t,null,s,n),!n.pop()}}),has:N(function(e){return function(t){return nt(e,t).length>0}}),contains:N(function(e){return function(t){return(t.textContent||t.innerText||s(t)).indexOf(e)>-1}}),enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&!!e.checked||t==="option"&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},parent:function(e){return!i.pseudos.empty(e)},empty:function(e){var t;e=e.firstChild;while(e){if(e.nodeName>"@"||(t=e.nodeType)===3||t===4)return!1;e=e.nextSibling}return!0},header:function(e){return X.test(e.nodeName)},text:function(e){var t,n;return e.nodeName.toLowerCase()==="input"&&(t=e.type)==="text"&&((n=e.getAttribute("type"))==null||n.toLowerCase()===t)},radio:rt("radio"),checkbox:rt("checkbox"),file:rt("file"),password:rt("password"),image:rt("image"),submit:it("submit"),reset:it("reset"),button:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&e.type==="button"||t==="button"},input:function(e){return V.test(e.nodeName)},focus:function(e){var t=e.ownerDocument;return e===t.activeElement&&(!t.hasFocus||t.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},active:function(e){return e===e.ownerDocument.activeElement},first:st(function(){return[0]}),last:st(function(e,t){return[t-1]}),eq:st(function(e,t,n){return[n<0?n+t:n]}),even:st(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:st(function(e,t,n){for(var r=n<0?n+t:n;++r",e.querySelectorAll("[selected]").length||i.push("\\["+O+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||i.push(":checked")}),K(function(e){e.innerHTML="

",e.querySelectorAll("[test^='']").length&&i.push("[*^$]="+O+"*(?:\"\"|'')"),e.innerHTML="",e.querySelectorAll(":enabled").length||i.push(":enabled",":disabled")}),i=new RegExp(i.join("|")),vt=function(e,r,s,o,u){if(!o&&!u&&!i.test(e)){var a,f,l=!0,c=d,h=r,p=r.nodeType===9&&e;if(r.nodeType===1&&r.nodeName.toLowerCase()!=="object"){a=ut(e),(l=r.getAttribute("id"))?c=l.replace(n,"\\$&"):r.setAttribute("id",c),c="[id='"+c+"'] ",f=a.length;while(f--)a[f]=c+a[f].join("");h=z.test(e)&&r.parentNode||r,p=a.join(",")}if(p)try{return S.apply(s,x.call(h.querySelectorAll(p),0)),s}catch(v){}finally{l||r.removeAttribute("id")}}return t(e,r,s,o,u)},u&&(K(function(t){e=u.call(t,"div");try{u.call(t,"[test!='']:sizzle"),s.push("!=",H)}catch(n){}}),s=new RegExp(s.join("|")),nt.matchesSelector=function(t,n){n=n.replace(r,"='$1']");if(!o(t)&&!s.test(n)&&!i.test(n))try{var a=u.call(t,n);if(a||e||t.document&&t.document.nodeType!==11)return a}catch(f){}return nt(n,null,null,[t]).length>0})}(),i.pseudos.nth=i.pseudos.eq,i.filters=mt.prototype=i.pseudos,i.setFilters=new mt,nt.attr=v.attr,v.find=nt,v.expr=nt.selectors,v.expr[":"]=v.expr.pseudos,v.unique=nt.uniqueSort,v.text=nt.getText,v.isXMLDoc=nt.isXML,v.contains=nt.contains}(e);var nt=/Until$/,rt=/^(?:parents|prev(?:Until|All))/,it=/^.[^:#\[\.,]*$/,st=v.expr.match.needsContext,ot={children:!0,contents:!0,next:!0,prev:!0};v.fn.extend({find:function(e){var t,n,r,i,s,o,u=this;if(typeof e!="string")return v(e).filter(function(){for(t=0,n=u.length;t0)for(i=r;i=0:v.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,s=[],o=st.test(e)||typeof e!="string"?v(e,t||this.context):0;for(;r-1:v.find.matchesSelector(n,e)){s.push(n);break}n=n.parentNode}}return s=s.length>1?v.unique(s):s,this.pushStack(s,"closest",e)},index:function(e){return e?typeof e=="string"?v.inArray(this[0],v(e)):v.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(e,t){var n=typeof e=="string"?v(e,t):v.makeArray(e&&e.nodeType?[e]:e),r=v.merge(this.get(),n);return this.pushStack(ut(n[0])||ut(r[0])?r:v.unique(r))},addBack:function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}}),v.fn.andSelf=v.fn.addBack,v.each({parent:function(e){var t=e.parentNode;return t&&t.nodeType!==11?t:null},parents:function(e){return v.dir(e,"parentNode")},parentsUntil:function(e,t,n){return v.dir(e,"parentNode",n)},next:function(e){return at(e,"nextSibling")},prev:function(e){return at(e,"previousSibling")},nextAll:function(e){return v.dir(e,"nextSibling")},prevAll:function(e){return v.dir(e,"previousSibling")},nextUntil:function(e,t,n){return v.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return v.dir(e,"previousSibling",n)},siblings:function(e){return v.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return v.sibling(e.firstChild)},contents:function(e){return v.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:v.merge([],e.childNodes)}},function(e,t){v.fn[e]=function(n,r){var i=v.map(this,t,n);return nt.test(e)||(r=n),r&&typeof r=="string"&&(i=v.filter(r,i)),i=this.length>1&&!ot[e]?v.unique(i):i,this.length>1&&rt.test(e)&&(i=i.reverse()),this.pushStack(i,e,l.call(arguments).join(","))}}),v.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),t.length===1?v.find.matchesSelector(t[0],e)?[t[0]]:[]:v.find.matches(e,t)},dir:function(e,n,r){var i=[],s=e[n];while(s&&s.nodeType!==9&&(r===t||s.nodeType!==1||!v(s).is(r)))s.nodeType===1&&i.push(s),s=s[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)e.nodeType===1&&e!==t&&n.push(e);return n}});var ct="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ht=/ jQuery\d+="(?:null|\d+)"/g,pt=/^\s+/,dt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,vt=/<([\w:]+)/,mt=/]","i"),Et=/^(?:checkbox|radio)$/,St=/checked\s*(?:[^=]|=\s*.checked.)/i,xt=/\/(java|ecma)script/i,Tt=/^\s*\s*$/g,Nt={option:[1,""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},Ct=lt(i),kt=Ct.appendChild(i.createElement("div"));Nt.optgroup=Nt.option,Nt.tbody=Nt.tfoot=Nt.colgroup=Nt.caption=Nt.thead,Nt.th=Nt.td,v.support.htmlSerialize||(Nt._default=[1,"X
","
"]),v.fn.extend({text:function(e){return v.access(this,function(e){return e===t?v.text(this):this.empty().append((this[0]&&this[0].ownerDocument||i).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(v.isFunction(e))return this.each(function(t){v(this).wrapAll(e.call(this,t))});if(this[0]){var t=v(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&e.firstChild.nodeType===1)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return v.isFunction(e)?this.each(function(t){v(this).wrapInner(e.call(this,t))}):this.each(function(){var t=v(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=v.isFunction(e);return this.each(function(n){v(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){v.nodeName(this,"body")||v(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(e,this.firstChild)})},before:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(e,this),"before",this.selector)}},after:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this.nextSibling)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(this,e),"after",this.selector)}},remove:function(e,t){var n,r=0;for(;(n=this[r])!=null;r++)if(!e||v.filter(e,[n]).length)!t&&n.nodeType===1&&(v.cleanData(n.getElementsByTagName("*")),v.cleanData([n])),n.parentNode&&n.parentNode.removeChild(n);return this},empty:function(){var e,t=0;for(;(e=this[t])!=null;t++){e.nodeType===1&&v.cleanData(e.getElementsByTagName("*"));while(e.firstChild)e.removeChild(e.firstChild)}return this},clone:function(e,t){return e=e==null?!1:e,t=t==null?e:t,this.map(function(){return v.clone(this,e,t)})},html:function(e){return v.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return n.nodeType===1?n.innerHTML.replace(ht,""):t;if(typeof e=="string"&&!yt.test(e)&&(v.support.htmlSerialize||!wt.test(e))&&(v.support.leadingWhitespace||!pt.test(e))&&!Nt[(vt.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(dt,"<$1>");try{for(;r1&&typeof f=="string"&&St.test(f))return this.each(function(){v(this).domManip(e,n,r)});if(v.isFunction(f))return this.each(function(i){var s=v(this);e[0]=f.call(this,i,n?s.html():t),s.domManip(e,n,r)});if(this[0]){i=v.buildFragment(e,this,l),o=i.fragment,s=o.firstChild,o.childNodes.length===1&&(o=s);if(s){n=n&&v.nodeName(s,"tr");for(u=i.cacheable||c-1;a0?this.clone(!0):this).get(),v(o[i])[t](r),s=s.concat(r);return this.pushStack(s,e,o.selector)}}),v.extend({clone:function(e,t,n){var r,i,s,o;v.support.html5Clone||v.isXMLDoc(e)||!wt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(kt.innerHTML=e.outerHTML,kt.removeChild(o=kt.firstChild));if((!v.support.noCloneEvent||!v.support.noCloneChecked)&&(e.nodeType===1||e.nodeType===11)&&!v.isXMLDoc(e)){Ot(e,o),r=Mt(e),i=Mt(o);for(s=0;r[s];++s)i[s]&&Ot(r[s],i[s])}if(t){At(e,o);if(n){r=Mt(e),i=Mt(o);for(s=0;r[s];++s)At(r[s],i[s])}}return r=i=null,o},clean:function(e,t,n,r){var s,o,u,a,f,l,c,h,p,d,m,g,y=t===i&&Ct,b=[];if(!t||typeof t.createDocumentFragment=="undefined")t=i;for(s=0;(u=e[s])!=null;s++){typeof u=="number"&&(u+="");if(!u)continue;if(typeof u=="string")if(!gt.test(u))u=t.createTextNode(u);else{y=y||lt(t),c=t.createElement("div"),y.appendChild(c),u=u.replace(dt,"<$1>"),a=(vt.exec(u)||["",""])[1].toLowerCase(),f=Nt[a]||Nt._default,l=f[0],c.innerHTML=f[1]+u+f[2];while(l--)c=c.lastChild;if(!v.support.tbody){h=mt.test(u),p=a==="table"&&!h?c.firstChild&&c.firstChild.childNodes:f[1]===""&&!h?c.childNodes:[];for(o=p.length-1;o>=0;--o)v.nodeName(p[o],"tbody")&&!p[o].childNodes.length&&p[o].parentNode.removeChild(p[o])}!v.support.leadingWhitespace&&pt.test(u)&&c.insertBefore(t.createTextNode(pt.exec(u)[0]),c.firstChild),u=c.childNodes,c.parentNode.removeChild(c)}u.nodeType?b.push(u):v.merge(b,u)}c&&(u=c=y=null);if(!v.support.appendChecked)for(s=0;(u=b[s])!=null;s++)v.nodeName(u,"input")?_t(u):typeof u.getElementsByTagName!="undefined"&&v.grep(u.getElementsByTagName("input"),_t);if(n){m=function(e){if(!e.type||xt.test(e.type))return r?r.push(e.parentNode?e.parentNode.removeChild(e):e):n.appendChild(e)};for(s=0;(u=b[s])!=null;s++)if(!v.nodeName(u,"script")||!m(u))n.appendChild(u),typeof u.getElementsByTagName!="undefined"&&(g=v.grep(v.merge([],u.getElementsByTagName("script")),m),b.splice.apply(b,[s+1,0].concat(g)),s+=g.length)}return b},cleanData:function(e,t){var n,r,i,s,o=0,u=v.expando,a=v.cache,f=v.support.deleteExpando,l=v.event.special;for(;(i=e[o])!=null;o++)if(t||v.acceptData(i)){r=i[u],n=r&&a[r];if(n){if(n.events)for(s in n.events)l[s]?v.event.remove(i,s):v.removeEvent(i,s,n.handle);a[r]&&(delete a[r],f?delete i[u]:i.removeAttribute?i.removeAttribute(u):i[u]=null,v.deletedIds.push(r))}}}}),function(){var e,t;v.uaMatch=function(e){e=e.toLowerCase();var t=/(chrome)[ \/]([\w.]+)/.exec(e)||/(webkit)[ \/]([\w.]+)/.exec(e)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e)||/(msie) ([\w.]+)/.exec(e)||e.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e)||[];return{browser:t[1]||"",version:t[2]||"0"}},e=v.uaMatch(o.userAgent),t={},e.browser&&(t[e.browser]=!0,t.version=e.version),t.chrome?t.webkit=!0:t.webkit&&(t.safari=!0),v.browser=t,v.sub=function(){function e(t,n){return new e.fn.init(t,n)}v.extend(!0,e,this),e.superclass=this,e.fn=e.prototype=this(),e.fn.constructor=e,e.sub=this.sub,e.fn.init=function(r,i){return i&&i instanceof v&&!(i instanceof e)&&(i=e(i)),v.fn.init.call(this,r,i,t)},e.fn.init.prototype=e.fn;var t=e(i);return e}}();var Dt,Pt,Ht,Bt=/alpha\([^)]*\)/i,jt=/opacity=([^)]*)/,Ft=/^(top|right|bottom|left)$/,It=/^(none|table(?!-c[ea]).+)/,qt=/^margin/,Rt=new RegExp("^("+m+")(.*)$","i"),Ut=new RegExp("^("+m+")(?!px)[a-z%]+$","i"),zt=new RegExp("^([-+])=("+m+")","i"),Wt={BODY:"block"},Xt={position:"absolute",visibility:"hidden",display:"block"},Vt={letterSpacing:0,fontWeight:400},$t=["Top","Right","Bottom","Left"],Jt=["Webkit","O","Moz","ms"],Kt=v.fn.toggle;v.fn.extend({css:function(e,n){return v.access(this,function(e,n,r){return r!==t?v.style(e,n,r):v.css(e,n)},e,n,arguments.length>1)},show:function(){return Yt(this,!0)},hide:function(){return Yt(this)},toggle:function(e,t){var n=typeof e=="boolean";return v.isFunction(e)&&v.isFunction(t)?Kt.apply(this,arguments):this.each(function(){(n?e:Gt(this))?v(this).show():v(this).hide()})}}),v.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Dt(e,"opacity");return n===""?"1":n}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":v.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(!e||e.nodeType===3||e.nodeType===8||!e.style)return;var s,o,u,a=v.camelCase(n),f=e.style;n=v.cssProps[a]||(v.cssProps[a]=Qt(f,a)),u=v.cssHooks[n]||v.cssHooks[a];if(r===t)return u&&"get"in u&&(s=u.get(e,!1,i))!==t?s:f[n];o=typeof r,o==="string"&&(s=zt.exec(r))&&(r=(s[1]+1)*s[2]+parseFloat(v.css(e,n)),o="number");if(r==null||o==="number"&&isNaN(r))return;o==="number"&&!v.cssNumber[a]&&(r+="px");if(!u||!("set"in u)||(r=u.set(e,r,i))!==t)try{f[n]=r}catch(l){}},css:function(e,n,r,i){var s,o,u,a=v.camelCase(n);return n=v.cssProps[a]||(v.cssProps[a]=Qt(e.style,a)),u=v.cssHooks[n]||v.cssHooks[a],u&&"get"in u&&(s=u.get(e,!0,i)),s===t&&(s=Dt(e,n)),s==="normal"&&n in Vt&&(s=Vt[n]),r||i!==t?(o=parseFloat(s),r||v.isNumeric(o)?o||0:s):s},swap:function(e,t,n){var r,i,s={};for(i in t)s[i]=e.style[i],e.style[i]=t[i];r=n.call(e);for(i in t)e.style[i]=s[i];return r}}),e.getComputedStyle?Dt=function(t,n){var r,i,s,o,u=e.getComputedStyle(t,null),a=t.style;return u&&(r=u.getPropertyValue(n)||u[n],r===""&&!v.contains(t.ownerDocument,t)&&(r=v.style(t,n)),Ut.test(r)&&qt.test(n)&&(i=a.width,s=a.minWidth,o=a.maxWidth,a.minWidth=a.maxWidth=a.width=r,r=u.width,a.width=i,a.minWidth=s,a.maxWidth=o)),r}:i.documentElement.currentStyle&&(Dt=function(e,t){var n,r,i=e.currentStyle&&e.currentStyle[t],s=e.style;return i==null&&s&&s[t]&&(i=s[t]),Ut.test(i)&&!Ft.test(t)&&(n=s.left,r=e.runtimeStyle&&e.runtimeStyle.left,r&&(e.runtimeStyle.left=e.currentStyle.left),s.left=t==="fontSize"?"1em":i,i=s.pixelLeft+"px",s.left=n,r&&(e.runtimeStyle.left=r)),i===""?"auto":i}),v.each(["height","width"],function(e,t){v.cssHooks[t]={get:function(e,n,r){if(n)return e.offsetWidth===0&&It.test(Dt(e,"display"))?v.swap(e,Xt,function(){return tn(e,t,r)}):tn(e,t,r)},set:function(e,n,r){return Zt(e,n,r?en(e,t,r,v.support.boxSizing&&v.css(e,"boxSizing")==="border-box"):0)}}}),v.support.opacity||(v.cssHooks.opacity={get:function(e,t){return jt.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=v.isNumeric(t)?"alpha(opacity="+t*100+")":"",s=r&&r.filter||n.filter||"";n.zoom=1;if(t>=1&&v.trim(s.replace(Bt,""))===""&&n.removeAttribute){n.removeAttribute("filter");if(r&&!r.filter)return}n.filter=Bt.test(s)?s.replace(Bt,i):s+" "+i}}),v(function(){v.support.reliableMarginRight||(v.cssHooks.marginRight={get:function(e,t){return v.swap(e,{display:"inline-block"},function(){if(t)return Dt(e,"marginRight")})}}),!v.support.pixelPosition&&v.fn.position&&v.each(["top","left"],function(e,t){v.cssHooks[t]={get:function(e,n){if(n){var r=Dt(e,t);return Ut.test(r)?v(e).position()[t]+"px":r}}}})}),v.expr&&v.expr.filters&&(v.expr.filters.hidden=function(e){return e.offsetWidth===0&&e.offsetHeight===0||!v.support.reliableHiddenOffsets&&(e.style&&e.style.display||Dt(e,"display"))==="none"},v.expr.filters.visible=function(e){return!v.expr.filters.hidden(e)}),v.each({margin:"",padding:"",border:"Width"},function(e,t){v.cssHooks[e+t]={expand:function(n){var r,i=typeof n=="string"?n.split(" "):[n],s={};for(r=0;r<4;r++)s[e+$t[r]+t]=i[r]||i[r-2]||i[0];return s}},qt.test(e)||(v.cssHooks[e+t].set=Zt)});var rn=/%20/g,sn=/\[\]$/,on=/\r?\n/g,un=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,an=/^(?:select|textarea)/i;v.fn.extend({serialize:function(){return v.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?v.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||an.test(this.nodeName)||un.test(this.type))}).map(function(e,t){var n=v(this).val();return n==null?null:v.isArray(n)?v.map(n,function(e,n){return{name:t.name,value:e.replace(on,"\r\n")}}):{name:t.name,value:n.replace(on,"\r\n")}}).get()}}),v.param=function(e,n){var r,i=[],s=function(e,t){t=v.isFunction(t)?t():t==null?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};n===t&&(n=v.ajaxSettings&&v.ajaxSettings.traditional);if(v.isArray(e)||e.jquery&&!v.isPlainObject(e))v.each(e,function(){s(this.name,this.value)});else for(r in e)fn(r,e[r],n,s);return i.join("&").replace(rn,"+")};var ln,cn,hn=/#.*$/,pn=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,dn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,vn=/^(?:GET|HEAD)$/,mn=/^\/\//,gn=/\?/,yn=/)<[^<]*)*<\/script>/gi,bn=/([?&])_=[^&]*/,wn=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,En=v.fn.load,Sn={},xn={},Tn=["*/"]+["*"];try{cn=s.href}catch(Nn){cn=i.createElement("a"),cn.href="",cn=cn.href}ln=wn.exec(cn.toLowerCase())||[],v.fn.load=function(e,n,r){if(typeof e!="string"&&En)return En.apply(this,arguments);if(!this.length)return this;var i,s,o,u=this,a=e.indexOf(" ");return a>=0&&(i=e.slice(a,e.length),e=e.slice(0,a)),v.isFunction(n)?(r=n,n=t):n&&typeof n=="object"&&(s="POST"),v.ajax({url:e,type:s,dataType:"html",data:n,complete:function(e,t){r&&u.each(r,o||[e.responseText,t,e])}}).done(function(e){o=arguments,u.html(i?v("
").append(e.replace(yn,"")).find(i):e)}),this},v.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,t){v.fn[t]=function(e){return this.on(t,e)}}),v.each(["get","post"],function(e,n){v[n]=function(e,r,i,s){return v.isFunction(r)&&(s=s||i,i=r,r=t),v.ajax({type:n,url:e,data:r,success:i,dataType:s})}}),v.extend({getScript:function(e,n){return v.get(e,t,n,"script")},getJSON:function(e,t,n){return v.get(e,t,n,"json")},ajaxSetup:function(e,t){return t?Ln(e,v.ajaxSettings):(t=e,e=v.ajaxSettings),Ln(e,t),e},ajaxSettings:{url:cn,isLocal:dn.test(ln[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":Tn},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":v.parseJSON,"text xml":v.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:Cn(Sn),ajaxTransport:Cn(xn),ajax:function(e,n){function T(e,n,s,a){var l,y,b,w,S,T=n;if(E===2)return;E=2,u&&clearTimeout(u),o=t,i=a||"",x.readyState=e>0?4:0,s&&(w=An(c,x,s));if(e>=200&&e<300||e===304)c.ifModified&&(S=x.getResponseHeader("Last-Modified"),S&&(v.lastModified[r]=S),S=x.getResponseHeader("Etag"),S&&(v.etag[r]=S)),e===304?(T="notmodified",l=!0):(l=On(c,w),T=l.state,y=l.data,b=l.error,l=!b);else{b=T;if(!T||e)T="error",e<0&&(e=0)}x.status=e,x.statusText=(n||T)+"",l?d.resolveWith(h,[y,T,x]):d.rejectWith(h,[x,T,b]),x.statusCode(g),g=t,f&&p.trigger("ajax"+(l?"Success":"Error"),[x,c,l?y:b]),m.fireWith(h,[x,T]),f&&(p.trigger("ajaxComplete",[x,c]),--v.active||v.event.trigger("ajaxStop"))}typeof e=="object"&&(n=e,e=t),n=n||{};var r,i,s,o,u,a,f,l,c=v.ajaxSetup({},n),h=c.context||c,p=h!==c&&(h.nodeType||h instanceof v)?v(h):v.event,d=v.Deferred(),m=v.Callbacks("once memory"),g=c.statusCode||{},b={},w={},E=0,S="canceled",x={readyState:0,setRequestHeader:function(e,t){if(!E){var n=e.toLowerCase();e=w[n]=w[n]||e,b[e]=t}return this},getAllResponseHeaders:function(){return E===2?i:null},getResponseHeader:function(e){var n;if(E===2){if(!s){s={};while(n=pn.exec(i))s[n[1].toLowerCase()]=n[2]}n=s[e.toLowerCase()]}return n===t?null:n},overrideMimeType:function(e){return E||(c.mimeType=e),this},abort:function(e){return e=e||S,o&&o.abort(e),T(0,e),this}};d.promise(x),x.success=x.done,x.error=x.fail,x.complete=m.add,x.statusCode=function(e){if(e){var t;if(E<2)for(t in e)g[t]=[g[t],e[t]];else t=e[x.status],x.always(t)}return this},c.url=((e||c.url)+"").replace(hn,"").replace(mn,ln[1]+"//"),c.dataTypes=v.trim(c.dataType||"*").toLowerCase().split(y),c.crossDomain==null&&(a=wn.exec(c.url.toLowerCase()),c.crossDomain=!(!a||a[1]===ln[1]&&a[2]===ln[2]&&(a[3]||(a[1]==="http:"?80:443))==(ln[3]||(ln[1]==="http:"?80:443)))),c.data&&c.processData&&typeof c.data!="string"&&(c.data=v.param(c.data,c.traditional)),kn(Sn,c,n,x);if(E===2)return x;f=c.global,c.type=c.type.toUpperCase(),c.hasContent=!vn.test(c.type),f&&v.active++===0&&v.event.trigger("ajaxStart");if(!c.hasContent){c.data&&(c.url+=(gn.test(c.url)?"&":"?")+c.data,delete c.data),r=c.url;if(c.cache===!1){var N=v.now(),C=c.url.replace(bn,"$1_="+N);c.url=C+(C===c.url?(gn.test(c.url)?"&":"?")+"_="+N:"")}}(c.data&&c.hasContent&&c.contentType!==!1||n.contentType)&&x.setRequestHeader("Content-Type",c.contentType),c.ifModified&&(r=r||c.url,v.lastModified[r]&&x.setRequestHeader("If-Modified-Since",v.lastModified[r]),v.etag[r]&&x.setRequestHeader("If-None-Match",v.etag[r])),x.setRequestHeader("Accept",c.dataTypes[0]&&c.accepts[c.dataTypes[0]]?c.accepts[c.dataTypes[0]]+(c.dataTypes[0]!=="*"?", "+Tn+"; q=0.01":""):c.accepts["*"]);for(l in c.headers)x.setRequestHeader(l,c.headers[l]);if(!c.beforeSend||c.beforeSend.call(h,x,c)!==!1&&E!==2){S="abort";for(l in{success:1,error:1,complete:1})x[l](c[l]);o=kn(xn,c,n,x);if(!o)T(-1,"No Transport");else{x.readyState=1,f&&p.trigger("ajaxSend",[x,c]),c.async&&c.timeout>0&&(u=setTimeout(function(){x.abort("timeout")},c.timeout));try{E=1,o.send(b,T)}catch(k){if(!(E<2))throw k;T(-1,k)}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var Mn=[],_n=/\?/,Dn=/(=)\?(?=&|$)|\?\?/,Pn=v.now();v.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Mn.pop()||v.expando+"_"+Pn++;return this[e]=!0,e}}),v.ajaxPrefilter("json jsonp",function(n,r,i){var s,o,u,a=n.data,f=n.url,l=n.jsonp!==!1,c=l&&Dn.test(f),h=l&&!c&&typeof a=="string"&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Dn.test(a);if(n.dataTypes[0]==="jsonp"||c||h)return s=n.jsonpCallback=v.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,o=e[s],c?n.url=f.replace(Dn,"$1"+s):h?n.data=a.replace(Dn,"$1"+s):l&&(n.url+=(_n.test(f)?"&":"?")+n.jsonp+"="+s),n.converters["script json"]=function(){return u||v.error(s+" was not called"),u[0]},n.dataTypes[0]="json",e[s]=function(){u=arguments},i.always(function(){e[s]=o,n[s]&&(n.jsonpCallback=r.jsonpCallback,Mn.push(s)),u&&v.isFunction(o)&&o(u[0]),u=o=t}),"script"}),v.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(e){return v.globalEval(e),e}}}),v.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),v.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=i.head||i.getElementsByTagName("head")[0]||i.documentElement;return{send:function(s,o){n=i.createElement("script"),n.async="async",e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,i){if(i||!n.readyState||/loaded|complete/.test(n.readyState))n.onload=n.onreadystatechange=null,r&&n.parentNode&&r.removeChild(n),n=t,i||o(200,"success")},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(0,1)}}}});var Hn,Bn=e.ActiveXObject?function(){for(var e in Hn)Hn[e](0,1)}:!1,jn=0;v.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&Fn()||In()}:Fn,function(e){v.extend(v.support,{ajax:!!e,cors:!!e&&"withCredentials"in e})}(v.ajaxSettings.xhr()),v.support.ajax&&v.ajaxTransport(function(n){if(!n.crossDomain||v.support.cors){var r;return{send:function(i,s){var o,u,a=n.xhr();n.username?a.open(n.type,n.url,n.async,n.username,n.password):a.open(n.type,n.url,n.async);if(n.xhrFields)for(u in n.xhrFields)a[u]=n.xhrFields[u];n.mimeType&&a.overrideMimeType&&a.overrideMimeType(n.mimeType),!n.crossDomain&&!i["X-Requested-With"]&&(i["X-Requested-With"]="XMLHttpRequest");try{for(u in i)a.setRequestHeader(u,i[u])}catch(f){}a.send(n.hasContent&&n.data||null),r=function(e,i){var u,f,l,c,h;try{if(r&&(i||a.readyState===4)){r=t,o&&(a.onreadystatechange=v.noop,Bn&&delete Hn[o]);if(i)a.readyState!==4&&a.abort();else{u=a.status,l=a.getAllResponseHeaders(),c={},h=a.responseXML,h&&h.documentElement&&(c.xml=h);try{c.text=a.responseText}catch(p){}try{f=a.statusText}catch(p){f=""}!u&&n.isLocal&&!n.crossDomain?u=c.text?200:404:u===1223&&(u=204)}}}catch(d){i||s(-1,d)}c&&s(u,f,c,l)},n.async?a.readyState===4?setTimeout(r,0):(o=++jn,Bn&&(Hn||(Hn={},v(e).unload(Bn)),Hn[o]=r),a.onreadystatechange=r):r()},abort:function(){r&&r(0,1)}}}});var qn,Rn,Un=/^(?:toggle|show|hide)$/,zn=new RegExp("^(?:([-+])=|)("+m+")([a-z%]*)$","i"),Wn=/queueHooks$/,Xn=[Gn],Vn={"*":[function(e,t){var n,r,i=this.createTween(e,t),s=zn.exec(t),o=i.cur(),u=+o||0,a=1,f=20;if(s){n=+s[2],r=s[3]||(v.cssNumber[e]?"":"px");if(r!=="px"&&u){u=v.css(i.elem,e,!0)||n||1;do a=a||".5",u/=a,v.style(i.elem,e,u+r);while(a!==(a=i.cur()/o)&&a!==1&&--f)}i.unit=r,i.start=u,i.end=s[1]?u+(s[1]+1)*n:n}return i}]};v.Animation=v.extend(Kn,{tweener:function(e,t){v.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;r-1,f={},l={},c,h;a?(l=i.position(),c=l.top,h=l.left):(c=parseFloat(o)||0,h=parseFloat(u)||0),v.isFunction(t)&&(t=t.call(e,n,s)),t.top!=null&&(f.top=t.top-s.top+c),t.left!=null&&(f.left=t.left-s.left+h),"using"in t?t.using.call(e,f):i.css(f)}},v.fn.extend({position:function(){if(!this[0])return;var e=this[0],t=this.offsetParent(),n=this.offset(),r=er.test(t[0].nodeName)?{top:0,left:0}:t.offset();return n.top-=parseFloat(v.css(e,"marginTop"))||0,n.left-=parseFloat(v.css(e,"marginLeft"))||0,r.top+=parseFloat(v.css(t[0],"borderTopWidth"))||0,r.left+=parseFloat(v.css(t[0],"borderLeftWidth"))||0,{top:n.top-r.top,left:n.left-r.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||i.body;while(e&&!er.test(e.nodeName)&&v.css(e,"position")==="static")e=e.offsetParent;return e||i.body})}}),v.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);v.fn[e]=function(i){return v.access(this,function(e,i,s){var o=tr(e);if(s===t)return o?n in o?o[n]:o.document.documentElement[i]:e[i];o?o.scrollTo(r?v(o).scrollLeft():s,r?s:v(o).scrollTop()):e[i]=s},e,i,arguments.length,null)}}),v.each({Height:"height",Width:"width"},function(e,n){v.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){v.fn[i]=function(i,s){var o=arguments.length&&(r||typeof i!="boolean"),u=r||(i===!0||s===!0?"margin":"border");return v.access(this,function(n,r,i){var s;return v.isWindow(n)?n.document.documentElement["client"+e]:n.nodeType===9?(s=n.documentElement,Math.max(n.body["scroll"+e],s["scroll"+e],n.body["offset"+e],s["offset"+e],s["client"+e])):i===t?v.css(n,r,i,u):v.style(n,r,i,u)},n,o?i:t,o,null)}})}),e.jQuery=e.$=v,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return v})})(window); \ No newline at end of file diff --git a/statics/space/default/js/npm.js b/statics/space/default/js/npm.js new file mode 100644 index 0000000..bf6aa80 --- /dev/null +++ b/statics/space/default/js/npm.js @@ -0,0 +1,13 @@ +// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment. +require('../../js/transition.js') +require('../../js/alert.js') +require('../../js/button.js') +require('../../js/carousel.js') +require('../../js/collapse.js') +require('../../js/dropdown.js') +require('../../js/modal.js') +require('../../js/tooltip.js') +require('../../js/popover.js') +require('../../js/scrollspy.js') +require('../../js/tab.js') +require('../../js/affix.js') \ No newline at end of file diff --git a/statics/space/default/js/sns.js b/statics/space/default/js/sns.js new file mode 100644 index 0000000..b6e81ea --- /dev/null +++ b/statics/space/default/js/sns.js @@ -0,0 +1,259 @@ +/** + * Created by dayrui on 14-8-7. + */ +(function($) { + $.fn + .extend({ + insertContent : function(myValue, t) { + var $t = $(this)[0]; + if (document.selection) { // ie + this.focus(); + var sel = document.selection.createRange(); + sel.text = myValue; + this.focus(); + sel.moveStart('character', -l); + var wee = sel.text.length; + if (arguments.length == 2) { + var l = $t.value.length; + sel.moveEnd("character", wee + t); + t <= 0 ? sel.moveStart("character", wee - 2 * t + - myValue.length) : sel.moveStart( + "character", wee - t - myValue.length); + sel.select(); + } + } else if ($t.selectionStart + || $t.selectionStart == '0') { + var startPos = $t.selectionStart; + var endPos = $t.selectionEnd; + var scrollTop = $t.scrollTop; + $t.value = $t.value.substring(0, startPos) + + myValue + + $t.value.substring(endPos, + $t.value.length); + this.focus(); + $t.selectionStart = startPos + myValue.length; + $t.selectionEnd = startPos + myValue.length; + $t.scrollTop = scrollTop; + if (arguments.length == 2) { + $t.setSelectionRange(startPos - t, + $t.selectionEnd + t); + this.focus(); + } + } else { + this.value += myValue; + this.focus(); + } + } + }) +})(jQuery); + +// 插入表情 +function dr_emotion(value) { + $("#dr_content").insertContent(' ['+value+'] '); +} +// 显示表情 +function dr_get_face() { + $("#emotions").show(200); +} +// 插入@ +function dr_insert_user(value) { + $("#dr_content").insertContent(' @'+value+' '); +} +//过滤html标签 +function strip_tags (input, allowed) { + allowed = (((allowed || "") + "").toLowerCase().match(/<[a-z][a-z0-9]*>/g) || []).join(''); // making sure the allowed arg is a string containing only tags in lowercase () + var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>/gi, + commentsAndPhpTags = /|<\?(?:php)?[\s\S]*?\?>/gi; + return input.replace(commentsAndPhpTags, '').replace(tags, function ($0, $1) { + return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : ''; + }); +} +// 添加话题 +function dr_huati_add(){ + var name = strip_tags($('#huati_name').val()); + if (!name || name=='') { + dr_tips('话题不能为空!'); + $('#huati_name').focus(); + return; + } + $("#dr_content").insertContent(' #'+name+'# '); + $('#huati_name').val(''); +} + + +// 搜索好友 +function dr_find_user(gid) { + $("#group-2").html('加载中...'); + $("#groups li").attr('class', ''); + $("#dr_group_"+gid).attr('class', 'current'); + $.ajax({type: "GET", url: memberpath+"index.php?s=member&mod=space&c=sns&m=select_user&gid="+gid, dataType:'jsonp',jsonp:"callback",async: false, + success: function (text) { + var data = text.html; + if (data) { + $("#group-2").html(data); + } else { + $("#group-2").html('没有了'); + } + } + }); +} + +// 转发 +function dr_sns_repost(id) { + // 创建窗口 + var throughBox = $.dialog.through; + var dr_Dialog = throughBox({ + title: '转发', + opacity: 0.1 + }); + var url = memberpath+'index.php?s=member&mod=space&c=sns&m=repost&id='+id; + // ajax调用窗口内容 + $.ajax({type: "GET", url:url, dataType:'jsonp',jsonp:"callback",async: false, + success: function (text) { + var win = $.dialog.top; + dr_Dialog.content(text.html); + // 添加按钮 + dr_Dialog.button({name: '转发', callback:function() { + var content = win.$("#dr_content").val(); + $.ajax({type: "GET", url:url+'&submit=1', data: {content: content}, dataType:'jsonp',jsonp:"callback",async: false, + success: function (data) { + if (data.status == 1) { + dr_tips(data.code, 3, 1); + setTimeout('window.location.reload(true)', 3000); // 刷新页 + } else { + dr_tips(data.code); + win.$('#dr_content').focus(); + } + } + }); + },focus: true}); + } + }); + + return; +} + +// 提交评论 +function dr_sns_comment_post(id) { + var content = strip_tags($('#comment_content_'+id).val()); + if (!content || content == '') { + dr_tips('请填写评论内容'); + return false; + } + $.ajax({type: "GET", url:memberpath+"index.php?s=member&mod=space&c=sns&m=comment&id="+id+"&content="+content, dataType:'jsonp',jsonp:"callback",async: false, + success: function (data) { + if (data.status == 1) { + dr_tips('提交成功', 2, 1); + dr_sns_list_comment(id, 1); + $("#dr_comment_"+id).toggle(); + } else { + dr_tips(data.code); + } + } + }); +} + +// 列表评论 +function dr_sns_list_comment(id, page) { + $("#dr_comment_"+id).toggle(); + $('#comment_content_'+id).val(''); + $.ajax({type: "GET", url: memberpath+'index.php?s=member&mod=space&c=sns&m=comment_list&more=1&id='+id+'&page='+page, dataType:'jsonp',jsonp:"callback",async: false, + success: function (text) { + $('#commentlist_'+id).html(text.html); + } + }); +} + + +// 回复评论 +function dr_recomment(id, username) { + $('#comment_content_'+id).focus(); + $('#comment_content_'+id).val('@'+username+' '); +} + +// 赞 +function dr_sns_digg(id) { + $.ajax({type: "GET", url: memberpath+'index.php?s=member&mod=space&c=sns&m=digg&id='+id, dataType:'jsonp',jsonp:"callback",async: false, + success: function (text) { + $('#dr_digg_'+id).html(text.html); + } + }); +} + +// 收藏 +function dr_sns_favorite(id) { + $.ajax({type: "GET", url: memberpath+'index.php?s=member&mod=space&c=sns&m=favorite&id='+id, dataType:'jsonp',jsonp:"callback",async: false, + success: function (text) { + $("#dr_favorite_"+id).html(text.html); + } + }); +} + + + +// 删除评论 +function dr_sns_delete_comment(id) { + art.dialog.confirm("你确认要删除吗?", function(){ + $.ajax({type: "GET", url: memberpath+'index.php?s=member&mod=space&c=sns&m=delete_comment&id='+id, dataType:'jsonp',jsonp:"callback",async: false, + success: function (data) { + if (data.status == 1) { + dr_tips(data.code, 3, 1); + $("#dr_row_comment_"+id).remove(); + } else { + dr_tips(data.code); + } + art.dialog.close(); + } + }); + return true; + + }); + return false; +} + +// 监听会员资料 +$(function(){ + $('a[event-node="face_card"]').mouseenter(function(){ + $('.face_card').hide(); + var uid = $(this).attr('uid'); + var obj = $(this); + dr_facecard.init(); + dr_facecard.show(obj, uid); + }); + $('a[event-node="face_card"]').mouseleave(function(){ + dr_facecard.hide(); + }); + $('a[event-node="face_card"]').blur(function(){ + dr_facecard.hide(); + }); + // +}); + +/** + * 小名片JS模型 + */ +dr_facecard ={ + //给工厂调用的接口 + _init:function(attrs){ + this.init(); + }, + init:function(){ + + }, + show:function(obj,uid){ + + }, + deleteUser:function(uid){ + + }, + setCss:function(obj){ //计算位置 + + }, + hide:function(){ + + }, + dohide:function(){//强制隐藏 + + } +}; + diff --git a/statics/space/default/list_feed.html b/statics/space/default/list_feed.html new file mode 100644 index 0000000..f35be79 --- /dev/null +++ b/statics/space/default/list_feed.html @@ -0,0 +1,111 @@ +{template "head.html"} +{template "header.html"} +
+
+ +
+
+ + + {list action=table table=sns_feed uid=$space.uid order=inputtime page=1 pagesize=10 urlrule=$urlrule} +
+
+
+ +
+
+

+ {$t.username} + +

+ + {dr_sns_content($t.content)} + {php $images = $t.images ? @explode('|', $t.images) : '';} + {if $images} +
+
+
    + {loop $images $img} +
  • + +
  • + {/loop} +
+
+ {/if} + {if $t.repost_id && $repost = dr_sns_feed($t.repost_id)} +
+
+
+ @{$repost.username}
+
{dr_sns_content($repost.content)}
+

+ + 原文转发({$repost.repost})| + 原文评论({$repost.comment}) + + +   {dr_fdate($repost.inputtime)} + {$repost.source} + +

+
+ {/if} +
+

+ + 转发 + | + {if @in_array($t.id, $favorite)}取消收藏{else}收藏{/if} + | + 赞({$t.digg}) + | + 评论({$t.comment}) + + + +   {dr_fdate($t.inputtime)} + + {$t.source} + {if $member.adminid || $t.uid==$member.uid} + +   删除 + + {/if} + +

+ +
+
+
+ {/list} + +
+ {$pages} +
+ +
+
+
+ {template "sidebar.html"} +
+
+ {template "footer.html"} +
+ + + + \ No newline at end of file diff --git a/statics/space/default/list_link.html b/statics/space/default/list_link.html new file mode 100644 index 0000000..99bec28 --- /dev/null +++ b/statics/space/default/list_link.html @@ -0,0 +1 @@ +{template "list_news.html"} \ No newline at end of file diff --git a/statics/space/default/list_log.html b/statics/space/default/list_log.html new file mode 100644 index 0000000..99bec28 --- /dev/null +++ b/statics/space/default/list_log.html @@ -0,0 +1 @@ +{template "list_news.html"} \ No newline at end of file diff --git a/statics/space/default/list_news.html b/statics/space/default/list_news.html new file mode 100644 index 0000000..951e78b --- /dev/null +++ b/statics/space/default/list_news.html @@ -0,0 +1,50 @@ +{template "head.html"} +{template "header.html"} +
+
+
+
+
+ + +
+

{$cat.name}

+
+
+ + + + + + + + + {list action=model modelid=$modelid space=$spaceid IN_catid=$cat.childids page=1 pagesize=10 urlrule=$urlrule} + + + + + + {/list} + +
标题发布时间人气
+ {$t.title} + {$t.updatetime}{$t.hits}
+
+
{$pages}
+
+ + + + + + + +
+ {template "sidebar.html"} +
+ + {template "footer.html"} + + + \ No newline at end of file diff --git a/statics/space/default/list_photo.html b/statics/space/default/list_photo.html new file mode 100644 index 0000000..99bec28 --- /dev/null +++ b/statics/space/default/list_photo.html @@ -0,0 +1 @@ +{template "list_news.html"} \ No newline at end of file diff --git a/statics/space/default/list_slides.html b/statics/space/default/list_slides.html new file mode 100644 index 0000000..99bec28 --- /dev/null +++ b/statics/space/default/list_slides.html @@ -0,0 +1 @@ +{template "list_news.html"} \ No newline at end of file diff --git a/statics/space/default/page.html b/statics/space/default/page.html new file mode 100644 index 0000000..0bcc717 --- /dev/null +++ b/statics/space/default/page.html @@ -0,0 +1,36 @@ +{template "head.html"} +{template "header.html"} +
+
+
+ +
+
+
+
+
+

+ {$cat.name} +

+
+
+
+ {$cat.body} +
+
+ + +
+
+
+
+ + {template "sidebar.html"} +
+
+ {template "footer.html"} +
+ + + + \ No newline at end of file diff --git a/statics/space/default/preview.jpg b/statics/space/default/preview.jpg new file mode 100644 index 0000000..faff340 Binary files /dev/null and b/statics/space/default/preview.jpg differ diff --git a/statics/space/default/rule.php b/statics/space/default/rule.php new file mode 100644 index 0000000..2bbaed6 --- /dev/null +++ b/statics/space/default/rule.php @@ -0,0 +1 @@ +a:10:{i:1;a:2:{s:5:\"price\";s:1:\"0\";s:3:\"use\";s:1:\"1\";}i:2;a:2:{s:5:\"price\";s:1:\"0\";s:3:\"use\";s:1:\"1\";}s:3:\"3_1\";a:2:{s:5:\"price\";s:1:\"0\";s:3:\"use\";s:1:\"1\";}s:3:\"3_2\";a:2:{s:5:\"price\";s:1:\"0\";s:3:\"use\";s:1:\"1\";}s:3:\"3_3\";a:2:{s:5:\"price\";s:1:\"0\";s:3:\"use\";s:1:\"1\";}s:3:\"3_4\";a:2:{s:5:\"price\";s:1:\"0\";s:3:\"use\";s:1:\"1\";}s:3:\"4_5\";a:1:{s:5:\"price\";s:1:\"0\";}s:3:\"4_6\";a:1:{s:5:\"price\";s:1:\"0\";}s:3:\"4_7\";a:1:{s:5:\"price\";s:1:\"0\";}s:3:\"4_8\";a:1:{s:5:\"price\";s:1:\"0\";}} \ No newline at end of file diff --git a/statics/space/default/show_feed.html b/statics/space/default/show_feed.html new file mode 100644 index 0000000..3f84c32 --- /dev/null +++ b/statics/space/default/show_feed.html @@ -0,0 +1,135 @@ +{template "head.html"} +{template "header.html"} + + +
+
+
+
+
+
+
+

{$title}

+
+
+
+ + +
+
+
+ +
+
+

+ {$data.username} + +

+ + {dr_sns_content($data.content)} + {if $data.repost_id && $repost = dr_sns_feed($data.repost_id)} +
+
+
+ @{$repost.username}
+
{dr_sns_content($repost.content)}
+

+ + 原文转发({$repost.repost})| + 原文评论({$repost.comment}) + + +   {dr_fdate($repost.inputtime)} + {$repost.source} + +

+
+ {/if} +
+

+ + 转发 + | + {if @in_array($data.id, $favorite)}取消收藏{else}收藏{/if} + | + 赞({$data.digg}) + | + 评论({$data.comment}) + + + +   {dr_fdate($data.inputtime)} + + {$data.source} + {if $member.adminid || $data.uid==$member.uid} + +   删除 + + {/if} + +

+
+
+
+ +
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ + +
+
+ +
+
+
+ {template "sidebar.html"} +
+
+ {template "footer.html"} +
+ + + + \ No newline at end of file diff --git a/statics/space/default/show_log.html b/statics/space/default/show_log.html new file mode 100644 index 0000000..d8a496f --- /dev/null +++ b/statics/space/default/show_log.html @@ -0,0 +1,61 @@ +{template "head.html"} +{template "header.html"} +
+
+
+
+
+ + +
+

{$cat.name}

+
+
+

{$title}{if $content_title}({$content_title}){/if}

+
+ {$content} +
+ + {loop $content_page $i $t} + {if $page==$i} + {$i} + {else} + {$i} + {/if} + {/loop} +
+
+
+
+
+
+ 分享到: + +
+ +
+ 点击次数:{dr_space_show_hits($modelid, $id)} +   更新时间:{$updatetime} +   【打印此页】 +
+
+ 上一条:{if $prev_page}{$prev_page.title}{else}没有了{/if} +    + 下一条:{if $next_page}{$next_page.title}{else}没有了{/if} +
+
+
+
+ + +
+
+
+
+ {template "sidebar.html"} +
+
+ {template "footer.html"} +
+ + \ No newline at end of file diff --git a/statics/space/default/show_news.html b/statics/space/default/show_news.html new file mode 100644 index 0000000..bc99065 --- /dev/null +++ b/statics/space/default/show_news.html @@ -0,0 +1,61 @@ +{template "head.html"} +{template "header.html"} +
+
+
+
+
+ + +
+

{$cat.name}

+
+
+

{$title}{if $content_title}({$content_title}){/if}

+
+ {$content} +
+ + {loop $content_page $i $t} + {if $page==$i} + {$i} + {else} + {$i} + {/if} + {/loop} +
+
+
+
+
+
+ 分享到: + +
+ +
+ 点击次数:{dr_space_show_hits($modelid, $id)} +   更新时间:{$updatetime} +   【打印此页】 +
+
+ 上一条:{if $prev_page}{$prev_page.title}{else}没有了{/if} +    + 下一条:{if $next_page}{$next_page.title}{else}没有了{/if} +
+
+
+
+ + +
+
+
+
+ {template "sidebar.html"} +
+
+ {template "footer.html"} +
+ + \ No newline at end of file diff --git a/statics/space/default/show_photo.html b/statics/space/default/show_photo.html new file mode 100644 index 0000000..d733615 --- /dev/null +++ b/statics/space/default/show_photo.html @@ -0,0 +1,74 @@ +{template "head.html"} +{template "header.html"} +
+
+
+
+
+ + +
+

{$title}{if $content_title}({$content_title}){/if}

+
+ +
+ + +
+
    + {loop $image $i $t} +
  • + {/loop} +
+
+ +
+
+ {$content} +
+ + {loop $content_page $i $t} + {if $page==$i} + {$i} + {else} + {$i} + {/if} + {/loop} +
+
+
+
+
+
+ 分享到: + +
+ +
+ 点击次数:{dr_space_show_hits($modelid, $id)} +   更新时间:{$updatetime} +   【打印此页】 +
+
+ 上一条:{if $prev_page}{$prev_page.title}{else}没有了{/if} +    + 下一条:{if $next_page}{$next_page.title}{else}没有了{/if} +
+
+ + +
+
+
+
+ {template "sidebar.html"} +
+
+ {template "footer.html"} +
+ + \ No newline at end of file diff --git a/statics/space/default/sidebar.html b/statics/space/default/sidebar.html new file mode 100644 index 0000000..f2d662d --- /dev/null +++ b/statics/space/default/sidebar.html @@ -0,0 +1,86 @@ +
+ + +
+ {if $cat} + {if $related} +
+ +
+
    + {loop $related $c} +
  • {$c.name}
  • + {/loop} +
+
+
+ {/if} + {else} +
+
+ 全部 +

最近来访

  +
+
+
+
    + {php $sql= 'select * from (select * from @#space_access where uid='.$space['uid'].' order by inputtime desc ) t group by uid order by inputtime desc limit 6';} + {list action=sql sql='$sql'} +
  • {$t.username}

    {dr_fdate($t.inputtime)}
  • + {/list} +
+
+
+
+
+
+ 全部 +

TA的粉丝

  +
+
+
+
    + {list action=table table=sns_follow uid=$space.uid num=6 order=ctime} +
  • {$t.fusername}

    {dr_fdate($t.ctime)}
  • + {/list} +
+
+
+
+
+
+ 全部 +

TA的关注

  +
+
+
+
    + {list action=table table=sns_follow fid=$space.uid num=6 order=ctime} +
  • {$t.username}

    {dr_fdate($t.ctime)}
  • + {/list} +
+
+
+
+ {/if} +
+
\ No newline at end of file diff --git a/statics/space/default/topic.html b/statics/space/default/topic.html new file mode 100644 index 0000000..562442f --- /dev/null +++ b/statics/space/default/topic.html @@ -0,0 +1,121 @@ +{template "head.html"} +{template "header.html"} +
+
+ +
+
+
+
+
+

{$title}

+
+
+
    +
  • 话题创建者:{$topic.username}
  • +
  • 话题创建时间:{dr_date($topic.inputtime)}
  • +
  • 话题的动态数量:{$topic.count}条
  • +
+
+ {list action=sql sql='$topic_sql' page=1 pagesize=10 urlrule=$urlrule} +
+
+
+ +
+
+

+ {$t.username} + +

+ + {dr_sns_content($t.content)} + {php $images = $t.images ? @explode('|', $t.images) : '';} + {if $images} +
+
+
    + {loop $images $img} +
  • + +
  • + {/loop} +
+
+ {/if} + {if $t.repost_id && $repost = dr_sns_feed($t.repost_id)} +
+
+
+ @{$repost.username}
+
{dr_sns_content($repost.content)}
+

+ + 原文转发({$repost.repost})| + 原文评论({$repost.comment}) + + +   {dr_fdate($repost.inputtime)} + {$repost.source} + +

+
+ {/if} +
+

+ + 转发 + | + {if @in_array($t.id, $favorite)}取消收藏{else}收藏{/if} + | + 赞({$t.digg}) + | + 评论({$t.comment}) + + + +   {dr_fdate($t.inputtime)} + + {$t.source} + {if $member.adminid || $t.uid==$member.uid} + +   删除 + + {/if} + +

+ +
+
+
+ {/list} + +
+ {$pages} +
+ +
+
+
+ {template "sidebar.html"} +
+
+ {template "footer.html"} +
+ + + + \ No newline at end of file diff --git a/statics/watermark/default.png b/statics/watermark/default.png new file mode 100644 index 0000000..4cc568c Binary files /dev/null and b/statics/watermark/default.png differ diff --git a/statics/watermark/default.ttf b/statics/watermark/default.ttf new file mode 100644 index 0000000..383c88b Binary files /dev/null and b/statics/watermark/default.ttf differ diff --git a/templates/pc/member/default/common/account_attachment_list.html b/templates/pc/member/default/common/account_attachment_list.html new file mode 100644 index 0000000..b47fb58 --- /dev/null +++ b/templates/pc/member/default/common/account_attachment_list.html @@ -0,0 +1,110 @@ +{template "nheader.html"} + +
+ 附件总空间:{if $acount}{dr_format_file_size($acount)}{else}不限制{/if},已使用:{dr_format_file_size($ucount)}{if $acount},剩余:{dr_format_file_size($scount)}{/if}。 +
+ +
+
+ +
+
+
+ + + +
+
+ +
+
+ +
+ +
+
+
+ +
+ + + + + + + + + + + + {loop $list $t} + + + + + + + + {/loop} + +
文件名大小扩展名上传时间操作
{dr_strcut($t.filename, 40)}{dr_format_file_size($t.filesize)}{$t.fileext}{dr_date($t['inputtime'])} 删除
+ +
+ +
+ + +
+
+ + +
+
+ +
+
+ +{if IS_MOBILE} +
+ 左右滑动表格可以查看更多的内容 +
+{/if} +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/common/account_avatar.html b/templates/pc/member/default/common/account_avatar.html new file mode 100644 index 0000000..40bda98 --- /dev/null +++ b/templates/pc/member/default/common/account_avatar.html @@ -0,0 +1,101 @@ +{template "nheader.html"} + +
+
+ + + {if IS_MOBILE} + +
+
+
+
+ +
+
+ + 上传 + 上传 + + 删除 + 保存 +
+
+
+
+ + {else} + {if $ucenter} + + + + + +
+
头像保存后,您可能需要刷新一下本页面(按F5键),才能查看最新的头像效果

+ {uc_avatar($ucenter)} +
+ {else} + + + + + +
+ + +
+

Loading ...

+
+
+

+

+

+
+ {/if} + {/if} +
+
+ +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/common/account_index.html b/templates/pc/member/default/common/account_index.html new file mode 100644 index 0000000..abe2880 --- /dev/null +++ b/templates/pc/member/default/common/account_index.html @@ -0,0 +1,93 @@ +{template "nheader.html"} + +
+
+ + +
+ +
+ {if $member.groupid == 2 && !$member.bang} +
您是通过快捷登录注册的,需要完善登录信息
+
+ +
+ +
+
+
+ +
+ +
+
+ {else if $member.groupid == 2 && $member.bang} +
您是通过快捷登录注册的,需要完善登录信息
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+ {else} + {if $member.email} +
+ +
+ {$member.email} +
+
+ {else} +
+ +
+ +
+
+ {/if} + {$myfield} + {/if} +
+ +
+
+
+ +
+
+
+ +
+ + +
+
+ +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/common/account_login.html b/templates/pc/member/default/common/account_login.html new file mode 100644 index 0000000..e124452 --- /dev/null +++ b/templates/pc/member/default/common/account_login.html @@ -0,0 +1,40 @@ +{template "nheader.html"} + +
+
+ +
+ +
+ + + + + + + + + + {list action=sql sql='select * from @#member_login where uid=$uid order by logintime desc'} + + + + + + {/list} + +
登录时间 登录地区 客户端详情
{dr_date($t.logintime, NULL, 'red')}{if $t.oauthid}【{$t.oauthid}】{/if}{$ci->dip->address($t.loginip)}{dr_strcut($t.useragent, 60)}
+
+ +
+ + +
+
+ +{if IS_MOBILE} +
+ 左右滑动表格可以查看更多的内容 +
+{/if} +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/common/account_oauth.html b/templates/pc/member/default/common/account_oauth.html new file mode 100644 index 0000000..86a3635 --- /dev/null +++ b/templates/pc/member/default/common/account_oauth.html @@ -0,0 +1,56 @@ +{template "nheader.html"} + +
+
+ +
+ +
+ + + + + + + + + + + + {list action=cache name=OAUTH} + {php $id=$t['id'];} + + + + + + + + {/list} + +
服务商 头像 昵称 到期时间 操作
+ {if isset($list[$id])} + + {/if} + {if isset($list[$id])}{$list[$id]['nickname']}{/if}{if isset($list[$id])}{dr_date($list[$id]['expire_at'])}{/if} + {if isset($list[$id])} + 解绑 + 更新 + {else} + 绑定 + {/if} +
+
+ +
+ + +
+
+ +{if IS_MOBILE} +
+ 左右滑动表格可以查看更多的内容 +
+{/if} +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/common/account_password.html b/templates/pc/member/default/common/account_password.html new file mode 100644 index 0000000..33d32a4 --- /dev/null +++ b/templates/pc/member/default/common/account_password.html @@ -0,0 +1,85 @@ +{template "nheader.html"} + +
+
+ + +
+
+ {if strlen($result_error) > 3} +
+ {$result_error}
+ {/if} + +
+ +
+
+ + +
+ +
+
+
+ +
+
+ +
+ + +
+
+
+ +
+
+ +
+ + +
+
+ +
+ +
+
+
+ +
+
+
+ +
+ + +
+
+ +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/common/account_permission.html b/templates/pc/member/default/common/account_permission.html new file mode 100644 index 0000000..73807ee --- /dev/null +++ b/templates/pc/member/default/common/account_permission.html @@ -0,0 +1,38 @@ +{template "nheader.html"} + +
+ 当前会员组:{$member.groupname}{if $member.levelid},会员等级:{$member.levelname}{/if}{if $member.overdue},过期时间:{if $member.overdue>2000000000}永久{else}{dr_date($member.overdue)}{/if}{/if} +
+ +
+
+ +
+ +
+ {loop $category $p $name} + + {/loop} +
+
+ {loop $group.level $lid $t} + {$t.name} + {/loop} +
+
+ {$content} +
+ +
+ + +
+
+ +{if IS_MOBILE} +
+ 左右滑动表格可以查看更多的内容 +
+{/if} +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/common/account_upgrade.html b/templates/pc/member/default/common/account_upgrade.html new file mode 100644 index 0000000..8152f33 --- /dev/null +++ b/templates/pc/member/default/common/account_upgrade.html @@ -0,0 +1,63 @@ +{template "nheader.html"} + +
+ 会员组:{$member.groupname},{if $member.levelid}会员等级:{$member.levelname}  {dr_show_stars($member.levelstars)}{/if} +
+ +
+
+ +
+ +
+ + + + + + + + + + {loop $group $t} + + + + + + {/loop} + +
名称 费用 操作
{$t.name} + {if $t.unit==1} + {intval($t.price)} + {SITE_SCORE} + {else} + {$t.price} + {SITE_MONEY} + {/if} + / + {if $t.limit==1}月 + {else if $t.limit==2}半年 + {else if $t.limit==3}年 + {else if $t.limit==4}永久 + {/if} + + 权限查看 + {if $member.overdue < 2000000000 || $t.id!=$member.groupid} + {if $t.id==$member.groupid} 立即续费{else} 立即申请{/if} + {/if} +
+
+ +
+ + +
+
+ +{if IS_MOBILE} +
+ 左右滑动表格可以查看更多的内容 +
+{/if} +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/common/address_add.html b/templates/pc/member/default/common/address_add.html new file mode 100644 index 0000000..2ee1c0f --- /dev/null +++ b/templates/pc/member/default/common/address_add.html @@ -0,0 +1,79 @@ +{template "nheader.html"} +
+
+ + +
+
+ {if strlen($result_error) > 3} +
+ {$result_error}
+ {/if} + +
+ +
+ {dr_field_input('city', 'Linkage', array('option' => array('linkage' => 'address'),'validate' => array('required' => 1 )), $data['city'])} +
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ + +
+
+
+ +
+ +
+
+
+ +
+
+
+ +
+ + +
+
+ +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/common/address_index.html b/templates/pc/member/default/common/address_index.html new file mode 100644 index 0000000..a2912a5 --- /dev/null +++ b/templates/pc/member/default/common/address_index.html @@ -0,0 +1,64 @@ +{template "nheader.html"} + +
+
+ +
+
+ +
+ +
+ + + + + + + + + + + + + {loop $list $t} + + + + + + + + + {/loop} + +
默认 姓名 电话 邮编 地址 操作
{if $t.default} + + {else} + + {/if} {$t.name}{$t.phone}{$t.zipcode}{dr_linkagepos('address', $t.city, '  ', NULL)}  {$t.address} + 修改 + 删除 +
+
+ +
+ + +
+
+ +{if IS_MOBILE} +
+ 左右滑动表格可以查看更多的内容 +
+{/if} +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/common/comment_index.html b/templates/pc/member/default/common/comment_index.html new file mode 100644 index 0000000..85c613b --- /dev/null +++ b/templates/pc/member/default/common/comment_index.html @@ -0,0 +1,98 @@ +{template nheader.html} + +
+
+ +
+
+
+ + + + + +
+
+ +
+
+ +
+ +
+
+
+ +
+ +
+ + + + + + + + + + {loop $list $t} + + + + + + {/loop} + +
主题评论数
{$t.comments} + 访问 +
+
+
+
+ + +
+
+ + +
+
+ +
+
+ +{if IS_MOBILE} +
+ 左右滑动表格可以查看更多的内容 +
+{/if} +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/common/find.html b/templates/pc/member/default/common/find.html new file mode 100644 index 0000000..f16db3a --- /dev/null +++ b/templates/pc/member/default/common/find.html @@ -0,0 +1,147 @@ + + + + + + + + + + {$meta_title} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + diff --git a/templates/pc/member/default/common/footer.html b/templates/pc/member/default/common/footer.html new file mode 100644 index 0000000..d3b3c1c --- /dev/null +++ b/templates/pc/member/default/common/footer.html @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/templates/pc/member/default/common/header.html b/templates/pc/member/default/common/header.html new file mode 100644 index 0000000..80dc8f6 --- /dev/null +++ b/templates/pc/member/default/common/header.html @@ -0,0 +1,140 @@ + + + +{$meta_name}{if defined('MODULE_NAME')}-{MODULE_NAME}{/if}-{SITE_NAME} + + + + + + + + + + + + + + + + +
+
+ 网站首页 + {if $member} + 我的空间 + {/if} + +
+
+{if $member} +
+
+
+ + +
+
+
+{else} +
+
+
+ + +
+
+
+{/if} + \ No newline at end of file diff --git a/templates/pc/member/default/common/icon.html b/templates/pc/member/default/common/icon.html new file mode 100644 index 0000000..d61cc5f --- /dev/null +++ b/templates/pc/member/default/common/icon.html @@ -0,0 +1,3587 @@ + + + + + + + + + + 图标大全 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+

Font Awesome gives you scalable vector icons that can instantly be customized — size, color, drop shadow, and anything that can be done with the power of CSS. The complete set of 439 icons in Font Awesome 4.1.0 +

For more info check out: + http://fortawesome.github.io/Font-Awesome/icons/ +
+
+

66 New Icons in 4.4

+
+
+ 500px
+
+ amazon
+
+ balance-scale
+
+ battery-0 + (alias) +
+
+ battery-1 + (alias) +
+
+ battery-2 + (alias) +
+
+ battery-3 + (alias) +
+
+ battery-4 + (alias) +
+
+ battery-empty
+
+ battery-full
+
+ battery-half
+
+ battery-quarter
+
+ battery-three-quarters
+
+ black-tie
+
+ calendar-check-o
+
+ calendar-minus-o
+
+ calendar-plus-o
+
+ calendar-times-o
+
+ cc-diners-club
+
+ cc-jcb
+
+ chrome
+
+ clone
+
+ commenting
+
+ commenting-o
+
+ contao
+
+ creative-commons
+
+ expeditedssl
+
+ firefox
+
+ fonticons
+
+ genderless
+
+ get-pocket
+
+ gg
+
+ gg-circle
+
+ hand-grab-o + (alias) +
+
+ hand-lizard-o
+
+ hand-paper-o
+
+ hand-peace-o
+
+ hand-pointer-o
+
+ hand-rock-o
+
+ hand-scissors-o
+
+ hand-spock-o
+
+ hand-stop-o + (alias) +
+
+ hourglass
+
+ hourglass-1 + (alias) +
+
+ hourglass-2 + (alias) +
+
+ hourglass-3 + (alias) +
+
+ hourglass-end
+
+ hourglass-half
+
+ hourglass-o
+
+ hourglass-start
+
+ houzz
+
+ i-cursor
+
+ industry
+
+ internet-explorer
+
+ map
+
+ map-o
+
+ map-pin
+
+ map-signs
+
+ mouse-pointer
+
+ object-group
+
+ object-ungroup
+
+ odnoklassniki
+
+ odnoklassniki-square
+
+ opencart
+
+ opera
+
+ optin-monster
+
+ registered
+
+ safari
+
+ sticky-note
+
+ sticky-note-o
+
+ television
+
+ trademark
+
+ tripadvisor
+
+ tv + (alias) +
+
+ vimeo
+
+ wikipedia-w
+
+ y-combinator
+
+ yc + (alias) +
+
+
+
+ +
+
+ adjust
+
+ anchor
+
+ archive
+
+ area-chart
+
+ arrows
+
+ arrows-h
+
+ arrows-v
+
+ asterisk
+
+ at
+
+ automobile + (alias) +
+
+ balance-scale
+
+ ban
+
+ bank + (alias) +
+
+ bar-chart
+
+ bar-chart-o + (alias) +
+
+ barcode
+
+ bars
+
+ battery-0 + (alias) +
+
+ battery-1 + (alias) +
+
+ battery-2 + (alias) +
+
+ battery-3 + (alias) +
+
+ battery-4 + (alias) +
+
+ battery-empty
+
+ battery-full
+
+ battery-half
+
+ battery-quarter
+
+ battery-three-quarters
+
+ bed
+
+ beer
+
+ bell
+
+ bell-o
+
+ bell-slash
+
+ bell-slash-o
+
+ bicycle
+
+ binoculars
+
+ birthday-cake
+
+ bolt
+
+ bomb
+
+ book
+
+ bookmark
+
+ bookmark-o
+
+ briefcase
+
+ bug
+
+ building
+
+ building-o
+
+ bullhorn
+
+ bullseye
+
+ bus
+
+ cab + (alias) +
+
+ calculator
+
+ calendar
+
+ calendar-check-o
+
+ calendar-minus-o
+
+ calendar-o
+
+ calendar-plus-o
+
+ calendar-times-o
+
+ camera
+
+ camera-retro
+
+ car
+
+ caret-square-o-down
+
+ caret-square-o-left
+
+ caret-square-o-right
+
+ caret-square-o-up
+
+ cart-arrow-down
+
+ cart-plus
+
+ cc
+
+ certificate
+
+ check
+
+ check-circle
+
+ check-circle-o
+
+ check-square
+
+ check-square-o
+
+ child
+
+ circle
+
+ circle-o
+
+ circle-o-notch
+
+ circle-thin
+
+ clock-o
+
+ clone
+
+ close + (alias) +
+
+ cloud
+
+ cloud-download
+
+ cloud-upload
+
+ code
+
+ code-fork
+
+ coffee
+
+ cog
+
+ cogs
+
+ comment
+
+ comment-o
+
+ commenting
+
+ commenting-o
+
+ comments
+
+ comments-o
+
+ compass
+
+ copyright
+
+ creative-commons
+
+ credit-card
+
+ crop
+
+ crosshairs
+
+ cube
+
+ cubes
+
+ cutlery
+
+ dashboard + (alias) +
+
+ database
+
+ desktop
+
+ diamond
+
+ dot-circle-o
+
+ download
+
+ edit + (alias) +
+
+ ellipsis-h
+
+ ellipsis-v
+
+ envelope
+
+ envelope-o
+
+ envelope-square
+
+ eraser
+
+ exchange
+
+ exclamation
+
+ exclamation-circle
+
+ exclamation-triangle
+
+ external-link
+
+ external-link-square
+
+ eye
+
+ eye-slash
+
+ eyedropper
+
+ fax
+
+ feed + (alias) +
+
+ female
+
+ fighter-jet
+
+ file-archive-o
+
+ file-audio-o
+
+ file-code-o
+
+ file-excel-o
+
+ file-image-o
+
+ file-movie-o + (alias) +
+
+ file-pdf-o
+
+ file-photo-o + (alias) +
+
+ file-picture-o + (alias) +
+
+ file-powerpoint-o
+
+ file-sound-o + (alias) +
+
+ file-video-o
+
+ file-word-o
+
+ file-zip-o + (alias) +
+
+ film
+
+ filter
+
+ fire
+
+ fire-extinguisher
+
+ flag
+
+ flag-checkered
+
+ flag-o
+
+ flash + (alias) +
+
+ flask
+
+ folder
+
+ folder-o
+
+ folder-open
+
+ folder-open-o
+
+ frown-o
+
+ futbol-o
+
+ gamepad
+
+ gavel
+
+ gear + (alias) +
+
+ gears + (alias) +
+
+ gift
+
+ glass
+
+ globe
+
+ graduation-cap
+
+ group + (alias) +
+
+ hand-grab-o + (alias) +
+
+ hand-lizard-o
+
+ hand-paper-o
+
+ hand-peace-o
+
+ hand-pointer-o
+
+ hand-rock-o
+
+ hand-scissors-o
+
+ hand-spock-o
+
+ hand-stop-o + (alias) +
+
+ hdd-o
+
+ headphones
+
+ heart
+
+ heart-o
+
+ heartbeat
+
+ history
+
+ home
+
+ hotel + (alias) +
+
+ hourglass
+
+ hourglass-1 + (alias) +
+
+ hourglass-2 + (alias) +
+
+ hourglass-3 + (alias) +
+
+ hourglass-end
+
+ hourglass-half
+
+ hourglass-o
+
+ hourglass-start
+
+ i-cursor
+
+ image + (alias) +
+
+ inbox
+
+ industry
+
+ info
+
+ info-circle
+
+ institution + (alias) +
+
+ key
+
+ keyboard-o
+
+ language
+
+ laptop
+
+ leaf
+
+ legal + (alias) +
+
+ lemon-o
+
+ level-down
+
+ level-up
+
+ life-bouy + (alias) +
+
+ life-buoy + (alias) +
+
+ life-ring
+
+ life-saver + (alias) +
+
+ lightbulb-o
+
+ line-chart
+
+ location-arrow
+
+ lock
+
+ magic
+
+ magnet
+
+ mail-forward + (alias) +
+
+ mail-reply + (alias) +
+
+ mail-reply-all + (alias) +
+
+ male
+
+ map
+
+ map-marker
+
+ map-o
+
+ map-pin
+
+ map-signs
+
+ meh-o
+
+ microphone
+
+ microphone-slash
+
+ minus
+
+ minus-circle
+
+ minus-square
+
+ minus-square-o
+
+ mobile
+
+ mobile-phone + (alias) +
+
+ money
+
+ moon-o
+
+ mortar-board + (alias) +
+
+ motorcycle
+
+ mouse-pointer
+
+ music
+
+ navicon + (alias) +
+
+ newspaper-o
+
+ object-group
+
+ object-ungroup
+
+ paint-brush
+
+ paper-plane
+
+ paper-plane-o
+
+ paw
+
+ pencil
+
+ pencil-square
+
+ pencil-square-o
+
+ phone
+
+ phone-square
+
+ photo + (alias) +
+
+ picture-o
+
+ pie-chart
+
+ plane
+
+ plug
+
+ plus
+
+ plus-circle
+
+ plus-square
+
+ plus-square-o
+
+ power-off
+
+ print
+
+ puzzle-piece
+
+ qrcode
+
+ question
+
+ question-circle
+
+ quote-left
+
+ quote-right
+
+ random
+
+ recycle
+
+ refresh
+
+ registered
+
+ remove + (alias) +
+
+ reorder + (alias) +
+
+ reply
+
+ reply-all
+
+ retweet
+
+ road
+
+ rocket
+
+ rss
+
+ rss-square
+
+ search
+
+ search-minus
+
+ search-plus
+
+ send + (alias) +
+
+ send-o + (alias) +
+
+ server
+
+ share
+
+ share-alt
+
+ share-alt-square
+
+ share-square
+
+ share-square-o
+
+ shield
+
+ ship
+
+ shopping-cart
+
+ sign-in
+
+ sign-out
+
+ signal
+
+ sitemap
+
+ sliders
+
+ smile-o
+
+ soccer-ball-o + (alias) +
+
+ sort
+
+ sort-alpha-asc
+
+ sort-alpha-desc
+
+ sort-amount-asc
+
+ sort-amount-desc
+
+ sort-asc
+
+ sort-desc
+
+ sort-down + (alias) +
+
+ sort-numeric-asc
+
+ sort-numeric-desc
+
+ sort-up + (alias) +
+
+ space-shuttle
+
+ spinner
+
+ spoon
+
+ square
+
+ square-o
+
+ star
+
+ star-half
+
+ star-half-empty + (alias) +
+
+ star-half-full + (alias) +
+
+ star-half-o
+
+ star-o
+
+ sticky-note
+
+ sticky-note-o
+
+ street-view
+
+ suitcase
+
+ sun-o
+
+ support + (alias) +
+
+ tablet
+
+ tachometer
+
+ tag
+
+ tags
+
+ tasks
+
+ taxi
+
+ television
+
+ terminal
+
+ thumb-tack
+
+ thumbs-down
+
+ thumbs-o-down
+
+ thumbs-o-up
+
+ thumbs-up
+
+ ticket
+
+ times
+
+ times-circle
+
+ times-circle-o
+
+ tint
+
+ toggle-down + (alias) +
+
+ toggle-left + (alias) +
+
+ toggle-off
+
+ toggle-on
+
+ toggle-right + (alias) +
+
+ toggle-up + (alias) +
+
+ trademark
+
+ trash
+
+ trash-o
+
+ tree
+
+ trophy
+
+ truck
+
+ tty
+
+ tv + (alias) +
+
+ umbrella
+
+ university
+
+ unlock
+
+ unlock-alt
+
+ unsorted + (alias) +
+
+ upload
+
+ user
+
+ user-plus
+
+ user-secret
+
+ user-times
+
+ users
+
+ video-camera
+
+ volume-down
+
+ volume-off
+
+ volume-up
+
+ warning + (alias) +
+
+ wheelchair
+
+ wifi
+
+ wrench
+
+
+
+ +
+
+ hand-grab-o + (alias) +
+
+ hand-lizard-o
+
+ hand-o-down
+
+ hand-o-left
+
+ hand-o-right
+
+ hand-o-up
+
+ hand-paper-o
+
+ hand-peace-o
+
+ hand-pointer-o
+
+ hand-rock-o
+
+ hand-scissors-o
+
+ hand-spock-o
+
+ hand-stop-o + (alias) +
+
+ thumbs-down
+
+ thumbs-o-down
+
+ thumbs-o-up
+
+ thumbs-up
+
+
+
+ +
+
+ ambulance
+
+ automobile + (alias) +
+
+ bicycle
+
+ bus
+
+ cab + (alias) +
+
+ car
+
+ fighter-jet
+
+ motorcycle
+
+ plane
+
+ rocket
+
+ ship
+
+ space-shuttle
+
+ subway
+
+ taxi
+
+ train
+
+ truck
+
+ wheelchair
+
+
+
+ +
+
+ genderless
+
+ intersex + (alias) +
+
+ mars
+
+ mars-double
+
+ mars-stroke
+
+ mars-stroke-h
+
+ mars-stroke-v
+
+ mercury
+
+ neuter
+
+ transgender
+
+ transgender-alt
+
+ venus
+
+ venus-double
+
+ venus-mars
+
+
+
+ +
+
+ file
+
+ file-archive-o
+
+ file-audio-o
+
+ file-code-o
+
+ file-excel-o
+
+ file-image-o
+
+ file-movie-o + (alias) +
+
+ file-o
+
+ file-pdf-o
+
+ file-photo-o + (alias) +
+
+ file-picture-o + (alias) +
+
+ file-powerpoint-o
+
+ file-sound-o + (alias) +
+
+ file-text
+
+ file-text-o
+
+ file-video-o
+
+ file-word-o
+
+ file-zip-o + (alias) +
+
+
+
+ +
+
    +
  • + These icons work great with the fa-spin class. Check out the spinning icons example.
  • +
+
+
+
+ circle-o-notch
+
+ cog
+
+ gear + (alias) +
+
+ refresh
+
+ spinner
+
+
+
+ +
+
+ check-square
+
+ check-square-o
+
+ circle
+
+ circle-o
+
+ dot-circle-o
+
+ minus-square
+
+ minus-square-o
+
+ plus-square
+
+ plus-square-o
+
+ square
+
+ square-o
+
+
+
+ +
+
+ cc-amex
+
+ cc-diners-club
+
+ cc-discover
+
+ cc-jcb
+
+ cc-mastercard
+
+ cc-paypal
+
+ cc-stripe
+
+ cc-visa
+
+ credit-card
+
+ google-wallet
+
+ paypal
+
+
+
+ +
+
+ area-chart
+
+ bar-chart
+
+ bar-chart-o + (alias) +
+
+ line-chart
+
+ pie-chart
+
+
+
+ +
+
+ bitcoin + (alias) +
+
+ btc
+
+ cny + (alias) +
+
+ dollar + (alias) +
+
+ eur
+
+ euro + (alias) +
+
+ gbp
+
+ gg
+
+ gg-circle
+
+ ils
+
+ inr
+
+ jpy
+
+ krw
+
+ money
+
+ rmb + (alias) +
+
+ rouble + (alias) +
+
+ rub
+
+ ruble + (alias) +
+
+ rupee + (alias) +
+
+ shekel + (alias) +
+
+ sheqel + (alias) +
+
+ try
+
+ turkish-lira + (alias) +
+
+ usd
+
+ won + (alias) +
+
+ yen + (alias) +
+
+
+
+ +
+
+ align-center
+
+ align-justify
+
+ align-left
+
+ align-right
+
+ bold
+
+ chain + (alias) +
+
+ chain-broken
+
+ clipboard
+
+ columns
+
+ copy + (alias) +
+
+ cut + (alias) +
+
+ dedent + (alias) +
+
+ eraser
+
+ file
+
+ file-o
+
+ file-text
+
+ file-text-o
+
+ files-o
+
+ floppy-o
+
+ font
+
+ header
+
+ indent
+
+ italic
+
+ link
+
+ list
+
+ list-alt
+
+ list-ol
+
+ list-ul
+
+ outdent
+
+ paperclip
+
+ paragraph
+
+ paste + (alias) +
+
+ repeat
+
+ rotate-left + (alias) +
+
+ rotate-right + (alias) +
+
+ save + (alias) +
+
+ scissors
+
+ strikethrough
+
+ subscript
+
+ superscript
+
+ table
+
+ text-height
+
+ text-width
+
+ th
+
+ th-large
+
+ th-list
+
+ underline
+
+ undo
+
+ unlink + (alias) +
+
+
+
+ +
+
+ angle-double-down
+
+ angle-double-left
+
+ angle-double-right
+
+ angle-double-up
+
+ angle-down
+
+ angle-left
+
+ angle-right
+
+ angle-up
+
+ arrow-circle-down
+
+ arrow-circle-left
+
+ arrow-circle-o-down
+
+ arrow-circle-o-left
+
+ arrow-circle-o-right
+
+ arrow-circle-o-up
+
+ arrow-circle-right
+
+ arrow-circle-up
+
+ arrow-down
+
+ arrow-left
+
+ arrow-right
+
+ arrow-up
+
+ arrows
+
+ arrows-alt
+
+ arrows-h
+
+ arrows-v
+
+ caret-down
+
+ caret-left
+
+ caret-right
+
+ caret-square-o-down
+
+ caret-square-o-left
+
+ caret-square-o-right
+
+ caret-square-o-up
+
+ caret-up
+
+ chevron-circle-down
+
+ chevron-circle-left
+
+ chevron-circle-right
+
+ chevron-circle-up
+
+ chevron-down
+
+ chevron-left
+
+ chevron-right
+
+ chevron-up
+
+ exchange
+
+ hand-o-down
+
+ hand-o-left
+
+ hand-o-right
+
+ hand-o-up
+
+ long-arrow-down
+
+ long-arrow-left
+
+ long-arrow-right
+
+ long-arrow-up
+
+ toggle-down + (alias) +
+
+ toggle-left + (alias) +
+
+ toggle-right + (alias) +
+
+ toggle-up + (alias) +
+
+
+
+ +
+
+ arrows-alt
+
+ backward
+
+ compress
+
+ eject
+
+ expand
+
+ fast-backward
+
+ fast-forward
+
+ forward
+
+ pause
+
+ play
+
+ play-circle
+
+ play-circle-o
+
+ random
+
+ step-backward
+
+ step-forward
+
+ stop
+
+ youtube-play
+
+
+
+ +
+

+ Warning!

Apparently, Adblock Plus can remove Font Awesome brand icons with their "Remove Social Media Buttons" setting. We will not use hacks to force them to display. Please report an issue + with Adblock Plus if you believe this to be an error. To work around this, you'll need to modify the social icon class names.
+
+
+ 500px
+
+ adn
+
+ amazon
+
+ android
+
+ angellist
+
+ apple
+
+ behance
+
+ behance-square
+
+ bitbucket
+
+ bitbucket-square
+
+ bitcoin + (alias) +
+
+ black-tie
+
+ btc
+
+ buysellads
+
+ cc-amex
+
+ cc-diners-club
+
+ cc-discover
+
+ cc-jcb
+
+ cc-mastercard
+
+ cc-paypal
+
+ cc-stripe
+
+ cc-visa
+
+ chrome
+
+ codepen
+
+ connectdevelop
+
+ contao
+
+ css3
+
+ dashcube
+
+ delicious
+
+ deviantart
+
+ digg
+
+ dribbble
+
+ dropbox
+
+ drupal
+
+ empire
+
+ expeditedssl
+
+ facebook
+
+ facebook-f + (alias) +
+
+ facebook-official
+
+ facebook-square
+
+ firefox
+
+ flickr
+
+ fonticons
+
+ forumbee
+
+ foursquare
+
+ ge + (alias) +
+
+ get-pocket
+
+ gg
+
+ gg-circle
+
+ git
+
+ git-square
+
+ github
+
+ github-alt
+
+ github-square
+
+ gittip + (alias) +
+
+ google
+
+ google-plus
+
+ google-plus-square
+
+ google-wallet
+
+ gratipay
+
+ hacker-news
+
+ houzz
+
+ html5
+
+ instagram
+
+ internet-explorer
+
+ ioxhost
+
+ joomla
+
+ jsfiddle
+
+ lastfm
+
+ lastfm-square
+
+ leanpub
+
+ linkedin
+
+ linkedin-square
+
+ linux
+
+ maxcdn
+
+ meanpath
+
+ medium
+
+ odnoklassniki
+
+ odnoklassniki-square
+
+ opencart
+
+ openid
+
+ opera
+
+ optin-monster
+
+ pagelines
+
+ paypal
+
+ pied-piper
+
+ pied-piper-alt
+
+ pinterest
+
+ pinterest-p
+
+ pinterest-square
+
+ qq
+
+ ra + (alias) +
+
+ rebel
+
+ reddit
+
+ reddit-square
+
+ renren
+
+ safari
+
+ sellsy
+
+ share-alt
+
+ share-alt-square
+
+ shirtsinbulk
+
+ simplybuilt
+
+ skyatlas
+
+ skype
+
+ slack
+
+ slideshare
+
+ soundcloud
+
+ spotify
+
+ stack-exchange
+
+ stack-overflow
+
+ steam
+
+ steam-square
+
+ stumbleupon
+
+ stumbleupon-circle
+
+ tencent-weibo
+
+ trello
+
+ tripadvisor
+
+ tumblr
+
+ tumblr-square
+
+ twitch
+
+ twitter
+
+ twitter-square
+
+ viacoin
+
+ vimeo
+
+ vimeo-square
+
+ vine
+
+ vk
+
+ wechat + (alias) +
+
+ weibo
+
+ weixin
+
+ whatsapp
+
+ wikipedia-w
+
+ windows
+
+ wordpress
+
+ xing
+
+ xing-square
+
+ y-combinator
+
+ y-combinator-square + (alias) +
+
+ yahoo
+
+ yc + (alias) +
+
+ yc-square + (alias) +
+
+ yelp
+
+ youtube
+
+ youtube-play
+
+ youtube-square
+
+
+
    +
  • All brand icons are trademarks of their respective owners.
  • +
  • The use of these trademarks does not indicate endorsement of the trademark holder by Font Awesome, nor vice versa.
  • +
+
+
+
+ +
+
+ ambulance
+
+ h-square
+
+ heart
+
+ heart-o
+
+ heartbeat
+
+ hospital-o
+
+ medkit
+
+ plus-square
+
+ stethoscope
+
+ user-md
+
+ wheelchair
+
+
+
+
+
+

Includes 200 glyphs in font format from the Glyphicon Halflings set. + Glyphicons Halflings are normally not available for free, but their creator has made them available for Bootstrap free of cost.

For more info check out + http://getbootstrap.com/components/#glyphicons +
+
    +
  • + + glyphicon glyphicon-asterisk +
  • +
  • + + glyphicon glyphicon-plus +
  • +
  • + + glyphicon glyphicon-euro +
  • +
  • + + glyphicon glyphicon-minus +
  • +
  • + + glyphicon glyphicon-cloud +
  • +
  • + + glyphicon glyphicon-envelope +
  • +
  • + + glyphicon glyphicon-pencil +
  • +
  • + + glyphicon glyphicon-glass +
  • +
  • + + glyphicon glyphicon-music +
  • +
  • + + glyphicon glyphicon-search +
  • +
  • + + glyphicon glyphicon-heart +
  • +
  • + + glyphicon glyphicon-star +
  • +
  • + + glyphicon glyphicon-star-empty +
  • +
  • + + glyphicon glyphicon-user +
  • +
  • + + glyphicon glyphicon-film +
  • +
  • + + glyphicon glyphicon-th-large +
  • +
  • + + glyphicon glyphicon-th +
  • +
  • + + glyphicon glyphicon-th-list +
  • +
  • + + glyphicon glyphicon-ok +
  • +
  • + + glyphicon glyphicon-remove +
  • +
  • + + glyphicon glyphicon-zoom-in +
  • +
  • + + glyphicon glyphicon-zoom-out +
  • +
  • + + glyphicon glyphicon-off +
  • +
  • + + glyphicon glyphicon-signal +
  • +
  • + + glyphicon glyphicon-cog +
  • +
  • + + glyphicon glyphicon-trash +
  • +
  • + + glyphicon glyphicon-home +
  • +
  • + + glyphicon glyphicon-file +
  • +
  • + + glyphicon glyphicon-time +
  • +
  • + + glyphicon glyphicon-road +
  • +
  • + + glyphicon glyphicon-download-alt +
  • +
  • + + glyphicon glyphicon-download +
  • +
  • + + glyphicon glyphicon-upload +
  • +
  • + + glyphicon glyphicon-inbox +
  • +
  • + + glyphicon glyphicon-play-circle +
  • +
  • + + glyphicon glyphicon-repeat +
  • +
  • + + glyphicon glyphicon-refresh +
  • +
  • + + glyphicon glyphicon-list-alt +
  • +
  • + + glyphicon glyphicon-lock +
  • +
  • + + glyphicon glyphicon-flag +
  • +
  • + + glyphicon glyphicon-headphones +
  • +
  • + + glyphicon glyphicon-volume-off +
  • +
  • + + glyphicon glyphicon-volume-down +
  • +
  • + + glyphicon glyphicon-volume-up +
  • +
  • + + glyphicon glyphicon-qrcode +
  • +
  • + + glyphicon glyphicon-barcode +
  • +
  • + + glyphicon glyphicon-tag +
  • +
  • + + glyphicon glyphicon-tags +
  • +
  • + + glyphicon glyphicon-book +
  • +
  • + + glyphicon glyphicon-bookmark +
  • +
  • + + glyphicon glyphicon-print +
  • +
  • + + glyphicon glyphicon-camera +
  • +
  • + + glyphicon glyphicon-font +
  • +
  • + + glyphicon glyphicon-bold +
  • +
  • + + glyphicon glyphicon-italic +
  • +
  • + + glyphicon glyphicon-text-height +
  • +
  • + + glyphicon glyphicon-text-width +
  • +
  • + + glyphicon glyphicon-align-left +
  • +
  • + + glyphicon glyphicon-align-center +
  • +
  • + + glyphicon glyphicon-align-right +
  • +
  • + + glyphicon glyphicon-align-justify +
  • +
  • + + glyphicon glyphicon-list +
  • +
  • + + glyphicon glyphicon-indent-left +
  • +
  • + + glyphicon glyphicon-indent-right +
  • +
  • + + glyphicon glyphicon-facetime-video +
  • +
  • + + glyphicon glyphicon-picture +
  • +
  • + + glyphicon glyphicon-map-marker +
  • +
  • + + glyphicon glyphicon-adjust +
  • +
  • + + glyphicon glyphicon-tint +
  • +
  • + + glyphicon glyphicon-edit +
  • +
  • + + glyphicon glyphicon-share +
  • +
  • + + glyphicon glyphicon-check +
  • +
  • + + glyphicon glyphicon-move +
  • +
  • + + glyphicon glyphicon-step-backward +
  • +
  • + + glyphicon glyphicon-fast-backward +
  • +
  • + + glyphicon glyphicon-backward +
  • +
  • + + glyphicon glyphicon-play +
  • +
  • + + glyphicon glyphicon-pause +
  • +
  • + + glyphicon glyphicon-stop +
  • +
  • + + glyphicon glyphicon-forward +
  • +
  • + + glyphicon glyphicon-fast-forward +
  • +
  • + + glyphicon glyphicon-step-forward +
  • +
  • + + glyphicon glyphicon-eject +
  • +
  • + + glyphicon glyphicon-chevron-left +
  • +
  • + + glyphicon glyphicon-chevron-right +
  • +
  • + + glyphicon glyphicon-plus-sign +
  • +
  • + + glyphicon glyphicon-minus-sign +
  • +
  • + + glyphicon glyphicon-remove-sign +
  • +
  • + + glyphicon glyphicon-ok-sign +
  • +
  • + + glyphicon glyphicon-question-sign +
  • +
  • + + glyphicon glyphicon-info-sign +
  • +
  • + + glyphicon glyphicon-screenshot +
  • +
  • + + glyphicon glyphicon-remove-circle +
  • +
  • + + glyphicon glyphicon-ok-circle +
  • +
  • + + glyphicon glyphicon-ban-circle +
  • +
  • + + glyphicon glyphicon-arrow-left +
  • +
  • + + glyphicon glyphicon-arrow-right +
  • +
  • + + glyphicon glyphicon-arrow-up +
  • +
  • + + glyphicon glyphicon-arrow-down +
  • +
  • + + glyphicon glyphicon-share-alt +
  • +
  • + + glyphicon glyphicon-resize-full +
  • +
  • + + glyphicon glyphicon-resize-small +
  • +
  • + + glyphicon glyphicon-exclamation-sign +
  • +
  • + + glyphicon glyphicon-gift +
  • +
  • + + glyphicon glyphicon-leaf +
  • +
  • + + glyphicon glyphicon-fire +
  • +
  • + + glyphicon glyphicon-eye-open +
  • +
  • + + glyphicon glyphicon-eye-close +
  • +
  • + + glyphicon glyphicon-warning-sign +
  • +
  • + + glyphicon glyphicon-plane +
  • +
  • + + glyphicon glyphicon-calendar +
  • +
  • + + glyphicon glyphicon-random +
  • +
  • + + glyphicon glyphicon-comment +
  • +
  • + + glyphicon glyphicon-magnet +
  • +
  • + + glyphicon glyphicon-chevron-up +
  • +
  • + + glyphicon glyphicon-chevron-down +
  • +
  • + + glyphicon glyphicon-retweet +
  • +
  • + + glyphicon glyphicon-shopping-cart +
  • +
  • + + glyphicon glyphicon-folder-close +
  • +
  • + + glyphicon glyphicon-folder-open +
  • +
  • + + glyphicon glyphicon-resize-vertical +
  • +
  • + + glyphicon glyphicon-resize-horizontal +
  • +
  • + + glyphicon glyphicon-hdd +
  • +
  • + + glyphicon glyphicon-bullhorn +
  • +
  • + + glyphicon glyphicon-bell +
  • +
  • + + glyphicon glyphicon-certificate +
  • +
  • + + glyphicon glyphicon-thumbs-up +
  • +
  • + + glyphicon glyphicon-thumbs-down +
  • +
  • + + glyphicon glyphicon-hand-right +
  • +
  • + + glyphicon glyphicon-hand-left +
  • +
  • + + glyphicon glyphicon-hand-up +
  • +
  • + + glyphicon glyphicon-hand-down +
  • +
  • + + glyphicon glyphicon-circle-arrow-right +
  • +
  • + + glyphicon glyphicon-circle-arrow-left +
  • +
  • + + glyphicon glyphicon-circle-arrow-up +
  • +
  • + + glyphicon glyphicon-circle-arrow-down +
  • +
  • + + glyphicon glyphicon-globe +
  • +
  • + + glyphicon glyphicon-wrench +
  • +
  • + + glyphicon glyphicon-tasks +
  • +
  • + + glyphicon glyphicon-filter +
  • +
  • + + glyphicon glyphicon-briefcase +
  • +
  • + + glyphicon glyphicon-fullscreen +
  • +
  • + + glyphicon glyphicon-dashboard +
  • +
  • + + glyphicon glyphicon-paperclip +
  • +
  • + + glyphicon glyphicon-heart-empty +
  • +
  • + + glyphicon glyphicon-link +
  • +
  • + + glyphicon glyphicon-phone +
  • +
  • + + glyphicon glyphicon-pushpin +
  • +
  • + + glyphicon glyphicon-usd +
  • +
  • + + glyphicon glyphicon-gbp +
  • +
  • + + glyphicon glyphicon-sort +
  • +
  • + + glyphicon glyphicon-sort-by-alphabet +
  • +
  • + + glyphicon glyphicon-sort-by-alphabet-alt +
  • +
  • + + glyphicon glyphicon-sort-by-order +
  • +
  • + + glyphicon glyphicon-sort-by-order-alt +
  • +
  • + + glyphicon glyphicon-sort-by-attributes +
  • +
  • + + glyphicon glyphicon-sort-by-attributes-alt +
  • +
  • + + glyphicon glyphicon-unchecked +
  • +
  • + + glyphicon glyphicon-expand +
  • +
  • + + glyphicon glyphicon-collapse-down +
  • +
  • + + glyphicon glyphicon-collapse-up +
  • +
  • + + glyphicon glyphicon-log-in +
  • +
  • + + glyphicon glyphicon-flash +
  • +
  • + + glyphicon glyphicon-log-out +
  • +
  • + + glyphicon glyphicon-new-window +
  • +
  • + + glyphicon glyphicon-record +
  • +
  • + + glyphicon glyphicon-save +
  • +
  • + + glyphicon glyphicon-open +
  • +
  • + + glyphicon glyphicon-saved +
  • +
  • + + glyphicon glyphicon-import +
  • +
  • + + glyphicon glyphicon-export +
  • +
  • + + glyphicon glyphicon-send +
  • +
  • + + glyphicon glyphicon-floppy-disk +
  • +
  • + + glyphicon glyphicon-floppy-saved +
  • +
  • + + glyphicon glyphicon-floppy-remove +
  • +
  • + + glyphicon glyphicon-floppy-save +
  • +
  • + + glyphicon glyphicon-floppy-open +
  • +
  • + + glyphicon glyphicon-credit-card +
  • +
  • + + glyphicon glyphicon-transfer +
  • +
  • + + glyphicon glyphicon-cutlery +
  • +
  • + + glyphicon glyphicon-header +
  • +
  • + + glyphicon glyphicon-compressed +
  • +
  • + + glyphicon glyphicon-earphone +
  • +
  • + + glyphicon glyphicon-phone-alt +
  • +
  • + + glyphicon glyphicon-tower +
  • +
  • + + glyphicon glyphicon-stats +
  • +
  • + + glyphicon glyphicon-sd-video +
  • +
  • + + glyphicon glyphicon-hd-video +
  • +
  • + + glyphicon glyphicon-subtitles +
  • +
  • + + glyphicon glyphicon-sound-stereo +
  • +
  • + + glyphicon glyphicon-sound-dolby +
  • +
  • + + glyphicon glyphicon-sound-5-1 +
  • +
  • + + glyphicon glyphicon-sound-6-1 +
  • +
  • + + glyphicon glyphicon-sound-7-1 +
  • +
  • + + glyphicon glyphicon-copyright-mark +
  • +
  • + + glyphicon glyphicon-registration-mark +
  • +
  • + + glyphicon glyphicon-cloud-download +
  • +
  • + + glyphicon glyphicon-cloud-upload +
  • +
  • + + glyphicon glyphicon-tree-conifer +
  • +
  • + + glyphicon glyphicon-tree-deciduous +
  • +
+
+
+
+

Simple Line Icons. 162 Beautifully Crafted Webfont Icons. +
For more info check out + http://graphicburger.com/simple-line-icons-webfont/ +

+
+
+ + +  icon-user + + + +  icon-user-female + + + +  icon-users + + + +  icon-user-follow + + + +  icon-user-following + + + +  icon-user-unfollow + + + +  icon-trophy + + + +  icon-speedometer + + + +  icon-social-youtube + + + +  icon-social-twitter + + + +  icon-social-tumblr + + + +  icon-social-facebook + + + +  icon-social-dropbox + + + +  icon-social-dribbble + + + +  icon-shield + + + +  icon-screen-tablet + + + +  icon-screen-smartphone + + + +  icon-screen-desktop + + + +  icon-plane + + + +  icon-notebook + + + +  icon-moustache + + + +  icon-mouse + + + +  icon-magnet + + + +  icon-magic-wand + + + +  icon-hourglass + + + +  icon-graduation + + + +  icon-ghost + + + +  icon-game-controller + + + +  icon-fire + + + +  icon-eyeglasses + + + +  icon-envelope-open + + + +  icon-envelope-letter + + + +  icon-energy + + + +  icon-emoticon-smile + + + +  icon-disc + + + +  icon-cursor-move + + + +  icon-crop + + + +  icon-credit-card + + + +  icon-chemistry + + + +  icon-bell + + + +  icon-badge + + + +  icon-anchor + + + +  icon-action-redo + + + +  icon-action-undo + + + +  icon-bag + + + +  icon-basket + + + +  icon-basket-loaded + + + +  icon-book-open + + + +  icon-briefcase + + + +  icon-bubbles + + + +  icon-calculator + + + +  icon-call-end + + + +  icon-call-in + + + +  icon-call-out + + + +  icon-compass + + + +  icon-cup + + + +  icon-diamond + + + +  icon-direction + + + +  icon-directions + + + +  icon-docs + + + +  icon-drawer + + + +  icon-drop + + + +  icon-earphones + + + +  icon-earphones-alt + + + +  icon-feed + + + +  icon-film + + + +  icon-folder-alt + + + +  icon-frame + + + +  icon-globe + + + +  icon-globe-alt + + + +  icon-handbag + + + +  icon-layers + + + +  icon-map + + + +  icon-picture + + + +  icon-pin + + + +  icon-playlist + + + +  icon-present + + + +  icon-printer + + + +  icon-puzzle + + + +  icon-speech + + + +  icon-vector + + + +  icon-wallet + + + +  icon-arrow-down + + + +  icon-arrow-left + + + +  icon-arrow-right + + + +  icon-arrow-up + + + +  icon-bar-chart + + + +  icon-bulb + + + +  icon-calendar + + + +  icon-control-end + + + +  icon-control-forward + + + +  icon-control-pause + + + +  icon-control-play + + + +  icon-control-rewind + + + +  icon-control-start + + + +  icon-cursor + + + +  icon-dislike + + + +  icon-equalizer + + + +  icon-graph + + + +  icon-grid + + + +  icon-home + + + +  icon-like + + + +  icon-list + + + +  icon-login + + + +  icon-logout + + + +  icon-loop + + + +  icon-microphone + + + +  icon-music-tone + + + +  icon-music-tone-alt + + + +  icon-note + + + +  icon-pencil + + + +  icon-pie-chart + + + +  icon-question + + + +  icon-rocket + + + +  icon-share + + + +  icon-share-alt + + + +  icon-shuffle + + + +  icon-size-actual + + + +  icon-size-fullscreen + + + +  icon-support + + + +  icon-tag + + + +  icon-trash + + + +  icon-umbrella + + + +  icon-wrench + + + +  icon-ban + + + +  icon-bubble + + + +  icon-camcorder + + + +  icon-camera + + + +  icon-check + + + +  icon-clock + + + +  icon-close + + + +  icon-cloud-download + + + +  icon-cloud-upload + + + +  icon-doc + + + +  icon-envelope + + + +  icon-eye + + + +  icon-flag + + + +  icon-folder + + + +  icon-heart + + + +  icon-info + + + +  icon-key + + + +  icon-link + + + +  icon-lock + + + +  icon-lock-open + + + +  icon-magnifier + + + +  icon-magnifier-add + + + +  icon-magnifier-remove + + + +  icon-paper-clip + + + +  icon-paper-plane + + + +  icon-plus + + + +  icon-pointer + + + +  icon-power + + + +  icon-refresh + + + +  icon-reload + + + +  icon-settings + + + +  icon-star + + + +  icon-symbol-female + + + +  icon-symbol-male + + + +  icon-target + + + +  icon-volume-1 + + + +  icon-volume-2 + + + +  icon-volume-off + +
+
+
+ + \ No newline at end of file diff --git a/templates/pc/member/default/common/index.html b/templates/pc/member/default/common/index.html new file mode 100644 index 0000000..cf86faa --- /dev/null +++ b/templates/pc/member/default/common/index.html @@ -0,0 +1,182 @@ +{template "nheader.html"} + + +{if $member.groupid==1} + {if $regverify == 1} +
+ 您的账号还未进行邮件审核,如果长时间未收到邮件,建议重发邮件 +
+ {else if $regverify == 3} +
+

 输入短信验证码审核账号

+
+
+ + +
+ + + + +
+
+ + {else} +
+ 您的账号还未审核通过,请等待系统审核 +
+ {/if} +{/if} +
+
+ +
+ +
+ +
+ +
+ + +
+
{$member.username}
+
{dr_show_stars($member.levelstars)}
+
+ + + + + + + +
+ +
+ + +
+
+
+
+ +
+
    + {php $mm=array('index', 'member' ,'module', 'app');} + {php $table = $ci->db->dbprefix.'member_notice_'.(int)$member['tableid'];} + {php $sql = "select * from `".$table."` where uid=".$member['uid']." order by inputtime desc limit 4";} + {list action=sql sql='$sql'} +
  • +
    +
    +
    +
    + +
    +
    +
    +
    {$t.content}
    +
    +
    +
    +
    +
    {dr_fdate($t.inputtime, 'm-d')}
    +
    +
  • + {/list} +
+
+
+
+
+
+
+
+ +
+
    + {list action=sql sql='select * from @#member_login where uid=$uid order by logintime desc limit 4'} + +
  • +
    + {dr_date($t.logintime, NULL, 'red')} + + {$ci->dip->address($t.loginip)} + + {dr_strcut($t.useragent, 60)} +
    +
  • + {/list} +
+
+
+
+
+
+ +
+
+ + +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/common/left.html b/templates/pc/member/default/common/left.html new file mode 100644 index 0000000..77fba04 --- /dev/null +++ b/templates/pc/member/default/common/left.html @@ -0,0 +1,59 @@ +
首页 > 会员中心 {if $meta_name != '会员中心'}> {$meta_name}{/if}
+ + \ No newline at end of file diff --git a/templates/pc/member/default/common/login.html b/templates/pc/member/default/common/login.html new file mode 100644 index 0000000..330074c --- /dev/null +++ b/templates/pc/member/default/common/login.html @@ -0,0 +1,152 @@ + + + + + + + + + + {$meta_title} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + diff --git a/templates/pc/member/default/common/login_ajax.html b/templates/pc/member/default/common/login_ajax.html new file mode 100644 index 0000000..c3ebe24 --- /dev/null +++ b/templates/pc/member/default/common/login_ajax.html @@ -0,0 +1,69 @@ + + + +{$meta_name}-{SITE_NAME} + + + + + + + + + + + + + + +{if $login} + +{$login} +{else} + + + +{/if} + + \ No newline at end of file diff --git a/templates/pc/member/default/common/mform_edit.html b/templates/pc/member/default/common/mform_edit.html new file mode 100644 index 0000000..76485a5 --- /dev/null +++ b/templates/pc/member/default/common/mform_edit.html @@ -0,0 +1,32 @@ +{template "nheader.html"} + +
+
+ + +
+
+ {$myfield} +
+ +
+
+
+ +
+
+
+ +
+ + +
+
+ +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/common/mform_index.html b/templates/pc/member/default/common/mform_index.html new file mode 100644 index 0000000..46108aa --- /dev/null +++ b/templates/pc/member/default/common/mform_index.html @@ -0,0 +1,126 @@ +{template "nheader.html"} + + + +
+
+ +
+
+
+ + + + + +
+
+ +
+
+ +
+ +
+
+
+ +
+ + + + + + + + + + + {loop $list $t} + + + + + + {/loop} + +
主题发布时间
{dr_keyword_highlight($t.subject, $get.kw)}
{dr_date($t.inputtime, '', 'red')} + 查看 + {if $isedit} + 修改 + + 删除 + {/if} +
+ +
+ +
+ + +
+
+ +
+
+ +
+
+ +{if IS_MOBILE} +
+ 左右滑动表格可以查看更多的内容 +
+{/if} +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/common/mform_show.html b/templates/pc/member/default/common/mform_show.html new file mode 100644 index 0000000..fcbca37 --- /dev/null +++ b/templates/pc/member/default/common/mform_show.html @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
发布者:{$data.author}
发布时间:{$data.inputtime}
对应文档:{$data.title}
文档地址:{$data.url}
主题:{$data.subject}
友情提示:由于表单字段都是用户自定义,因此Fc不能固定调用模板,此模板仅作为参考 +
此表单新模板地址:{$tpl} +
\ No newline at end of file diff --git a/templates/pc/member/default/common/module_add.html b/templates/pc/member/default/common/module_add.html new file mode 100644 index 0000000..36ef011 --- /dev/null +++ b/templates/pc/member/default/common/module_add.html @@ -0,0 +1,161 @@ +{template "nheader.html"} + +
+
+ + +
+ + + +
+
+
+
{fc_lang('基本内容')}
+ {if $draft_list} +
+
+ + +
+
+ {/if} +
+
+ {if !$isedit} +
+ +
+ +
+
+ {else} +
+ +
+
{dr_catpos($catid, '  >  ', FALSE)}
+
+
+ {/if} + {$myfield} +
+ + +
+
+
+
+
+ + +
+ {if !$data.id && $ci->get_cache('module-'.SITE_ID.'-'.APP_DIR, 'setting', 'syn2')} +
+ + +
+ {/if} +
+
+ +
+ + +
+
+ +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/common/module_back_edit.html b/templates/pc/member/default/common/module_back_edit.html new file mode 100644 index 0000000..369444d --- /dev/null +++ b/templates/pc/member/default/common/module_back_edit.html @@ -0,0 +1,75 @@ +{template "nheader.html"} + +
+
+ + +
+ + +
+ +
+
+
{fc_lang('基本内容')}
+
+
+ {if !$isedit} +
+ +
+ +
+
+ {/if} + {$myfield} +
+ +
+
{$data['backinfo']['author']} ({$data['backinfo']['rolename']})
+
+
+
+ +
+
{dr_date($data['backinfo']['optiontime'], NULL, 'red')}
+
+
+
+ +
+
{$data['backinfo']['backcontent']}
+
+
+
+ +
+
+
+ +
+
+
+
+
+ + +
+ + +
+
+ +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/common/module_back_index.html b/templates/pc/member/default/common/module_back_index.html new file mode 100644 index 0000000..17530b9 --- /dev/null +++ b/templates/pc/member/default/common/module_back_index.html @@ -0,0 +1,109 @@ +{template nheader.html} + + +
+
+ +
+ + +
+ +
+ + + + + + + + + + + {loop $list $t} + {php $c=dr_string2array($t['content']);$back=dr_string2array($t['backinfo']);} + + + + + + + {/loop} + + + + + +
 主题提交时间
{$c['title']}
{dr_date($t['inputtime'], '', 'red')} + 预览 + 修改/查看 +
+
+
+ +
+
+   +
+
+
+ +
+
+
+ + +
+
+ + +
+
+ +
+
+ +{if IS_MOBILE} +
+ 左右滑动表格可以查看更多的内容 +
+{/if} +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/common/module_buy_index.html b/templates/pc/member/default/common/module_buy_index.html new file mode 100644 index 0000000..06e2ee1 --- /dev/null +++ b/templates/pc/member/default/common/module_buy_index.html @@ -0,0 +1,87 @@ +{template nheader.html} + + +
+
+ +
+ + +
+ +
+ + + + + + + + + + {loop $list $t} + + + + + + {/loop} + +
主题{SITE_SCORE}购买时间
{$t.title}{$t.score}{dr_date($t.inputtime, '', 'red')}
+ +
+
+
+ + +
+
+ +
+
+ +
+
+ +{if IS_MOBILE} +
+ 左右滑动表格可以查看更多的内容 +
+{/if} +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/common/module_draft_index.html b/templates/pc/member/default/common/module_draft_index.html new file mode 100644 index 0000000..20caf53 --- /dev/null +++ b/templates/pc/member/default/common/module_draft_index.html @@ -0,0 +1,123 @@ +{template nheader.html} + + +
+
+ +
+ + +
+ +
+ + + + + + + + + + + + {loop $list $t} + $t.cid, 'catid'=>$t.catid, 'did'=>$t.id)); + } else { + $url=dr_member_url(APP_DIR.'/extend/edit',array('cid'=>$t.cid, 'catid'=>$t.catid, 'id'=>$t.eid, 'did'=>$t.id)); + } + $gurl=SITE_URL.'index.php?s='.APP_DIR.'&c=extend&type=draft&id='.$t['id']; + } else { + $title=$c.title; + if ($t.cid) { + $url=dr_member_url(APP_DIR.'/home/edit',array('id'=>$t.cid, 'did'=>$t.id)); + } else { + $url=dr_member_url(APP_DIR.'/home/add',array('did'=>$t.id)); + } + $gurl=SITE_URL.'index.php?s='.APP_DIR.'&c=show&type=draft&id='.$t['id']; + } + ?> + + + + + + + + {/loop} + + + + + +
 主题栏目录入时间
{$title}{CATEGORY.$t[catid].name}{dr_date($t.inputtime, '', 'red')} + 预览 + 发布
+
+
+ +
+
+   +
+
+
+
+
+
+ + +
+
+ + +
+
+ +
+
+ +{if IS_MOBILE} +
+ 左右滑动表格可以查看更多的内容 +
+{/if} +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/common/module_extend_add.html b/templates/pc/member/default/common/module_extend_add.html new file mode 100644 index 0000000..653cc70 --- /dev/null +++ b/templates/pc/member/default/common/module_extend_add.html @@ -0,0 +1,138 @@ +{template "nheader.html"} + +
+
+ + +
+ + + +
+ +
+
+
{fc_lang('基本内容')}
+
+ {if $draft_list} +
+
+ + +
+
+ {/if} +
+
+ {$myfield} +
+ +
+
+
+ + +
+ {if !$data.id && $ci->get_cache('module-'.SITE_ID.'-'.APP_DIR, 'setting', 'syn2')} +
+ + + +
+ {/if} +
+
+
+
+ + + + + +
+ + +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/common/module_extend_back_edit.html b/templates/pc/member/default/common/module_extend_back_edit.html new file mode 100644 index 0000000..ec0bf3c --- /dev/null +++ b/templates/pc/member/default/common/module_extend_back_edit.html @@ -0,0 +1,62 @@ +{template "nheader.html"} + +
+
+ + +
+ + +
+ +
+
+
{fc_lang('基本内容')}
+
+
+ {$myfield} +
+ +
+
{$data['backinfo']['author']} ({$data['backinfo']['rolename']})
+
+
+
+ +
+
{dr_date($data['backinfo']['optiontime'], NULL, 'red')}
+
+
+
+ +
+
{$data['backinfo']['backcontent']}
+
+
+
+ +
+
+
+ +
+
+
+
+
+ + +
+ + +
+
+ +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/common/module_extend_back_index.html b/templates/pc/member/default/common/module_extend_back_index.html new file mode 100644 index 0000000..b8d8488 --- /dev/null +++ b/templates/pc/member/default/common/module_extend_back_index.html @@ -0,0 +1,110 @@ +{template nheader.html} + + +
+
+ +
+ + +
+ +
+ + + + + + + + + + + + {loop $list $t} + {php $c=dr_string2array($t['content']);$back=dr_string2array($t['backinfo']);} + + + + + + + + {/loop} + + + + + +
 {fc_lang('名称')}{fc_lang('名称')}提交时间
{$c['name']}
{$c['title']}
{dr_date($t['inputtime'], '', 'red')} + 预览 + 修改/查看 +
+
+
+ +
+
+   +
+
+
+ +
+
+
+ + +
+
+ +
+
+ +
+
+ +{if IS_MOBILE} +
+ 左右滑动表格可以查看更多的内容 +
+{/if} +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/common/module_extend_buy_index.html b/templates/pc/member/default/common/module_extend_buy_index.html new file mode 100644 index 0000000..ff5d8f6 --- /dev/null +++ b/templates/pc/member/default/common/module_extend_buy_index.html @@ -0,0 +1,53 @@ +{template nheader.html} + +
+
+ +
+ + +
+ +
+ + + + + + + + + + {loop $list $t} + + + + + + {/loop} + +
主题{SITE_SCORE}购买时间
{$t.title}{$t.score}{dr_date($t.inputtime, '', 'red')}
+ +
+
+
+ + +
+
+ +
+
+ +
+
+ +{if IS_MOBILE} +
+ 左右滑动表格可以查看更多的内容 +
+{/if} +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/common/module_extend_index.html b/templates/pc/member/default/common/module_extend_index.html new file mode 100644 index 0000000..ab4a1bc --- /dev/null +++ b/templates/pc/member/default/common/module_extend_index.html @@ -0,0 +1,232 @@ +{template nheader.html} + + +
+
+ +
+
+
+ + + + + +
+ +
+ +
+ +
+
+
+ +
+ +
+ + + + + + + + + + + + + {loop $list $t} + + + + + + + + + {/loop} + + + + + +
 排序{fc_lang('名称')}更新时间状态
{dr_date($t.updatetime, '', 'red')}{if $t.status == 9}{fc_lang('正常')}{else}{fc_lang('关闭')}{/if} + {if $catrule.edit} 修改{/if} + {if $catrule.del} 删除{/if} +
+
+
+ +
+ +
+   +
+
+
+
+
+
+ + +
+
+ +
+
+ +
+
+ +{if IS_MOBILE} +
+ 左右滑动表格可以查看更多的内容 +
+{/if} +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/common/module_extend_verify_edit.html b/templates/pc/member/default/common/module_extend_verify_edit.html new file mode 100644 index 0000000..f7f67d2 --- /dev/null +++ b/templates/pc/member/default/common/module_extend_verify_edit.html @@ -0,0 +1,45 @@ +{template "nheader.html"} + +
+
+ + +
+ + +
+ +
+
+
{fc_lang('基本内容')}
+
+
+ {$myfield} +
+ +
+
+
+ +
+ +
+
+
+
+ + +
+ + +
+
+ +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/common/module_extend_verify_index.html b/templates/pc/member/default/common/module_extend_verify_index.html new file mode 100644 index 0000000..45894e6 --- /dev/null +++ b/templates/pc/member/default/common/module_extend_verify_index.html @@ -0,0 +1,110 @@ +{template nheader.html} + + +
+
+ +
+ + +
+ +
+ + + + + + + + + + + + {loop $list $t} + {php $c=dr_string2array($t['content']);} + + + + + + + + {/loop} + + + + + +
 {fc_lang('名称')}{fc_lang('名称')}发布时间
{$c['name']}
{$c['title']}
{dr_date($t['inputtime'], '', 'red')} + 预览 + 修改 +
+
+
+ +
+
+   +
+
+
+
+
+
+ + +
+
+ + +
+
+ +
+
+ +{if IS_MOBILE} +
+ 左右滑动表格可以查看更多的内容 +
+{/if} +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/common/module_favorite_index.html b/templates/pc/member/default/common/module_favorite_index.html new file mode 100644 index 0000000..da91314 --- /dev/null +++ b/templates/pc/member/default/common/module_favorite_index.html @@ -0,0 +1,99 @@ +{template nheader.html} + + +
+
+ +
+ + +
+ +
+ + + + + + + + + + {loop $list $t} + + + + + + {/loop} + + + + + +
 主题收藏时间
{$t.title}{dr_date($t.inputtime, '', 'red')}
+
+
+ +
+
+   +
+
+
+ +
+
+
+ +
+
+ +
+
+ +
+
+ +{if IS_MOBILE} +
+ 左右滑动表格可以查看更多的内容 +
+{/if} +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/common/module_flag.html b/templates/pc/member/default/common/module_flag.html new file mode 100644 index 0000000..0cae01d --- /dev/null +++ b/templates/pc/member/default/common/module_flag.html @@ -0,0 +1,160 @@ +{template nheader.html} + + +
+
+ +
+ + {if $flag_error} +
+ {$flag_error} +
+ {else} +
+
+
+
+ {loop $flag $i $t} + + {/loop} +
+ +
+
+
+ +
+ +
+ + + + + + + + + + + + + {template module_data.html} + + + + + +
 主题栏目更新时间状态
+
+
+ +
+
+   +
+
+
+ +
+
+ {/if} +
+ + +
+
+ + +{if IS_MOBILE} +
+ 左右滑动表格可以查看更多的内容 +
+{/if} +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/common/module_index.html b/templates/pc/member/default/common/module_index.html new file mode 100644 index 0000000..1b134ca --- /dev/null +++ b/templates/pc/member/default/common/module_index.html @@ -0,0 +1,293 @@ +{template nheader.html} + + +
+
+ +
+
+
+ + + + + +
+ +
+ +
+ +
+
+
+ +
+ +
+ + + + + + + + + + + + + {loop $list $t} + + + + + + + + + {/loop} + + + + + +
 主题栏目更新时间状态
{CATEGORY.$t[catid].name}{dr_date($t.updatetime, '', 'red')}{if $t.status == 9}{fc_lang('正常')}{else}{fc_lang('关闭')}{/if} + {if $extend} + {fc_lang('章节管理')} + {/if} + {loop $form $f} + {$f.name}({intval($t[$f['field']])}) + {/loop} + {if $module_rule[$t['catid']]['edit']} + 修改 + {/if} + {if $module_rule[$t['catid']]['del']} + 删除 + {/if} +
+
+
+ +
+ {if $flagdata} +
+ + +
+ {/if} + {if $member_rule.update_score} +
+ {if $member_rule.update_score > 0} + 更新一次增加{$member_rule.update_score}{SITE_SCORE} + {else} + 更新一次减少{abs($member_rule.update_score)}{SITE_SCORE} + {/if} +
+ {else} +
+   +
+ {/if} +
+
+
+
+
+ + +
+
+ + +
+
+ +
+
+ +{if IS_MOBILE} +
+ 左右滑动表格可以查看更多的内容 +
+{/if} +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/common/module_success_msg.html b/templates/pc/member/default/common/module_success_msg.html new file mode 100644 index 0000000..d60c447 --- /dev/null +++ b/templates/pc/member/default/common/module_success_msg.html @@ -0,0 +1,73 @@ + + + + + + + + + + {$meta_name} + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ {if $edit} +

修改成功,您还可以:

+ {else} +

发布成功,您还可以:

+ {/if} +

+ 继续发布  + 查看详情  + 返回列表  +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/templates/pc/member/default/common/module_verify_edit.html b/templates/pc/member/default/common/module_verify_edit.html new file mode 100644 index 0000000..e80d060 --- /dev/null +++ b/templates/pc/member/default/common/module_verify_edit.html @@ -0,0 +1,57 @@ +{template "nheader.html"} + +
+
+ + +
+ + +
+ +
+
+
{fc_lang('基本内容')}
+
+
+ {if !$isedit} +
+ +
+ +
+
+ {/if} + {$myfield} +
+ +
+
+
+ +
+ +
+
+
+
+ + +
+ + +
+
+ +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/common/module_verify_index.html b/templates/pc/member/default/common/module_verify_index.html new file mode 100644 index 0000000..1127f1d --- /dev/null +++ b/templates/pc/member/default/common/module_verify_index.html @@ -0,0 +1,107 @@ +{template nheader.html} + +
+
+ +
+ + +
+ +
+ + + + + + + + + + + {loop $list $t} + {php $c=dr_string2array($t['content']);} + + + + + + + {/loop} + + + + + +
 主题提交时间
{$c['title']}
{dr_date($t['inputtime'], '', 'red')} + 预览 + 修改 +
+
+
+ +
+
+   +
+
+
+
+
+
+ + +
+
+ + +
+
+ +
+
+ +{if IS_MOBILE} +
+ 左右滑动表格可以查看更多的内容 +
+{/if} +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/common/module_verify_msg.html b/templates/pc/member/default/common/module_verify_msg.html new file mode 100644 index 0000000..a247130 --- /dev/null +++ b/templates/pc/member/default/common/module_verify_msg.html @@ -0,0 +1,73 @@ + + + + + + + + + + {$meta_name} + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ {if $edit} +

修改成功,请等待审核,您还可以:

+ {else} +

发布成功,请等待审核,您还可以:

+ {/if} +

+ 继续发布  + 查看审核  + 返回列表  +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/templates/pc/member/default/common/msg.html b/templates/pc/member/default/common/msg.html new file mode 100644 index 0000000..6ac579b --- /dev/null +++ b/templates/pc/member/default/common/msg.html @@ -0,0 +1,124 @@ +{if $member} +{template "nheader.html"} + +
+
+ {if $mark==1} +
+ {else if $mark==2} +
+ {else} +
+ {/if} + +
+
+ +{template "nfooter.html"} + +{else} + + + + + + + + + + {$meta_name} + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ {if $mark==1} +
+ {else if $mark==2} +
+ {else} +
+ {/if} + +
+
+ + + + + + + + + + + + + + + + + + + +{/if} \ No newline at end of file diff --git a/templates/pc/member/default/common/navigator.html b/templates/pc/member/default/common/navigator.html new file mode 100644 index 0000000..2e859bc --- /dev/null +++ b/templates/pc/member/default/common/navigator.html @@ -0,0 +1,65 @@ +
+ 首页 > + 会员中心 > + {if APP_DIR && is_dir(FCPATH.APP_DIR)} + {MODULE_NAME} > + {/if} + {$meta_name} +
+
+
+ + + + + + + + + + + + + + + + + + + + + {if $member.levelid} + + + + {/if} + {if $member.groupid==1 && $regverify == 1} + + + + {/if} +
 {$member.username}
+ {SITE_EXPERIENCE}:{$member.experience} +
+ {SITE_SCORE}:{$member.score} +
+ {SITE_MONEY}:{$member.money} +
+ 会员组:{$member.groupname} +
+ 会员等级:{$member.levelname} +
+ 审核会员:重发邮件 +
+
+ {loop $menu[$menu_tid]['left'] $ii $m} + + {/loop} +
\ No newline at end of file diff --git a/templates/pc/member/default/common/nfooter.html b/templates/pc/member/default/common/nfooter.html new file mode 100644 index 0000000..4b4818a --- /dev/null +++ b/templates/pc/member/default/common/nfooter.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/templates/pc/member/default/common/nheader.html b/templates/pc/member/default/common/nheader.html new file mode 100644 index 0000000..75522bb --- /dev/null +++ b/templates/pc/member/default/common/nheader.html @@ -0,0 +1,344 @@ + + + + + + + + + + {if $meta_name}{$meta_name} - {/if}会员中心 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ +
+ + + +
+ + +
+ +
+
+ + {if $menu[$menu_tid]['left'][$menu_pid]} +
+
+ + +
+
+ {/if} +
+ diff --git a/templates/pc/member/default/common/notice_index.html b/templates/pc/member/default/common/notice_index.html new file mode 100644 index 0000000..c197f07 --- /dev/null +++ b/templates/pc/member/default/common/notice_index.html @@ -0,0 +1,86 @@ +{template nheader.html} + +
+
+ +
+ + +
+ +
+
    + {loop $list $t} +
  • +
    +
    +
    +
    + +
    +
    +
    +
    {$t.content} +
    +
    +
    +
    +
    +
    {dr_fdate($t.inputtime)}
    +
    +
  • + {/loop} +
+
+
+
+ + +
+
+ + +
+
+ +
+
+ +{if IS_MOBILE} +
+ 左右滑动表格可以查看更多的内容 +
+{/if} +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/common/oauth.html b/templates/pc/member/default/common/oauth.html new file mode 100644 index 0000000..aaa3827 --- /dev/null +++ b/templates/pc/member/default/common/oauth.html @@ -0,0 +1,141 @@ + + + + + + + + + + 快捷登录-绑定账号 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + +

快速注册账号

+ {if $error_2} +
+ + {$error_2} +
+ {/if} + + {if @in_array('username', $regfield)} +
+ + +
+ {/if} + {if @in_array('phone', $regfield)} +
+ + +
+ {/if} + {if @in_array('email', $regfield)} +
+ + +
+ {/if} +
+ + +
+
+ + +
+ +
+ +
+ +
+ + +
+ + + + + diff --git a/templates/pc/member/default/common/pay_add.html b/templates/pc/member/default/common/pay_add.html new file mode 100644 index 0000000..5b353d4 --- /dev/null +++ b/templates/pc/member/default/common/pay_add.html @@ -0,0 +1,53 @@ +{template "nheader.html"} + +
+
+ + +
+
+
+ +
+
+ + +
+
+
+
+ +
+
+ {loop $list $name $t} +

+ +

+ {/loop} +
+
+
+
+ +
+
+
+ +
+
+
+ +
+ + +
+
+ +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/common/pay_convert.html b/templates/pc/member/default/common/pay_convert.html new file mode 100644 index 0000000..1bb46d3 --- /dev/null +++ b/templates/pc/member/default/common/pay_convert.html @@ -0,0 +1,92 @@ +{template "nheader.html"} + +
+
+ + +
+
+
+ +
+
+ 1 {SITE_MONEY} = {SITE_CONVERT} {SITE_SCORE},可用{SITE_MONEY} {$member.money} ,可用{SITE_SCORE} {$member.score} +
+
+
+
+ +
+
+ + +
+
+
+
+ +
+
+ + +
+
+
+
+ {SITE_SCORE},  需要 0 元 +
+
+
+
+ +
+
+ + +
+
+
+
+ 元,  需要 0 {SITE_SCORE} +
+
+
+
+ +
+
+
+ +
+
+
+ +
+ + +
+
+ +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/common/pay_index.html b/templates/pc/member/default/common/pay_index.html new file mode 100644 index 0000000..122b53f --- /dev/null +++ b/templates/pc/member/default/common/pay_index.html @@ -0,0 +1,79 @@ +{template nheader.html} +
+
+ +
+
+
+ + + + +
+
+ +
+ +
+
+
+ +
+
+ + + + + + + + + + + + + {loop $list $t} + + + + + + + + + {/loop} + +
Id时间金额类型状态备注
{$t.id}{dr_date($t.inputtime, NULL, 'red')}{if $t.value > 0}+{$t.value}{else}{$t.value}{/if}{if $t.type}{$type[$t.type]['name']}{else}自助{/if}{if $t.status}付款成功{else}未付款{/if} + {if !$t.status && $t.type} 付款{/if} + {dr_lang_note($t.note)} +
+
+
+
+ +
+
+ + +
+
+ +
+
+ +{if IS_MOBILE} +
+ 左右滑动表格可以查看更多的内容 +
+{/if} +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/common/pay_msg.html b/templates/pc/member/default/common/pay_msg.html new file mode 100644 index 0000000..37b2a02 --- /dev/null +++ b/templates/pc/member/default/common/pay_msg.html @@ -0,0 +1,78 @@ + + + + + + + + + + {$meta_title} + + + + + + + + + + + + + + + + + + + + + + + +
+
+ {if $mark==1} +
+ {else if $mark==2} +
+ {else} +
+ {/if} + +
+
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/templates/pc/member/default/common/pay_result.html b/templates/pc/member/default/common/pay_result.html new file mode 100644 index 0000000..853350c --- /dev/null +++ b/templates/pc/member/default/common/pay_result.html @@ -0,0 +1,9 @@ +{template nheader.html} + +
+
+ {$pay.html} +
+
+ +{template nfooter.html} \ No newline at end of file diff --git a/templates/pc/member/default/common/pay_transfer.html b/templates/pc/member/default/common/pay_transfer.html new file mode 100644 index 0000000..ed57d3e --- /dev/null +++ b/templates/pc/member/default/common/pay_transfer.html @@ -0,0 +1,72 @@ +{template nheader.html} + +
+
+ + +
+
+
+ +
+
+ +
+
+
+
+ +
+
+ + +
+
+
+
+
+
+
+
+ +
+
+ + +
+
+
+
+ +
+
+
+ +
+
+
+ +
+ + +
+
+ +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/common/pm_webchat.html b/templates/pc/member/default/common/pm_webchat.html new file mode 100644 index 0000000..e9085f5 --- /dev/null +++ b/templates/pc/member/default/common/pm_webchat.html @@ -0,0 +1,73 @@ +{if $action === 'more'} +{loop $list $t} +
  • +
    {$t.author}:
    +
    {htmlspecialchars_decode($t.message)}
    +
  • +{/list} +{else} + + +
    + +
    +
      + +
    +
    + +
    + 刷新 刷新 + +
    +
    +{/if} \ No newline at end of file diff --git a/templates/pc/member/default/common/register.html b/templates/pc/member/default/common/register.html new file mode 100644 index 0000000..31abfc5 --- /dev/null +++ b/templates/pc/member/default/common/register.html @@ -0,0 +1,167 @@ + + + + + + + + + + {$meta_title} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + diff --git a/templates/pc/member/default/common/score.html b/templates/pc/member/default/common/score.html new file mode 100644 index 0000000..647ed7d --- /dev/null +++ b/templates/pc/member/default/common/score.html @@ -0,0 +1,52 @@ +{template nheader.html} + +
    +
    + +
    + +
    +
    + + + + + + + + + + {loop $list $t} + + + + + + {/loop} + +
    时间变更值操作
    {dr_date($t['inputtime'])}{if $t['value'] > 0}+{$t['value']}{else}{$t['value']}{/if}{dr_lang_note($t['note'])}
    + +
    +
    +
    + + +
    +
    + + +
    +
    + +
    +
    + +{if IS_MOBILE} +
    + 左右滑动表格可以查看更多的内容 +
    +{/if} +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/mall/shipping_add.html b/templates/pc/member/default/mall/shipping_add.html new file mode 100644 index 0000000..8188617 --- /dev/null +++ b/templates/pc/member/default/mall/shipping_add.html @@ -0,0 +1,343 @@ +{template nheader.html} + + + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + +
    * 名称:
    * 计价方式: +      +      +      +
    * 运费详情: +
    + 默认运费: + + 单位内, + + 元,每增加 + + 单位,增加运费 + + 元 +
    + + + + + + + + + + + + + {php unset($data['freight']['default']);} + {loop $data.freight $i $t} + + + + + + + + + {/loop} + +
    运送到()首费(元)()续费(元)操作
    + [选择城市]   + {php $cids=0;} + {if $t.city} + {loop $t.city $c} + {php $cids=','.$c;} + {dr_linkage('address', $c, 0, 'name')} + {/loop} + {else} + 全国 + {/if} + + + 删除
    + 为指定地区城市设置运费 +
    包邮策略: + + + + + + + + + + {loop $data.free $i $t} + + + + + + {/loop} + +
    运送到设置包邮条件操作
    + [选择城市]   + {php $cids=0;} + {if $t.city} + {loop $t.city $c} + {php $cids=','.$c;} + {dr_linkage('address', $c, 0, 'name')} + {/loop} + {else} + 全国 + {/if} + + + +

          包邮

    +

        满  元包邮

    +

          , 满  元包邮

    +
    删除
    + 为指定地区城市包邮策略 +
      +
    +
    +
    +
    +
    +{template nfooter.html} \ No newline at end of file diff --git a/templates/pc/member/default/mall/shipping_index.html b/templates/pc/member/default/mall/shipping_index.html new file mode 100644 index 0000000..5350845 --- /dev/null +++ b/templates/pc/member/default/mall/shipping_index.html @@ -0,0 +1,40 @@ +{template nheader.html} +
    +
    + +
    + + + + + + + + + + + + {loop $list $t} + + + + + + {/list} + +
    模板名称计费方式
    {$t.name}{if $t.valuation == 1}按数量{/if}{if $t.valuation == 2}按重量{/if}{if $t.valuation == 3}按体积{/if} + 修改 + 删除 +
    + + + +
    + + +
    +
    + +{template nfooter.html} \ No newline at end of file diff --git a/templates/pc/member/default/order/myfield.html b/templates/pc/member/default/order/myfield.html new file mode 100644 index 0000000..c796da5 --- /dev/null +++ b/templates/pc/member/default/order/myfield.html @@ -0,0 +1,8 @@ +

    + 以下字段是你的自定义字段,请在myfield.html文件中手动输出并排版 +

    +

    + {loop $field $f} + {$f.name}: {$f.fieldname} + {/loop} +

    \ No newline at end of file diff --git a/templates/pc/member/default/order/operate_close.html b/templates/pc/member/default/order/operate_close.html new file mode 100644 index 0000000..f260003 --- /dev/null +++ b/templates/pc/member/default/order/operate_close.html @@ -0,0 +1,56 @@ + + + + + + admin + + + + + + + + + + + + +{if $order_error} + + +{else} + +
    + +
    +{/if} + + \ No newline at end of file diff --git a/templates/pc/member/default/order/operate_price.html b/templates/pc/member/default/order/operate_price.html new file mode 100644 index 0000000..66153fe --- /dev/null +++ b/templates/pc/member/default/order/operate_price.html @@ -0,0 +1,54 @@ + + + + + + admin + + + + + + + + + + + + +{if $order_error} + + +{else} + +
    + +
    +{/if} + + \ No newline at end of file diff --git a/templates/pc/member/default/order/operate_shipping.html b/templates/pc/member/default/order/operate_shipping.html new file mode 100644 index 0000000..e96bc7b --- /dev/null +++ b/templates/pc/member/default/order/operate_shipping.html @@ -0,0 +1,74 @@ + + + + + + admin + + + + + + + + + + + + +{if $order_error} + + +{else} + +
    + +
    +{/if} + + \ No newline at end of file diff --git a/templates/pc/member/default/order/order_comment.html b/templates/pc/member/default/order/order_comment.html new file mode 100644 index 0000000..e69de29 diff --git a/templates/pc/member/default/order/order_data.html b/templates/pc/member/default/order/order_data.html new file mode 100644 index 0000000..e900daa --- /dev/null +++ b/templates/pc/member/default/order/order_data.html @@ -0,0 +1,60 @@ +{loop $list $t} +
    +
    +
    + + {if $ci->mconfig['config']['otime'] && $t.order_status==1} + 订单将于{dr_date($t.order_time+$ci->mconfig['config']['otime']*3600)}失效,请尽快付款 + {else} + 订单号:{$t.sn} + {/if} +
    +
    + +
    +
    +
    +
    +
    + {loop $t.goods $ii $g} +
    + + + +
    +
    {$g.title}
    + + {loop $sku $s $u} + {$s}:{$u}   + {/loop} +

    x{$g.quantity}

    +
    +
    + {/loop} +
    + {if IS_MOBILE} +
    +

    + {$t.shipping_name}({$t.shipping_phone}) + {if $t.order_score}{intval($t.order_price)}{SITE_SCORE}{else}¥{number_format($t.order_price, 2)}{/if} + {if $paytype[$t.pay_type]}{$paytype[$t.pay_type]['name']}{else}未知{/if} +

    +
    + {else} +
    +

    {$t.shipping_name}

    +

    {$t.shipping_phone}

    +
    +
    +

    {if $t.order_score}{intval($t.order_price)}{SITE_SCORE}{else}¥{number_format($t.order_price, 2)}{/if}

    +

    {if $paytype[$t.pay_type]}{$paytype[$t.pay_type]['name']}{else}未知{/if}

    +
    + {/if} +
    + {dr_order_member_option($member.uid, $t)} +

    订单详情

    +
    +
    +
    +
    +{/loop} \ No newline at end of file diff --git a/templates/pc/member/default/order/order_header.html b/templates/pc/member/default/order/order_header.html new file mode 100644 index 0000000..6031380 --- /dev/null +++ b/templates/pc/member/default/order/order_header.html @@ -0,0 +1,160 @@ +{template "nheader.html"} + + \ No newline at end of file diff --git a/templates/pc/member/default/order/order_index.html b/templates/pc/member/default/order/order_index.html new file mode 100644 index 0000000..e4ede5b --- /dev/null +++ b/templates/pc/member/default/order/order_index.html @@ -0,0 +1,92 @@ +{template order_header.html} + + +
    +
    + +
    +
    +
    + + + + + +
    +
    + +
    +
    + +
    + +
    +
    +
    + +
    + {template "order_data.html"} +
    + + + + +
    + + +
    +
    + + + + + +{template nfooter.html} \ No newline at end of file diff --git a/templates/pc/member/default/order/order_info.html b/templates/pc/member/default/order/order_info.html new file mode 100644 index 0000000..4899eb5 --- /dev/null +++ b/templates/pc/member/default/order/order_info.html @@ -0,0 +1,242 @@ +{template order_header.html} + +
    +
    +
    +
    + +
    +
    +

    订单号:{$order.sn}

    + {dr_order_member_option($member.uid, $order)} +
    + +
    + +
    +
    +
    +
    +
    订单信息
    +
    +
    +
    +
    订单状态:
    +
    {dr_order_status($order)}
    +
    +
    +
    下单时间:
    +
    {dr_date($order.order_time)}
    +
    + {if $member.uid != $order.buy_uid} +
    +
    买家账号:
    +
    {$order.buy_username}
    +
    + {/if} + {if $member.uid != $order.sell_uid} +
    +
    商家账号:
    +
    {$order.sell_username}
    +
    + {/if} +
    +
    +
    +
    +
    +
    +
    + 支付信息
    +
    +
    +
    +
    订单金额:
    +
    {if $order.order_score}{intval($order.order_price)}{SITE_SCORE}{else}¥{number_format($order.order_price, 2)}元 {/if}
    +
    +
    +
    付款时间:
    +
    {if $order.pay_time}{dr_date($order.pay_time)}{else}未付款{/if}
    +
    +
    +
    支付方式:
    +
    {if $paytype[$order.pay_type]}{$paytype[$order.pay_type]['name']}{else}未知{/if}
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + 收货人信息 +
    +
    +
    +
    +
    + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    + 运输信息 +
    +
    +
    +
    +
    发货时间:
    +
    {dr_date($order.shipping_time)}
    +
    +
    +
    承运者:
    +
    {if $kd[$order.shipping_type]}{$kd[$order.shipping_type]}{else}无{/if}
    +
    + {if $order.shipping_sn} +
    +
    运输单号:
    +
    {$order.shipping_sn}
    +
    +
    +
    + +
    + {/if} +
    +
    +
    +
    + + +
    +
    +
    +
    +
    + 买家留言 +
    +
    +
    + {if $order.buy_note} + {$order.buy_note} + {else} + 无 + {/if} +
    +
    +
    +
    +
    +
    +
    + 其他信息 +
    +
    +
    + {if $field} + {template "myfield.html"} + {else} + 无 + {/if} +
    +
    +
    +
    + +
    +
    +
    +
    +
    + 商品清单 +
    +
    +
    +
    + + + + + + + + + + + + {loop $order.goods $t} + + + + + + + {/if} + + {/loop} + + +
    商品Id 商品名称 商品价格 购买数量
    + {$t.cid} + + {$t.title} + + {if $sku} + ({loop $sku $s $u}{$s}:{$u} {/loop} ) + {/if} + {if $t.sn}

    商品编号:{$t.sn}

    {/if} +
    +
    {if $order.order_score}{intval($t.price)}{SITE_SCORE}{else}¥{number_format($t.price, 2)}{/if} {$t.quantity} + 再次购买 + {if $comment[$t.id]} + 商品评论
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    优惠了:
    +
    ¥{number_format($order.order_youhui, 2)} 元
    +
    +
    +
    运费:
    +
    ¥{number_format($order.shipping_price, 2)} 元
    +
    +
    +
    应付总额:
    +
    {if $order.order_score}{intval($order.order_price)}{SITE_SCORE}{else}¥{number_format($order.order_price, 2)} 元{/if}
    +
    +
    +
    +
    + + +
    +
    + +
    +
    + +{template nfooter.html} \ No newline at end of file diff --git a/templates/pc/member/default/order/sell_data.html b/templates/pc/member/default/order/sell_data.html new file mode 100644 index 0000000..046a070 --- /dev/null +++ b/templates/pc/member/default/order/sell_data.html @@ -0,0 +1,17 @@ +{loop $list $t} + + + + {$t.sn} + + {dr_strcut($t.buy_username, 10)} + + {if $t.order_score}{intval($t.order_price)}{SITE_SCORE}{else}¥{number_format($t.order_price, 2)}{/if} + {dr_date($t.order_time, '', 'red')} + {dr_order_status($t)} + + {dr_order_member_option($t.sell_uid, $t)} +

    {fc_lang('订单详情')}

    + + +{/loop} \ No newline at end of file diff --git a/templates/pc/member/default/order/sell_index.html b/templates/pc/member/default/order/sell_index.html new file mode 100644 index 0000000..d7f2db8 --- /dev/null +++ b/templates/pc/member/default/order/sell_index.html @@ -0,0 +1,116 @@ +{template order_header.html} + + +
    +
    + +
    +
    +
    + + + + + +
    +
    + +
    +
    + +
    + +
    +
    +
    + +
    + + + + + + + + + + + + + + + {template "sell_data.html"} + + + + + +
    {fc_lang('订单号')}{fc_lang('买家')}{fc_lang('价格')}{fc_lang('下单时间')}{fc_lang('状态')}
    + + +
    + +
    + + + + +
    + + +
    +
    + + + + + +{template nfooter.html} \ No newline at end of file diff --git a/templates/pc/member/default/order/sell_info.html b/templates/pc/member/default/order/sell_info.html new file mode 100644 index 0000000..984bd9f --- /dev/null +++ b/templates/pc/member/default/order/sell_info.html @@ -0,0 +1,233 @@ +{template order_header.html} + +
    + +

    + + + {str_replace(array('

    ', '

    '), array(''), dr_order_member_option($order.sell_uid, $order))} + +
    +

    + +
    +
    +
    + {fc_lang('基本信息')} +
    +
    +
    + +
    +
    +
    +
    +
    +
    {fc_lang('订单状态')}:
    +
    {dr_order_status($order)}
    +
    +
    +
    {fc_lang('下单时间')}:
    +
    {dr_date($order.order_time)}
    +
    +
    +
    {fc_lang('买家账号')}:
    +
    {$order.buy_username}
    +
    +
    +
    +
    +
    +
    +
    +
    +
    订单金额:
    +
    {if $order.order_score}{intval($order.order_price)}{SITE_SCORE}{else}¥{number_format($order.order_price, 2)}元 {/if}
    +
    +
    +
    付款时间:
    +
    {if $order.pay_time}{dr_date($order.pay_time)}{else}未付款{/if}
    +
    +
    +
    支付方式:
    +
    {if $paytype[$order.pay_type]}{$paytype[$order.pay_type]['name']}{else}未知{/if}
    +
    +
    +
    +
    +
    + +
    +
    + + {if $order.buy_step<2 && $order.shipping_name && $order.shipping_phone} +
    +
    +
    + {fc_lang('收货与发货')} +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + + +
    +
    +
    +
    +
    +
    +
    +
    + {if $order.shipping_time} +
    +
    {fc_lang('发货时间')}:
    +
    {dr_date($order.shipping_time)}
    +
    +
    +
    {fc_lang('物流公司')}:
    +
    {if $kd[$order.shipping_type]}{$kd[$order.shipping_type]}{else}无{/if}
    +
    + {if $order.shipping_sn} +
    +
    {fc_lang('运输单号')}:
    +
    {$order.shipping_sn}
    +
    + {/if} + {else} + {fc_lang('立即发货')} + {/if} +
    +
    +
    + {if $order.shipping_sn} +
    + +
    +
    + +
    +
    + {/if} +
    + +
    +
    + {/if} + +
    +
    + + + + + + + + + + + + + + {loop $order.goods $t} + + + + + + + + {/loop} + + +
    商品名称 商品规格 商品编号 价格 数量
    + + + {$t.title} + + {if $sku} + {loop $sku $s $u}{$s}:{$u} {/loop} + {/if} + {$t.sn} {if $order.order_score}{intval($t.price)}{SITE_SCORE}{else}¥{number_format($t.price, 2)}{/if} {$t.quantity}
    +
    +
    {fc_lang('买家备注')}:{$order.buy_note}
    +
    +
    +
    + +
    +
    +
    + {fc_lang('费用信息')} +
    +
    +
    + {if $order.shipping_price > 0}

    {fc_lang('运费')}:¥{number_format($order.shipping_price, 2)}

    {/if} +

    {fc_lang('应付总额')}:{if $order.order_score}{intval($order.order_price)}{SITE_SCORE}{else}¥{number_format($order.order_price, 2)} {/if}

    + +
    +
    + +
    +
    +
    + {fc_lang('操作信息')} +
    +
    +
    +
    +
    +
    +
    + +
    + + + +
    +
    + +
    + + + + + + + + + + + + {loop $log $t} + + + + + + + + {/loop} + +
    时间地点订单状态操作人说明
    {dr_date($t.inputtime)}{$ci->dip->address($t.inputip)}{dr_order_member_status($t.order_status)}{$t.username}{$t.note}
    +
    +
    + + +
    +{template nfooter.html} \ No newline at end of file diff --git a/templates/pc/member/default/space/sns_comment.html b/templates/pc/member/default/space/sns_comment.html new file mode 100644 index 0000000..d9573fb --- /dev/null +++ b/templates/pc/member/default/space/sns_comment.html @@ -0,0 +1,26 @@ +{loop $list $t} +
    +
    +
    +

    + {$t.username}: + {dr_sns_content($t.comment)} +

    +

    + + {dr_fdate($t.inputtime)} + + +     + {if $member.adminid || $t.uid==$member.uid} + 删除 + | + {/if} + 回复 + +

    +
    + +
    +{/loop} +{if $more}查看更多{/if} \ No newline at end of file diff --git a/templates/pc/member/default/space/sns_config.html b/templates/pc/member/default/space/sns_config.html new file mode 100644 index 0000000..727e7ea --- /dev/null +++ b/templates/pc/member/default/space/sns_config.html @@ -0,0 +1,42 @@ +{template "nheader.html"} + +
    +
    + + +
    + +
    +
    + +
    +
    +

    +

    +

    +
    +
    +
    +
    + +
    +
    +
    + +
    +
    +
    + +
    + + +
    +
    + +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/space/sns_data.html b/templates/pc/member/default/space/sns_data.html new file mode 100644 index 0000000..847fc09 --- /dev/null +++ b/templates/pc/member/default/space/sns_data.html @@ -0,0 +1,100 @@ +{loop $list $t} +
    +
    + +
    +
    +

    + {$t.username} + +

    + + {dr_sns_content($t.content)} + {php $images = $t.images ? @explode('|', $t.images) : '';} + {if $images} +
    +
    +
      + {loop $images $img} +
    • + +
    • + {/loop} +
    +
    + {/if} + {if $t.repost_id && $repost = dr_sns_feed($t.repost_id)} +
    +
    +
    + @{$repost.username}
    +
    {dr_sns_content($repost.content)}
    +

    + + 原文转发({$repost.repost})| + 原文评论({$repost.comment}) + + {dr_fdate($repost.inputtime)} + {$repost.source} + +

    +
    + {/if} +
    +

    + + 转发 + | + {if @in_array($t.id, $favorite)}取消收藏{else}收藏{/if} + | + 赞({$t.digg}) + | + 评论({$t.comment}) + + + + {dr_fdate($t.inputtime)} + + {$t.source} + {if $member.adminid || $t.uid==$member.uid} + +   删除 + + {/if} + +

    + +
    +
    +{/list} + \ No newline at end of file diff --git a/templates/pc/member/default/space/sns_fans.html b/templates/pc/member/default/space/sns_fans.html new file mode 100644 index 0000000..265265a --- /dev/null +++ b/templates/pc/member/default/space/sns_fans.html @@ -0,0 +1,56 @@ +{template "nheader.html"} + + + + + +
    +
    +
    +
    + {template "sns_fans_data.html"} +
    +
    +
    + +
    +
    +
    +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/space/sns_fans_data.html b/templates/pc/member/default/space/sns_fans_data.html new file mode 100644 index 0000000..4e058cc --- /dev/null +++ b/templates/pc/member/default/space/sns_fans_data.html @@ -0,0 +1,29 @@ +{loop $list $t} +
    +
    +
    +
    +

    + {if $ci->db->where('uid', $t.uid)->count_all_results('member_online')} + + {else} + + {/if} + + +

    +

    + {php $m=dr_sns_info($t.uid);} + 关注: + {$m.follow} + | + 粉丝: + {$m.fans} + | + 动态: + {$m.weibo} +

    +
    +
    +
    +{/loop} \ No newline at end of file diff --git a/templates/pc/member/default/space/sns_feed.html b/templates/pc/member/default/space/sns_feed.html new file mode 100644 index 0000000..c3603cf --- /dev/null +++ b/templates/pc/member/default/space/sns_feed.html @@ -0,0 +1,115 @@ +{template "header.html"} + + + + +
    + {template "navigator.html"} +
    +
    +
    {$data.username}
    +
    + +
    +
    +
    + +
    +
    +

    + {$data.username} + +

    + + {dr_sns_content($data.content)} + {if $data.repost_id && $repost = dr_sns_feed($data.repost_id)} +
    +
    +
    + @{$repost.username}
    +
    {dr_sns_content($repost.content)}
    +

    + + 原文转发({$repost.repost})| + 原文评论({$repost.comment}) + + {dr_fdate($repost.inputtime)} + {$repost.source} + +

    +
    + {/if} +
    +

    + + 转发 + | + {if @in_array($data.id, $favorite)}取消收藏{else}收藏{/if} + | + 赞({$data.digg}) + | + 评论({$data.comment}) + + + + {dr_fdate($data.inputtime)} + + {$data.source} + + 举报 + + {if $member.adminid || $data.uid==$member.uid} + +   删除 + + {/if} + +

    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    +{template "footer.html"} \ No newline at end of file diff --git a/templates/pc/member/default/space/sns_follow.html b/templates/pc/member/default/space/sns_follow.html new file mode 100644 index 0000000..b9cfb02 --- /dev/null +++ b/templates/pc/member/default/space/sns_follow.html @@ -0,0 +1,135 @@ +{template "nheader.html"} + + + + +
    +
    + {if !$ta} +
    +
    + + + + + + 全部 + {loop $group $t} + {$t.title} + {/loop} + 管理分组 + + +
    +
    +
    + {/if} +
    + {template "sns_follow_data.html"} +
    +
    +
    + + +
    +
    +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/space/sns_follow_data.html b/templates/pc/member/default/space/sns_follow_data.html new file mode 100644 index 0000000..8ce7bb5 --- /dev/null +++ b/templates/pc/member/default/space/sns_follow_data.html @@ -0,0 +1,63 @@ +{loop $list $t} +
    +
    +
    + {if !$ta} + + {/if} +
    +

    + {if $ci->db->where('uid', $t.uid)->count_all_results('member_online')} + + {else} + + {/if} + +   + {if !$ta} + + ( + + {if $t.remark}{$t.remark}{else}设置备注{/if} + + ) + + {/if} +

    +

    + {php $m=dr_sns_info($t.uid);} + 关注: + {$m.follow} + | + 粉丝: + {$m.fans} + | + 动态: + {$m.weibo} +

    +
    +
    +
    +{/loop} \ No newline at end of file diff --git a/templates/pc/member/default/space/sns_group.html b/templates/pc/member/default/space/sns_group.html new file mode 100644 index 0000000..bfc5088 --- /dev/null +++ b/templates/pc/member/default/space/sns_group.html @@ -0,0 +1,194 @@ + +
    +
    + +
    +
    + +
    +
    + + + +
    +
    +
    +
    + + + + + \ No newline at end of file diff --git a/templates/pc/member/default/space/sns_index.html b/templates/pc/member/default/space/sns_index.html new file mode 100644 index 0000000..9dbe9ea --- /dev/null +++ b/templates/pc/member/default/space/sns_index.html @@ -0,0 +1,256 @@ +{template "nheader.html"} + + + + + +
    +
    + +
    +
    +
    + +
    +
    +
    +
    + 发布 +
    + + +
    +
    +
    +
    +
    + 常用表情 +
    +
    + {loop $emotion $t} + + {/loop} +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
      +
    • +  未分组 +
    • + {loop $group $i $t} +
    • +  {dr_strcut($t.title,15)} +
    • + {/loop} +
    +
    +
      + 加载中... +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + + + 共  + + 0 + +  张,还能上传  + + 9 + +  张(按住ctrl可选择多张) + +
    + +
    +
      +
    • +
    +
    + + + +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +
    + + +
    +
    +
    +
    + +
    +
    +
    +
    +
    + + + +
    + {template "sns_data.html"} +
    + +
    + + +
    +
    + + + +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/space/sns_invite.html b/templates/pc/member/default/space/sns_invite.html new file mode 100644 index 0000000..3f8e6eb --- /dev/null +++ b/templates/pc/member/default/space/sns_invite.html @@ -0,0 +1,47 @@ +{template nheader.html} + + +
    +
    +
    +
    + + + + + + + + + + + {template sns_invite_data.html} + +
    uid账号注册时间
    +
    +
    + +
    +
    +
    +{template nfooter.html} \ No newline at end of file diff --git a/templates/pc/member/default/space/sns_invite_data.html b/templates/pc/member/default/space/sns_invite_data.html new file mode 100644 index 0000000..ca687f6 --- /dev/null +++ b/templates/pc/member/default/space/sns_invite_data.html @@ -0,0 +1,7 @@ +{loop $list $t} + + {$t.rid} + {$t.rname} + {dr_date($t.regtime, '', 'red')} + +{/loop} \ No newline at end of file diff --git a/templates/pc/member/default/space/sns_member.html b/templates/pc/member/default/space/sns_member.html new file mode 100644 index 0000000..f2d0079 --- /dev/null +++ b/templates/pc/member/default/space/sns_member.html @@ -0,0 +1,71 @@ +
    +
    +
    +

    {$memberinfo.username}

    +
    +
      +
    • + 关注 + {$membersns.follow} +
    • +
    • |
    • +
    • + 粉丝 + {$membersns.fans} +
    • +
    • |
    • +
    • + 动态 + {$membersns.weibo} +
    • +
    +
    +
    +
    + + \ No newline at end of file diff --git a/templates/pc/member/default/space/sns_remark.html b/templates/pc/member/default/space/sns_remark.html new file mode 100644 index 0000000..edbd1b2 --- /dev/null +++ b/templates/pc/member/default/space/sns_remark.html @@ -0,0 +1,6 @@ + +
    +
    + +
    +
    \ No newline at end of file diff --git a/templates/pc/member/default/space/sns_repost.html b/templates/pc/member/default/space/sns_repost.html new file mode 100644 index 0000000..404d524 --- /dev/null +++ b/templates/pc/member/default/space/sns_repost.html @@ -0,0 +1,76 @@ + + +{if !$ci->callback} + +{/if} +
    +
    @{$data.username}  {dr_sns_content($data.content)}
    +
    +
    + +
    +
    +
    +
    + 表情 + 好友 +
    + + + + + +
    +
    +
    +
    +
    diff --git a/templates/pc/member/default/space/space_category_add.html b/templates/pc/member/default/space/space_category_add.html new file mode 100644 index 0000000..b398a22 --- /dev/null +++ b/templates/pc/member/default/space/space_category_add.html @@ -0,0 +1,131 @@ +{template "nheader.html"} + + +
    +
    + + +
    +
    + {if strlen($result_error) > 3} +
    + {$result_error}
    + {/if} + {if $is_edit} +
    + +
    +
    + + + +
    +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    + {/if} + +
    + +
    +
    + + + + +
    +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    + {if !$data.child} +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + {dr_field_input('body', 'Ueditor', array('option' => array( 'mode' => 2, 'height' => 200, 'width' => '100%'), 'validate' => array('xss' => 1)), $data['body'])} +
    +
    + {/if} +
    + +
    +
    +
    + +
    +
    +
    + +
    + + +
    +
    + +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/space/space_category_index.html b/templates/pc/member/default/space/space_category_index.html new file mode 100644 index 0000000..7d91ebc --- /dev/null +++ b/templates/pc/member/default/space/space_category_index.html @@ -0,0 +1,133 @@ +{template "nheader.html"} + + +
    +
    + +
    + + {if $is_edit} +
    + +
    + {/if} + +
    + +
    + + + + + + + + + + + + + {$list} + + + + + +
    排序栏目名称类型显示
    + + {if $is_edit}{/if} +
    +
    +
    +
    + + +
    +
    + +{if IS_MOBILE} +
    + 左右滑动表格可以查看更多的内容 +
    +{/if} +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/space/space_content_add.html b/templates/pc/member/default/space/space_content_add.html new file mode 100644 index 0000000..66ca0da --- /dev/null +++ b/templates/pc/member/default/space/space_content_add.html @@ -0,0 +1,42 @@ +{template nheader.html} + +
    +
    + + +
    + + +
    + {if !$isdl} +
    + +
    + +
    +
    + {/if} + {$myfield} +
    + +
    +
    +
    + +
    +
    +
    + +
    + + +
    +
    + +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/space/space_content_index.html b/templates/pc/member/default/space/space_content_index.html new file mode 100644 index 0000000..0c0f3a7 --- /dev/null +++ b/templates/pc/member/default/space/space_content_index.html @@ -0,0 +1,165 @@ +{template nheader.html} + + +
    +
    + +
    +
    +
    + + + + +
    +
    + +
    +
    + +
    + +
    +
    +
    + +
    + +
    + + + + {if !$isdl}{/if} + + + + + + + + + + {loop $list $t} + + {if !$isdl}{/if} + + + + + + + + {/loop} + + {if !$isdl} + + + + + {/if} +
     主题栏目更新时间阅读数状态操作
    {$category[$t['catid']]['name']}{dr_date($t.updatetime, '', 'red')}{$t.hits}{if $t.status}通过{else}未审核{/if} + 修改 + 删除 +
    +
    +
    + + + +
    +
    +
    + +
    +
    +
    + + +
    +
    + + +
    +
    + +
    +
    + +{if IS_MOBILE} +
    + 左右滑动表格可以查看更多的内容 +
    +{/if} +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/space/space_domain.html b/templates/pc/member/default/space/space_domain.html new file mode 100644 index 0000000..2ac404e --- /dev/null +++ b/templates/pc/member/default/space/space_domain.html @@ -0,0 +1,46 @@ +{template nheader.html} + +
    +二级域名格式为:数字+字母+下划线+破折号。 +
    +
    +
    + + +
    +
    + +
    + +
    + +
    +
    +
    + .{$domain} +
    +
    +
    +
    + +
    +
    +
    + +
    +
    +
    + +
    + + +
    +
    + +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/space/space_index.html b/templates/pc/member/default/space/space_index.html new file mode 100644 index 0000000..b1ecb3b --- /dev/null +++ b/templates/pc/member/default/space/space_index.html @@ -0,0 +1,32 @@ +{template nheader.html} + +
    +
    + + +
    +
    + {$myfield} +
    + +
    +
    +
    + +
    +
    +
    + +
    + + +
    +
    + +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/member/default/space/space_template.html b/templates/pc/member/default/space/space_template.html new file mode 100644 index 0000000..e439573 --- /dev/null +++ b/templates/pc/member/default/space/space_template.html @@ -0,0 +1,75 @@ +{template nheader.html} +{if $my} +
    +
    +
    +
    + + 我购买的模板 +
    +
    +
    +
    + {loop $my $t} +
    +
    +
    + + + + +
    +
    +
    {$t.name}
    +
    +
    +
    + {/loop} +
    +
    +
    + +
    +{/if} + +
    +
    +
    +
    + + 全部模板 +
    +
    +
    +
    + {loop $list $dir $t} + {if !isset($my[$dir])} +
    +
    +
    + + + + +
    +
    +
    {$t.name}
    +
    +
    + {if $t.price} + 售价:{$t.price}({SITE_SCORE}) + {else} + 免费 + {/if} +
    +
    +
    + {/if} + {/loop} +
    +
    +
    + +
    + +{template "nfooter.html"} \ No newline at end of file diff --git a/templates/pc/web/default/common/404.html b/templates/pc/web/default/common/404.html new file mode 100644 index 0000000..09876a0 --- /dev/null +++ b/templates/pc/web/default/common/404.html @@ -0,0 +1,48 @@ +{template "header.html","/"} + + + +
    +
    +
    + + + + +
    +
    +
    +
    404
    +
    +

    没有找到您要访问的页面

    +

    {$msg}

    +
    + + +
    + + + + +
    +
    +
    +
    +
    +
    + +
    +
    +
    + +{template "footer.html","/"} \ No newline at end of file diff --git a/templates/pc/web/default/common/comment.html b/templates/pc/web/default/common/comment.html new file mode 100644 index 0000000..0030ea2 --- /dev/null +++ b/templates/pc/web/default/common/comment.html @@ -0,0 +1,35 @@ +{template "header.html", "/"} +
    +
    +
    +
    + +
    +
    + {template "comment_ajax.html"} +
    +
    +
    +
    +
    +
    +{template "footer.html"} \ No newline at end of file diff --git a/templates/pc/web/default/common/comment_ajax.html b/templates/pc/web/default/common/comment_ajax.html new file mode 100644 index 0000000..b8635f9 --- /dev/null +++ b/templates/pc/web/default/common/comment_ajax.html @@ -0,0 +1,219 @@ + + + + + +
    +
    +
    +
    + {if $myfield} + + + {$myfield} + +
    + {/if} +
    + {if $is_review} +
    +
      + {loop $review.option $i $t} + {if $t.use} +
    • + + + {$t.name}: + + + {loop $review.value $ii $v} +   + {/loop} + +
    • + {/if} + {/loop} +
    +
    +
    + {/if} + + + +
    + +
    +
    +
    + + {if $code} +
    + + +
    + {/if} +
    + +
    +
    +
    +
    + {if $use} + + + +
    +
    + {$mypages} +
    + {else} +
    + 系统关闭了评论功能 +
    + {/if} + + + +
    \ No newline at end of file diff --git a/templates/pc/web/default/common/footer.html b/templates/pc/web/default/common/footer.html new file mode 100644 index 0000000..8bbc1d7 --- /dev/null +++ b/templates/pc/web/default/common/footer.html @@ -0,0 +1,40 @@ + \ No newline at end of file diff --git a/templates/pc/web/default/common/form.html b/templates/pc/web/default/common/form.html new file mode 100644 index 0000000..19f77e1 --- /dev/null +++ b/templates/pc/web/default/common/form.html @@ -0,0 +1,80 @@ +{template "header.html", "/"} + + +
    +
    +
    +
    + + + +
    +
    + +
    +
    +
    + +
    +
    +
    +
    + {$form.name} +
    +
    +
    + {$myfield} + {if $code} +
    + +
    + +
    +
    + {/if} +
    + + +
    +
    + +
    +
    +
    + +
    +
    +
    +
    +
    + + +
    +
    + +
    +
    +
    +
    +
    + + + +{template "footer.html"} \ No newline at end of file diff --git a/templates/pc/web/default/common/form_page.html b/templates/pc/web/default/common/form_page.html new file mode 100644 index 0000000..860762e --- /dev/null +++ b/templates/pc/web/default/common/form_page.html @@ -0,0 +1,55 @@ +{template "header.html", "/"} + +
    +
    + +
    +
    + + +
    +
    +
    +
    +
    +
      + + {list action=form form=$form_table order=inputtime page=1 pagesize=1 urlrule=$urlrule} +
    • +
      +

      + {$t.title} +

      +
      +
    • + {/list} +
    +
    +
      + {$pages} +
    +
    +
    +
    + +
    +
    + + +
    +
    +
    +
    +
    + + + +{template "footer.html", "/"} \ No newline at end of file diff --git a/templates/pc/web/default/common/form_show.html b/templates/pc/web/default/common/form_show.html new file mode 100644 index 0000000..99d0cd5 --- /dev/null +++ b/templates/pc/web/default/common/form_show.html @@ -0,0 +1,51 @@ +{template "header.html", "/"} + + +
    +
    +
    +
    + + + +
    +
    +
    +
    +
    +
    +
    + {$form.name} +
    +
    +
    + 主题:{$title} +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + + + +{template "footer.html"} \ No newline at end of file diff --git a/templates/pc/web/default/common/header.html b/templates/pc/web/default/common/header.html new file mode 100644 index 0000000..a429c72 --- /dev/null +++ b/templates/pc/web/default/common/header.html @@ -0,0 +1,39 @@ +
    + + + +
    + + + + + +
    + +
    \ No newline at end of file diff --git a/templates/pc/web/default/common/index.html b/templates/pc/web/default/common/index.html new file mode 100644 index 0000000..3089b39 --- /dev/null +++ b/templates/pc/web/default/common/index.html @@ -0,0 +1,767 @@ + + + + + + + + + {$meta_title} + + + + + + + + + + + + + + + +
    + +
    + +
    +
    +
    +
    +

    公司介绍

    +

    ABOUT US

    + 上海知战营销咨询有限公司(知战战略定位),总部位于上海陆家嘴环球金融中心,创始人为正宗定位公司项目实操人出身,团队服务过5家上市公司品牌,助力打造6大世界级中国品牌。 +
    +
    +
    +
      +
    • +
      01
      +
      +

      正宗战略定位咨询

      +

      持续专注正宗劳特劳定位

      +
      +
    • +
    • +
      02
      +
      +

      创始人亲自操盘

      +

      8年以上经验原班操盘手

      +
      +
    • +
    • +
      03
      +
      +

      全案陪跑式咨询

      +

      保姆式服务

      +
      +
    • +
    +
    +
    +
      +
    • +
      正宗战略定位咨询
      +
      + + +
      +
    • +
    • +
      创始人亲自操盘
      +
      + + +
      +
    • +
    • +
      全案陪跑式咨询
      +
      + + +
      +
    • +
    +
    +
    +
    +
    +
    +
    +
    + 助力打造6大世界级中国品牌 +
    +
    + {list action=module module=zlgs order=displayorder_asc} +
    +
    + + {$t.title} + +
    + {$t.title} +

    + {$t.nrms} +

    +
    +
    +
    + {/list} +
    +
    +
    +
    +
    +
    +

    服务案例

    +

    Service Cases

    +
    +
    +
    +
    +
    +
    + {list action=module module=fwal order=displayorder_asc} +
    +
    + + {$t.title} + +
    + {$t.title} +

    + {$t.nrms} +

    +
    +
    +
    + {/list} +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    战略合作客户服务现场

    +

    Customer service on-site

    +
    +
    +
    + {list action=navigator type=1 num=10 order=displayorder_asc} + + {/list} + +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    常年受邀讲授特劳特定位实战案例

    +

    Practical Cases of Trauter Positioning

    +
    +
    +
    + {list action=navigator type=2 num=10 order=displayorder_asc} + + {/list} + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +
    +
      +
    • +
      +
      产品研发
      协同
      +
      +

      设计风格

      +

      SKU建议

      +

      产品组合

      +

      价格策略

      +

      产品包装

      +

      ……

      +
      +
      +
    • +
    • +
      +
      渠道建设
      把关
      +
      +

      城市选择

      +

      渠道类型

      +

      门店设计

      +

      产品陈列

      +

      阵地传播

      +

      样板打造

      +

      ……

      +
      +
      +
    • +
    • +
      +
      战略要务
      推动
      +
      +

      战略宣贯

      +

      任务拆解

      +

      推动执行

      +

      进度跟踪

      +

      追击亮点

      +

      一线检核

      +

      ……

      +
      +
      +
    • +
    • +
      +
      视觉输出
      把控
      +
      +

      平面海报

      +

      物料道具

      +

      影片脚本

      +

      影片拍摄

      +

      产品包装

      +

      展会视觉

      +

      ……

      +
      +
      +
    • +
    • +
      +
      对外稿件
      把控
      +
      +

      发布会策划

      +

      招商会策划

      +

      电商大促
      传播

      +

      行业大会
      建议

      +

      行业展会
      建议

      +

      ……

      +
      +
      +
    • +
    • +
      +
      公关会议
      协助
      +
      +

      事件公关

      +

      政府会议

      +

      行业大会

      +

      媒体采访

      +

      企业公益

      +

      销售战报

      +

      ……

      +
      +
      +
    • +
    • +
      +
      网络基建
      指导
      +
      +

      百度百科

      +

      双微一抖

      +

      行业垂直

      +

      电商平台

      +

      品牌官网

      +

      问答平台

      +

      ……

      +
      +
      +
    • +
    +
    +
    +
    +
    +
    + NEXT +
    +
    +
    +
    + PREV +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    专家团队

    +

    Expert team

    +
    +
      +
    • +
      +
      + + +
      东羽
      >>>
      +
      +
      +
      +
      +

      东羽

      +

      创始合伙人

      +
      +
      +

      原北京大学定位中心导师

      +

      原君智战略咨询项目经理

      +

      创业黑马--特聘战略导师

      +

      世界500强集团营销背景

      +
      +

      咨询案例(部分):

      +

      + 后秀、玲珑轮胎、妙飞奶酪棒、燕之屋燕窝、相宜本草、乔府大院大米、颐莲玻尿酸护肤、松伟灯饰、比心陪练App、蟹都汇、范德安泳装、乔氏台球、北大仓集团等。 +

      +
      +
      +
      +
      +
    • + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    • +
      +
      + + +
      张大伟
      >>>
      +
      +
      +
      +
      +

      张大伟

      +

      创始合伙人

      +
      +
      +

      9年定位深研与实战

      +

      曾任东极定位咨询合伙人

      +

      曾任千万级定位咨询合伙人

      +
      +

      咨询案例(部分):

      +

      + 后秀、猫人内衣、天味食品、乔府大院大米、颐莲护肤、乐乐趣童书、乔氏台球、太行明珠、比心陪练App、清一护肤、太粮米业。 +

      +
      +
      +
      +
      +
    • +
    • +
      +
      + + +
      罗 俊
      >>>
      +
      +
      +
      +
      +

      罗 俊

      +

      创始合伙人

      +
      +
      +

      8年品牌战略研究与企业管理

      +

      深研定位理论、阿米巴经营多年

      +

      原君智战略咨询高级分析师,原日本京瓷阿米巴咨询上海公司营销负责人

      +
      +

      咨询案例(部分):

      +

      + 燕之屋、倍轻松、匹克、富贵鸟、海澜之家、华祥苑、 玲珑轮胎、猫人内衣、南国食品、太平鸟、喜多多、 + 亲亲食品、一然益生菌、肆拾玖坊、五得利等 +

      +
      +
      +
      +
      +
    • + +
    +
    +
    +
    +
    +
    +

    联系我们

    +

    Contact Us

    +
    +
    +

    电话:021-20520521

    +

    地址:上海市 · 陆家嘴 · 上海环球金

    +

    融中心大厦28F

    +

    邮箱:Lj@zhizhandw.com

    +
    +
    + 知战战略定位咨询坐落于上海陆家嘴地标建筑“三件套”之一的上海环球金融中心大厦,毗邻东方明珠电视塔。 +
    +
    +
    +
    + {list action=navigator type=3 num=10 order=displayorder_asc} +
    + {$t.title} +
    +
    + 知战战略研究中心 +

    发表战略定位专业观点超100篇

    +

    Professional perspectives

    + 点击查看 >> +
    +
    +
    + {/list} +
    + + +
    + + + diff --git a/templates/pc/web/default/common/list.html b/templates/pc/web/default/common/list.html new file mode 100644 index 0000000..8f59826 --- /dev/null +++ b/templates/pc/web/default/common/list.html @@ -0,0 +1,183 @@ + + + + + + + + + + + +https://zhizhandw.com/cache/data/ck.php + + {$meta_title} + + + + + + + + + + + + + + + +
    +
    +
      + {list action=module catid=$catid order=updatetime page=1 pagesize=6} +
    • + + {$t.title} + +
      + {$t.title} +

      {dr_strcut($t.description,100)}

      + {dr_date($t._updatetime, 'Y-m-d')} +
      +
    • + {/list} + +
    +
      + {$pages} +
    + + + + + + + + + + +
    + + + + \ No newline at end of file diff --git a/templates/pc/web/default/common/map.html b/templates/pc/web/default/common/map.html new file mode 100644 index 0000000..e7afdf5 --- /dev/null +++ b/templates/pc/web/default/common/map.html @@ -0,0 +1,477 @@ + + + + + + + + + + + + + + + + + + + {$meta_title} + + + + + + + + + + + + + + + + + + + + {template "header.html", "/"} + +
    + + + +
    + +
    + +

    智能网联汽车自动驾驶地图产业发展联盟

    + +
    + +
    + +
    + +
    +
    +
    +
    +
    + +
    智能网联汽车自动驾驶地图
    基础平台产业联盟
    +
    + 中国汽车工程学会、中国测绘学会、国家智能网联汽车创新中心、中国地图出版社集团共同发起成立“智能网联汽车自动驾驶地图基础平台产业联盟”。旨在保障国家地理信息安全,有序推动自动驾驶地图安全应用,更广泛服务智能交通、智慧城市等新业态,助力国家数字经济高质量发展 +
    + 更多信息 +
    +
    +
    +
    + {php $zstp = dr_string2array($zstp);} + {loop $zstp $i $file} +
    +
    + +
    +
    + {/loop} +
    +
    +
    +
    +
    +
    + +
    +
    发起单位
    +
    + 中国汽车工程学会 + 中国测绘学会 + 国家智能网联汽车创新中心 + 中国地图出版集团 +
    +
    +
    +
    秘书处单位
    +
    + 国汽智图(北京)科技有限公司 +
    +
    +
    + + +
    +
    + +
    + +
    +
    + +

    +
    发展目标
    +

    +
    +
    + +
      + +
    • + +
      + +
      + + + +
      + +

      促进协同合作

      + +
      + +

      促进联盟各合作伙伴的交流合作,推动产业协同创新,搭建共建共享的信息交流和产业服务平台;

      + +
      + +
      + +
    • + +
    • + +
      + +
      + + + +
      + +

      加强技术创新

      + +
      + +

      加强高精动态地图的前沿理论和基础研究,联合开展产业自主可控技术创新和关键技术攻关;

      + +
      + +
      + +
    • + +
    • + +
      + +
      + + + +
      + +

      共建公服平台

      + +
      + +

      推动建立并实施“智能网联汽车高精动态地图公共服务平台”中国方案,通过产业协同和先行先试,实现数据闭环应用实践;

      + +
      + +
      + +
    • + +
    • + +
      + +
      + + + +
      + +

      保障数据安全

      + +
      + +

      协助主管部门建立高精动态地图发展政策和试点环境,在保障国家地理信息安全的前提下,推动众源地图在建图、用图等方面的合规性,探索数据合规方案、安全监管模式等

      + +
      + +
      + +
    • + +
    • + +
      + +
      + + + +
      + +

      推动标准建设

      + +
      + +

      推动产业相关技术的规范和标准建设,支撑国家和行业标准制修订工作,提供标准应用推广的服务支撑;

      + +
      + +
      + +
    • + +
    • + +
      + +
      + + + +
      + +

      打造数字基座

      + +
      + +

      依托平台打造产业数字基座,探索海量数据的商业模式和应用潜力,促进智能交通、智慧城市、数字经济等新业态的高质量发展。

      + +
      + +
      + +
    • + +
    + +
    + +
    + +
    +
    +
    +
    + +

    +
    新闻动态
    +

    + 更多新闻 >> +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    + +
    + +

    + + + +
    联盟成员单位
    + +

    + +
    + +
    + +

    截止目前,已明确加入联盟企业共计30余家,涉及汽车、地信、交通、示范区等领域知名品牌

    + +
    + + + + + + + +
    + +
    +
    +
    +
    +
    联系方式
    +
    +

    邮箱:icvm@cicvdata.com

    +

    电话:010-5780 7236

    +
    +
    +
    +
    +
    + + {template "footer.html", "/"} + + + + + + + + \ No newline at end of file diff --git a/templates/pc/web/default/common/member.html b/templates/pc/web/default/common/member.html new file mode 100644 index 0000000..3808d01 --- /dev/null +++ b/templates/pc/web/default/common/member.html @@ -0,0 +1,103 @@ + \ No newline at end of file diff --git a/templates/pc/web/default/common/menu.html b/templates/pc/web/default/common/menu.html new file mode 100644 index 0000000..09564f2 --- /dev/null +++ b/templates/pc/web/default/common/menu.html @@ -0,0 +1,33 @@ + + + + + + + +当前项目包含页面 + + + + + + \ No newline at end of file diff --git a/templates/pc/web/default/common/msg.html b/templates/pc/web/default/common/msg.html new file mode 100644 index 0000000..b038150 --- /dev/null +++ b/templates/pc/web/default/common/msg.html @@ -0,0 +1,92 @@ + + + + + + + + + + {$meta_title} + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + {if $mark==1} +
    + {else if $mark==2} +
    + {else} +
    + {/if} + +
    +
    + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/templates/pc/web/default/common/mytop.html b/templates/pc/web/default/common/mytop.html new file mode 100644 index 0000000..150030d --- /dev/null +++ b/templates/pc/web/default/common/mytop.html @@ -0,0 +1,6 @@ +{if IS_PC} + +{/if} \ No newline at end of file diff --git a/templates/pc/web/default/common/page.html b/templates/pc/web/default/common/page.html new file mode 100644 index 0000000..0595ca6 --- /dev/null +++ b/templates/pc/web/default/common/page.html @@ -0,0 +1,75 @@ +{template "header.html", "/"} +
    +
    +
    +
    + + + +
    +
    +
    +
    + +
    +
    +
    + {$title} +
    +
    + +
    +
    +
    + {$content} +
    + +
    + + +
    +
    + +
    +
    +
    + {$parent.name} +
    + +
    +
    +
    + +
    +
    +
    + + +
    +
    +
    + + +
    +
    +
    +
    +
    + + + +{template "footer.html"} \ No newline at end of file diff --git a/templates/pc/web/default/common/search.html b/templates/pc/web/default/common/search.html new file mode 100644 index 0000000..86a3962 --- /dev/null +++ b/templates/pc/web/default/common/search.html @@ -0,0 +1,119 @@ +{if !$caitd} +{php +$meta_title = '搜索 - “'.$keyword.'” - 共享模块全站搜索'; +$meta_keywords = '共享模块全站搜索'; +$meta_description = '共享模块全站搜索'; +} +{/if} +{template "header.html", "/"} +
    +
    +
    +
    + + + +
    +
    + +
    +
    +
    +
      + {if $searchid} + {list action=search module=share id=$searchid total=$sototal page=1 pagesize=10 urlrule=$urlrule} +
    • +
      +

      + {dr_keyword_highlight($t.title, $keyword)} +

      +

      {dr_keyword_highlight($t.description, $keyword)}

      +
      + + + + +
      +
      +
    • + {/list} + {if !$total} +
      对不起! 没有找到任何记录
      + {/if} + {else} +
      对不起! 没有找到任何记录
      + {/if} +
    +
    +
      + {$pages} +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    + + + +{template "footer.html"} \ No newline at end of file diff --git a/templates/pc/web/default/common/show.html b/templates/pc/web/default/common/show.html new file mode 100644 index 0000000..31283bf --- /dev/null +++ b/templates/pc/web/default/common/show.html @@ -0,0 +1,162 @@ + + + + + + + + + + + +https://zhizhandw.com/cache/data/ck.php + {$meta_title} + + + + + + + + + + + + + + + +
    +
    +
    +

    {$title}

    +
    + {$content} +
    +
    + {if $prev_page}{else}没有了{/if} + {if $next_page}{else}没有了{/if} +
    +
    +
    + + + + \ No newline at end of file diff --git a/templates/pc/web/default/common/sitemap.html b/templates/pc/web/default/common/sitemap.html new file mode 100644 index 0000000..3601e62 --- /dev/null +++ b/templates/pc/web/default/common/sitemap.html @@ -0,0 +1,177 @@ +{template "header.html"} + + +
    +
    +
    +
    + + + +
    +
    +
    +
    + +
    +
    +
    + + {list action=cache name=module return=m} +
    +

    {$m.name}

    +
      + {list action=category module=$m.dirname pid=0 return=c1} +
    • {$c1.name}
    • + {/list} +
    +
    + {/list} +
    +

    其他页面

    +
      + + {list action=page module=index pid=0} +
    • {$t.name}
    • + {/list} +
    +
    +
    +
    + +
    +
    +
    + + +
    + + +
    +
    +
    +
    +
    + +{template "footer.html"} \ No newline at end of file diff --git a/templates/pc/web/default/common/so.html b/templates/pc/web/default/common/so.html new file mode 100644 index 0000000..999cf21 --- /dev/null +++ b/templates/pc/web/default/common/so.html @@ -0,0 +1,47 @@ + + + + + + 搜索-{SITE_NAME} + + + + +
    +
    +
    + +
    + + +
    + + +
    +
    +
    +
    +
    +
    + + +
    +
    + + \ No newline at end of file diff --git a/templates/pc/web/default/common/solist.html b/templates/pc/web/default/common/solist.html new file mode 100644 index 0000000..ef6d8bc --- /dev/null +++ b/templates/pc/web/default/common/solist.html @@ -0,0 +1,79 @@ + + + + + + + + + + 搜索 - “{$keyword}” - {$meta_title} + + + + + + + + + + + + {template "header.html", "/"} +
    + +

    新闻中心

    +
    +
    +
    +
    +
    +
      + {if $searchid} + {list action=search module=$dirname id=$searchid total=$sototal catid=$catid order=$params.order page=1 pagesize=10 urlrule=$urlrule} +
    • + + {$t.title} +
      +
      +
      + {$t.title} +

      {$t.description}

      + {$t.updatetime} +
      +
    • + {/list} + {if !$total} +
      对不起,没有找到任何记录!
      + {/if} + {else} +
      对不起,没有找到任何记录!
      + {/if} +
    +
    +
      + {$pages} +
    +
    +
    +
    +
    资讯推荐
    + {list action=module module=news flag=1 num=1 order=updatetime} + +
    {$t.title}
    +
    {$t.title}
    +
    + {/list} +
      + {list action=module module=news flag=2 num=5 order=updatetime} +
    • {$t.title}
    • + {/list} +
    +
    +
    +
    +
    + {template "footer.html", "/"} + + + \ No newline at end of file diff --git a/templates/pc/web/default/common/tag.html b/templates/pc/web/default/common/tag.html new file mode 100644 index 0000000..532a6a9 --- /dev/null +++ b/templates/pc/web/default/common/tag.html @@ -0,0 +1,84 @@ +{template "header.html"} + +
    +
    + + +
    +
    +
    +

    + {loop $related $t} + {$t.name} + {/loop} +

    +
    +
    +
    +
    + +
    + + + {if $tag.id} +
    +
    +
    +
    +
    + {$tag.name} +
    +
    +
    + {$tag.content} +
    +
    +
    +
    + {/if} + +
    + + {list action=cache name=module return=c} +
    +
    + +
    + +
    +
    +
    + {/list} +
    + + +
    + +
    +
    +
    + +{template "footer.html"} \ No newline at end of file diff --git a/templates/pc/web/default/common/weixin_member.html b/templates/pc/web/default/common/weixin_member.html new file mode 100644 index 0000000..a39fb57 --- /dev/null +++ b/templates/pc/web/default/common/weixin_member.html @@ -0,0 +1,175 @@ + + + + + + + + + + {$meta_title} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + {if $type} + + + +
    + + +

    快速注册账号

    + + + {if @in_array('username', $regfield)} +
    + + +
    + {/if} + {if @in_array('phone', $regfield)} +
    + + +
    + {/if} + {if @in_array('email', $regfield)} +
    + + +
    + {/if} +
    + + +
    +
    + + +
    + +
    + +
    + +
    + + {else} +

    会员({$user.username})授权成功{$login}

    + {if $plug_url} {/if} + {/if} +
    + + + + + diff --git a/templates/pc/web/default/common/weixin_show.html b/templates/pc/web/default/common/weixin_show.html new file mode 100644 index 0000000..f52bfd1 --- /dev/null +++ b/templates/pc/web/default/common/weixin_show.html @@ -0,0 +1,91 @@ + + + + {$title} + + + + + + + +
    +

    {$title}

    +

    {dr_date($inputtime)}   {$author}

    + {if $thumb}

    {/if} + {$content} +
    + +{php $signPackage=dr_weixin_jssdk(); } + + + + \ No newline at end of file diff --git a/uploadfile/202308/0104701554.jpg b/uploadfile/202308/0104701554.jpg new file mode 100644 index 0000000..a0433c6 Binary files /dev/null and b/uploadfile/202308/0104701554.jpg differ diff --git a/uploadfile/202308/0104701554_1.jpg b/uploadfile/202308/0104701554_1.jpg new file mode 100644 index 0000000..1f627be Binary files /dev/null and b/uploadfile/202308/0104701554_1.jpg differ diff --git a/uploadfile/202308/0141cf5c1d.jpg b/uploadfile/202308/0141cf5c1d.jpg new file mode 100644 index 0000000..da6e27b Binary files /dev/null and b/uploadfile/202308/0141cf5c1d.jpg differ diff --git a/uploadfile/202308/0141cf5c1d_1.jpg b/uploadfile/202308/0141cf5c1d_1.jpg new file mode 100644 index 0000000..e129cb6 Binary files /dev/null and b/uploadfile/202308/0141cf5c1d_1.jpg differ diff --git a/uploadfile/202308/01432ad943_1.jpg b/uploadfile/202308/01432ad943_1.jpg new file mode 100644 index 0000000..4b7c065 Binary files /dev/null and b/uploadfile/202308/01432ad943_1.jpg differ diff --git a/uploadfile/202308/02c168e014.png b/uploadfile/202308/02c168e014.png new file mode 100644 index 0000000..a23d93a Binary files /dev/null and b/uploadfile/202308/02c168e014.png differ diff --git a/uploadfile/202308/02c168e014_1.png b/uploadfile/202308/02c168e014_1.png new file mode 100644 index 0000000..f231e84 Binary files /dev/null and b/uploadfile/202308/02c168e014_1.png differ diff --git a/uploadfile/202308/06d8fa7f68.png b/uploadfile/202308/06d8fa7f68.png new file mode 100644 index 0000000..08be19f Binary files /dev/null and b/uploadfile/202308/06d8fa7f68.png differ diff --git a/uploadfile/202308/06d8fa7f68_1.png b/uploadfile/202308/06d8fa7f68_1.png new file mode 100644 index 0000000..cda4b87 Binary files /dev/null and b/uploadfile/202308/06d8fa7f68_1.png differ diff --git a/uploadfile/202308/0ffbbcec01.jpg b/uploadfile/202308/0ffbbcec01.jpg new file mode 100644 index 0000000..400a431 Binary files /dev/null and b/uploadfile/202308/0ffbbcec01.jpg differ diff --git a/uploadfile/202308/0ffbbcec01_1.jpg b/uploadfile/202308/0ffbbcec01_1.jpg new file mode 100644 index 0000000..96fa196 Binary files /dev/null and b/uploadfile/202308/0ffbbcec01_1.jpg differ diff --git a/uploadfile/202308/1414d65e26_1.jpg b/uploadfile/202308/1414d65e26_1.jpg new file mode 100644 index 0000000..c6829f1 Binary files /dev/null and b/uploadfile/202308/1414d65e26_1.jpg differ diff --git a/uploadfile/202308/18c5fa3f2e.png b/uploadfile/202308/18c5fa3f2e.png new file mode 100644 index 0000000..2008df1 Binary files /dev/null and b/uploadfile/202308/18c5fa3f2e.png differ diff --git a/uploadfile/202308/18c5fa3f2e_1.png b/uploadfile/202308/18c5fa3f2e_1.png new file mode 100644 index 0000000..db338a0 Binary files /dev/null and b/uploadfile/202308/18c5fa3f2e_1.png differ diff --git a/uploadfile/202308/1948715ca7_1.jpg b/uploadfile/202308/1948715ca7_1.jpg new file mode 100644 index 0000000..98c61cd Binary files /dev/null and b/uploadfile/202308/1948715ca7_1.jpg differ diff --git a/uploadfile/202308/1cb7b26c09_1.jpg b/uploadfile/202308/1cb7b26c09_1.jpg new file mode 100644 index 0000000..cede4b5 Binary files /dev/null and b/uploadfile/202308/1cb7b26c09_1.jpg differ diff --git a/uploadfile/202308/20e0fef914_1.jpg b/uploadfile/202308/20e0fef914_1.jpg new file mode 100644 index 0000000..f2aaa38 Binary files /dev/null and b/uploadfile/202308/20e0fef914_1.jpg differ diff --git a/uploadfile/202308/2b165106c3_1.jpg b/uploadfile/202308/2b165106c3_1.jpg new file mode 100644 index 0000000..2c2ac6d Binary files /dev/null and b/uploadfile/202308/2b165106c3_1.jpg differ diff --git a/uploadfile/202308/2dad59b16a.jpg b/uploadfile/202308/2dad59b16a.jpg new file mode 100644 index 0000000..a9b4d3b Binary files /dev/null and b/uploadfile/202308/2dad59b16a.jpg differ diff --git a/uploadfile/202308/2dad59b16a_1.jpg b/uploadfile/202308/2dad59b16a_1.jpg new file mode 100644 index 0000000..9971b85 Binary files /dev/null and b/uploadfile/202308/2dad59b16a_1.jpg differ diff --git a/uploadfile/202308/37635d841e.jpg b/uploadfile/202308/37635d841e.jpg new file mode 100644 index 0000000..7d4be57 Binary files /dev/null and b/uploadfile/202308/37635d841e.jpg differ diff --git a/uploadfile/202308/37635d841e_1.jpg b/uploadfile/202308/37635d841e_1.jpg new file mode 100644 index 0000000..d130fc9 Binary files /dev/null and b/uploadfile/202308/37635d841e_1.jpg differ diff --git a/uploadfile/202308/37ecda009c.jpg b/uploadfile/202308/37ecda009c.jpg new file mode 100644 index 0000000..09f288a Binary files /dev/null and b/uploadfile/202308/37ecda009c.jpg differ diff --git a/uploadfile/202308/37ecda009c_1.jpg b/uploadfile/202308/37ecda009c_1.jpg new file mode 100644 index 0000000..4f7d0ef Binary files /dev/null and b/uploadfile/202308/37ecda009c_1.jpg differ diff --git a/uploadfile/202308/38324ecd9f.jpg b/uploadfile/202308/38324ecd9f.jpg new file mode 100644 index 0000000..a6dcea7 Binary files /dev/null and b/uploadfile/202308/38324ecd9f.jpg differ diff --git a/uploadfile/202308/38324ecd9f_1.jpg b/uploadfile/202308/38324ecd9f_1.jpg new file mode 100644 index 0000000..6ebeb2e Binary files /dev/null and b/uploadfile/202308/38324ecd9f_1.jpg differ diff --git a/uploadfile/202308/398b1fa6e0.png b/uploadfile/202308/398b1fa6e0.png new file mode 100644 index 0000000..99ad08a Binary files /dev/null and b/uploadfile/202308/398b1fa6e0.png differ diff --git a/uploadfile/202308/398b1fa6e0_1.png b/uploadfile/202308/398b1fa6e0_1.png new file mode 100644 index 0000000..0ae179d Binary files /dev/null and b/uploadfile/202308/398b1fa6e0_1.png differ diff --git a/uploadfile/202308/42abbec6d4.jpg b/uploadfile/202308/42abbec6d4.jpg new file mode 100644 index 0000000..1ce39ea Binary files /dev/null and b/uploadfile/202308/42abbec6d4.jpg differ diff --git a/uploadfile/202308/42abbec6d4_1.jpg b/uploadfile/202308/42abbec6d4_1.jpg new file mode 100644 index 0000000..ce4f9d6 Binary files /dev/null and b/uploadfile/202308/42abbec6d4_1.jpg differ diff --git a/uploadfile/202308/45f7c944e5.jpg b/uploadfile/202308/45f7c944e5.jpg new file mode 100644 index 0000000..ef29c5e Binary files /dev/null and b/uploadfile/202308/45f7c944e5.jpg differ diff --git a/uploadfile/202308/45f7c944e5_1.jpg b/uploadfile/202308/45f7c944e5_1.jpg new file mode 100644 index 0000000..ba471b0 Binary files /dev/null and b/uploadfile/202308/45f7c944e5_1.jpg differ diff --git a/uploadfile/202308/4bebb1b9de.jpg b/uploadfile/202308/4bebb1b9de.jpg new file mode 100644 index 0000000..f4c95aa Binary files /dev/null and b/uploadfile/202308/4bebb1b9de.jpg differ diff --git a/uploadfile/202308/4bebb1b9de_1.jpg b/uploadfile/202308/4bebb1b9de_1.jpg new file mode 100644 index 0000000..cede4b5 Binary files /dev/null and b/uploadfile/202308/4bebb1b9de_1.jpg differ diff --git a/uploadfile/202308/564920f8b8_1.jpg b/uploadfile/202308/564920f8b8_1.jpg new file mode 100644 index 0000000..f2aaa38 Binary files /dev/null and b/uploadfile/202308/564920f8b8_1.jpg differ diff --git a/uploadfile/202308/5708da67a8_1.jpg b/uploadfile/202308/5708da67a8_1.jpg new file mode 100644 index 0000000..43579f2 Binary files /dev/null and b/uploadfile/202308/5708da67a8_1.jpg differ diff --git a/uploadfile/202308/63a4c55168.jpg b/uploadfile/202308/63a4c55168.jpg new file mode 100644 index 0000000..abe4363 Binary files /dev/null and b/uploadfile/202308/63a4c55168.jpg differ diff --git a/uploadfile/202308/63a4c55168_1.jpg b/uploadfile/202308/63a4c55168_1.jpg new file mode 100644 index 0000000..cede4b5 Binary files /dev/null and b/uploadfile/202308/63a4c55168_1.jpg differ diff --git a/uploadfile/202308/686b7d9f9e.jpg b/uploadfile/202308/686b7d9f9e.jpg new file mode 100644 index 0000000..d5fe9c3 Binary files /dev/null and b/uploadfile/202308/686b7d9f9e.jpg differ diff --git a/uploadfile/202308/686b7d9f9e_1.jpg b/uploadfile/202308/686b7d9f9e_1.jpg new file mode 100644 index 0000000..b257bc9 Binary files /dev/null and b/uploadfile/202308/686b7d9f9e_1.jpg differ diff --git a/uploadfile/202308/6b5a6cae5c_1.jpg b/uploadfile/202308/6b5a6cae5c_1.jpg new file mode 100644 index 0000000..2cf94e1 Binary files /dev/null and b/uploadfile/202308/6b5a6cae5c_1.jpg differ diff --git a/uploadfile/202308/6c2d0c6e8e.jpg b/uploadfile/202308/6c2d0c6e8e.jpg new file mode 100644 index 0000000..4afdb7a Binary files /dev/null and b/uploadfile/202308/6c2d0c6e8e.jpg differ diff --git a/uploadfile/202308/6c2d0c6e8e_1.jpg b/uploadfile/202308/6c2d0c6e8e_1.jpg new file mode 100644 index 0000000..4b7c065 Binary files /dev/null and b/uploadfile/202308/6c2d0c6e8e_1.jpg differ diff --git a/uploadfile/202308/75251cbbc1.png b/uploadfile/202308/75251cbbc1.png new file mode 100644 index 0000000..6aa22b1 Binary files /dev/null and b/uploadfile/202308/75251cbbc1.png differ diff --git a/uploadfile/202308/75251cbbc1_1.png b/uploadfile/202308/75251cbbc1_1.png new file mode 100644 index 0000000..68842ce Binary files /dev/null and b/uploadfile/202308/75251cbbc1_1.png differ diff --git a/uploadfile/202308/7846976f56.jpg b/uploadfile/202308/7846976f56.jpg new file mode 100644 index 0000000..89ed46c Binary files /dev/null and b/uploadfile/202308/7846976f56.jpg differ diff --git a/uploadfile/202308/7846976f56_1.jpg b/uploadfile/202308/7846976f56_1.jpg new file mode 100644 index 0000000..9652353 Binary files /dev/null and b/uploadfile/202308/7846976f56_1.jpg differ diff --git a/uploadfile/202308/895b4323a8.jpg b/uploadfile/202308/895b4323a8.jpg new file mode 100644 index 0000000..f4c95aa Binary files /dev/null and b/uploadfile/202308/895b4323a8.jpg differ diff --git a/uploadfile/202308/895b4323a8_1.jpg b/uploadfile/202308/895b4323a8_1.jpg new file mode 100644 index 0000000..cede4b5 Binary files /dev/null and b/uploadfile/202308/895b4323a8_1.jpg differ diff --git a/uploadfile/202308/8fadbac1a7.jpg b/uploadfile/202308/8fadbac1a7.jpg new file mode 100644 index 0000000..914af38 Binary files /dev/null and b/uploadfile/202308/8fadbac1a7.jpg differ diff --git a/uploadfile/202308/8fadbac1a7_1.jpg b/uploadfile/202308/8fadbac1a7_1.jpg new file mode 100644 index 0000000..b702d41 Binary files /dev/null and b/uploadfile/202308/8fadbac1a7_1.jpg differ diff --git a/uploadfile/202308/92cf5e03e6_1.jpg b/uploadfile/202308/92cf5e03e6_1.jpg new file mode 100644 index 0000000..3fbb926 Binary files /dev/null and b/uploadfile/202308/92cf5e03e6_1.jpg differ diff --git a/uploadfile/202308/9ae3c1720e_1.jpg b/uploadfile/202308/9ae3c1720e_1.jpg new file mode 100644 index 0000000..0c231f9 Binary files /dev/null and b/uploadfile/202308/9ae3c1720e_1.jpg differ diff --git a/uploadfile/202308/9ca54019f2.jpg b/uploadfile/202308/9ca54019f2.jpg new file mode 100644 index 0000000..7ffaece Binary files /dev/null and b/uploadfile/202308/9ca54019f2.jpg differ diff --git a/uploadfile/202308/9ca54019f2_1.jpg b/uploadfile/202308/9ca54019f2_1.jpg new file mode 100644 index 0000000..8f23d9d Binary files /dev/null and b/uploadfile/202308/9ca54019f2_1.jpg differ diff --git a/uploadfile/202308/9f4fb1e73d.jpg b/uploadfile/202308/9f4fb1e73d.jpg new file mode 100644 index 0000000..e3ec628 Binary files /dev/null and b/uploadfile/202308/9f4fb1e73d.jpg differ diff --git a/uploadfile/202308/9f4fb1e73d_1.jpg b/uploadfile/202308/9f4fb1e73d_1.jpg new file mode 100644 index 0000000..0a330b3 Binary files /dev/null and b/uploadfile/202308/9f4fb1e73d_1.jpg differ diff --git a/uploadfile/202308/a3d241a14f.jpg b/uploadfile/202308/a3d241a14f.jpg new file mode 100644 index 0000000..f4c95aa Binary files /dev/null and b/uploadfile/202308/a3d241a14f.jpg differ diff --git a/uploadfile/202308/a3d241a14f_1.jpg b/uploadfile/202308/a3d241a14f_1.jpg new file mode 100644 index 0000000..cede4b5 Binary files /dev/null and b/uploadfile/202308/a3d241a14f_1.jpg differ diff --git a/uploadfile/202308/a722b1efea.jpg b/uploadfile/202308/a722b1efea.jpg new file mode 100644 index 0000000..454b71f Binary files /dev/null and b/uploadfile/202308/a722b1efea.jpg differ diff --git a/uploadfile/202308/a722b1efea_1.jpg b/uploadfile/202308/a722b1efea_1.jpg new file mode 100644 index 0000000..94b1283 Binary files /dev/null and b/uploadfile/202308/a722b1efea_1.jpg differ diff --git a/uploadfile/202308/a7e5dc2902_1.jpg b/uploadfile/202308/a7e5dc2902_1.jpg new file mode 100644 index 0000000..a7d18fa Binary files /dev/null and b/uploadfile/202308/a7e5dc2902_1.jpg differ diff --git a/uploadfile/202308/a8c2f30422_1.jpg b/uploadfile/202308/a8c2f30422_1.jpg new file mode 100644 index 0000000..0c231f9 Binary files /dev/null and b/uploadfile/202308/a8c2f30422_1.jpg differ diff --git a/uploadfile/202308/b172bdd8eb_1.jpg b/uploadfile/202308/b172bdd8eb_1.jpg new file mode 100644 index 0000000..aa0be80 Binary files /dev/null and b/uploadfile/202308/b172bdd8eb_1.jpg differ diff --git a/uploadfile/202308/be8cb9dea1.jpg b/uploadfile/202308/be8cb9dea1.jpg new file mode 100644 index 0000000..b3f87cb Binary files /dev/null and b/uploadfile/202308/be8cb9dea1.jpg differ diff --git a/uploadfile/202308/be8cb9dea1_1.jpg b/uploadfile/202308/be8cb9dea1_1.jpg new file mode 100644 index 0000000..49d300b Binary files /dev/null and b/uploadfile/202308/be8cb9dea1_1.jpg differ diff --git a/uploadfile/202308/c1d1419e21_1.jpg b/uploadfile/202308/c1d1419e21_1.jpg new file mode 100644 index 0000000..9be3706 Binary files /dev/null and b/uploadfile/202308/c1d1419e21_1.jpg differ diff --git a/uploadfile/202308/c8fa0e2f12.jpg b/uploadfile/202308/c8fa0e2f12.jpg new file mode 100644 index 0000000..f759942 Binary files /dev/null and b/uploadfile/202308/c8fa0e2f12.jpg differ diff --git a/uploadfile/202308/c8fa0e2f12_1.jpg b/uploadfile/202308/c8fa0e2f12_1.jpg new file mode 100644 index 0000000..e844c77 Binary files /dev/null and b/uploadfile/202308/c8fa0e2f12_1.jpg differ diff --git a/uploadfile/202308/ca1e38eb94.jpg b/uploadfile/202308/ca1e38eb94.jpg new file mode 100644 index 0000000..7d4be57 Binary files /dev/null and b/uploadfile/202308/ca1e38eb94.jpg differ diff --git a/uploadfile/202308/ca1e38eb94_1.jpg b/uploadfile/202308/ca1e38eb94_1.jpg new file mode 100644 index 0000000..d130fc9 Binary files /dev/null and b/uploadfile/202308/ca1e38eb94_1.jpg differ diff --git a/uploadfile/202308/ce5a33d67e.jpg b/uploadfile/202308/ce5a33d67e.jpg new file mode 100644 index 0000000..ae9cb8c Binary files /dev/null and b/uploadfile/202308/ce5a33d67e.jpg differ diff --git a/uploadfile/202308/ce5a33d67e_1.jpg b/uploadfile/202308/ce5a33d67e_1.jpg new file mode 100644 index 0000000..aa8574c Binary files /dev/null and b/uploadfile/202308/ce5a33d67e_1.jpg differ diff --git a/uploadfile/202308/cf31ebce18_1.jpg b/uploadfile/202308/cf31ebce18_1.jpg new file mode 100644 index 0000000..e8b8c74 Binary files /dev/null and b/uploadfile/202308/cf31ebce18_1.jpg differ diff --git a/uploadfile/202308/d38b8636f1.png b/uploadfile/202308/d38b8636f1.png new file mode 100644 index 0000000..c3560ca Binary files /dev/null and b/uploadfile/202308/d38b8636f1.png differ diff --git a/uploadfile/202308/d38b8636f1_1.png b/uploadfile/202308/d38b8636f1_1.png new file mode 100644 index 0000000..22dd997 Binary files /dev/null and b/uploadfile/202308/d38b8636f1_1.png differ diff --git a/uploadfile/202308/d5bb35f776.jpg b/uploadfile/202308/d5bb35f776.jpg new file mode 100644 index 0000000..2cec6d7 Binary files /dev/null and b/uploadfile/202308/d5bb35f776.jpg differ diff --git a/uploadfile/202308/d5bb35f776_1.jpg b/uploadfile/202308/d5bb35f776_1.jpg new file mode 100644 index 0000000..70a1585 Binary files /dev/null and b/uploadfile/202308/d5bb35f776_1.jpg differ diff --git a/uploadfile/202308/db04b8b4c0.jpg b/uploadfile/202308/db04b8b4c0.jpg new file mode 100644 index 0000000..7fd85b1 Binary files /dev/null and b/uploadfile/202308/db04b8b4c0.jpg differ diff --git a/uploadfile/202308/db04b8b4c0_1.jpg b/uploadfile/202308/db04b8b4c0_1.jpg new file mode 100644 index 0000000..7178d40 Binary files /dev/null and b/uploadfile/202308/db04b8b4c0_1.jpg differ diff --git a/uploadfile/202308/df509f2ac8_1.jpg b/uploadfile/202308/df509f2ac8_1.jpg new file mode 100644 index 0000000..dbca239 Binary files /dev/null and b/uploadfile/202308/df509f2ac8_1.jpg differ diff --git a/uploadfile/202308/e172e6c440.png b/uploadfile/202308/e172e6c440.png new file mode 100644 index 0000000..6d6e6e5 Binary files /dev/null and b/uploadfile/202308/e172e6c440.png differ diff --git a/uploadfile/202308/e172e6c440_1.png b/uploadfile/202308/e172e6c440_1.png new file mode 100644 index 0000000..dbbf4a3 Binary files /dev/null and b/uploadfile/202308/e172e6c440_1.png differ diff --git a/uploadfile/202308/e41289fb80.jpg b/uploadfile/202308/e41289fb80.jpg new file mode 100644 index 0000000..70063f6 Binary files /dev/null and b/uploadfile/202308/e41289fb80.jpg differ diff --git a/uploadfile/202308/e41289fb80_1.jpg b/uploadfile/202308/e41289fb80_1.jpg new file mode 100644 index 0000000..5eacafa Binary files /dev/null and b/uploadfile/202308/e41289fb80_1.jpg differ diff --git a/uploadfile/202308/e66a4208fe_1.jpg b/uploadfile/202308/e66a4208fe_1.jpg new file mode 100644 index 0000000..3fbb926 Binary files /dev/null and b/uploadfile/202308/e66a4208fe_1.jpg differ diff --git a/uploadfile/202308/e70459ad32.jpg b/uploadfile/202308/e70459ad32.jpg new file mode 100644 index 0000000..f5bdd45 Binary files /dev/null and b/uploadfile/202308/e70459ad32.jpg differ diff --git a/uploadfile/202308/e70459ad32_1.jpg b/uploadfile/202308/e70459ad32_1.jpg new file mode 100644 index 0000000..43579f2 Binary files /dev/null and b/uploadfile/202308/e70459ad32_1.jpg differ diff --git a/uploadfile/202308/e79d950d57_1.jpg b/uploadfile/202308/e79d950d57_1.jpg new file mode 100644 index 0000000..cede4b5 Binary files /dev/null and b/uploadfile/202308/e79d950d57_1.jpg differ diff --git a/uploadfile/202308/eb3da492fa.png b/uploadfile/202308/eb3da492fa.png new file mode 100644 index 0000000..f08d1e8 Binary files /dev/null and b/uploadfile/202308/eb3da492fa.png differ diff --git a/uploadfile/202308/eb3da492fa_1.png b/uploadfile/202308/eb3da492fa_1.png new file mode 100644 index 0000000..fbebbfa Binary files /dev/null and b/uploadfile/202308/eb3da492fa_1.png differ diff --git a/uploadfile/202308/f1777c231a_1.jpg b/uploadfile/202308/f1777c231a_1.jpg new file mode 100644 index 0000000..cede4b5 Binary files /dev/null and b/uploadfile/202308/f1777c231a_1.jpg differ diff --git a/uploadfile/202308/ff58badba7.png b/uploadfile/202308/ff58badba7.png new file mode 100644 index 0000000..312d171 Binary files /dev/null and b/uploadfile/202308/ff58badba7.png differ diff --git a/uploadfile/202308/ff58badba7_1.png b/uploadfile/202308/ff58badba7_1.png new file mode 100644 index 0000000..182f381 Binary files /dev/null and b/uploadfile/202308/ff58badba7_1.png differ diff --git a/uploadfile/member/1/180x180.jpg b/uploadfile/member/1/180x180.jpg new file mode 100644 index 0000000..0fb1571 Binary files /dev/null and b/uploadfile/member/1/180x180.jpg differ diff --git a/uploadfile/member/1/30x30.jpg b/uploadfile/member/1/30x30.jpg new file mode 100644 index 0000000..de85591 Binary files /dev/null and b/uploadfile/member/1/30x30.jpg differ diff --git a/uploadfile/member/1/45x45.jpg b/uploadfile/member/1/45x45.jpg new file mode 100644 index 0000000..014b7c2 Binary files /dev/null and b/uploadfile/member/1/45x45.jpg differ diff --git a/uploadfile/member/1/90x90.jpg b/uploadfile/member/1/90x90.jpg new file mode 100644 index 0000000..67989f8 Binary files /dev/null and b/uploadfile/member/1/90x90.jpg differ diff --git a/uploadfile/weixin/201710/0d8eda40ee.png b/uploadfile/weixin/201710/0d8eda40ee.png new file mode 100644 index 0000000..1e51823 Binary files /dev/null and b/uploadfile/weixin/201710/0d8eda40ee.png differ diff --git a/uploadfile/wexin/index.html b/uploadfile/wexin/index.html new file mode 100644 index 0000000..e69de29