").append(b.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},b.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){b.fn[t]=function(e){return this.on(t,e)}}),b.each(["get","post"],function(e,n){b[n]=function(e,r,i,o){return b.isFunction(r)&&(o=o||i,i=r,r=t),b.ajax({url:e,type:n,dataType:o,data:r,success:i})}}),b.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:"GET",isLocal:Nn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Dn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Mn(Mn(e,b.ajaxSettings),t):Mn(b.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){"object"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,u,l,c,p=b.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?b(f):b.event,h=b.Deferred(),g=b.Callbacks("once memory"),m=p.statusCode||{},y={},v={},x=0,T="canceled",N={readyState:0,getResponseHeader:function(e){var t;if(2===x){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===x?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return x||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return x||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>x)for(t in e)m[t]=[m[t],e[t]];else N.always(e[N.status]);return this},abort:function(e){var t=e||T;return l&&l.abort(t),k(0,t),this}};if(h.promise(N).complete=g.add,N.success=N.done,N.error=N.fail,p.url=((e||p.url||yn)+"").replace(xn,"").replace(kn,mn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=b.trim(p.dataType||"*").toLowerCase().match(w)||[""],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||("http:"===r[1]?80:443))==(mn[3]||("http:"===mn[1]?80:443)))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=b.param(p.data,p.traditional)),qn(An,p,n,N),2===x)return N;u=p.global,u&&0===b.active++&&b.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Cn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,"$1_="+vn++):o+(bn.test(o)?"&":"?")+"_="+vn++)),p.ifModified&&(b.lastModified[o]&&N.setRequestHeader("If-Modified-Since",b.lastModified[o]),b.etag[o]&&N.setRequestHeader("If-None-Match",b.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&N.setRequestHeader("Content-Type",p.contentType),N.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Dn+"; q=0.01":""):p.accepts["*"]);for(i in p.headers)N.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,N,p)===!1||2===x))return N.abort();T="abort";for(i in{success:1,error:1,complete:1})N[i](p[i]);if(l=qn(jn,p,n,N)){N.readyState=1,u&&d.trigger("ajaxSend",[N,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){N.abort("timeout")},p.timeout));try{x=1,l.send(y,k)}catch(C){if(!(2>x))throw C;k(-1,C)}}else k(-1,"No Transport");function k(e,n,r,i){var c,y,v,w,T,C=n;2!==x&&(x=2,s&&clearTimeout(s),l=t,a=i||"",N.readyState=e>0?4:0,r&&(w=_n(p,N,r)),e>=200&&300>e||304===e?(p.ifModified&&(T=N.getResponseHeader("Last-Modified"),T&&(b.lastModified[o]=T),T=N.getResponseHeader("etag"),T&&(b.etag[o]=T)),204===e?(c=!0,C="nocontent"):304===e?(c=!0,C="notmodified"):(c=Fn(p,w),C=c.state,y=c.data,v=c.error,c=!v)):(v=C,(e||!C)&&(C="error",0>e&&(e=0))),N.status=e,N.statusText=(n||C)+"",c?h.resolveWith(f,[y,C,N]):h.rejectWith(f,[N,C,v]),N.statusCode(m),m=t,u&&d.trigger(c?"ajaxSuccess":"ajaxError",[N,p,c?y:v]),g.fireWith(f,[N,C]),u&&(d.trigger("ajaxComplete",[N,p]),--b.active||b.event.trigger("ajaxStop")))}return N},getScript:function(e,n){return b.get(e,t,n,"script")},getJSON:function(e,t,n){return b.get(e,t,n,"json")}});function _n(e,n,r){var i,o,a,s,u=e.contents,l=e.dataTypes,c=e.responseFields;for(s in c)s in r&&(n[c[s]]=r[s]);while("*"===l[0])l.shift(),o===t&&(o=e.mimeType||n.getResponseHeader("Content-Type"));if(o)for(s in u)if(u[s]&&u[s].test(o)){l.unshift(s);break}if(l[0]in r)a=l[0];else{for(s in r){if(!l[0]||e.converters[s+" "+l[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==l[0]&&l.unshift(a),r[a]):t}function Fn(e,t){var n,r,i,o,a={},s=0,u=e.dataTypes.slice(),l=u[0];if(e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u[1])for(i in e.converters)a[i.toLowerCase()]=e.converters[i];for(;r=u[++s];)if("*"!==r){if("*"!==l&&l!==r){if(i=a[l+" "+r]||a["* "+r],!i)for(n in a)if(o=n.split(" "),o[1]===r&&(i=a[l+" "+o[0]]||a["* "+o[0]])){i===!0?i=a[n]:a[n]!==!0&&(r=o[0],u.splice(s--,0,r));break}if(i!==!0)if(i&&e["throws"])t=i(t);else try{t=i(t)}catch(c){return{state:"parsererror",error:i?c:"No conversion from "+l+" to "+r}}}l=r}return{state:"success",data:t}}b.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return b.globalEval(e),e}}}),b.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),b.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=o.head||b("head")[0]||o.documentElement;return{send:function(t,i){n=o.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var On=[],Bn=/(=)\?(?=&|$)|\?\?/;b.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=On.pop()||b.expando+"_"+vn++;return this[e]=!0,e}}),b.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,u=n.jsonp!==!1&&(Bn.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Bn.test(n.data)&&"data");return u||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=b.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,u?n[u]=n[u].replace(Bn,"$1"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||b.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,On.push(o)),s&&b.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}b.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=b.ajaxSettings.xhr(),b.support.cors=!!Rn&&"withCredentials"in Rn,Rn=b.support.ajax=!!Rn,Rn&&b.ajaxTransport(function(n){if(!n.crossDomain||b.support.cors){var r;return{send:function(i,o){var a,s,u=n.xhr();if(n.username?u.open(n.type,n.url,n.async,n.username,n.password):u.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)u[s]=n.xhrFields[s];n.mimeType&&u.overrideMimeType&&u.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)u.setRequestHeader(s,i[s])}catch(l){}u.send(n.hasContent&&n.data||null),r=function(e,i){var s,l,c,p;try{if(r&&(i||4===u.readyState))if(r=t,a&&(u.onreadystatechange=b.noop,$n&&delete Pn[a]),i)4!==u.readyState&&u.abort();else{p={},s=u.status,l=u.getAllResponseHeaders(),"string"==typeof u.responseText&&(p.text=u.responseText);try{c=u.statusText}catch(f){c=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,l)},n.async?4===u.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},b(e).unload($n)),Pn[a]=r),u.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp("^(?:([+-])=|)("+x+")([a-z%]*)$","i"),Jn=/queueHooks$/,Gn=[nr],Qn={"*":[function(e,t){var n,r,i=this.createTween(e,t),o=Yn.exec(t),a=i.cur(),s=+a||0,u=1,l=20;if(o){if(n=+o[2],r=o[3]||(b.cssNumber[e]?"":"px"),"px"!==r&&s){s=b.css(i.elem,e,!0)||n||1;do u=u||".5",s/=u,b.style(i.elem,e,s+r);while(u!==(u=i.cur()/a)&&1!==u&&--l)}i.unit=r,i.start=s,i.end=o[1]?s+(o[1]+1)*n:n}return i}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=b.now()}function Zn(e,t){b.each(t,function(t,n){var r=(Qn[t]||[]).concat(Qn["*"]),i=0,o=r.length;for(;o>i;i++)if(r[i].call(e,t,n))return})}function er(e,t,n){var r,i,o=0,a=Gn.length,s=b.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,l.startTime+l.duration-t),r=n/l.duration||0,o=1-r,a=0,u=l.tweens.length;for(;u>a;a++)l.tweens[a].run(o);return s.notifyWith(e,[l,o,n]),1>o&&u?n:(s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:b.extend({},t),opts:b.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=b.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)l.tweens[n].run(1);return t?s.resolveWith(e,[l,t]):s.rejectWith(e,[l,t]),this}}),c=l.props;for(tr(c,l.opts.specialEasing);a>o;o++)if(r=Gn[o].call(l,e,c,l.opts))return r;return Zn(l,c),b.isFunction(l.opts.start)&&l.opts.start.call(e,l),b.fx.timer(b.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always)}function tr(e,t){var n,r,i,o,a;for(i in e)if(r=b.camelCase(i),o=t[r],n=e[i],b.isArray(n)&&(o=n[1],n=e[i]=n[0]),i!==r&&(e[r]=n,delete e[i]),a=b.cssHooks[r],a&&"expand"in a){n=a.expand(n),delete e[r];for(i in n)i in e||(e[i]=n[i],t[i]=o)}else t[r]=o}b.Animation=b.extend(er,{tweener:function(e,t){b.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,u,l,c,p,f=this,d=e.style,h={},g=[],m=e.nodeType&&nn(e);n.queue||(c=b._queueHooks(e,"fx"),null==c.unqueued&&(c.unqueued=0,p=c.empty.fire,c.empty.fire=function(){c.unqueued||p()}),c.unqueued++,f.always(function(){f.always(function(){c.unqueued--,b.queue(e,"fx").length||c.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[d.overflow,d.overflowX,d.overflowY],"inline"===b.css(e,"display")&&"none"===b.css(e,"float")&&(b.support.inlineBlockNeedsLayout&&"inline"!==un(e.nodeName)?d.zoom=1:d.display="inline-block")),n.overflow&&(d.overflow="hidden",b.support.shrinkWrapBlocks||f.always(function(){d.overflow=n.overflow[0],d.overflowX=n.overflow[1],d.overflowY=n.overflow[2]}));for(i in t)if(a=t[i],Vn.exec(a)){if(delete t[i],u=u||"toggle"===a,a===(m?"hide":"show"))continue;g.push(i)}if(o=g.length){s=b._data(e,"fxshow")||b._data(e,"fxshow",{}),"hidden"in s&&(m=s.hidden),u&&(s.hidden=!m),m?b(e).show():f.done(function(){b(e).hide()}),f.done(function(){var t;b._removeData(e,"fxshow");for(t in h)b.style(e,t,h[t])});for(i=0;o>i;i++)r=g[i],l=f.createTween(r,m?s[r]:0),h[r]=s[r]||b.style(e,r),r in s||(s[r]=l.start,m&&(l.end=l.start,l.start="width"===r||"height"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}b.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(b.cssNumber[n]?"":"px")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?b.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=b.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){b.fx.step[e.prop]?b.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[b.cssProps[e.prop]]||b.cssHooks[e.prop])?b.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},b.each(["toggle","show","hide"],function(e,t){var n=b.fn[t];b.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),b.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=b.isEmptyObject(e),o=b.speed(t,n,r),a=function(){var t=er(this,b.extend({},e),o);a.finish=function(){t.stop(!0)},(i||b._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=b.timers,a=b._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&b.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=b._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=b.timers,a=r?r.length:0;for(n.finish=!0,b.queue(this,e,[]),i&&i.cur&&i.cur.finish&&i.cur.finish.call(this),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}b.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){b.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),b.speed=function(e,t,n){var r=e&&"object"==typeof e?b.extend({},e):{complete:n||!n&&t||b.isFunction(e)&&e,duration:e,easing:n&&t||t&&!b.isFunction(t)&&t};return r.duration=b.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in b.fx.speeds?b.fx.speeds[r.duration]:b.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){b.isFunction(r.old)&&r.old.call(this),r.queue&&b.dequeue(this,r.queue)},r},b.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},b.timers=[],b.fx=rr.prototype.init,b.fx.tick=function(){var e,n=b.timers,r=0;for(Xn=b.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||b.fx.stop(),Xn=t},b.fx.timer=function(e){e()&&b.timers.push(e)&&b.fx.start()},b.fx.interval=13,b.fx.start=function(){Un||(Un=setInterval(b.fx.tick,b.fx.interval))},b.fx.stop=function(){clearInterval(Un),Un=null},b.fx.speeds={slow:600,fast:200,_default:400},b.fx.step={},b.expr&&b.expr.filters&&(b.expr.filters.animated=function(e){return b.grep(b.timers,function(t){return e===t.elem}).length}),b.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){b.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,b.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},b.offset={setOffset:function(e,t,n){var r=b.css(e,"position");"static"===r&&(e.style.position="relative");var i=b(e),o=i.offset(),a=b.css(e,"top"),s=b.css(e,"left"),u=("absolute"===r||"fixed"===r)&&b.inArray("auto",[a,s])>-1,l={},c={},p,f;u?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),b.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(l.top=t.top-o.top+p),null!=t.left&&(l.left=t.left-o.left+f),"using"in t?t.using.call(e,l):i.css(l)}},b.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===b.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),b.nodeName(e[0],"html")||(n=e.offset()),n.top+=b.css(e[0],"borderTopWidth",!0),n.left+=b.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-b.css(r,"marginTop",!0),left:t.left-n.left-b.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||o.documentElement;while(e&&!b.nodeName(e,"html")&&"static"===b.css(e,"position"))e=e.offsetParent;return e||o.documentElement})}}),b.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);b.fn[e]=function(i){return b.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?b(a).scrollLeft():o,r?o:b(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return b.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}b.each({Height:"height",Width:"width"},function(e,n){b.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){b.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return b.access(this,function(n,r,i){var o;return b.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?b.css(n,r,s):b.style(n,r,i,s)},n,a?i:t,a,null)}})}),e.jQuery=e.$=b,"function"==typeof define&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return b})})(window);
\ No newline at end of file
diff --git a/data/js/formTab.js b/data/js/formTab.js
new file mode 100755
index 0000000..60f55d4
--- /dev/null
+++ b/data/js/formTab.js
@@ -0,0 +1,91 @@
+/**
+ * @name ./formTab.js
+ * @author unasm < 1264310280@qq.com >
+ * @since 2013-11-15 19:25:22
+ */
+/**
+ * @param contst QESTNUM question_num 总共有多少个问题
+ */
+var QESTNUM = 5;
+$(document).ready(function () {
+ var sum = Array();
+ var _table = document.getElementById("table");
+ $.ajax({
+ url: 'score.xml',dataType: 'xml',
+ success: function (data, textStatus, jqXHR) {
+ var boys = data.getElementsByTagName("boy");
+ var len = boys.length;
+ for (var i = 0 ; i < len; i ++) {
+ sum[i] = 0;
+ var tBoy = boys[i];
+ for (var j = 0, lj = tBoy.childNodes.length; j < lj; j ++) {
+ if(tBoy.childNodes[j].tagName == "score"){
+ sum[i] += $(tBoy.childNodes[j]).text() - 0;
+ }
+ }
+ }
+ var tabStr = "";
+ for (var i = 0; i < len ; i ++) {
+ var node = getMax(sum);
+ tabStr += formTr(boys[node] , sum[node]);
+ sum[node] = 0;
+ }
+ $(_table).append(tabStr)
+ showTr();
+ },
+ error: function (jqXHR, textStatus, errorThrown) {
+ alert(textStatus)
+ }
+ });
+ /**
+ * 一个小效果,一个一个的显示
+ * table-row;
+ */
+ function showTr() {
+ var trs = $(_table).find("tr");
+ var trsLen = trs.length,idx = 0;
+ console.log(trsLen);
+ var flag = setInterval(function () {
+ if(idx === trsLen)clearInterval(flag);
+ idx++;
+ $(trs[idx]).css("opacity","0").css("display","table-row").animate({
+ opacity:"1",
+ "margin-top":0
+ },400)
+ },150)
+ }
+ function getMax() {
+ var node = 0,max = sum[0];
+ for (var i = 1, l = sum.length; i < l; i ++) {
+ if(sum[i] > max){
+ max = sum[i];
+ node = i;
+ }
+ }
+ return node;
+ }
+ /**
+ * 构成table 的tr
+ * @param node boy xml的一个boy节点
+ */
+ function formTr(boy ,total ) {
+ var pointer = 0 , boyLen = boy.childNodes.length;
+ var res = "
" + $(boy).attr("name") +" " + total + " ";
+ var quesId = 1;
+ while( (pointer < boyLen) ){
+ if(boy.childNodes[pointer].tagName == "score"){
+ var score = boy.childNodes[pointer];
+ var nextQuestionId = parseInt( $(score).attr("name") );
+ for(;quesId <= QESTNUM && quesId < parseInt($(score).attr("name") );quesId++){
+ //留下一个添加通过的情况
+ res += " ";
+ }
+ res += "" + $( score ).text() + " ";
+ quesId++;
+ }
+ pointer++;
+ }
+ res += "";
+ return res;
+ }
+})
diff --git a/data/js/head.js b/data/js/head.js
new file mode 100755
index 0000000..85f419a
--- /dev/null
+++ b/data/js/head.js
@@ -0,0 +1,55 @@
+/**
+ * 页面的首部js控制
+ * 目前主要是控制下拉表单的显示隐藏
+ * @name head.js
+ * @author unasm < 1264310280@qq.com >
+ * @since 2013-11-13 21:23:56
+*/
+/**
+ * 控制菜单栏的显示隐藏
+ * @param dom _ul 当前显示隐藏的节点
+ * @param boolen _flag 标志位,500ms内禁止任何显示隐藏
+ * @param boolen _inside 标志位,检查光标当前的位置,为关闭做准备
+ */
+function menuControl() {
+ var _ul = "",_flag = 0,_inside = 0;
+ $(".nav").delegate(".menu","mouseenter",function () {
+ if(_flag)return false;//在500ms内不再显示和隐藏
+ _flag = 1;
+ var tmpul = $(this).find("ul");
+ tmpul = tmpul[0];//进行显示隐藏的节点
+ if(tmpul != _ul){
+ $(_ul).fadeOut();//进入另一个ul,之前的隐藏,以免出现bug
+ }
+ _inside = 1;
+ _ul = tmpul;
+ //检查是不是在一个
+ var height = $(_ul).height();
+ $(_ul).css("opacity",0).css("display","").css("height",'0px').animate({
+ opacity:"1",
+ height:height
+ },500)
+ setTimeout(function() {
+ _flag = 0;
+ }, 520);
+ }).delegate(".menu","mouseleave",function(){
+ _inside = 0;//进行缓冲,一面因为微动导致隐藏,500ms之后还是离开,则隐藏
+ setTimeout(function() {
+ if(_inside === 0)
+ $(_ul).fadeOut();
+ }, 500);
+ });
+}
+$(document).ready(function () {
+ $.ajax({
+ url: 'head.html',
+ dataType: 'html',
+ success: function (data, textStatus, jqXHR) {
+ document.getElementById("header").innerHTML = data;
+ menuControl();
+ },
+ error: function (jqXHR, textStatus, errorThrown) {
+ alert(textStatus);
+ }
+ });
+})
diff --git a/data/js/jquery.min.js b/data/js/jquery.min.js
new file mode 100755
index 0000000..006e953
--- /dev/null
+++ b/data/js/jquery.min.js
@@ -0,0 +1,5 @@
+/*! jQuery v1.9.1 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license
+//@ sourceMappingURL=jquery.min.map
+*/(function(e,t){var n,r,i=typeof t,o=e.document,a=e.location,s=e.jQuery,u=e.$,l={},c=[],p="1.9.1",f=c.concat,d=c.push,h=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=p.trim,b=function(e,t){return new b.fn.init(e,t,r)},x=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,w=/\S+/g,T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,k=/^[\],:{}\s]*$/,E=/(?:^|:|,)(?:\s*\[)+/g,S=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,A=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,j=/^-ms-/,D=/-([\da-z])/gi,L=function(e,t){return t.toUpperCase()},H=function(e){(o.addEventListener||"load"===e.type||"complete"===o.readyState)&&(q(),b.ready())},q=function(){o.addEventListener?(o.removeEventListener("DOMContentLoaded",H,!1),e.removeEventListener("load",H,!1)):(o.detachEvent("onreadystatechange",H),e.detachEvent("onload",H))};b.fn=b.prototype={jquery:p,constructor:b,init:function(e,n,r){var i,a;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof b?n[0]:n,b.merge(this,b.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:o,!0)),C.test(i[1])&&b.isPlainObject(n))for(i in n)b.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(a=o.getElementById(i[2]),a&&a.parentNode){if(a.id!==i[2])return r.find(e);this.length=1,this[0]=a}return this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):b.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),b.makeArray(e,this))},selector:"",length:0,size:function(){return this.length},toArray:function(){return h.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=b.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return b.each(this,e,t)},ready:function(e){return b.ready.promise().done(e),this},slice:function(){return this.pushStack(h.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(b.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:d,sort:[].sort,splice:[].splice},b.fn.init.prototype=b.fn,b.extend=b.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},u=1,l=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},u=2),"object"==typeof s||b.isFunction(s)||(s={}),l===u&&(s=this,--u);l>u;u++)if(null!=(o=arguments[u]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(b.isPlainObject(r)||(n=b.isArray(r)))?(n?(n=!1,a=e&&b.isArray(e)?e:[]):a=e&&b.isPlainObject(e)?e:{},s[i]=b.extend(c,a,r)):r!==t&&(s[i]=r));return s},b.extend({noConflict:function(t){return e.$===b&&(e.$=u),t&&e.jQuery===b&&(e.jQuery=s),b},isReady:!1,readyWait:1,holdReady:function(e){e?b.readyWait++:b.ready(!0)},ready:function(e){if(e===!0?!--b.readyWait:!b.isReady){if(!o.body)return setTimeout(b.ready);b.isReady=!0,e!==!0&&--b.readyWait>0||(n.resolveWith(o,[b]),b.fn.trigger&&b(o).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===b.type(e)},isArray:Array.isArray||function(e){return"array"===b.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[m.call(e)]||"object":typeof e},isPlainObject:function(e){if(!e||"object"!==b.type(e)||e.nodeType||b.isWindow(e))return!1;try{if(e.constructor&&!y.call(e,"constructor")&&!y.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||y.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||o;var r=C.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=b.buildFragment([e],t,i),i&&b(i).remove(),b.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=b.trim(n),n&&k.test(n.replace(S,"@").replace(A,"]").replace(E,"")))?Function("return "+n)():(b.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)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(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||b.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&b.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(j,"ms-").replace(D,L)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:v&&!v.call("\ufeff\u00a0")?function(e){return null==e?"":v.call(e)}:function(e){return null==e?"":(e+"").replace(T,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?b.merge(n,"string"==typeof e?[e]:e):d.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(g)return g.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return f.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),b.isFunction(e)?(r=h.call(arguments,2),i=function(){return e.apply(n||this,r.concat(h.call(arguments)))},i.guid=e.guid=e.guid||b.guid++,i):t},access:function(e,n,r,i,o,a,s){var u=0,l=e.length,c=null==r;if("object"===b.type(r)){o=!0;for(u in r)b.access(e,n,u,r[u],!0,a,s)}else if(i!==t&&(o=!0,b.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(b(e),n)})),n))for(;l>u;u++)n(e[u],r,s?i:i.call(e[u],u,n(e[u],r)));return o?e:c?n.call(e):l?n(e[0],r):a},now:function(){return(new Date).getTime()}}),b.ready.promise=function(t){if(!n)if(n=b.Deferred(),"complete"===o.readyState)setTimeout(b.ready);else if(o.addEventListener)o.addEventListener("DOMContentLoaded",H,!1),e.addEventListener("load",H,!1);else{o.attachEvent("onreadystatechange",H),e.attachEvent("onload",H);var r=!1;try{r=null==e.frameElement&&o.documentElement}catch(i){}r&&r.doScroll&&function a(){if(!b.isReady){try{r.doScroll("left")}catch(e){return setTimeout(a,50)}q(),b.ready()}}()}return n.promise(t)},b.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=b.type(e);return b.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=b(o);var _={};function F(e){var t=_[e]={};return b.each(e.match(w)||[],function(e,n){t[n]=!0}),t}b.Callbacks=function(e){e="string"==typeof e?_[e]||F(e):b.extend({},e);var n,r,i,o,a,s,u=[],l=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=u.length,n=!0;u&&o>a;a++)if(u[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,u&&(l?l.length&&c(l.shift()):r?u=[]:p.disable())},p={add:function(){if(u){var t=u.length;(function i(t){b.each(t,function(t,n){var r=b.type(n);"function"===r?e.unique&&p.has(n)||u.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=u.length:r&&(s=t,c(r))}return this},remove:function(){return u&&b.each(arguments,function(e,t){var r;while((r=b.inArray(t,u,r))>-1)u.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?b.inArray(e,u)>-1:!(!u||!u.length)},empty:function(){return u=[],this},disable:function(){return u=l=r=t,this},disabled:function(){return!u},lock:function(){return l=t,r||p.disable(),this},locked:function(){return!l},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!u||i&&!l||(n?l.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},b.extend({Deferred:function(e){var t=[["resolve","done",b.Callbacks("once memory"),"resolved"],["reject","fail",b.Callbacks("once memory"),"rejected"],["notify","progress",b.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return b.Deferred(function(n){b.each(t,function(t,o){var a=o[0],s=b.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&b.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?b.extend(e,r):r}},i={};return r.pipe=r.then,b.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=h.call(arguments),r=n.length,i=1!==r||e&&b.isFunction(e.promise)?r:0,o=1===i?e:b.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?h.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,u,l;if(r>1)for(s=Array(r),u=Array(r),l=Array(r);r>t;t++)n[t]&&b.isFunction(n[t].promise)?n[t].promise().done(a(t,l,n)).fail(o.reject).progress(a(t,u,s)):--i;return i||o.resolveWith(l,n),o.promise()}}),b.support=function(){var t,n,r,a,s,u,l,c,p,f,d=o.createElement("div");if(d.setAttribute("className","t"),d.innerHTML="
a ",n=d.getElementsByTagName("*"),r=d.getElementsByTagName("a")[0],!n||!r||!n.length)return{};s=o.createElement("select"),l=s.appendChild(o.createElement("option")),a=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={getSetAttribute:"t"!==d.className,leadingWhitespace:3===d.firstChild.nodeType,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:"/a"===r.getAttribute("href"),opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:!!a.value,optSelected:l.selected,enctype:!!o.createElement("form").enctype,html5Clone:"<:nav>"!==o.createElement("nav").cloneNode(!0).outerHTML,boxModel:"CSS1Compat"===o.compatMode,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},a.checked=!0,t.noCloneChecked=a.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!l.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}a=o.createElement("input"),a.setAttribute("value",""),t.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),t.radioValue="t"===a.value,a.setAttribute("checked","t"),a.setAttribute("name","t"),u=o.createDocumentFragment(),u.appendChild(a),t.appendChecked=a.checked,t.checkClone=u.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;return d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip,b(function(){var n,r,a,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",u=o.getElementsByTagName("body")[0];u&&(n=o.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",u.appendChild(n).appendChild(d),d.innerHTML="
",a=d.getElementsByTagName("td"),a[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===a[0].offsetHeight,a[0].style.display="",a[1].style.display="none",t.reliableHiddenOffsets=p&&0===a[0].offsetHeight,d.innerHTML="",d.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=4===d.offsetWidth,t.doesNotIncludeMarginInBodyOffset=1!==u.offsetTop,e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(o.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="
",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(u.style.zoom=1)),u.removeChild(n),n=d=a=r=null)}),n=s=u=l=r=a=null,t}();var O=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,B=/([A-Z])/g;function P(e,n,r,i){if(b.acceptData(e)){var o,a,s=b.expando,u="string"==typeof n,l=e.nodeType,p=l?b.cache:e,f=l?e[s]:e[s]&&s;if(f&&p[f]&&(i||p[f].data)||!u||r!==t)return f||(l?e[s]=f=c.pop()||b.guid++:f=s),p[f]||(p[f]={},l||(p[f].toJSON=b.noop)),("object"==typeof n||"function"==typeof n)&&(i?p[f]=b.extend(p[f],n):p[f].data=b.extend(p[f].data,n)),o=p[f],i||(o.data||(o.data={}),o=o.data),r!==t&&(o[b.camelCase(n)]=r),u?(a=o[n],null==a&&(a=o[b.camelCase(n)])):a=o,a}}function R(e,t,n){if(b.acceptData(e)){var r,i,o,a=e.nodeType,s=a?b.cache:e,u=a?e[b.expando]:b.expando;if(s[u]){if(t&&(o=n?s[u]:s[u].data)){b.isArray(t)?t=t.concat(b.map(t,b.camelCase)):t in o?t=[t]:(t=b.camelCase(t),t=t in o?[t]:t.split(" "));for(r=0,i=t.length;i>r;r++)delete o[t[r]];if(!(n?$:b.isEmptyObject)(o))return}(n||(delete s[u].data,$(s[u])))&&(a?b.cleanData([e],!0):b.support.deleteExpando||s!=s.window?delete s[u]:s[u]=null)}}}b.extend({cache:{},expando:"jQuery"+(p+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?b.cache[e[b.expando]]:e[b.expando],!!e&&!$(e)},data:function(e,t,n){return P(e,t,n)},removeData:function(e,t){return R(e,t)},_data:function(e,t,n){return P(e,t,n,!0)},_removeData:function(e,t){return R(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&b.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),b.fn.extend({data:function(e,n){var r,i,o=this[0],a=0,s=null;if(e===t){if(this.length&&(s=b.data(o),1===o.nodeType&&!b._data(o,"parsedAttrs"))){for(r=o.attributes;r.length>a;a++)i=r[a].name,i.indexOf("data-")||(i=b.camelCase(i.slice(5)),W(o,i,s[i]));b._data(o,"parsedAttrs",!0)}return s}return"object"==typeof e?this.each(function(){b.data(this,e)}):b.access(this,function(n){return n===t?o?W(o,e,b.data(o,e)):null:(this.each(function(){b.data(this,e,n)}),t)},null,n,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function W(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(B,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:O.test(r)?b.parseJSON(r):r}catch(o){}b.data(e,n,r)}else r=t}return r}function $(e){var t;for(t in e)if(("data"!==t||!b.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}b.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=b._data(e,n),r&&(!i||b.isArray(r)?i=b._data(e,n,b.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=b.queue(e,t),r=n.length,i=n.shift(),o=b._queueHooks(e,t),a=function(){b.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),o.cur=i,i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return b._data(e,n)||b._data(e,n,{empty:b.Callbacks("once memory").add(function(){b._removeData(e,t+"queue"),b._removeData(e,n)})})}}),b.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?b.queue(this[0],e):n===t?this:this.each(function(){var t=b.queue(this,e,n);b._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&b.dequeue(this,e)})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(e,t){return e=b.fx?b.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=b.Deferred(),a=this,s=this.length,u=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=b._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(u));return u(),o.promise(n)}});var I,z,X=/[\t\r\n]/g,U=/\r/g,V=/^(?:input|select|textarea|button|object)$/i,Y=/^(?:a|area)$/i,J=/^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,G=/^(?:checked|selected)$/i,Q=b.support.getSetAttribute,K=b.support.input;b.fn.extend({attr:function(e,t){return b.access(this,b.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,t){return b.access(this,b.prop,e,t,arguments.length>1)},removeProp:function(e){return e=b.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,u="string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=b.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,u=0===arguments.length||"string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?b.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e,r="boolean"==typeof t;return b.isFunction(e)?this.each(function(n){b(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var o,a=0,s=b(this),u=t,l=e.match(w)||[];while(o=l[a++])u=r?u:!s.hasClass(o),s[u?"addClass":"removeClass"](o)}else(n===i||"boolean"===n)&&(this.className&&b._data(this,"__className__",this.className),this.className=this.className||e===!1?"":b._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(X," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=b.isFunction(e),this.each(function(n){var o,a=b(this);1===this.nodeType&&(o=i?e.call(this,n,a.val()):e,null==o?o="":"number"==typeof o?o+="":b.isArray(o)&&(o=b.map(o,function(e){return null==e?"":e+""})),r=b.valHooks[this.type]||b.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=b.valHooks[o.type]||b.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(U,""):null==n?"":n)}}}),b.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,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,u=0>i?s:o?i:0;for(;s>u;u++)if(n=r[u],!(!n.selected&&u!==i||(b.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&b.nodeName(n.parentNode,"optgroup"))){if(t=b(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n=b.makeArray(t);return b(e).find("option").each(function(){this.selected=b.inArray(b(this).val(),n)>=0}),n.length||(e.selectedIndex=-1),n}}},attr:function(e,n,r){var o,a,s,u=e.nodeType;if(e&&3!==u&&8!==u&&2!==u)return typeof e.getAttribute===i?b.prop(e,n,r):(a=1!==u||!b.isXMLDoc(e),a&&(n=n.toLowerCase(),o=b.attrHooks[n]||(J.test(n)?z:I)),r===t?o&&a&&"get"in o&&null!==(s=o.get(e,n))?s:(typeof e.getAttribute!==i&&(s=e.getAttribute(n)),null==s?t:s):null!==r?o&&a&&"set"in o&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r):(b.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(w);if(o&&1===e.nodeType)while(n=o[i++])r=b.propFix[n]||n,J.test(n)?!Q&&G.test(n)?e[b.camelCase("default-"+n)]=e[r]=!1:e[r]=!1:b.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!b.support.radioValue&&"radio"===t&&b.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!b.isXMLDoc(e),a&&(n=b.propFix[n]||n,o=b.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var n=e.getAttributeNode("tabindex");return n&&n.specified?parseInt(n.value,10):V.test(e.nodeName)||Y.test(e.nodeName)&&e.href?0:t}}}}),z={get:function(e,n){var r=b.prop(e,n),i="boolean"==typeof r&&e.getAttribute(n),o="boolean"==typeof r?K&&Q?null!=i:G.test(n)?e[b.camelCase("default-"+n)]:!!i:e.getAttributeNode(n);return o&&o.value!==!1?n.toLowerCase():t},set:function(e,t,n){return t===!1?b.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&b.propFix[n]||n,n):e[b.camelCase("default-"+n)]=e[n]=!0,n}},K&&Q||(b.attrHooks.value={get:function(e,n){var r=e.getAttributeNode(n);return b.nodeName(e,"input")?e.defaultValue:r&&r.specified?r.value:t},set:function(e,n,r){return b.nodeName(e,"input")?(e.defaultValue=n,t):I&&I.set(e,n,r)}}),Q||(I=b.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&("id"===n||"name"===n||"coords"===n?""!==r.value:r.specified)?r.value:t},set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},b.attrHooks.contenteditable={get:I.get,set:function(e,t,n){I.set(e,""===t?!1:t,n)}},b.each(["width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}})})),b.support.hrefNormalized||(b.each(["href","src","width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return null==r?t:r}})}),b.each(["href","src"],function(e,t){b.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}})),b.support.style||(b.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),b.support.optSelected||(b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}})),b.support.enctype||(b.propFix.enctype="encoding"),b.support.checkOn||b.each(["radio","checkbox"],function(){b.valHooks[this]={get:function(e){return null===e.getAttribute("value")?"on":e.value}}}),b.each(["radio","checkbox"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,n){return b.isArray(n)?e.checked=b.inArray(b(e).val(),n)>=0:t}})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}b.event={global:{},add:function(e,n,r,o,a){var s,u,l,c,p,f,d,h,g,m,y,v=b._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=b.guid++),(u=v.events)||(u=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof b===i||e&&b.event.triggered===e.type?t:b.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(w)||[""],l=n.length;while(l--)s=rt.exec(n[l])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),p=b.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=b.event.special[g]||{},d=b.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&b.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=u[g])||(h=u[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),b.event.global[g]=!0;e=null}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,p,f,d,h,g,m=b.hasData(e)&&b._data(e);if(m&&(c=m.events)){t=(t||"").match(w)||[""],l=t.length;while(l--)if(s=rt.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=b.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),u=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));u&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||b.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)b.event.remove(e,d+t[l],n,r,!0);b.isEmptyObject(c)&&(delete m.handle,b._removeData(e,"events"))}},trigger:function(n,r,i,a){var s,u,l,c,p,f,d,h=[i||o],g=y.call(n,"type")?n.type:n,m=y.call(n,"namespace")?n.namespace.split("."):[];if(l=f=i=i||o,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+b.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),u=0>g.indexOf(":")&&"on"+g,n=n[b.expando]?n:new b.Event(g,"object"==typeof n&&n),n.isTrigger=!0,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:b.makeArray(r,[n]),p=b.event.special[g]||{},a||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!a&&!p.noBubble&&!b.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(l=l.parentNode);l;l=l.parentNode)h.push(l),f=l;f===(i.ownerDocument||o)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((l=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(b._data(l,"events")||{})[n.type]&&b._data(l,"handle"),s&&s.apply(l,r),s=u&&l[u],s&&b.acceptData(l)&&s.apply&&s.apply(l,r)===!1&&n.preventDefault();if(n.type=g,!(a||n.isDefaultPrevented()||p._default&&p._default.apply(i.ownerDocument,r)!==!1||"click"===g&&b.nodeName(i,"a")||!b.acceptData(i)||!u||!i[g]||b.isWindow(i))){f=i[u],f&&(i[u]=null),b.event.triggered=g;try{i[g]()}catch(v){}b.event.triggered=t,f&&(i[u]=f)}return n.result}},dispatch:function(e){e=b.event.fix(e);var n,r,i,o,a,s=[],u=h.call(arguments),l=(b._data(this,"events")||{})[e.type]||[],c=b.event.special[e.type]||{};if(u[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=b.event.handlers.call(this,e,l),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((b.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,u),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],u=n.delegateCount,l=e.target;if(u&&l.nodeType&&(!e.button||"click"!==e.type))for(;l!=this;l=l.parentNode||this)if(1===l.nodeType&&(l.disabled!==!0||"click"!==e.type)){for(o=[],a=0;u>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?b(r,this).index(l)>=0:b.find(r,this,null,[l]).length),o[r]&&o.push(i);o.length&&s.push({elem:l,handlers:o})}return n.length>u&&s.push({elem:this,handlers:n.slice(u)}),s},fix:function(e){if(e[b.expando])return e;var t,n,r,i=e.type,a=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new b.Event(a),t=r.length;while(t--)n=r[t],e[n]=a[n];return e.target||(e.target=a.srcElement||o),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,a):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,a,s=n.button,u=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||o,a=i.documentElement,r=i.body,e.pageX=n.clientX+(a&&a.scrollLeft||r&&r.scrollLeft||0)-(a&&a.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(a&&a.scrollTop||r&&r.scrollTop||0)-(a&&a.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&u&&(e.relatedTarget=u===e.target?n.toElement:u),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},click:{trigger:function(){return b.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t}},focus:{trigger:function(){if(this!==o.activeElement&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===o.activeElement&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=b.extend(new b.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?b.event.trigger(i,null,t):b.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},b.removeEvent=o.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},b.Event=function(e,n){return this instanceof b.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&b.extend(this,n),this.timeStamp=e&&e.timeStamp||b.now(),this[b.expando]=!0,t):new b.Event(e,n)},b.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},b.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){b.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;
+return(!i||i!==r&&!b.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),b.support.submitBubbles||(b.event.special.submit={setup:function(){return b.nodeName(this,"form")?!1:(b.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=b.nodeName(n,"input")||b.nodeName(n,"button")?n.form:t;r&&!b._data(r,"submitBubbles")&&(b.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),b._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&b.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return b.nodeName(this,"form")?!1:(b.event.remove(this,"._submit"),t)}}),b.support.changeBubbles||(b.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(b.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),b.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),b.event.simulate("change",this,e,!0)})),!1):(b.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!b._data(t,"changeBubbles")&&(b.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||b.event.simulate("change",this.parentNode,e,!0)}),b._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return b.event.remove(this,"._change"),!Z.test(this.nodeName)}}),b.support.focusinBubbles||b.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){b.event.simulate(t,e.target,b.event.fix(e),!0)};b.event.special[t]={setup:function(){0===n++&&o.addEventListener(e,r,!0)},teardown:function(){0===--n&&o.removeEventListener(e,r,!0)}}}),b.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return b().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=b.guid++)),this.each(function(){b.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,b(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){b.event.remove(this,e,r,n)})},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},trigger:function(e,t){return this.each(function(){b.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?b.event.trigger(e,n,r,!0):t}}),function(e,t){var n,r,i,o,a,s,u,l,c,p,f,d,h,g,m,y,v,x="sizzle"+-new Date,w=e.document,T={},N=0,C=0,k=it(),E=it(),S=it(),A=typeof t,j=1<<31,D=[],L=D.pop,H=D.push,q=D.slice,M=D.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},_="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=F.replace("w","w#"),B="([*^$|!~]?=)",P="\\["+_+"*("+F+")"+_+"*(?:"+B+_+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+O+")|)|)"+_+"*\\]",R=":("+F+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+P.replace(3,8)+")*)|.*)\\)|)",W=RegExp("^"+_+"+|((?:^|[^\\\\])(?:\\\\.)*)"+_+"+$","g"),$=RegExp("^"+_+"*,"+_+"*"),I=RegExp("^"+_+"*([\\x20\\t\\r\\n\\f>+~])"+_+"*"),z=RegExp(R),X=RegExp("^"+O+"$"),U={ID:RegExp("^#("+F+")"),CLASS:RegExp("^\\.("+F+")"),NAME:RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:RegExp("^("+F.replace("w","w*")+")"),ATTR:RegExp("^"+P),PSEUDO:RegExp("^"+R),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+_+"*(even|odd|(([+-]|)(\\d*)n|)"+_+"*(?:([+-]|)"+_+"*(\\d+)|))"+_+"*\\)|)","i"),needsContext:RegExp("^"+_+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+_+"*((?:-\\d)?\\d*)"+_+"*\\)|)(?=[^-]|$)","i")},V=/[\x20\t\r\n\f]*[+~]/,Y=/^[^{]+\{\s*\[native code/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,G=/^(?:input|select|textarea|button)$/i,Q=/^h\d$/i,K=/'|\\/g,Z=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,et=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,tt=function(e,t){var n="0x"+t-65536;return n!==n?t:0>n?String.fromCharCode(n+65536):String.fromCharCode(55296|n>>10,56320|1023&n)};try{q.call(w.documentElement.childNodes,0)[0].nodeType}catch(nt){q=function(e){var t,n=[];while(t=this[e++])n.push(t);return n}}function rt(e){return Y.test(e+"")}function it(){var e,t=[];return e=function(n,r){return t.push(n+=" ")>i.cacheLength&&delete e[t.shift()],e[n]=r}}function ot(e){return e[x]=!0,e}function at(e){var t=p.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}}function st(e,t,n,r){var i,o,a,s,u,l,f,g,m,v;if((t?t.ownerDocument||t:w)!==p&&c(t),t=t||p,n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=t.nodeType)&&9!==s)return[];if(!d&&!r){if(i=J.exec(e))if(a=i[1]){if(9===s){if(o=t.getElementById(a),!o||!o.parentNode)return n;if(o.id===a)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(a))&&y(t,o)&&o.id===a)return n.push(o),n}else{if(i[2])return H.apply(n,q.call(t.getElementsByTagName(e),0)),n;if((a=i[3])&&T.getByClassName&&t.getElementsByClassName)return H.apply(n,q.call(t.getElementsByClassName(a),0)),n}if(T.qsa&&!h.test(e)){if(f=!0,g=x,m=t,v=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){l=ft(e),(f=t.getAttribute("id"))?g=f.replace(K,"\\$&"):t.setAttribute("id",g),g="[id='"+g+"'] ",u=l.length;while(u--)l[u]=g+dt(l[u]);m=V.test(e)&&t.parentNode||t,v=l.join(",")}if(v)try{return H.apply(n,q.call(m.querySelectorAll(v),0)),n}catch(b){}finally{f||t.removeAttribute("id")}}}return wt(e.replace(W,"$1"),t,n,r)}a=st.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},c=st.setDocument=function(e){var n=e?e.ownerDocument||e:w;return n!==p&&9===n.nodeType&&n.documentElement?(p=n,f=n.documentElement,d=a(n),T.tagNameNoComments=at(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),T.attributes=at(function(e){e.innerHTML="
";var t=typeof e.lastChild.getAttribute("multiple");return"boolean"!==t&&"string"!==t}),T.getByClassName=at(function(e){return e.innerHTML="
",e.getElementsByClassName&&e.getElementsByClassName("e").length?(e.lastChild.className="e",2===e.getElementsByClassName("e").length):!1}),T.getByName=at(function(e){e.id=x+0,e.innerHTML="
",f.insertBefore(e,f.firstChild);var t=n.getElementsByName&&n.getElementsByName(x).length===2+n.getElementsByName(x+0).length;return T.getIdNotName=!n.getElementById(x),f.removeChild(e),t}),i.attrHandle=at(function(e){return e.innerHTML="
",e.firstChild&&typeof e.firstChild.getAttribute!==A&&"#"===e.firstChild.getAttribute("href")})?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},T.getIdNotName?(i.find.ID=function(e,t){if(typeof t.getElementById!==A&&!d){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){return e.getAttribute("id")===t}}):(i.find.ID=function(e,n){if(typeof n.getElementById!==A&&!d){var r=n.getElementById(e);return r?r.id===e||typeof r.getAttributeNode!==A&&r.getAttributeNode("id").value===e?[r]:t:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){var n=typeof e.getAttributeNode!==A&&e.getAttributeNode("id");return n&&n.value===t}}),i.find.TAG=T.tagNameNoComments?function(e,n){return typeof n.getElementsByTagName!==A?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},i.find.NAME=T.getByName&&function(e,n){return typeof n.getElementsByName!==A?n.getElementsByName(name):t},i.find.CLASS=T.getByClassName&&function(e,n){return typeof n.getElementsByClassName===A||d?t:n.getElementsByClassName(e)},g=[],h=[":focus"],(T.qsa=rt(n.querySelectorAll))&&(at(function(e){e.innerHTML="
",e.querySelectorAll("[selected]").length||h.push("\\["+_+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||h.push(":checked")}),at(function(e){e.innerHTML="
",e.querySelectorAll("[i^='']").length&&h.push("[*^$]="+_+"*(?:\"\"|'')"),e.querySelectorAll(":enabled").length||h.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),h.push(",.*:")})),(T.matchesSelector=rt(m=f.matchesSelector||f.mozMatchesSelector||f.webkitMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&&at(function(e){T.disconnectedMatch=m.call(e,"div"),m.call(e,"[s!='']:x"),g.push("!=",R)}),h=RegExp(h.join("|")),g=RegExp(g.join("|")),y=rt(f.contains)||f.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},v=f.compareDocumentPosition?function(e,t){var r;return e===t?(u=!0,0):(r=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t))?1&r||e.parentNode&&11===e.parentNode.nodeType?e===n||y(w,e)?-1:t===n||y(w,t)?1:0:4&r?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return u=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:0;if(o===a)return ut(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?ut(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},u=!1,[0,0].sort(v),T.detectDuplicates=u,p):p},st.matches=function(e,t){return st(e,null,null,t)},st.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&&c(e),t=t.replace(Z,"='$1']"),!(!T.matchesSelector||d||g&&g.test(t)||h.test(t)))try{var n=m.call(e,t);if(n||T.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(r){}return st(t,p,null,[e]).length>0},st.contains=function(e,t){return(e.ownerDocument||e)!==p&&c(e),y(e,t)},st.attr=function(e,t){var n;return(e.ownerDocument||e)!==p&&c(e),d||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):d||T.attributes?e.getAttribute(t):((n=e.getAttributeNode(t))||e.getAttribute(t))&&e[t]===!0?t:n&&n.specified?n.value:null},st.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},st.uniqueSort=function(e){var t,n=[],r=1,i=0;if(u=!T.detectDuplicates,e.sort(v),u){for(;t=e[r];r++)t===e[r-1]&&(i=n.push(r));while(i--)e.splice(n[i],1)}return e};function ut(e,t){var n=t&&e,r=n&&(~t.sourceIndex||j)-(~e.sourceIndex||j);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function lt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function ct(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function pt(e){return ot(function(t){return t=+t,ot(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}o=st.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=o(t);return n},i=st.selectors={cacheLength:50,createPseudo:ot,match:U,find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(et,tt),e[3]=(e[4]||e[5]||"").replace(et,tt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||st.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&st.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return U.CHILD.test(e[0])?null:(e[4]?e[2]=e[4]:n&&z.test(n)&&(t=ft(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){return"*"===e?function(){return!0}:(e=e.replace(et,tt).toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[e+" "];return t||(t=RegExp("(^|"+_+")"+e+"("+_+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==A&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=st.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!u&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[x]||(m[x]={}),l=c[e]||[],d=l[0]===N&&l[1],f=l[0]===N&&l[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[N,d,f];break}}else if(v&&(l=(t[x]||(t[x]={}))[e])&&l[0]===N)f=l[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[x]||(p[x]={}))[e]=[N,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||st.error("unsupported pseudo: "+e);return r[x]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?ot(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=M.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:ot(function(e){var t=[],n=[],r=s(e.replace(W,"$1"));return r[x]?ot(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:ot(function(e){return function(t){return st(e,t).length>0}}),contains:ot(function(e){return function(t){return(t.textContent||t.innerText||o(t)).indexOf(e)>-1}}),lang:ot(function(e){return X.test(e||"")||st.error("unsupported lang: "+e),e=e.replace(et,tt).toLowerCase(),function(t){var n;do if(n=d?t.getAttribute("xml:lang")||t.getAttribute("lang"):t.lang)return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===f},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return Q.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:pt(function(){return[0]}),last:pt(function(e,t){return[t-1]}),eq:pt(function(e,t,n){return[0>n?n+t:n]}),even:pt(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:pt(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:pt(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:pt(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}};for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})i.pseudos[n]=lt(n);for(n in{submit:!0,reset:!0})i.pseudos[n]=ct(n);function ft(e,t){var n,r,o,a,s,u,l,c=E[e+" "];if(c)return t?0:c.slice(0);s=e,u=[],l=i.preFilter;while(s){(!n||(r=$.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),u.push(o=[])),n=!1,(r=I.exec(s))&&(n=r.shift(),o.push({value:n,type:r[0].replace(W," ")}),s=s.slice(n.length));for(a in i.filter)!(r=U[a].exec(s))||l[a]&&!(r=l[a](r))||(n=r.shift(),o.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?st.error(e):E(e,u).slice(0)}function dt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function ht(e,t,n){var i=t.dir,o=n&&"parentNode"===i,a=C++;return t.first?function(t,n,r){while(t=t[i])if(1===t.nodeType||o)return e(t,n,r)}:function(t,n,s){var u,l,c,p=N+" "+a;if(s){while(t=t[i])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[i])if(1===t.nodeType||o)if(c=t[x]||(t[x]={}),(l=c[i])&&l[0]===p){if((u=l[1])===!0||u===r)return u===!0}else if(l=c[i]=[p],l[1]=e(t,n,s)||r,l[1]===!0)return!0}}function gt(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 mt(e,t,n,r,i){var o,a=[],s=0,u=e.length,l=null!=t;for(;u>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),l&&t.push(s));return a}function yt(e,t,n,r,i,o){return r&&!r[x]&&(r=yt(r)),i&&!i[x]&&(i=yt(i,o)),ot(function(o,a,s,u){var l,c,p,f=[],d=[],h=a.length,g=o||xt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:mt(g,f,e,s,u),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,u),r){l=mt(y,d),r(l,[],s,u),c=l.length;while(c--)(p=l[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){l=[],c=y.length;while(c--)(p=y[c])&&l.push(m[c]=p);i(null,y=[],l,u)}c=y.length;while(c--)(p=y[c])&&(l=i?M.call(o,p):f[c])>-1&&(o[l]=!(a[l]=p))}}else y=mt(y===a?y.splice(h,y.length):y),i?i(null,a,y,u):H.apply(a,y)})}function vt(e){var t,n,r,o=e.length,a=i.relative[e[0].type],s=a||i.relative[" "],u=a?1:0,c=ht(function(e){return e===t},s,!0),p=ht(function(e){return M.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;o>u;u++)if(n=i.relative[e[u].type])f=[ht(gt(f),n)];else{if(n=i.filter[e[u].type].apply(null,e[u].matches),n[x]){for(r=++u;o>r;r++)if(i.relative[e[r].type])break;return yt(u>1&>(f),u>1&&dt(e.slice(0,u-1)).replace(W,"$1"),n,r>u&&vt(e.slice(u,r)),o>r&&vt(e=e.slice(r)),o>r&&dt(e))}f.push(n)}return gt(f)}function bt(e,t){var n=0,o=t.length>0,a=e.length>0,s=function(s,u,c,f,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,T=l,C=s||a&&i.find.TAG("*",d&&u.parentNode||u),k=N+=null==T?1:Math.random()||.1;for(w&&(l=u!==p&&u,r=n);null!=(h=C[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,u,c)){f.push(h);break}w&&(N=k,r=++n)}o&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,o&&b!==v){g=0;while(m=t[g++])m(x,y,u,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=L.call(f));y=mt(y)}H.apply(f,y),w&&!s&&y.length>0&&v+t.length>1&&st.uniqueSort(f)}return w&&(N=k,l=T),x};return o?ot(s):s}s=st.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=ft(e)),n=t.length;while(n--)o=vt(t[n]),o[x]?r.push(o):i.push(o);o=S(e,bt(i,r))}return o};function xt(e,t,n){var r=0,i=t.length;for(;i>r;r++)st(e,t[r],n);return n}function wt(e,t,n,r){var o,a,u,l,c,p=ft(e);if(!r&&1===p.length){if(a=p[0]=p[0].slice(0),a.length>2&&"ID"===(u=a[0]).type&&9===t.nodeType&&!d&&i.relative[a[1].type]){if(t=i.find.ID(u.matches[0].replace(et,tt),t)[0],!t)return n;e=e.slice(a.shift().value.length)}o=U.needsContext.test(e)?0:a.length;while(o--){if(u=a[o],i.relative[l=u.type])break;if((c=i.find[l])&&(r=c(u.matches[0].replace(et,tt),V.test(a[0].type)&&t.parentNode||t))){if(a.splice(o,1),e=r.length&&dt(a),!e)return H.apply(n,q.call(r,0)),n;break}}}return s(e,p)(r,t,d,n,V.test(e)),n}i.pseudos.nth=i.pseudos.eq;function Tt(){}i.filters=Tt.prototype=i.pseudos,i.setFilters=new Tt,c(),st.attr=b.attr,b.find=st,b.expr=st.selectors,b.expr[":"]=b.expr.pseudos,b.unique=st.uniqueSort,b.text=st.getText,b.isXMLDoc=st.isXML,b.contains=st.contains}(e);var at=/Until$/,st=/^(?:parents|prev(?:Until|All))/,ut=/^.[^:#\[\.,]*$/,lt=b.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};b.fn.extend({find:function(e){var t,n,r,i=this.length;if("string"!=typeof e)return r=this,this.pushStack(b(e).filter(function(){for(t=0;i>t;t++)if(b.contains(r[t],this))return!0}));for(n=[],t=0;i>t;t++)b.find(e,this[t],n);return n=this.pushStack(i>1?b.unique(n):n),n.selector=(this.selector?this.selector+" ":"")+e,n},has:function(e){var t,n=b(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(b.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e,!1))},filter:function(e){return this.pushStack(ft(this,e,!0))},is:function(e){return!!e&&("string"==typeof e?lt.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,o=[],a=lt.test(e)||"string"!=typeof e?b(e,t||this.context):0;for(;i>r;r++){n=this[r];while(n&&n.ownerDocument&&n!==t&&11!==n.nodeType){if(a?a.index(n)>-1:b.find.matchesSelector(n,e)){o.push(n);break}n=n.parentNode}}return this.pushStack(o.length>1?b.unique(o):o)},index:function(e){return e?"string"==typeof e?b.inArray(this[0],b(e)):b.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?b(e,t):b.makeArray(e&&e.nodeType?[e]:e),r=b.merge(this.get(),n);return this.pushStack(b.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),b.fn.andSelf=b.fn.addBack;function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}b.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(e,t,n){return b.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(e,t,n){return b.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return b.dir(e,"previousSibling",n)},siblings:function(e){return b.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.merge([],e.childNodes)}},function(e,t){b.fn[e]=function(n,r){var i=b.map(this,t,n);return at.test(e)||(r=n),r&&"string"==typeof r&&(i=b.filter(r,i)),i=this.length>1&&!ct[e]?b.unique(i):i,this.length>1&&st.test(e)&&(i=i.reverse()),this.pushStack(i)}}),b.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),1===t.length?b.find.matchesSelector(t[0],e)?[t[0]]:[]:b.find.matches(e,t)},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!b(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(t=t||0,b.isFunction(t))return b.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return b.grep(e,function(e){return e===t===n});if("string"==typeof t){var r=b.grep(e,function(e){return 1===e.nodeType});if(ut.test(t))return b.filter(t,r,!n);t=b.filter(t,r)}return b.grep(e,function(e){return b.inArray(e,t)>=0===n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/
\s*$/g,At={option:[1,""," "],legend:[1,""," "],area:[1,""," "],param:[1,""," "],thead:[1,""],tr:[2,""],col:[2,""],td:[3,""],_default:b.support.htmlSerialize?[0,"",""]:[1,"X","
"]},jt=dt(o),Dt=jt.appendChild(o.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,b.fn.extend({text:function(e){return b.access(this,function(e){return e===t?b.text(this):this.empty().append((this[0]&&this[0].ownerDocument||o).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(b.isFunction(e))return this.each(function(t){b(this).wrapAll(e.call(this,t))});if(this[0]){var t=b(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return b.isFunction(e)?this.each(function(t){b(this).wrapInner(e.call(this,t))}):this.each(function(){var t=b(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=b.isFunction(e);return this.each(function(n){b(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){b.nodeName(this,"body")||b(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.insertBefore(e,this.firstChild)})},before:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=0;for(;null!=(n=this[r]);r++)(!e||b.filter(e,[n]).length>0)&&(t||1!==n.nodeType||b.cleanData(Ot(n)),n.parentNode&&(t&&b.contains(n.ownerDocument,n)&&Mt(Ot(n,"script")),n.parentNode.removeChild(n)));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&b.cleanData(Ot(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&b.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return b.clone(this,e,t)})},html:function(e){return b.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!b.support.htmlSerialize&&mt.test(e)||!b.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1>$2>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(b.cleanData(Ot(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(e){var t=b.isFunction(e);return t||"string"==typeof e||(e=b(e).not(this).detach()),this.domManip([e],!0,function(e){var t=this.nextSibling,n=this.parentNode;n&&(b(this).remove(),n.insertBefore(e,t))})},detach:function(e){return this.remove(e,!0)},domManip:function(e,n,r){e=f.apply([],e);var i,o,a,s,u,l,c=0,p=this.length,d=this,h=p-1,g=e[0],m=b.isFunction(g);if(m||!(1>=p||"string"!=typeof g||b.support.checkClone)&&Ct.test(g))return this.each(function(i){var o=d.eq(i);m&&(e[0]=g.call(this,i,n?o.html():t)),o.domManip(e,n,r)});if(p&&(l=b.buildFragment(e,this[0].ownerDocument,!1,this),i=l.firstChild,1===l.childNodes.length&&(l=i),i)){for(n=n&&b.nodeName(i,"tr"),s=b.map(Ot(l,"script"),Ht),a=s.length;p>c;c++)o=l,c!==h&&(o=b.clone(o,!0,!0),a&&b.merge(s,Ot(o,"script"))),r.call(n&&b.nodeName(this[c],"table")?Lt(this[c],"tbody"):this[c],o,c);if(a)for(u=s[s.length-1].ownerDocument,b.map(s,qt),c=0;a>c;c++)o=s[c],kt.test(o.type||"")&&!b._data(o,"globalEval")&&b.contains(u,o)&&(o.src?b.ajax({url:o.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):b.globalEval((o.text||o.textContent||o.innerHTML||"").replace(St,"")));l=i=null}return this}});function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function Ht(e){var t=e.getAttributeNode("type");return e.type=(t&&t.specified)+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function Mt(e,t){var n,r=0;for(;null!=(n=e[r]);r++)b._data(n,"globalEval",!t||b._data(t[r],"globalEval"))}function _t(e,t){if(1===t.nodeType&&b.hasData(e)){var n,r,i,o=b._data(e),a=b._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)b.event.add(t,n,s[n][r])}a.data&&(a.data=b.extend({},a.data))}}function Ft(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!b.support.noCloneEvent&&t[b.expando]){i=b._data(t);for(r in i.events)b.removeEvent(t,r,i.handle);t.removeAttribute(b.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),b.support.html5Clone&&e.innerHTML&&!b.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Nt.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}b.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){b.fn[e]=function(e){var n,r=0,i=[],o=b(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),b(o[r])[t](n),d.apply(i,n.get());return this.pushStack(i)}});function Ot(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||b.nodeName(o,n)?s.push(o):b.merge(s,Ot(o,n));return n===t||n&&b.nodeName(e,n)?b.merge([e],s):s}function Bt(e){Nt.test(e.type)&&(e.defaultChecked=e.checked)}b.extend({clone:function(e,t,n){var r,i,o,a,s,u=b.contains(e.ownerDocument,e);if(b.support.html5Clone||b.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(b.support.noCloneEvent&&b.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||b.isXMLDoc(e)))for(r=Ot(o),s=Ot(e),a=0;null!=(i=s[a]);++a)r[a]&&Ft(i,r[a]);if(t)if(n)for(s=s||Ot(e),r=r||Ot(o),a=0;null!=(i=s[a]);a++)_t(i,r[a]);else _t(e,o);return r=Ot(o,"script"),r.length>0&&Mt(r,!u&&Ot(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,u,l,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===b.type(o))b.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),u=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[u]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1>$2>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!b.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!b.support.tbody){o="table"!==u||xt.test(o)?""!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)b.nodeName(l=o.childNodes[i],"tbody")&&!l.childNodes.length&&o.removeChild(l)
+}b.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),b.support.appendChecked||b.grep(Ot(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===b.inArray(o,r))&&(a=b.contains(o.ownerDocument,o),s=Ot(f.appendChild(o),"script"),a&&Mt(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,u=b.expando,l=b.cache,p=b.support.deleteExpando,f=b.event.special;for(;null!=(n=e[s]);s++)if((t||b.acceptData(n))&&(o=n[u],a=o&&l[o])){if(a.events)for(r in a.events)f[r]?b.event.remove(n,r):b.removeEvent(n,r,a.handle);l[o]&&(delete l[o],p?delete n[u]:typeof n.removeAttribute!==i?n.removeAttribute(u):n[u]=null,c.push(o))}}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+x+")(.*)$","i"),Yt=RegExp("^("+x+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+x+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===b.css(e,"display")||!b.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=b._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=b._data(r,"olddisplay",un(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&b._data(r,"olddisplay",i?n:b.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}b.fn.extend({css:function(e,n){return b.access(this,function(e,n,r){var i,o,a={},s=0;if(b.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=b.css(e,n[s],!1,o);return a}return r!==t?b.style(e,n,r):b.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){var t="boolean"==typeof e;return this.each(function(){(t?e:nn(this))?b(this).show():b(this).hide()})}}),b.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,u=b.camelCase(n),l=e.style;if(n=b.cssProps[u]||(b.cssProps[u]=tn(l,u)),s=b.cssHooks[n]||b.cssHooks[u],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:l[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(b.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||b.cssNumber[u]||(r+="px"),b.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(l[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{l[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,u=b.camelCase(n);return n=b.cssProps[u]||(b.cssProps[u]=tn(e.style,u)),s=b.cssHooks[n]||b.cssHooks[u],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||b.isNumeric(o)?o||0:a):a},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s.getPropertyValue(n)||s[n]:t,l=e.style;return s&&(""!==u||b.contains(e.ownerDocument,e)||(u=b.style(e,n)),Yt.test(u)&&Ut.test(n)&&(i=l.width,o=l.minWidth,a=l.maxWidth,l.minWidth=l.maxWidth=l.width=u,u=s.width,l.width=i,l.minWidth=o,l.maxWidth=a)),u}):o.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s[n]:t,l=e.style;return null==u&&l&&l[n]&&(u=l[n]),Yt.test(u)&&!zt.test(n)&&(i=l.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),l.left="fontSize"===n?"1em":u,u=l.pixelLeft+"px",l.left=i,a&&(o.left=a)),""===u?"auto":u});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=b.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=b.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=b.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=b.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=b.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(b.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function un(e){var t=o,n=Gt[e];return n||(n=ln(e,t),"none"!==n&&n||(Pt=(Pt||b("").css("cssText","display:block !important")).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write(""),t.close(),n=ln(e,t),Pt.detach()),Gt[e]=n),n}function ln(e,t){var n=b(t.createElement(e)).appendTo(t.body),r=b.css(n[0],"display");return n.remove(),r}b.each(["height","width"],function(e,n){b.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(b.css(e,"display"))?b.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&&Rt(e);return on(e,t,r?an(e,n,r,b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,i),i):0)}}}),b.support.opacity||(b.cssHooks.opacity={get:function(e,t){return It.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=b.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===b.trim(o.replace($t,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+" "+i)}}),b(function(){b.support.reliableMarginRight||(b.cssHooks.marginRight={get:function(e,n){return n?b.swap(e,{display:"inline-block"},Wt,[e,"marginRight"]):t}}),!b.support.pixelPosition&&b.fn.position&&b.each(["top","left"],function(e,n){b.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?b(e).position()[n]+"px":r):t}}})}),b.expr&&b.expr.filters&&(b.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!b.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||b.css(e,"display"))},b.expr.filters.visible=function(e){return!b.expr.filters.hidden(e)}),b.each({margin:"",padding:"",border:"Width"},function(e,t){b.cssHooks[e+t]={expand:function(n){var r=0,i={},o="string"==typeof n?n.split(" "):[n];for(;4>r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(b.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\[\]$/,fn=/\r?\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;b.fn.extend({serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=b.prop(this,"elements");return e?b.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!b(this).is(":disabled")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Nt.test(e))}).map(function(e,t){var n=b(this).val();return null==n?null:b.isArray(n)?b.map(n,function(e){return{name:t.name,value:e.replace(fn,"\r\n")}}):{name:t.name,value:n.replace(fn,"\r\n")}}).get()}}),b.param=function(e,n){var r,i=[],o=function(e,t){t=b.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=b.ajaxSettings&&b.ajaxSettings.traditional),b.isArray(e)||e.jquery&&!b.isPlainObject(e))b.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join("&").replace(cn,"+")};function gn(e,t,n,r){var i;if(b.isArray(t))b.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==b.type(t))r(e,t);else for(i in t)gn(e+"["+i+"]",t[i],n,r)}b.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){b.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),b.fn.hover=function(e,t){return this.mouseenter(e).mouseleave(t||e)};var mn,yn,vn=b.now(),bn=/\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Nn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Cn=/^(?:GET|HEAD)$/,kn=/^\/\//,En=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Sn=b.fn.load,An={},jn={},Dn="*/".concat("*");try{yn=a.href}catch(Ln){yn=o.createElement("a"),yn.href="",yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(w)||[];if(b.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(u){var l;return o[u]=!0,b.each(e[u]||[],function(e,u){var c=u(n,r,i);return"string"!=typeof c||a||o[c]?a?!(l=c):t:(n.dataTypes.unshift(c),s(c),!1)}),l}return s(n.dataTypes[0])||!o["*"]&&s("*")}function Mn(e,n){var r,i,o=b.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&b.extend(!0,e,r),e}b.fn.load=function(e,n,r){if("string"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,u=e.indexOf(" ");return u>=0&&(i=e.slice(u,e.length),e=e.slice(0,u)),b.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(a="POST"),s.length>0&&b.ajax({url:e,type:a,dataType:"html",data:n}).done(function(e){o=arguments,s.html(i?b("").append(b.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},b.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){b.fn[t]=function(e){return this.on(t,e)}}),b.each(["get","post"],function(e,n){b[n]=function(e,r,i,o){return b.isFunction(r)&&(o=o||i,i=r,r=t),b.ajax({url:e,type:n,dataType:o,data:r,success:i})}}),b.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:"GET",isLocal:Nn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Dn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Mn(Mn(e,b.ajaxSettings),t):Mn(b.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){"object"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,u,l,c,p=b.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?b(f):b.event,h=b.Deferred(),g=b.Callbacks("once memory"),m=p.statusCode||{},y={},v={},x=0,T="canceled",N={readyState:0,getResponseHeader:function(e){var t;if(2===x){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===x?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return x||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return x||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>x)for(t in e)m[t]=[m[t],e[t]];else N.always(e[N.status]);return this},abort:function(e){var t=e||T;return l&&l.abort(t),k(0,t),this}};if(h.promise(N).complete=g.add,N.success=N.done,N.error=N.fail,p.url=((e||p.url||yn)+"").replace(xn,"").replace(kn,mn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=b.trim(p.dataType||"*").toLowerCase().match(w)||[""],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||("http:"===r[1]?80:443))==(mn[3]||("http:"===mn[1]?80:443)))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=b.param(p.data,p.traditional)),qn(An,p,n,N),2===x)return N;u=p.global,u&&0===b.active++&&b.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Cn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,"$1_="+vn++):o+(bn.test(o)?"&":"?")+"_="+vn++)),p.ifModified&&(b.lastModified[o]&&N.setRequestHeader("If-Modified-Since",b.lastModified[o]),b.etag[o]&&N.setRequestHeader("If-None-Match",b.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&N.setRequestHeader("Content-Type",p.contentType),N.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Dn+"; q=0.01":""):p.accepts["*"]);for(i in p.headers)N.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,N,p)===!1||2===x))return N.abort();T="abort";for(i in{success:1,error:1,complete:1})N[i](p[i]);if(l=qn(jn,p,n,N)){N.readyState=1,u&&d.trigger("ajaxSend",[N,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){N.abort("timeout")},p.timeout));try{x=1,l.send(y,k)}catch(C){if(!(2>x))throw C;k(-1,C)}}else k(-1,"No Transport");function k(e,n,r,i){var c,y,v,w,T,C=n;2!==x&&(x=2,s&&clearTimeout(s),l=t,a=i||"",N.readyState=e>0?4:0,r&&(w=_n(p,N,r)),e>=200&&300>e||304===e?(p.ifModified&&(T=N.getResponseHeader("Last-Modified"),T&&(b.lastModified[o]=T),T=N.getResponseHeader("etag"),T&&(b.etag[o]=T)),204===e?(c=!0,C="nocontent"):304===e?(c=!0,C="notmodified"):(c=Fn(p,w),C=c.state,y=c.data,v=c.error,c=!v)):(v=C,(e||!C)&&(C="error",0>e&&(e=0))),N.status=e,N.statusText=(n||C)+"",c?h.resolveWith(f,[y,C,N]):h.rejectWith(f,[N,C,v]),N.statusCode(m),m=t,u&&d.trigger(c?"ajaxSuccess":"ajaxError",[N,p,c?y:v]),g.fireWith(f,[N,C]),u&&(d.trigger("ajaxComplete",[N,p]),--b.active||b.event.trigger("ajaxStop")))}return N},getScript:function(e,n){return b.get(e,t,n,"script")},getJSON:function(e,t,n){return b.get(e,t,n,"json")}});function _n(e,n,r){var i,o,a,s,u=e.contents,l=e.dataTypes,c=e.responseFields;for(s in c)s in r&&(n[c[s]]=r[s]);while("*"===l[0])l.shift(),o===t&&(o=e.mimeType||n.getResponseHeader("Content-Type"));if(o)for(s in u)if(u[s]&&u[s].test(o)){l.unshift(s);break}if(l[0]in r)a=l[0];else{for(s in r){if(!l[0]||e.converters[s+" "+l[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==l[0]&&l.unshift(a),r[a]):t}function Fn(e,t){var n,r,i,o,a={},s=0,u=e.dataTypes.slice(),l=u[0];if(e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u[1])for(i in e.converters)a[i.toLowerCase()]=e.converters[i];for(;r=u[++s];)if("*"!==r){if("*"!==l&&l!==r){if(i=a[l+" "+r]||a["* "+r],!i)for(n in a)if(o=n.split(" "),o[1]===r&&(i=a[l+" "+o[0]]||a["* "+o[0]])){i===!0?i=a[n]:a[n]!==!0&&(r=o[0],u.splice(s--,0,r));break}if(i!==!0)if(i&&e["throws"])t=i(t);else try{t=i(t)}catch(c){return{state:"parsererror",error:i?c:"No conversion from "+l+" to "+r}}}l=r}return{state:"success",data:t}}b.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return b.globalEval(e),e}}}),b.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),b.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=o.head||b("head")[0]||o.documentElement;return{send:function(t,i){n=o.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var On=[],Bn=/(=)\?(?=&|$)|\?\?/;b.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=On.pop()||b.expando+"_"+vn++;return this[e]=!0,e}}),b.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,u=n.jsonp!==!1&&(Bn.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Bn.test(n.data)&&"data");return u||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=b.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,u?n[u]=n[u].replace(Bn,"$1"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||b.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,On.push(o)),s&&b.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}b.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=b.ajaxSettings.xhr(),b.support.cors=!!Rn&&"withCredentials"in Rn,Rn=b.support.ajax=!!Rn,Rn&&b.ajaxTransport(function(n){if(!n.crossDomain||b.support.cors){var r;return{send:function(i,o){var a,s,u=n.xhr();if(n.username?u.open(n.type,n.url,n.async,n.username,n.password):u.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)u[s]=n.xhrFields[s];n.mimeType&&u.overrideMimeType&&u.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)u.setRequestHeader(s,i[s])}catch(l){}u.send(n.hasContent&&n.data||null),r=function(e,i){var s,l,c,p;try{if(r&&(i||4===u.readyState))if(r=t,a&&(u.onreadystatechange=b.noop,$n&&delete Pn[a]),i)4!==u.readyState&&u.abort();else{p={},s=u.status,l=u.getAllResponseHeaders(),"string"==typeof u.responseText&&(p.text=u.responseText);try{c=u.statusText}catch(f){c=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,l)},n.async?4===u.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},b(e).unload($n)),Pn[a]=r),u.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp("^(?:([+-])=|)("+x+")([a-z%]*)$","i"),Jn=/queueHooks$/,Gn=[nr],Qn={"*":[function(e,t){var n,r,i=this.createTween(e,t),o=Yn.exec(t),a=i.cur(),s=+a||0,u=1,l=20;if(o){if(n=+o[2],r=o[3]||(b.cssNumber[e]?"":"px"),"px"!==r&&s){s=b.css(i.elem,e,!0)||n||1;do u=u||".5",s/=u,b.style(i.elem,e,s+r);while(u!==(u=i.cur()/a)&&1!==u&&--l)}i.unit=r,i.start=s,i.end=o[1]?s+(o[1]+1)*n:n}return i}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=b.now()}function Zn(e,t){b.each(t,function(t,n){var r=(Qn[t]||[]).concat(Qn["*"]),i=0,o=r.length;for(;o>i;i++)if(r[i].call(e,t,n))return})}function er(e,t,n){var r,i,o=0,a=Gn.length,s=b.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,l.startTime+l.duration-t),r=n/l.duration||0,o=1-r,a=0,u=l.tweens.length;for(;u>a;a++)l.tweens[a].run(o);return s.notifyWith(e,[l,o,n]),1>o&&u?n:(s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:b.extend({},t),opts:b.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=b.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)l.tweens[n].run(1);return t?s.resolveWith(e,[l,t]):s.rejectWith(e,[l,t]),this}}),c=l.props;for(tr(c,l.opts.specialEasing);a>o;o++)if(r=Gn[o].call(l,e,c,l.opts))return r;return Zn(l,c),b.isFunction(l.opts.start)&&l.opts.start.call(e,l),b.fx.timer(b.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always)}function tr(e,t){var n,r,i,o,a;for(i in e)if(r=b.camelCase(i),o=t[r],n=e[i],b.isArray(n)&&(o=n[1],n=e[i]=n[0]),i!==r&&(e[r]=n,delete e[i]),a=b.cssHooks[r],a&&"expand"in a){n=a.expand(n),delete e[r];for(i in n)i in e||(e[i]=n[i],t[i]=o)}else t[r]=o}b.Animation=b.extend(er,{tweener:function(e,t){b.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,u,l,c,p,f=this,d=e.style,h={},g=[],m=e.nodeType&&nn(e);n.queue||(c=b._queueHooks(e,"fx"),null==c.unqueued&&(c.unqueued=0,p=c.empty.fire,c.empty.fire=function(){c.unqueued||p()}),c.unqueued++,f.always(function(){f.always(function(){c.unqueued--,b.queue(e,"fx").length||c.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[d.overflow,d.overflowX,d.overflowY],"inline"===b.css(e,"display")&&"none"===b.css(e,"float")&&(b.support.inlineBlockNeedsLayout&&"inline"!==un(e.nodeName)?d.zoom=1:d.display="inline-block")),n.overflow&&(d.overflow="hidden",b.support.shrinkWrapBlocks||f.always(function(){d.overflow=n.overflow[0],d.overflowX=n.overflow[1],d.overflowY=n.overflow[2]}));for(i in t)if(a=t[i],Vn.exec(a)){if(delete t[i],u=u||"toggle"===a,a===(m?"hide":"show"))continue;g.push(i)}if(o=g.length){s=b._data(e,"fxshow")||b._data(e,"fxshow",{}),"hidden"in s&&(m=s.hidden),u&&(s.hidden=!m),m?b(e).show():f.done(function(){b(e).hide()}),f.done(function(){var t;b._removeData(e,"fxshow");for(t in h)b.style(e,t,h[t])});for(i=0;o>i;i++)r=g[i],l=f.createTween(r,m?s[r]:0),h[r]=s[r]||b.style(e,r),r in s||(s[r]=l.start,m&&(l.end=l.start,l.start="width"===r||"height"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}b.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(b.cssNumber[n]?"":"px")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?b.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=b.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){b.fx.step[e.prop]?b.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[b.cssProps[e.prop]]||b.cssHooks[e.prop])?b.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},b.each(["toggle","show","hide"],function(e,t){var n=b.fn[t];b.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),b.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=b.isEmptyObject(e),o=b.speed(t,n,r),a=function(){var t=er(this,b.extend({},e),o);a.finish=function(){t.stop(!0)},(i||b._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=b.timers,a=b._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&b.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=b._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=b.timers,a=r?r.length:0;for(n.finish=!0,b.queue(this,e,[]),i&&i.cur&&i.cur.finish&&i.cur.finish.call(this),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}b.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){b.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),b.speed=function(e,t,n){var r=e&&"object"==typeof e?b.extend({},e):{complete:n||!n&&t||b.isFunction(e)&&e,duration:e,easing:n&&t||t&&!b.isFunction(t)&&t};return r.duration=b.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in b.fx.speeds?b.fx.speeds[r.duration]:b.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){b.isFunction(r.old)&&r.old.call(this),r.queue&&b.dequeue(this,r.queue)},r},b.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},b.timers=[],b.fx=rr.prototype.init,b.fx.tick=function(){var e,n=b.timers,r=0;for(Xn=b.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||b.fx.stop(),Xn=t},b.fx.timer=function(e){e()&&b.timers.push(e)&&b.fx.start()},b.fx.interval=13,b.fx.start=function(){Un||(Un=setInterval(b.fx.tick,b.fx.interval))},b.fx.stop=function(){clearInterval(Un),Un=null},b.fx.speeds={slow:600,fast:200,_default:400},b.fx.step={},b.expr&&b.expr.filters&&(b.expr.filters.animated=function(e){return b.grep(b.timers,function(t){return e===t.elem}).length}),b.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){b.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,b.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},b.offset={setOffset:function(e,t,n){var r=b.css(e,"position");"static"===r&&(e.style.position="relative");var i=b(e),o=i.offset(),a=b.css(e,"top"),s=b.css(e,"left"),u=("absolute"===r||"fixed"===r)&&b.inArray("auto",[a,s])>-1,l={},c={},p,f;u?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),b.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(l.top=t.top-o.top+p),null!=t.left&&(l.left=t.left-o.left+f),"using"in t?t.using.call(e,l):i.css(l)}},b.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===b.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),b.nodeName(e[0],"html")||(n=e.offset()),n.top+=b.css(e[0],"borderTopWidth",!0),n.left+=b.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-b.css(r,"marginTop",!0),left:t.left-n.left-b.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||o.documentElement;while(e&&!b.nodeName(e,"html")&&"static"===b.css(e,"position"))e=e.offsetParent;return e||o.documentElement})}}),b.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);b.fn[e]=function(i){return b.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?b(a).scrollLeft():o,r?o:b(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return b.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}b.each({Height:"height",Width:"width"},function(e,n){b.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){b.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return b.access(this,function(n,r,i){var o;return b.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?b.css(n,r,s):b.style(n,r,i,s)},n,a?i:t,a,null)}})}),e.jQuery=e.$=b,"function"==typeof define&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return b})})(window);
\ No newline at end of file
diff --git a/data/layout.css b/data/layout.css
new file mode 100755
index 0000000..a1859d3
--- /dev/null
+++ b/data/layout.css
@@ -0,0 +1,121 @@
+h2{
+ text-align:center;
+}
+p,p a{
+ color:grey;
+}
+strong{
+ color:black;
+}
+ul{
+ padding: 0px;
+ margin:0px;
+}
+a{
+ text-decoration:none;
+}
+ul li{
+ text-decoration:none;
+ list-style:none;
+ float:left;
+}
+.clearfix:after{
+ visibility:hidden;
+ display:block;
+ content:"";
+ height:0px;
+ clear:both;
+}
+img{
+ border:none;
+}
+code{
+ background:black;
+ padding:8px;
+ border-radius:3px;
+ color:green;
+ margin:5px 0;
+}
+/****之上都是对具体标签的改造,下面开始布局***/
+html{
+ background:#E6E6E6;
+ height: 100%;
+ padding: 0px;
+ _height:100%;
+}
+body{
+ font-family:'Droid Serif', 'Microsoft Yahei', serif;
+ display: block;
+ padding: 0px;
+ text-align: center;
+ margin: 0px;
+ height: 100%;
+ _height:100%;
+ }
+.wrap{
+ text-align: left;
+ min-height: 100%;
+ width:1020px;
+ margin:0 auto;
+ background:white;
+ overflow-x:hidden;
+ padding:0 10px;
+ min-height: 100%;
+ _height:100%;
+ /*
+ 兼容性代码,防止在非ie下出现body出现滚动条
+ */
+}
+#header{
+ width:100%;
+ height:70px;
+}
+.logo{
+ float:left;
+ width:150px;
+ padding: 0px;
+ margin:0px;
+ line-height:70px;
+ text-align:center;
+}
+.nav{
+ float:left;
+ width:870px;
+ margin:0px;
+ padding: 0px;
+}
+.nav>li{
+ width:134px;
+ text-align: center;
+ margin:20px;
+ _width:115px;
+ list-style:none;
+ font-size:1.3em;
+}
+.choosed{
+ border-bottom:2px solid red;
+}
+#header .menu ul li:last_child{
+ border:none;
+ background:red;
+}
+.menu li{
+ text-align:center;
+ width:100%;
+ font-size:17px;
+ padding:5px 0;
+ border-bottom:1px solid #494141;
+}
+
+.menu ul{
+ position:absolute;
+ background:rgba(0,0,0,0.8);
+ border-radius:2px;
+ width:134px;
+}
+.menu>a{
+ color:#000;
+}
+.menu ul a{
+ color:#C7C2C2;
+}
diff --git a/data/lizhiyong.html b/data/lizhiyong.html
new file mode 100644
index 0000000..30be3f7
--- /dev/null
+++ b/data/lizhiyong.html
@@ -0,0 +1,375 @@
+
+
+
+
+
lizhiyong
+
+
+
+
李志勇
+
+
联系方式:17888805090
+电子邮箱:lizhiyong618@foxmail.com 求职意向:研究岗
+
+
教育背景
+
+
2014.09-2016.06 对外经济贸易大学 硕士 数量经济学(保送)
+主修课程: 数学分析,高等代数,实变函数,财务管理,金融工程概论,数值分析
+
+
实习工作经历
+
+
2015.03-2015.07 诺安资产管理有限公司 金融同业部实习生
+
+
+深度参与多项股票质押式回购和结构化股票资产管理计划的产品设计和发行,先后负责四个资产管理
+计划的立项、放款、付息工作,并发布盯市日报。
+协调券商、托管银行及资管计划份额持有人,熟悉通道类资管计划的各项业务流程,工作成果得到了
+合作机构和公司领导的认可。
+
+
+
2015.01-2015.02 宏源期货 研究部行业研究实习生
+
+
+收集相关资料数据,为研究报告的撰写提供材料支持,同时基于供求分析的基本面,参与橡胶行业的
+研究。
+
+
+
2014.11-2015.04 深圳纵横四海金融信息服务有限公司 产品经理
+
+
+公司的前身为“跑赢 cpi”微信团队,系国内第一个投资组合分享的微信公众号,主要负责量化建模
+以及相应的研究支持工作。
+担任“套利宝”的产品经理,深度挖掘分级基金、LOF 以及重仓停牌股基金的套利机会,熟悉套利规
+则和流程,在基金投资上建立了独立的分析研究框架。任内套利宝的收益率达 101.73%。
+
+
+
2014.02-迄今 北京艾数教育科技有限公司 创始人
+
+
+公司主营业务为统计咨询、计量软件培训,完善公司架构,建立以在读学生为主的运营团队,下辖财
+务综合部、市场与客服部、研究与培训部、风控与合规部。
+作为运营团队的主要负责人,日常工作包括制定业务发展计划、梳理业务流程并培训团队成员,提高
+团队协作效率。月营业额稳定,并保持快速增长。
+
+
+
2013.06-2013.09 富登信贷四川(总部) 信贷与风险控制部项目实习生
+
+
+接受数据录入、分析的系统培训,负责录入个人征信报告,按照项目要求计算个人逾期记录,录入反馈正确率全部门第一。参与个人信用评价的前期建模准备工作。
+
+
+
资格证书
+
+
+取得证券从业资格证书(基础+交易+基金+投资分析),期货从业资格证书(基础)
+熟练运用 SPSS、STATA、MATLAB、SAS 等数理统计分析软件,熟悉 wind 的各项功能。
+英语水平:CET4:562 CET6:552
+
+
+
个人荣誉及奖励
+
+
+全国大学生数学建模比赛四川省二等奖、美国大学生数学建模一等奖
+三株消费经济奖学金(1%)
+
+
+
+
diff --git a/data/recuit/backBasic.html b/data/recuit/backBasic.html
new file mode 100755
index 0000000..c52d828
--- /dev/null
+++ b/data/recuit/backBasic.html
@@ -0,0 +1,33 @@
+
+
+
+
+ 后台的基础
+
+
+
+
+
+
+
后台的基础
+
-----------------------------------------------------------------------------------------------------
+
前言
+
做以下题目前,如果你是一个资深 windows 用户,请装一个 linux 发行版,这是基础。接着,请在你的 linux 操作系统上搭建 LAMP 环境,怎么做,可以利用互联网,也可以欢迎来问我
+
兴趣是关键,如果你没有兴趣,请 ctrl+w 关掉此页面
+
下面的题目对于你们中的大多数人来说,可能会觉得比较困难,但是请坚持下去,你会成功的,虽然有一定代码能力的人会有优势,但请注意,我们招新看的是潜力和认真,不是现在的你,当然,你得让我们知道你有潜力。我们重点考察的是查询资料的能力,你写出的代码,我们在面试时,会针对代码进行询问的,最基础的,你得知道每个函数的作用是什么
+
-----------------------------------------------------------------------------------------------------
+
搭建LAMP环境,学习 php5 基本语法,掌握面向对象编程的思想,这个不会进行专门的检查,却是之后的基础
+
-----------------------------------------------------------------------------------------------------
+
+
欢迎在QQ交流群228958776 积极提问,我们将尽可能热情快速的回复,也可以把问题单独单独发邮件到 1059517828@qq.com 咨询
+
+ 刷版愉快!!
+
+
+
+
+
+
+
+
diff --git a/data/recuit/backCheck.html b/data/recuit/backCheck.html
new file mode 100755
index 0000000..1c3cc9a
--- /dev/null
+++ b/data/recuit/backCheck.html
@@ -0,0 +1,38 @@
+
+
+
+
+ 守望者的利刃
+
+
+
+
+
+
+
守望者的利刃
+
上传验证是后台最重要的工作之一,面对各种有意或者无意的不应该出现的输入,后台该如何处理呢
+
+ 写一个简单的校验的函数,要求:
+
+ 只允许通过post提交输入6-12位字符串
+ 第一二位必须是数字,中间若干位则是|}${%中的字符组成
+ 最后的四位或三位,必须是英文字母,其中至少包含一个大写的英文字母
+
+
+
-----------------------------------------------------------------------------------------------------
+
+
+
+
+
+
+
diff --git a/data/recuit/backCookie.html b/data/recuit/backCookie.html
new file mode 100755
index 0000000..956cee7
--- /dev/null
+++ b/data/recuit/backCookie.html
@@ -0,0 +1,32 @@
+
+
+
+
+ 简述
+
+
+
+
+
+
+
简述
+
+ 简述 php 中 session 和 cooke,_POST 和 _GET 各自的特点
+
+
-----------------------------------------------------------------------------------------------------
+
+
+
+
+
+
+
diff --git a/data/recuit/backPicture.html b/data/recuit/backPicture.html
new file mode 100755
index 0000000..3873382
--- /dev/null
+++ b/data/recuit/backPicture.html
@@ -0,0 +1,38 @@
+
+
+
+
+ 图片的狂欢
+
+
+
+
+
+
+
图片的狂欢
+
+ 写一个简单 html 文件,用于上传一个图片;再写一个处理上传图片的类,要求:
+
+ 检测文件类型,只允许 jpg/png/gif
+ 存储上传的合法文件
+ 对已经存储的图片进行剪切,并将剪切下来的图片存储
+ 为已经存储的图片做一个缩略图标
+
+
+
-----------------------------------------------------------------------------------------------------
+
+
+
+
+
+
+
diff --git a/data/recuit/frontAjax.html b/data/recuit/frontAjax.html
new file mode 100755
index 0000000..e5d5583
--- /dev/null
+++ b/data/recuit/frontAjax.html
@@ -0,0 +1,32 @@
+
+
+
+
+ 走入新时代
+
+
+
+
+
+
+
走入新时代
+
互联网在不断进步和变革,ajax的出现是标志性的变革,我们来拥抱这伟大的变革吧
+
利用ajax从这里 获得其中包含的数据,少年,注意跨域哦
+
走到这里,你已经成为一名合格的前端了
+
-----------------------------------------------------------------------------------------------------
+
+
+
+
+
+
+
diff --git a/data/recuit/frontCopy.html b/data/recuit/frontCopy.html
new file mode 100755
index 0000000..94f7102
--- /dev/null
+++ b/data/recuit/frontCopy.html
@@ -0,0 +1,31 @@
+
+
+
+
+
+ 临摹的盛宴
+
+
+
+
+
临摹的盛宴
+
+
模仿是学习的第一步,所有的人都是从身边的人那里学习借鉴来各种知识,行为,经验等等等等,少年们,来模仿下这个页面吧。用你们自己的方式,来实现这个页面的效果外观吧。
+
为了模仿这个页面,需要用到html,css,js的知识,可以查看怎么实现的,但是必须自己理解,最终给分将根据完成页面和这个页面的相似程度 决定。
+
禁止互相拷贝和直接复制源代码,违反的人.....呵呵。你懂的
+
+
-----------------------------------------------------------------------------------------------------
+
+
+
+
+
diff --git a/data/recuit/frontDoMyself.html b/data/recuit/frontDoMyself.html
new file mode 100755
index 0000000..fc7db8e
--- /dev/null
+++ b/data/recuit/frontDoMyself.html
@@ -0,0 +1,33 @@
+
+
+
+
+
我手写我心
+
+
+
+
+
+
+
我手写我心
+
模仿之后,要知道怎么自己去做,面对一张图片的时候,知道怎么自己去实现它
+
现在我们就看着图片自己做一个页面吧,看到下面的图片吗?是一张从网上搜来的淘宝的图片,完成之后,你就前端入门了,实现它吧,勇敢的少年们!
+
-----------------------------------------------------------------------------------------------------
+
+
-----------------------------------------------------------------------------------------------------
+
+
+
+
+
+
+
diff --git a/data/recuit/frontHtml.html b/data/recuit/frontHtml.html
new file mode 100755
index 0000000..e3f9d7b
--- /dev/null
+++ b/data/recuit/frontHtml.html
@@ -0,0 +1,30 @@
+
+
+
+
+
前端的入门
+
+
+
+
+
+
+
前端的入门
+
使用html标签写一篇文档,要求包含Introduction页面内所有的内容,注意使用恰当的标签
+
-----------------------------------------------------------------------------------------------------
+
+
+
+
+
+
+
diff --git a/data/recuit/head.html b/data/recuit/head.html
new file mode 100755
index 0000000..174fb31
--- /dev/null
+++ b/data/recuit/head.html
@@ -0,0 +1,34 @@
+
+ e 点
+
+
diff --git a/data/recuit/rating.html b/data/recuit/rating.html
new file mode 100755
index 0000000..4bf6313
--- /dev/null
+++ b/data/recuit/rating.html
@@ -0,0 +1,47 @@
+
+
+
+
+
+
e点新血液
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/recuit/recuit.html b/data/recuit/recuit.html
new file mode 100755
index 0000000..b639267
--- /dev/null
+++ b/data/recuit/recuit.html
@@ -0,0 +1,45 @@
+
+
+
+
+
+
e点新血液
+
+
+
+
+
+
+
简介和说明
+
E点工作室是为了E点这个项目,这个梦想而凝聚起来的一群人,成立时间半年左右,目前成员是十多名,分别负责市场,技术,设计。
+
+ 而我们这次,希望能够找到一些有激情,有梦想的,愿意和我们一起拼打的人,一些想在我们年轻的时候,做一番无悔于青春的事业的人,
+ 在以后的岁月里,我们会因为当初的奋斗,当初的梦想,当初的那群人而骄傲。
+
+
我们将风雨同舟,患难与共。
+
-----------------------------------------------------------------------------------------------------
+
+ 本次招新,我们通过做题积分 的方式选拔,最终的结果由积分,进步速度,积极性等因素共同决定。
+ 旨在考察大家实力和认真程度,我们想得到的,是能够专注技术的,设计的新鲜血液,愿意以技术改变命运,创造未来的同伴,认真学习,对团队认真负责的战友。
+ 所以一个比较长期的考察是必须的,而且,这些题目都是以后我们会用到的技能,所以也是一个学习的过程。为了明天的事业,赶快进步吧。
+
+
+ 书和google将是学习最好的两个朋友,多多咨询他们吧。
+
+
-----------------------------------------------------------------------------------------------------
+
+
+
+
+
+
+
diff --git a/data/refresh.php b/data/refresh.php
new file mode 100755
index 0000000..b985e1e
--- /dev/null
+++ b/data/refresh.php
@@ -0,0 +1,93 @@
+
+* @since : 2014-04-19 13:59:41
+*/
+Define("HREF" , "http://unasm.github.io/");
+Define("TPL" , 'index.tpl.php');
+class Refresh{
+ private $tplHandle;
+ /**
+ * 筹备数据,为接下来的解析准备
+ */
+ function __construct($path){
+ $data['fileList'] = $this->readFile($path);
+ $data['title'] = "unasm的博客";
+ $data['domain'] = HREF;
+ //将数据传入,减少于外界的耦合
+ $this->parseIndex($data, TPL);
+ }
+ /**
+ * 读取当前文件夹下面所有的html文件
+ * @todo 实现按照时间顺序进行排序,具体巩固filemtime的方式获取修改时间,
+ */
+ function readFile($path){
+ $fileList = [];
+ if(is_dir($path)){
+ $dir = opendir($path);
+ if(!$dir){
+ exit("打开文件夹失败" . __LINE__ . "行\n");
+ }
+ while(($fileName = readdir($dir)) !== false){
+ if((substr($fileName,-5) === '.html') && is_file($path . $fileName)){
+ if($fileName !== 'index.html'){
+ $fileList [] = $fileName;
+ }
+ }
+ }
+ } else{
+ echo "路径并非是文件夹";
+ }
+ closedir($dir);
+ return $fileList;
+ }
+
+ /**
+ * 开始解析生成模板数据index.php
+ * 因为是生成的目录,所以默认生成的文件名子是index.html
+ */
+ function parseIndex($data, $tplPath){
+ foreach($data as $idx => $value){
+ $$idx = $value;
+ }
+ ob_start();
+ include $tplPath;
+ $tpl = ob_get_contents();
+ ob_end_clean();
+ $fp = @fopen('index.html', 'w') or die("打开文件index.html失败");
+ if(flock($fp, LOCK_EX)){
+ fwrite($fp , $tpl);
+ fflush($fp);
+ flock($fp, LOCK_UN);
+ }
+ fclose($fp);
+ }
+ /**
+ * 生成数据文件
+ */
+ public function parseFile($filepath){
+ $file = fopen($filePath , true);
+ $fileName = basename($filePath);
+ if(!$this->tplHandle){
+ exit("模板文件尚未初始化");
+ }
+
+ fclose($file);
+ }
+ /**
+ * 初始化数据的模板文件
+ */
+ protected function initDataTpl(){
+ $this->tplHandle = fopen("./tplData.tpl.html");
+ }
+ function __destruct(){
+ if($this->tplHandle){
+ fclose($this->tplHandle);
+ }
+ }
+}
+$oper = new Refresh("./");
+?>
diff --git a/data/score.xml b/data/score.xml
new file mode 100755
index 0000000..508aefb
--- /dev/null
+++ b/data/score.xml
@@ -0,0 +1,28 @@
+
+
+
+ 123
+ 123
+ 3
+ 23
+
+
+ 123
+ 13
+ 133
+
+
+ 123
+ 13
+ 133
+
+
+ 123
+ 13
+ 133
+
+
+ 13
+ 133
+
+
diff --git a/data/source/CNAME b/data/source/CNAME
new file mode 100755
index 0000000..f552226
--- /dev/null
+++ b/data/source/CNAME
@@ -0,0 +1 @@
+e点.com
diff --git a/data/test.php b/data/test.php
new file mode 100644
index 0000000..47c12cc
--- /dev/null
+++ b/data/test.php
@@ -0,0 +1,8 @@
+
+* @since : 2014-06-03 21:20:43
+*/
+echo "hello,world!again";
+?>
diff --git a/data/test.png b/data/test.png
new file mode 100755
index 0000000..8b18d07
Binary files /dev/null and b/data/test.png differ
diff --git "a/data/\344\273\216\345\244\247\351\207\217\350\241\214\344\271\213\344\270\255\346\237\245\346\211\276\345\210\260\347\211\271\345\256\232\344\270\200\344\270\252\344\272\272\347\232\204\347\256\227\346\263\225.html" "b/data/\344\273\216\345\244\247\351\207\217\350\241\214\344\271\213\344\270\255\346\237\245\346\211\276\345\210\260\347\211\271\345\256\232\344\270\200\344\270\252\344\272\272\347\232\204\347\256\227\346\263\225.html"
new file mode 100644
index 0000000..ca0b672
--- /dev/null
+++ "b/data/\344\273\216\345\244\247\351\207\217\350\241\214\344\271\213\344\270\255\346\237\245\346\211\276\345\210\260\347\211\271\345\256\232\344\270\200\344\270\252\344\272\272\347\232\204\347\256\227\346\263\225.html"
@@ -0,0 +1,36 @@
+
+
+
+
+
从大量行之中查找到一个人的算法
+
+
+
+ 最初的题目是首先提供大约一万行用户信息,输入一个用户名,然后找到这个人的信息,
+
+
+ 我想的就是根据每个名字每个字对应的字符集编码值进行排序,然后在所有的排序姓名里面进行logn级别的查找,10000的数字,需要13-14次查找
+
+
+ 然后增加难度的问题是用户名非常长,对比的时候非常消耗资源,然后怎么处理
+
+
+ 当时太不谨慎,立即就爆出来hash table ,time33算法就是为了解决字符串到int数组的转化的,这个想法是好的,但是不应该提及hash table ,自己虽然明白拉链法解决hash表,但是毕竟hash table不是自己擅长的领域
+ ,通过times33 算法转换之后,对转换的int序列进行排序,查找的时候,依旧可以logn级别的查找,但是在找到具体位置之后,需要在相同数值的进行比较,只是说,这种比较一般不会很多
+
+
+
+ 面试官对这个答案依旧不满意,说对全体人员的排序会相当消耗资源,当时没有解决方案,睡了一觉,感觉可以做的更加优化一点。
+
+
+ 第一步依旧是times33的转化,将目标字符串转化为int,然后从头开始遍历数据,边转化边进行整理,将转化之后的数据保存在红黑树之中,当查找到想要的用户之后,停止整理,返回信息。
+ 在以后的查找里面,可以首先对目标字符串进行,然后在红黑树里面查找,logn级别的查找,如果可以寻找到想要的数据,就返回信息,如果不可以找到,就接着上一次没有整理完的行接着进行转化整理。
+ 对于转化之后重复的情况,依旧是通过拉链法解决冲突。
+
+
+ 整体复杂度为m * log(n)+ O(n) * log(n)的,m为查询次数 , 虽然整体复杂度和上一次的没有什么大的变化,但是这次将数据的处理分为几次,对于服务器来说,压力更小一点,而且,在查询次数比较少的情况,未必就处理全体数据
+
+
+
+
+
diff --git "a/data/\345\205\263\344\272\216global\345\234\250\345\207\275\346\225\260\345\206\205\351\203\250\350\256\277\351\227\256\345\255\227\347\254\246\344\270\262\345\222\214int\347\232\204\345\214\272\345\210\253\345\222\214\345\267\256\345\274\202.html" "b/data/\345\205\263\344\272\216global\345\234\250\345\207\275\346\225\260\345\206\205\351\203\250\350\256\277\351\227\256\345\255\227\347\254\246\344\270\262\345\222\214int\347\232\204\345\214\272\345\210\253\345\222\214\345\267\256\345\274\202.html"
new file mode 100644
index 0000000..8bdc7ea
--- /dev/null
+++ "b/data/\345\205\263\344\272\216global\345\234\250\345\207\275\346\225\260\345\206\205\351\203\250\350\256\277\351\227\256\345\255\227\347\254\246\344\270\262\345\222\214int\347\232\204\345\214\272\345\210\253\345\222\214\345\267\256\345\274\202.html"
@@ -0,0 +1,36 @@
+
+
+
+
+
在函数内部访问int 和global的差异
+
+
+
+
+
+ $b = "somethinbg";
+ function bb(){
+ //global $b;
+ $b = $b . $b;
+ //$b = "something new";
+ }
+ bb();
+ echo $b;
+
+
+ 这样的话会给出一个notice级别的报错
+
+
+
+
+ $a = 10;
+ function bb(){
+ $a = $a * 10;
+ }
+ echo $a;
+
+
+ 这样就是正确的,没有报错,原因有待分析
+
+
+
diff --git "a/data/\345\205\263\344\272\216\345\205\254\345\217\270\344\273\243\347\240\201\347\232\204\347\202\271\350\257\204.html" "b/data/\345\205\263\344\272\216\345\205\254\345\217\270\344\273\243\347\240\201\347\232\204\347\202\271\350\257\204.html"
new file mode 100644
index 0000000..200ff81
--- /dev/null
+++ "b/data/\345\205\263\344\272\216\345\205\254\345\217\270\344\273\243\347\240\201\347\232\204\347\202\271\350\257\204.html"
@@ -0,0 +1,55 @@
+
+
+
+
+
关于公司代码的点评
+
+
+
关于公司代码的点评
+
+ 我先在说的只是缺点了,大概或许更有意义一些,总体来说大概分为一下几点
+
+
+ 代码块的臃肿
+
+
+ 文件与文件之间的耦合
+
+
+ 注释上的规范
+
+
+ 开发文档的缺失
+
+
+
+
+
+ 首先我说一下代码块的臃肿这一点,主要得来说,就是觉得大段大段的代码之间平铺开来,没有功能的划分,也没有使用函数,就以account/logging.php来说,整个文件两百多行,
+ 没有使用一个函数,整个文件,就是一个巨大的函数,require了就执行的函数,这点,我想是不对的,一个函数,最高不超过一屏,一行代码,最长不过一屏,这个是之前我学习开发规范的时候里面提及的。
+ 我想这句话是有道理的,将一个文件内部的代码分为若干个函数有以下好处,首先,功能的细化,每个函数完成的,是一个小功能,必须独立,方便测试与维护
+ 第二点,增加了代码的可阅读性,整个代码由若干子函数组成,只需明了函数功能,而不用深入研读代码,第三点,或许可以有,就是增加复用性,复用性的增加其实要看场景,就以account/logging.php来说,不具备这点
+
+
+
+ 说到耦合这一点,弱耦合应该是所有软件工程师的想法,文件于文件之间有联系是难免的,而这种联系应该是越少越好,
+
+
+ 某种意义上来说,我可以理解$_G的存在,有些全局的状态标记是正常的,只是说。$_G里面居然有如此多的内容,真是让人意外,有次var_dump $_G发现里面居然有一篇文章的存在,
+ 我想,对全局变量的使用,应该是过头了,没有考虑过内存浪费么,最小权限定理,我想应该是很多的人都知道的。
+
+
+ 还有uc_client/model/user.php里面的UC_DBTABLEPRE,至今找不到在哪里有申明赋值,至少,不在父类,也不在调用函数里面,
+ 一个变量,在调用级别上超过三层,无论当初设计者心里的模型是怎么样的,我想都应该思考下,是不是可以更加扁平化。
+ 公司代码的函数调用上有问题,uc_client/client.php里面这么多函数,居然没有一个class声明,class不是必须的,只是为了避免文件重名造成的冲突,还有方便查找,函数上百个很容易,但是class上百个不容易
+
+
+
+ 注释的重要性,应该不需要我来说明了吧,在我入职的时候,记得有收到一份关于注释规范的说明,只是在阅读代码的时候,却没有发现任何注释,我对phpdocument的遵守非常严格,所以面对没有注释的代码,总是觉得无法接受。目前公司的代码,看起来像一个人闭关一个月火急火燎的实现了功能,然后甩手度假去了的样子。
+
+
+ 网站没有文档,注释当然也算文档,只是除此之外,应该还有一些说明和注释文档,说明设计者的意图,模型,以及各个模块的划分,文件夹的功能和位置,以及数据库每个字段的意义,整体网站的模型,结构之类的东西。我认为这个对理解和二次开发都很重要,也是程序员沟通,决策的依据。或许是因为我没有看discuz的文档吧,才会有这种感觉,即使如此,二次开发应该也有二次开发的说明文档。
+
+
+
+
diff --git "a/data/\345\205\263\344\272\216\347\272\242\351\273\221\346\240\221\347\232\204\347\220\206\350\247\243.html" "b/data/\345\205\263\344\272\216\347\272\242\351\273\221\346\240\221\347\232\204\347\220\206\350\247\243.html"
new file mode 100644
index 0000000..748fa46
--- /dev/null
+++ "b/data/\345\205\263\344\272\216\347\272\242\351\273\221\346\240\221\347\232\204\347\220\206\350\247\243.html"
@@ -0,0 +1,17 @@
+
+
+
+
+
红黑树感悟
+
+
+
+
红黑树感悟
+
+ 红黑树是自平衡树,强制性的遵守5种规则,以达到logo的目的
+ 红色,代表新插入的节点和
+ 红色代表没有子节点或者是子节点中不是一个完全二叉树
+ 如果父亲节点和叔叔节点都是红色的,那就是代表他们都不是完全二叉树,需要到爷爷节点处理,
+
+
+
diff --git "a/data/\345\256\211\350\243\205lnmp\347\216\257\345\242\203" "b/data/\345\256\211\350\243\205lnmp\347\216\257\345\242\203"
new file mode 100755
index 0000000..3343743
--- /dev/null
+++ "b/data/\345\256\211\350\243\205lnmp\347\216\257\345\242\203"
@@ -0,0 +1,54 @@
+1. yum update
+
+2. װepelԴ,ڰװnginx, mysql-server
+rpm -Uvh http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm
+yum install nginx mysql-server
+
+3. remi repository װphp-fpm
+rpm -Uvh http://mirrors.mediatemple.net/remi/enterprise/remi-release-6.rpm
+yum install php-mysql php-mcrypt php-fpm php-mbstring
+
+4. php,nginx,mysql-server
+chkconfig nginx on
+chkconfig php-fpm on
+chkconfig mysqld on
+
+5. nginx, php-fpm mysql-server
+service nginx start
+service php-fpm start
+service mysqld start
+
+6. ȷϽǷ
+ps aux | grep nginx
+ps aux | grep php-fpm
+ps aux | grep mysqld
+
+7. iptablesǽ
+service iptables stop
+chkconfig iptables off
+
+8. php fpmĬϼ9000˿ڣnginxתphpphp-fpmִ
+mkdir /var/www/default -p
+
+
+
+
两次接手开发的经验
+
+
+
+
+ 第一次很大程度上是因为对composer的不了解,其他的配置和之前的差不多
+
+
+
+ 这次很大程度上是对框架的不了解,加上对配置的过于复杂
+ 首先php要5.5 mysql 5.5 centos最好也是6.5的
+ 其次,短标签要打开,修改php.ini,直接将php.ini导入了
+ 导入对应的转发规则,nginx/conf.d/default.conf的配置文件,或许可以不是这个名字,但是要有对应的配置文件,
+ 数据最好通过source的方式导入,不然容易出问题,一旦版本不完全一致,就会造成读写出故障
+ php-fpm对应的权限,用户有时候是www权限,所以即使对应的是777的权限也会出问题,我将用户名和组修改成了本机的用户名和组tianyi
+ ----------------------------半个月后---------------------------
+ 我还是把php-fpm 修改成了nginx的权限,否则在post提交的时候会面临错误,无法提交数据,报错如下
+ Warning: REQUEST_BODY_FILE: open('/dev/shm/client_body_temp/0000000001') failed: Permission denied (13)
+
+
+
diff --git "a/data/\346\265\213\350\257\225.html" "b/data/\346\265\213\350\257\225.html"
new file mode 100644
index 0000000..b8622c5
--- /dev/null
+++ "b/data/\346\265\213\350\257\225.html"
@@ -0,0 +1,10 @@
+
+
+
+
后台的基础
+
+
+
+
测试
+
+
diff --git "a/data/\346\267\273\345\212\240\350\277\234\347\250\213\344\273\223\345\272\223\357\274\214\344\270\216\344\270\212\346\270\270\344\273\243\347\240\201\345\272\223\345\220\210\345\271\266.html" "b/data/\346\267\273\345\212\240\350\277\234\347\250\213\344\273\223\345\272\223\357\274\214\344\270\216\344\270\212\346\270\270\344\273\243\347\240\201\345\272\223\345\220\210\345\271\266.html"
new file mode 100644
index 0000000..5b991f3
--- /dev/null
+++ "b/data/\346\267\273\345\212\240\350\277\234\347\250\213\344\273\223\345\272\223\357\274\214\344\270\216\344\270\212\346\270\270\344\273\243\347\240\201\345\272\223\345\220\210\345\271\266.html"
@@ -0,0 +1,23 @@
+
+
+
+
+
添加远程仓库,于上游代码合并
+
+
+
+
+
后台的基础
+
+ 首先通过命令
+ git remote add name git_url
+ 添加对应的仓库地址
+ 然后可以通过命令
+ git fetch -all
+ 获取所有的远程仓库的内容和数据
+ 最后通过
git merge -X theirs branches
+ 的方式与远程仓库合并
+
+
+
+
diff --git "a/data/\347\254\254\344\272\214\346\254\241\346\216\245\346\224\266\345\274\200\345\217\221.html" "b/data/\347\254\254\344\272\214\346\254\241\346\216\245\346\224\266\345\274\200\345\217\221.html"
new file mode 100644
index 0000000..001972f
--- /dev/null
+++ "b/data/\347\254\254\344\272\214\346\254\241\346\216\245\346\224\266\345\274\200\345\217\221.html"
@@ -0,0 +1,10 @@
+
+
+
接收开发别人的任务
+
+
+
+ 在没有开发文档的情况下开发别人开发过的东西,简直就是耍流氓啊
+
+
+
diff --git "a/data/\350\261\206\345\256\266\346\225\217.html" "b/data/\350\261\206\345\256\266\346\225\217.html"
new file mode 100644
index 0000000..9b3d3bf
--- /dev/null
+++ "b/data/\350\261\206\345\256\266\346\225\217.html"
@@ -0,0 +1,343 @@
+
+
+
+
+
豆家敏
+
+
+
+
豆家敏
+
+
+
+
技术能力
+
+
+熟练掌握PHP,曾阅读多个框架源码,开发项目若干
+对redis有过比较深入学习,曾用于线上开发维护,对事件调度(epoll部分),IO响应及多机部分源码分析(详情见博客 )
+熟练使用mysql,对Innodb有过比较深入学习
+对golang(详情见博客 ),nodejs有一定程度的学习,并曾用于线上项目,阅读过golang runtime 部分代码
+略通前端,熟练使用jquery
+熟悉图论,动态规划,以及各种基础数据结构,参加过ACM
+对C和linux有一定的学习
+熟悉svn,git
+vim, the best
+对高并发以及分布式设计有过一定学习,并有浓厚的兴趣
+
+
+
履历
+
+
+2010.9 ~ 2014.6 电子科技大学学士
+2014.7 ~ 2015.2 为新浪娱乐开发活动系统,这个为新浪娱乐举办各种抢票,抽奖等活动的系统。用到了redis,go,nodejs,对分表,并发,以及代码的抽象设计,编程规范,代码测试等进行了比较深入的探讨和学习,使用了phpdocument生成文档,phpunit做单元测试
+2015.2 ~ 至今 维护新浪体育的综合部分 ,新浪论坛 ,以及新浪彩票 ,改进了论坛的反垃圾机制,重构了很多综合以及论坛的老代码,完成论坛和综合的日常维护,排查解决出现的bug。
+
+
+
+
+
+
diff --git "a/data/\350\261\206\345\256\266\346\225\217.pdf" "b/data/\350\261\206\345\256\266\346\225\217.pdf"
new file mode 100644
index 0000000..987ef52
Binary files /dev/null and "b/data/\350\261\206\345\256\266\346\225\217.pdf" differ
diff --git "a/data/\350\261\206\345\256\266\346\225\217\345\267\245\347\250\213\345\270\210.pdf" "b/data/\350\261\206\345\256\266\346\225\217\345\267\245\347\250\213\345\270\210.pdf"
new file mode 100644
index 0000000..70fc858
Binary files /dev/null and "b/data/\350\261\206\345\256\266\346\225\217\345\267\245\347\250\213\345\270\210.pdf" differ
diff --git "a/data/\350\261\206\345\256\266\346\225\217\347\232\204\347\256\200\345\216\206.pdf" "b/data/\350\261\206\345\256\266\346\225\217\347\232\204\347\256\200\345\216\206.pdf"
new file mode 100644
index 0000000..45f62fa
Binary files /dev/null and "b/data/\350\261\206\345\256\266\346\225\217\347\232\204\347\256\200\345\216\206.pdf" differ
diff --git "a/data/\350\261\206\345\256\266\346\225\217\347\256\200\345\216\206.md" "b/data/\350\261\206\345\256\266\346\225\217\347\256\200\345\216\206.md"
new file mode 100644
index 0000000..f37f70a
--- /dev/null
+++ "b/data/\350\261\206\345\256\266\346\225\217\347\256\200\345\216\206.md"
@@ -0,0 +1,54 @@
+
+
+ 姓名 :豆家敏
+ 微信 :1264310280
+
+
+ 性别 :男
+ 邮箱 : unasm@sina.cn
+
+
+ 专业 :信息对抗技术
+ github :https://github.com/unasm
+
+
+
+
+ 出生年月 :1992年2月
+ 毕业时间 :2014年7月
+
+
+
+ 毕业院校 :电子科技大学/UESTC 本科
+
+
+ 供职公司 :新浪,借贷宝,思必驰
+
+
+
+
+####技术栈
++ 开发经验丰富,编程能力强悍,解决问题能力强悍,负责过业务系统,基础架构,数据仓库的系统设计,架构,开发
++ 熟悉Java,python开发,了解微服务,服务治理,Spring Boot. 使用过go,lua,PHP,nodejs等,了解监控,常见的性能优化,自动化测试等
++ 对机器学习感兴趣,熟悉常见的机器学习技术,如xgboost,cnn,svd,协同过滤等,阅读过gbdt源码,结巴分词源码等,对知识图谱有一定的了解
++ 有一定的大数据经验,对kafka, es, impala,kylin等有一定了解,负责部门数据统计,可视化,报表,用户请求分析,全链路流量复盘等大数据相关工作
++ 阅读过redis(3.0,C语言)源码, 阅读过beego部分源码
++ leetcode AC 100+, 西南地区ACM二等奖,Kaggle 房价预测 550+名, 羽毛球第五级
+
+##### 2018.1 ~ 至今 思必驰开发工程师,数据工程师,绩效优秀
+> 1. 日志系统设计搭建,日志中间件开发,完成了格式化业务日志,追踪请求的调用关系,响应时间,处理过程,延迟,异常等等,支持数据埋点,自动化记录等功能,结合elk,kafka,filebeat等搭建了日志体系,满足研发实时追查线上问题的需求,成为监控报警,以及数据分析重要部分,推进了日志规范落地执行,奠定了数据的基础,部门最成功最核心的基础服务
+> 2. 数据仓库的设计和搭建,建立了数据从收集到输出的体系。 统一日志规范,搭建设计了日志的收集清洗系统,提取对话内容,数据偏差在1%以内,统计线上响应情况,pv,uv,通过kylin 提供 http接口,支撑内容查询,数据报表和分析需求。
+> 3. 对话管理系统开发改进,对话系统的改进,增加多轮对话,整理闲聊数据,推进了单元测试和交互测试的落地,极大提升了服务质量,避免问题反复
+> 4. 优化DM性能延迟,响应时间压缩到90分位在200ms以内
+> 5. 维护了敏感词识别,反问句生成,意图识别等项目
+> 6. 优化儿童闲聊,从最初的30%命中率提升到46%
+
+
+##### 2015.9 ~ 2017.12 借贷宝数据服务,研发工程师,算法工程师
+> 1. 参与了公司的征信建模,通过使用xgboost,tensorflow对用户信用评级。使用tableau提供BI服务,通过spark集群做一些查询工作,数据分析处理工作。做过一些NLP的工作。
+> 2. 主导了数据服务本地化工作,搭建从客户端埋点,到数据检查清洗,kafka传输,parquet存储,impala查询,日消费数据千万级,推进了数据服务可视化的工作。
+> 3. 维护开发了红包系统,抽样系统等,抽样系统为lua + C 开发,扩展ng rewrite阶段功能,达到流量采样分化的目标,通过连接池,共享缓存,init阶段初始化等方式,控制系统响应时间控制在0.1ms内。
+> 4. 企业版研发leader,维护开发企业版,地推,红包等系统,参与整个系统的设计和讨论,包括企业门户,支付,鉴权,好友,passport等系统的角色界定和分工,系统间通信等,负责了企业门户的开发,错误追查,数据修复,Code Review, 新功能评审,排期,协调研发资源,测试资源,推进需求完成等等。
+
+##### 2014.7 ~ 2015.9 新浪 PHP开发工程师
+> 1. 维护新浪论坛,新浪体育,新浪
diff --git "a/data/\350\261\206\345\256\266\346\225\217\347\256\200\345\216\206_\345\244\247\346\225\260\346\215\256\345\274\200\345\217\221\345\267\245\347\250\213\345\270\210.pdf" "b/data/\350\261\206\345\256\266\346\225\217\347\256\200\345\216\206_\345\244\247\346\225\260\346\215\256\345\274\200\345\217\221\345\267\245\347\250\213\345\270\210.pdf"
new file mode 100644
index 0000000..3158bd4
Binary files /dev/null and "b/data/\350\261\206\345\256\266\346\225\217\347\256\200\345\216\206_\345\244\247\346\225\260\346\215\256\345\274\200\345\217\221\345\267\245\347\250\213\345\270\210.pdf" differ
diff --git "a/data/\350\261\206\345\256\266\346\225\217\347\256\200\345\216\206_\345\267\245\347\250\213\345\270\210.md" "b/data/\350\261\206\345\256\266\346\225\217\347\256\200\345\216\206_\345\267\245\347\250\213\345\270\210.md"
new file mode 100644
index 0000000..a2a6d61
--- /dev/null
+++ "b/data/\350\261\206\345\256\266\346\225\217\347\256\200\345\216\206_\345\267\245\347\250\213\345\270\210.md"
@@ -0,0 +1,53 @@
+
+
+####技术栈
++ 对php,java,lua,golang,scala,python 均有一定程度的掌握,动手能力强,开发经验丰富
++ 搭建过ELK集群,CDH集群,GPU服务器, 对es,kudu,mysql,vertica,hdfs等存储有一定了解
++ 对数据处理感兴趣,对xgboost,tensorflow有一定掌握,knn,贝叶斯,lasso等传统算法也有一定掌握,阅读过gbdt源码,scikit-learn 部分源码, 有良好的数理基础
++ 对高性能低延迟系统有比较深入的学习,阅读过redis(3.0,C)源码,使用golang开发过高并发低延迟系统,阅读过beego部分源码
+
+##### 2016.12 ~ 至今 借贷宝数据服务,研发工程师,算法工程师
+> 1. 参与了公司的征信建模,通过使用xgboost,tensorflow对用户信用评级。使用tableau提供BI服务,通过spark集群做一些查询,数据分析处理工作。做过一些NLP的工作,如关键词提取,词向量等。
+> 2. 主导了数据服务本地化工作,搭建从客户端埋点,到数据检查清洗,kafka传输,parquet存储,impala查询, tableau提供可视化,日消费数据千万级,为公司的风控,运营等等部门服务,成为了公司数据服务核心系统之一。
+
+##### 2016.10 ~ 2016.12 借贷宝基础服务研发
+> 1. 抽样系统为lua + C 开发,扩展ng rewrite阶段功能,达到流量采样分化的目标,通过连接池,共享缓存,init阶段初始化等方式,控制系统响应时间控制在0.1ms内,承载了公司的白名单,AB测试等业务,该套架构成为后续sso,防火墙等系统的模板,非常富有想象力的系统。
+
+##### 2015.9 ~ 2016.10 企业版,地推拉新系统 任研发leader,PHP开发工程师
+> 1. 借贷宝年度新战略方向企业版的开发,参与整个系统的设计和讨论,包括企业门户,支付,鉴权,好友,passport等系统的角色界定和分工,系统间通信等,负责了企业门户的开发,错误追查,数据修复,Code Review, 运维,新功能评审,排期,协调研发资源,测试资源,与业务方沟通,推进需求完成等等。
+> 2. 地推拉新系统,每日系统上百万注册用户量,推广经理提现奖金上千万。每天一发布,三天大发布,服务数万推广商,几百推广经理,与三四个同事一起支撑起借贷宝半年上亿注册用户的技术支持工作,耐心认真,不辞辛苦,表现深得上级同事认同,为后续承担其他重大项目的奠定基础。
+
+##### 2014.7 ~ 2015.9 新浪 PHP 开发工程师
+> 1. 维护新浪论坛,新浪体育和新浪娱乐,开发了新浪娱乐活动系统。
+
+####个人自评
+在编程领域进行了广泛的学习和实战,从fe,js,业务系统研发,数据系统开发,ng扩展,浏览器扩展到系统运维,从快速开发到高性能高并发系统,压力测试等等,均能胜任,公司的研发核心,攻坚力量,学习能力强。对机器学习和应用算法很感兴趣,正在不断加深学习。
+
+希望能与更多优秀的人一起工作学习进步。
\ No newline at end of file
diff --git "a/data/\350\261\206\345\256\266\346\225\217\347\256\200\345\216\206_\345\267\245\347\250\213\345\270\210.pdf" "b/data/\350\261\206\345\256\266\346\225\217\347\256\200\345\216\206_\345\267\245\347\250\213\345\270\210.pdf"
new file mode 100644
index 0000000..605ea1f
Binary files /dev/null and "b/data/\350\261\206\345\256\266\346\225\217\347\256\200\345\216\206_\345\267\245\347\250\213\345\270\210.pdf" differ
diff --git "a/data/\350\261\206\345\256\266\346\225\217\347\256\200\345\216\206_\347\256\227\346\263\225\345\267\245\347\250\213\345\270\210.pdf" "b/data/\350\261\206\345\256\266\346\225\217\347\256\200\345\216\206_\347\256\227\346\263\225\345\267\245\347\250\213\345\270\210.pdf"
new file mode 100644
index 0000000..9372055
Binary files /dev/null and "b/data/\350\261\206\345\256\266\346\225\217\347\256\200\345\216\206_\347\256\227\346\263\225\345\267\245\347\250\213\345\270\210.pdf" differ
diff --git "a/data/\350\261\206\345\256\266\346\225\217\347\256\200\345\216\206_\347\256\227\346\263\225\345\267\245\347\250\213\345\270\210\346\226\271\345\220\221.pdf" "b/data/\350\261\206\345\256\266\346\225\217\347\256\200\345\216\206_\347\256\227\346\263\225\345\267\245\347\250\213\345\270\210\346\226\271\345\220\221.pdf"
new file mode 100644
index 0000000..3a701ec
Binary files /dev/null and "b/data/\350\261\206\345\256\266\346\225\217\347\256\200\345\216\206_\347\256\227\346\263\225\345\267\245\347\250\213\345\270\210\346\226\271\345\220\221.pdf" differ
diff --git "a/data/\350\261\206\345\256\266\346\225\217\347\256\200\345\216\206_\351\207\217\345\214\226.pdf" "b/data/\350\261\206\345\256\266\346\225\217\347\256\200\345\216\206_\351\207\217\345\214\226.pdf"
new file mode 100644
index 0000000..70429ce
Binary files /dev/null and "b/data/\350\261\206\345\256\266\346\225\217\347\256\200\345\216\206_\351\207\217\345\214\226.pdf" differ
diff --git "a/data/\350\261\206\345\256\266\346\225\217\347\256\200\345\216\206_\351\207\217\345\214\226\345\267\245\347\250\213\345\270\210.pdf" "b/data/\350\261\206\345\256\266\346\225\217\347\256\200\345\216\206_\351\207\217\345\214\226\345\267\245\347\250\213\345\270\210.pdf"
new file mode 100644
index 0000000..987ef52
Binary files /dev/null and "b/data/\350\261\206\345\256\266\346\225\217\347\256\200\345\216\206_\351\207\217\345\214\226\345\267\245\347\250\213\345\270\210.pdf" differ
diff --git "a/data/\350\261\206\345\256\266\346\225\217\347\256\200\345\216\206_\351\207\217\345\214\226\347\263\273\347\273\237\345\267\245\347\250\213\345\270\210.pdf" "b/data/\350\261\206\345\256\266\346\225\217\347\256\200\345\216\206_\351\207\217\345\214\226\347\263\273\347\273\237\345\267\245\347\250\213\345\270\210.pdf"
new file mode 100644
index 0000000..c3960c9
Binary files /dev/null and "b/data/\350\261\206\345\256\266\346\225\217\347\256\200\345\216\206_\351\207\217\345\214\226\347\263\273\347\273\237\345\267\245\347\250\213\345\270\210.pdf" differ
diff --git "a/data/\350\261\206\345\256\266\346\225\217\347\256\200\345\216\206_\351\207\221\350\236\215.md" "b/data/\350\261\206\345\256\266\346\225\217\347\256\200\345\216\206_\351\207\221\350\236\215.md"
new file mode 100644
index 0000000..786bf15
--- /dev/null
+++ "b/data/\350\261\206\345\256\266\346\225\217\347\256\200\345\216\206_\351\207\221\350\236\215.md"
@@ -0,0 +1,66 @@
+
+
+####技术栈
++ 开发经验丰富,编程能力强悍,解决问题能力强悍,负责过业务系统,基础架构,数据仓库的系统设计,架构,开发
++ 对机器学习感兴趣,熟悉常见的机器学习技术,如xgboost,cnn,svd,协同过滤等,阅读过gbdt源码
++ 有一定的大数据经验,对GPU服务器,es, impala,kylin等有一定了解,负责部门数据统计,可视化,报表等大数据相关工作
++ 对高性能低延迟系统有比较深入的学习,阅读过redis(3.0,C语言)源码,阅读过beego部分源码
++ 金融方向有一些学习,拜读过《证券分析》《主动投资管理》《美联储》《证券市场基础知识》等, 用机器学习做过一些数据分析
++ leetcode AC 100+, 西南地区ACM二等奖
++ Kaggle 房价预测 550+名
+
+
+##### 2018.1 ~ 至今 思必驰 架构师,数据工程师
+> 1. 日志系统设计实现,结合flask,springboot特性设计开发了日志中间件,完成了格式化业务日志,追踪请求的调用关系,响应时间,处理过程,延迟,异常等等,支持数据埋点,自动化记录等功能,结合kibana满足研发实时追查线上问题的需求,成为监控报警,以及数据分析重要部分,推动了公司日志的改进和统一,奠定了数据的基础,部门最成功最核心的基础服务
+> 2. 统一日志规范,搭建设计了日志的收集清洗系统,提取对话内容,数据偏差在1%以内,统计线上响应情况,pv,uv,通过kylin 提供 http接口,支撑内容查询,数据报表和分析需求。
+> 3. 数据仓库的设计和搭建,建立了数据从收集到输出的体系。
+> 4. 推进了单元测试和交互测试的落地,极大提升了服务质量,避免问题反复
+> 5. 维护了情感分析,敏感词识别等项目
+
+##### 2016.12 ~ 至今 借贷宝数据服务,研发工程师,算法工程师
+> 1. 参与了公司的征信建模,通过使用xgboost,tensorflow对用户信用评级。使用tableau提供BI服务,通过spark集群做一些查询,数据分析处理工作。做过一些NLP的工作,如关键词提取,词向量等。
+> 2. 主导了数据服务本地化工作,搭建从客户端埋点,到数据检查清洗,kafka传输,parquet存储,impala查询, tableau提供可视化,日消费数据千万级,为公司的风控,运营等等部门服务,成为了公司数据服务核心系统之一。
+
+##### 2016.10 ~ 2016.12 借贷宝基础服务研发
+> 1. 抽样系统为lua + C 开发,扩展ng rewrite阶段功能,达到流量采样分化的目标,通过连接池,共享缓存,init阶段初始化等方式,控制系统响应时间控制在0.1ms内,承载了公司的白名单,AB测试等业务,该套架构成为后续sso,防火墙等系统的模板,非常富有想象力的系统。
+
+##### 2015.9 ~ 2016.10 借贷宝企业版,地推拉新系统 任研发leader,PHP开发工程师
+> 1. 借贷宝年度新战略方向企业版的开发,参与整个系统的设计和讨论,包括企业门户,支付,鉴权,好友,passport等系统的角色界定和分工,系统间通信等,负责了企业门户的开发,错误追查,数据修复,Code Review, 运维,新功能评审,排期,协调研发资源,测试资源,与业务方沟通,推进需求完成等等。
+> 2. 地推拉新系统,每日系统上百万注册用户量,推广经理提现奖金上千万。每天一发布,三天大发布,服务数万推广商,几百推广经理,与三四个同事一起支撑起借贷宝半年上亿注册用户的技术支持工作,耐心认真,不辞辛苦,表现深得领导同事认同,为后续承担其他重大项目的奠定基础。
+
+##### 2014.7 ~ 2015.9 新浪 PHP 开发工程师
+> 1. 维护新浪论坛,新浪体育和新浪娱乐,开发了新浪娱乐活动系统。
+
+####个人自评
+在编程领域进行了广泛的学习和实战,从fe,js,业务系统研发,数据系统开发,ng扩展,浏览器扩展到系统运维,从快速开发到高性能高并发系统,压力测试等等,均能胜任,公司的研发核心,攻坚力量,学习能力强。
+
+对量化和数据分析非常感兴趣,希望能用机器学习在 量化领域做研究和尝试。
+
+希望能与更多优秀的人一起工作学习进步。
\ No newline at end of file
diff --git "a/data/\350\261\206\345\256\266\346\225\217\347\256\200\345\216\206_\351\207\221\350\236\215.pdf" "b/data/\350\261\206\345\256\266\346\225\217\347\256\200\345\216\206_\351\207\221\350\236\215.pdf"
new file mode 100644
index 0000000..abba01b
Binary files /dev/null and "b/data/\350\261\206\345\256\266\346\225\217\347\256\200\345\216\206_\351\207\221\350\236\215.pdf" differ
diff --git "a/data/\350\277\234\347\250\213\345\217\221\351\200\201\346\226\207\344\273\266\347\232\204\351\227\256\351\242\230.txt" "b/data/\350\277\234\347\250\213\345\217\221\351\200\201\346\226\207\344\273\266\347\232\204\351\227\256\351\242\230.txt"
new file mode 100644
index 0000000..bf9f663
--- /dev/null
+++ "b/data/\350\277\234\347\250\213\345\217\221\351\200\201\346\226\207\344\273\266\347\232\204\351\227\256\351\242\230.txt"
@@ -0,0 +1,10 @@
+当发送数据为
+ $Post['file'] = "@/var/www/psb.jpg";
+ $Post['name'] = "test";
+ 的时候
+对面接受到的文件类型为
+application/octet-stream ,这代表对面无法识别出文件类型,在对面判断文件类型的时候,就回出问题,最理想的情况下type应该为image/jpeg
+解决方案为
+$Post['file'] = "@/var/www/psb.jpg;type=image/jpeg";
+$Post['name'] = "test";
+post这样发送就可以了
diff --git "a/data/\351\241\271\347\233\256\344\273\243\347\240\201\351\230\205\350\257\273\347\254\224\350\256\260.html" "b/data/\351\241\271\347\233\256\344\273\243\347\240\201\351\230\205\350\257\273\347\254\224\350\256\260.html"
new file mode 100755
index 0000000..38b3368
--- /dev/null
+++ "b/data/\351\241\271\347\233\256\344\273\243\347\240\201\351\230\205\350\257\273\347\254\224\350\256\260.html"
@@ -0,0 +1,19 @@
+
+
+
+
+
项目代码阅读笔记
+
+
+
项目代码阅读笔记
+
自从阅读了codeigniter的框架代码之后,就很久没有接触其他的代码了,今天开始学习discuz的源码
+
从index.php看进去,发现index就是干一个事情,就是分发路由,确切说,他是在确定用户是想访问某个具体的版块,还是想访问主网站,或者是手机端,或者是二级域名, url不同,接下来引向的处理文件不同
+
init_input对全局变量 进行处理,包括了 GEt中关键字的处理 , 比如GLOBALS , rewrite , post , rer
+
+ init_config中是对全局变量的处理,配置
+
+
+ mod 的 的功能是什么?
+
+
+
diff --git a/images/algolia_logo.svg b/images/algolia_logo.svg
deleted file mode 100644
index 4702423..0000000
--- a/images/algolia_logo.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/images/apple-touch-icon-next.png b/images/apple-touch-icon-next.png
deleted file mode 100644
index 86a0d1d..0000000
Binary files a/images/apple-touch-icon-next.png and /dev/null differ
diff --git a/images/avatar.gif b/images/avatar.gif
deleted file mode 100644
index 9899025..0000000
Binary files a/images/avatar.gif and /dev/null differ
diff --git a/images/cc-by-nc-nd.svg b/images/cc-by-nc-nd.svg
deleted file mode 100644
index 79a4f2e..0000000
--- a/images/cc-by-nc-nd.svg
+++ /dev/null
@@ -1,121 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
- image/svg+xml
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/images/cc-by-nc-sa.svg b/images/cc-by-nc-sa.svg
deleted file mode 100644
index bf6bc26..0000000
--- a/images/cc-by-nc-sa.svg
+++ /dev/null
@@ -1,121 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
- image/svg+xml
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/images/cc-by-nc.svg b/images/cc-by-nc.svg
deleted file mode 100644
index 3697349..0000000
--- a/images/cc-by-nc.svg
+++ /dev/null
@@ -1,121 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
- image/svg+xml
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/images/cc-by-nd.svg b/images/cc-by-nd.svg
deleted file mode 100644
index 934c61e..0000000
--- a/images/cc-by-nd.svg
+++ /dev/null
@@ -1,117 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
- image/svg+xml
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/images/cc-by-sa.svg b/images/cc-by-sa.svg
deleted file mode 100644
index 463276a..0000000
--- a/images/cc-by-sa.svg
+++ /dev/null
@@ -1,121 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
- image/svg+xml
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/images/cc-by.svg b/images/cc-by.svg
deleted file mode 100644
index 4bccd14..0000000
--- a/images/cc-by.svg
+++ /dev/null
@@ -1,121 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
- image/svg+xml
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/images/cc-zero.svg b/images/cc-zero.svg
deleted file mode 100644
index 0f86639..0000000
--- a/images/cc-zero.svg
+++ /dev/null
@@ -1,72 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/images/favicon-16x16-next.png b/images/favicon-16x16-next.png
deleted file mode 100644
index de8c5d3..0000000
Binary files a/images/favicon-16x16-next.png and /dev/null differ
diff --git a/images/favicon-32x32-next.png b/images/favicon-32x32-next.png
deleted file mode 100644
index e02f5f4..0000000
Binary files a/images/favicon-32x32-next.png and /dev/null differ
diff --git a/images/loading.gif b/images/loading.gif
deleted file mode 100644
index efb6768..0000000
Binary files a/images/loading.gif and /dev/null differ
diff --git a/images/logo.svg b/images/logo.svg
deleted file mode 100644
index cbb3937..0000000
--- a/images/logo.svg
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
image/svg+xml
diff --git a/images/placeholder.gif b/images/placeholder.gif
deleted file mode 100644
index efb6768..0000000
Binary files a/images/placeholder.gif and /dev/null differ
diff --git a/images/quote-l.svg b/images/quote-l.svg
deleted file mode 100644
index 6dd94a4..0000000
--- a/images/quote-l.svg
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/images/quote-r.svg b/images/quote-r.svg
deleted file mode 100644
index 312b64d..0000000
--- a/images/quote-r.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/images/searchicon.png b/images/searchicon.png
deleted file mode 100644
index 14a16ca..0000000
Binary files a/images/searchicon.png and /dev/null differ
diff --git a/index.html b/index.html
deleted file mode 100644
index ead7fa9..0000000
--- a/index.html
+++ /dev/null
@@ -1,2019 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
无所欲无所忧,无心者无所求,饱食而遨游,泛若不系之舟
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/js/src/affix.js b/js/src/affix.js
deleted file mode 100644
index 11a3d39..0000000
--- a/js/src/affix.js
+++ /dev/null
@@ -1,162 +0,0 @@
-/* ========================================================================
- * 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/js/src/algolia-search.js b/js/src/algolia-search.js
deleted file mode 100644
index 9787e2a..0000000
--- a/js/src/algolia-search.js
+++ /dev/null
@@ -1,115 +0,0 @@
-/* global instantsearch: true */
-/*jshint camelcase: false */
-
-$(document).ready(function () {
- var algoliaSettings = CONFIG.algolia;
- var isAlgoliaSettingsValid = algoliaSettings.applicationID &&
- algoliaSettings.apiKey &&
- algoliaSettings.indexName;
-
- if (!isAlgoliaSettingsValid) {
- window.console.error('Algolia Settings are invalid.');
- return;
- }
-
- var search = instantsearch({
- appId: algoliaSettings.applicationID,
- apiKey: algoliaSettings.apiKey,
- indexName: algoliaSettings.indexName,
- searchFunction: function (helper) {
- var searchInput = $('#algolia-search-input').find('input');
-
- if (searchInput.val()) {
- helper.search();
- }
- }
- });
-
- // Registering Widgets
- [
- instantsearch.widgets.searchBox({
- container: '#algolia-search-input',
- placeholder: algoliaSettings.labels.input_placeholder
- }),
-
- instantsearch.widgets.hits({
- container: '#algolia-hits',
- hitsPerPage: algoliaSettings.hits.per_page || 10,
- templates: {
- item: function (data) {
- var link = data.permalink ? data.permalink : (CONFIG.root + data.path);
- return (
- '
' +
- data._highlightResult.title.value +
- ' '
- );
- },
- empty: function (data) {
- return (
- '
' +
- algoliaSettings.labels.hits_empty.replace(/\$\{query}/, data.query) +
- '
'
- );
- }
- },
- cssClasses: {
- item: 'algolia-hit-item'
- }
- }),
-
- instantsearch.widgets.stats({
- container: '#algolia-stats',
- templates: {
- body: function (data) {
- var stats = algoliaSettings.labels.hits_stats
- .replace(/\$\{hits}/, data.nbHits)
- .replace(/\$\{time}/, data.processingTimeMS);
- return (
- stats +
- '
' +
- ' ' +
- ' ' +
- '
'
- );
- }
- }
- }),
-
- instantsearch.widgets.pagination({
- container: '#algolia-pagination',
- scrollTo: false,
- showFirstLast: false,
- labels: {
- first: '
',
- last: '
',
- previous: '
',
- next: '
'
- },
- cssClasses: {
- root: 'pagination',
- item: 'pagination-item',
- link: 'page-number',
- active: 'current',
- disabled: 'disabled-item'
- }
- })
- ].forEach(search.addWidget, search);
-
- search.start();
-
- $('.popup-trigger').on('click', function(e) {
- e.stopPropagation();
- $('body')
- .append('')
- .css('overflow', 'hidden');
- $('.popup').toggle();
- $('#algolia-search-input').find('input').focus();
- });
-
- $('.popup-btn-close').click(function(){
- $('.popup').hide();
- $('.algolia-pop-overlay').remove();
- $('body').css('overflow', '');
- });
-
-});
diff --git a/js/src/bootstrap.js b/js/src/bootstrap.js
deleted file mode 100644
index d9c33ed..0000000
--- a/js/src/bootstrap.js
+++ /dev/null
@@ -1,52 +0,0 @@
-/* global NexT: true */
-
-$(document).ready(function () {
-
- $(document).trigger('bootstrap:before');
-
- NexT.utils.isMobile() && window.FastClick.attach(document.body);
-
- NexT.utils.lazyLoadPostsImages();
-
- NexT.utils.registerESCKeyEvent();
-
- NexT.utils.registerBackToTop();
-
- // Mobile top menu bar.
- $('.site-nav-toggle button').on('click', function () {
- var $siteNav = $('.site-nav');
- var ON_CLASS_NAME = 'site-nav-on';
- var isSiteNavOn = $siteNav.hasClass(ON_CLASS_NAME);
- var animateAction = isSiteNavOn ? 'slideUp' : 'slideDown';
- var animateCallback = isSiteNavOn ? 'removeClass' : 'addClass';
-
- $siteNav.stop()[animateAction]('fast', function () {
- $siteNav[animateCallback](ON_CLASS_NAME);
- });
- });
-
- /**
- * Register JS handlers by condition option.
- * Need to add config option in Front-End at 'layout/_partials/head.swig' file.
- */
- CONFIG.fancybox && NexT.utils.wrapImageWithFancyBox();
- CONFIG.tabs && NexT.utils.registerTabsTag();
-
- NexT.utils.embeddedVideoTransformer();
- NexT.utils.addActiveClassToMenuItem();
-
-
- // Define Motion Sequence.
- NexT.motion.integrator
- .add(NexT.motion.middleWares.logo)
- .add(NexT.motion.middleWares.menu)
- .add(NexT.motion.middleWares.postList)
- .add(NexT.motion.middleWares.sidebar);
-
- $(document).trigger('motion:before');
-
- // Bootstrap Motion.
- CONFIG.motion.enable && NexT.motion.integrator.bootstrap();
-
- $(document).trigger('bootstrap:after');
-});
diff --git a/js/src/exturl.js b/js/src/exturl.js
deleted file mode 100644
index b85062a..0000000
--- a/js/src/exturl.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/* global NexT: true */
-
-$(document).ready(function () {
-
- // Create Base64 Object
- var Base64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(e){var t="";var n,r,i,s,o,u,a;var f=0;e=Base64._utf8_encode(e);while(f
>2;o=(n&3)<<4|r>>4;u=(r&15)<<2|i>>6;a=i&63;if(isNaN(r)){u=a=64}else if(isNaN(i)){a=64}t=t+this._keyStr.charAt(s)+this._keyStr.charAt(o)+this._keyStr.charAt(u)+this._keyStr.charAt(a)}return t},decode:function(e){var t="";var n,r,i;var s,o,u,a;var f=0;e=e.replace(/[^A-Za-z0-9+/=]/g,"");while(f>4;r=(o&15)<<4|u>>2;i=(u&3)<<6|a;t=t+String.fromCharCode(n);if(u!=64){t=t+String.fromCharCode(r)}if(a!=64){t=t+String.fromCharCode(i)}}t=Base64._utf8_decode(t);return t},_utf8_encode:function(e){e=e.replace(/rn/g,"n");var t="";for(var n=0;n127&&r<2048){t+=String.fromCharCode(r>>6|192);t+=String.fromCharCode(r&63|128)}else{t+=String.fromCharCode(r>>12|224);t+=String.fromCharCode(r>>6&63|128);t+=String.fromCharCode(r&63|128)}}return t},_utf8_decode:function(e){var t="";var n=0;var r=c1=c2=0;while(n191&&r<224){c2=e.charCodeAt(n+1);t+=String.fromCharCode((r&31)<<6|c2&63);n+=2}else{c2=e.charCodeAt(n+1);c3=e.charCodeAt(n+2);t+=String.fromCharCode((r&15)<<12|(c2&63)<<6|c3&63);n+=3}}return t}};
-
- $('.exturl').on('click', function () {
- var $exturl = $(this).attr('data-url');
- var $decurl = Base64.decode($exturl);
- window.open($decurl, '_blank');
- return false;
- });
-
-});
diff --git a/js/src/hook-duoshuo.js b/js/src/hook-duoshuo.js
deleted file mode 100644
index ca64dbd..0000000
--- a/js/src/hook-duoshuo.js
+++ /dev/null
@@ -1,115 +0,0 @@
-/* global DUOSHUO: true */
-/* jshint camelcase: false */
-
-typeof DUOSHUO !== 'undefined' ?
- hookTemplate() :
- ($('#duoshuo-script')[0].onload = hookTemplate);
-
-
-function hookTemplate() {
- var post = DUOSHUO.templates.post;
-
- DUOSHUO.templates.post = function (e, t) {
- var rs = post(e, t);
- var agent = e.post.agent;
- var userId = e.post.author.user_id;
- var admin = '';
-
- if (userId && (userId == CONFIG.duoshuo.userId)) {
- admin = '' + CONFIG.duoshuo.author + ' ';
- }
-
- if (agent && /^Mozilla/.test(agent)) {
- rs = rs.replace(/<\/div>/, admin + getAgentInfo(agent) + '
');
- }
-
- return rs;
- };
-}
-
-function getAgentInfo(string) {
- $.ua.set(string);
-
- var UNKNOWN = 'Unknown';
- var sua = $.ua;
- var separator = isMobile() ? ' ' : ' ';
- var osName = sua.os.name || UNKNOWN;
- var osVersion = sua.os.version || UNKNOWN;
- var browserName = sua.browser.name || UNKNOWN;
- var browserVersion = sua.browser.version || UNKNOWN;
- var iconMapping = {
- os: {
- android : 'android',
- linux : 'linux',
- windows : 'windows',
- ios : 'apple',
- 'mac os': 'apple',
- unknown : 'desktop'
- },
- browser: {
- chrome : 'chrome',
- chromium : 'chrome',
- firefox : 'firefox',
- opera : 'opera',
- safari : 'safari',
- ie : 'internet-explorer',
- wechat : 'wechat',
- qq : 'qq',
- unknown : 'globe'
- }
- };
- var osIcon = iconMapping.os[osName.toLowerCase()];
- var browserIcon = iconMapping.browser[getBrowserKey()];
-
- return separator +
- '' +
- ' ' +
- osName + ' ' + osVersion +
- ' ' + separator +
- '' +
- ' ' +
- browserName + ' ' + browserVersion +
- ' ';
-
- function getBrowserKey () {
- var key = browserName.toLowerCase();
-
- if (key.match(/WeChat/i)) {
- return 'wechat';
- }
-
- if (key.match(/QQBrowser/i)) {
- return 'qq';
- }
-
- return key;
- }
-
- function isMobile() {
- var userAgent = window.navigator.userAgent;
-
- var isiPad = userAgent.match(/iPad/i) !== null;
- var mobileUA = [
- 'iphone', 'android', 'phone', 'mobile',
- 'wap', 'netfront', 'x11', 'java', 'opera mobi',
- 'opera mini', 'ucweb', 'windows ce', 'symbian',
- 'symbianos', 'series', 'webos', 'sony',
- 'blackberry', 'dopod', 'nokia', 'samsung',
- 'palmsource', 'xda', 'pieplus', 'meizu',
- 'midp' ,'cldc' , 'motorola', 'foma',
- 'docomo', 'up.browser', 'up.link', 'blazer',
- 'helio', 'hosin', 'huawei', 'novarra',
- 'coolpad', 'webos', 'techfaith', 'palmsource',
- 'alcatel', 'amoi', 'ktouch', 'nexian',
- 'ericsson', 'philips', 'sagem', 'wellcom',
- 'bunjalloo', 'maui', 'smartphone', 'iemobile',
- 'spice', 'bird', 'zte-', 'longcos',
- 'pantech', 'gionee', 'portalmmm', 'jig browser',
- 'hiptop', 'benq', 'haier', '^lct',
- '320x320', '240x320', '176x220'
- ];
- var pattern = new RegExp(mobileUA.join('|'), 'i');
-
- return !isiPad && userAgent.match(pattern);
- }
-}
diff --git a/js/src/js.cookie.js b/js/src/js.cookie.js
deleted file mode 100644
index c6c3975..0000000
--- a/js/src/js.cookie.js
+++ /dev/null
@@ -1,165 +0,0 @@
-/*!
- * JavaScript Cookie v2.1.4
- * https://github.com/js-cookie/js-cookie
- *
- * Copyright 2006, 2015 Klaus Hartl & Fagner Brack
- * Released under the MIT license
- */
-;(function (factory) {
- var registeredInModuleLoader = false;
- if (typeof define === 'function' && define.amd) {
- define(factory);
- registeredInModuleLoader = true;
- }
- if (typeof exports === 'object') {
- module.exports = factory();
- registeredInModuleLoader = true;
- }
- if (!registeredInModuleLoader) {
- var OldCookies = window.Cookies;
- var api = window.Cookies = factory();
- api.noConflict = function () {
- window.Cookies = OldCookies;
- return api;
- };
- }
-}(function () {
- function extend () {
- var i = 0;
- var result = {};
- for (; i < arguments.length; i++) {
- var attributes = arguments[ i ];
- for (var key in attributes) {
- result[key] = attributes[key];
- }
- }
- return result;
- }
-
- function init (converter) {
- function api (key, value, attributes) {
- var result;
- if (typeof document === 'undefined') {
- return;
- }
-
- // Write
-
- if (arguments.length > 1) {
- attributes = extend({
- path: '/'
- }, api.defaults, attributes);
-
- if (typeof attributes.expires === 'number') {
- var expires = new Date();
- expires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5);
- attributes.expires = expires;
- }
-
- // We're using "expires" because "max-age" is not supported by IE
- attributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';
-
- try {
- result = JSON.stringify(value);
- if (/^[\{\[]/.test(result)) {
- value = result;
- }
- } catch (e) {}
-
- if (!converter.write) {
- value = encodeURIComponent(String(value))
- .replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);
- } else {
- value = converter.write(value, key);
- }
-
- key = encodeURIComponent(String(key));
- key = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent);
- key = key.replace(/[\(\)]/g, escape);
-
- var stringifiedAttributes = '';
-
- for (var attributeName in attributes) {
- if (!attributes[attributeName]) {
- continue;
- }
- stringifiedAttributes += '; ' + attributeName;
- if (attributes[attributeName] === true) {
- continue;
- }
- stringifiedAttributes += '=' + attributes[attributeName];
- }
- return (document.cookie = key + '=' + value + stringifiedAttributes);
- }
-
- // Read
-
- if (!key) {
- result = {};
- }
-
- // To prevent the for loop in the first place assign an empty array
- // in case there are no cookies at all. Also prevents odd result when
- // calling "get()"
- var cookies = document.cookie ? document.cookie.split('; ') : [];
- var rdecode = /(%[0-9A-Z]{2})+/g;
- var i = 0;
-
- for (; i < cookies.length; i++) {
- var parts = cookies[i].split('=');
- var cookie = parts.slice(1).join('=');
-
- if (cookie.charAt(0) === '"') {
- cookie = cookie.slice(1, -1);
- }
-
- try {
- var name = parts[0].replace(rdecode, decodeURIComponent);
- cookie = converter.read ?
- converter.read(cookie, name) : converter(cookie, name) ||
- cookie.replace(rdecode, decodeURIComponent);
-
- if (this.json) {
- try {
- cookie = JSON.parse(cookie);
- } catch (e) {}
- }
-
- if (key === name) {
- result = cookie;
- break;
- }
-
- if (!key) {
- result[name] = cookie;
- }
- } catch (e) {}
- }
-
- return result;
- }
-
- api.set = api;
- api.get = function (key) {
- return api.call(api, key);
- };
- api.getJSON = function () {
- return api.apply({
- json: true
- }, [].slice.call(arguments));
- };
- api.defaults = {};
-
- api.remove = function (key, attributes) {
- api(key, '', extend(attributes, {
- expires: -1
- }));
- };
-
- api.withConverter = init;
-
- return api;
- }
-
- return init(function () {});
-}));
diff --git a/js/src/motion.js b/js/src/motion.js
deleted file mode 100644
index 1129179..0000000
--- a/js/src/motion.js
+++ /dev/null
@@ -1,352 +0,0 @@
-/* global NexT: true */
-
-$(document).ready(function () {
- NexT.motion = {};
-
- var sidebarToggleLines = {
- lines: [],
- push: function (line) {
- this.lines.push(line);
- },
- init: function () {
- this.lines.forEach(function (line) {
- line.init();
- });
- },
- arrow: function () {
- this.lines.forEach(function (line) {
- line.arrow();
- });
- },
- close: function () {
- this.lines.forEach(function (line) {
- line.close();
- });
- }
- };
-
- function SidebarToggleLine(settings) {
- this.el = $(settings.el);
- this.status = $.extend({}, {
- init: {
- width: '100%',
- opacity: 1,
- left: 0,
- rotateZ: 0,
- top: 0
- }
- }, settings.status);
- }
-
- SidebarToggleLine.prototype.init = function () {
- this.transform('init');
- };
- SidebarToggleLine.prototype.arrow = function () {
- this.transform('arrow');
- };
- SidebarToggleLine.prototype.close = function () {
- this.transform('close');
- };
- SidebarToggleLine.prototype.transform = function (status) {
- this.el.velocity('stop').velocity(this.status[status]);
- };
-
- var sidebarToggleLine1st = new SidebarToggleLine({
- el: '.sidebar-toggle-line-first',
- status: {
- arrow: {width: '50%', rotateZ: '-45deg', top: '2px'},
- close: {width: '100%', rotateZ: '-45deg', top: '5px'}
- }
- });
- var sidebarToggleLine2nd = new SidebarToggleLine({
- el: '.sidebar-toggle-line-middle',
- status: {
- arrow: {width: '90%'},
- close: {opacity: 0}
- }
- });
- var sidebarToggleLine3rd = new SidebarToggleLine({
- el: '.sidebar-toggle-line-last',
- status: {
- arrow: {width: '50%', rotateZ: '45deg', top: '-2px'},
- close: {width: '100%', rotateZ: '45deg', top: '-5px'}
- }
- });
-
- sidebarToggleLines.push(sidebarToggleLine1st);
- sidebarToggleLines.push(sidebarToggleLine2nd);
- sidebarToggleLines.push(sidebarToggleLine3rd);
-
- var SIDEBAR_WIDTH = '320px';
- var SIDEBAR_DISPLAY_DURATION = 200;
- var xPos, yPos;
-
- var sidebarToggleMotion = {
- toggleEl: $('.sidebar-toggle'),
- dimmerEl: $('#sidebar-dimmer'),
- sidebarEl: $('.sidebar'),
- isSidebarVisible: false,
- init: function () {
- this.toggleEl.on('click', this.clickHandler.bind(this));
- this.dimmerEl.on('click', this.clickHandler.bind(this));
- this.toggleEl.on('mouseenter', this.mouseEnterHandler.bind(this));
- this.toggleEl.on('mouseleave', this.mouseLeaveHandler.bind(this));
- this.sidebarEl.on('touchstart', this.touchstartHandler.bind(this));
- this.sidebarEl.on('touchend', this.touchendHandler.bind(this));
- this.sidebarEl.on('touchmove', function(e){e.preventDefault();});
-
- $(document)
- .on('sidebar.isShowing', function () {
- NexT.utils.isDesktop() && $('body').velocity('stop').velocity(
- {paddingRight: SIDEBAR_WIDTH},
- SIDEBAR_DISPLAY_DURATION
- );
- })
- .on('sidebar.isHiding', function () {
- });
- },
- clickHandler: function () {
- this.isSidebarVisible ? this.hideSidebar() : this.showSidebar();
- this.isSidebarVisible = !this.isSidebarVisible;
- },
- mouseEnterHandler: function () {
- if (this.isSidebarVisible) {
- return;
- }
- sidebarToggleLines.arrow();
- },
- mouseLeaveHandler: function () {
- if (this.isSidebarVisible) {
- return;
- }
- sidebarToggleLines.init();
- },
- touchstartHandler: function(e) {
- xPos = e.originalEvent.touches[0].clientX;
- yPos = e.originalEvent.touches[0].clientY;
- },
- touchendHandler: function(e) {
- var _xPos = e.originalEvent.changedTouches[0].clientX;
- var _yPos = e.originalEvent.changedTouches[0].clientY;
- if (_xPos-xPos > 30 && Math.abs(_yPos-yPos) < 20) {
- this.clickHandler();
- }
- },
- showSidebar: function () {
- var self = this;
-
- sidebarToggleLines.close();
-
- this.sidebarEl.velocity('stop').velocity({
- width: SIDEBAR_WIDTH
- }, {
- display: 'block',
- duration: SIDEBAR_DISPLAY_DURATION,
- begin: function () {
- $('.sidebar .motion-element').velocity(
- 'transition.slideRightIn',
- {
- stagger: 50,
- drag: true,
- complete: function () {
- self.sidebarEl.trigger('sidebar.motion.complete');
- }
- }
- );
- },
- complete: function () {
- self.sidebarEl.addClass('sidebar-active');
- self.sidebarEl.trigger('sidebar.didShow');
- }
- }
- );
-
- this.sidebarEl.trigger('sidebar.isShowing');
- },
- hideSidebar: function () {
- NexT.utils.isDesktop() && $('body').velocity('stop').velocity({paddingRight: 0});
- this.sidebarEl.find('.motion-element').velocity('stop').css('display', 'none');
- this.sidebarEl.velocity('stop').velocity({width: 0}, {display: 'none'});
-
- sidebarToggleLines.init();
-
- this.sidebarEl.removeClass('sidebar-active');
- this.sidebarEl.trigger('sidebar.isHiding');
-
- // Prevent adding TOC to Overview if Overview was selected when close & open sidebar.
- if (!!$('.post-toc-wrap')) {
- if ($('.site-overview-wrap').css('display') === 'block') {
- $('.post-toc-wrap').removeClass('motion-element');
- } else {
- $('.post-toc-wrap').addClass('motion-element');
- }
- }
- }
- };
- sidebarToggleMotion.init();
-
- NexT.motion.integrator = {
- queue: [],
- cursor: -1,
- add: function (fn) {
- this.queue.push(fn);
- return this;
- },
- next: function () {
- this.cursor++;
- var fn = this.queue[this.cursor];
- $.isFunction(fn) && fn(NexT.motion.integrator);
- },
- bootstrap: function () {
- this.next();
- }
- };
-
- NexT.motion.middleWares = {
- logo: function (integrator) {
- var sequence = [];
- var $brand = $('.brand');
- var $title = $('.site-title');
- var $subtitle = $('.site-subtitle');
- var $logoLineTop = $('.logo-line-before i');
- var $logoLineBottom = $('.logo-line-after i');
-
- $brand.size() > 0 && sequence.push({
- e: $brand,
- p: {opacity: 1},
- o: {duration: 200}
- });
-
- NexT.utils.isMist() && hasElement([$logoLineTop, $logoLineBottom]) &&
- sequence.push(
- getMistLineSettings($logoLineTop, '100%'),
- getMistLineSettings($logoLineBottom, '-100%')
- );
-
- hasElement($title) && sequence.push({
- e: $title,
- p: {opacity: 1, top: 0},
- o: { duration: 200 }
- });
-
- hasElement($subtitle) && sequence.push({
- e: $subtitle,
- p: {opacity: 1, top: 0},
- o: {duration: 200}
- });
-
- if (CONFIG.motion.async) {
- integrator.next();
- }
-
- if (sequence.length > 0) {
- sequence[sequence.length - 1].o.complete = function () {
- integrator.next();
- };
- $.Velocity.RunSequence(sequence);
- } else {
- integrator.next();
- }
-
-
- function getMistLineSettings (element, translateX) {
- return {
- e: $(element),
- p: {translateX: translateX},
- o: {
- duration: 500,
- sequenceQueue: false
- }
- };
- }
-
- /**
- * Check if $elements exist.
- * @param {jQuery|Array} $elements
- * @returns {boolean}
- */
- function hasElement ($elements) {
- $elements = Array.isArray($elements) ? $elements : [$elements];
- return $elements.every(function ($element) {
- return $.isFunction($element.size) && $element.size() > 0;
- });
- }
- },
-
- menu: function (integrator) {
-
- if (CONFIG.motion.async) {
- integrator.next();
- }
-
- $('.menu-item').velocity('transition.slideDownIn', {
- display: null,
- duration: 200,
- complete: function () {
- integrator.next();
- }
- });
- },
-
- postList: function (integrator) {
- //var $post = $('.post');
- var $postBlock = $('.post-block, .pagination, .comments');
- var $postBlockTransition = CONFIG.motion.transition.post_block;
- var $postHeader = $('.post-header');
- var $postHeaderTransition = CONFIG.motion.transition.post_header;
- var $postBody = $('.post-body');
- var $postBodyTransition = CONFIG.motion.transition.post_body;
- var $collHeader = $('.collection-title, .archive-year');
- var $collHeaderTransition = CONFIG.motion.transition.coll_header;
- var $sidebarAffix = $('.sidebar-inner');
- var $sidebarAffixTransition = CONFIG.motion.transition.sidebar;
- var hasPost = $postBlock.size() > 0;
-
- hasPost ? postMotion() : integrator.next();
-
- if (CONFIG.motion.async) {
- integrator.next();
- }
-
- function postMotion () {
- var postMotionOptions = window.postMotionOptions || {
- stagger: 100,
- drag: true
- };
- postMotionOptions.complete = function () {
- // After motion complete need to remove transform from sidebar to let affix work on Pisces | Gemini.
- if (CONFIG.motion.transition.sidebar && (NexT.utils.isPisces() || NexT.utils.isGemini())) {
- $sidebarAffix.css({ 'transform': 'initial' });
- }
- integrator.next();
- };
-
- //$post.velocity('transition.slideDownIn', postMotionOptions);
- if (CONFIG.motion.transition.post_block) {
- $postBlock.velocity('transition.' + $postBlockTransition, postMotionOptions);
- }
- if (CONFIG.motion.transition.post_header) {
- $postHeader.velocity('transition.' + $postHeaderTransition, postMotionOptions);
- }
- if (CONFIG.motion.transition.post_body) {
- $postBody.velocity('transition.' + $postBodyTransition, postMotionOptions);
- }
- if (CONFIG.motion.transition.coll_header) {
- $collHeader.velocity('transition.' + $collHeaderTransition, postMotionOptions);
- }
- // Only for Pisces | Gemini.
- if (CONFIG.motion.transition.sidebar && (NexT.utils.isPisces() || NexT.utils.isGemini())) {
- $sidebarAffix.velocity('transition.' + $sidebarAffixTransition, postMotionOptions);
- }
- }
- },
-
- sidebar: function (integrator) {
- if (CONFIG.sidebar.display === 'always') {
- NexT.utils.displaySidebar();
- }
- integrator.next();
- }
- };
-
-});
diff --git a/js/src/post-details.js b/js/src/post-details.js
deleted file mode 100644
index a82bcc2..0000000
--- a/js/src/post-details.js
+++ /dev/null
@@ -1,99 +0,0 @@
-/* global NexT: true */
-
-$(document).ready(function () {
-
- initScrollSpy();
-
- function initScrollSpy () {
- var tocSelector = '.post-toc';
- var $tocElement = $(tocSelector);
- var activeCurrentSelector = '.active-current';
-
- $tocElement
- .on('activate.bs.scrollspy', function () {
- var $currentActiveElement = $(tocSelector + ' .active').last();
-
- removeCurrentActiveClass();
- $currentActiveElement.addClass('active-current');
-
- // Scrolling to center active TOC element if TOC content is taller then viewport.
- $tocElement.scrollTop($currentActiveElement.offset().top - $tocElement.offset().top + $tocElement.scrollTop() - ($tocElement.height() / 2));
- })
- .on('clear.bs.scrollspy', removeCurrentActiveClass);
-
- $('body').scrollspy({ target: tocSelector });
-
- function removeCurrentActiveClass () {
- $(tocSelector + ' ' + activeCurrentSelector)
- .removeClass(activeCurrentSelector.substring(1));
- }
- }
-
-});
-
-$(document).ready(function () {
- var html = $('html');
- var TAB_ANIMATE_DURATION = 200;
- var hasVelocity = $.isFunction(html.velocity);
-
- $('.sidebar-nav li').on('click', function () {
- var item = $(this);
- var activeTabClassName = 'sidebar-nav-active';
- var activePanelClassName = 'sidebar-panel-active';
- if (item.hasClass(activeTabClassName)) {
- return;
- }
-
- var currentTarget = $('.' + activePanelClassName);
- var target = $('.' + item.data('target'));
-
- hasVelocity ?
- currentTarget.velocity('transition.slideUpOut', TAB_ANIMATE_DURATION, function () {
- target
- .velocity('stop')
- .velocity('transition.slideDownIn', TAB_ANIMATE_DURATION)
- .addClass(activePanelClassName);
- }) :
- currentTarget.animate({ opacity: 0 }, TAB_ANIMATE_DURATION, function () {
- currentTarget.hide();
- target
- .stop()
- .css({'opacity': 0, 'display': 'block'})
- .animate({ opacity: 1 }, TAB_ANIMATE_DURATION, function () {
- currentTarget.removeClass(activePanelClassName);
- target.addClass(activePanelClassName);
- });
- });
-
- item.siblings().removeClass(activeTabClassName);
- item.addClass(activeTabClassName);
- });
-
- // TOC item animation navigate & prevent #item selector in adress bar.
- $('.post-toc a').on('click', function (e) {
- e.preventDefault();
- var targetSelector = NexT.utils.escapeSelector(this.getAttribute('href'));
- var offset = $(targetSelector).offset().top;
-
- hasVelocity ?
- html.velocity('stop').velocity('scroll', {
- offset: offset + 'px',
- mobileHA: false
- }) :
- $('html, body').stop().animate({
- scrollTop: offset
- }, 500);
- });
-
- // Expand sidebar on post detail page by default, when post has a toc.
- var $tocContent = $('.post-toc-content');
- var isSidebarCouldDisplay = CONFIG.sidebar.display === 'post' ||
- CONFIG.sidebar.display === 'always';
- var hasTOC = $tocContent.length > 0 && $tocContent.html().trim().length > 0;
- if (isSidebarCouldDisplay && hasTOC) {
- CONFIG.motion.enable ?
- (NexT.motion.middleWares.sidebar = function () {
- NexT.utils.displaySidebar();
- }) : NexT.utils.displaySidebar();
- }
-});
diff --git a/js/src/schemes/pisces.js b/js/src/schemes/pisces.js
deleted file mode 100644
index 0e6e426..0000000
--- a/js/src/schemes/pisces.js
+++ /dev/null
@@ -1,57 +0,0 @@
-$(document).ready(function () {
-
- var sidebarInner = $('.sidebar-inner');
-
- initAffix();
- resizeListener();
-
- function initAffix () {
- var headerOffset = getHeaderOffset(),
- footerOffset = getFooterOffset(),
- sidebarHeight = $('#sidebar').height() + NexT.utils.getSidebarb2tHeight(),
- contentHeight = $('#content').height();
-
- // Not affix if sidebar taller then content (to prevent bottom jumping).
- if (headerOffset + sidebarHeight < contentHeight) {
- sidebarInner.affix({
- offset: {
- top: headerOffset - CONFIG.sidebar.offset,
- bottom: footerOffset
- }
- });
- }
-
- setSidebarMarginTop(headerOffset).css({ 'margin-left': 'initial' });
- }
-
- function resizeListener () {
- var mql = window.matchMedia('(min-width: 991px)');
- mql.addListener(function(e){
- if(e.matches){
- recalculateAffixPosition();
- }
- });
- }
-
- function getHeaderOffset () {
- return $('.header-inner').height() + CONFIG.sidebar.offset;
- }
-
- function getFooterOffset () {
- var footerInner = $('.footer-inner'),
- footerMargin = footerInner.outerHeight(true) - footerInner.outerHeight(),
- footerOffset = footerInner.outerHeight(true) + footerMargin;
- return footerOffset;
- }
-
- function setSidebarMarginTop (headerOffset) {
- return $('#sidebar').css({ 'margin-top': headerOffset });
- }
-
- function recalculateAffixPosition () {
- $(window).off('.affix');
- sidebarInner.removeData('bs.affix').removeClass('affix affix-top affix-bottom');
- initAffix();
- }
-
-});
diff --git a/js/src/scroll-cookie.js b/js/src/scroll-cookie.js
deleted file mode 100644
index 34ff200..0000000
--- a/js/src/scroll-cookie.js
+++ /dev/null
@@ -1,23 +0,0 @@
-$(document).ready(function() {
-
- // Set relative link path (without domain)
- var rpath = window.location.href.replace(window.location.origin, "");
-
- // Write position in cookie
- var timeout;
- $(window).on("scroll", function() {
- clearTimeout(timeout);
- timeout = setTimeout(function () {
- Cookies.set("scroll-cookie", ($(window).scrollTop() + "|" + rpath), { expires: 365, path: '' });
- }, 250);
- });
-
- // Read position from cookie
- if (Cookies.get("scroll-cookie") !== undefined) {
- var cvalues = Cookies.get("scroll-cookie").split('|');
- if (cvalues[1] == rpath) {
- $(window).scrollTop(cvalues[0]);
- }
- }
-
-});
diff --git a/js/src/scrollspy.js b/js/src/scrollspy.js
deleted file mode 100644
index f5c5c6c..0000000
--- a/js/src/scrollspy.js
+++ /dev/null
@@ -1,182 +0,0 @@
-/* ========================================================================
-* Bootstrap: scrollspy.js v3.3.2
-* http://getbootstrap.com/javascript/#scrollspy
-* ========================================================================
-* Copyright 2011-2015 Twitter, Inc.
-* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
-* ======================================================================== */
-
-/**
- * Custom by iissnan
- *
- * - Add a `clear.bs.scrollspy` event.
- * - Esacpe targets selector.
- */
-
-
-+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.2'
-
- 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) && $(NexT.utils.escapeSelector(href)) // Need to escape selector.
-
- 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.selector).trigger('clear.bs.scrollspy') // Add a custom event.
- this.activeTarget = null
- return this.clear()
- }
-
- for (i = offsets.length; i--;) {
- activeTarget != targets[i]
- && scrollTop >= offsets[i]
- && (!offsets[i + 1] || 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);
diff --git a/js/src/utils.js b/js/src/utils.js
deleted file mode 100644
index c1621ef..0000000
--- a/js/src/utils.js
+++ /dev/null
@@ -1,339 +0,0 @@
-/* global NexT: true */
-
-NexT.utils = NexT.$u = {
- /**
- * Wrap images with fancybox support.
- */
- wrapImageWithFancyBox: function () {
- $('.content img')
- .not('[hidden]')
- .not('.group-picture img, .post-gallery img')
- .each(function () {
- var $image = $(this);
- var imageTitle = $image.attr('title');
- var $imageWrapLink = $image.parent('a');
-
- if ($imageWrapLink.size() < 1) {
- var imageLink = ($image.attr('data-original')) ? this.getAttribute('data-original') : this.getAttribute('src');
- $imageWrapLink = $image.wrap(' ').parent('a');
- }
-
- $imageWrapLink.addClass('fancybox fancybox.image');
- $imageWrapLink.attr('rel', 'group');
-
- if (imageTitle) {
- $imageWrapLink.append('
' + imageTitle + '
');
-
- //make sure img title tag will show correctly in fancybox
- $imageWrapLink.attr('title', imageTitle);
- }
- });
-
- $('.fancybox').fancybox({
- helpers: {
- overlay: {
- locked: false
- }
- }
- });
- },
-
- lazyLoadPostsImages: function () {
- $('#posts').find('img').lazyload({
- //placeholder: '/images/loading.gif',
- effect: 'fadeIn',
- threshold : 0
- });
- },
-
- /**
- * Tabs tag listener (without twitter bootstrap).
- */
- registerTabsTag: function () {
- var tNav = '.tabs ul.nav-tabs ';
-
- // Binding `nav-tabs` & `tab-content` by real time permalink changing.
- $(function() {
- $(window).bind('hashchange', function() {
- var tHash = location.hash;
- if (tHash !== '') {
- $(tNav + 'li:has(a[href="' + tHash + '"])').addClass('active').siblings().removeClass('active');
- $(tHash).addClass('active').siblings().removeClass('active');
- }
- }).trigger('hashchange');
- });
-
- $(tNav + '.tab').on('click', function (href) {
- href.preventDefault();
- // Prevent selected tab to select again.
- if(!$(this).hasClass('active')){
-
- // Add & Remove active class on `nav-tabs` & `tab-content`.
- $(this).addClass('active').siblings().removeClass('active');
- var tActive = $(this).find('a').attr('href');
- $(tActive).addClass('active').siblings().removeClass('active');
-
- // Clear location hash in browser if #permalink exists.
- if (location.hash !== '') {
- history.pushState('', document.title, window.location.pathname + window.location.search);
- }
- }
- });
-
- },
-
- registerESCKeyEvent: function () {
- $(document).on('keyup', function (event) {
- var shouldDismissSearchPopup = event.which === 27 &&
- $('.search-popup').is(':visible');
- if (shouldDismissSearchPopup) {
- $('.search-popup').hide();
- $('.search-popup-overlay').remove();
- $('body').css('overflow', '');
- }
- });
- },
-
- registerBackToTop: function () {
- var THRESHOLD = 50;
- var $top = $('.back-to-top');
-
- $(window).on('scroll', function () {
- $top.toggleClass('back-to-top-on', window.pageYOffset > THRESHOLD);
-
- var scrollTop = $(window).scrollTop();
- var contentVisibilityHeight = NexT.utils.getContentVisibilityHeight();
- var scrollPercent = (scrollTop) / (contentVisibilityHeight);
- var scrollPercentRounded = Math.round(scrollPercent*100);
- var scrollPercentMaxed = (scrollPercentRounded > 100) ? 100 : scrollPercentRounded;
- $('#scrollpercent>span').html(scrollPercentMaxed);
- });
-
- $top.on('click', function () {
- $('body').velocity('scroll');
- });
- },
-
- /**
- * Transform embedded video to support responsive layout.
- * @see http://toddmotto.com/fluid-and-responsive-youtube-and-vimeo-videos-with-fluidvids-js/
- */
- embeddedVideoTransformer: function () {
- var $iframes = $('iframe');
-
- // Supported Players. Extend this if you need more players.
- var SUPPORTED_PLAYERS = [
- 'www.youtube.com',
- 'player.vimeo.com',
- 'player.youku.com',
- 'music.163.com',
- 'www.tudou.com'
- ];
- var pattern = new RegExp( SUPPORTED_PLAYERS.join('|') );
-
- $iframes.each(function () {
- var iframe = this;
- var $iframe = $(this);
- var oldDimension = getDimension($iframe);
- var newDimension;
-
- if (this.src.search(pattern) > 0) {
-
- // Calculate the video ratio based on the iframe's w/h dimensions
- var videoRatio = getAspectRadio(oldDimension.width, oldDimension.height);
-
- // Replace the iframe's dimensions and position the iframe absolute
- // This is the trick to emulate the video ratio
- $iframe.width('100%').height('100%')
- .css({
- position: 'absolute',
- top: '0',
- left: '0'
- });
-
-
- // Wrap the iframe in a new which uses a dynamically fetched padding-top property
- // based on the video's w/h dimensions
- var wrap = document.createElement('div');
- wrap.className = 'fluid-vids';
- wrap.style.position = 'relative';
- wrap.style.marginBottom = '20px';
- wrap.style.width = '100%';
- wrap.style.paddingTop = videoRatio + '%';
- // Fix for appear inside tabs tag.
- (wrap.style.paddingTop === '') && (wrap.style.paddingTop = '50%');
-
- // Add the iframe inside our newly created
- var iframeParent = iframe.parentNode;
- iframeParent.insertBefore(wrap, iframe);
- wrap.appendChild(iframe);
-
- // Additional adjustments for 163 Music
- if (this.src.search('music.163.com') > 0) {
- newDimension = getDimension($iframe);
- var shouldRecalculateAspect = newDimension.width > oldDimension.width ||
- newDimension.height < oldDimension.height;
-
- // 163 Music Player has a fixed height, so we need to reset the aspect radio
- if (shouldRecalculateAspect) {
- wrap.style.paddingTop = getAspectRadio(newDimension.width, oldDimension.height) + '%';
- }
- }
- }
- });
-
- function getDimension($element) {
- return {
- width: $element.width(),
- height: $element.height()
- };
- }
-
- function getAspectRadio(width, height) {
- return height / width * 100;
- }
- },
-
- /**
- * Add `menu-item-active` class name to menu item
- * via comparing location.path with menu item's href.
- */
- addActiveClassToMenuItem: function () {
- var path = window.location.pathname;
- path = path === '/' ? path : path.substring(0, path.length - 1);
- $('.menu-item a[href^="' + path + '"]:first').parent().addClass('menu-item-active');
- },
-
- hasMobileUA: function () {
- var nav = window.navigator;
- var ua = nav.userAgent;
- var pa = /iPad|iPhone|Android|Opera Mini|BlackBerry|webOS|UCWEB|Blazer|PSP|IEMobile|Symbian/g;
-
- return pa.test(ua);
- },
-
- isTablet: function () {
- return window.screen.width < 992 && window.screen.width > 767 && this.hasMobileUA();
- },
-
- isMobile: function () {
- return window.screen.width < 767 && this.hasMobileUA();
- },
-
- isDesktop: function () {
- return !this.isTablet() && !this.isMobile();
- },
-
- /**
- * Escape meta symbols in jQuery selectors.
- *
- * @param selector
- * @returns {string|void|XML|*}
- */
- escapeSelector: function (selector) {
- return selector.replace(/[!"$%&'()*+,.\/:;<=>?@[\\\]^`{|}~]/g, '\\$&');
- },
-
- displaySidebar: function () {
- if (!this.isDesktop() || this.isPisces() || this.isGemini()) {
- return;
- }
- $('.sidebar-toggle').trigger('click');
- },
-
- isMist: function () {
- return CONFIG.scheme === 'Mist';
- },
-
- isPisces: function () {
- return CONFIG.scheme === 'Pisces';
- },
-
- isGemini: function () {
- return CONFIG.scheme === 'Gemini';
- },
-
- getScrollbarWidth: function () {
- var $div = $('
').addClass('scrollbar-measure').prependTo('body');
- var div = $div[0];
- var scrollbarWidth = div.offsetWidth - div.clientWidth;
-
- $div.remove();
-
- return scrollbarWidth;
- },
-
- getContentVisibilityHeight: function () {
- var docHeight = $('#content').height(),
- winHeight = $(window).height(),
- contentVisibilityHeight = (docHeight > winHeight) ? (docHeight - winHeight) : ($(document).height() - winHeight);
- return contentVisibilityHeight;
- },
-
- getSidebarb2tHeight: function () {
- //var sidebarb2tHeight = (CONFIG.sidebar.b2t) ? document.getElementsByClassName('back-to-top')[0].clientHeight : 0;
- var sidebarb2tHeight = (CONFIG.sidebar.b2t) ? $('.back-to-top').height() : 0;
- //var sidebarb2tHeight = (CONFIG.sidebar.b2t) ? 24 : 0;
- return sidebarb2tHeight;
- },
-
- getSidebarSchemePadding: function () {
- var sidebarNavHeight = ($('.sidebar-nav').css('display') == 'block') ? $('.sidebar-nav').outerHeight(true) : 0,
- sidebarInner = $('.sidebar-inner'),
- sidebarPadding = sidebarInner.innerWidth() - sidebarInner.width(),
- sidebarSchemePadding = this.isPisces() || this.isGemini() ?
- ((sidebarPadding * 2) + sidebarNavHeight + (CONFIG.sidebar.offset * 2) + this.getSidebarb2tHeight()) :
- ((sidebarPadding * 2) + (sidebarNavHeight / 2));
- return sidebarSchemePadding;
- }
-
- /**
- * Affix behaviour for Sidebar.
- *
- * @returns {Boolean}
- */
-// needAffix: function () {
-// return this.isPisces() || this.isGemini();
-// }
-};
-
-$(document).ready(function () {
-
- initSidebarDimension();
-
- /**
- * Init Sidebar & TOC inner dimensions on all pages and for all schemes.
- * Need for Sidebar/TOC inner scrolling if content taller then viewport.
- */
- function initSidebarDimension () {
- var updateSidebarHeightTimer;
-
- $(window).on('resize', function () {
- updateSidebarHeightTimer && clearTimeout(updateSidebarHeightTimer);
-
- updateSidebarHeightTimer = setTimeout(function () {
- var sidebarWrapperHeight = document.body.clientHeight - NexT.utils.getSidebarSchemePadding();
-
- updateSidebarHeight(sidebarWrapperHeight);
- }, 0);
- });
-
- // Initialize Sidebar & TOC Width.
- var scrollbarWidth = NexT.utils.getScrollbarWidth();
- if ($('.site-overview-wrap').height() > (document.body.clientHeight - NexT.utils.getSidebarSchemePadding())) {
- $('.site-overview').css('width', 'calc(100% + ' + scrollbarWidth + 'px)');
- }
- if ($('.post-toc-wrap').height() > (document.body.clientHeight - NexT.utils.getSidebarSchemePadding())) {
- $('.post-toc').css('width', 'calc(100% + ' + scrollbarWidth + 'px)');
- }
-
- // Initialize Sidebar & TOC Height.
- updateSidebarHeight(document.body.clientHeight - NexT.utils.getSidebarSchemePadding());
- }
-
- function updateSidebarHeight (height) {
- height = height || 'auto';
- $('.site-overview, .post-toc').css('max-height', height);
- }
-
-});
diff --git a/lib/Han/dist/font/han-space.otf b/lib/Han/dist/font/han-space.otf
deleted file mode 100644
index 845b1bc..0000000
Binary files a/lib/Han/dist/font/han-space.otf and /dev/null differ
diff --git a/lib/Han/dist/font/han-space.woff b/lib/Han/dist/font/han-space.woff
deleted file mode 100644
index 6ccc84f..0000000
Binary files a/lib/Han/dist/font/han-space.woff and /dev/null differ
diff --git a/lib/Han/dist/font/han.otf b/lib/Han/dist/font/han.otf
deleted file mode 100644
index 2ce2f46..0000000
Binary files a/lib/Han/dist/font/han.otf and /dev/null differ
diff --git a/lib/Han/dist/font/han.woff b/lib/Han/dist/font/han.woff
deleted file mode 100644
index 011e06c..0000000
Binary files a/lib/Han/dist/font/han.woff and /dev/null differ
diff --git a/lib/Han/dist/font/han.woff2 b/lib/Han/dist/font/han.woff2
deleted file mode 100644
index 02c49af..0000000
Binary files a/lib/Han/dist/font/han.woff2 and /dev/null differ
diff --git a/lib/Han/dist/han.css b/lib/Han/dist/han.css
deleted file mode 100644
index 9bafab6..0000000
--- a/lib/Han/dist/han.css
+++ /dev/null
@@ -1,1168 +0,0 @@
-@charset "UTF-8";
-
-/*! 漢字標準格式 v3.3.0 | MIT License | css.hanzi.co */
-/*! Han.css: the CSS typography framework optimised for Hanzi */
-
-/* normalize.css v4.0.0 | MIT License | github.com/necolas/normalize.css */
-html {
- font-family: sans-serif; /* 1 */
- -ms-text-size-adjust: 100%; /* 2 */
- -webkit-text-size-adjust: 100%; /* 2 */
-}
-body {
- margin: 0;
-}
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-main,
-menu,
-nav,
-section,
-summary {
- /* 1 */
- display: block;
-}
-audio,
-canvas,
-progress,
-video {
- display: inline-block;
-}
-audio:not([controls]) {
- display: none;
- height: 0;
-}
-progress {
- vertical-align: baseline;
-}
-template,
-[hidden] {
- display: none;
-}
-a {
- background-color: transparent;
-}
-a:active,
-a:hover {
- outline-width: 0;
-}
-abbr[title] {
- border-bottom: none; /* 1 */
- text-decoration: underline; /* 2 */
- text-decoration: underline dotted; /* 2 */
-}
-b,
-strong {
- font-weight: inherit;
-}
-b,
-strong {
- font-weight: bolder;
-}
-dfn {
- font-style: italic;
-}
-h1 {
- font-size: 2em;
- margin: .67em 0;
-}
-mark {
- background-color: #ff0;
- color: #000;
-}
-small {
- font-size: 80%;
-}
-sub,
-sup {
- font-size: 75%;
- line-height: 0;
- position: relative;
- vertical-align: baseline;
-}
-sub {
- bottom: -.25em;
-}
-sup {
- top: -.5em;
-}
-img {
- border-style: none;
-}
-svg:not(:root) {
- overflow: hidden;
-}
-code,
-kbd,
-pre,
-samp {
- font-family: monospace, monospace; /* 1 */
- font-size: 1em; /* 2 */
-}
-figure {
- margin: 1em 40px;
-}
-hr {
- box-sizing: content-box; /* 1 */
- height: 0; /* 1 */
- overflow: visible; /* 2 */
-}
-button,
-input,
-select,
-textarea {
- font: inherit;
-}
-optgroup {
- font-weight: bold;
-}
-button,
-input,
-select {
- /* 2 */
- overflow: visible;
-}
-button,
-input,
-select,
-textarea {
- /* 1 */
- margin: 0;
-}
-button,
-select {
- /* 1 */
- text-transform: none;
-}
-button,
-[type="button"],
-[type="reset"],
-[type="submit"] {
- cursor: pointer;
-}
-[disabled] {
- cursor: default;
-}
-button,
-html [type="button"],
-[type="reset"],
-[type="submit"] {
- -webkit-appearance: button; /* 2 */
-}
-button::-moz-focus-inner,
-input::-moz-focus-inner {
- border: 0;
- padding: 0;
-}
-button:-moz-focusring,
-input:-moz-focusring {
- outline: 1px dotted ButtonText;
-}
-fieldset {
- border: 1px solid #c0c0c0;
- margin: 0 2px;
- padding: .35em .625em .75em;
-}
-legend {
- box-sizing: border-box; /* 1 */
- color: inherit; /* 2 */
- display: table; /* 1 */
- max-width: 100%; /* 1 */
- padding: 0; /* 3 */
- white-space: normal; /* 1 */
-}
-textarea {
- overflow: auto;
-}
-[type="checkbox"],
-[type="radio"] {
- box-sizing: border-box; /* 1 */
- padding: 0; /* 2 */
-}
-[type="number"]::-webkit-inner-spin-button,
-[type="number"]::-webkit-outer-spin-button {
- height: auto;
-}
-[type="search"] {
- -webkit-appearance: textfield;
-}
-[type="search"]::-webkit-search-cancel-button,
-[type="search"]::-webkit-search-decoration {
- -webkit-appearance: none;
-}
-@font-face {
- font-family: "Han Heiti";
- src: local("Hiragino Sans GB"), local("Lantinghei TC Extralight"), local("Lantinghei SC Extralight"), local(FZLTXHB--B51-0), local(FZLTZHK--GBK1-0), local("Pingfang SC Light"), local("Pingfang TC Light"), local("Pingfang-SC-Light"), local("Pingfang-TC-Light"), local("Pingfang SC"), local("Pingfang TC"), local("Heiti SC Light"), local(STHeitiSC-Light), local("Heiti SC"), local("Heiti TC Light"), local(STHeitiTC-Light), local("Heiti TC"), local("Microsoft Yahei"), local("Microsoft Jhenghei"), local("Noto Sans CJK KR"), local("Noto Sans CJK JP"), local("Noto Sans CJK SC"), local("Noto Sans CJK TC"), local("Source Han Sans K"), local("Source Han Sans KR"), local("Source Han Sans JP"), local("Source Han Sans CN"), local("Source Han Sans HK"), local("Source Han Sans TW"), local("Source Han Sans TWHK"), local("Droid Sans Fallback");
-}
-@font-face {
- unicode-range: U+4E00-9FFF, U+3400-4DB5, U+20000-2A6D6, U+2A700-2B734, U+2B740-2B81D, U+FA0E-FA0F, U+FA11, U+FA13-FA14, U+FA1F, U+FA21, U+FA23, U+FA24, U+FA27-FA29, U+3040-309F, U+30A0-30FF, U+3099-309E, U+FF66-FF9F, U+3007, U+31C0-31E3, U+2F00-2FD5, U+2E80-2EF3;
- font-family: "Han Heiti";
- src: local(YuGothic), local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro");
-}
-@font-face {
- font-family: "Han Heiti CNS";
- src: local("Pingfang TC Light"), local("Pingfang-TC-Light"), local("Pingfang TC"), local("Heiti TC Light"), local(STHeitiTC-Light), local("Heiti TC"), local("Lantinghei TC Extralight"), local(FZLTXHB--B51-0), local("Lantinghei TC"), local("Microsoft Jhenghei"), local("Microsoft Yahei"), local("Noto Sans CJK TC"), local("Source Han Sans TC"), local("Source Han Sans TW"), local("Source Han Sans TWHK"), local("Source Han Sans HK"), local("Droid Sans Fallback");
-}
-@font-face {
- font-family: "Han Heiti GB";
- src: local("Hiragino Sans GB"), local("Pingfang SC Light"), local("Pingfang-SC-Light"), local("Pingfang SC"), local("Lantinghei SC Extralight"), local(FZLTXHK--GBK1-0), local("Lantinghei SC"), local("Heiti SC Light"), local(STHeitiSC-Light), local("Heiti SC"), local("Microsoft Yahei"), local("Noto Sans CJK SC"), local("Source Han Sans SC"), local("Source Han Sans CN"), local("Droid Sans Fallback");
-}
-@font-face {
- font-family: "Han Heiti";
- font-weight: 600;
- src: local("Hiragino Sans GB W6"), local(HiraginoSansGB-W6), local("Lantinghei TC Demibold"), local("Lantinghei SC Demibold"), local(FZLTZHB--B51-0), local(FZLTZHK--GBK1-0), local("Pingfang-SC-Semibold"), local("Pingfang-TC-Semibold"), local("Heiti SC Medium"), local("STHeitiSC-Medium"), local("Heiti SC"), local("Heiti TC Medium"), local("STHeitiTC-Medium"), local("Heiti TC"), local("Microsoft Yahei Bold"), local("Microsoft Jhenghei Bold"), local(MicrosoftYahei-Bold), local(MicrosoftJhengHeiBold), local("Microsoft Yahei"), local("Microsoft Jhenghei"), local("Noto Sans CJK KR Bold"), local("Noto Sans CJK JP Bold"), local("Noto Sans CJK SC Bold"), local("Noto Sans CJK TC Bold"), local(NotoSansCJKkr-Bold), local(NotoSansCJKjp-Bold), local(NotoSansCJKsc-Bold), local(NotoSansCJKtc-Bold), local("Source Han Sans K Bold"), local(SourceHanSansK-Bold), local("Source Han Sans K"), local("Source Han Sans KR Bold"), local("Source Han Sans JP Bold"), local("Source Han Sans CN Bold"), local("Source Han Sans HK Bold"), local("Source Han Sans TW Bold"), local("Source Han Sans TWHK Bold"), local("SourceHanSansKR-Bold"), local("SourceHanSansJP-Bold"), local("SourceHanSansCN-Bold"), local("SourceHanSansHK-Bold"), local("SourceHanSansTW-Bold"), local("SourceHanSansTWHK-Bold"), local("Source Han Sans KR"), local("Source Han Sans CN"), local("Source Han Sans HK"), local("Source Han Sans TW"), local("Source Han Sans TWHK");
-}
-@font-face {
- unicode-range: U+4E00-9FFF, U+3400-4DB5, U+20000-2A6D6, U+2A700-2B734, U+2B740-2B81D, U+FA0E-FA0F, U+FA11, U+FA13-FA14, U+FA1F, U+FA21, U+FA23, U+FA24, U+FA27-FA29, U+3040-309F, U+30A0-30FF, U+3099-309E, U+FF66-FF9F, U+3007, U+31C0-31E3, U+2F00-2FD5, U+2E80-2EF3;
- font-family: "Han Heiti";
- font-weight: 600;
- src: local("YuGothic Bold"), local("Hiragino Kaku Gothic ProN W6"), local("Hiragino Kaku Gothic Pro W6"), local(YuGo-Bold), local(HiraKakuProN-W6), local(HiraKakuPro-W6);
-}
-@font-face {
- font-family: "Han Heiti CNS";
- font-weight: 600;
- src: local("Pingfang TC Semibold"), local("Pingfang-TC-Semibold"), local("Heiti TC Medium"), local("STHeitiTC-Medium"), local("Heiti TC"), local("Lantinghei TC Demibold"), local(FZLTXHB--B51-0), local("Microsoft Jhenghei Bold"), local(MicrosoftJhengHeiBold), local("Microsoft Jhenghei"), local("Microsoft Yahei Bold"), local(MicrosoftYahei-Bold), local("Noto Sans CJK TC Bold"), local(NotoSansCJKtc-Bold), local("Noto Sans CJK TC"), local("Source Han Sans TC Bold"), local("SourceHanSansTC-Bold"), local("Source Han Sans TC"), local("Source Han Sans TW Bold"), local("SourceHanSans-TW"), local("Source Han Sans TW"), local("Source Han Sans TWHK Bold"), local("SourceHanSans-TWHK"), local("Source Han Sans TWHK"), local("Source Han Sans HK"), local("SourceHanSans-HK"), local("Source Han Sans HK");
-}
-@font-face {
- font-family: "Han Heiti GB";
- font-weight: 600;
- src: local("Hiragino Sans GB W6"), local(HiraginoSansGB-W6), local("Pingfang SC Semibold"), local("Pingfang-SC-Semibold"), local("Lantinghei SC Demibold"), local(FZLTZHK--GBK1-0), local("Heiti SC Medium"), local("STHeitiSC-Medium"), local("Heiti SC"), local("Microsoft Yahei Bold"), local(MicrosoftYahei-Bold), local("Microsoft Yahei"), local("Noto Sans CJK SC Bold"), local(NotoSansCJKsc-Bold), local("Noto Sans CJK SC"), local("Source Han Sans SC Bold"), local("SourceHanSansSC-Bold"), local("Source Han Sans CN Bold"), local("SourceHanSansCN-Bold"), local("Source Han Sans SC"), local("Source Han Sans CN");
-}
-@font-face {
- font-family: "Han Songti";
- src: local("Songti SC Regular"), local(STSongti-SC-Regular), local("Songti SC"), local("Songti TC Regular"), local(STSongti-TC-Regular), local("Songti TC"), local(STSong), local("Lisong Pro"), local(SimSun), local(PMingLiU);
-}
-@font-face {
- unicode-range: U+4E00-9FFF, U+3400-4DB5, U+20000-2A6D6, U+2A700-2B734, U+2B740-2B81D, U+FA0E-FA0F, U+FA11, U+FA13-FA14, U+FA1F, U+FA21, U+FA23, U+FA24, U+FA27-FA29, U+3040-309F, U+30A0-30FF, U+3099-309E, U+FF66-FF9F, U+3007, U+31C0-31E3, U+2F00-2FD5, U+2E80-2EF3;
- font-family: "Han Songti";
- src: local(YuMincho), local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("MS Mincho");
-}
-@font-face {
- font-family: "Han Songti CNS";
- src: local("Songti TC Regular"), local(STSongti-TC-Regular), local("Songti TC"), local("Lisong Pro"), local("Songti SC Regular"), local(STSongti-SC-Regular), local("Songti SC"), local(STSong), local(PMingLiU), local(SimSun);
-}
-@font-face {
- font-family: "Han Songti GB";
- src: local("Songti SC Regular"), local(STSongti-SC-Regular), local("Songti SC"), local(STSong), local(SimSun), local(PMingLiU);
-}
-@font-face {
- font-family: "Han Songti";
- font-weight: 600;
- src: local("STSongti SC Bold"), local("STSongti TC Bold"), local(STSongti-SC-Bold), local(STSongti-TC-Bold), local("STSongti SC"), local("STSongti TC");
-}
-@font-face {
- unicode-range: U+4E00-9FFF, U+3400-4DB5, U+20000-2A6D6, U+2A700-2B734, U+2B740-2B81D, U+FA0E-FA0F, U+FA11, U+FA13-FA14, U+FA1F, U+FA21, U+FA23, U+FA24, U+FA27-FA29, U+3040-309F, U+30A0-30FF, U+3099-309E, U+FF66-FF9F, U+3007, U+31C0-31E3, U+2F00-2FD5, U+2E80-2EF3;
- font-family: "Han Songti";
- font-weight: 600;
- src: local("YuMincho Demibold"), local("Hiragino Mincho ProN W6"), local("Hiragino Mincho Pro W6"), local(YuMin-Demibold), local(HiraMinProN-W6), local(HiraMinPro-W6), local(YuMincho), local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro");
-}
-@font-face {
- font-family: "Han Songti CNS";
- font-weight: 600;
- src: local("STSongti TC Bold"), local("STSongti SC Bold"), local(STSongti-TC-Bold), local(STSongti-SC-Bold), local("STSongti TC"), local("STSongti SC");
-}
-@font-face {
- font-family: "Han Songti GB";
- font-weight: 600;
- src: local("STSongti SC Bold"), local(STSongti-SC-Bold), local("STSongti SC");
-}
-@font-face {
- font-family: cursive;
- src: local("Kaiti TC Regular"), local(STKaiTi-TC-Regular), local("Kaiti TC"), local("Kaiti SC"), local(STKaiti), local(BiauKai), local("標楷體"), local(DFKaiShu-SB-Estd-BF), local(Kaiti), local(DFKai-SB);
-}
-@font-face {
- unicode-range: U+4E00-9FFF, U+3400-4DB5, U+20000-2A6D6, U+2A700-2B734, U+2B740-2B81D, U+FA0E-FA0F, U+FA11, U+FA13-FA14, U+FA1F, U+FA21, U+FA23, U+FA24, U+FA27-FA29, U+3040-309F, U+30A0-30FF, U+3099-309E, U+FF66-FF9F, U+3007, U+31C0-31E3, U+2F00-2FD5, U+2E80-2EF3;
- font-family: "Han Kaiti";
- src: local("Kaiti TC Regular"), local(STKaiTi-TC-Regular), local("Kaiti TC"), local("Kaiti SC"), local(STKaiti), local(BiauKai), local("標楷體"), local(DFKaiShu-SB-Estd-BF), local(Kaiti), local(DFKai-SB);
-}
-@font-face {
- unicode-range: U+4E00-9FFF, U+3400-4DB5, U+20000-2A6D6, U+2A700-2B734, U+2B740-2B81D, U+FA0E-FA0F, U+FA11, U+FA13-FA14, U+FA1F, U+FA21, U+FA23, U+FA24, U+FA27-FA29, U+3040-309F, U+30A0-30FF, U+3099-309E, U+FF66-FF9F, U+3007, U+31C0-31E3, U+2F00-2FD5, U+2E80-2EF3;
- font-family: "Han Kaiti CNS";
- src: local(BiauKai), local("標楷體"), local(DFKaiShu-SB-Estd-BF), local("Kaiti TC Regular"), local(STKaiTi-TC-Regular), local("Kaiti TC");
-}
-@font-face {
- unicode-range: U+4E00-9FFF, U+3400-4DB5, U+20000-2A6D6, U+2A700-2B734, U+2B740-2B81D, U+FA0E-FA0F, U+FA11, U+FA13-FA14, U+FA1F, U+FA21, U+FA23, U+FA24, U+FA27-FA29, U+3040-309F, U+30A0-30FF, U+3099-309E, U+FF66-FF9F, U+3007, U+31C0-31E3, U+2F00-2FD5, U+2E80-2EF3;
- font-family: "Han Kaiti GB";
- src: local("Kaiti SC Regular"), local(STKaiTi-SC-Regular), local("Kaiti SC"), local(STKaiti), local(Kai), local(Kaiti), local(DFKai-SB);
-}
-@font-face {
- font-family: cursive;
- font-weight: 600;
- src: local("Kaiti TC Bold"), local(STKaiTi-TC-Bold), local("Kaiti SC Bold"), local(STKaiti-SC-Bold), local("Kaiti TC"), local("Kaiti SC");
-}
-@font-face {
- font-family: "Han Kaiti";
- font-weight: 600;
- src: local("Kaiti TC Bold"), local(STKaiTi-TC-Bold), local("Kaiti SC Bold"), local(STKaiti-SC-Bold), local("Kaiti TC"), local("Kaiti SC");
-}
-@font-face {
- font-family: "Han Kaiti CNS";
- font-weight: 600;
- src: local("Kaiti TC Bold"), local(STKaiTi-TC-Bold), local("Kaiti TC");
-}
-@font-face {
- font-family: "Han Kaiti GB";
- font-weight: 600;
- src: local("Kaiti SC Bold"), local(STKaiti-SC-Bold);
-}
-@font-face {
- unicode-range: U+4E00-9FFF, U+3400-4DB5, U+20000-2A6D6, U+2A700-2B734, U+2B740-2B81D, U+FA0E-FA0F, U+FA11, U+FA13-FA14, U+FA1F, U+FA21, U+FA23, U+FA24, U+FA27-FA29, U+3040-309F, U+30A0-30FF, U+3099-309E, U+FF66-FF9F, U+3007, U+31C0-31E3, U+2F00-2FD5, U+2E80-2EF3;
- font-family: "Han Fangsong";
- src: local(STFangsong), local(FangSong);
-}
-@font-face {
- unicode-range: U+4E00-9FFF, U+3400-4DB5, U+20000-2A6D6, U+2A700-2B734, U+2B740-2B81D, U+FA0E-FA0F, U+FA11, U+FA13-FA14, U+FA1F, U+FA21, U+FA23, U+FA24, U+FA27-FA29, U+3040-309F, U+30A0-30FF, U+3099-309E, U+FF66-FF9F, U+3007, U+31C0-31E3, U+2F00-2FD5, U+2E80-2EF3;
- font-family: "Han Fangsong CNS";
- src: local(STFangsong), local(FangSong);
-}
-@font-face {
- unicode-range: U+4E00-9FFF, U+3400-4DB5, U+20000-2A6D6, U+2A700-2B734, U+2B740-2B81D, U+FA0E-FA0F, U+FA11, U+FA13-FA14, U+FA1F, U+FA21, U+FA23, U+FA24, U+FA27-FA29, U+3040-309F, U+30A0-30FF, U+3099-309E, U+FF66-FF9F, U+3007, U+31C0-31E3, U+2F00-2FD5, U+2E80-2EF3;
- font-family: "Han Fangsong GB";
- src: local(STFangsong), local(FangSong);
-}
-@font-face {
- font-family: "Biaodian Sans";
- src: local("Hiragino Sans GB"), local("Heiti SC"), local(STHeiti), local("MS Gothic"), local(SimSun);
- unicode-range: U+FF0E;
-}
-@font-face {
- font-family: "Biaodian Serif";
- src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Songti SC"), local(STSong), local(SimSun);
- unicode-range: U+FF0E;
-}
-@font-face {
- font-family: "Biaodian Pro Sans";
- src: local("Hiragino Sans GB"), local("Heiti SC"), local(STHeiti), local("MS Gothic"), local(SimSun);
- unicode-range: U+FF0E;
-}
-@font-face {
- font-family: "Biaodian Pro Serif";
- src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Songti SC"), local(STSong), local(SimSun);
- unicode-range: U+FF0E;
-}
-@font-face {
- font-family: "Biaodian Pro Sans CNS";
- src: local("Hiragino Sans GB"), local("Heiti SC"), local(STHeiti), local("MS Gothic"), local(SimSun);
- unicode-range: U+FF0E;
-}
-@font-face {
- font-family: "Biaodian Pro Serif CNS";
- src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Songti SC"), local(STSong), local(SimSun);
- unicode-range: U+FF0E;
-}
-@font-face {
- font-family: "Biaodian Pro Sans GB";
- src: local("Hiragino Sans GB"), local("Heiti SC"), local(STHeiti), local("MS Gothic"), local(SimSun);
- unicode-range: U+FF0E;
-}
-@font-face {
- font-family: "Biaodian Pro Serif GB";
- src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Songti SC"), local(STSong), local(SimSun);
- unicode-range: U+FF0E;
-}
-@font-face {
- font-family: "Biaodian Sans";
- src: local("Hiragino Sans GB"), local("Heiti SC"), local(STHeiti), local(SimSun);
- unicode-range: U+00B7;
-}
-@font-face {
- font-family: "Biaodian Serif";
- src: local("Songti SC"), local(STSong), local("Heiti SC"), local(SimSun);
- unicode-range: U+00B7;
-}
-@font-face {
- font-family: "Biaodian Pro Sans";
- src: local("Hiragino Sans GB"), local("Heiti SC"), local(STHeiti), local(SimSun);
- unicode-range: U+00B7;
-}
-@font-face {
- font-family: "Biaodian Pro Serif";
- src: local("Songti SC"), local(STSong), local("Heiti SC"), local(SimSun);
- unicode-range: U+00B7;
-}
-@font-face {
- font-family: "Biaodian Pro Sans CNS";
- src: local("Hiragino Sans GB"), local("Heiti SC"), local(STHeiti), local(SimSun);
- unicode-range: U+00B7;
-}
-@font-face {
- font-family: "Biaodian Pro Serif CNS";
- src: local("Songti SC"), local(STSong), local("Heiti SC"), local(SimSun);
- unicode-range: U+00B7;
-}
-@font-face {
- font-family: "Biaodian Pro Sans GB";
- src: local("Hiragino Sans GB"), local("Heiti SC"), local(STHeiti), local(SimSun);
- unicode-range: U+00B7;
-}
-@font-face {
- font-family: "Biaodian Pro Serif GB";
- src: local("Songti SC"), local(STSong), local("Heiti SC"), local(SimSun);
- unicode-range: U+00B7;
-}
-@font-face {
- font-family: "Biaodian Sans";
- src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"), local("Hiragino Sans GB"), local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local("Microsoft Yahei"), local(SimSun);
- unicode-range: U+2014;
-}
-@font-face {
- font-family: "Biaodian Serif";
- src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"), local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Songti SC"), local(STSong), local("Microsoft Yahei"), local(SimSun);
- unicode-range: U+2014;
-}
-@font-face {
- font-family: "Yakumono Sans";
- src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"), local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local("Arial Unicode MS"), local("MS Gothic");
- unicode-range: U+2014;
-}
-@font-face {
- font-family: "Yakumono Serif";
- src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"), local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("MS Mincho"), local("Microsoft Yahei");
- unicode-range: U+2014;
-}
-@font-face {
- font-family: "Biaodian Pro Sans";
- src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"), local("Hiragino Sans GB"), local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local("Microsoft Yahei"), local(SimSun);
- unicode-range: U+2014;
-}
-@font-face {
- font-family: "Biaodian Pro Serif";
- src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"), local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Songti SC"), local(STSong), local("Microsoft Yahei"), local(SimSun);
- unicode-range: U+2014;
-}
-@font-face {
- font-family: "Biaodian Pro Sans CNS";
- src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"), local("Hiragino Sans GB"), local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local("Microsoft Yahei"), local(SimSun);
- unicode-range: U+2014;
-}
-@font-face {
- font-family: "Biaodian Pro Serif CNS";
- src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"), local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Songti SC"), local(STSong), local("Microsoft Yahei"), local(SimSun);
- unicode-range: U+2014;
-}
-@font-face {
- font-family: "Biaodian Pro Sans GB";
- src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"), local("Hiragino Sans GB"), local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local("Microsoft Yahei"), local(SimSun);
- unicode-range: U+2014;
-}
-@font-face {
- font-family: "Biaodian Pro Serif GB";
- src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"), local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Songti SC"), local(STSong), local("Microsoft Yahei"), local(SimSun);
- unicode-range: U+2014;
-}
-@font-face {
- font-family: "Biaodian Sans";
- src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"), local("Hiragino Sans GB"), local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local(Meiryo), local("MS Gothic"), local(SimSun), local(PMingLiU);
- unicode-range: U+2026;
-}
-@font-face {
- font-family: "Biaodian Serif";
- src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"), local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Songti SC"), local("MS Mincho"), local(SimSun), local(PMingLiU);
- unicode-range: U+2026;
-}
-@font-face {
- font-family: "Yakumono Sans";
- src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"), local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local(Meiryo), local("MS Gothic");
- unicode-range: U+2026;
-}
-@font-face {
- font-family: "Yakumono Serif";
- src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"), local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("MS Mincho");
- unicode-range: U+2026;
-}
-@font-face {
- font-family: "Biaodian Pro Sans";
- src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"), local("Hiragino Sans GB"), local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local(SimSun), local(PMingLiU);
- unicode-range: U+2026;
-}
-@font-face {
- font-family: "Biaodian Pro Serif";
- src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"), local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Songti SC"), local(SimSun), local(PMingLiU);
- unicode-range: U+2026;
-}
-@font-face {
- font-family: "Biaodian Pro Sans CNS";
- src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"), local("Hiragino Sans GB"), local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local(SimSun), local(PMingLiU);
- unicode-range: U+2026;
-}
-@font-face {
- font-family: "Biaodian Pro Serif CNS";
- src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"), local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Songti SC"), local(STSongti), local(SimSun), local(PMingLiU);
- unicode-range: U+2026;
-}
-@font-face {
- font-family: "Biaodian Pro Sans GB";
- src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"), local("Hiragino Sans GB"), local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local(SimSun), local(PMingLiU);
- unicode-range: U+2026;
-}
-@font-face {
- font-family: "Biaodian Pro Serif GB";
- src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype"), local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Songti SC"), local(STSongti), local(SimSun), local(PMingLiU);
- unicode-range: U+2026;
-}
-@font-face {
- font-family: "Biaodian Pro Sans GB";
- src: local("Hiragino Sans GB"), local("Heiti SC"), local(STHeiti), local(SimSun), local(PMingLiU);
- unicode-range: U+201C-201D, U+2018-2019;
-}
-@font-face {
- font-family: "Biaodian Pro Sans GB";
- font-weight: bold;
- src: local("Hiragino Sans GB"), local("Heiti SC"), local(STHeiti), local(SimSun), local(PMingLiU);
- unicode-range: U+201C-201D, U+2018-2019;
-}
-@font-face {
- font-family: "Biaodian Pro Serif GB";
- src: local("Lisong Pro"), local("Heiti SC"), local(STHeiti), local(SimSun), local(PMingLiU);
- unicode-range: U+201C-201D, U+2018-2019;
-}
-@font-face {
- font-family: "Biaodian Pro Serif GB";
- font-weight: bold;
- src: local("Lisong Pro"), local("Heiti SC"), local(STHeiti), local(SimSun), local(PMingLiU);
- unicode-range: U+201C-201D, U+2018-2019;
-}
-@font-face {
- font-family: "Biaodian Sans";
- src: local(Georgia), local("Times New Roman"), local(Arial), local("Droid Sans Fallback");
- unicode-range: U+25CF;
-}
-@font-face {
- font-family: "Biaodian Serif";
- src: local(Georgia), local("Times New Roman"), local(Arial), local("Droid Sans Fallback");
- unicode-range: U+25CF;
-}
-@font-face {
- font-family: "Biaodian Pro Sans";
- src: local(Georgia), local("Times New Roman"), local(Arial), local("Droid Sans Fallback");
- unicode-range: U+25CF;
-}
-@font-face {
- font-family: "Biaodian Pro Serif";
- src: local(Georgia), local("Times New Roman"), local(Arial), local("Droid Sans Fallback");
- unicode-range: U+25CF;
-}
-@font-face {
- font-family: "Biaodian Pro Sans CNS";
- src: local(Georgia), local("Times New Roman"), local(Arial), local("Droid Sans Fallback");
- unicode-range: U+25CF;
-}
-@font-face {
- font-family: "Biaodian Pro Serif CNS";
- src: local(Georgia), local("Times New Roman"), local(Arial), local("Droid Sans Fallback");
- unicode-range: U+25CF;
-}
-@font-face {
- font-family: "Biaodian Pro Sans GB";
- src: local(Georgia), local("Times New Roman"), local(Arial), local("Droid Sans Fallback");
- unicode-range: U+25CF;
-}
-@font-face {
- font-family: "Biaodian Pro Serif GB";
- src: local(Georgia), local("Times New Roman"), local(Arial), local("Droid Sans Fallback");
- unicode-range: U+25CF;
-}
-@font-face {
- font-family: "Biaodian Pro Sans";
- src: local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local("MS Gothic");
- unicode-range: U+3002, U+FF0C, U+3001, U+FF1B, U+FF1A, U+FF1F, U+FF01, U+FF0D, U+FF0F, U+FF3C;
-}
-@font-face {
- font-family: "Biaodian Pro Serif";
- src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("MS Mincho");
- unicode-range: U+3002, U+FF0C, U+3001, U+FF1B, U+FF1A, U+FF1F, U+FF01, U+FF0D, U+FF0F, U+FF3C;
-}
-@font-face {
- font-family: "Biaodian Pro Sans CNS";
- src: local("Heiti TC"), local("Lihei Pro"), local("Microsoft Jhenghei"), local(PMingLiU);
- unicode-range: U+3002, U+FF0C, U+3001;
-}
-@font-face {
- font-family: "Biaodian Pro Sans CNS";
- src: local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local("Heiti TC"), local("Lihei Pro"), local("Microsoft Jhenghei"), local(PMingLiU), local("MS Gothic");
- unicode-range: U+FF1B, U+FF1A, U+FF1F, U+FF01;
-}
-@font-face {
- font-family: "Biaodian Pro Sans CNS";
- src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("MS Mincho");
- unicode-range: U+FF0D, U+FF0F, U+FF3C;
-}
-@font-face {
- font-family: "Biaodian Pro Serif CNS";
- src: local(STSongti-TC-Regular), local("Lisong Pro"), local("Heiti TC"), local(PMingLiU);
- unicode-range: U+3002, U+FF0C, U+3001;
-}
-@font-face {
- font-family: "Biaodian Pro Serif CNS";
- src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local(PMingLiU), local("MS Mincho");
- unicode-range: U+FF1B, U+FF1A, U+FF1F, U+FF01, U+FF0D, U+FF0F, U+FF3C;
-}
-@font-face {
- font-family: "Biaodian Pro Sans GB";
- src: local("Hiragino Sans GB"), local("Heiti SC"), local(STHeiti), local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local(SimSun), local("MS Gothic");
- unicode-range: U+3002, U+FF0C, U+3001, U+FF1B, U+FF1A, U+FF1F, U+FF01, U+FF0D, U+FF0F, U+FF3C;
-}
-@font-face {
- font-family: "Biaodian Pro Serif GB";
- src: local("Songti SC"), local(STSongti), local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Hiragino Sans GB"), local("Heiti SC"), local(STHeiti), local(SimSun), local("MS Mincho");
- unicode-range: U+3002, U+FF0C, U+3001, U+FF1B, U+FF1A, U+FF1F, U+FF01;
-}
-@font-face {
- font-family: "Biaodian Pro Serif GB";
- src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local(PMingLiU), local("MS Mincho");
- unicode-range: U+FF0D, U+FF0F, U+FF3C;
-}
-@font-face {
- font-family: "Biaodian Pro Sans";
- src: local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local("Yu Gothic"), local(YuGothic), local(SimSun), local(PMingLiU);
- unicode-range: U+300C-300F, U+300A-300B, U+3008-3009, U+FF08-FF09, U+3014-3015;
-}
-@font-face {
- font-family: "Biaodian Pro Serif";
- src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Yu Mincho"), local(YuMincho), local(SimSun), local(PMingLiU);
- unicode-range: U+300C-300F, U+300A-300B, U+3008-3009, U+FF08-FF09, U+3014-3015;
-}
-@font-face {
- font-family: "Biaodian Pro Sans CNS";
- src: local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local("Yu Gothic"), local(YuGothic), local(SimSun), local(PMingLiU);
- unicode-range: U+300C-300F, U+300A-300B, U+3008-3009, U+FF08-FF09, U+3014-3015;
-}
-@font-face {
- font-family: "Biaodian Pro Serif CNS";
- src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Yu Mincho"), local(YuMincho), local(SimSun), local(PMingLiU);
- unicode-range: U+300C-300F, U+300A-300B, U+3008-3009, U+FF08-FF09, U+3014-3015;
-}
-@font-face {
- font-family: "Biaodian Pro Sans GB";
- src: local("Hiragino Kaku Gothic ProN"), local("Hiragino Kaku Gothic Pro"), local("Yu Gothic"), local(YuGothic), local(SimSun), local(PMingLiU);
- unicode-range: U+300C-300F, U+300A-300B, U+3008-3009, U+FF08-FF09, U+3014-3015;
-}
-@font-face {
- font-family: "Biaodian Pro Serif GB";
- src: local("Hiragino Mincho ProN"), local("Hiragino Mincho Pro"), local("Yu Mincho"), local(YuMincho), local(SimSun), local(PMingLiU);
- unicode-range: U+300C-300F, U+300A-300B, U+3008-3009, U+FF08-FF09, U+3014-3015;
-}
-@font-face {
- font-family: "Biaodian Basic";
- src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype");
- unicode-range: U+2014, U+2026, U+00B7;
-}
-@font-face {
- font-family: "Biaodian Basic";
- font-weight: bold;
- src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype");
- unicode-range: U+2014, U+2026, U+00B7;
-}
-@font-face {
- font-family: "Biaodian Sans";
- font-weight: bold;
- src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype");
- unicode-range: U+2014, U+2026, U+00B7;
-}
-@font-face {
- font-family: "Biaodian Pro Sans";
- font-weight: bold;
- src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype");
- unicode-range: U+2014, U+2026, U+00B7;
-}
-@font-face {
- font-family: "Biaodian Pro Sans";
- font-weight: bold;
- src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype");
- unicode-range: U+2014, U+2026, U+00B7;
-}
-@font-face {
- font-family: "Biaodian Pro Sans CNS";
- font-weight: bold;
- src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype");
- unicode-range: U+2014, U+2026, U+00B7;
-}
-@font-face {
- font-family: "Biaodian Pro Sans GB";
- font-weight: bold;
- src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype");
- unicode-range: U+2014, U+2026, U+00B7;
-}
-@font-face {
- font-family: "Biaodian Pro Serif";
- font-weight: bold;
- src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype");
- unicode-range: U+2014, U+2026, U+00B7;
-}
-@font-face {
- font-family: "Biaodian Pro Serif CNS";
- font-weight: bold;
- src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype");
- unicode-range: U+2014, U+2026, U+00B7;
-}
-@font-face {
- font-family: "Biaodian Pro Serif GB";
- font-weight: bold;
- src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype");
- unicode-range: U+2014, U+2026, U+00B7;
-}
-@font-face {
- font-family: "Latin Italic Serif";
- src: local("Georgia Italic"), local("Times New Roman Italic"), local(Georgia-Italic), local(TimesNewRomanPS-ItalicMT), local(Times-Italic);
-}
-@font-face {
- font-family: "Latin Italic Serif";
- font-weight: 700;
- src: local("Georgia Bold Italic"), local("Times New Roman Bold Italic"), local(Georgia-BoldItalic), local(TimesNewRomanPS-BoldItalicMT), local(Times-Italic);
-}
-@font-face {
- font-family: "Latin Italic Sans";
- src: local("Helvetica Neue Italic"), local("Helvetica Oblique"), local("Arial Italic"), local(HelveticaNeue-Italic), local(Helvetica-LightOblique), local(Arial-ItalicMT);
-}
-@font-face {
- font-family: "Latin Italic Sans";
- font-weight: 700;
- src: local("Helvetica Neue Bold Italic"), local("Helvetica Bold Oblique"), local("Arial Bold Italic"), local(HelveticaNeue-BoldItalic), local(Helvetica-BoldOblique), local(Arial-BoldItalicMT);
-}
-@font-face {
- unicode-range: U+0030-0039;
- font-family: "Numeral TF Sans";
- src: local(Skia), local("Neutraface 2 Text"), local(Candara), local(Corbel);
-}
-@font-face {
- unicode-range: U+0030-0039;
- font-family: "Numeral TF Serif";
- src: local(Georgia), local("Hoefler Text"), local("Big Caslon");
-}
-@font-face {
- unicode-range: U+0030-0039;
- font-family: "Numeral TF Italic Serif";
- src: local("Georgia Italic"), local("Hoefler Text Italic"), local(Georgia-Italic), local(HoeflerText-Italic);
-}
-@font-face {
- unicode-range: U+0030-0039;
- font-family: "Numeral LF Sans";
- src: local("Helvetica Neue"), local(Helvetica), local(Arial);
-}
-@font-face {
- unicode-range: U+0030-0039;
- font-family: "Numeral LF Italic Sans";
- src: local("Helvetica Neue Italic"), local("Helvetica Oblique"), local("Arial Italic"), local(HelveticaNeue-Italic), local(Helvetica-LightOblique), local(Arial-ItalicMT);
-}
-@font-face {
- unicode-range: U+0030-0039;
- font-family: "Numeral LF Italic Sans";
- font-weight: bold;
- src: local("Helvetica Neue Bold Italic"), local("Helvetica Bold Oblique"), local("Arial Bold Italic"), local(HelveticaNeue-BoldItalic), local(Helvetica-BoldOblique), local(Arial-BoldItalicMT);
-}
-@font-face {
- unicode-range: U+0030-0039;
- font-family: "Numeral LF Serif";
- src: local(Palatino), local("Palatino Linotype"), local("Times New Roman");
-}
-@font-face {
- unicode-range: U+0030-0039;
- font-family: "Numeral LF Italic Serif";
- src: local("Palatino Italic"), local("Palatino Italic Linotype"), local("Times New Roman Italic"), local(Palatino-Italic), local(Palatino-Italic-Linotype), local(TimesNewRomanPS-ItalicMT);
-}
-@font-face {
- unicode-range: U+0030-0039;
- font-family: "Numeral LF Italic Serif";
- font-weight: bold;
- src: local("Palatino Bold Italic"), local("Palatino Bold Italic Linotype"), local("Times New Roman Bold Italic"), local(Palatino-BoldItalic), local(Palatino-BoldItalic-Linotype), local(TimesNewRomanPS-BoldItalicMT);
-}
-@font-face {
- src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype");
- unicode-range: U+3105-312D, U+31A0-31BA, U+02D9, U+02CA, U+02C5, U+02C7, U+02CB, U+02EA-02EB, U+0307, U+030D, U+0358, U+F31B4-F31B7, U+F0061, U+F0065, U+F0069, U+F006F, U+F0075;
- font-family: "Zhuyin Kaiti";
-}
-@font-face {
- unicode-range: U+3105-312D, U+31A0-31BA, U+02D9, U+02CA, U+02C5, U+02C7, U+02CB, U+02EA-02EB, U+0307, U+030D, U+0358, U+F31B4-F31B7, U+F0061, U+F0065, U+F0069, U+F006F, U+F0075;
- font-family: "Zhuyin Heiti";
- src: local("Hiragino Sans GB"), local("Heiti TC"), local("Microsoft Jhenghei"), url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype");
-}
-@font-face {
- font-family: "Zhuyin Heiti";
- src: local("Heiti TC"), local("Microsoft Jhenghei"), url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype");
- unicode-range: U+3127;
-}
-@font-face {
- src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype");
- font-family: "Zhuyin Heiti";
- unicode-range: U+02D9, U+02CA, U+02C5, U+02C7, U+02CB, U+02EA-02EB, U+31B4, U+31B5, U+31B6, U+31B7, U+0307, U+030D, U+0358, U+F31B4-F31B7, U+F0061, U+F0065, U+F0069, U+F006F, U+F0075;
-}
-@font-face {
- src: url("./font/han.woff2?v3.3.0") format("woff2"), url("./font/han.woff?v3.3.0") format("woff"), url("./font/han.otf?v3.3.0") format("opentype");
- font-family: "Romanization Sans";
- unicode-range: U+0307, U+030D, U+0358, U+F31B4-F31B7, U+F0061, U+F0065, U+F0069, U+F006F, U+F0075;
-}
-html:lang(zh-Latn),
-html:lang(ja-Latn),
-html:not(:lang(zh)):not(:lang(ja)),
-html *:lang(zh-Latn),
-html *:lang(ja-Latn),
-html *:not(:lang(zh)):not(:lang(ja)),
-article strong:lang(zh-Latn),
-article strong:lang(ja-Latn),
-article strong:not(:lang(zh)):not(:lang(ja)),
-article strong *:lang(zh-Latn),
-article strong *:lang(ja-Latn),
-article strong *:not(:lang(zh)):not(:lang(ja)) {
- font-family: "Helvetica Neue", Helvetica, Arial, "Han Heiti", sans-serif;
-}
-html:lang(zh),
-html:lang(zh-Hant),
-[lang^="zh"],
-[lang*="Hant"],
-[lang="zh-TW"],
-[lang="zh-HK"],
-article strong:lang(zh),
-article strong:lang(zh-Hant) {
- font-family: "Biaodian Pro Sans CNS", "Helvetica Neue", Helvetica, Arial, "Zhuyin Heiti", "Han Heiti", sans-serif;
-}
-html:lang(zh).no-unicoderange,
-html:lang(zh-Hant).no-unicoderange,
-.no-unicoderange [lang^="zh"],
-.no-unicoderange [lang*="Hant"],
-.no-unicoderange [lang="zh-TW"],
-.no-unicoderange [lang="zh-HK"],
-.no-unicoderange article strong:lang(zh),
-.no-unicoderange article strong:lang(zh-Hant) {
- font-family: "Helvetica Neue", Helvetica, Arial, "Han Heiti", sans-serif;
-}
-html:lang(zh-Hans),
-html:lang(zh-CN),
-[lang*="Hans"],
-[lang="zh-CN"],
-article strong:lang(zh-Hans),
-article strong:lang(zh-CN) {
- font-family: "Biaodian Pro Sans GB", "Helvetica Neue", Helvetica, Arial, "Han Heiti GB", sans-serif;
-}
-html:lang(zh-Hans).no-unicoderange,
-html:lang(zh-CN).no-unicoderange,
-.no-unicoderange [lang*="Hans"],
-.no-unicoderange [lang="zh-CN"],
-.no-unicoderange article strong:lang(zh-Hans),
-.no-unicoderange article strong:lang(zh-CN) {
- font-family: "Helvetica Neue", Helvetica, Arial, "Han Heiti GB", sans-serif;
-}
-html:lang(ja),
-[lang^="ja"],
-article strong:lang(ja) {
- font-family: "Yakumono Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
-}
-html:lang(ja).no-unicoderange,
-.no-unicoderange [lang^="ja"],
-.no-unicoderange article strong:lang(ja) {
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-}
-article blockquote i:lang(zh-Latn),
-article blockquote var:lang(zh-Latn),
-article blockquote i:lang(ja-Latn),
-article blockquote var:lang(ja-Latn),
-article blockquote i:not(:lang(zh)):not(:lang(ja)),
-article blockquote var:not(:lang(zh)):not(:lang(ja)),
-article blockquote i *:lang(zh-Latn),
-article blockquote var *:lang(zh-Latn),
-article blockquote i *:lang(ja-Latn),
-article blockquote var *:lang(ja-Latn),
-article blockquote i *:not(:lang(zh)):not(:lang(ja)),
-article blockquote var *:not(:lang(zh)):not(:lang(ja)) {
- font-family: "Latin Italic Sans", "Helvetica Neue", Helvetica, Arial, "Han Heiti", sans-serif;
-}
-article blockquote i:lang(zh),
-article blockquote var:lang(zh),
-article blockquote i:lang(zh-Hant),
-article blockquote var:lang(zh-Hant) {
- font-family: "Biaodian Pro Sans CNS", "Latin Italic Sans", "Helvetica Neue", Helvetica, Arial, "Zhuyin Heiti", "Han Heiti", sans-serif;
-}
-.no-unicoderange article blockquote i:lang(zh),
-.no-unicoderange article blockquote var:lang(zh),
-.no-unicoderange article blockquote i:lang(zh-Hant),
-.no-unicoderange article blockquote var:lang(zh-Hant) {
- font-family: "Latin Italic Sans", "Helvetica Neue", Helvetica, Arial, "Han Heiti", sans-serif;
-}
-.no-unicoderange article blockquote i:lang(zh),
-.no-unicoderange article blockquote var:lang(zh),
-.no-unicoderange article blockquote i:lang(zh-Hant),
-.no-unicoderange article blockquote var:lang(zh-Hant) {
- font-family: "Latin Italic Sans", "Helvetica Neue", Helvetica, Arial, "Han Heiti", sans-serif;
-}
-article blockquote i:lang(zh-Hans),
-article blockquote var:lang(zh-Hans),
-article blockquote i:lang(zh-CN),
-article blockquote var:lang(zh-CN) {
- font-family: "Biaodian Pro Sans GB", "Latin Italic Sans", "Helvetica Neue", Helvetica, Arial, "Han Heiti GB", sans-serif;
-}
-.no-unicoderange article blockquote i:lang(zh-Hans),
-.no-unicoderange article blockquote var:lang(zh-Hans),
-.no-unicoderange article blockquote i:lang(zh-CN),
-.no-unicoderange article blockquote var:lang(zh-CN) {
- font-family: "Latin Italic Sans", "Helvetica Neue", Helvetica, Arial, "Han Heiti GB", sans-serif;
-}
-article blockquote i:lang(ja),
-article blockquote var:lang(ja) {
- font-family: "Yakumono Sans", "Latin Italic Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
-}
-.no-unicoderange article blockquote i:lang(ja),
-.no-unicoderange article blockquote var:lang(ja) {
- font-family: "Latin Italic Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
-}
-article figure blockquote:lang(zh-Latn),
-article figure blockquote:lang(ja-Latn),
-article figure blockquote:not(:lang(zh)):not(:lang(ja)),
-article figure blockquote *:lang(zh-Latn),
-article figure blockquote *:lang(ja-Latn),
-article figure blockquote *:not(:lang(zh)):not(:lang(ja)) {
- font-family: Georgia, "Times New Roman", "Han Songti", cursive, serif;
-}
-article figure blockquote:lang(zh),
-article figure blockquote:lang(zh-Hant) {
- font-family: "Biaodian Pro Serif CNS", "Numeral LF Serif", Georgia, "Times New Roman", "Zhuyin Kaiti", "Han Songti", serif;
-}
-.no-unicoderange article figure blockquote:lang(zh),
-.no-unicoderange article figure blockquote:lang(zh-Hant) {
- font-family: "Numeral LF Serif", Georgia, "Times New Roman", "Han Songti", serif;
-}
-article figure blockquote:lang(zh-Hans),
-article figure blockquote:lang(zh-CN) {
- font-family: "Biaodian Pro Serif GB", "Numeral LF Serif", Georgia, "Times New Roman", "Han Songti GB", serif;
-}
-.no-unicoderange article figure blockquote:lang(zh-Hans),
-.no-unicoderange article figure blockquote:lang(zh-CN) {
- font-family: "Numeral LF Serif", Georgia, "Times New Roman", "Han Songti GB", serif;
-}
-article figure blockquote:lang(ja) {
- font-family: "Yakumono Serif", "Numeral LF Serif", Georgia, "Times New Roman", serif;
-}
-.no-unicoderange article figure blockquote:lang(ja) {
- font-family: "Numeral LF Serif", Georgia, "Times New Roman", serif;
-}
-article blockquote:lang(zh-Latn),
-article blockquote:lang(ja-Latn),
-article blockquote:not(:lang(zh)):not(:lang(ja)),
-article blockquote *:lang(zh-Latn),
-article blockquote *:lang(ja-Latn),
-article blockquote *:not(:lang(zh)):not(:lang(ja)) {
- font-family: Georgia, "Times New Roman", "Han Kaiti", cursive, serif;
-}
-article blockquote:lang(zh),
-article blockquote:lang(zh-Hant) {
- font-family: "Biaodian Pro Serif CNS", "Numeral LF Serif", Georgia, "Times New Roman", "Zhuyin Kaiti", "Han Kaiti", cursive, serif;
-}
-.no-unicoderange article blockquote:lang(zh),
-.no-unicoderange article blockquote:lang(zh-Hant) {
- font-family: "Numeral LF Serif", Georgia, "Times New Roman", "Han Kaiti", cursive, serif;
-}
-article blockquote:lang(zh-Hans),
-article blockquote:lang(zh-CN) {
- font-family: "Biaodian Pro Serif GB", "Numeral LF Serif", Georgia, "Times New Roman", "Han Kaiti GB", cursive, serif;
-}
-.no-unicoderange article blockquote:lang(zh-Hans),
-.no-unicoderange article blockquote:lang(zh-CN) {
- font-family: "Numeral LF Serif", Georgia, "Times New Roman", "Han Kaiti GB", cursive, serif;
-}
-article blockquote:lang(ja) {
- font-family: "Yakumono Serif", "Numeral LF Serif", Georgia, "Times New Roman", cursive, serif;
-}
-.no-unicoderange article blockquote:lang(ja) {
- font-family: "Numeral LF Serif", Georgia, "Times New Roman", cursive, serif;
-}
-i:lang(zh-Latn),
-var:lang(zh-Latn),
-i:lang(ja-Latn),
-var:lang(ja-Latn),
-i:not(:lang(zh)):not(:lang(ja)),
-var:not(:lang(zh)):not(:lang(ja)),
-i *:lang(zh-Latn),
-var *:lang(zh-Latn),
-i *:lang(ja-Latn),
-var *:lang(ja-Latn),
-i *:not(:lang(zh)):not(:lang(ja)),
-var *:not(:lang(zh)):not(:lang(ja)) {
- font-family: "Latin Italic Serif", Georgia, "Times New Roman", "Han Kaiti", cursive, serif;
-}
-i:lang(zh),
-var:lang(zh),
-i:lang(zh-Hant),
-var:lang(zh-Hant) {
- font-family: "Biaodian Pro Serif CNS", "Numeral LF Italic Serif", "Latin Italic Serif", Georgia, "Times New Roman", "Zhuyin Kaiti", "Han Kaiti", cursive, serif;
-}
-.no-unicoderange i:lang(zh),
-.no-unicoderange var:lang(zh),
-.no-unicoderange i:lang(zh-Hant),
-.no-unicoderange var:lang(zh-Hant) {
- font-family: "Numeral LF Italic Serif", "Latin Italic Serif", Georgia, "Times New Roman", "Han Kaiti", cursive, serif;
-}
-i:lang(zh-Hans),
-var:lang(zh-Hans),
-i:lang(zh-CN),
-var:lang(zh-CN) {
- font-family: "Biaodian Pro Serif GB", "Numeral LF Italic Serif", "Latin Italic Serif", Georgia, "Times New Roman", "Han Kaiti GB", cursive, serif;
-}
-.no-unicoderange i:lang(zh-Hans),
-.no-unicoderange var:lang(zh-Hans),
-.no-unicoderange i:lang(zh-CN),
-.no-unicoderange var:lang(zh-CN) {
- font-family: "Numeral LF Italic Serif", "Latin Italic Serif", Georgia, "Times New Roman", "Han Kaiti GB", cursive, serif;
-}
-i:lang(ja),
-var:lang(ja) {
- font-family: "Yakumono Serif", "Numeral LF Italic Serif", "Latin Italic Serif", Georgia, "Times New Roman", cursive, serif;
-}
-.no-unicoderange i:lang(ja),
-.no-unicoderange var:lang(ja) {
- font-family: "Numeral LF Italic Serif", "Latin Italic Serif", Georgia, "Times New Roman", cursive, serif;
-}
-code:lang(zh-Latn),
-kbd:lang(zh-Latn),
-samp:lang(zh-Latn),
-pre:lang(zh-Latn),
-code:lang(ja-Latn),
-kbd:lang(ja-Latn),
-samp:lang(ja-Latn),
-pre:lang(ja-Latn),
-code:not(:lang(zh)):not(:lang(ja)),
-kbd:not(:lang(zh)):not(:lang(ja)),
-samp:not(:lang(zh)):not(:lang(ja)),
-pre:not(:lang(zh)):not(:lang(ja)),
-code *:lang(zh-Latn),
-kbd *:lang(zh-Latn),
-samp *:lang(zh-Latn),
-pre *:lang(zh-Latn),
-code *:lang(ja-Latn),
-kbd *:lang(ja-Latn),
-samp *:lang(ja-Latn),
-pre *:lang(ja-Latn),
-code *:not(:lang(zh)):not(:lang(ja)),
-kbd *:not(:lang(zh)):not(:lang(ja)),
-samp *:not(:lang(zh)):not(:lang(ja)),
-pre *:not(:lang(zh)):not(:lang(ja)) {
- font-family: Menlo, Consolas, Courier, "Han Heiti", monospace, monospace, sans-serif;
-}
-code:lang(zh),
-kbd:lang(zh),
-samp:lang(zh),
-pre:lang(zh),
-code:lang(zh-Hant),
-kbd:lang(zh-Hant),
-samp:lang(zh-Hant),
-pre:lang(zh-Hant) {
- font-family: "Biaodian Pro Sans CNS", Menlo, Consolas, Courier, "Zhuyin Heiti", "Han Heiti", monospace, monospace, sans-serif;
-}
-.no-unicoderange code:lang(zh),
-.no-unicoderange kbd:lang(zh),
-.no-unicoderange samp:lang(zh),
-.no-unicoderange pre:lang(zh),
-.no-unicoderange code:lang(zh-Hant),
-.no-unicoderange kbd:lang(zh-Hant),
-.no-unicoderange samp:lang(zh-Hant),
-.no-unicoderange pre:lang(zh-Hant) {
- font-family: Menlo, Consolas, Courier, "Han Heiti", monospace, monospace, sans-serif;
-}
-code:lang(zh-Hans),
-kbd:lang(zh-Hans),
-samp:lang(zh-Hans),
-pre:lang(zh-Hans),
-code:lang(zh-CN),
-kbd:lang(zh-CN),
-samp:lang(zh-CN),
-pre:lang(zh-CN) {
- font-family: "Biaodian Pro Sans GB", Menlo, Consolas, Courier, "Han Heiti GB", monospace, monospace, sans-serif;
-}
-.no-unicoderange code:lang(zh-Hans),
-.no-unicoderange kbd:lang(zh-Hans),
-.no-unicoderange samp:lang(zh-Hans),
-.no-unicoderange pre:lang(zh-Hans),
-.no-unicoderange code:lang(zh-CN),
-.no-unicoderange kbd:lang(zh-CN),
-.no-unicoderange samp:lang(zh-CN),
-.no-unicoderange pre:lang(zh-CN) {
- font-family: Menlo, Consolas, Courier, "Han Heiti GB", monospace, monospace, sans-serif;
-}
-code:lang(ja),
-kbd:lang(ja),
-samp:lang(ja),
-pre:lang(ja) {
- font-family: "Yakumono Sans", Menlo, Consolas, Courier, monospace, monospace, sans-serif;
-}
-.no-unicoderange code:lang(ja),
-.no-unicoderange kbd:lang(ja),
-.no-unicoderange samp:lang(ja),
-.no-unicoderange pre:lang(ja) {
- font-family: Menlo, Consolas, Courier, monospace, monospace, sans-serif;
-}
-html,
-.no-unicoderange h-char.bd-liga,
-.no-unicoderange h-char[unicode="b7"],
-ruby h-zhuyin,
-h-ruby h-zhuyin,
-ruby h-zhuyin h-diao,
-h-ruby h-zhuyin h-diao,
-ruby.romanization rt,
-h-ruby.romanization rt,
-ruby [annotation] rt,
-h-ruby [annotation] rt {
- -moz-font-feature-settings: "liga";
- -ms-font-feature-settings: "liga";
- -webkit-font-feature-settings: "liga";
- font-feature-settings: "liga";
-}
-html,
-[lang^="zh"],
-[lang*="Hant"],
-[lang="zh-TW"],
-[lang="zh-HK"],
-[lang*="Hans"],
-[lang="zh-CN"],
-article strong,
-code,
-kbd,
-samp,
-pre,
-article blockquote i,
-article blockquote var {
- -moz-font-feature-settings: "liga=1, locl=0";
- -ms-font-feature-settings: "liga", "locl" 0;
- -webkit-font-feature-settings: "liga", "locl" 0;
- font-feature-settings: "liga", "locl" 0;
-}
-.no-unicoderange h-char.bd-cop:lang(zh-Hant),
-.no-unicoderange h-char.bd-cop:lang(zh-TW),
-.no-unicoderange h-char.bd-cop:lang(zh-HK) {
- font-family: -apple-system, "Han Heiti CNS";
-}
-.no-unicoderange h-char.bd-liga,
-.no-unicoderange h-char[unicode="b7"] {
- font-family: "Biaodian Basic", "Han Heiti";
-}
-.no-unicoderange h-char[unicode="2018"]:lang(zh-Hans),
-.no-unicoderange h-char[unicode="2019"]:lang(zh-Hans),
-.no-unicoderange h-char[unicode="201c"]:lang(zh-Hans),
-.no-unicoderange h-char[unicode="201d"]:lang(zh-Hans),
-.no-unicoderange h-char[unicode="2018"]:lang(zh-CN),
-.no-unicoderange h-char[unicode="2019"]:lang(zh-CN),
-.no-unicoderange h-char[unicode="201c"]:lang(zh-CN),
-.no-unicoderange h-char[unicode="201d"]:lang(zh-CN) {
- font-family: "Han Heiti GB";
-}
-i,
-var {
- font-style: inherit;
-}
-.no-unicoderange ruby h-zhuyin,
-.no-unicoderange h-ruby h-zhuyin,
-.no-unicoderange ruby h-zhuyin h-diao,
-.no-unicoderange h-ruby h-zhuyin h-diao {
- font-family: "Zhuyin Kaiti", cursive, serif;
-}
-ruby h-diao,
-h-ruby h-diao {
- font-family: "Zhuyin Kaiti", cursive, serif;
-}
-ruby.romanization rt,
-h-ruby.romanization rt,
-ruby [annotation] rt,
-h-ruby [annotation] rt {
- font-family: "Romanization Sans", "Helvetica Neue", Helvetica, Arial, "Han Heiti", sans-serif;
-}
diff --git a/lib/Han/dist/han.js b/lib/Han/dist/han.js
deleted file mode 100644
index 75976c6..0000000
--- a/lib/Han/dist/han.js
+++ /dev/null
@@ -1,3005 +0,0 @@
-/*!
- * 漢字標準格式 v3.3.0 | MIT License | css.hanzi.co
- * Han.css: the CSS typography framework optimised for Hanzi
- */
-
-void function( global, factory ) {
-
- // CommonJS
- if ( typeof module === 'object' && typeof module.exports === 'object' ) {
- module.exports = factory( global, true )
- // AMD
- } else if ( typeof define === 'function' && define.amd ) {
- define(function() { return factory( global, true ) })
- // Global namespace
- } else {
- factory( global )
- }
-
-}( typeof window !== 'undefined' ? window : this, function( window, noGlobalNS ) {
-
-'use strict'
-
-var document = window.document
-
-var root = document.documentElement
-
-var body = document.body
-
-var VERSION = '3.3.0'
-
-var ROUTINE = [
- // Initialise the condition with feature-detecting
- // classes (Modernizr-alike), binding onto the root
- // element, possibly ``.
- 'initCond',
-
- // Address element normalisation
- 'renderElem',
-
- // Handle Biaodian
- /* 'jinzify', */
- 'renderJiya',
- 'renderHanging',
-
- // Address Biaodian correction
- 'correctBiaodian',
-
- // Address Hanzi and Western script mixed spacing
- 'renderHWS',
-
- // Address presentational correction to combining ligatures
- 'substCombLigaWithPUA'
-
- // Address semantic correction to inaccurate characters
- // **Note:** inactivated by default
- /* 'substInaccurateChar', */
-]
-
-// Define Han
-var Han = function( context, condition ) {
- return new Han.fn.init( context, condition )
-}
-
-var init = function() {
- if ( arguments[ 0 ] ) {
- this.context = arguments[ 0 ]
- }
- if ( arguments[ 1 ] ) {
- this.condition = arguments[ 1 ]
- }
- return this
-}
-
-Han.version = VERSION
-
-Han.fn = Han.prototype = {
- version: VERSION,
-
- constructor: Han,
-
- // Body as the default target context
- context: body,
-
- // Root element as the default condition
- condition: root,
-
- // Default rendering routine
- routine: ROUTINE,
-
- init: init,
-
- setRoutine: function( routine ) {
- if ( Array.isArray( routine )) {
- this.routine = routine
- }
- return this
- },
-
- // Note that the routine set up here will execute
- // only once. The method won't alter the routine in
- // the instance or in the prototype chain.
- render: function( routine ) {
- var it = this
- var routine = Array.isArray( routine )
- ? routine
- : this.routine
-
- routine
- .forEach(function( method ) {
- if (
- typeof method === 'string' &&
- typeof it[ method ] === 'function'
- ) {
- it[ method ]()
- } else if (
- Array.isArray( method ) &&
- typeof it[ method[0] ] === 'function'
- ) {
- it[ method.shift() ].apply( it, method )
- }
- })
- return this
- }
-}
-
-Han.fn.init.prototype = Han.fn
-
-/**
- * Shortcut for `render()` under the default
- * situation.
- *
- * Once initialised, replace `Han.init` with the
- * instance for future usage.
- */
-Han.init = function() {
- return Han.init = Han().render()
-}
-
-var UNICODE = {
- /**
- * Western punctuation (西文標點符號)
- */
- punct: {
- base: '[\u2026,.;:!?\u203D_]',
- sing: '[\u2010-\u2014\u2026]',
- middle: '[\\\/~\\-&\u2010-\u2014_]',
- open: '[\'"‘“\\(\\[\u00A1\u00BF\u2E18\u00AB\u2039\u201A\u201C\u201E]',
- close: '[\'"”’\\)\\]\u00BB\u203A\u201B\u201D\u201F]',
- end: '[\'"”’\\)\\]\u00BB\u203A\u201B\u201D\u201F\u203C\u203D\u2047-\u2049,.;:!?]',
- },
-
- /**
- * CJK biaodian (CJK標點符號)
- */
- biaodian: {
- base: '[︰.、,。:;?!ー]',
- liga: '[—…⋯]',
- middle: '[·\/-゠\uFF06\u30FB\uFF3F]',
- open: '[「『《〈(〔[{【〖]',
- close: '[」』》〉)〕]}】〗]',
- end: '[」』》〉)〕]}】〗︰.、,。:;?!ー]'
- },
-
- /**
- * CJK-related blocks (CJK相關字符區段)
- *
- * 1. 中日韓統一意音文字:[\u4E00-\u9FFF]
- Basic CJK unified ideographs
- * 2. 擴展-A區:[\u3400-\u4DB5]
- Extended-A
- * 3. 擴展-B區:[\u20000-\u2A6D6]([\uD840-\uD869][\uDC00-\uDED6])
- Extended-B
- * 4. 擴展-C區:[\u2A700-\u2B734](\uD86D[\uDC00-\uDF3F]|[\uD86A-\uD86C][\uDC00-\uDFFF]|\uD869[\uDF00-\uDFFF])
- Extended-C
- * 5. 擴展-D區:[\u2B740-\u2B81D](急用漢字,\uD86D[\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1F])
- Extended-D
- * 6. 擴展-E區:[\u2B820-\u2F7FF](暫未支援)
- Extended-E (not supported yet)
- * 7. 擴展-F區(暫未支援)
- Extended-F (not supported yet)
- * 8. 筆畫區:[\u31C0-\u31E3]
- Strokes
- * 9. 意音數字「〇」:[\u3007]
- Ideographic number zero
- * 10. 相容意音文字及補充:[\uF900-\uFAFF][\u2F800-\u2FA1D](不使用)
- Compatibility ideograph and supplement (not supported)
-
- 12 exceptions:
- [\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29]
-
- https://zh.wikipedia.org/wiki/中日韓統一表意文字#cite_note-1
-
- * 11. 康熙字典及簡化字部首:[\u2F00-\u2FD5\u2E80-\u2EF3]
- Kangxi and supplement radicals
- * 12. 意音文字描述字元:[\u2FF0-\u2FFA]
- Ideographic description characters
- */
- hanzi: {
- base: '[\u4E00-\u9FFF\u3400-\u4DB5\u31C0-\u31E3\u3007\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29]|[\uD800-\uDBFF][\uDC00-\uDFFF]',
- desc: '[\u2FF0-\u2FFA]',
- radical: '[\u2F00-\u2FD5\u2E80-\u2EF3]'
- },
-
- /**
- * Latin script blocks (拉丁字母區段)
- *
- * 1. 基本拉丁字母:A-Za-z
- Basic Latin
- * 2. 阿拉伯數字:0-9
- Digits
- * 3. 補充-1:[\u00C0-\u00FF]
- Latin-1 supplement
- * 4. 擴展-A區:[\u0100-\u017F]
- Extended-A
- * 5. 擴展-B區:[\u0180-\u024F]
- Extended-B
- * 5. 擴展-C區:[\u2C60-\u2C7F]
- Extended-C
- * 5. 擴展-D區:[\uA720-\uA7FF]
- Extended-D
- * 6. 附加區:[\u1E00-\u1EFF]
- Extended additional
- * 7. 變音組字符:[\u0300-\u0341\u1DC0-\u1DFF]
- Combining diacritical marks
- */
- latin: {
- base: '[A-Za-z0-9\u00C0-\u00FF\u0100-\u017F\u0180-\u024F\u2C60-\u2C7F\uA720-\uA7FF\u1E00-\u1EFF]',
- combine: '[\u0300-\u0341\u1DC0-\u1DFF]'
- },
-
- /**
- * Elli̱niká (Greek) script blocks (希臘字母區段)
- *
- * 1. 希臘字母及擴展:[\u0370–\u03FF\u1F00-\u1FFF]
- Basic Greek & Greek Extended
- * 2. 阿拉伯數字:0-9
- Digits
- * 3. 希臘字母變音組字符:[\u0300-\u0345\u1DC0-\u1DFF]
- Combining diacritical marks
- */
- ellinika: {
- base: '[0-9\u0370-\u03FF\u1F00-\u1FFF]',
- combine: '[\u0300-\u0345\u1DC0-\u1DFF]'
- },
-
- /**
- * Kirillica (Cyrillic) script blocks (西里爾字母區段)
- *
- * 1. 西里爾字母及補充:[\u0400-\u0482\u048A-\u04FF\u0500-\u052F]
- Basic Cyrillic and supplement
- * 2. 擴展B區:[\uA640-\uA66E\uA67E-\uA697]
- Extended-B
- * 3. 阿拉伯數字:0-9
- Digits
- * 4. 西里爾字母組字符:[\u0483-\u0489\u2DE0-\u2DFF\uA66F-\uA67D\uA69F](位擴展A、B區)
- Cyrillic combining diacritical marks (in extended-A, B)
- */
- kirillica: {
- base: '[0-9\u0400-\u0482\u048A-\u04FF\u0500-\u052F\uA640-\uA66E\uA67E-\uA697]',
- combine: '[\u0483-\u0489\u2DE0-\u2DFF\uA66F-\uA67D\uA69F]'
- },
-
- /**
- * Kana (假名)
- *
- * 1. 日文假名:[\u30A2\u30A4\u30A6\u30A8\u30AA-\u30FA\u3042\u3044\u3046\u3048\u304A-\u3094\u309F\u30FF]
- Japanese Kana
- * 2. 假名補充[\u1B000\u1B001](\uD82C[\uDC00-\uDC01])
- Kana supplement
- * 3. 日文假名小寫:[\u3041\u3043\u3045\u3047\u3049\u30A1\u30A3\u30A5\u30A7\u30A9\u3063\u3083\u3085\u3087\u308E\u3095\u3096\u30C3\u30E3\u30E5\u30E7\u30EE\u30F5\u30F6\u31F0-\u31FF]
- Japanese small Kana
- * 4. 假名組字符:[\u3099-\u309C]
- Kana combining characters
- * 5. 半形假名:[\uFF66-\uFF9F]
- Halfwidth Kana
- * 6. 符號:[\u309D\u309E\u30FB-\u30FE]
- Marks
- */
- kana: {
- base: '[\u30A2\u30A4\u30A6\u30A8\u30AA-\u30FA\u3042\u3044\u3046\u3048\u304A-\u3094\u309F\u30FF]|\uD82C[\uDC00-\uDC01]',
- small: '[\u3041\u3043\u3045\u3047\u3049\u30A1\u30A3\u30A5\u30A7\u30A9\u3063\u3083\u3085\u3087\u308E\u3095\u3096\u30C3\u30E3\u30E5\u30E7\u30EE\u30F5\u30F6\u31F0-\u31FF]',
- combine: '[\u3099-\u309C]',
- half: '[\uFF66-\uFF9F]',
- mark: '[\u30A0\u309D\u309E\u30FB-\u30FE]'
- },
-
- /**
- * Eonmun (Hangul, 諺文)
- *
- * 1. 諺文音節:[\uAC00-\uD7A3]
- Eonmun (Hangul) syllables
- * 2. 諺文字母:[\u1100-\u11FF\u314F-\u3163\u3131-\u318E\uA960-\uA97C\uD7B0-\uD7FB]
- Eonmun (Hangul) letters
- * 3. 半形諺文字母:[\uFFA1-\uFFDC]
- Halfwidth Eonmun (Hangul) letters
- */
- eonmun: {
- base: '[\uAC00-\uD7A3]',
- letter: '[\u1100-\u11FF\u314F-\u3163\u3131-\u318E\uA960-\uA97C\uD7B0-\uD7FB]',
- half: '[\uFFA1-\uFFDC]'
- },
-
- /**
- * Zhuyin (注音符號, Mandarin & Dialect Phonetic Symbols)
- *
- * 1. 國語注音、方言音符號:[\u3105-\u312D][\u31A0-\u31BA]
- Bopomofo phonetic symbols
- * 2. 平上去聲調號:[\u02D9\u02CA\u02C5\u02C7\u02EA\u02EB\u02CB] (**註:**國語三聲包含乙個不合規範的符號)
- Level, rising, departing tones
- * 3. 入聲調號:[\u31B4-\u31B7][\u0358\u030d]?
- Checked (entering) tones
- */
- zhuyin: {
- base: '[\u3105-\u312D\u31A0-\u31BA]',
- initial: '[\u3105-\u3119\u312A-\u312C\u31A0-\u31A3]',
- medial: '[\u3127-\u3129]',
- final: '[\u311A-\u3129\u312D\u31A4-\u31B3\u31B8-\u31BA]',
- tone: '[\u02D9\u02CA\u02C5\u02C7\u02CB\u02EA\u02EB]',
- checked: '[\u31B4-\u31B7][\u0358\u030d]?'
- }
-}
-
-var TYPESET = (function() {
- var rWhite = '[\\x20\\t\\r\\n\\f]'
- // Whitespace characters
- // http://www.w3.org/TR/css3-selectors/#whitespace
-
- var rPtOpen = UNICODE.punct.open
- var rPtClose = UNICODE.punct.close
- var rPtEnd = UNICODE.punct.end
- var rPtMid = UNICODE.punct.middle
- var rPtSing = UNICODE.punct.sing
- var rPt = rPtOpen + '|' + rPtEnd + '|' + rPtMid
-
- var rBDOpen = UNICODE.biaodian.open
- var rBDClose = UNICODE.biaodian.close
- var rBDEnd = UNICODE.biaodian.end
- var rBDMid = UNICODE.biaodian.middle
- var rBDLiga = UNICODE.biaodian.liga + '{2}'
- var rBD = rBDOpen + '|' + rBDEnd + '|' + rBDMid
-
- var rKana = UNICODE.kana.base + UNICODE.kana.combine + '?'
- var rKanaS = UNICODE.kana.small + UNICODE.kana.combine + '?'
- var rKanaH = UNICODE.kana.half
- var rEon = UNICODE.eonmun.base + '|' + UNICODE.eonmun.letter
- var rEonH = UNICODE.eonmun.half
-
- var rHan = UNICODE.hanzi.base + '|' + UNICODE.hanzi.desc + '|' + UNICODE.hanzi.radical + '|' + rKana
-
- var rCbn = UNICODE.ellinika.combine
- var rLatn = UNICODE.latin.base + rCbn + '*'
- var rGk = UNICODE.ellinika.base + rCbn + '*'
-
- var rCyCbn = UNICODE.kirillica.combine
- var rCy = UNICODE.kirillica.base + rCyCbn + '*'
-
- var rAlph = rLatn + '|' + rGk + '|' + rCy
-
- // For words like `it's`, `Jones’s` or `'99`
- var rApo = '[\u0027\u2019]'
- var rChar = rHan + '|(?:' + rAlph + '|' + rApo + ')+'
-
- var rZyS = UNICODE.zhuyin.initial
- var rZyJ = UNICODE.zhuyin.medial
- var rZyY = UNICODE.zhuyin.final
- var rZyD = UNICODE.zhuyin.tone + '|' + UNICODE.zhuyin.checked
-
- return {
- /* Character-level selector (字級選擇器)
- */
- char: {
- punct: {
- all: new RegExp( '(' + rPt + ')', 'g' ),
- open: new RegExp( '(' + rPtOpen + ')', 'g' ),
- end: new RegExp( '(' + rPtEnd + ')', 'g' ),
- sing: new RegExp( '(' + rPtSing + ')', 'g' )
- },
-
- biaodian: {
- all: new RegExp( '(' + rBD + ')', 'g' ),
- open: new RegExp( '(' + rBDOpen + ')', 'g' ),
- close: new RegExp( '(' + rBDClose + ')', 'g' ),
- end: new RegExp( '(' + rBDEnd + ')', 'g' ),
- liga: new RegExp( '(' + rBDLiga + ')', 'g' )
- },
-
- hanzi: new RegExp( '(' + rHan + ')', 'g' ),
-
- latin: new RegExp( '(' + rLatn + ')', 'ig' ),
- ellinika: new RegExp( '(' + rGk + ')', 'ig' ),
- kirillica: new RegExp( '(' + rCy + ')', 'ig' ),
-
- kana: new RegExp( '(' + rKana + '|' + rKanaS + '|' + rKanaH + ')', 'g' ),
- eonmun: new RegExp( '(' + rEon + '|' + rEonH + ')', 'g' )
- },
-
- /* Word-level selectors (詞級選擇器)
- */
- group: {
- biaodian: [
- new RegExp( '((' + rBD + '){2,})', 'g' ),
- new RegExp( '(' + rBDLiga + rBDOpen + ')', 'g' )
- ],
- punct: null,
- hanzi: new RegExp( '(' + rHan + ')+', 'g' ),
- western: new RegExp( '(' + rLatn + '|' + rGk + '|' + rCy + '|' + rPt + ')+', 'ig' ),
- kana: new RegExp( '(' + rKana + '|' + rKanaS + '|' + rKanaH + ')+', 'g' ),
- eonmun: new RegExp( '(' + rEon + '|' + rEonH + '|' + rPt + ')+', 'g' )
- },
-
- /* Punctuation Rules (禁則)
- */
- jinze: {
- hanging: new RegExp( rWhite + '*([、,。.])(?!' + rBDEnd + ')', 'ig' ),
- touwei: new RegExp( '(' + rBDOpen + '+)(' + rChar + ')(' + rBDEnd + '+)', 'ig' ),
- tou: new RegExp( '(' + rBDOpen + '+)(' + rChar + ')', 'ig' ),
- wei: new RegExp( '(' + rChar + ')(' + rBDEnd + '+)', 'ig' ),
- middle: new RegExp( '(' + rChar + ')(' + rBDMid + ')(' + rChar + ')', 'ig' )
- },
-
- zhuyin: {
- form: new RegExp( '^\u02D9?(' + rZyS + ')?(' + rZyJ + ')?(' + rZyY + ')?(' + rZyD + ')?$' ),
- diao: new RegExp( '(' + rZyD + ')', 'g' )
- },
-
- /* Hanzi and Western mixed spacing (漢字西文混排間隙)
- * - Basic mode
- * - Strict mode
- */
- hws: {
- base: [
- new RegExp( '('+ rHan + ')(' + rAlph + '|' + rPtOpen + ')', 'ig' ),
- new RegExp( '('+ rAlph + '|' + rPtEnd + ')(' + rHan + ')', 'ig' )
- ],
-
- strict: [
- new RegExp( '('+ rHan + ')' + rWhite + '?(' + rAlph + '|' + rPtOpen + ')', 'ig' ),
- new RegExp( '('+ rAlph + '|' + rPtEnd + ')' + rWhite + '?(' + rHan + ')', 'ig' )
- ]
- },
-
- // The feature displays the following characters
- // in its variant form for font consistency and
- // presentational reason. Meanwhile, this won't
- // alter the original character in the DOM.
- 'display-as': {
- 'ja-font-for-hant': [
- // '夠 够',
- '查 査',
- '啟 啓',
- '鄉 鄕',
- '值 値',
- '污 汚'
- ],
-
- 'comb-liga-pua': [
- [ '\u0061[\u030d\u0358]', '\uDB80\uDC61' ],
- [ '\u0065[\u030d\u0358]', '\uDB80\uDC65' ],
- [ '\u0069[\u030d\u0358]', '\uDB80\uDC69' ],
- [ '\u006F[\u030d\u0358]', '\uDB80\uDC6F' ],
- [ '\u0075[\u030d\u0358]', '\uDB80\uDC75' ],
-
- [ '\u31B4[\u030d\u0358]', '\uDB8C\uDDB4' ],
- [ '\u31B5[\u030d\u0358]', '\uDB8C\uDDB5' ],
- [ '\u31B6[\u030d\u0358]', '\uDB8C\uDDB6' ],
- [ '\u31B7[\u030d\u0358]', '\uDB8C\uDDB7' ]
- ],
-
- 'comb-liga-vowel': [
- [ '\u0061[\u030d\u0358]', '\uDB80\uDC61' ],
- [ '\u0065[\u030d\u0358]', '\uDB80\uDC65' ],
- [ '\u0069[\u030d\u0358]', '\uDB80\uDC69' ],
- [ '\u006F[\u030d\u0358]', '\uDB80\uDC6F' ],
- [ '\u0075[\u030d\u0358]', '\uDB80\uDC75' ]
- ],
-
- 'comb-liga-zhuyin': [
- [ '\u31B4[\u030d\u0358]', '\uDB8C\uDDB4' ],
- [ '\u31B5[\u030d\u0358]', '\uDB8C\uDDB5' ],
- [ '\u31B6[\u030d\u0358]', '\uDB8C\uDDB6' ],
- [ '\u31B7[\u030d\u0358]', '\uDB8C\uDDB7' ]
- ]
- },
-
- // The feature actually *converts* the character
- // in the DOM for semantic reason.
- //
- // Note that this could be aggressive.
- 'inaccurate-char': [
- [ '[\u2022\u2027]', '\u00B7' ],
- [ '\u22EF\u22EF', '\u2026\u2026' ],
- [ '\u2500\u2500', '\u2014\u2014' ],
- [ '\u2035', '\u2018' ],
- [ '\u2032', '\u2019' ],
- [ '\u2036', '\u201C' ],
- [ '\u2033', '\u201D' ]
- ]
- }
-})()
-
-Han.UNICODE = UNICODE
-Han.TYPESET = TYPESET
-
-// Aliases
-Han.UNICODE.cjk = Han.UNICODE.hanzi
-Han.UNICODE.greek = Han.UNICODE.ellinika
-Han.UNICODE.cyrillic = Han.UNICODE.kirillica
-Han.UNICODE.hangul = Han.UNICODE.eonmun
-Han.UNICODE.zhuyin.ruyun = Han.UNICODE.zhuyin.checked
-
-Han.TYPESET.char.cjk = Han.TYPESET.char.hanzi
-Han.TYPESET.char.greek = Han.TYPESET.char.ellinika
-Han.TYPESET.char.cyrillic = Han.TYPESET.char.kirillica
-Han.TYPESET.char.hangul = Han.TYPESET.char.eonmun
-
-Han.TYPESET.group.hangul = Han.TYPESET.group.eonmun
-Han.TYPESET.group.cjk = Han.TYPESET.group.hanzi
-
-var $ = {
- /**
- * Query selectors which return arrays of the resulted
- * node lists.
- */
- id: function( selector, $context ) {
- return ( $context || document ).getElementById( selector )
- },
-
- tag: function( selector, $context ) {
- return this.makeArray(
- ( $context || document ).getElementsByTagName( selector )
- )
- },
-
- qs: function( selector, $context ) {
- return ( $context || document ).querySelector( selector )
- },
-
- qsa: function( selector, $context ) {
- return this.makeArray(
- ( $context || document ).querySelectorAll( selector )
- )
- },
-
- parent: function( $node, selector ) {
- return selector
- ? (function() {
- if ( typeof $.matches !== 'function' ) return
-
- while (!$.matches( $node, selector )) {
- if (
- !$node ||
- $node === document.documentElement
- ) {
- $node = undefined
- break
- }
- $node = $node.parentNode
- }
- return $node
- })()
- : $node
- ? $node.parentNode : undefined
- },
-
- /**
- * Create a document fragment, a text node with text
- * or an element with/without classes.
- */
- create: function( name, clazz ) {
- var $elmt = '!' === name
- ? document.createDocumentFragment()
- : '' === name
- ? document.createTextNode( clazz || '' )
- : document.createElement( name )
-
- try {
- if ( clazz ) {
- $elmt.className = clazz
- }
- } catch (e) {}
-
- return $elmt
- },
-
- /**
- * Clone a DOM node (text, element or fragment) deeply
- * or childlessly.
- */
- clone: function( $node, deep ) {
- return $node.cloneNode(
- typeof deep === 'boolean'
- ? deep
- : true
- )
- },
-
- /**
- * Remove a node (text, element or fragment).
- */
- remove: function( $node ) {
- return $node.parentNode.removeChild( $node )
- },
-
- /**
- * Set attributes all in once with an object.
- */
- setAttr: function( target, attr ) {
- if ( typeof attr !== 'object' ) return
- var len = attr.length
-
- // Native `NamedNodeMap``:
- if (
- typeof attr[0] === 'object' &&
- 'name' in attr[0]
- ) {
- for ( var i = 0; i < len; i++ ) {
- if ( attr[ i ].value !== undefined ) {
- target.setAttribute( attr[ i ].name, attr[ i ].value )
- }
- }
-
- // Plain object:
- } else {
- for ( var name in attr ) {
- if (
- attr.hasOwnProperty( name ) &&
- attr[ name ] !== undefined
- ) {
- target.setAttribute( name, attr[ name ] )
- }
- }
- }
- return target
- },
-
- /**
- * Indicate whether or not the given node is an
- * element.
- */
- isElmt: function( $node ) {
- return $node && $node.nodeType === Node.ELEMENT_NODE
- },
-
- /**
- * Indicate whether or not the given node should
- * be ignored (`
` or comments).
- */
- isIgnorable: function( $node ) {
- if ( !$node ) return false
-
- return (
- $node.nodeName === 'WBR' ||
- $node.nodeType === Node.COMMENT_NODE
- )
- },
-
- /**
- * Convert array-like objects into real arrays.
- */
- makeArray: function( object ) {
- return Array.prototype.slice.call( object )
- },
-
- /**
- * Extend target with an object.
- */
- extend: function( target, object ) {
- if ((
- typeof target === 'object' ||
- typeof target === 'function' ) &&
- typeof object === 'object'
- ) {
- for ( var name in object ) {
- if (object.hasOwnProperty( name )) {
- target[ name ] = object[ name ]
- }
- }
- }
- return target
- }
-}
-
-var Fibre =
-/*!
- * Fibre.js v0.2.1 | MIT License | github.com/ethantw/fibre.js
- * Based on findAndReplaceDOMText
- */
-
-function( Finder ) {
-
-'use strict'
-
-var VERSION = '0.2.1'
-var NON_INLINE_PROSE = Finder.NON_INLINE_PROSE
-var AVOID_NON_PROSE = Finder.PRESETS.prose.filterElements
-
-var global = window || {}
-var document = global.document || undefined
-
-function matches( node, selector, bypassNodeType39 ) {
- var Efn = Element.prototype
- var matches = Efn.matches || Efn.mozMatchesSelector || Efn.msMatchesSelector || Efn.webkitMatchesSelector
-
- if ( node instanceof Element ) {
- return matches.call( node, selector )
- } else if ( bypassNodeType39 ) {
- if ( /^[39]$/.test( node.nodeType )) return true
- }
- return false
-}
-
-if ( typeof document === 'undefined' ) throw new Error( 'Fibre requires a DOM-supported environment.' )
-
-var Fibre = function( context, preset ) {
- return new Fibre.fn.init( context, preset )
-}
-
-Fibre.version = VERSION
-Fibre.matches = matches
-
-Fibre.fn = Fibre.prototype = {
- constructor: Fibre,
-
- version: VERSION,
-
- finder: [],
-
- context: undefined,
-
- portionMode: 'retain',
-
- selector: {},
-
- preset: 'prose',
-
- init: function( context, noPreset ) {
- if ( !!noPreset ) this.preset = null
-
- this.selector = {
- context: null,
- filter: [],
- avoid: [],
- boundary: []
- }
-
- if ( !context ) {
- throw new Error( 'A context is required for Fibre to initialise.' )
- } else if ( context instanceof Node ) {
- if ( context instanceof Document ) this.context = context.body || context
- else this.context = context
- } else if ( typeof context === 'string' ) {
- this.context = document.querySelector( context )
- this.selector.context = context
- }
- return this
- },
-
- filterFn: function( node ) {
- var filter = this.selector.filter.join( ', ' ) || '*'
- var avoid = this.selector.avoid.join( ', ' ) || null
- var result = matches( node, filter, true ) && !matches( node, avoid )
- return ( this.preset === 'prose' ) ? AVOID_NON_PROSE( node ) && result : result
- },
-
- boundaryFn: function( node ) {
- var boundary = this.selector.boundary.join( ', ' ) || null
- var result = matches( node, boundary )
- return ( this.preset === 'prose' ) ? NON_INLINE_PROSE( node ) || result : result
- },
-
- filter: function( selector ) {
- if ( typeof selector === 'string' ) {
- this.selector.filter.push( selector )
- }
- return this
- },
-
- endFilter: function( all ) {
- if ( all ) {
- this.selector.filter = []
- } else {
- this.selector.filter.pop()
- }
- return this
- },
-
- avoid: function( selector ) {
- if ( typeof selector === 'string' ) {
- this.selector.avoid.push( selector )
- }
- return this
- },
-
- endAvoid: function( all ) {
- if ( all ) {
- this.selector.avoid = []
- } else {
- this.selector.avoid.pop()
- }
- return this
- },
-
- addBoundary: function( selector ) {
- if ( typeof selector === 'string' ) {
- this.selector.boundary.push( selector )
- }
- return this
- },
-
- removeBoundary: function() {
- this.selector.boundary = []
- return this
- },
-
- setMode: function( portionMode ) {
- this.portionMode = portionMode === 'first' ? 'first' : 'retain'
- return this
- },
-
- replace: function( regexp, newSubStr ) {
- var it = this
- it.finder.push(Finder( it.context, {
- find: regexp,
- replace: newSubStr,
- filterElements: function( currentNode ) {
- return it.filterFn( currentNode )
- },
- forceContext: function( currentNode ) {
- return it.boundaryFn( currentNode )
- },
- portionMode: it.portionMode
- }))
- return it
- },
-
- wrap: function( regexp, strElemName ) {
- var it = this
- it.finder.push(Finder( it.context, {
- find: regexp,
- wrap: strElemName,
- filterElements: function( currentNode ) {
- return it.filterFn( currentNode )
- },
- forceContext: function( currentNode ) {
- return it.boundaryFn( currentNode )
- },
- portionMode: it.portionMode
- }))
- return it
- },
-
- revert: function( level ) {
- var max = this.finder.length
- var level = Number( level ) || ( level === 0 ? Number(0) :
- ( level === 'all' ? max : 1 ))
-
- if ( typeof max === 'undefined' || max === 0 ) return this
- else if ( level > max ) level = max
-
- for ( var i = level; i > 0; i-- ) {
- this.finder.pop().revert()
- }
- return this
- }
-}
-
-// Deprecated API(s)
-Fibre.fn.filterOut = Fibre.fn.avoid
-
-// Make sure init() inherit from Fibre()
-Fibre.fn.init.prototype = Fibre.fn
-
-return Fibre
-
-}(
-
-/**
- * findAndReplaceDOMText v 0.4.3
- * @author James Padolsey http://james.padolsey.com
- * @license http://unlicense.org/UNLICENSE
- *
- * Matches the text of a DOM node against a regular expression
- * and replaces each match (or node-separated portions of the match)
- * in the specified element.
- */
- (function() {
-
- var PORTION_MODE_RETAIN = 'retain'
- var PORTION_MODE_FIRST = 'first'
- var doc = document
- var toString = {}.toString
- var hasOwn = {}.hasOwnProperty
- function isArray(a) {
- return toString.call(a) == '[object Array]'
- }
-
- function escapeRegExp(s) {
- return String(s).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1')
- }
-
- function exposed() {
- // Try deprecated arg signature first:
- return deprecated.apply(null, arguments) || findAndReplaceDOMText.apply(null, arguments)
- }
-
- function deprecated(regex, node, replacement, captureGroup, elFilter) {
- if ((node && !node.nodeType) && arguments.length <= 2) {
- return false
- }
- var isReplacementFunction = typeof replacement == 'function'
- if (isReplacementFunction) {
- replacement = (function(original) {
- return function(portion, match) {
- return original(portion.text, match.startIndex)
- }
- }(replacement))
- }
-
- // Awkward support for deprecated argument signature (<0.4.0)
- var instance = findAndReplaceDOMText(node, {
-
- find: regex,
-
- wrap: isReplacementFunction ? null : replacement,
- replace: isReplacementFunction ? replacement : '$' + (captureGroup || '&'),
-
- prepMatch: function(m, mi) {
-
- // Support captureGroup (a deprecated feature)
-
- if (!m[0]) throw 'findAndReplaceDOMText cannot handle zero-length matches'
- if (captureGroup > 0) {
- var cg = m[captureGroup]
- m.index += m[0].indexOf(cg)
- m[0] = cg
- }
-
- m.endIndex = m.index + m[0].length
- m.startIndex = m.index
- m.index = mi
- return m
- },
- filterElements: elFilter
- })
- exposed.revert = function() {
- return instance.revert()
- }
- return true
- }
-
- /**
- * findAndReplaceDOMText
- *
- * Locates matches and replaces with replacementNode
- *
- * @param {Node} node Element or Text node to search within
- * @param {RegExp} options.find The regular expression to match
- * @param {String|Element} [options.wrap] A NodeName, or a Node to clone
- * @param {String|Function} [options.replace='$&'] What to replace each match with
- * @param {Function} [options.filterElements] A Function to be called to check whether to
- * process an element. (returning true = process element,
- * returning false = avoid element)
- */
- function findAndReplaceDOMText(node, options) {
- return new Finder(node, options)
- }
-
- exposed.NON_PROSE_ELEMENTS = {
- br:1, hr:1,
- // Media / Source elements:
- script:1, style:1, img:1, video:1, audio:1, canvas:1, svg:1, map:1, object:1,
- // Input elements
- input:1, textarea:1, select:1, option:1, optgroup: 1, button:1
- }
- exposed.NON_CONTIGUOUS_PROSE_ELEMENTS = {
-
- // Elements that will not contain prose or block elements where we don't
- // want prose to be matches across element borders:
-
- // Block Elements
- address:1, article:1, aside:1, blockquote:1, dd:1, div:1,
- dl:1, fieldset:1, figcaption:1, figure:1, footer:1, form:1, h1:1, h2:1, h3:1,
- h4:1, h5:1, h6:1, header:1, hgroup:1, hr:1, main:1, nav:1, noscript:1, ol:1,
- output:1, p:1, pre:1, section:1, ul:1,
- // Other misc. elements that are not part of continuous inline prose:
- br:1, li: 1, summary: 1, dt:1, details:1, rp:1, rt:1, rtc:1,
- // Media / Source elements:
- script:1, style:1, img:1, video:1, audio:1, canvas:1, svg:1, map:1, object:1,
- // Input elements
- input:1, textarea:1, select:1, option:1, optgroup: 1, button:1,
- // Table related elements:
- table:1, tbody:1, thead:1, th:1, tr:1, td:1, caption:1, col:1, tfoot:1, colgroup:1
-
- }
- exposed.NON_INLINE_PROSE = function(el) {
- return hasOwn.call(exposed.NON_CONTIGUOUS_PROSE_ELEMENTS, el.nodeName.toLowerCase())
- }
- // Presets accessed via `options.preset` when calling findAndReplaceDOMText():
- exposed.PRESETS = {
- prose: {
- forceContext: exposed.NON_INLINE_PROSE,
- filterElements: function(el) {
- return !hasOwn.call(exposed.NON_PROSE_ELEMENTS, el.nodeName.toLowerCase())
- }
- }
- }
- exposed.Finder = Finder
- /**
- * Finder -- encapsulates logic to find and replace.
- */
- function Finder(node, options) {
-
- var preset = options.preset && exposed.PRESETS[options.preset]
- options.portionMode = options.portionMode || PORTION_MODE_RETAIN
- if (preset) {
- for (var i in preset) {
- if (hasOwn.call(preset, i) && !hasOwn.call(options, i)) {
- options[i] = preset[i]
- }
- }
- }
-
- this.node = node
- this.options = options
- // ENable match-preparation method to be passed as option:
- this.prepMatch = options.prepMatch || this.prepMatch
- this.reverts = []
- this.matches = this.search()
- if (this.matches.length) {
- this.processMatches()
- }
-
- }
-
- Finder.prototype = {
-
- /**
- * Searches for all matches that comply with the instance's 'match' option
- */
- search: function() {
-
- var match
- var matchIndex = 0
- var offset = 0
- var regex = this.options.find
- var textAggregation = this.getAggregateText()
- var matches = []
- var self = this
- regex = typeof regex === 'string' ? RegExp(escapeRegExp(regex), 'g') : regex
- matchAggregation(textAggregation)
- function matchAggregation(textAggregation) {
- for (var i = 0, l = textAggregation.length; i < l; ++i) {
-
- var text = textAggregation[i]
- if (typeof text !== 'string') {
- // Deal with nested contexts: (recursive)
- matchAggregation(text)
- continue
- }
-
- if (regex.global) {
- while (match = regex.exec(text)) {
- matches.push(self.prepMatch(match, matchIndex++, offset))
- }
- } else {
- if (match = text.match(regex)) {
- matches.push(self.prepMatch(match, 0, offset))
- }
- }
-
- offset += text.length
- }
- }
-
- return matches
- },
-
- /**
- * Prepares a single match with useful meta info:
- */
- prepMatch: function(match, matchIndex, characterOffset) {
-
- if (!match[0]) {
- throw new Error('findAndReplaceDOMText cannot handle zero-length matches')
- }
-
- match.endIndex = characterOffset + match.index + match[0].length
- match.startIndex = characterOffset + match.index
- match.index = matchIndex
- return match
- },
-
- /**
- * Gets aggregate text within subject node
- */
- getAggregateText: function() {
-
- var elementFilter = this.options.filterElements
- var forceContext = this.options.forceContext
- return getText(this.node)
- /**
- * Gets aggregate text of a node without resorting
- * to broken innerText/textContent
- */
- function getText(node, txt) {
-
- if (node.nodeType === 3) {
- return [node.data]
- }
-
- if (elementFilter && !elementFilter(node)) {
- return []
- }
-
- var txt = ['']
- var i = 0
- if (node = node.firstChild) do {
-
- if (node.nodeType === 3) {
- txt[i] += node.data
- continue
- }
-
- var innerText = getText(node)
- if (
- forceContext &&
- node.nodeType === 1 &&
- (forceContext === true || forceContext(node))
- ) {
- txt[++i] = innerText
- txt[++i] = ''
- } else {
- if (typeof innerText[0] === 'string') {
- // Bridge nested text-node data so that they're
- // not considered their own contexts:
- // I.e. ['some', ['thing']] -> ['something']
- txt[i] += innerText.shift()
- }
- if (innerText.length) {
- txt[++i] = innerText
- txt[++i] = ''
- }
- }
- } while (node = node.nextSibling)
- return txt
- }
-
- },
-
- /**
- * Steps through the target node, looking for matches, and
- * calling replaceFn when a match is found.
- */
- processMatches: function() {
-
- var matches = this.matches
- var node = this.node
- var elementFilter = this.options.filterElements
- var startPortion,
- endPortion,
- innerPortions = [],
- curNode = node,
- match = matches.shift(),
- atIndex = 0, // i.e. nodeAtIndex
- matchIndex = 0,
- portionIndex = 0,
- doAvoidNode,
- nodeStack = [node]
- out: while (true) {
-
- if (curNode.nodeType === 3) {
-
- if (!endPortion && curNode.length + atIndex >= match.endIndex) {
-
- // We've found the ending
- endPortion = {
- node: curNode,
- index: portionIndex++,
- text: curNode.data.substring(match.startIndex - atIndex, match.endIndex - atIndex),
- indexInMatch: atIndex - match.startIndex,
- indexInNode: match.startIndex - atIndex, // always zero for end-portions
- endIndexInNode: match.endIndex - atIndex,
- isEnd: true
- }
- } else if (startPortion) {
- // Intersecting node
- innerPortions.push({
- node: curNode,
- index: portionIndex++,
- text: curNode.data,
- indexInMatch: atIndex - match.startIndex,
- indexInNode: 0 // always zero for inner-portions
- })
- }
-
- if (!startPortion && curNode.length + atIndex > match.startIndex) {
- // We've found the match start
- startPortion = {
- node: curNode,
- index: portionIndex++,
- indexInMatch: 0,
- indexInNode: match.startIndex - atIndex,
- endIndexInNode: match.endIndex - atIndex,
- text: curNode.data.substring(match.startIndex - atIndex, match.endIndex - atIndex)
- }
- }
-
- atIndex += curNode.data.length
- }
-
- doAvoidNode = curNode.nodeType === 1 && elementFilter && !elementFilter(curNode)
- if (startPortion && endPortion) {
-
- curNode = this.replaceMatch(match, startPortion, innerPortions, endPortion)
- // processMatches has to return the node that replaced the endNode
- // and then we step back so we can continue from the end of the
- // match:
-
- atIndex -= (endPortion.node.data.length - endPortion.endIndexInNode)
- startPortion = null
- endPortion = null
- innerPortions = []
- match = matches.shift()
- portionIndex = 0
- matchIndex++
- if (!match) {
- break; // no more matches
- }
-
- } else if (
- !doAvoidNode &&
- (curNode.firstChild || curNode.nextSibling)
- ) {
- // Move down or forward:
- if (curNode.firstChild) {
- nodeStack.push(curNode)
- curNode = curNode.firstChild
- } else {
- curNode = curNode.nextSibling
- }
- continue
- }
-
- // Move forward or up:
- while (true) {
- if (curNode.nextSibling) {
- curNode = curNode.nextSibling
- break
- }
- curNode = nodeStack.pop()
- if (curNode === node) {
- break out
- }
- }
-
- }
-
- },
-
- /**
- * Reverts ... TODO
- */
- revert: function() {
- // Reversion occurs backwards so as to avoid nodes subsequently
- // replaced during the matching phase (a forward process):
- for (var l = this.reverts.length; l--;) {
- this.reverts[l]()
- }
- this.reverts = []
- },
-
- prepareReplacementString: function(string, portion, match, matchIndex) {
- var portionMode = this.options.portionMode
- if (
- portionMode === PORTION_MODE_FIRST &&
- portion.indexInMatch > 0
- ) {
- return ''
- }
- string = string.replace(/\$(\d+|&|`|')/g, function($0, t) {
- var replacement
- switch(t) {
- case '&':
- replacement = match[0]
- break
- case '`':
- replacement = match.input.substring(0, match.startIndex)
- break
- case '\'':
- replacement = match.input.substring(match.endIndex)
- break
- default:
- replacement = match[+t]
- }
- return replacement
- })
- if (portionMode === PORTION_MODE_FIRST) {
- return string
- }
-
- if (portion.isEnd) {
- return string.substring(portion.indexInMatch)
- }
-
- return string.substring(portion.indexInMatch, portion.indexInMatch + portion.text.length)
- },
-
- getPortionReplacementNode: function(portion, match, matchIndex) {
-
- var replacement = this.options.replace || '$&'
- var wrapper = this.options.wrap
- if (wrapper && wrapper.nodeType) {
- // Wrapper has been provided as a stencil-node for us to clone:
- var clone = doc.createElement('div')
- clone.innerHTML = wrapper.outerHTML || new XMLSerializer().serializeToString(wrapper)
- wrapper = clone.firstChild
- }
-
- if (typeof replacement == 'function') {
- replacement = replacement(portion, match, matchIndex)
- if (replacement && replacement.nodeType) {
- return replacement
- }
- return doc.createTextNode(String(replacement))
- }
-
- var el = typeof wrapper == 'string' ? doc.createElement(wrapper) : wrapper
- replacement = doc.createTextNode(
- this.prepareReplacementString(
- replacement, portion, match, matchIndex
- )
- )
- if (!replacement.data) {
- return replacement
- }
-
- if (!el) {
- return replacement
- }
-
- el.appendChild(replacement)
- return el
- },
-
- replaceMatch: function(match, startPortion, innerPortions, endPortion) {
-
- var matchStartNode = startPortion.node
- var matchEndNode = endPortion.node
- var preceedingTextNode
- var followingTextNode
- if (matchStartNode === matchEndNode) {
-
- var node = matchStartNode
- if (startPortion.indexInNode > 0) {
- // Add `before` text node (before the match)
- preceedingTextNode = doc.createTextNode(node.data.substring(0, startPortion.indexInNode))
- node.parentNode.insertBefore(preceedingTextNode, node)
- }
-
- // Create the replacement node:
- var newNode = this.getPortionReplacementNode(
- endPortion,
- match
- )
- node.parentNode.insertBefore(newNode, node)
- if (endPortion.endIndexInNode < node.length) { // ?????
- // Add `after` text node (after the match)
- followingTextNode = doc.createTextNode(node.data.substring(endPortion.endIndexInNode))
- node.parentNode.insertBefore(followingTextNode, node)
- }
-
- node.parentNode.removeChild(node)
- this.reverts.push(function() {
- if (preceedingTextNode === newNode.previousSibling) {
- preceedingTextNode.parentNode.removeChild(preceedingTextNode)
- }
- if (followingTextNode === newNode.nextSibling) {
- followingTextNode.parentNode.removeChild(followingTextNode)
- }
- newNode.parentNode.replaceChild(node, newNode)
- })
- return newNode
- } else {
- // Replace matchStartNode -> [innerMatchNodes...] -> matchEndNode (in that order)
-
- preceedingTextNode = doc.createTextNode(
- matchStartNode.data.substring(0, startPortion.indexInNode)
- )
- followingTextNode = doc.createTextNode(
- matchEndNode.data.substring(endPortion.endIndexInNode)
- )
- var firstNode = this.getPortionReplacementNode(
- startPortion,
- match
- )
- var innerNodes = []
- for (var i = 0, l = innerPortions.length; i < l; ++i) {
- var portion = innerPortions[i]
- var innerNode = this.getPortionReplacementNode(
- portion,
- match
- )
- portion.node.parentNode.replaceChild(innerNode, portion.node)
- this.reverts.push((function(portion, innerNode) {
- return function() {
- innerNode.parentNode.replaceChild(portion.node, innerNode)
- }
- }(portion, innerNode)))
- innerNodes.push(innerNode)
- }
-
- var lastNode = this.getPortionReplacementNode(
- endPortion,
- match
- )
- matchStartNode.parentNode.insertBefore(preceedingTextNode, matchStartNode)
- matchStartNode.parentNode.insertBefore(firstNode, matchStartNode)
- matchStartNode.parentNode.removeChild(matchStartNode)
- matchEndNode.parentNode.insertBefore(lastNode, matchEndNode)
- matchEndNode.parentNode.insertBefore(followingTextNode, matchEndNode)
- matchEndNode.parentNode.removeChild(matchEndNode)
- this.reverts.push(function() {
- preceedingTextNode.parentNode.removeChild(preceedingTextNode)
- firstNode.parentNode.replaceChild(matchStartNode, firstNode)
- followingTextNode.parentNode.removeChild(followingTextNode)
- lastNode.parentNode.replaceChild(matchEndNode, lastNode)
- })
- return lastNode
- }
- }
-
- }
- return exposed
-}())
-
-);
-
-var isNodeNormalizeNormal = (function() {
- //// Disabled `Node.normalize()` for temp due to
- //// issue below in IE11.
- //// See: http://stackoverflow.com/questions/22337498/why-does-ie11-handle-node-normalize-incorrectly-for-the-minus-symbol
- var div = $.create( 'div' )
-
- div.appendChild($.create( '', '0-' ))
- div.appendChild($.create( '', '2' ))
- div.normalize()
-
- return div.firstChild.length !== 2
-})()
-
-function getFuncOrElmt( obj ) {
- return (
- typeof obj === 'function' ||
- obj instanceof Element
- )
- ? obj
- : undefined
-}
-
-function createBDGroup( portion ) {
- var clazz = portion.index === 0 && portion.isEnd
- ? 'biaodian cjk'
- : 'biaodian cjk portion ' + (
- portion.index === 0
- ? 'is-first'
- : portion.isEnd
- ? 'is-end'
- : 'is-inner'
- )
-
- var $elmt = $.create( 'h-char-group', clazz )
- $elmt.innerHTML = portion.text
- return $elmt
-}
-
-function createBDChar( char ) {
- var div = $.create( 'div' )
- var unicode = char.charCodeAt( 0 ).toString( 16 )
-
- div.innerHTML = (
- '' + char + ' '
- )
- return div.firstChild
-}
-
-function getBDType( char ) {
- return char.match( TYPESET.char.biaodian.open )
- ? 'bd-open'
- : char.match( TYPESET.char.biaodian.close )
- ? 'bd-close bd-end'
- : char.match( TYPESET.char.biaodian.end )
- ? (
- /(?:\u3001|\u3002|\uff0c)/i.test( char )
- ? 'bd-end bd-cop'
- : 'bd-end'
- )
- : char.match(new RegExp( UNICODE.biaodian.liga ))
- ? 'bd-liga'
- : char.match(new RegExp( UNICODE.biaodian.middle ))
- ? 'bd-middle'
- : ''
-}
-
-$.extend( Fibre.fn, {
- normalize: function() {
- if ( isNodeNormalizeNormal ) {
- this.context.normalize()
- }
- return this
- },
-
- // Force punctuation & biaodian typesetting rules to be applied.
- jinzify: function( selector ) {
- return (
- this
- .filter( selector || null )
- .avoid( 'h-jinze' )
- .replace(
- TYPESET.jinze.touwei,
- function( portion, match ) {
- var elem = $.create( 'h-jinze', 'touwei' )
- elem.innerHTML = match[0]
- return (( portion.index === 0 && portion.isEnd ) || portion.index === 1 ) ? elem : ''
- }
- )
- .replace(
- TYPESET.jinze.wei,
- function( portion, match ) {
- var elem = $.create( 'h-jinze', 'wei' )
- elem.innerHTML = match[0]
- return portion.index === 0 ? elem : ''
- }
- )
- .replace(
- TYPESET.jinze.tou,
- function( portion, match ) {
- var elem = $.create( 'h-jinze', 'tou' )
- elem.innerHTML = match[0]
- return (( portion.index === 0 && portion.isEnd ) || portion.index === 1 )
- ? elem : ''
- }
- )
- .replace(
- TYPESET.jinze.middle,
- function( portion, match ) {
- var elem = $.create( 'h-jinze', 'middle' )
- elem.innerHTML = match[0]
- return (( portion.index === 0 && portion.isEnd ) || portion.index === 1 )
- ? elem : ''
- }
- )
- .endAvoid()
- .endFilter()
- )
- },
-
- groupify: function( option ) {
- var option = $.extend({
- biaodian: false,
- //punct: false,
- hanzi: false, // Includes Kana
- kana: false,
- eonmun: false,
- western: false // Includes Latin, Greek and Cyrillic
- }, option || {})
-
- this.avoid( 'h-word, h-char-group' )
-
- if ( option.biaodian ) {
- this.replace(
- TYPESET.group.biaodian[0], createBDGroup
- ).replace(
- TYPESET.group.biaodian[1], createBDGroup
- )
- }
-
- if ( option.hanzi || option.cjk ) {
- this.wrap(
- TYPESET.group.hanzi, $.clone($.create( 'h-char-group', 'hanzi cjk' ))
- )
- }
- if ( option.western ) {
- this.wrap(
- TYPESET.group.western, $.clone($.create( 'h-word', 'western' ))
- )
- }
- if ( option.kana ) {
- this.wrap(
- TYPESET.group.kana, $.clone($.create( 'h-char-group', 'kana' ))
- )
- }
- if ( option.eonmun || option.hangul ) {
- this.wrap(
- TYPESET.group.eonmun, $.clone($.create( 'h-word', 'eonmun hangul' ))
- )
- }
-
- this.endAvoid()
- return this
- },
-
- charify: function( option ) {
- var option = $.extend({
- avoid: true,
- biaodian: false,
- punct: false,
- hanzi: false, // Includes Kana
- latin: false,
- ellinika: false,
- kirillica: false,
- kana: false,
- eonmun: false
- }, option || {})
-
- if ( option.avoid ) {
- this.avoid( 'h-char' )
- }
-
- if ( option.biaodian ) {
- this.replace(
- TYPESET.char.biaodian.all,
- getFuncOrElmt( option.biaodian )
- ||
- function( portion ) { return createBDChar( portion.text ) }
- ).replace(
- TYPESET.char.biaodian.liga,
- getFuncOrElmt( option.biaodian )
- ||
- function( portion ) { return createBDChar( portion.text ) }
- )
- }
- if ( option.hanzi || option.cjk ) {
- this.wrap(
- TYPESET.char.hanzi,
- getFuncOrElmt( option.hanzi || option.cjk )
- ||
- $.clone($.create( 'h-char', 'hanzi cjk' ))
- )
- }
- if ( option.punct ) {
- this.wrap(
- TYPESET.char.punct.all,
- getFuncOrElmt( option.punct )
- ||
- $.clone($.create( 'h-char', 'punct' ))
- )
- }
- if ( option.latin ) {
- this.wrap(
- TYPESET.char.latin,
- getFuncOrElmt( option.latin )
- ||
- $.clone($.create( 'h-char', 'alphabet latin' ))
- )
- }
- if ( option.ellinika || option.greek ) {
- this.wrap(
- TYPESET.char.ellinika,
- getFuncOrElmt( option.ellinika || option.greek )
- ||
- $.clone($.create( 'h-char', 'alphabet ellinika greek' ))
- )
- }
- if ( option.kirillica || option.cyrillic ) {
- this.wrap(
- TYPESET.char.kirillica,
- getFuncOrElmt( option.kirillica || option.cyrillic )
- ||
- $.clone($.create( 'h-char', 'alphabet kirillica cyrillic' ))
- )
- }
- if ( option.kana ) {
- this.wrap(
- TYPESET.char.kana,
- getFuncOrElmt( option.kana )
- ||
- $.clone($.create( 'h-char', 'kana' ))
- )
- }
- if ( option.eonmun || option.hangul ) {
- this.wrap(
- TYPESET.char.eonmun,
- getFuncOrElmt( option.eonmun || option.hangul )
- ||
- $.clone($.create( 'h-char', 'eonmun hangul' ))
- )
- }
-
- this.endAvoid()
- return this
- }
-})
-
-$.extend( Han, {
- isNodeNormalizeNormal: isNodeNormalizeNormal,
- find: Fibre,
- createBDGroup: createBDGroup,
- createBDChar: createBDChar
-})
-
-$.matches = Han.find.matches
-
-void [
- 'setMode',
- 'wrap', 'replace', 'revert',
- 'addBoundary', 'removeBoundary',
- 'avoid', 'endAvoid',
- 'filter', 'endFilter',
- 'jinzify', 'groupify', 'charify'
-].forEach(function( method ) {
- Han.fn[ method ] = function() {
- if ( !this.finder ) {
- // Share the same selector
- this.finder = Han.find( this.context )
- }
-
- this.finder[ method ]( arguments[ 0 ], arguments[ 1 ] )
- return this
- }
-})
-
-var Locale = {}
-
-function writeOnCanvas( text, font ) {
- var canvas = $.create( 'canvas' )
- var context
-
- canvas.width = '50'
- canvas.height = '20'
- canvas.style.display = 'none'
-
- body.appendChild( canvas )
-
- context = canvas.getContext( '2d' )
- context.textBaseline = 'top'
- context.font = '15px ' + font + ', sans-serif'
- context.fillStyle = 'black'
- context.strokeStyle = 'black'
- context.fillText( text, 0, 0 )
-
- return {
- node: canvas,
- context: context,
- remove: function() {
- $.remove( canvas, body )
- }
- }
-}
-
-function compareCanvases( treat, control ) {
- var ret
- var a = treat.context
- var b = control.context
-
- try {
- for ( var j = 1; j <= 20; j++ ) {
- for ( var i = 1; i <= 50; i++ ) {
- if (
- typeof ret === 'undefined' &&
- a.getImageData(i, j, 1, 1).data[3] !== b.getImageData(i, j, 1, 1).data[3]
- ) {
- ret = false
- break
- } else if ( typeof ret === 'boolean' ) {
- break
- }
-
- if ( i === 50 && j === 20 && typeof ret === 'undefined' ) {
- ret = true
- }
- }
- }
-
- // Remove and clean from memory
- treat.remove()
- control.remove()
- treat = null
- control = null
-
- return ret
- } catch (e) {}
- return false
-}
-
-function detectFont( treat, control, text ) {
- var treat = treat
- var control = control || 'sans-serif'
- var text = text || '辭Q'
- var ret
-
- control = writeOnCanvas( text, control )
- treat = writeOnCanvas( text, treat )
-
- return !compareCanvases( treat, control )
-}
-
-Locale.writeOnCanvas = writeOnCanvas
-Locale.compareCanvases = compareCanvases
-Locale.detectFont = detectFont
-
-Locale.support = (function() {
-
- var PREFIX = 'Webkit Moz ms'.split(' ')
-
- // Create an element for feature detecting
- // (in `testCSSProp`)
- var elem = $.create( 'h-test' )
-
- function testCSSProp( prop ) {
- var ucProp = prop.charAt(0).toUpperCase() + prop.slice(1)
- var allProp = ( prop + ' ' + PREFIX.join( ucProp + ' ' ) + ucProp ).split(' ')
- var ret
-
- allProp.forEach(function( prop ) {
- if ( typeof elem.style[ prop ] === 'string' ) {
- ret = true
- }
- })
- return ret || false
- }
-
- function injectElementWithStyle( rule, callback ) {
- var fakeBody = body || $.create( 'body' )
- var div = $.create( 'div' )
- var container = body ? div : fakeBody
- var callback = typeof callback === 'function' ? callback : function() {}
- var style, ret, docOverflow
-
- style = [ '' ].join('')
-
- container.innerHTML += style
- fakeBody.appendChild( div )
-
- if ( !body ) {
- fakeBody.style.background = ''
- fakeBody.style.overflow = 'hidden'
- docOverflow = root.style.overflow
-
- root.style.overflow = 'hidden'
- root.appendChild( fakeBody )
- }
-
- // Callback
- ret = callback( container, rule )
-
- // Remove the injected scope
- $.remove( container )
- if ( !body ) {
- root.style.overflow = docOverflow
- }
- return !!ret
- }
-
- function getStyle( elem, prop ) {
- var ret
-
- if ( window.getComputedStyle ) {
- ret = document.defaultView.getComputedStyle( elem, null ).getPropertyValue( prop )
- } else if ( elem.currentStyle ) {
- // for IE
- ret = elem.currentStyle[ prop ]
- }
- return ret
- }
-
- return {
- columnwidth: testCSSProp( 'columnWidth' ),
-
- fontface: (function() {
- var ret
-
- injectElementWithStyle(
- '@font-face { font-family: font; src: url("//"); }',
- function( node, rule ) {
- var style = $.qsa( 'style', node )[0]
- var sheet = style.sheet || style.styleSheet
- var cssText = sheet ?
- ( sheet.cssRules && sheet.cssRules[0] ?
- sheet.cssRules[0].cssText : sheet.cssText || ''
- ) : ''
-
- ret = /src/i.test( cssText ) &&
- cssText.indexOf( rule.split(' ')[0] ) === 0
- }
- )
-
- return ret
- })(),
-
- ruby: (function() {
- var ruby = $.create( 'ruby' )
- var rt = $.create( 'rt' )
- var rp = $.create( 'rp' )
- var ret
-
- ruby.appendChild( rp )
- ruby.appendChild( rt )
- root.appendChild( ruby )
-
- // Browsers that support ruby hide the `` via `display: none`
- ret = (
- getStyle( rp, 'display' ) === 'none' ||
- // but in IE, `` has `display: inline`, so the test needs other conditions:
- getStyle( ruby, 'display' ) === 'ruby' &&
- getStyle( rt, 'display' ) === 'ruby-text'
- ) ? true : false
-
- // Remove and clean from memory
- root.removeChild( ruby )
- ruby = null
- rt = null
- rp = null
-
- return ret
- })(),
-
- 'ruby-display': (function() {
- var div = $.create( 'div' )
-
- div.innerHTML = ' '
- return div.querySelector( 'h-test-a' ).style.display === 'ruby' && div.querySelector( 'h-test-b' ).style.display === 'ruby-text-container'
- })(),
-
- 'ruby-interchar': (function() {
- var IC = 'inter-character'
- var div = $.create( 'div' )
- var css
-
- div.innerHTML = ' '
- css = div.querySelector( 'h-test' ).style
- return css.rubyPosition === IC || css.WebkitRubyPosition === IC || css.MozRubyPosition === IC || css.msRubyPosition === IC
- })(),
-
- textemphasis: testCSSProp( 'textEmphasis' ),
-
- // Address feature support test for `unicode-range` via
- // detecting whether it's Arial (supported) or
- // Times New Roman (not supported).
- unicoderange: (function() {
- var ret
-
- injectElementWithStyle(
- '@font-face{font-family:test-for-unicode-range;src:local(Arial),local("Droid Sans")}@font-face{font-family:test-for-unicode-range;src:local("Times New Roman"),local(Times),local("Droid Serif");unicode-range:U+270C}',
- function() {
- ret = !Locale.detectFont(
- 'test-for-unicode-range', // treatment group
- 'Arial, "Droid Sans"', // control group
- 'Q' // ASCII characters only
- )
- }
- )
- return ret
- })(),
-
- writingmode: testCSSProp( 'writingMode' )
- }
-})()
-
-Locale.initCond = function( target ) {
- var target = target || root
- var ret = ''
- var clazz
-
- for ( var feature in Locale.support ) {
- clazz = ( Locale.support[ feature ] ? '' : 'no-' ) + feature
-
- target.classList.add( clazz )
- ret += clazz + ' '
- }
- return ret
-}
-
-var SUPPORT_IC = Locale.support[ 'ruby-interchar' ]
-
-// 1. Simple ruby polyfill;
-// 2. Inter-character polyfill for Zhuyin
-function renderSimpleRuby( $ruby ) {
- var frag = $.create( '!' )
- var clazz = $ruby.classList
- var $rb, $ru
-
- frag.appendChild( $.clone( $ruby ))
-
- $
- .tag( 'rt', frag.firstChild )
- .forEach(function( $rt ) {
- var $rb = $.create( '!' )
- var airb = []
- var irb
-
- // Consider the previous nodes the implied
- // ruby base
- do {
- irb = ( irb || $rt ).previousSibling
- if ( !irb || irb.nodeName.match( /((?:h\-)?r[ubt])/i )) break
-
- $rb.insertBefore( $.clone( irb ), $rb.firstChild )
- airb.push( irb )
- } while ( !irb.nodeName.match( /((?:h\-)?r[ubt])/i ))
-
- // Create a real `` to append.
- $ru = clazz.contains( 'zhuyin' ) ? createZhuyinRu( $rb, $rt ) : createNormalRu( $rb, $rt )
-
- // Replace the ruby text with the new ``,
- // and remove the original implied ruby base(s)
- try {
- $rt.parentNode.replaceChild( $ru, $rt )
- airb.map( $.remove )
- } catch ( e ) {}
- })
- return createCustomRuby( frag )
-}
-
-function renderInterCharRuby( $ruby ) {
- var frag = $.create( '!' )
- frag.appendChild( $.clone( $ruby ))
-
- $
- .tag( 'rt', frag.firstChild )
- .forEach(function( $rt ) {
- var $rb = $.create( '!' )
- var airb = []
- var irb, $zhuyin
-
- // Consider the previous nodes the implied
- // ruby base
- do {
- irb = ( irb || $rt ).previousSibling
- if ( !irb || irb.nodeName.match( /((?:h\-)?r[ubt])/i )) break
-
- $rb.insertBefore( $.clone( irb ), $rb.firstChild )
- airb.push( irb )
- } while ( !irb.nodeName.match( /((?:h\-)?r[ubt])/i ))
-
- $zhuyin = $.create( 'rt' )
- $zhuyin.innerHTML = getZhuyinHTML( $rt )
- $rt.parentNode.replaceChild( $zhuyin, $rt )
- })
- return frag.firstChild
-}
-
-// 3. Complex ruby polyfill
-// - Double-lined annotation;
-// - Right-angled annotation.
-function renderComplexRuby( $ruby ) {
- var frag = $.create( '!' )
- var clazz = $ruby.classList
- var $cloned, $rb, $ru, maxspan
-
- frag.appendChild( $.clone( $ruby ))
- $cloned = frag.firstChild
-
- $rb = $ru = $.tag( 'rb', $cloned )
- maxspan = $rb.length
-
- // First of all, deal with Zhuyin containers
- // individually
- //
- // Note that we only support one single Zhuyin
- // container in each complex ruby
- void function( $rtc ) {
- if ( !$rtc ) return
-
- $ru = $
- .tag( 'rt', $rtc )
- .map(function( $rt, i ) {
- if ( !$rb[ i ] ) return
- var ret = createZhuyinRu( $rb[ i ], $rt )
-
- try {
- $rb[ i ].parentNode.replaceChild( ret, $rb[ i ] )
- } catch ( e ) {}
- return ret
- })
-
- // Remove the container once it's useless
- $.remove( $rtc )
- $cloned.setAttribute( 'rightangle', 'true' )
- }( $cloned.querySelector( 'rtc.zhuyin' ))
-
- // Then, normal annotations other than Zhuyin
- $
- .qsa( 'rtc:not(.zhuyin)', $cloned )
- .forEach(function( $rtc, order ) {
- var ret
- ret = $
- .tag( 'rt', $rtc )
- .map(function( $rt, i ) {
- var rbspan = Number( $rt.getAttribute( 'rbspan' ) || 1 )
- var span = 0
- var aRb = []
- var $rb, ret
-
- if ( rbspan > maxspan ) rbspan = maxspan
-
- do {
- try {
- $rb = $ru.shift()
- aRb.push( $rb )
- } catch (e) {}
-
- if ( typeof $rb === 'undefined' ) break
- span += Number( $rb.getAttribute( 'span' ) || 1 )
- } while ( rbspan > span )
-
- if ( rbspan < span ) {
- if ( aRb.length > 1 ) {
- console.error( 'An impossible `rbspan` value detected.', ruby )
- return
- }
- aRb = $.tag( 'rb', aRb[0] )
- $ru = aRb.slice( rbspan ).concat( $ru )
- aRb = aRb.slice( 0, rbspan )
- span = rbspan
- }
-
- ret = createNormalRu( aRb, $rt, {
- 'class': clazz,
- span: span,
- order: order
- })
-
- try {
- aRb[0].parentNode.replaceChild( ret, aRb.shift() )
- aRb.map( $.remove )
- } catch (e) {}
- return ret
- })
- $ru = ret
- if ( order === 1 ) $cloned.setAttribute( 'doubleline', 'true' )
-
- // Remove the container once it's useless
- $.remove( $rtc )
- })
- return createCustomRuby( frag )
-}
-
-// Create a new fake `` element so the
-// style sheets will render it as a polyfill,
-// which also helps to avoid the UA style.
-function createCustomRuby( frag ) {
- var $ruby = frag.firstChild
- var hruby = $.create( 'h-ruby' )
-
- hruby.innerHTML = $ruby.innerHTML
- $.setAttr( hruby, $ruby.attributes )
- hruby.normalize()
- return hruby
-}
-
-function simplifyRubyClass( elem ) {
- if ( !elem instanceof Element ) return elem
- var clazz = elem.classList
-
- if ( clazz.contains( 'pinyin' )) clazz.add( 'romanization' )
- else if ( clazz.contains( 'romanization' )) clazz.add( 'annotation' )
- else if ( clazz.contains( 'mps' )) clazz.add( 'zhuyin' )
- else if ( clazz.contains( 'rightangle' )) clazz.add( 'complex' )
- return elem
-}
-
-/**
- * Create and return a new `` element
- * according to the given contents
- */
-function createNormalRu( $rb, $rt, attr ) {
- var $ru = $.create( 'h-ru' )
- var $rt = $.clone( $rt )
- var attr = attr || {}
- attr.annotation = 'true'
-
- if ( Array.isArray( $rb )) {
- $ru.innerHTML = $rb.map(function( rb ) {
- if ( typeof rb === 'undefined' ) return ''
- return rb.outerHTML
- }).join('') + $rt.outerHTML
- } else {
- $ru.appendChild( $.clone( $rb ))
- $ru.appendChild( $rt )
- }
-
- $.setAttr( $ru, attr )
- return $ru
-}
-
-/**
- * Create and return a new `` element
- * in Zhuyin form
- */
-function createZhuyinRu( $rb, $rt ) {
- var $rb = $.clone( $rb )
-
- // Create an element to return
- var $ru = $.create( 'h-ru' )
- $ru.setAttribute( 'zhuyin', true )
-
- // -
- // -
- // -
- // -
- // -
- // -
- // -
- $ru.appendChild( $rb )
- $ru.innerHTML += getZhuyinHTML( $rt )
- return $ru
-}
-
-/**
- * Create a Zhuyin-form HTML string
- */
-function getZhuyinHTML( rt ) {
- // #### Explanation ####
- // * `zhuyin`: the entire phonetic annotation
- // * `yin`: the plain pronunciation (w/out tone)
- // * `diao`: the tone
- // * `len`: the length of the plain pronunciation (`yin`)
- var zhuyin = typeof rt === 'string' ? rt : rt.textContent
- var yin, diao, len
-
- yin = zhuyin.replace( TYPESET.zhuyin.diao, '' )
- len = yin ? yin.length : 0
- diao = zhuyin
- .replace( yin, '' )
- .replace( /[\u02C5]/g, '\u02C7' )
- .replace( /[\u030D]/g, '\u0358' )
- return len === 0 ? '' : '' + yin + ' ' + diao + ' '
-}
-
-/**
- * Normalize `ruby` elements
- */
-$.extend( Locale, {
-
- // Address normalisation for both simple and complex
- // rubies (interlinear annotations)
- renderRuby: function( context, target ) {
- var target = target || 'ruby'
- var $target = $.qsa( target, context )
-
- $.qsa( 'rtc', context )
- .concat( $target ).map( simplifyRubyClass )
-
- $target
- .forEach(function( $ruby ) {
- var clazz = $ruby.classList
- var $new
-
- if ( clazz.contains( 'complex' )) $new = renderComplexRuby( $ruby )
- else if ( clazz.contains( 'zhuyin' )) $new = SUPPORT_IC ? renderInterCharRuby( $ruby ) : renderSimpleRuby( $ruby )
-
- // Finally, replace it
- if ( $new ) $ruby.parentNode.replaceChild( $new, $ruby )
- })
- },
-
- simplifyRubyClass: simplifyRubyClass,
- getZhuyinHTML: getZhuyinHTML,
- renderComplexRuby: renderComplexRuby,
- renderSimpleRuby: renderSimpleRuby,
- renderInterCharRuby: renderInterCharRuby
-
- // ### TODO list ###
- //
- // * Debug mode
- // * Better error-tolerance
-})
-
-/**
- * Normalisation rendering mechanism
- */
-$.extend( Locale, {
-
- // Render and normalise the given context by routine:
- //
- // ruby -> u, ins -> s, del -> em
- //
- renderElem: function( context ) {
- this.renderRuby( context )
- this.renderDecoLine( context )
- this.renderDecoLine( context, 's, del' )
- this.renderEm( context )
- },
-
- // Traverse all target elements and address
- // presentational corrections if any two of
- // them are adjacent to each other.
- renderDecoLine: function( context, target ) {
- var $$target = $.qsa( target || 'u, ins', context )
- var i = $$target.length
-
- traverse: while ( i-- ) {
- var $this = $$target[ i ]
- var $prev = null
-
- // Ignore all `` and comments in between,
- // and add class `.adjacent` once two targets
- // are next to each other.
- ignore: do {
- $prev = ( $prev || $this ).previousSibling
-
- if ( !$prev ) {
- continue traverse
- } else if ( $$target[ i-1 ] === $prev ) {
- $this.classList.add( 'adjacent' )
- }
- } while ( $.isIgnorable( $prev ))
- }
- },
-
- // Traverse all target elements to render
- // emphasis marks.
- renderEm: function( context, target ) {
- var method = target ? 'qsa' : 'tag'
- var target = target || 'em'
- var $target = $[ method ]( target, context )
-
- $target
- .forEach(function( elem ) {
- var $elem = Han( elem )
-
- if ( Locale.support.textemphasis ) {
- $elem
- .avoid( 'rt, h-char' )
- .charify({ biaodian: true, punct: true })
- } else {
- $elem
- .avoid( 'rt, h-char, h-char-group' )
- .jinzify()
- .groupify({ western: true })
- .charify({
- hanzi: true,
- biaodian: true,
- punct: true,
- latin: true,
- ellinika: true,
- kirillica: true
- })
- }
- })
- }
-})
-
-Han.normalize = Locale
-Han.localize = Locale
-Han.support = Locale.support
-Han.detectFont = Locale.detectFont
-
-Han.fn.initCond = function() {
- this.condition.classList.add( 'han-js-rendered' )
- Han.normalize.initCond( this.condition )
- return this
-}
-
-void [
- 'Elem',
- 'DecoLine',
- 'Em',
- 'Ruby'
-].forEach(function( elem ) {
- var method = 'render' + elem
-
- Han.fn[ method ] = function( target ) {
- Han.normalize[ method ]( this.context, target )
- return this
- }
-})
-
-$.extend( Han.support, {
- // Assume that all devices support Heiti for we
- // use `sans-serif` to do the comparison.
- heiti: true,
- // 'heiti-gb': true,
-
- songti: Han.detectFont( '"Han Songti"' ),
- 'songti-gb': Han.detectFont( '"Han Songti GB"' ),
-
- kaiti: Han.detectFont( '"Han Kaiti"' ),
- // 'kaiti-gb': Han.detectFont( '"Han Kaiti GB"' ),
-
- fangsong: Han.detectFont( '"Han Fangsong"' )
- // 'fangsong-gb': Han.detectFont( '"Han Fangsong GB"' )
-})
-
-Han.correctBiaodian = function( context ) {
- var context = context || document
- var finder = Han.find( context )
-
- finder
- .avoid( 'h-char' )
- .replace( /([‘“])/g, function( portion ) {
- var $char = Han.createBDChar( portion.text )
- $char.classList.add( 'bd-open', 'punct' )
- return $char
- })
- .replace( /([’”])/g, function( portion ) {
- var $char = Han.createBDChar( portion.text )
- $char.classList.add( 'bd-close', 'bd-end', 'punct' )
- return $char
- })
-
- return Han.support.unicoderange
- ? finder
- : finder.charify({ biaodian: true })
-}
-
-Han.correctBasicBD = Han.correctBiaodian
-Han.correctBD = Han.correctBiaodian
-
-$.extend( Han.fn, {
- biaodian: null,
-
- correctBiaodian: function() {
- this.biaodian = Han.correctBiaodian( this.context )
- return this
- },
-
- revertCorrectedBiaodian: function() {
- try {
- this.biaodian.revert( 'all' )
- } catch (e) {}
- return this
- }
-})
-
-// Legacy support (deprecated):
-Han.fn.correctBasicBD = Han.fn.correctBiaodian
-Han.fn.revertBasicBD = Han.fn.revertCorrectedBiaodian
-
-var hws = '<>'
-
-var $hws = $.create( 'h-hws' )
-$hws.setAttribute( 'hidden', '' )
-$hws.innerHTML = ' '
-
-function sharingSameParent( $a, $b ) {
- return $a && $b && $a.parentNode === $b.parentNode
-}
-
-function properlyPlaceHWSBehind( $node, text ) {
- var $elmt = $node
- var text = text || ''
-
- if (
- $.isElmt( $node.nextSibling ) ||
- sharingSameParent( $node, $node.nextSibling )
- ) {
- return text + hws
- } else {
- // One of the parental elements of the current text
- // node would definitely have a next sibling, since
- // it is of the first portion and not `isEnd`.
- while ( !$elmt.nextSibling ) {
- $elmt = $elmt.parentNode
- }
- if ( $node !== $elmt ) {
- $elmt.insertAdjacentHTML( 'afterEnd', ' ' )
- }
- }
- return text
-}
-
-function firstStepLabel( portion, mat ) {
- return portion.isEnd && portion.index === 0
- ? mat[1] + hws + mat[2]
- : portion.index === 0
- ? properlyPlaceHWSBehind( portion.node, portion.text )
- : portion.text
-}
-
-function real$hwsElmt( portion ) {
- return portion.index === 0
- ? $.clone( $hws )
- : ''
-}
-
-var last$hwsIdx
-
-function apostrophe( portion ) {
- var $elmt = portion.node.parentNode
-
- if ( portion.index === 0 ) {
- last$hwsIdx = portion.endIndexInNode-2
- }
-
- if (
- $elmt.nodeName.toLowerCase() === 'h-hws' && (
- portion.index === 1 || portion.indexInMatch === last$hwsIdx
- )) {
- $elmt.classList.add( 'quote-inner' )
- }
- return portion.text
-}
-
-function curveQuote( portion ) {
- var $elmt = portion.node.parentNode
-
- if ( $elmt.nodeName.toLowerCase() === 'h-hws' ) {
- $elmt.classList.add( 'quote-outer' )
- }
- return portion.text
-}
-
-$.extend( Han, {
- renderHWS: function( context, strict ) {
- // Elements to be filtered according to the
- // HWS rendering mode.
- var AVOID = strict
- ? 'textarea, code, kbd, samp, pre'
- : 'textarea'
-
- var mode = strict ? 'strict' : 'base'
- var context = context || document
- var finder = Han.find( context )
-
- finder
- .avoid( AVOID )
-
- // Basic situations:
- // - 字a => 字 a
- // - A字 => A 字
- .replace( Han.TYPESET.hws[ mode ][0], firstStepLabel )
- .replace( Han.TYPESET.hws[ mode ][1], firstStepLabel )
-
- // Convert text nodes ` ` into real element nodes:
- .replace( new RegExp( '(' + hws + ')+', 'g' ), real$hwsElmt )
-
- // Deal with:
- // - ' 字 ' => '字'
- // - " 字 " => "字"
- .replace( /([\'"])\s(.+?)\s\1/g, apostrophe )
-
- // Deal with:
- // - “字”
- // - ‘字’
- .replace( /\s[‘“]/g, curveQuote )
- .replace( /[’”]\s/g, curveQuote )
- .normalize()
-
- // Return the finder instance for future usage
- return finder
- }
-})
-
-$.extend( Han.fn, {
- renderHWS: function( strict ) {
- Han.renderHWS( this.context, strict )
- return this
- },
-
- revertHWS: function() {
- $.tag( 'h-hws', this.context )
- .forEach(function( hws ) {
- $.remove( hws )
- })
- this.HWS = []
- return this
- }
-})
-
-var HANGABLE_CLASS = 'bd-hangable'
-var HANGABLE_AVOID = 'h-char.bd-hangable'
-var HANGABLE_CS_HTML = ' '
-
-var matches = Han.find.matches
-
-function detectSpaceFont() {
- var div = $.create( 'div' )
- var ret
-
- div.innerHTML = 'a b a b '
- body.appendChild( div )
- ret = div.firstChild.offsetWidth !== div.lastChild.offsetWidth
- $.remove( div )
- return ret
-}
-
-function insertHangableCS( $jinze ) {
- var $cs = $jinze.nextSibling
-
- if ( $cs && matches( $cs, 'h-cs.jinze-outer' )) {
- $cs.classList.add( 'hangable-outer' )
- } else {
- $jinze.insertAdjacentHTML(
- 'afterend',
- HANGABLE_CS_HTML
- )
- }
-}
-
-Han.support['han-space'] = detectSpaceFont()
-
-$.extend( Han, {
- detectSpaceFont: detectSpaceFont,
- isSpaceFontLoaded: detectSpaceFont(),
-
- renderHanging: function( context ) {
- var context = context || document
- var finder = Han.find( context )
-
- finder
- .avoid( 'textarea, code, kbd, samp, pre' )
- .avoid( HANGABLE_AVOID )
- .replace(
- TYPESET.jinze.hanging,
- function( portion ) {
- if ( /^[\x20\t\r\n\f]+$/.test( portion.text )) {
- return ''
- }
-
- var $elmt = portion.node.parentNode
- var $jinze, $new, $bd, biaodian
-
- if ( $jinze = $.parent( $elmt, 'h-jinze' )) {
- insertHangableCS( $jinze )
- }
-
- biaodian = portion.text.trim()
-
- $new = Han.createBDChar( biaodian )
- $new.innerHTML = '' + biaodian + ' '
- $new.classList.add( HANGABLE_CLASS )
-
- $bd = $.parent( $elmt, 'h-char.biaodian' )
-
- return !$bd
- ? $new
- : (function() {
- $bd.classList.add( HANGABLE_CLASS )
-
- return matches( $elmt, 'h-inner, h-inner *' )
- ? biaodian
- : $new.firstChild
- })()
- }
- )
- return finder
- }
-})
-
-$.extend( Han.fn, {
- renderHanging: function() {
- var classList = this.condition.classList
- Han.isSpaceFontLoaded = detectSpaceFont()
-
- if (
- Han.isSpaceFontLoaded &&
- classList.contains( 'no-han-space' )
- ) {
- classList.remove( 'no-han-space' )
- classList.add( 'han-space' )
- }
-
- Han.renderHanging( this.context )
- return this
- },
-
- revertHanging: function() {
- $.qsa(
- 'h-char.bd-hangable, h-cs.hangable-outer',
- this.context
- ).forEach(function( $elmt ) {
- var classList = $elmt.classList
- classList.remove( 'bd-hangable' )
- classList.remove( 'hangable-outer' )
- })
- return this
- }
-})
-
-var JIYA_CLASS = 'bd-jiya'
-var JIYA_AVOID = 'h-char.bd-jiya'
-var CONSECUTIVE_CLASS = 'bd-consecutive'
-var JIYA_CS_HTML = ' '
-
-var matches = Han.find.matches
-
-function trimBDClass( clazz ) {
- return clazz.replace(
- /(biaodian|cjk|bd-jiya|bd-consecutive|bd-hangable)/gi, ''
- ).trim()
-}
-
-function charifyBiaodian( portion ) {
- var biaodian = portion.text
- var $elmt = portion.node.parentNode
- var $bd = $.parent( $elmt, 'h-char.biaodian' )
- var $new = Han.createBDChar( biaodian )
- var $jinze
-
- $new.innerHTML = '' + biaodian + ' '
- $new.classList.add( JIYA_CLASS )
-
- if ( $jinze = $.parent( $elmt, 'h-jinze' )) {
- insertJiyaCS( $jinze )
- }
-
- return !$bd
- ? $new
- : (function() {
- $bd.classList.add( JIYA_CLASS )
-
- return matches( $elmt, 'h-inner, h-inner *' )
- ? biaodian
- : $new.firstChild
- })()
-}
-
-var prevBDType, $$prevCS
-
-function locateConsecutiveBD( portion ) {
- var prev = prevBDType
- var $elmt = portion.node.parentNode
- var $bd = $.parent( $elmt, 'h-char.biaodian' )
- var $jinze = $.parent( $bd, 'h-jinze' )
- var classList
-
- classList = $bd.classList
-
- if ( prev ) {
- $bd.setAttribute( 'prev', prev )
- }
-
- if ( $$prevCS && classList.contains( 'bd-open' )) {
- $$prevCS.pop().setAttribute( 'next', 'bd-open' )
- }
-
- $$prevCS = undefined
-
- if ( portion.isEnd ) {
- prevBDType = undefined
- classList.add( CONSECUTIVE_CLASS, 'end-portion' )
- } else {
- prevBDType = trimBDClass($bd.getAttribute( 'class' ))
- classList.add( CONSECUTIVE_CLASS )
- }
-
- if ( $jinze ) {
- $$prevCS = locateCS( $jinze, {
- prev: prev,
- 'class': trimBDClass($bd.getAttribute( 'class' ))
- })
- }
- return portion.text
-}
-
-function insertJiyaCS( $jinze ) {
- if (
- matches( $jinze, '.tou, .touwei' ) &&
- !matches( $jinze.previousSibling, 'h-cs.jiya-outer' )
- ) {
- $jinze.insertAdjacentHTML( 'beforebegin', JIYA_CS_HTML )
- }
- if (
- matches( $jinze, '.wei, .touwei' ) &&
- !matches( $jinze.nextSibling, 'h-cs.jiya-outer' )
- ) {
- $jinze.insertAdjacentHTML( 'afterend', JIYA_CS_HTML )
- }
-}
-
-function locateCS( $jinze, attr ) {
- var $prev, $next
-
- if (matches( $jinze, '.tou, .touwei' )) {
- $prev = $jinze.previousSibling
-
- if (matches( $prev, 'h-cs' )) {
- $prev.className = 'jinze-outer jiya-outer'
- $prev.setAttribute( 'prev', attr.prev )
- }
- }
- if (matches( $jinze, '.wei, .touwei' )) {
- $next = $jinze.nextSibling
-
- if (matches( $next, 'h-cs' )) {
- $next.className = 'jinze-outer jiya-outer ' + attr[ 'class' ]
- $next.removeAttribute( 'prev' )
- }
- }
- return [ $prev, $next ]
-}
-
-Han.renderJiya = function( context ) {
- var context = context || document
- var finder = Han.find( context )
-
- finder
- .avoid( 'textarea, code, kbd, samp, pre, h-cs' )
-
- .avoid( JIYA_AVOID )
- .charify({
- avoid: false,
- biaodian: charifyBiaodian
- })
- // End avoiding `JIYA_AVOID`:
- .endAvoid()
-
- .avoid( 'textarea, code, kbd, samp, pre, h-cs' )
- .replace( TYPESET.group.biaodian[0], locateConsecutiveBD )
- .replace( TYPESET.group.biaodian[1], locateConsecutiveBD )
-
- return finder
-}
-
-$.extend( Han.fn, {
- renderJiya: function() {
- Han.renderJiya( this.context )
- return this
- },
-
- revertJiya: function() {
- $.qsa(
- 'h-char.bd-jiya, h-cs.jiya-outer',
- this.context
- ).forEach(function( $elmt ) {
- var classList = $elmt.classList
- classList.remove( 'bd-jiya' )
- classList.remove( 'jiya-outer' )
- })
- return this
- }
-})
-
-var QUERY_RU_W_ANNO = 'h-ru[annotation]'
-var SELECTOR_TO_IGNORE = 'textarea, code, kbd, samp, pre'
-
-function createCompareFactory( font, treat, control ) {
- return function() {
- var a = Han.localize.writeOnCanvas( treat, font )
- var b = Han.localize.writeOnCanvas( control, font )
- return Han.localize.compareCanvases( a, b )
- }
-}
-
-function isVowelCombLigaNormal() {
- return createCompareFactory( '"Romanization Sans"', '\u0061\u030D', '\uDB80\uDC61' )
-}
-
-function isVowelICombLigaNormal() {
- return createCompareFactory( '"Romanization Sans"', '\u0069\u030D', '\uDB80\uDC69' )
-}
-
-function isZhuyinCombLigaNormal() {
- return createCompareFactory( '"Zhuyin Kaiti"', '\u31B4\u0358', '\uDB8C\uDDB4' )
-}
-
-function createSubstFactory( regexToSubst ) {
- return function( context ) {
- var context = context || document
- var finder = Han.find( context ).avoid( SELECTOR_TO_IGNORE )
-
- regexToSubst
- .forEach(function( pattern ) {
- finder
- .replace(
- new RegExp( pattern[ 0 ], 'ig' ),
- function( portion, match ) {
- var ret = $.clone( charCombLiga )
-
- // Put the original content in an inner container
- // for better presentational effect of hidden text
- ret.innerHTML = '' + match[0] + ' '
- ret.setAttribute( 'display-as', pattern[ 1 ] )
- return portion.index === 0 ? ret : ''
- }
- )
- })
- return finder
- }
-}
-
-var charCombLiga = $.create( 'h-char', 'comb-liga' )
-
-$.extend( Han, {
- isVowelCombLigaNormal: isVowelCombLigaNormal(),
- isVowelICombLigaNormal: isVowelICombLigaNormal(),
- isZhuyinCombLigaNormal: isZhuyinCombLigaNormal(),
-
- isCombLigaNormal: isVowelICombLigaNormal()(), // ### Deprecated
-
- substVowelCombLiga: createSubstFactory( Han.TYPESET[ 'display-as' ][ 'comb-liga-vowel' ] ),
- substZhuyinCombLiga: createSubstFactory( Han.TYPESET[ 'display-as' ][ 'comb-liga-zhuyin' ] ),
- substCombLigaWithPUA: createSubstFactory( Han.TYPESET[ 'display-as' ][ 'comb-liga-pua' ] ),
-
- substInaccurateChar: function( context ) {
- var context = context || document
- var finder = Han.find( context )
-
- finder.avoid( SELECTOR_TO_IGNORE )
-
- Han.TYPESET[ 'inaccurate-char' ]
- .forEach(function( pattern ) {
- finder
- .replace(
- new RegExp( pattern[ 0 ], 'ig' ),
- pattern[ 1 ]
- )
- })
- }
-})
-
-$.extend( Han.fn, {
- 'comb-liga-vowel': null,
- 'comb-liga-vowel-i': null,
- 'comb-liga-zhuyin': null,
- 'inaccurate-char': null,
-
- substVowelCombLiga: function() {
- this['comb-liga-vowel'] = Han.substVowelCombLiga( this.context )
- return this
- },
-
- substVowelICombLiga: function() {
- this['comb-liga-vowel-i'] = Han.substVowelICombLiga( this.context )
- return this
- },
-
- substZhuyinCombLiga: function() {
- this['comb-liga-zhuyin'] = Han.substZhuyinCombLiga( this.context )
- return this
- },
-
- substCombLigaWithPUA: function() {
- if ( !Han.isVowelCombLigaNormal()) {
- this['comb-liga-vowel'] = Han.substVowelCombLiga( this.context )
- } else if ( !Han.isVowelICombLigaNormal()) {
- this['comb-liga-vowel-i'] = Han.substVowelICombLiga( this.context )
- }
-
- if ( !Han.isZhuyinCombLigaNormal()) {
- this['comb-liga-zhuyin'] = Han.substZhuyinCombLiga( this.context )
- }
- return this
- },
-
- revertVowelCombLiga: function() {
- try {
- this['comb-liga-vowel'].revert( 'all' )
- } catch (e) {}
- return this
- },
-
- revertVowelICombLiga: function() {
- try {
- this['comb-liga-vowel-i'].revert( 'all' )
- } catch (e) {}
- return this
- },
-
- revertZhuyinCombLiga: function() {
- try {
- this['comb-liga-zhuyin'].revert( 'all' )
- } catch (e) {}
- return this
- },
-
- revertCombLigaWithPUA: function() {
- try {
- this['comb-liga-vowel'].revert( 'all' )
- this['comb-liga-vowel-i'].revert( 'all' )
- this['comb-liga-zhuyin'].revert( 'all' )
- } catch (e) {}
- return this
- },
-
- substInaccurateChar: function() {
- this['inaccurate-char'] = Han.substInaccurateChar( this.context )
- return this
- },
-
- revertInaccurateChar: function() {
- try {
- this['inaccurate-char'].revert( 'all' )
- } catch (e) {}
- return this
- }
-})
-
-window.addEventListener( 'DOMContentLoaded', function() {
- var initContext
-
- // Use the shortcut under the default situation
- if ( root.classList.contains( 'han-init' )) {
- Han.init()
-
- // Consider ‘a configured context’ the special
- // case of the default situation. Will have to
- // replace the `Han.init` with the instance as
- // well (for future usage).
- } else if ( initContext = document.querySelector( '.han-init-context' )) {
- Han.init = Han( initContext ).render()
- }
-})
-
-// Expose to global namespace
-if ( typeof noGlobalNS === 'undefined' || noGlobalNS === false ) {
- window.Han = Han
-}
-
-return Han
-});
-
diff --git a/lib/Han/dist/han.min.css b/lib/Han/dist/han.min.css
deleted file mode 100644
index 29c753e..0000000
--- a/lib/Han/dist/han.min.css
+++ /dev/null
@@ -1,6 +0,0 @@
-@charset "UTF-8";
-
-/*! 漢字標準格式 v3.3.0 | MIT License | css.hanzi.co */
-/*! Han.css: the CSS typography framework optimised for Hanzi */
-
-progress,sub,sup{vertical-align:baseline}button,hr,input,select{overflow:visible}[type=checkbox],[type=radio],legend{box-sizing:border-box;padding:0}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}svg:not(:root){overflow:hidden}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}button,input,select,textarea{font:inherit;margin:0}optgroup{font-weight:700}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{cursor:pointer}[disabled]{cursor:default}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button:-moz-focusring,input:-moz-focusring{outline:ButtonText dotted 1px}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{color:inherit;display:table;max-width:100%;white-space:normal}textarea{overflow:auto}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}@font-face{font-family:"Han Heiti";src:local("Hiragino Sans GB"),local("Lantinghei TC Extralight"),local("Lantinghei SC Extralight"),local(FZLTXHB--B51-0),local(FZLTZHK--GBK1-0),local("Pingfang SC Light"),local("Pingfang TC Light"),local("Pingfang-SC-Light"),local("Pingfang-TC-Light"),local("Pingfang SC"),local("Pingfang TC"),local("Heiti SC Light"),local(STHeitiSC-Light),local("Heiti SC"),local("Heiti TC Light"),local(STHeitiTC-Light),local("Heiti TC"),local("Microsoft Yahei"),local("Microsoft Jhenghei"),local("Noto Sans CJK KR"),local("Noto Sans CJK JP"),local("Noto Sans CJK SC"),local("Noto Sans CJK TC"),local("Source Han Sans K"),local("Source Han Sans KR"),local("Source Han Sans JP"),local("Source Han Sans CN"),local("Source Han Sans HK"),local("Source Han Sans TW"),local("Source Han Sans TWHK"),local("Droid Sans Fallback")}@font-face{unicode-range:U+4E00-9FFF,U+3400-4DB5,U+20000-2A6D6,U+2A700-2B734,U+2B740-2B81D,U+FA0E-FA0F,U+FA11,U+FA13-FA14,U+FA1F,U+FA21,U+FA23,U+FA24,U+FA27-FA29,U+3040-309F,U+30A0-30FF,U+3099-309E,U+FF66-FF9F,U+3007,U+31C0-31E3,U+2F00-2FD5,U+2E80-2EF3;font-family:"Han Heiti";src:local(YuGothic),local("Hiragino Kaku Gothic ProN"),local("Hiragino Kaku Gothic Pro")}@font-face{font-family:"Han Heiti CNS";src:local("Pingfang TC Light"),local("Pingfang-TC-Light"),local("Pingfang TC"),local("Heiti TC Light"),local(STHeitiTC-Light),local("Heiti TC"),local("Lantinghei TC Extralight"),local(FZLTXHB--B51-0),local("Lantinghei TC"),local("Microsoft Jhenghei"),local("Microsoft Yahei"),local("Noto Sans CJK TC"),local("Source Han Sans TC"),local("Source Han Sans TW"),local("Source Han Sans TWHK"),local("Source Han Sans HK"),local("Droid Sans Fallback")}@font-face{font-family:"Han Heiti GB";src:local("Hiragino Sans GB"),local("Pingfang SC Light"),local("Pingfang-SC-Light"),local("Pingfang SC"),local("Lantinghei SC Extralight"),local(FZLTXHK--GBK1-0),local("Lantinghei SC"),local("Heiti SC Light"),local(STHeitiSC-Light),local("Heiti SC"),local("Microsoft Yahei"),local("Noto Sans CJK SC"),local("Source Han Sans SC"),local("Source Han Sans CN"),local("Droid Sans Fallback")}@font-face{font-family:"Han Heiti";font-weight:600;src:local("Hiragino Sans GB W6"),local(HiraginoSansGB-W6),local("Lantinghei TC Demibold"),local("Lantinghei SC Demibold"),local(FZLTZHB--B51-0),local(FZLTZHK--GBK1-0),local("Pingfang-SC-Semibold"),local("Pingfang-TC-Semibold"),local("Heiti SC Medium"),local("STHeitiSC-Medium"),local("Heiti SC"),local("Heiti TC Medium"),local("STHeitiTC-Medium"),local("Heiti TC"),local("Microsoft Yahei Bold"),local("Microsoft Jhenghei Bold"),local(MicrosoftYahei-Bold),local(MicrosoftJhengHeiBold),local("Microsoft Yahei"),local("Microsoft Jhenghei"),local("Noto Sans CJK KR Bold"),local("Noto Sans CJK JP Bold"),local("Noto Sans CJK SC Bold"),local("Noto Sans CJK TC Bold"),local(NotoSansCJKkr-Bold),local(NotoSansCJKjp-Bold),local(NotoSansCJKsc-Bold),local(NotoSansCJKtc-Bold),local("Source Han Sans K Bold"),local(SourceHanSansK-Bold),local("Source Han Sans K"),local("Source Han Sans KR Bold"),local("Source Han Sans JP Bold"),local("Source Han Sans CN Bold"),local("Source Han Sans HK Bold"),local("Source Han Sans TW Bold"),local("Source Han Sans TWHK Bold"),local("SourceHanSansKR-Bold"),local("SourceHanSansJP-Bold"),local("SourceHanSansCN-Bold"),local("SourceHanSansHK-Bold"),local("SourceHanSansTW-Bold"),local("SourceHanSansTWHK-Bold"),local("Source Han Sans KR"),local("Source Han Sans CN"),local("Source Han Sans HK"),local("Source Han Sans TW"),local("Source Han Sans TWHK")}@font-face{unicode-range:U+4E00-9FFF,U+3400-4DB5,U+20000-2A6D6,U+2A700-2B734,U+2B740-2B81D,U+FA0E-FA0F,U+FA11,U+FA13-FA14,U+FA1F,U+FA21,U+FA23,U+FA24,U+FA27-FA29,U+3040-309F,U+30A0-30FF,U+3099-309E,U+FF66-FF9F,U+3007,U+31C0-31E3,U+2F00-2FD5,U+2E80-2EF3;font-family:"Han Heiti";font-weight:600;src:local("YuGothic Bold"),local("Hiragino Kaku Gothic ProN W6"),local("Hiragino Kaku Gothic Pro W6"),local(YuGo-Bold),local(HiraKakuProN-W6),local(HiraKakuPro-W6)}@font-face{font-family:"Han Heiti CNS";font-weight:600;src:local("Pingfang TC Semibold"),local("Pingfang-TC-Semibold"),local("Heiti TC Medium"),local("STHeitiTC-Medium"),local("Heiti TC"),local("Lantinghei TC Demibold"),local(FZLTXHB--B51-0),local("Microsoft Jhenghei Bold"),local(MicrosoftJhengHeiBold),local("Microsoft Jhenghei"),local("Microsoft Yahei Bold"),local(MicrosoftYahei-Bold),local("Noto Sans CJK TC Bold"),local(NotoSansCJKtc-Bold),local("Noto Sans CJK TC"),local("Source Han Sans TC Bold"),local("SourceHanSansTC-Bold"),local("Source Han Sans TC"),local("Source Han Sans TW Bold"),local("SourceHanSans-TW"),local("Source Han Sans TW"),local("Source Han Sans TWHK Bold"),local("SourceHanSans-TWHK"),local("Source Han Sans TWHK"),local("Source Han Sans HK"),local("SourceHanSans-HK"),local("Source Han Sans HK")}@font-face{font-family:"Han Heiti GB";font-weight:600;src:local("Hiragino Sans GB W6"),local(HiraginoSansGB-W6),local("Pingfang SC Semibold"),local("Pingfang-SC-Semibold"),local("Lantinghei SC Demibold"),local(FZLTZHK--GBK1-0),local("Heiti SC Medium"),local("STHeitiSC-Medium"),local("Heiti SC"),local("Microsoft Yahei Bold"),local(MicrosoftYahei-Bold),local("Microsoft Yahei"),local("Noto Sans CJK SC Bold"),local(NotoSansCJKsc-Bold),local("Noto Sans CJK SC"),local("Source Han Sans SC Bold"),local("SourceHanSansSC-Bold"),local("Source Han Sans CN Bold"),local("SourceHanSansCN-Bold"),local("Source Han Sans SC"),local("Source Han Sans CN")}@font-face{font-family:"Han Songti";src:local("Songti SC Regular"),local(STSongti-SC-Regular),local("Songti SC"),local("Songti TC Regular"),local(STSongti-TC-Regular),local("Songti TC"),local(STSong),local("Lisong Pro"),local(SimSun),local(PMingLiU)}@font-face{unicode-range:U+4E00-9FFF,U+3400-4DB5,U+20000-2A6D6,U+2A700-2B734,U+2B740-2B81D,U+FA0E-FA0F,U+FA11,U+FA13-FA14,U+FA1F,U+FA21,U+FA23,U+FA24,U+FA27-FA29,U+3040-309F,U+30A0-30FF,U+3099-309E,U+FF66-FF9F,U+3007,U+31C0-31E3,U+2F00-2FD5,U+2E80-2EF3;font-family:"Han Songti";src:local(YuMincho),local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("MS Mincho")}@font-face{font-family:"Han Songti CNS";src:local("Songti TC Regular"),local(STSongti-TC-Regular),local("Songti TC"),local("Lisong Pro"),local("Songti SC Regular"),local(STSongti-SC-Regular),local("Songti SC"),local(STSong),local(PMingLiU),local(SimSun)}@font-face{font-family:"Han Songti GB";src:local("Songti SC Regular"),local(STSongti-SC-Regular),local("Songti SC"),local(STSong),local(SimSun),local(PMingLiU)}@font-face{font-family:"Han Songti";font-weight:600;src:local("STSongti SC Bold"),local("STSongti TC Bold"),local(STSongti-SC-Bold),local(STSongti-TC-Bold),local("STSongti SC"),local("STSongti TC")}@font-face{unicode-range:U+4E00-9FFF,U+3400-4DB5,U+20000-2A6D6,U+2A700-2B734,U+2B740-2B81D,U+FA0E-FA0F,U+FA11,U+FA13-FA14,U+FA1F,U+FA21,U+FA23,U+FA24,U+FA27-FA29,U+3040-309F,U+30A0-30FF,U+3099-309E,U+FF66-FF9F,U+3007,U+31C0-31E3,U+2F00-2FD5,U+2E80-2EF3;font-family:"Han Songti";font-weight:600;src:local("YuMincho Demibold"),local("Hiragino Mincho ProN W6"),local("Hiragino Mincho Pro W6"),local(YuMin-Demibold),local(HiraMinProN-W6),local(HiraMinPro-W6),local(YuMincho),local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro")}@font-face{font-family:"Han Songti CNS";font-weight:600;src:local("STSongti TC Bold"),local("STSongti SC Bold"),local(STSongti-TC-Bold),local(STSongti-SC-Bold),local("STSongti TC"),local("STSongti SC")}@font-face{font-family:"Han Songti GB";font-weight:600;src:local("STSongti SC Bold"),local(STSongti-SC-Bold),local("STSongti SC")}@font-face{font-family:cursive;src:local("Kaiti TC Regular"),local(STKaiTi-TC-Regular),local("Kaiti TC"),local("Kaiti SC"),local(STKaiti),local(BiauKai),local("標楷體"),local(DFKaiShu-SB-Estd-BF),local(Kaiti),local(DFKai-SB)}@font-face{unicode-range:U+4E00-9FFF,U+3400-4DB5,U+20000-2A6D6,U+2A700-2B734,U+2B740-2B81D,U+FA0E-FA0F,U+FA11,U+FA13-FA14,U+FA1F,U+FA21,U+FA23,U+FA24,U+FA27-FA29,U+3040-309F,U+30A0-30FF,U+3099-309E,U+FF66-FF9F,U+3007,U+31C0-31E3,U+2F00-2FD5,U+2E80-2EF3;font-family:"Han Kaiti";src:local("Kaiti TC Regular"),local(STKaiTi-TC-Regular),local("Kaiti TC"),local("Kaiti SC"),local(STKaiti),local(BiauKai),local("標楷體"),local(DFKaiShu-SB-Estd-BF),local(Kaiti),local(DFKai-SB)}@font-face{unicode-range:U+4E00-9FFF,U+3400-4DB5,U+20000-2A6D6,U+2A700-2B734,U+2B740-2B81D,U+FA0E-FA0F,U+FA11,U+FA13-FA14,U+FA1F,U+FA21,U+FA23,U+FA24,U+FA27-FA29,U+3040-309F,U+30A0-30FF,U+3099-309E,U+FF66-FF9F,U+3007,U+31C0-31E3,U+2F00-2FD5,U+2E80-2EF3;font-family:"Han Kaiti CNS";src:local(BiauKai),local("標楷體"),local(DFKaiShu-SB-Estd-BF),local("Kaiti TC Regular"),local(STKaiTi-TC-Regular),local("Kaiti TC")}@font-face{unicode-range:U+4E00-9FFF,U+3400-4DB5,U+20000-2A6D6,U+2A700-2B734,U+2B740-2B81D,U+FA0E-FA0F,U+FA11,U+FA13-FA14,U+FA1F,U+FA21,U+FA23,U+FA24,U+FA27-FA29,U+3040-309F,U+30A0-30FF,U+3099-309E,U+FF66-FF9F,U+3007,U+31C0-31E3,U+2F00-2FD5,U+2E80-2EF3;font-family:"Han Kaiti GB";src:local("Kaiti SC Regular"),local(STKaiTi-SC-Regular),local("Kaiti SC"),local(STKaiti),local(Kai),local(Kaiti),local(DFKai-SB)}@font-face{font-family:cursive;font-weight:600;src:local("Kaiti TC Bold"),local(STKaiTi-TC-Bold),local("Kaiti SC Bold"),local(STKaiti-SC-Bold),local("Kaiti TC"),local("Kaiti SC")}@font-face{font-family:"Han Kaiti";font-weight:600;src:local("Kaiti TC Bold"),local(STKaiTi-TC-Bold),local("Kaiti SC Bold"),local(STKaiti-SC-Bold),local("Kaiti TC"),local("Kaiti SC")}@font-face{font-family:"Han Kaiti CNS";font-weight:600;src:local("Kaiti TC Bold"),local(STKaiTi-TC-Bold),local("Kaiti TC")}@font-face{font-family:"Han Kaiti GB";font-weight:600;src:local("Kaiti SC Bold"),local(STKaiti-SC-Bold)}@font-face{unicode-range:U+4E00-9FFF,U+3400-4DB5,U+20000-2A6D6,U+2A700-2B734,U+2B740-2B81D,U+FA0E-FA0F,U+FA11,U+FA13-FA14,U+FA1F,U+FA21,U+FA23,U+FA24,U+FA27-FA29,U+3040-309F,U+30A0-30FF,U+3099-309E,U+FF66-FF9F,U+3007,U+31C0-31E3,U+2F00-2FD5,U+2E80-2EF3;font-family:"Han Fangsong";src:local(STFangsong),local(FangSong)}@font-face{unicode-range:U+4E00-9FFF,U+3400-4DB5,U+20000-2A6D6,U+2A700-2B734,U+2B740-2B81D,U+FA0E-FA0F,U+FA11,U+FA13-FA14,U+FA1F,U+FA21,U+FA23,U+FA24,U+FA27-FA29,U+3040-309F,U+30A0-30FF,U+3099-309E,U+FF66-FF9F,U+3007,U+31C0-31E3,U+2F00-2FD5,U+2E80-2EF3;font-family:"Han Fangsong CNS";src:local(STFangsong),local(FangSong)}@font-face{unicode-range:U+4E00-9FFF,U+3400-4DB5,U+20000-2A6D6,U+2A700-2B734,U+2B740-2B81D,U+FA0E-FA0F,U+FA11,U+FA13-FA14,U+FA1F,U+FA21,U+FA23,U+FA24,U+FA27-FA29,U+3040-309F,U+30A0-30FF,U+3099-309E,U+FF66-FF9F,U+3007,U+31C0-31E3,U+2F00-2FD5,U+2E80-2EF3;font-family:"Han Fangsong GB";src:local(STFangsong),local(FangSong)}@font-face{font-family:"Biaodian Sans";src:local("Hiragino Sans GB"),local("Heiti SC"),local(STHeiti),local("MS Gothic"),local(SimSun);unicode-range:U+FF0E}@font-face{font-family:"Biaodian Serif";src:local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("Songti SC"),local(STSong),local(SimSun);unicode-range:U+FF0E}@font-face{font-family:"Biaodian Pro Sans";src:local("Hiragino Sans GB"),local("Heiti SC"),local(STHeiti),local("MS Gothic"),local(SimSun);unicode-range:U+FF0E}@font-face{font-family:"Biaodian Pro Serif";src:local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("Songti SC"),local(STSong),local(SimSun);unicode-range:U+FF0E}@font-face{font-family:"Biaodian Pro Sans CNS";src:local("Hiragino Sans GB"),local("Heiti SC"),local(STHeiti),local("MS Gothic"),local(SimSun);unicode-range:U+FF0E}@font-face{font-family:"Biaodian Pro Serif CNS";src:local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("Songti SC"),local(STSong),local(SimSun);unicode-range:U+FF0E}@font-face{font-family:"Biaodian Pro Sans GB";src:local("Hiragino Sans GB"),local("Heiti SC"),local(STHeiti),local("MS Gothic"),local(SimSun);unicode-range:U+FF0E}@font-face{font-family:"Biaodian Pro Serif GB";src:local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("Songti SC"),local(STSong),local(SimSun);unicode-range:U+FF0E}@font-face{font-family:"Biaodian Sans";src:local("Hiragino Sans GB"),local("Heiti SC"),local(STHeiti),local(SimSun);unicode-range:U+00B7}@font-face{font-family:"Biaodian Serif";src:local("Songti SC"),local(STSong),local("Heiti SC"),local(SimSun);unicode-range:U+00B7}@font-face{font-family:"Biaodian Pro Sans";src:local("Hiragino Sans GB"),local("Heiti SC"),local(STHeiti),local(SimSun);unicode-range:U+00B7}@font-face{font-family:"Biaodian Pro Serif";src:local("Songti SC"),local(STSong),local("Heiti SC"),local(SimSun);unicode-range:U+00B7}@font-face{font-family:"Biaodian Pro Sans CNS";src:local("Hiragino Sans GB"),local("Heiti SC"),local(STHeiti),local(SimSun);unicode-range:U+00B7}@font-face{font-family:"Biaodian Pro Serif CNS";src:local("Songti SC"),local(STSong),local("Heiti SC"),local(SimSun);unicode-range:U+00B7}@font-face{font-family:"Biaodian Pro Sans GB";src:local("Hiragino Sans GB"),local("Heiti SC"),local(STHeiti),local(SimSun);unicode-range:U+00B7}@font-face{font-family:"Biaodian Pro Serif GB";src:local("Songti SC"),local(STSong),local("Heiti SC"),local(SimSun);unicode-range:U+00B7}@font-face{font-family:"Biaodian Sans";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype"),local("Hiragino Sans GB"),local("Hiragino Kaku Gothic ProN"),local("Hiragino Kaku Gothic Pro"),local("Microsoft Yahei"),local(SimSun);unicode-range:U+2014}@font-face{font-family:"Biaodian Serif";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype"),local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("Songti SC"),local(STSong),local("Microsoft Yahei"),local(SimSun);unicode-range:U+2014}@font-face{font-family:"Yakumono Sans";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype"),local("Hiragino Kaku Gothic ProN"),local("Hiragino Kaku Gothic Pro"),local("Arial Unicode MS"),local("MS Gothic");unicode-range:U+2014}@font-face{font-family:"Yakumono Serif";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype"),local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("MS Mincho"),local("Microsoft Yahei");unicode-range:U+2014}@font-face{font-family:"Biaodian Pro Sans";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype"),local("Hiragino Sans GB"),local("Hiragino Kaku Gothic ProN"),local("Hiragino Kaku Gothic Pro"),local("Microsoft Yahei"),local(SimSun);unicode-range:U+2014}@font-face{font-family:"Biaodian Pro Serif";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype"),local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("Songti SC"),local(STSong),local("Microsoft Yahei"),local(SimSun);unicode-range:U+2014}@font-face{font-family:"Biaodian Pro Sans CNS";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype"),local("Hiragino Sans GB"),local("Hiragino Kaku Gothic ProN"),local("Hiragino Kaku Gothic Pro"),local("Microsoft Yahei"),local(SimSun);unicode-range:U+2014}@font-face{font-family:"Biaodian Pro Serif CNS";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype"),local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("Songti SC"),local(STSong),local("Microsoft Yahei"),local(SimSun);unicode-range:U+2014}@font-face{font-family:"Biaodian Pro Sans GB";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype"),local("Hiragino Sans GB"),local("Hiragino Kaku Gothic ProN"),local("Hiragino Kaku Gothic Pro"),local("Microsoft Yahei"),local(SimSun);unicode-range:U+2014}@font-face{font-family:"Biaodian Pro Serif GB";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype"),local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("Songti SC"),local(STSong),local("Microsoft Yahei"),local(SimSun);unicode-range:U+2014}@font-face{font-family:"Biaodian Sans";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype"),local("Hiragino Sans GB"),local("Hiragino Kaku Gothic ProN"),local("Hiragino Kaku Gothic Pro"),local(Meiryo),local("MS Gothic"),local(SimSun),local(PMingLiU);unicode-range:U+2026}@font-face{font-family:"Biaodian Serif";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype"),local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("Songti SC"),local("MS Mincho"),local(SimSun),local(PMingLiU);unicode-range:U+2026}@font-face{font-family:"Yakumono Sans";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype"),local("Hiragino Kaku Gothic ProN"),local("Hiragino Kaku Gothic Pro"),local(Meiryo),local("MS Gothic");unicode-range:U+2026}@font-face{font-family:"Yakumono Serif";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype"),local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("MS Mincho");unicode-range:U+2026}@font-face{font-family:"Biaodian Pro Sans";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype"),local("Hiragino Sans GB"),local("Hiragino Kaku Gothic ProN"),local("Hiragino Kaku Gothic Pro"),local(SimSun),local(PMingLiU);unicode-range:U+2026}@font-face{font-family:"Biaodian Pro Serif";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype"),local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("Songti SC"),local(SimSun),local(PMingLiU);unicode-range:U+2026}@font-face{font-family:"Biaodian Pro Sans CNS";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype"),local("Hiragino Sans GB"),local("Hiragino Kaku Gothic ProN"),local("Hiragino Kaku Gothic Pro"),local(SimSun),local(PMingLiU);unicode-range:U+2026}@font-face{font-family:"Biaodian Pro Serif CNS";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype"),local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("Songti SC"),local(STSongti),local(SimSun),local(PMingLiU);unicode-range:U+2026}@font-face{font-family:"Biaodian Pro Sans GB";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype"),local("Hiragino Sans GB"),local("Hiragino Kaku Gothic ProN"),local("Hiragino Kaku Gothic Pro"),local(SimSun),local(PMingLiU);unicode-range:U+2026}@font-face{font-family:"Biaodian Pro Serif GB";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype"),local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("Songti SC"),local(STSongti),local(SimSun),local(PMingLiU);unicode-range:U+2026}@font-face{font-family:"Biaodian Pro Sans GB";src:local("Hiragino Sans GB"),local("Heiti SC"),local(STHeiti),local(SimSun),local(PMingLiU);unicode-range:U+201C-201D,U+2018-2019}@font-face{font-family:"Biaodian Pro Sans GB";font-weight:700;src:local("Hiragino Sans GB"),local("Heiti SC"),local(STHeiti),local(SimSun),local(PMingLiU);unicode-range:U+201C-201D,U+2018-2019}@font-face{font-family:"Biaodian Pro Serif GB";src:local("Lisong Pro"),local("Heiti SC"),local(STHeiti),local(SimSun),local(PMingLiU);unicode-range:U+201C-201D,U+2018-2019}@font-face{font-family:"Biaodian Pro Serif GB";font-weight:700;src:local("Lisong Pro"),local("Heiti SC"),local(STHeiti),local(SimSun),local(PMingLiU);unicode-range:U+201C-201D,U+2018-2019}@font-face{font-family:"Biaodian Sans";src:local(Georgia),local("Times New Roman"),local(Arial),local("Droid Sans Fallback");unicode-range:U+25CF}@font-face{font-family:"Biaodian Serif";src:local(Georgia),local("Times New Roman"),local(Arial),local("Droid Sans Fallback");unicode-range:U+25CF}@font-face{font-family:"Biaodian Pro Sans";src:local(Georgia),local("Times New Roman"),local(Arial),local("Droid Sans Fallback");unicode-range:U+25CF}@font-face{font-family:"Biaodian Pro Serif";src:local(Georgia),local("Times New Roman"),local(Arial),local("Droid Sans Fallback");unicode-range:U+25CF}@font-face{font-family:"Biaodian Pro Sans CNS";src:local(Georgia),local("Times New Roman"),local(Arial),local("Droid Sans Fallback");unicode-range:U+25CF}@font-face{font-family:"Biaodian Pro Serif CNS";src:local(Georgia),local("Times New Roman"),local(Arial),local("Droid Sans Fallback");unicode-range:U+25CF}@font-face{font-family:"Biaodian Pro Sans GB";src:local(Georgia),local("Times New Roman"),local(Arial),local("Droid Sans Fallback");unicode-range:U+25CF}@font-face{font-family:"Biaodian Pro Serif GB";src:local(Georgia),local("Times New Roman"),local(Arial),local("Droid Sans Fallback");unicode-range:U+25CF}@font-face{font-family:"Biaodian Pro Sans";src:local("Hiragino Kaku Gothic ProN"),local("Hiragino Kaku Gothic Pro"),local("MS Gothic");unicode-range:U+3002,U+FF0C,U+3001,U+FF1B,U+FF1A,U+FF1F,U+FF01,U+FF0D,U+FF0F,U+FF3C}@font-face{font-family:"Biaodian Pro Serif";src:local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("MS Mincho");unicode-range:U+3002,U+FF0C,U+3001,U+FF1B,U+FF1A,U+FF1F,U+FF01,U+FF0D,U+FF0F,U+FF3C}@font-face{font-family:"Biaodian Pro Sans CNS";src:local("Heiti TC"),local("Lihei Pro"),local("Microsoft Jhenghei"),local(PMingLiU);unicode-range:U+3002,U+FF0C,U+3001}@font-face{font-family:"Biaodian Pro Sans CNS";src:local("Hiragino Kaku Gothic ProN"),local("Hiragino Kaku Gothic Pro"),local("Heiti TC"),local("Lihei Pro"),local("Microsoft Jhenghei"),local(PMingLiU),local("MS Gothic");unicode-range:U+FF1B,U+FF1A,U+FF1F,U+FF01}@font-face{font-family:"Biaodian Pro Sans CNS";src:local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("MS Mincho");unicode-range:U+FF0D,U+FF0F,U+FF3C}@font-face{font-family:"Biaodian Pro Serif CNS";src:local(STSongti-TC-Regular),local("Lisong Pro"),local("Heiti TC"),local(PMingLiU);unicode-range:U+3002,U+FF0C,U+3001}@font-face{font-family:"Biaodian Pro Serif CNS";src:local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local(PMingLiU),local("MS Mincho");unicode-range:U+FF1B,U+FF1A,U+FF1F,U+FF01,U+FF0D,U+FF0F,U+FF3C}@font-face{font-family:"Biaodian Pro Sans GB";src:local("Hiragino Sans GB"),local("Heiti SC"),local(STHeiti),local("Hiragino Kaku Gothic ProN"),local("Hiragino Kaku Gothic Pro"),local(SimSun),local("MS Gothic");unicode-range:U+3002,U+FF0C,U+3001,U+FF1B,U+FF1A,U+FF1F,U+FF01,U+FF0D,U+FF0F,U+FF3C}@font-face{font-family:"Biaodian Pro Serif GB";src:local("Songti SC"),local(STSongti),local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("Hiragino Sans GB"),local("Heiti SC"),local(STHeiti),local(SimSun),local("MS Mincho");unicode-range:U+3002,U+FF0C,U+3001,U+FF1B,U+FF1A,U+FF1F,U+FF01}@font-face{font-family:"Biaodian Pro Serif GB";src:local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local(PMingLiU),local("MS Mincho");unicode-range:U+FF0D,U+FF0F,U+FF3C}@font-face{font-family:"Biaodian Pro Sans";src:local("Hiragino Kaku Gothic ProN"),local("Hiragino Kaku Gothic Pro"),local("Yu Gothic"),local(YuGothic),local(SimSun),local(PMingLiU);unicode-range:U+300C-300F,U+300A-300B,U+3008-3009,U+FF08-FF09,U+3014-3015}@font-face{font-family:"Biaodian Pro Serif";src:local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("Yu Mincho"),local(YuMincho),local(SimSun),local(PMingLiU);unicode-range:U+300C-300F,U+300A-300B,U+3008-3009,U+FF08-FF09,U+3014-3015}@font-face{font-family:"Biaodian Pro Sans CNS";src:local("Hiragino Kaku Gothic ProN"),local("Hiragino Kaku Gothic Pro"),local("Yu Gothic"),local(YuGothic),local(SimSun),local(PMingLiU);unicode-range:U+300C-300F,U+300A-300B,U+3008-3009,U+FF08-FF09,U+3014-3015}@font-face{font-family:"Biaodian Pro Serif CNS";src:local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("Yu Mincho"),local(YuMincho),local(SimSun),local(PMingLiU);unicode-range:U+300C-300F,U+300A-300B,U+3008-3009,U+FF08-FF09,U+3014-3015}@font-face{font-family:"Biaodian Pro Sans GB";src:local("Hiragino Kaku Gothic ProN"),local("Hiragino Kaku Gothic Pro"),local("Yu Gothic"),local(YuGothic),local(SimSun),local(PMingLiU);unicode-range:U+300C-300F,U+300A-300B,U+3008-3009,U+FF08-FF09,U+3014-3015}@font-face{font-family:"Biaodian Pro Serif GB";src:local("Hiragino Mincho ProN"),local("Hiragino Mincho Pro"),local("Yu Mincho"),local(YuMincho),local(SimSun),local(PMingLiU);unicode-range:U+300C-300F,U+300A-300B,U+3008-3009,U+FF08-FF09,U+3014-3015}@font-face{font-family:"Biaodian Basic";src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype");unicode-range:U+2014,U+2026,U+00B7}@font-face{font-family:"Biaodian Basic";font-weight:700;src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype");unicode-range:U+2014,U+2026,U+00B7}@font-face{font-family:"Biaodian Sans";font-weight:700;src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype");unicode-range:U+2014,U+2026,U+00B7}@font-face{font-family:"Biaodian Pro Sans";font-weight:700;src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype");unicode-range:U+2014,U+2026,U+00B7}@font-face{font-family:"Biaodian Pro Sans";font-weight:700;src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype");unicode-range:U+2014,U+2026,U+00B7}@font-face{font-family:"Biaodian Pro Sans CNS";font-weight:700;src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype");unicode-range:U+2014,U+2026,U+00B7}@font-face{font-family:"Biaodian Pro Sans GB";font-weight:700;src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype");unicode-range:U+2014,U+2026,U+00B7}@font-face{font-family:"Biaodian Pro Serif";font-weight:700;src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype");unicode-range:U+2014,U+2026,U+00B7}@font-face{font-family:"Biaodian Pro Serif CNS";font-weight:700;src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype");unicode-range:U+2014,U+2026,U+00B7}@font-face{font-family:"Biaodian Pro Serif GB";font-weight:700;src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype");unicode-range:U+2014,U+2026,U+00B7}@font-face{font-family:"Latin Italic Serif";src:local("Georgia Italic"),local("Times New Roman Italic"),local(Georgia-Italic),local(TimesNewRomanPS-ItalicMT),local(Times-Italic)}@font-face{font-family:"Latin Italic Serif";font-weight:700;src:local("Georgia Bold Italic"),local("Times New Roman Bold Italic"),local(Georgia-BoldItalic),local(TimesNewRomanPS-BoldItalicMT),local(Times-Italic)}@font-face{font-family:"Latin Italic Sans";src:local("Helvetica Neue Italic"),local("Helvetica Oblique"),local("Arial Italic"),local(HelveticaNeue-Italic),local(Helvetica-LightOblique),local(Arial-ItalicMT)}@font-face{font-family:"Latin Italic Sans";font-weight:700;src:local("Helvetica Neue Bold Italic"),local("Helvetica Bold Oblique"),local("Arial Bold Italic"),local(HelveticaNeue-BoldItalic),local(Helvetica-BoldOblique),local(Arial-BoldItalicMT)}@font-face{unicode-range:U+0030-0039;font-family:"Numeral TF Sans";src:local(Skia),local("Neutraface 2 Text"),local(Candara),local(Corbel)}@font-face{unicode-range:U+0030-0039;font-family:"Numeral TF Serif";src:local(Georgia),local("Hoefler Text"),local("Big Caslon")}@font-face{unicode-range:U+0030-0039;font-family:"Numeral TF Italic Serif";src:local("Georgia Italic"),local("Hoefler Text Italic"),local(Georgia-Italic),local(HoeflerText-Italic)}@font-face{unicode-range:U+0030-0039;font-family:"Numeral LF Sans";src:local("Helvetica Neue"),local(Helvetica),local(Arial)}@font-face{unicode-range:U+0030-0039;font-family:"Numeral LF Italic Sans";src:local("Helvetica Neue Italic"),local("Helvetica Oblique"),local("Arial Italic"),local(HelveticaNeue-Italic),local(Helvetica-LightOblique),local(Arial-ItalicMT)}@font-face{unicode-range:U+0030-0039;font-family:"Numeral LF Italic Sans";font-weight:700;src:local("Helvetica Neue Bold Italic"),local("Helvetica Bold Oblique"),local("Arial Bold Italic"),local(HelveticaNeue-BoldItalic),local(Helvetica-BoldOblique),local(Arial-BoldItalicMT)}@font-face{unicode-range:U+0030-0039;font-family:"Numeral LF Serif";src:local(Palatino),local("Palatino Linotype"),local("Times New Roman")}@font-face{unicode-range:U+0030-0039;font-family:"Numeral LF Italic Serif";src:local("Palatino Italic"),local("Palatino Italic Linotype"),local("Times New Roman Italic"),local(Palatino-Italic),local(Palatino-Italic-Linotype),local(TimesNewRomanPS-ItalicMT)}@font-face{unicode-range:U+0030-0039;font-family:"Numeral LF Italic Serif";font-weight:700;src:local("Palatino Bold Italic"),local("Palatino Bold Italic Linotype"),local("Times New Roman Bold Italic"),local(Palatino-BoldItalic),local(Palatino-BoldItalic-Linotype),local(TimesNewRomanPS-BoldItalicMT)}@font-face{src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype");unicode-range:U+3105-312D,U+31A0-31BA,U+02D9,U+02CA,U+02C5,U+02C7,U+02CB,U+02EA-02EB,U+0307,U+030D,U+0358,U+F31B4-F31B7,U+F0061,U+F0065,U+F0069,U+F006F,U+F0075;font-family:"Zhuyin Kaiti"}@font-face{unicode-range:U+3105-312D,U+31A0-31BA,U+02D9,U+02CA,U+02C5,U+02C7,U+02CB,U+02EA-02EB,U+0307,U+030D,U+0358,U+F31B4-F31B7,U+F0061,U+F0065,U+F0069,U+F006F,U+F0075;font-family:"Zhuyin Heiti";src:local("Hiragino Sans GB"),local("Heiti TC"),local("Microsoft Jhenghei"),url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype")}@font-face{font-family:"Zhuyin Heiti";src:local("Heiti TC"),local("Microsoft Jhenghei"),url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype");unicode-range:U+3127}@font-face{src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype");font-family:"Zhuyin Heiti";unicode-range:U+02D9,U+02CA,U+02C5,U+02C7,U+02CB,U+02EA-02EB,U+31B4,U+31B5,U+31B6,U+31B7,U+0307,U+030D,U+0358,U+F31B4-F31B7,U+F0061,U+F0065,U+F0069,U+F006F,U+F0075}@font-face{src:url(./font/han.woff2?v3.3.0) format("woff2"),url(./font/han.woff?v3.3.0) format("woff"),url(./font/han.otf?v3.3.0) format("opentype");font-family:"Romanization Sans";unicode-range:U+0307,U+030D,U+0358,U+F31B4-F31B7,U+F0061,U+F0065,U+F0069,U+F006F,U+F0075}article strong :lang(ja-Latn),article strong :lang(zh-Latn),article strong :not(:lang(zh)):not(:lang(ja)),article strong:lang(ja-Latn),article strong:lang(zh-Latn),article strong:not(:lang(zh)):not(:lang(ja)),html :lang(ja-Latn),html :lang(zh-Latn),html :not(:lang(zh)):not(:lang(ja)),html:lang(ja-Latn),html:lang(zh-Latn),html:not(:lang(zh)):not(:lang(ja)){font-family:"Helvetica Neue",Helvetica,Arial,"Han Heiti",sans-serif}[lang*=Hant],[lang=zh-TW],[lang=zh-HK],[lang^=zh],article strong:lang(zh),article strong:lang(zh-Hant),html:lang(zh),html:lang(zh-Hant){font-family:"Biaodian Pro Sans CNS","Helvetica Neue",Helvetica,Arial,"Zhuyin Heiti","Han Heiti",sans-serif}.no-unicoderange [lang*=Hant],.no-unicoderange [lang=zh-TW],.no-unicoderange [lang=zh-HK],.no-unicoderange [lang^=zh],.no-unicoderange article strong:lang(zh),.no-unicoderange article strong:lang(zh-Hant),html:lang(zh).no-unicoderange,html:lang(zh-Hant).no-unicoderange{font-family:"Helvetica Neue",Helvetica,Arial,"Han Heiti",sans-serif}[lang*=Hans],[lang=zh-CN],article strong:lang(zh-CN),article strong:lang(zh-Hans),html:lang(zh-CN),html:lang(zh-Hans){font-family:"Biaodian Pro Sans GB","Helvetica Neue",Helvetica,Arial,"Han Heiti GB",sans-serif}.no-unicoderange [lang*=Hans],.no-unicoderange [lang=zh-CN],.no-unicoderange article strong:lang(zh-CN),.no-unicoderange article strong:lang(zh-Hans),html:lang(zh-CN).no-unicoderange,html:lang(zh-Hans).no-unicoderange{font-family:"Helvetica Neue",Helvetica,Arial,"Han Heiti GB",sans-serif}[lang^=ja],article strong:lang(ja),html:lang(ja){font-family:"Yakumono Sans","Helvetica Neue",Helvetica,Arial,sans-serif}.no-unicoderange [lang^=ja],.no-unicoderange article strong:lang(ja),html:lang(ja).no-unicoderange{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}article blockquote i :lang(ja-Latn),article blockquote i :lang(zh-Latn),article blockquote i :not(:lang(zh)):not(:lang(ja)),article blockquote i:lang(ja-Latn),article blockquote i:lang(zh-Latn),article blockquote i:not(:lang(zh)):not(:lang(ja)),article blockquote var :lang(ja-Latn),article blockquote var :lang(zh-Latn),article blockquote var :not(:lang(zh)):not(:lang(ja)),article blockquote var:lang(ja-Latn),article blockquote var:lang(zh-Latn),article blockquote var:not(:lang(zh)):not(:lang(ja)){font-family:"Latin Italic Sans","Helvetica Neue",Helvetica,Arial,"Han Heiti",sans-serif}article blockquote i:lang(zh),article blockquote i:lang(zh-Hant),article blockquote var:lang(zh),article blockquote var:lang(zh-Hant){font-family:"Biaodian Pro Sans CNS","Latin Italic Sans","Helvetica Neue",Helvetica,Arial,"Zhuyin Heiti","Han Heiti",sans-serif}.no-unicoderange article blockquote i:lang(zh),.no-unicoderange article blockquote i:lang(zh-Hant),.no-unicoderange article blockquote var:lang(zh),.no-unicoderange article blockquote var:lang(zh-Hant){font-family:"Latin Italic Sans","Helvetica Neue",Helvetica,Arial,"Han Heiti",sans-serif}article blockquote i:lang(zh-CN),article blockquote i:lang(zh-Hans),article blockquote var:lang(zh-CN),article blockquote var:lang(zh-Hans){font-family:"Biaodian Pro Sans GB","Latin Italic Sans","Helvetica Neue",Helvetica,Arial,"Han Heiti GB",sans-serif}.no-unicoderange article blockquote i:lang(zh-CN),.no-unicoderange article blockquote i:lang(zh-Hans),.no-unicoderange article blockquote var:lang(zh-CN),.no-unicoderange article blockquote var:lang(zh-Hans){font-family:"Latin Italic Sans","Helvetica Neue",Helvetica,Arial,"Han Heiti GB",sans-serif}article blockquote i:lang(ja),article blockquote var:lang(ja){font-family:"Yakumono Sans","Latin Italic Sans","Helvetica Neue",Helvetica,Arial,sans-serif}.no-unicoderange article blockquote i:lang(ja),.no-unicoderange article blockquote var:lang(ja){font-family:"Latin Italic Sans","Helvetica Neue",Helvetica,Arial,sans-serif}article figure blockquote :lang(ja-Latn),article figure blockquote :lang(zh-Latn),article figure blockquote :not(:lang(zh)):not(:lang(ja)),article figure blockquote:lang(ja-Latn),article figure blockquote:lang(zh-Latn),article figure blockquote:not(:lang(zh)):not(:lang(ja)){font-family:Georgia,"Times New Roman","Han Songti",cursive,serif}article figure blockquote:lang(zh),article figure blockquote:lang(zh-Hant){font-family:"Biaodian Pro Serif CNS","Numeral LF Serif",Georgia,"Times New Roman","Zhuyin Kaiti","Han Songti",serif}.no-unicoderange article figure blockquote:lang(zh),.no-unicoderange article figure blockquote:lang(zh-Hant){font-family:"Numeral LF Serif",Georgia,"Times New Roman","Han Songti",serif}article figure blockquote:lang(zh-CN),article figure blockquote:lang(zh-Hans){font-family:"Biaodian Pro Serif GB","Numeral LF Serif",Georgia,"Times New Roman","Han Songti GB",serif}.no-unicoderange article figure blockquote:lang(zh-CN),.no-unicoderange article figure blockquote:lang(zh-Hans){font-family:"Numeral LF Serif",Georgia,"Times New Roman","Han Songti GB",serif}article figure blockquote:lang(ja){font-family:"Yakumono Serif","Numeral LF Serif",Georgia,"Times New Roman",serif}.no-unicoderange article figure blockquote:lang(ja){font-family:"Numeral LF Serif",Georgia,"Times New Roman",serif}article blockquote :lang(ja-Latn),article blockquote :lang(zh-Latn),article blockquote :not(:lang(zh)):not(:lang(ja)),article blockquote:lang(ja-Latn),article blockquote:lang(zh-Latn),article blockquote:not(:lang(zh)):not(:lang(ja)){font-family:Georgia,"Times New Roman","Han Kaiti",cursive,serif}article blockquote:lang(zh),article blockquote:lang(zh-Hant){font-family:"Biaodian Pro Serif CNS","Numeral LF Serif",Georgia,"Times New Roman","Zhuyin Kaiti","Han Kaiti",cursive,serif}.no-unicoderange article blockquote:lang(zh),.no-unicoderange article blockquote:lang(zh-Hant){font-family:"Numeral LF Serif",Georgia,"Times New Roman","Han Kaiti",cursive,serif}article blockquote:lang(zh-CN),article blockquote:lang(zh-Hans){font-family:"Biaodian Pro Serif GB","Numeral LF Serif",Georgia,"Times New Roman","Han Kaiti GB",cursive,serif}.no-unicoderange article blockquote:lang(zh-CN),.no-unicoderange article blockquote:lang(zh-Hans){font-family:"Numeral LF Serif",Georgia,"Times New Roman","Han Kaiti GB",cursive,serif}article blockquote:lang(ja){font-family:"Yakumono Serif","Numeral LF Serif",Georgia,"Times New Roman",cursive,serif}.no-unicoderange article blockquote:lang(ja){font-family:"Numeral LF Serif",Georgia,"Times New Roman",cursive,serif}i :lang(ja-Latn),i :lang(zh-Latn),i :not(:lang(zh)):not(:lang(ja)),i:lang(ja-Latn),i:lang(zh-Latn),i:not(:lang(zh)):not(:lang(ja)),var :lang(ja-Latn),var :lang(zh-Latn),var :not(:lang(zh)):not(:lang(ja)),var:lang(ja-Latn),var:lang(zh-Latn),var:not(:lang(zh)):not(:lang(ja)){font-family:"Latin Italic Serif",Georgia,"Times New Roman","Han Kaiti",cursive,serif}i:lang(zh),i:lang(zh-Hant),var:lang(zh),var:lang(zh-Hant){font-family:"Biaodian Pro Serif CNS","Numeral LF Italic Serif","Latin Italic Serif",Georgia,"Times New Roman","Zhuyin Kaiti","Han Kaiti",cursive,serif}.no-unicoderange i:lang(zh),.no-unicoderange i:lang(zh-Hant),.no-unicoderange var:lang(zh),.no-unicoderange var:lang(zh-Hant){font-family:"Numeral LF Italic Serif","Latin Italic Serif",Georgia,"Times New Roman","Han Kaiti",cursive,serif}i:lang(zh-CN),i:lang(zh-Hans),var:lang(zh-CN),var:lang(zh-Hans){font-family:"Biaodian Pro Serif GB","Numeral LF Italic Serif","Latin Italic Serif",Georgia,"Times New Roman","Han Kaiti GB",cursive,serif}.no-unicoderange i:lang(zh-CN),.no-unicoderange i:lang(zh-Hans),.no-unicoderange var:lang(zh-CN),.no-unicoderange var:lang(zh-Hans){font-family:"Numeral LF Italic Serif","Latin Italic Serif",Georgia,"Times New Roman","Han Kaiti GB",cursive,serif}i:lang(ja),var:lang(ja){font-family:"Yakumono Serif","Numeral LF Italic Serif","Latin Italic Serif",Georgia,"Times New Roman",cursive,serif}.no-unicoderange i:lang(ja),.no-unicoderange var:lang(ja){font-family:"Numeral LF Italic Serif","Latin Italic Serif",Georgia,"Times New Roman",cursive,serif}code :lang(ja-Latn),code :lang(zh-Latn),code :not(:lang(zh)):not(:lang(ja)),code:lang(ja-Latn),code:lang(zh-Latn),code:not(:lang(zh)):not(:lang(ja)),kbd :lang(ja-Latn),kbd :lang(zh-Latn),kbd :not(:lang(zh)):not(:lang(ja)),kbd:lang(ja-Latn),kbd:lang(zh-Latn),kbd:not(:lang(zh)):not(:lang(ja)),pre :lang(ja-Latn),pre :lang(zh-Latn),pre :not(:lang(zh)):not(:lang(ja)),pre:lang(ja-Latn),pre:lang(zh-Latn),pre:not(:lang(zh)):not(:lang(ja)),samp :lang(ja-Latn),samp :lang(zh-Latn),samp :not(:lang(zh)):not(:lang(ja)),samp:lang(ja-Latn),samp:lang(zh-Latn),samp:not(:lang(zh)):not(:lang(ja)){font-family:Menlo,Consolas,Courier,"Han Heiti",monospace,monospace,sans-serif}code:lang(zh),code:lang(zh-Hant),kbd:lang(zh),kbd:lang(zh-Hant),pre:lang(zh),pre:lang(zh-Hant),samp:lang(zh),samp:lang(zh-Hant){font-family:"Biaodian Pro Sans CNS",Menlo,Consolas,Courier,"Zhuyin Heiti","Han Heiti",monospace,monospace,sans-serif}.no-unicoderange code:lang(zh),.no-unicoderange code:lang(zh-Hant),.no-unicoderange kbd:lang(zh),.no-unicoderange kbd:lang(zh-Hant),.no-unicoderange pre:lang(zh),.no-unicoderange pre:lang(zh-Hant),.no-unicoderange samp:lang(zh),.no-unicoderange samp:lang(zh-Hant){font-family:Menlo,Consolas,Courier,"Han Heiti",monospace,monospace,sans-serif}code:lang(zh-CN),code:lang(zh-Hans),kbd:lang(zh-CN),kbd:lang(zh-Hans),pre:lang(zh-CN),pre:lang(zh-Hans),samp:lang(zh-CN),samp:lang(zh-Hans){font-family:"Biaodian Pro Sans GB",Menlo,Consolas,Courier,"Han Heiti GB",monospace,monospace,sans-serif}.no-unicoderange code:lang(zh-CN),.no-unicoderange code:lang(zh-Hans),.no-unicoderange kbd:lang(zh-CN),.no-unicoderange kbd:lang(zh-Hans),.no-unicoderange pre:lang(zh-CN),.no-unicoderange pre:lang(zh-Hans),.no-unicoderange samp:lang(zh-CN),.no-unicoderange samp:lang(zh-Hans){font-family:Menlo,Consolas,Courier,"Han Heiti GB",monospace,monospace,sans-serif}code:lang(ja),kbd:lang(ja),pre:lang(ja),samp:lang(ja){font-family:"Yakumono Sans",Menlo,Consolas,Courier,monospace,monospace,sans-serif}.no-unicoderange code:lang(ja),.no-unicoderange kbd:lang(ja),.no-unicoderange pre:lang(ja),.no-unicoderange samp:lang(ja){font-family:Menlo,Consolas,Courier,monospace,monospace,sans-serif}.no-unicoderange h-char.bd-liga,.no-unicoderange h-char[unicode=b7],h-ruby [annotation] rt,h-ruby h-zhuyin,h-ruby h-zhuyin h-diao,h-ruby.romanization rt,html,ruby [annotation] rt,ruby h-zhuyin,ruby h-zhuyin h-diao,ruby.romanization rt{-moz-font-feature-settings:"liga";-ms-font-feature-settings:"liga";-webkit-font-feature-settings:"liga";font-feature-settings:"liga"}[lang*=Hant],[lang*=Hans],[lang=zh-TW],[lang=zh-HK],[lang=zh-CN],[lang^=zh],article blockquote i,article blockquote var,article strong,code,html,kbd,pre,samp{-moz-font-feature-settings:"liga=1, locl=0";-ms-font-feature-settings:"liga","locl" 0;-webkit-font-feature-settings:"liga","locl" 0;font-feature-settings:"liga","locl" 0}.no-unicoderange h-char.bd-cop:lang(zh-HK),.no-unicoderange h-char.bd-cop:lang(zh-Hant),.no-unicoderange h-char.bd-cop:lang(zh-TW){font-family:-apple-system,"Han Heiti CNS"}.no-unicoderange h-char.bd-liga,.no-unicoderange h-char[unicode=b7]{font-family:"Biaodian Basic","Han Heiti"}.no-unicoderange h-char[unicode="2018"]:lang(zh-CN),.no-unicoderange h-char[unicode="2018"]:lang(zh-Hans),.no-unicoderange h-char[unicode="2019"]:lang(zh-CN),.no-unicoderange h-char[unicode="2019"]:lang(zh-Hans),.no-unicoderange h-char[unicode="201c"]:lang(zh-CN),.no-unicoderange h-char[unicode="201c"]:lang(zh-Hans),.no-unicoderange h-char[unicode="201d"]:lang(zh-CN),.no-unicoderange h-char[unicode="201d"]:lang(zh-Hans){font-family:"Han Heiti GB"}i,var{font-style:inherit}.no-unicoderange h-ruby h-zhuyin,.no-unicoderange h-ruby h-zhuyin h-diao,.no-unicoderange ruby h-zhuyin,.no-unicoderange ruby h-zhuyin h-diao,h-ruby h-diao,ruby h-diao{font-family:"Zhuyin Kaiti",cursive,serif}h-ruby [annotation] rt,h-ruby.romanization rt,ruby [annotation] rt,ruby.romanization rt{font-family:"Romanization Sans","Helvetica Neue",Helvetica,Arial,"Han Heiti",sans-serif}
\ No newline at end of file
diff --git a/lib/Han/dist/han.min.js b/lib/Han/dist/han.min.js
deleted file mode 100644
index a557ad3..0000000
--- a/lib/Han/dist/han.min.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*! 漢字標準格式 v3.3.0 | MIT License | css.hanzi.co */
-/*! Han.css: the CSS typography framework optimised for Hanzi */
-
-void function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=b(a,!0):"function"==typeof define&&define.amd?define(function(){return b(a,!0)}):b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";function c(a){return"function"==typeof a||a instanceof Element?a:void 0}function d(a){var b=0===a.index&&a.isEnd?"biaodian cjk":"biaodian cjk portion "+(0===a.index?"is-first":a.isEnd?"is-end":"is-inner"),c=S.create("h-char-group",b);return c.innerHTML=a.text,c}function e(a){var b=S.create("div"),c=a.charCodeAt(0).toString(16);return b.innerHTML=''+a+" ",b.firstChild}function f(a){return a.match(R["char"].biaodian.open)?"bd-open":a.match(R["char"].biaodian.close)?"bd-close bd-end":a.match(R["char"].biaodian.end)?/(?:\u3001|\u3002|\uff0c)/i.test(a)?"bd-end bd-cop":"bd-end":a.match(new RegExp(Q.biaodian.liga))?"bd-liga":a.match(new RegExp(Q.biaodian.middle))?"bd-middle":""}function g(a,b){var c,d=S.create("canvas");return d.width="50",d.height="20",d.style.display="none",L.appendChild(d),c=d.getContext("2d"),c.textBaseline="top",c.font="15px "+b+", sans-serif",c.fillStyle="black",c.strokeStyle="black",c.fillText(a,0,0),{node:d,context:c,remove:function(){S.remove(d,L)}}}function h(a,b){var c,d=a.context,e=b.context;try{for(var f=1;20>=f;f++)for(var g=1;50>=g;g++){if("undefined"==typeof c&&d.getImageData(g,f,1,1).data[3]!==e.getImageData(g,f,1,1).data[3]){c=!1;break}if("boolean"==typeof c)break;50===g&&20===f&&"undefined"==typeof c&&(c=!0)}return a.remove(),b.remove(),a=null,b=null,c}catch(h){}return!1}function i(a,b,c){var a=a,b=b||"sans-serif",c=c||"\u8fadQ";return b=g(c,b),a=g(c,a),!h(a,b)}function j(a){var b,c=S.create("!"),d=a.classList;return c.appendChild(S.clone(a)),S.tag("rt",c.firstChild).forEach(function(a){var c,e=S.create("!"),f=[];do{if(c=(c||a).previousSibling,!c||c.nodeName.match(/((?:h\-)?r[ubt])/i))break;e.insertBefore(S.clone(c),e.firstChild),f.push(c)}while(!c.nodeName.match(/((?:h\-)?r[ubt])/i));b=d.contains("zhuyin")?p(e,a):o(e,a);try{a.parentNode.replaceChild(b,a),f.map(S.remove)}catch(g){}}),m(c)}function k(a){var b=S.create("!");return b.appendChild(S.clone(a)),S.tag("rt",b.firstChild).forEach(function(a){var b,c,d=S.create("!"),e=[];do{if(b=(b||a).previousSibling,!b||b.nodeName.match(/((?:h\-)?r[ubt])/i))break;d.insertBefore(S.clone(b),d.firstChild),e.push(b)}while(!b.nodeName.match(/((?:h\-)?r[ubt])/i));c=S.create("rt"),c.innerHTML=q(a),a.parentNode.replaceChild(c,a)}),b.firstChild}function l(a){var b,c,d,e,f=S.create("!"),g=a.classList;return f.appendChild(S.clone(a)),b=f.firstChild,c=d=S.tag("rb",b),e=c.length,void function(a){a&&(d=S.tag("rt",a).map(function(a,b){if(c[b]){var d=p(c[b],a);try{c[b].parentNode.replaceChild(d,c[b])}catch(e){}return d}}),S.remove(a),b.setAttribute("rightangle","true"))}(b.querySelector("rtc.zhuyin")),S.qsa("rtc:not(.zhuyin)",b).forEach(function(a,c){var f;f=S.tag("rt",a).map(function(a,b){var f,h,i=Number(a.getAttribute("rbspan")||1),j=0,k=[];i>e&&(i=e);do{try{f=d.shift(),k.push(f)}catch(l){}if("undefined"==typeof f)break;j+=Number(f.getAttribute("span")||1)}while(i>j);if(j>i){if(k.length>1)return void console.error("An impossible `rbspan` value detected.",ruby);k=S.tag("rb",k[0]),d=k.slice(i).concat(d),k=k.slice(0,i),j=i}h=o(k,a,{"class":g,span:j,order:c});try{k[0].parentNode.replaceChild(h,k.shift()),k.map(S.remove)}catch(l){}return h}),d=f,1===c&&b.setAttribute("doubleline","true"),S.remove(a)}),m(f)}function m(a){var b=a.firstChild,c=S.create("h-ruby");return c.innerHTML=b.innerHTML,S.setAttr(c,b.attributes),c.normalize(),c}function n(a){if(!a instanceof Element)return a;var b=a.classList;return b.contains("pinyin")?b.add("romanization"):b.contains("romanization")?b.add("annotation"):b.contains("mps")?b.add("zhuyin"):b.contains("rightangle")&&b.add("complex"),a}function o(a,b,c){var d=S.create("h-ru"),b=S.clone(b),c=c||{};return c.annotation="true",Array.isArray(a)?d.innerHTML=a.map(function(a){return"undefined"==typeof a?"":a.outerHTML}).join("")+b.outerHTML:(d.appendChild(S.clone(a)),d.appendChild(b)),S.setAttr(d,c),d}function p(a,b){var a=S.clone(a),c=S.create("h-ru");return c.setAttribute("zhuyin",!0),c.appendChild(a),c.innerHTML+=q(b),c}function q(a){var b,c,d,e="string"==typeof a?a:a.textContent;return b=e.replace(R.zhuyin.diao,""),d=b?b.length:0,c=e.replace(b,"").replace(/[\u02C5]/g,"\u02c7").replace(/[\u030D]/g,"\u0358"),0===d?"":''+b+" "+c+" "}function r(a,b){return a&&b&&a.parentNode===b.parentNode}function s(a,b){var c=a,b=b||"";if(S.isElmt(a.nextSibling)||r(a,a.nextSibling))return b+X;for(;!c.nextSibling;)c=c.parentNode;return a!==c&&c.insertAdjacentHTML("afterEnd"," "),b}function t(a,b){return a.isEnd&&0===a.index?b[1]+X+b[2]:0===a.index?s(a.node,a.text):a.text}function u(a){return 0===a.index?S.clone(Y):""}function v(a){var b=a.node.parentNode;return 0===a.index&&(Z=a.endIndexInNode-2),"h-hws"!==b.nodeName.toLowerCase()||1!==a.index&&a.indexInMatch!==Z||b.classList.add("quote-inner"),a.text}function w(a){var b=a.node.parentNode;return"h-hws"===b.nodeName.toLowerCase()&&b.classList.add("quote-outer"),a.text}function x(){var a,b=S.create("div");return b.innerHTML="a b a b ",L.appendChild(b),a=b.firstChild.offsetWidth!==b.lastChild.offsetWidth,S.remove(b),a}function y(a){var b=a.nextSibling;b&&ba(b,"h-cs.jinze-outer")?b.classList.add("hangable-outer"):a.insertAdjacentHTML("afterend",aa)}function z(a){return a.replace(/(biaodian|cjk|bd-jiya|bd-consecutive|bd-hangable)/gi,"").trim()}function A(a){var b,c=a.text,d=a.node.parentNode,e=S.parent(d,"h-char.biaodian"),f=O.createBDChar(c);return f.innerHTML=""+c+" ",f.classList.add(ea),(b=S.parent(d,"h-jinze"))&&C(b),e?function(){return e.classList.add(ea),ba(d,"h-inner, h-inner *")?c:f.firstChild}():f}function B(a){var b,c=ca,d=a.node.parentNode,e=S.parent(d,"h-char.biaodian"),f=S.parent(e,"h-jinze");return b=e.classList,c&&e.setAttribute("prev",c),da&&b.contains("bd-open")&&da.pop().setAttribute("next","bd-open"),da=void 0,a.isEnd?(ca=void 0,b.add(ga,"end-portion")):(ca=z(e.getAttribute("class")),b.add(ga)),f&&(da=D(f,{prev:c,"class":z(e.getAttribute("class"))})),a.text}function C(a){ba(a,".tou, .touwei")&&!ba(a.previousSibling,"h-cs.jiya-outer")&&a.insertAdjacentHTML("beforebegin",ha),ba(a,".wei, .touwei")&&!ba(a.nextSibling,"h-cs.jiya-outer")&&a.insertAdjacentHTML("afterend",ha)}function D(a,b){var c,d;return ba(a,".tou, .touwei")&&(c=a.previousSibling,ba(c,"h-cs")&&(c.className="jinze-outer jiya-outer",c.setAttribute("prev",b.prev))),ba(a,".wei, .touwei")&&(d=a.nextSibling,ba(d,"h-cs")&&(d.className="jinze-outer jiya-outer "+b["class"],d.removeAttribute("prev"))),[c,d]}function E(a,b,c){return function(){var d=O.localize.writeOnCanvas(b,a),e=O.localize.writeOnCanvas(c,a);return O.localize.compareCanvases(d,e)}}function F(){return E('"Romanization Sans"',"a\u030d","\udb80\udc61")}function G(){return E('"Romanization Sans"',"i\u030d","\udb80\udc69")}function H(){return E('"Zhuyin Kaiti"',"\u31b4\u0358","\udb8c\uddb4")}function I(a){return function(b){var b=b||J,c=O.find(b).avoid(ia);return a.forEach(function(a){c.replace(new RegExp(a[0],"ig"),function(b,c){var d=S.clone(ja);return d.innerHTML=""+c[0]+" ",d.setAttribute("display-as",a[1]),0===b.index?d:""})}),c}}var J=a.document,K=J.documentElement,L=J.body,M="3.3.0",N=["initCond","renderElem","renderJiya","renderHanging","correctBiaodian","renderHWS","substCombLigaWithPUA"],O=function(a,b){return new O.fn.init(a,b)},P=function(){return arguments[0]&&(this.context=arguments[0]),arguments[1]&&(this.condition=arguments[1]),this};O.version=M,O.fn=O.prototype={version:M,constructor:O,context:L,condition:K,routine:N,init:P,setRoutine:function(a){return Array.isArray(a)&&(this.routine=a),this},render:function(a){var b=this,a=Array.isArray(a)?a:this.routine;return a.forEach(function(a){"string"==typeof a&&"function"==typeof b[a]?b[a]():Array.isArray(a)&&"function"==typeof b[a[0]]&&b[a.shift()].apply(b,a)}),this}},O.fn.init.prototype=O.fn,O.init=function(){return O.init=O().render()};var Q={punct:{base:"[\u2026,.;:!?\u203d_]",sing:"[\u2010-\u2014\u2026]",middle:"[\\/~\\-&\u2010-\u2014_]",open:"['\"\u2018\u201c\\(\\[\xa1\xbf\u2e18\xab\u2039\u201a\u201c\u201e]",close:"['\"\u201d\u2019\\)\\]\xbb\u203a\u201b\u201d\u201f]",end:"['\"\u201d\u2019\\)\\]\xbb\u203a\u201b\u201d\u201f\u203c\u203d\u2047-\u2049,.;:!?]"},biaodian:{base:"[\ufe30\uff0e\u3001\uff0c\u3002\uff1a\uff1b\uff1f\uff01\u30fc]",liga:"[\u2014\u2026\u22ef]",middle:"[\xb7\uff3c\uff0f\uff0d\u30a0\uff06\u30fb\uff3f]",open:"[\u300c\u300e\u300a\u3008\uff08\u3014\uff3b\uff5b\u3010\u3016]",close:"[\u300d\u300f\u300b\u3009\uff09\u3015\uff3d\uff5d\u3011\u3017]",end:"[\u300d\u300f\u300b\u3009\uff09\u3015\uff3d\uff5d\u3011\u3017\ufe30\uff0e\u3001\uff0c\u3002\uff1a\uff1b\uff1f\uff01\u30fc]"},hanzi:{base:"[\u4e00-\u9fff\u3400-\u4db5\u31c0-\u31e3\u3007\ufa0e\ufa0f\ufa11\ufa13\ufa14\ufa1f\ufa21\ufa23\ufa24\ufa27-\ufa29]|[\ud800-\udbff][\udc00-\udfff]",desc:"[\u2ff0-\u2ffa]",radical:"[\u2f00-\u2fd5\u2e80-\u2ef3]"},latin:{base:"[A-Za-z0-9\xc0-\xff\u0100-\u017f\u0180-\u024f\u2c60-\u2c7f\ua720-\ua7ff\u1e00-\u1eff]",combine:"[\u0300-\u0341\u1dc0-\u1dff]"},ellinika:{base:"[0-9\u0370-\u03ff\u1f00-\u1fff]",combine:"[\u0300-\u0345\u1dc0-\u1dff]"},kirillica:{base:"[0-9\u0400-\u0482\u048a-\u04ff\u0500-\u052f\ua640-\ua66e\ua67e-\ua697]",combine:"[\u0483-\u0489\u2de0-\u2dff\ua66f-\ua67d\ua69f]"},kana:{base:"[\u30a2\u30a4\u30a6\u30a8\u30aa-\u30fa\u3042\u3044\u3046\u3048\u304a-\u3094\u309f\u30ff]|\ud82c[\udc00-\udc01]",small:"[\u3041\u3043\u3045\u3047\u3049\u30a1\u30a3\u30a5\u30a7\u30a9\u3063\u3083\u3085\u3087\u308e\u3095\u3096\u30c3\u30e3\u30e5\u30e7\u30ee\u30f5\u30f6\u31f0-\u31ff]",combine:"[\u3099-\u309c]",half:"[\uff66-\uff9f]",mark:"[\u30a0\u309d\u309e\u30fb-\u30fe]"},eonmun:{base:"[\uac00-\ud7a3]",letter:"[\u1100-\u11ff\u314f-\u3163\u3131-\u318e\ua960-\ua97c\ud7b0-\ud7fb]",half:"[\uffa1-\uffdc]"},zhuyin:{base:"[\u3105-\u312d\u31a0-\u31ba]",initial:"[\u3105-\u3119\u312a-\u312c\u31a0-\u31a3]",medial:"[\u3127-\u3129]","final":"[\u311a-\u3129\u312d\u31a4-\u31b3\u31b8-\u31ba]",tone:"[\u02d9\u02ca\u02c5\u02c7\u02cb\u02ea\u02eb]",checked:"[\u31b4-\u31b7][\u0358\u030d]?"}},R=function(){var a="[\\x20\\t\\r\\n\\f]",b=Q.punct.open,c=(Q.punct.close,Q.punct.end),d=Q.punct.middle,e=Q.punct.sing,f=b+"|"+c+"|"+d,g=Q.biaodian.open,h=Q.biaodian.close,i=Q.biaodian.end,j=Q.biaodian.middle,k=Q.biaodian.liga+"{2}",l=g+"|"+i+"|"+j,m=Q.kana.base+Q.kana.combine+"?",n=Q.kana.small+Q.kana.combine+"?",o=Q.kana.half,p=Q.eonmun.base+"|"+Q.eonmun.letter,q=Q.eonmun.half,r=Q.hanzi.base+"|"+Q.hanzi.desc+"|"+Q.hanzi.radical+"|"+m,s=Q.ellinika.combine,t=Q.latin.base+s+"*",u=Q.ellinika.base+s+"*",v=Q.kirillica.combine,w=Q.kirillica.base+v+"*",x=t+"|"+u+"|"+w,y="['\u2019]",z=r+"|(?:"+x+"|"+y+")+",A=Q.zhuyin.initial,B=Q.zhuyin.medial,C=Q.zhuyin["final"],D=Q.zhuyin.tone+"|"+Q.zhuyin.checked;return{"char":{punct:{all:new RegExp("("+f+")","g"),open:new RegExp("("+b+")","g"),end:new RegExp("("+c+")","g"),sing:new RegExp("("+e+")","g")},biaodian:{all:new RegExp("("+l+")","g"),open:new RegExp("("+g+")","g"),close:new RegExp("("+h+")","g"),end:new RegExp("("+i+")","g"),liga:new RegExp("("+k+")","g")},hanzi:new RegExp("("+r+")","g"),latin:new RegExp("("+t+")","ig"),ellinika:new RegExp("("+u+")","ig"),kirillica:new RegExp("("+w+")","ig"),kana:new RegExp("("+m+"|"+n+"|"+o+")","g"),eonmun:new RegExp("("+p+"|"+q+")","g")},group:{biaodian:[new RegExp("(("+l+"){2,})","g"),new RegExp("("+k+g+")","g")],punct:null,hanzi:new RegExp("("+r+")+","g"),western:new RegExp("("+t+"|"+u+"|"+w+"|"+f+")+","ig"),kana:new RegExp("("+m+"|"+n+"|"+o+")+","g"),eonmun:new RegExp("("+p+"|"+q+"|"+f+")+","g")},jinze:{hanging:new RegExp(a+"*([\u3001\uff0c\u3002\uff0e])(?!"+i+")","ig"),touwei:new RegExp("("+g+"+)("+z+")("+i+"+)","ig"),tou:new RegExp("("+g+"+)("+z+")","ig"),wei:new RegExp("("+z+")("+i+"+)","ig"),middle:new RegExp("("+z+")("+j+")("+z+")","ig")},zhuyin:{form:new RegExp("^\u02d9?("+A+")?("+B+")?("+C+")?("+D+")?$"),diao:new RegExp("("+D+")","g")},hws:{base:[new RegExp("("+r+")("+x+"|"+b+")","ig"),new RegExp("("+x+"|"+c+")("+r+")","ig")],strict:[new RegExp("("+r+")"+a+"?("+x+"|"+b+")","ig"),new RegExp("("+x+"|"+c+")"+a+"?("+r+")","ig")]},"display-as":{"ja-font-for-hant":["\u67e5 \u67fb","\u555f \u5553","\u9109 \u9115","\u503c \u5024","\u6c61 \u6c5a"],"comb-liga-pua":[["a[\u030d\u0358]","\udb80\udc61"],["e[\u030d\u0358]","\udb80\udc65"],["i[\u030d\u0358]","\udb80\udc69"],["o[\u030d\u0358]","\udb80\udc6f"],["u[\u030d\u0358]","\udb80\udc75"],["\u31b4[\u030d\u0358]","\udb8c\uddb4"],["\u31b5[\u030d\u0358]","\udb8c\uddb5"],["\u31b6[\u030d\u0358]","\udb8c\uddb6"],["\u31b7[\u030d\u0358]","\udb8c\uddb7"]],"comb-liga-vowel":[["a[\u030d\u0358]","\udb80\udc61"],["e[\u030d\u0358]","\udb80\udc65"],["i[\u030d\u0358]","\udb80\udc69"],["o[\u030d\u0358]","\udb80\udc6f"],["u[\u030d\u0358]","\udb80\udc75"]],"comb-liga-zhuyin":[["\u31b4[\u030d\u0358]","\udb8c\uddb4"],["\u31b5[\u030d\u0358]","\udb8c\uddb5"],["\u31b6[\u030d\u0358]","\udb8c\uddb6"],["\u31b7[\u030d\u0358]","\udb8c\uddb7"]]},"inaccurate-char":[["[\u2022\u2027]","\xb7"],["\u22ef\u22ef","\u2026\u2026"],["\u2500\u2500","\u2014\u2014"],["\u2035","\u2018"],["\u2032","\u2019"],["\u2036","\u201c"],["\u2033","\u201d"]]}}();O.UNICODE=Q,O.TYPESET=R,O.UNICODE.cjk=O.UNICODE.hanzi,O.UNICODE.greek=O.UNICODE.ellinika,O.UNICODE.cyrillic=O.UNICODE.kirillica,O.UNICODE.hangul=O.UNICODE.eonmun,O.UNICODE.zhuyin.ruyun=O.UNICODE.zhuyin.checked,O.TYPESET["char"].cjk=O.TYPESET["char"].hanzi,O.TYPESET["char"].greek=O.TYPESET["char"].ellinika,O.TYPESET["char"].cyrillic=O.TYPESET["char"].kirillica,O.TYPESET["char"].hangul=O.TYPESET["char"].eonmun,O.TYPESET.group.hangul=O.TYPESET.group.eonmun,O.TYPESET.group.cjk=O.TYPESET.group.hanzi;var S={id:function(a,b){return(b||J).getElementById(a)},tag:function(a,b){return this.makeArray((b||J).getElementsByTagName(a))},qs:function(a,b){return(b||J).querySelector(a)},qsa:function(a,b){return this.makeArray((b||J).querySelectorAll(a))},parent:function(a,b){return b?function(){if("function"==typeof S.matches){for(;!S.matches(a,b);){if(!a||a===J.documentElement){a=void 0;break}a=a.parentNode}return a}}():a?a.parentNode:void 0},create:function(a,b){var c="!"===a?J.createDocumentFragment():""===a?J.createTextNode(b||""):J.createElement(a);try{b&&(c.className=b)}catch(d){}return c},clone:function(a,b){return a.cloneNode("boolean"==typeof b?b:!0)},remove:function(a){return a.parentNode.removeChild(a)},setAttr:function(a,b){if("object"==typeof b){var c=b.length;if("object"==typeof b[0]&&"name"in b[0])for(var d=0;c>d;d++)void 0!==b[d].value&&a.setAttribute(b[d].name,b[d].value);else for(var e in b)b.hasOwnProperty(e)&&void 0!==b[e]&&a.setAttribute(e,b[e]);return a}},isElmt:function(a){return a&&a.nodeType===Node.ELEMENT_NODE},isIgnorable:function(a){return a?"WBR"===a.nodeName||a.nodeType===Node.COMMENT_NODE:!1},makeArray:function(a){return Array.prototype.slice.call(a)},extend:function(a,b){if(("object"==typeof a||"function"==typeof a)&&"object"==typeof b)for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a}},T=function(b){function c(a,b,c){var d=Element.prototype,e=d.matches||d.mozMatchesSelector||d.msMatchesSelector||d.webkitMatchesSelector;return a instanceof Element?e.call(a,b):c&&/^[39]$/.test(a.nodeType)?!0:!1}var d="0.2.1",e=b.NON_INLINE_PROSE,f=b.PRESETS.prose.filterElements,g=a||{},h=g.document||void 0;if("undefined"==typeof h)throw new Error("Fibre requires a DOM-supported environment.");var i=function(a,b){return new i.fn.init(a,b)};return i.version=d,i.matches=c,i.fn=i.prototype={constructor:i,version:d,finder:[],context:void 0,portionMode:"retain",selector:{},preset:"prose",init:function(a,b){if(b&&(this.preset=null),this.selector={context:null,filter:[],avoid:[],boundary:[]},!a)throw new Error("A context is required for Fibre to initialise.");return a instanceof Node?a instanceof Document?this.context=a.body||a:this.context=a:"string"==typeof a&&(this.context=h.querySelector(a),this.selector.context=a),this},filterFn:function(a){var b=this.selector.filter.join(", ")||"*",d=this.selector.avoid.join(", ")||null,e=c(a,b,!0)&&!c(a,d);return"prose"===this.preset?f(a)&&e:e},boundaryFn:function(a){var b=this.selector.boundary.join(", ")||null,d=c(a,b);return"prose"===this.preset?e(a)||d:d},filter:function(a){return"string"==typeof a&&this.selector.filter.push(a),this},endFilter:function(a){return a?this.selector.filter=[]:this.selector.filter.pop(),this},avoid:function(a){return"string"==typeof a&&this.selector.avoid.push(a),this},endAvoid:function(a){return a?this.selector.avoid=[]:this.selector.avoid.pop(),this},addBoundary:function(a){return"string"==typeof a&&this.selector.boundary.push(a),this},removeBoundary:function(){return this.selector.boundary=[],this},setMode:function(a){return this.portionMode="first"===a?"first":"retain",this},replace:function(a,c){var d=this;return d.finder.push(b(d.context,{find:a,replace:c,filterElements:function(a){return d.filterFn(a)},forceContext:function(a){return d.boundaryFn(a)},portionMode:d.portionMode})),d},wrap:function(a,c){var d=this;return d.finder.push(b(d.context,{find:a,wrap:c,filterElements:function(a){return d.filterFn(a)},forceContext:function(a){return d.boundaryFn(a)},portionMode:d.portionMode})),d},revert:function(a){var b=this.finder.length,a=Number(a)||(0===a?Number(0):"all"===a?b:1);if("undefined"==typeof b||0===b)return this;a>b&&(a=b);for(var c=a;c>0;c--)this.finder.pop().revert();return this}},i.fn.filterOut=i.fn.avoid,i.fn.init.prototype=i.fn,i}(function(){function a(a){return String(a).replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1")}function b(){return c.apply(null,arguments)||d.apply(null,arguments)}function c(a,c,e,f,g){if(c&&!c.nodeType&&arguments.length<=2)return!1;var h="function"==typeof e;h&&(e=function(a){return function(b,c){return a(b.text,c.startIndex)}}(e));var i=d(c,{find:a,wrap:h?null:e,replace:h?e:"$"+(f||"&"),prepMatch:function(a,b){if(!a[0])throw"findAndReplaceDOMText cannot handle zero-length matches";if(f>0){var c=a[f];a.index+=a[0].indexOf(c),a[0]=c}return a.endIndex=a.index+a[0].length,a.startIndex=a.index,a.index=b,a},filterElements:g});return b.revert=function(){return i.revert()},!0}function d(a,b){return new e(a,b)}function e(a,c){var d=c.preset&&b.PRESETS[c.preset];if(c.portionMode=c.portionMode||f,d)for(var e in d)i.call(d,e)&&!i.call(c,e)&&(c[e]=d[e]);this.node=a,this.options=c,this.prepMatch=c.prepMatch||this.prepMatch,this.reverts=[],this.matches=this.search(),this.matches.length&&this.processMatches()}var f="retain",g="first",h=J,i=({}.toString,{}.hasOwnProperty);return b.NON_PROSE_ELEMENTS={br:1,hr:1,script:1,style:1,img:1,video:1,audio:1,canvas:1,svg:1,map:1,object:1,input:1,textarea:1,select:1,option:1,optgroup:1,button:1},b.NON_CONTIGUOUS_PROSE_ELEMENTS={address:1,article:1,aside:1,blockquote:1,dd:1,div:1,dl:1,fieldset:1,figcaption:1,figure:1,footer:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,header:1,hgroup:1,hr:1,main:1,nav:1,noscript:1,ol:1,output:1,p:1,pre:1,section:1,ul:1,br:1,li:1,summary:1,dt:1,details:1,rp:1,rt:1,rtc:1,script:1,style:1,img:1,video:1,audio:1,canvas:1,svg:1,map:1,object:1,input:1,textarea:1,select:1,option:1,optgroup:1,button:1,table:1,tbody:1,thead:1,th:1,tr:1,td:1,caption:1,col:1,tfoot:1,colgroup:1},b.NON_INLINE_PROSE=function(a){return i.call(b.NON_CONTIGUOUS_PROSE_ELEMENTS,a.nodeName.toLowerCase())},b.PRESETS={prose:{forceContext:b.NON_INLINE_PROSE,filterElements:function(a){return!i.call(b.NON_PROSE_ELEMENTS,a.nodeName.toLowerCase())}}},b.Finder=e,e.prototype={search:function(){function b(a){for(var g=0,j=a.length;j>g;++g){var k=a[g];if("string"==typeof k){if(f.global)for(;c=f.exec(k);)h.push(i.prepMatch(c,d++,e));else(c=k.match(f))&&h.push(i.prepMatch(c,0,e));e+=k.length}else b(k)}}var c,d=0,e=0,f=this.options.find,g=this.getAggregateText(),h=[],i=this;return f="string"==typeof f?RegExp(a(f),"g"):f,b(g),h},prepMatch:function(a,b,c){if(!a[0])throw new Error("findAndReplaceDOMText cannot handle zero-length matches");return a.endIndex=c+a.index+a[0].length,a.startIndex=c+a.index,a.index=b,a},getAggregateText:function(){function a(d,e){if(3===d.nodeType)return[d.data];if(b&&!b(d))return[];var e=[""],f=0;if(d=d.firstChild)do if(3!==d.nodeType){var g=a(d);c&&1===d.nodeType&&(c===!0||c(d))?(e[++f]=g,e[++f]=""):("string"==typeof g[0]&&(e[f]+=g.shift()),g.length&&(e[++f]=g,e[++f]=""))}else e[f]+=d.data;while(d=d.nextSibling);return e}var b=this.options.filterElements,c=this.options.forceContext;return a(this.node)},processMatches:function(){var a,b,c,d=this.matches,e=this.node,f=this.options.filterElements,g=[],h=e,i=d.shift(),j=0,k=0,l=0,m=[e];a:for(;;){if(3===h.nodeType&&(!b&&h.length+j>=i.endIndex?b={node:h,index:l++,text:h.data.substring(i.startIndex-j,i.endIndex-j),indexInMatch:j-i.startIndex,indexInNode:i.startIndex-j,endIndexInNode:i.endIndex-j,isEnd:!0}:a&&g.push({node:h,index:l++,text:h.data,indexInMatch:j-i.startIndex,indexInNode:0}),!a&&h.length+j>i.startIndex&&(a={node:h,index:l++,indexInMatch:0,indexInNode:i.startIndex-j,endIndexInNode:i.endIndex-j,text:h.data.substring(i.startIndex-j,i.endIndex-j)}),j+=h.data.length),c=1===h.nodeType&&f&&!f(h),a&&b){if(h=this.replaceMatch(i,a,g,b),j-=b.node.data.length-b.endIndexInNode,a=null,b=null,g=[],i=d.shift(),l=0,k++,!i)break}else if(!c&&(h.firstChild||h.nextSibling)){h.firstChild?(m.push(h),h=h.firstChild):h=h.nextSibling;continue}for(;;){if(h.nextSibling){h=h.nextSibling;break}if(h=m.pop(),h===e)break a}}},revert:function(){for(var a=this.reverts.length;a--;)this.reverts[a]();this.reverts=[]},prepareReplacementString:function(a,b,c,d){var e=this.options.portionMode;return e===g&&b.indexInMatch>0?"":(a=a.replace(/\$(\d+|&|`|')/g,function(a,b){var d;switch(b){case"&":d=c[0];break;case"`":d=c.input.substring(0,c.startIndex);break;case"'":d=c.input.substring(c.endIndex);break;default:d=c[+b]}return d}),e===g?a:b.isEnd?a.substring(b.indexInMatch):a.substring(b.indexInMatch,b.indexInMatch+b.text.length))},getPortionReplacementNode:function(a,b,c){var d=this.options.replace||"$&",e=this.options.wrap;if(e&&e.nodeType){var f=h.createElement("div");f.innerHTML=e.outerHTML||(new XMLSerializer).serializeToString(e),e=f.firstChild}if("function"==typeof d)return d=d(a,b,c),d&&d.nodeType?d:h.createTextNode(String(d));var g="string"==typeof e?h.createElement(e):e;return d=h.createTextNode(this.prepareReplacementString(d,a,b,c)),d.data&&g?(g.appendChild(d),g):d},replaceMatch:function(a,b,c,d){var e,f,g=b.node,i=d.node;if(g===i){var j=g;b.indexInNode>0&&(e=h.createTextNode(j.data.substring(0,b.indexInNode)),j.parentNode.insertBefore(e,j));var k=this.getPortionReplacementNode(d,a);return j.parentNode.insertBefore(k,j),d.endIndexInNoden;++n){var p=c[n],q=this.getPortionReplacementNode(p,a);p.node.parentNode.replaceChild(q,p.node),this.reverts.push(function(a,b){return function(){b.parentNode.replaceChild(a.node,b)}}(p,q)),m.push(q)}var r=this.getPortionReplacementNode(d,a);return g.parentNode.insertBefore(e,g),g.parentNode.insertBefore(l,g),g.parentNode.removeChild(g),i.parentNode.insertBefore(r,i),i.parentNode.insertBefore(f,i),i.parentNode.removeChild(i),this.reverts.push(function(){e.parentNode.removeChild(e),l.parentNode.replaceChild(g,l),f.parentNode.removeChild(f),r.parentNode.replaceChild(i,r)}),r}},b}()),U=function(){var a=S.create("div");return a.appendChild(S.create("","0-")),a.appendChild(S.create("","2")),a.normalize(),2!==a.firstChild.length}();S.extend(T.fn,{normalize:function(){return U&&this.context.normalize(),this},jinzify:function(a){return this.filter(a||null).avoid("h-jinze").replace(R.jinze.touwei,function(a,b){var c=S.create("h-jinze","touwei");return c.innerHTML=b[0],0===a.index&&a.isEnd||1===a.index?c:""}).replace(R.jinze.wei,function(a,b){var c=S.create("h-jinze","wei");return c.innerHTML=b[0],0===a.index?c:""}).replace(R.jinze.tou,function(a,b){var c=S.create("h-jinze","tou");return c.innerHTML=b[0],0===a.index&&a.isEnd||1===a.index?c:""}).replace(R.jinze.middle,function(a,b){var c=S.create("h-jinze","middle");return c.innerHTML=b[0],0===a.index&&a.isEnd||1===a.index?c:""}).endAvoid().endFilter()},groupify:function(a){var a=S.extend({biaodian:!1,hanzi:!1,kana:!1,eonmun:!1,western:!1},a||{});return this.avoid("h-word, h-char-group"),a.biaodian&&this.replace(R.group.biaodian[0],d).replace(R.group.biaodian[1],d),(a.hanzi||a.cjk)&&this.wrap(R.group.hanzi,S.clone(S.create("h-char-group","hanzi cjk"))),a.western&&this.wrap(R.group.western,S.clone(S.create("h-word","western"))),a.kana&&this.wrap(R.group.kana,S.clone(S.create("h-char-group","kana"))),(a.eonmun||a.hangul)&&this.wrap(R.group.eonmun,S.clone(S.create("h-word","eonmun hangul"))),this.endAvoid(),this},charify:function(a){var a=S.extend({avoid:!0,biaodian:!1,punct:!1,hanzi:!1,latin:!1,ellinika:!1,kirillica:!1,kana:!1,eonmun:!1},a||{});return a.avoid&&this.avoid("h-char"),a.biaodian&&this.replace(R["char"].biaodian.all,c(a.biaodian)||function(a){return e(a.text)}).replace(R["char"].biaodian.liga,c(a.biaodian)||function(a){return e(a.text)}),(a.hanzi||a.cjk)&&this.wrap(R["char"].hanzi,c(a.hanzi||a.cjk)||S.clone(S.create("h-char","hanzi cjk"))),a.punct&&this.wrap(R["char"].punct.all,c(a.punct)||S.clone(S.create("h-char","punct"))),a.latin&&this.wrap(R["char"].latin,c(a.latin)||S.clone(S.create("h-char","alphabet latin"))),(a.ellinika||a.greek)&&this.wrap(R["char"].ellinika,c(a.ellinika||a.greek)||S.clone(S.create("h-char","alphabet ellinika greek"))),(a.kirillica||a.cyrillic)&&this.wrap(R["char"].kirillica,c(a.kirillica||a.cyrillic)||S.clone(S.create("h-char","alphabet kirillica cyrillic"))),a.kana&&this.wrap(R["char"].kana,c(a.kana)||S.clone(S.create("h-char","kana"))),(a.eonmun||a.hangul)&&this.wrap(R["char"].eonmun,c(a.eonmun||a.hangul)||S.clone(S.create("h-char","eonmun hangul"))),this.endAvoid(),this}}),S.extend(O,{isNodeNormalizeNormal:U,find:T,createBDGroup:d,createBDChar:e}),S.matches=O.find.matches,void["setMode","wrap","replace","revert","addBoundary","removeBoundary","avoid","endAvoid","filter","endFilter","jinzify","groupify","charify"].forEach(function(a){O.fn[a]=function(){return this.finder||(this.finder=O.find(this.context)),this.finder[a](arguments[0],arguments[1]),this}});var V={};V.writeOnCanvas=g,V.compareCanvases=h,V.detectFont=i,V.support=function(){function b(a){var b,c=a.charAt(0).toUpperCase()+a.slice(1),d=(a+" "+e.join(c+" ")+c).split(" ");return d.forEach(function(a){"string"==typeof f.style[a]&&(b=!0)}),b||!1}function c(a,b){var c,d,e,f=L||S.create("body"),g=S.create("div"),h=L?g:f,b="function"==typeof b?b:function(){};return c=[""].join(""),h.innerHTML+=c,f.appendChild(g),L||(f.style.background="",f.style.overflow="hidden",e=K.style.overflow,K.style.overflow="hidden",K.appendChild(f)),d=b(h,a),S.remove(h),L||(K.style.overflow=e),!!d}function d(b,c){var d;return a.getComputedStyle?d=J.defaultView.getComputedStyle(b,null).getPropertyValue(c):b.currentStyle&&(d=b.currentStyle[c]),d}var e="Webkit Moz ms".split(" "),f=S.create("h-test");return{columnwidth:b("columnWidth"),fontface:function(){var a;return c('@font-face { font-family: font; src: url("//"); }',function(b,c){var d=S.qsa("style",b)[0],e=d.sheet||d.styleSheet,f=e?e.cssRules&&e.cssRules[0]?e.cssRules[0].cssText:e.cssText||"":"";a=/src/i.test(f)&&0===f.indexOf(c.split(" ")[0])}),a}(),ruby:function(){var a,b=S.create("ruby"),c=S.create("rt"),e=S.create("rp");return b.appendChild(e),b.appendChild(c),K.appendChild(b),a="none"===d(e,"display")||"ruby"===d(b,"display")&&"ruby-text"===d(c,"display")?!0:!1,K.removeChild(b),b=null,c=null,e=null,a}(),"ruby-display":function(){var a=S.create("div");return a.innerHTML=' ',"ruby"===a.querySelector("h-test-a").style.display&&"ruby-text-container"===a.querySelector("h-test-b").style.display}(),"ruby-interchar":function(){var a,b="inter-character",c=S.create("div");return c.innerHTML=' ',a=c.querySelector("h-test").style,a.rubyPosition===b||a.WebkitRubyPosition===b||a.MozRubyPosition===b||a.msRubyPosition===b}(),textemphasis:b("textEmphasis"),unicoderange:function(){var a;return c('@font-face{font-family:test-for-unicode-range;src:local(Arial),local("Droid Sans")}@font-face{font-family:test-for-unicode-range;src:local("Times New Roman"),local(Times),local("Droid Serif");unicode-range:U+270C}',function(){a=!V.detectFont("test-for-unicode-range",'Arial, "Droid Sans"',"Q")}),a}(),writingmode:b("writingMode")}}(),V.initCond=function(a){var b,a=a||K,c="";for(var d in V.support)b=(V.support[d]?"":"no-")+d,a.classList.add(b),c+=b+" ";return c};var W=V.support["ruby-interchar"];S.extend(V,{renderRuby:function(a,b){var b=b||"ruby",c=S.qsa(b,a);S.qsa("rtc",a).concat(c).map(n),c.forEach(function(a){var b,c=a.classList;c.contains("complex")?b=l(a):c.contains("zhuyin")&&(b=W?k(a):j(a)),b&&a.parentNode.replaceChild(b,a)})},simplifyRubyClass:n,getZhuyinHTML:q,renderComplexRuby:l,renderSimpleRuby:j,renderInterCharRuby:k}),S.extend(V,{renderElem:function(a){this.renderRuby(a),this.renderDecoLine(a),this.renderDecoLine(a,"s, del"),this.renderEm(a)},renderDecoLine:function(a,b){var c=S.qsa(b||"u, ins",a),d=c.length;a:for(;d--;){var e=c[d],f=null;do{if(f=(f||e).previousSibling,!f)continue a;c[d-1]===f&&e.classList.add("adjacent")}while(S.isIgnorable(f))}},renderEm:function(a,b){var c=b?"qsa":"tag",b=b||"em",d=S[c](b,a);d.forEach(function(a){var b=O(a);V.support.textemphasis?b.avoid("rt, h-char").charify({biaodian:!0,punct:!0}):b.avoid("rt, h-char, h-char-group").jinzify().groupify({western:!0}).charify({hanzi:!0,biaodian:!0,punct:!0,latin:!0,ellinika:!0,kirillica:!0})})}}),O.normalize=V,O.localize=V,O.support=V.support,O.detectFont=V.detectFont,O.fn.initCond=function(){return this.condition.classList.add("han-js-rendered"),O.normalize.initCond(this.condition),this},void["Elem","DecoLine","Em","Ruby"].forEach(function(a){var b="render"+a;O.fn[b]=function(a){return O.normalize[b](this.context,a),this}}),S.extend(O.support,{heiti:!0,songti:O.detectFont('"Han Songti"'),"songti-gb":O.detectFont('"Han Songti GB"'),kaiti:O.detectFont('"Han Kaiti"'),fangsong:O.detectFont('"Han Fangsong"')}),O.correctBiaodian=function(a){var a=a||J,b=O.find(a);return b.avoid("h-char").replace(/([\u2018\u201c])/g,function(a){var b=O.createBDChar(a.text);return b.classList.add("bd-open","punct"),b}).replace(/([\u2019\u201d])/g,function(a){var b=O.createBDChar(a.text);return b.classList.add("bd-close","bd-end","punct"),b}),O.support.unicoderange?b:b.charify({biaodian:!0})},O.correctBasicBD=O.correctBiaodian,O.correctBD=O.correctBiaodian,S.extend(O.fn,{biaodian:null,correctBiaodian:function(){return this.biaodian=O.correctBiaodian(this.context),this},revertCorrectedBiaodian:function(){try{this.biaodian.revert("all")}catch(a){}return this}}),O.fn.correctBasicBD=O.fn.correctBiaodian,O.fn.revertBasicBD=O.fn.revertCorrectedBiaodian;var X="<>",Y=S.create("h-hws");Y.setAttribute("hidden",""),Y.innerHTML=" ";var Z;S.extend(O,{renderHWS:function(a,b){var c=b?"textarea, code, kbd, samp, pre":"textarea",d=b?"strict":"base",a=a||J,e=O.find(a);
-return e.avoid(c).replace(O.TYPESET.hws[d][0],t).replace(O.TYPESET.hws[d][1],t).replace(new RegExp("("+X+")+","g"),u).replace(/([\'"])\s(.+?)\s\1/g,v).replace(/\s[\u2018\u201c]/g,w).replace(/[\u2019\u201d]\s/g,w).normalize(),e}}),S.extend(O.fn,{renderHWS:function(a){return O.renderHWS(this.context,a),this},revertHWS:function(){return S.tag("h-hws",this.context).forEach(function(a){S.remove(a)}),this.HWS=[],this}});var $="bd-hangable",_="h-char.bd-hangable",aa=' ',ba=O.find.matches;O.support["han-space"]=x(),S.extend(O,{detectSpaceFont:x,isSpaceFontLoaded:x(),renderHanging:function(a){var a=a||J,b=O.find(a);return b.avoid("textarea, code, kbd, samp, pre").avoid(_).replace(R.jinze.hanging,function(a){if(/^[\x20\t\r\n\f]+$/.test(a.text))return"";var b,c,d,e,f=a.node.parentNode;return(b=S.parent(f,"h-jinze"))&&y(b),e=a.text.trim(),c=O.createBDChar(e),c.innerHTML=""+e+" ",c.classList.add($),d=S.parent(f,"h-char.biaodian"),d?function(){return d.classList.add($),ba(f,"h-inner, h-inner *")?e:c.firstChild}():c}),b}}),S.extend(O.fn,{renderHanging:function(){var a=this.condition.classList;return O.isSpaceFontLoaded=x(),O.isSpaceFontLoaded&&a.contains("no-han-space")&&(a.remove("no-han-space"),a.add("han-space")),O.renderHanging(this.context),this},revertHanging:function(){return S.qsa("h-char.bd-hangable, h-cs.hangable-outer",this.context).forEach(function(a){var b=a.classList;b.remove("bd-hangable"),b.remove("hangable-outer")}),this}});var ca,da,ea="bd-jiya",fa="h-char.bd-jiya",ga="bd-consecutive",ha=' ',ba=O.find.matches;O.renderJiya=function(a){var a=a||J,b=O.find(a);return b.avoid("textarea, code, kbd, samp, pre, h-cs").avoid(fa).charify({avoid:!1,biaodian:A}).endAvoid().avoid("textarea, code, kbd, samp, pre, h-cs").replace(R.group.biaodian[0],B).replace(R.group.biaodian[1],B),b},S.extend(O.fn,{renderJiya:function(){return O.renderJiya(this.context),this},revertJiya:function(){return S.qsa("h-char.bd-jiya, h-cs.jiya-outer",this.context).forEach(function(a){var b=a.classList;b.remove("bd-jiya"),b.remove("jiya-outer")}),this}});var ia="textarea, code, kbd, samp, pre",ja=S.create("h-char","comb-liga");return S.extend(O,{isVowelCombLigaNormal:F(),isVowelICombLigaNormal:G(),isZhuyinCombLigaNormal:H(),isCombLigaNormal:G()(),substVowelCombLiga:I(O.TYPESET["display-as"]["comb-liga-vowel"]),substZhuyinCombLiga:I(O.TYPESET["display-as"]["comb-liga-zhuyin"]),substCombLigaWithPUA:I(O.TYPESET["display-as"]["comb-liga-pua"]),substInaccurateChar:function(a){var a=a||J,b=O.find(a);b.avoid(ia),O.TYPESET["inaccurate-char"].forEach(function(a){b.replace(new RegExp(a[0],"ig"),a[1])})}}),S.extend(O.fn,{"comb-liga-vowel":null,"comb-liga-vowel-i":null,"comb-liga-zhuyin":null,"inaccurate-char":null,substVowelCombLiga:function(){return this["comb-liga-vowel"]=O.substVowelCombLiga(this.context),this},substVowelICombLiga:function(){return this["comb-liga-vowel-i"]=O.substVowelICombLiga(this.context),this},substZhuyinCombLiga:function(){return this["comb-liga-zhuyin"]=O.substZhuyinCombLiga(this.context),this},substCombLigaWithPUA:function(){return O.isVowelCombLigaNormal()?O.isVowelICombLigaNormal()||(this["comb-liga-vowel-i"]=O.substVowelICombLiga(this.context)):this["comb-liga-vowel"]=O.substVowelCombLiga(this.context),O.isZhuyinCombLigaNormal()||(this["comb-liga-zhuyin"]=O.substZhuyinCombLiga(this.context)),this},revertVowelCombLiga:function(){try{this["comb-liga-vowel"].revert("all")}catch(a){}return this},revertVowelICombLiga:function(){try{this["comb-liga-vowel-i"].revert("all")}catch(a){}return this},revertZhuyinCombLiga:function(){try{this["comb-liga-zhuyin"].revert("all")}catch(a){}return this},revertCombLigaWithPUA:function(){try{this["comb-liga-vowel"].revert("all"),this["comb-liga-vowel-i"].revert("all"),this["comb-liga-zhuyin"].revert("all")}catch(a){}return this},substInaccurateChar:function(){return this["inaccurate-char"]=O.substInaccurateChar(this.context),this},revertInaccurateChar:function(){try{this["inaccurate-char"].revert("all")}catch(a){}return this}}),a.addEventListener("DOMContentLoaded",function(){var a;K.classList.contains("han-init")?O.init():(a=J.querySelector(".han-init-context"))&&(O.init=O(a).render())}),("undefined"==typeof b||b===!1)&&(a.Han=O),O});
\ No newline at end of file
diff --git a/lib/algolia-instant-search/instantsearch.min.css b/lib/algolia-instant-search/instantsearch.min.css
deleted file mode 100644
index 590f6f9..0000000
--- a/lib/algolia-instant-search/instantsearch.min.css
+++ /dev/null
@@ -1 +0,0 @@
-/*! instantsearch.js 1.5.0 | © Algolia Inc. and other contributors; Licensed MIT | github.com/algolia/instantsearch.js */.ais-search-box--powered-by{font-size:.8em;text-align:right;margin-top:2px}.ais-search-box--powered-by-link{display:inline-block;width:45px;height:16px;text-indent:101%;overflow:hidden;white-space:nowrap;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAF0AAAAgCAYAAABwzXTcAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjVlhTJlAAAIJElEQVRoQ+1Za2xURRTugqJVEBAlhICBRFEQeRfodssqiDZaS8vu3dsXVlAbxReJwVfAoqJ/sBqE3S1IgqgBrY9EQ6KJiUAokUfpvQUKogIBlKbyEEUolNL6ndkzw9129+72YaFJv+Rk737nzMyZ756dmXs3oQtd6EJ7oaioqJvX603kr1cl8vPzb+TLzo3MzMx+Xk0r03y+0x5Ne4vpqwoohjeQ4yHYcaYiwcGfVz+ysrIGQfBGsqtWdE37lvLz+nwnmVLIyMjoBd9GxPwL/wKmOw4zCgr6YPBNSGILEviYaVt0dtHxK/DK/BFXq2lad3Z1DJDUqzIBYZrmYldUdLToI4r29HCWmLozUPmEK2AUOgOmRysttRXKTnSPxzMWfD37q0B13DJTUFBwPQatlgKKJJAsu6Oio0VPDlQsTgmajWEWMOaxOyLsRCdQccGez87OHshUxwAJzZbiIYFKkaSmXdJ1fRiHRERHi+4MGk+mBMwXnSVGPj7nQPS3qeLZHRGxRL9ScCAxk8Ur92Rnj5VCItHlHBMRrRDdQRXl8/nG4eaOp5uKz57sC8OkoDEkOWCO5K8CtJRgabnT6TfuS/ZXOKet2duPXVHRDqI7svLz+yPnJCxH07ANuGFDiQ+5WwF0NkWJrOuziEOCm5n7Jy8v7yYRGAHxio4kEyHuK+j3oIyXRr8o2G/wrUXMGIonQbFe18Kq3Ms39By/orw3KnsxKr06fHkxLjkDxubkEuNhMVAE2Ikuni98vsMYtwafQaYVwLvQ9qg1X2mI/xXzyuXQlgGNP+NO/kxLS7tOcOhMda7rz4rACIhH9Ky8vEGY+G4ZZ2ua9hi1gbhvQvBDScu3DUC1j8X1YSV0wDgLsX9m7tJl3lw9onRPDzGoBTFFp1NLyL+WaQUU5GSZG+IuIeYCrhskJ3ivN6o+EYFJDuCOaNBipuXGepI73gMq4k8pluh0E5GsXLoo8U1IMgPLyhDYYExqNL6/Lv1S9FT/7sHOkp0TXCvNYbgBp0hUfB6A2D6rsKn+7YMh9nvOoHkxJL6xLiGhMSzXtoiOfHqDn41ch5MmFC+O1ihEtDnP7c5QHDeJDTSQx8QGTH4E0wLwLWVfo0fXU5kOQyzR0ecL0o/EvoI1O95ZlzcpugAmiKVjKwu+1f2+0Yc9As5VZb3gX4JfQn9XwEyH+HUi1m/kc4hAW0S3A3J9TeaNOWQybQ8aEA0O8IDbmFagM6zsFP5PmA5DTNF5WUH7c7QZMR2GaKK7Ssw0FvyMe2XlIKYVUkrMR4Q/YB6b4t85HKIv5Pj9CY2Xq/3/Ep2qX+aN4prPtD0w2ftlI0z2GaatsJ5qztLPinkFO9Fzc3P7ghfrH/r5nulmiCY6qnhVSEQz4gkKIvvJD2sQS8yqfb3wifWeuN2jOazdRIewibQszszJuYO0yMnJuUXmjbZFHGYPTHAdN7iQOWtWxKMXfPNkx5FujJ3oEHOk9KGfpUw3QzTRsWHuCAloZDFlQaMDN+Ugqrocy8tUJulG/Mg34lGm2iR6YWHhteDnIq8diLmo8gwV0zH5HTGxRcddu1kOhg6PotGCKKbWdVg5N1eIIfpo1VbT3mW6GWxE30cCulbscjOlkLRsb7+UQGUuVOvGlABu0JdC9IChCqS1olNlg9+ocqOY0PG2FrHi1YHi4xJd15+2NorTaLO9h7sQsBOdTieqLX5VTDdD9OXFLCMBm26MdqANV7QpMXWm2iK69VS1AXmm0AmGfOIX4PUmS398omPjFME0oKZtsTPEqDM22qljJcFOdLTtDv4E+2vkM0BT2FR6sRAwaJQyZYuJ2Gyx5NSj2htSPzDpiVGg1aLzfga+mqqeaQX6L0HmjRh70a27Lib5KdNRgZjelsSq3W73NewKEx1xYaITwJVY/IuYDkM00Scv2zGOBETF1+MkM4npqIDga8RNwhMqUwKtFt3n+13wmlbGVBhaJDom9o4MxoQfYtoW6PQLNYDXqx65cX2r4n2+j5hWoN0e/BmOoeUpgDFH0qsFXA+FPQ5/lezDKjoBoq8Ta3TQ/MPl3zWK6XBAOMQtCglu1qcsN8NeScvcIV5d01cadqIjF9o8qd0p+rODaYW4RedBjnBwjbVq7QChPJYBPmda9Ef9sO88fC/NnDnzLnYL4MFqBvk4xt6aiO5ebfSBoLu5gmtxXZzsr0hyBXb1xRFxYHKwwivXfrJkv/EyN1VAn4tk/8hvPebyIK3J5ItR6Qssee1Ageh4drkbn7dT4fC8ZL/RRUeDqZZA2zeIVqAd7eSnud05JKEee3GtnsyEYUlhlwK4MWi3HiZeOVjsF/g+VN+biE6gN4nOYOV3UtiIhvO5028+xU3CgD5vg7B/yzFwXSf3FzvR6Y9s+Lar3GwMbW1Ex7kbHW0iw12bwHRcQPILVVtdn8Y0wYF+52LwChhV+3PMN8N0TARVQu9bJtKLMFAO5HGvSh7VFIpsikaHeNQPGt9A5JMkNG2asP2wJfSuhgMjwpOdPQp5fY0xTiD/vUxL0X8Q88JphWkF8Q5K1+dj7hVoby2Yi+Bq0G4nPkvRdjo36XiI5aaF/zNiUur9DN0Mpu3gmFx8JHH8inKxRLQUcmlpKWhesN4Zc+b0aukcrwSivuynR2lUkHjHjqo53lpBumABKjcRolbBluJ6FpaWKVTNWJ4eQLXQXnD5DwJ852ZdaAsgsvoTwM5wU1Z3hp9spwCqeigELcbS8RPE/QvX9M6iAd/rcH0YtrbJptyFdoYD1dwjPT39hnifD7rQhTiRkPAfxnOcWpCmnRwAAAAASUVORK5CYII=);background-repeat:no-repeat;background-size:contain;vertical-align:middle}.ais-pagination--item{display:inline-block;padding:3px}.ais-range-slider--value,.ais-range-slider--value-sub{font-size:.8em;padding-top:15px}.ais-pagination--item__disabled{visibility:hidden}.ais-hierarchical-menu--list__lvl1,.ais-hierarchical-menu--list__lvl2{margin-left:10px}.ais-range-slider--target{position:relative;direction:ltr;background:#F3F4F7;height:6px;margin-top:2em;margin-bottom:2em}.ais-range-slider--base{height:100%;position:relative;z-index:1;border-top:1px solid #DDD;border-bottom:1px solid #DDD;border-left:2px solid #DDD;border-right:2px solid #DDD}.ais-range-slider--origin{position:absolute;right:0;top:0;left:0;bottom:0}.ais-range-slider--connect{background:#46AEDA}.ais-range-slider--background{background:#F3F4F7}.ais-range-slider--handle{width:20px;height:20px;position:relative;z-index:1;background:#FFF;border:1px solid #46AEDA;border-radius:50%;cursor:pointer}.ais-range-slider--handle-lower{left:-10px;bottom:7px}.ais-range-slider--handle-upper{right:10px;bottom:7px}.ais-range-slider--tooltip{position:absolute;background:#FFF;top:-22px;font-size:.8em}.ais-range-slider--pips{box-sizing:border-box;position:absolute;height:3em;top:100%;left:0;width:100%}.ais-range-slider--value{width:40px;position:absolute;text-align:center;margin-left:-20px}.ais-range-slider--marker{position:absolute;background:#DDD;margin-left:-1px;width:1px;height:5px}.ais-range-slider--marker-sub{background:#DDD;width:2px;margin-left:-2px;height:13px}.ais-range-slider--marker-large{background:#DDD;width:2px;margin-left:-2px;height:12px}.ais-star-rating--star,.ais-star-rating--star__empty{display:inline-block;width:1em;height:1em}.ais-range-slider--marker-large:first-child{margin-left:0}.ais-star-rating--item{vertical-align:middle}.ais-star-rating--item__active{font-weight:700}.ais-star-rating--star:before{content:'\2605';color:#FBAE00}.ais-star-rating--star__empty:before{content:'\2606';color:#FBAE00}.ais-star-rating--link__disabled .ais-star-rating--star:before,.ais-star-rating--link__disabled .ais-star-rating--star__empty:before{color:#C9C9C9}.ais-root__collapsible .ais-header{cursor:pointer}.ais-root__collapsed .ais-body,.ais-root__collapsed .ais-footer{display:none}
\ No newline at end of file
diff --git a/lib/algolia-instant-search/instantsearch.min.js b/lib/algolia-instant-search/instantsearch.min.js
deleted file mode 100644
index 2bd5d59..0000000
--- a/lib/algolia-instant-search/instantsearch.min.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/*! instantsearch.js 1.5.0 | © Algolia Inc. and other contributors; Licensed MIT | github.com/algolia/instantsearch.js */
-!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.instantsearch=t():e.instantsearch=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}var o=n(1),i=r(o);e.exports=i["default"]},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0}),n(2),n(3);var o=n(4),i=r(o),a=n(5),s=r(a),u=n(99),l=r(u),c=n(222),f=r(c),p=n(400),d=r(p),h=n(404),m=r(h),v=n(408),g=r(v),y=n(411),b=r(y),_=n(416),C=r(_),w=n(420),x=r(w),P=n(422),E=r(P),R=n(424),S=r(R),O=n(425),T=r(O),k=n(432),N=r(k),j=n(437),A=r(j),M=n(439),F=r(M),I=n(443),D=r(I),U=n(444),L=r(U),H=n(447),V=r(H),B=n(450),q=r(B),W=n(220),K=r(W),Q=(0,i["default"])(s["default"]);Q.widgets={clearAll:f["default"],currentRefinedValues:d["default"],hierarchicalMenu:m["default"],hits:g["default"],hitsPerPageSelector:b["default"],menu:C["default"],refinementList:x["default"],numericRefinementList:E["default"],numericSelector:S["default"],pagination:T["default"],priceRanges:N["default"],searchBox:A["default"],rangeSlider:F["default"],sortBySelector:D["default"],starRating:L["default"],stats:V["default"],toggle:q["default"]},Q.version=K["default"],Q.createQueryString=l["default"].url.getQueryStringFromState,t["default"]=Q},function(e,t){"use strict";Object.freeze||(Object.freeze=function(e){if(Object(e)!==e)throw new TypeError("Object.freeze can only be called on Objects.");return e})},function(e,t){"use strict";var n={};if(!Object.setPrototypeOf&&!n.__proto__){var r=Object.getPrototypeOf;Object.getPrototypeOf=function(e){return e.__proto__?e.__proto__:r.call(Object,e)}}},function(e,t){"use strict";function n(e){var t=function(){for(var t=arguments.length,n=Array(t),o=0;t>o;o++)n[o]=arguments[o];return new(r.apply(e,[null].concat(n)))};return t.__proto__=e,t.prototype=e.prototype,t}var r=Function.prototype.bind;e.exports=n},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function s(){return"#"}function u(e,t){if(!t.getConfiguration)return e;var n=t.getConfiguration(e);return(0,y["default"])({},e,n,function(e,t){return Array.isArray(e)?(0,_["default"])(e,t):void 0})}Object.defineProperty(t,"__esModule",{value:!0});var l=Object.assign||function(e){for(var t=1;te;e+=2){var t=re[e],n=re[e+1];t(n),re[e]=void 0,re[e+1]=void 0}G=0}function v(){try{var e=n(11);return Q=e.runOnLoop||e.runOnContext,f()}catch(t){return h()}}function g(e,t){var n=this,r=n._state;if(r===se&&!e||r===ue&&!t)return this;var o=new this.constructor(b),i=n._result;if(r){var a=arguments[r-1];X(function(){F(r,o,a,i)})}else N(n,o,e,t);return o}function y(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(b);return S(n,e),n}function b(){}function _(){return new TypeError("You cannot resolve a promise with itself")}function C(){return new TypeError("A promises callback cannot return that same promise.")}function w(e){try{return e.then}catch(t){return le.error=t,le}}function x(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function P(e,t,n){X(function(e){var r=!1,o=x(n,t,function(n){r||(r=!0,t!==n?S(e,n):T(e,n))},function(t){r||(r=!0,k(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,k(e,o))},e)}function E(e,t){t._state===se?T(e,t._result):t._state===ue?k(e,t._result):N(t,void 0,function(t){S(e,t)},function(t){k(e,t)})}function R(e,t,n){t.constructor===e.constructor&&n===oe&&constructor.resolve===ie?E(e,t):n===le?k(e,le.error):void 0===n?T(e,t):s(n)?P(e,t,n):T(e,t)}function S(e,t){e===t?k(e,_()):a(t)?R(e,t,w(t)):T(e,t)}function O(e){e._onerror&&e._onerror(e._result),j(e)}function T(e,t){e._state===ae&&(e._result=t,e._state=se,0!==e._subscribers.length&&X(j,e))}function k(e,t){e._state===ae&&(e._state=ue,e._result=t,X(O,e))}function N(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+se]=n,o[i+ue]=r,0===i&&e._state&&X(j,e)}function j(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,a=0;aa;a++)N(r.resolve(e[a]),void 0,t,n);return o}function L(e){var t=this,n=new t(b);return k(n,e),n}function H(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function V(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function B(e){this._id=he++,this._state=void 0,this._result=void 0,this._subscribers=[],b!==e&&("function"!=typeof e&&H(),this instanceof B?I(this,e):V())}function q(e,t){this._instanceConstructor=e,this.promise=new e(b),Array.isArray(t)?(this._input=t,this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?T(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&T(this.promise,this._result))):k(this.promise,this._validationError())}function W(){var e;if("undefined"!=typeof o)e=o;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;n&&"[object Promise]"===Object.prototype.toString.call(n.resolve())&&!n.cast||(e.Promise=me)}var K;K=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var Q,$,z,Y=K,G=0,X=function(e,t){re[G]=e,re[G+1]=t,G+=2,2===G&&($?$(m):z())},J="undefined"!=typeof window?window:void 0,Z=J||{},ee=Z.MutationObserver||Z.WebKitMutationObserver,te="undefined"!=typeof e&&"[object process]"==={}.toString.call(e),ne="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,re=new Array(1e3);z=te?c():ee?p():ne?d():void 0===J?v():h();var oe=g,ie=y,ae=void 0,se=1,ue=2,le=new A,ce=new A,fe=D,pe=U,de=L,he=0,me=B;B.all=fe,B.race=pe,B.resolve=ie,B.reject=de,B._setScheduler=u,B._setAsap=l,B._asap=X,B.prototype={constructor:B,then:oe,"catch":function(e){return this.then(null,e)}};var ve=q;q.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},q.prototype._enumerate=function(){for(var e=this.length,t=this._input,n=0;this._state===ae&&e>n;n++)this._eachEntry(t[n],n)},q.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===ie){var o=w(e);if(o===oe&&e._state!==ae)this._settledAt(e._state,t,e._result);else if("function"!=typeof o)this._remaining--,this._result[t]=e;else if(n===me){var i=new n(b);R(i,e,o),this._willSettleAt(i,t)}else this._willSettleAt(new n(function(t){t(e)}),t)}else this._willSettleAt(r(e),t)},q.prototype._settledAt=function(e,t,n){var r=this.promise;r._state===ae&&(this._remaining--,e===ue?k(r,n):this._result[t]=n),0===this._remaining&&T(r,this._result)},q.prototype._willSettleAt=function(e,t){var n=this;N(e,void 0,function(e){n._settledAt(se,t,e)},function(e){n._settledAt(ue,t,e)})};var ge=W,ye={Promise:me,polyfill:ge};n(12).amd?(r=function(){return ye}.call(t,n,t,i),!(void 0!==r&&(i.exports=r))):"undefined"!=typeof i&&i.exports?i.exports=ye:"undefined"!=typeof this&&(this.ES6Promise=ye),ge()}).call(this)}).call(t,n(9),function(){return this}(),n(10)(e))},function(e,t){function n(){l=!1,a.length?u=a.concat(u):c=-1,u.length&&r()}function r(){if(!l){var e=setTimeout(n);l=!0;for(var t=u.length;t;){for(a=u,u=[];++c1)for(var n=1;n=u.hosts[e.hostType].length&&(d||!h)?u._promise.reject(r):(u.hostIndex[e.hostType]=++u.hostIndex[e.hostType]%u.hosts[e.hostType].length,r instanceof c.RequestTimeout?v():(d||(f=1/0),t(n,s)))}function v(){return u.hostIndex[e.hostType]=++u.hostIndex[e.hostType]%u.hosts[e.hostType].length,s.timeout=u.requestTimeout*(f+1),t(n,s)}var g;if(u._useCache&&(g=e.url),u._useCache&&r&&(g+="_body_"+s.body),u._useCache&&a&&void 0!==a[g])return i("serving response from cache"),u._promise.resolve(JSON.parse(a[g]));if(f>=u.hosts[e.hostType].length)return!h||d?(i("could not get any response"),u._promise.reject(new c.AlgoliaSearchError("Cannot connect to the AlgoliaSearch API. Send an email to support@algolia.com to report and resolve the issue. Application id was: "+u.applicationID))):(i("switching to fallback"),f=0,s.method=e.fallback.method,s.url=e.fallback.url,s.jsonBody=e.fallback.body,s.jsonBody&&(s.body=l(s.jsonBody)),o=u._computeRequestHeaders(),s.timeout=u.requestTimeout*(f+1),u.hostIndex[e.hostType]=0,d=!0,t(u._request.fallback,s));var y=u.hosts[e.hostType][u.hostIndex[e.hostType]]+s.url,b={body:s.body,jsonBody:s.jsonBody,method:s.method,headers:o,timeout:s.timeout,debug:i};return i("method: %s, url: %s, headers: %j, timeout: %d",b.method,y,b.headers,b.timeout),n===u._request.fallback&&i("using fallback"),n.call(u,y,b).then(p,m)}var r,o,i=n(42)("algoliasearch:"+e.url),a=e.cache,u=this,f=0,d=!1,h=u._useFallback&&u._request.fallback&&e.fallback;this.apiKey.length>p&&void 0!==e.body&&void 0!==e.body.params?(e.body.apiKey=this.apiKey,o=this._computeRequestHeaders(!1)):o=this._computeRequestHeaders(),void 0!==e.body&&(r=l(e.body)),i("request start");var m=t(u._request,{url:e.url,method:e.method,body:r,jsonBody:e.body,timeout:u.requestTimeout*(f+1)});return e.callback?void m.then(function(t){s(function(){e.callback(null,t)},u._setTimeout||setTimeout)},function(t){s(function(){e.callback(t)},u._setTimeout||setTimeout)}):m},_getSearchParams:function(e,t){if(void 0===e||null===e)return t;for(var n in e)null!==n&&void 0!==e[n]&&e.hasOwnProperty(n)&&(t+=""===t?"":"&",t+=n+"="+encodeURIComponent("[object Array]"===Object.prototype.toString.call(e[n])?l(e[n]):e[n]));return t},_computeRequestHeaders:function(e){var t=n(15),r={"x-algolia-agent":this._ua,"x-algolia-application-id":this.applicationID};return e!==!1&&(r["x-algolia-api-key"]=this.apiKey),this.userToken&&(r["x-algolia-usertoken"]=this.userToken),this.securityTags&&(r["x-algolia-tagfilters"]=this.securityTags),this.extraHeaders&&t(this.extraHeaders,function(e){r[e.name]=e.value}),r}},r.prototype.Index.prototype={clearCache:function(){this.cache={}},addObject:function(e,t,n){var r=this;return 1!==arguments.length&&"function"!=typeof t||(n=t,t=void 0),this.as._jsonRequest({method:void 0!==t?"PUT":"POST",url:"/1/indexes/"+encodeURIComponent(r.indexName)+(void 0!==t?"/"+encodeURIComponent(t):""),body:e,hostType:"write",callback:n})},addObjects:function(e,t){var r=n(34),o="Usage: index.addObjects(arrayOfObjects[, callback])";if(!r(e))throw new Error(o);for(var i=this,a={requests:[]},s=0;sa&&(t=a),"published"!==e.status?c._promise.delay(t).then(n):e})}function r(e){s(function(){t(null,e)},c._setTimeout||setTimeout)}function o(e){s(function(){t(e)},c._setTimeout||setTimeout)}var i=100,a=5e3,u=0,l=this,c=l.as,f=n();return t?void f.then(r,o):f},clearIndex:function(e){var t=this;return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(t.indexName)+"/clear",hostType:"write",callback:e})},getSettings:function(e){var t=this;return this.as._jsonRequest({method:"GET",url:"/1/indexes/"+encodeURIComponent(t.indexName)+"/settings",hostType:"read",callback:e})},setSettings:function(e,t){var n=this;return this.as._jsonRequest({method:"PUT",url:"/1/indexes/"+encodeURIComponent(n.indexName)+"/settings",hostType:"write",body:e,callback:t})},listUserKeys:function(e){var t=this;return this.as._jsonRequest({method:"GET",url:"/1/indexes/"+encodeURIComponent(t.indexName)+"/keys",hostType:"read",callback:e})},getUserKeyACL:function(e,t){var n=this;return this.as._jsonRequest({method:"GET",url:"/1/indexes/"+encodeURIComponent(n.indexName)+"/keys/"+e,hostType:"read",callback:t})},deleteUserKey:function(e,t){var n=this;return this.as._jsonRequest({method:"DELETE",url:"/1/indexes/"+encodeURIComponent(n.indexName)+"/keys/"+e,hostType:"write",callback:t})},addUserKey:function(e,t,r){var o=n(34),i="Usage: index.addUserKey(arrayOfAcls[, params, callback])";if(!o(e))throw new Error(i);1!==arguments.length&&"function"!=typeof t||(r=t,t=null);var a={acl:e};return t&&(a.validity=t.validity,a.maxQueriesPerIPPerHour=t.maxQueriesPerIPPerHour,a.maxHitsPerQuery=t.maxHitsPerQuery,a.description=t.description,t.queryParameters&&(a.queryParameters=this.as._getSearchParams(t.queryParameters,"")),a.referers=t.referers),this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/keys",body:a,hostType:"write",callback:r})},addUserKeyWithValidity:u(function(e,t,n){return this.addUserKey(e,t,n)},a("index.addUserKeyWithValidity()","index.addUserKey()")),updateUserKey:function(e,t,r,o){var i=n(34),a="Usage: index.updateUserKey(key, arrayOfAcls[, params, callback])";if(!i(t))throw new Error(a);2!==arguments.length&&"function"!=typeof r||(o=r,r=null);var s={acl:t};return r&&(s.validity=r.validity,s.maxQueriesPerIPPerHour=r.maxQueriesPerIPPerHour,s.maxHitsPerQuery=r.maxHitsPerQuery,s.description=r.description,r.queryParameters&&(s.queryParameters=this.as._getSearchParams(r.queryParameters,"")),s.referers=r.referers),this.as._jsonRequest({method:"PUT",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/keys/"+e,body:s,hostType:"write",callback:o})},_search:function(e,t,n){return this.as._jsonRequest({cache:this.cache,method:"POST",url:t||"/1/indexes/"+encodeURIComponent(this.indexName)+"/query",body:{params:e},hostType:"read",fallback:{method:"GET",url:"/1/indexes/"+encodeURIComponent(this.indexName),body:{params:e}},callback:n})},as:null,indexName:null,typeAheadArgs:null,typeAheadValueOption:null}},function(e,t,n){"use strict";function r(e,t){var r=n(15),o=this;"function"==typeof Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):o.stack=(new Error).stack||"Cannot get a stacktrace, browser is too old",this.name=this.constructor.name,this.message=e||"Unknown error",t&&r(t,function(e,t){o[t]=e})}function o(e,t){function n(){var n=Array.prototype.slice.call(arguments,0);"string"!=typeof n[0]&&n.unshift(t),r.apply(this,n),this.name="AlgoliaSearch"+e+"Error"}return i(n,r),n}var i=n(7);i(r,Error),e.exports={AlgoliaSearchError:r,UnparsableJSON:o("UnparsableJSON","Could not parse the incoming response as JSON, see err.more for details"),RequestTimeout:o("RequestTimeout","Request timedout before getting a response"),Network:o("Network","Network issue, see err.more for details"),JSONPScriptFail:o("JSONPScriptFail","
-
-
-
-
-
-
-
-
-
- 无所欲无所忧,无心者无所求,饱食而遨游,泛若不系之舟
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/page/3/index.html b/page/3/index.html
deleted file mode 100644
index ebcaeb5..0000000
--- a/page/3/index.html
+++ /dev/null
@@ -1,1800 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 无所欲无所忧,无心者无所求,饱食而遨游,泛若不系之舟
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/page/4/index.html b/page/4/index.html
deleted file mode 100644
index 87f9354..0000000
--- a/page/4/index.html
+++ /dev/null
@@ -1,647 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 无所欲无所忧,无心者无所求,饱食而遨游,泛若不系之舟
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/scaffolds/draft.md b/scaffolds/draft.md
new file mode 100644
index 0000000..498e95b
--- /dev/null
+++ b/scaffolds/draft.md
@@ -0,0 +1,4 @@
+---
+title: {{ title }}
+tags:
+---
diff --git a/scaffolds/page.md b/scaffolds/page.md
new file mode 100644
index 0000000..f01ba3c
--- /dev/null
+++ b/scaffolds/page.md
@@ -0,0 +1,4 @@
+---
+title: {{ title }}
+date: {{ date }}
+---
diff --git a/scaffolds/post.md b/scaffolds/post.md
new file mode 100644
index 0000000..1f9b9a4
--- /dev/null
+++ b/scaffolds/post.md
@@ -0,0 +1,5 @@
+---
+title: {{ title }}
+date: {{ date }}
+tags:
+---
diff --git a/CNAME b/source/CNAME
similarity index 100%
rename from CNAME
rename to source/CNAME
diff --git "a/source/_posts/2016-\344\271\214\345\255\231\346\270\270\350\256\260-D1.md" "b/source/_posts/2016-\344\271\214\345\255\231\346\270\270\350\256\260-D1.md"
new file mode 100644
index 0000000..9373395
--- /dev/null
+++ "b/source/_posts/2016-\344\271\214\345\255\231\346\270\270\350\256\260-D1.md"
@@ -0,0 +1,28 @@
+---
+title: 2016 乌孙游记 D1 入山
+date: 2019-08-09 00:51:28
+tags:
+---
+早上在酒店的高床软枕赖到11点,期待已久的伟大征程终于要开始了,起床后收拾东西,去下面吃了个饭,剩余的队员马上就到了,大巴也马上就到,12.30左右,出发了。
+
+弯弯曲曲的山路壮观优美的边疆,草原,羊群,弯曲的白带般的河流,小木屋和牧马人,远远的雪山和白云,真的很漂亮,然后下午四点,到了琼库石台村,乌孙古道的入口,车在森林的入口停下了,河水静静的流出来,两侧是高山,太阳温暖明媚,芳草鲜美,落叶薄盖在上面。稍作休整,两车汇合,就开始了。
+
+
+
+走几步就是原始森林,真的很原始的森林,满足人一切幻想的森林,参天的松树,青苔长满朽木白色的河水哗啦啦的冲刷着石头,阳光穿过缝隙,撒在草地上,树根盘根错节,到处都是,牧羊人骑着马从我们旁边走过,别扭的说着:你好。沿着峡谷走走走,走走走,走过悬崖,乱石,羊肠小道,木桥和草场,路越走越不平台,雪山也越来越近天色越来越晚,天上的云越来越厚,越来越低,感觉要下雨。
+
+
+
+休息中的鱼, 我们亲爱的协作
+
+
+
+走过草场之后,细拉拉的开始滴,然后越来越大,众人披雨衣的,穿冲锋衣的,赶快套上,一路不停,大步速走,光线也不好了,也怕淋雨,收起了相机。
+
+
+
+走过一个乱石的路,迎面有灯光,两个小木屋,有人在这里扎营,我们也决定扎在旁边,坡度还行,虽然不是很平坦,我们两个赶快扎帐篷,刚刚搞完,天就黑透了,赶快烧火做饭,热水泡囊,榨菜当调料。等水烧开的时候,后续队伍慢慢跟上了,他们好可怜,又黑又冷又饿,营地也不够好了。风大了,只穿了抓绒的我,和只有冲锋衣的仗剑都冻的瑟瑟发抖,盛好饭,我们缩进帐篷里面吃,顿时感觉到了温暖,喝点热汤感觉就是不一样。等我们吃完后,我看到收队走四方在慢慢的搅拌着面条汤,有个帐篷的人还在打火,我们大概是最早吃完的吧。
+
+话说协作领队们的日子好奢侈,我见到他们喝饮料,还带了花菜和番茄,好像还有酒,我们热水泡馕的情何以堪。但是多一点沉一点,水分多的越少越好,我们是菜鸟,第一次重装走户外,谨慎点,不能像他们那样背。
+
+滚回自己帐篷,地面冰凉的。铺开防潮垫才感觉到点暖意,脱掉冰冷厚重的登山鞋,脚好受多了,LOWA, 已经最好的徒步鞋了。钻进睡袋,啊...... NEVER BETTER。舒展下身体,躺下来,感觉就像来了天堂,酸痛累的身体解放了,躺进了温暖的睡袋,帐篷外,风在吹。
\ No newline at end of file
diff --git "a/2019/08/09/2016-\344\271\214\345\255\231\346\270\270\350\256\260-D1/qiongku_shitai.png" "b/source/_posts/2016-\344\271\214\345\255\231\346\270\270\350\256\260-D1/qiongku_shitai.png"
similarity index 100%
rename from "2019/08/09/2016-\344\271\214\345\255\231\346\270\270\350\256\260-D1/qiongku_shitai.png"
rename to "source/_posts/2016-\344\271\214\345\255\231\346\270\270\350\256\260-D1/qiongku_shitai.png"
diff --git "a/2019/08/09/2016-\344\271\214\345\255\231\346\270\270\350\256\260-D1/wusun_caoyuan.png" "b/source/_posts/2016-\344\271\214\345\255\231\346\270\270\350\256\260-D1/wusun_caoyuan.png"
similarity index 100%
rename from "2019/08/09/2016-\344\271\214\345\255\231\346\270\270\350\256\260-D1/wusun_caoyuan.png"
rename to "source/_posts/2016-\344\271\214\345\255\231\346\270\270\350\256\260-D1/wusun_caoyuan.png"
diff --git "a/2019/08/09/2016-\344\271\214\345\255\231\346\270\270\350\256\260-D1/wusun_man.png" "b/source/_posts/2016-\344\271\214\345\255\231\346\270\270\350\256\260-D1/wusun_man.png"
similarity index 100%
rename from "2019/08/09/2016-\344\271\214\345\255\231\346\270\270\350\256\260-D1/wusun_man.png"
rename to "source/_posts/2016-\344\271\214\345\255\231\346\270\270\350\256\260-D1/wusun_man.png"
diff --git "a/2019/08/09/2016-\344\271\214\345\255\231\346\270\270\350\256\260-D1/wusun_path.png" "b/source/_posts/2016-\344\271\214\345\255\231\346\270\270\350\256\260-D1/wusun_path.png"
similarity index 100%
rename from "2019/08/09/2016-\344\271\214\345\255\231\346\270\270\350\256\260-D1/wusun_path.png"
rename to "source/_posts/2016-\344\271\214\345\255\231\346\270\270\350\256\260-D1/wusun_path.png"
diff --git "a/source/_posts/2016-\344\271\214\345\255\231\346\270\270\350\256\260-D2.md" "b/source/_posts/2016-\344\271\214\345\255\231\346\270\270\350\256\260-D2.md"
new file mode 100644
index 0000000..eb9ab9c
--- /dev/null
+++ "b/source/_posts/2016-\344\271\214\345\255\231\346\270\270\350\256\260-D2.md"
@@ -0,0 +1,39 @@
+---
+title: 2016 乌孙游记 D2 风雪中的渡劫
+date: 2019-08-10 01:33:38
+tags:
+---
+
+这是一篇补记的,昨天实在没办法。
+
+起床以后我们开始收拾帐篷,煮早餐,燕麦片,有两个帐篷拖拖拉拉,都吃完了,才起床。
+
+沿着河谷走,走过一个木桥,我感觉遇到了一处更适合露营的地方,地势更平坦,离水源更近,昨天还是因为下雨+天黑吧,领队决定临时扎营。
+
+
+
+道路从原来的平坦到开始爬山了,人开始喘气开始累,有些人开始商量着租马,牧民赶着羊群骑着马走过,还有硕大强壮的牧羊犬。翻过一个小山转个弯,沿着河谷持续上升地势,队伍拖的点长,我们等后续队伍的时候,后面山谷升起一片白色的烟,我们笑称有妖气。领队说云来了就要下雨,快走。
+
+
+
+云追上的时候开始下小雨,能见度降到十米吧,也没法拍照了。走了一段,彼此不见前后,雾里面互相呼喊着通报位置,然后我发现前面我跟着的人停止了,在等后面的。等几分钟之后,实在不想在雨里站着,软壳并不防雨,穿上了我的破迪卡侬雨衣,就像举行一个仪式一样,太麻烦。不敢贸然前进,就用对讲机呼叫领队,请求指示“是否沿着河床继续前进”,领队说等着,每个人前后相距两三米。然后我只好继续等着。一会后队上来,领队领着向旁边山坡攀升,我们开始偏离河床,庆幸当时呼叫了领队,要是往前直走就不知道什么地方了。大雾天山里重装,一个人走偏了,很危险。
+
+我们走的确切说不是路,只是有铁杆指示方向。一根插在地上的铁棍,上面有两道白杠,相距一两百米一根,构成了道路的指示,沿着标杆就是牧道,牧羊人也沿着这路前进,我们跟着的牧羊人沿着山坡持续的攀升中。然后牧民慢慢的甩开了我们不见了。能见度慢慢的好了一些,天也开始雨转雪。我此时穿着速干裤和抓绒衣,雨衣小了,并不能遮挡住我的全身,只能紧紧过着我的上身和背包,雪化成水,沿着雨衣汇集到我腹部下面,我的裤子被打湿了,此时已经顾不得了,只能继续前进。不能换衣服,不能频繁的打开背包,否则进水了,我这一包装备和电子产品可就挂了。
+
+在一个山坡上,满天飞雪里面,20分钟,站着或者半靠着解决了午饭,继续前进,这是下午的最后一次长时间休息,天气不好,只能尽快前进。沿着标杆的牧道,我们走过一座山坡又一座山坡,穿过了能吞没膝盖的沼泽,攀升,继续攀升,继续攀升。终于来到了一个很陡的山坡,我遇到了道夫,他说这里需要爬400米,旁边有牧民在出租马,我当时心里还鄙视了下, 400米而已,谁会为这个租马呢。然而噩梦就是这里开始的,400米,真的不是一个小数字。一个小转角之后,抬头是一个很陡很陡的山坡,角度在60到75左右,看不到最上面,只有几个人慢慢的S型向上。走吧,小步,慢走,不能停,走走走,走走走,不敢瞭望上面,只能盯着这马粪积雪碎石的路一步一步走,黄色的尽头处就转向,保持节奏。有些地方泥泞了,很滑很滑,必须好好控制重心,不敢想象在这种陡峭60度左右的山坡上,背着20公斤的背包滑倒了会是什么结果,滚下去又是什么结果。走走走,心跳太快了就稍微站立30秒左右,再走,再走,感觉自己终于终于走到最上面,转过去发现还有一个新的山坡,不能绝望,咬牙继续,慢慢挪。
+
+最后终于爬到了最上面,我确定是最上面,没有更高的地方了,山下租的马匹在山口卸货, 领队胡杨在旁边换衣服。我以为最难过的已经过去了,因为剩下的就是下坡。风异常的大了起来,这个在爬坡的一侧是没有的,我的裤子越来越湿,那里冰冷冰冷的,我当时在想,如果我成了太监,我会不会因此性情大变呢?躯干核心还是很暖和的,拜雨衣所赐。我想拍一张,但是风裹着雪,吹的很冷很冷,眼睛很难睁开,相机在包里,取出来很麻烦,我放弃了拍照,跟着领队往下走。走了一百米,见到一个牧民很着急的对着坡下的人比划和喊,但是不太明白什么意思。三个指示标杆把前进方向指向右边,一些人正在走,但是很奇怪,那不像一个常走的路,太整洁的碎石不像常年被踩,我问领队,领队看了看GPS,认为道路应该向左,虽然没有指示标,但是牧民的意思和GPS都证明那三个标杆错的,向左,继续下降。风一阵阵携裹着雪呼啸而来,吹的时候我们重心不稳,好多次只能站着不动,稳住重心挺住,等风稍停再继续前进。下了一个坡之后,我见到仗剑出现在我身后,瞬间就高兴都笑出声了,虽然当时估计已经很难有笑的样子了,我真的很担心他走错了方向,一个人如果看不到前面的人,也没有GPS,很可能选择走右边,我隐隐感觉到,那里可能出事。但是当时的情况,已经顾不得很多了,他跟着,我就不操心其他人了。
+
+一会对讲机里,收队走四方喊“白马不行了”。白马是我们的女队员,在穿过沼泽地的时候,我就感觉她走的很勉强。果然爬400米对她实在是没可能,先头部队的我们也没办法停留,没有能停留的地方,领队几次喊就地扎营都放弃了,最后在一个还算平坦的河边说扎营,我脱掉了把我和背包绷在一起的雨衣,瞬间寒风刺骨,迅速失温,赶快取出羽绒服,还是很冷,催促仗剑搭帐篷,但是他们看到了山上有一个小木屋,就立刻决定在那里。我抱着帐篷,在没有手套的情况下冲进了半山坡的小木屋。进去之后我抱着自己双腿蹲在一个角落里,身体情况比想象的要糟,浑身上下都在颤抖,双腿冰冷。太多次涉水,长长的沼泽地,让鞋子里面湿了,持续的攀升,脚后跟磨的很疼很疼。蹲坐在屋子里面抱着自己,久久感觉不到温暖,抑制不住自己的颤抖。我心里明白,那种情况下虽然恶劣,但是还不至于要了自己命,不过自己也确实被逼到了一定的地步。不管怎么说,进入了木屋,我就活下来了。
+
+过了好久,终于感觉自己恢复了,几个人开始烧火取暖,烤自己湿了的衣服和鞋子,同时联系其他人,并且盯着路,防止队员走过。我看到了阿力,空着双手往下赶,我以为他的队员都在下面去了,然后就告诉他往下走。一会收队来了,白马跟着他,我终于明白什么叫走不动力,我感觉她当时已经控制不住自己四肢了,挪一步都很艰难,说不来话,我们搀扶着她到火边,给了她一杯热水,裹上睡袋,好久好久之后,我还是能感觉到她控制不住的颤抖,她是真到了极限。收队认为其他人可能走到了右边,三哥担心同行的开开,两个人出去找人去了。我看到了一个绿背包的人,问自己队员去向,并且说上面有对夫妇是我们队的,有问题。我不太明白什么叫有问题,但是总之不是好事,回去跟领队说了下情况,跟仗剑我们决定去看看。
+
+这就是阿力, 另一个队伍的领队,哈萨克人
+
+
+
+其实当时小屋里面,有领队,协助 鱼,还有两个上海的,但是上海的人明显是不会关心别人死活的,领队么...... 反正当时我对他已经很失望了,在这暴风雪,队伍冲散的情况下,居然没有任何行动,完全是队员自发组织的搜救,以及在预感到可能走岔的情况下,并没有适当的安排,这付费的商业队,居然只有两部对讲机。我感觉他缺少了一点危难中的魄力和组织能力,正如第二天别人点评的一样,他更像向导,而非领队,协助也没有在队伍里面发挥好作用。不管怎么说吧,两条生命在那边,人家说有问题了,而自己正好恢复的也还OK,就决定去看看。
+
+走到那边并不远,果然是女方已经崩溃了,比白马尚且不如,他们扎了帐篷,男的煮了点热水,两个人正在喝水回复体力。女的,邹媛,后来她告诉我过河的时候,她落水了,所以半边身体都是湿透的,风裹着大雪,我都到了一定地步,她不崩溃才怪。等了他们一会,然后搀扶着邹媛,和她老公一起去了木屋,装备,大部分则临时丢在那里,第二天去取。回来的时候我见到了阿力正在烤火,一个牧民小伙子向收队去的方向前进,阿力说我害他跑了七八公里路,下面就没有他的人。牧民小伙收了600大洋去找我们和阿力的队员去了,我们开始做饭,并且通过对讲机联系收队和牧民,黑了的时候,牧民回来了,发现了16个人,并且追上了走偏的收队,好吧,厉害,这搜索速度和行进速度真行。
+
+晚上,我们则11人挤在小木屋小小的空间里面睡,腿都身不开,挤着错着锁着,睡下了,阿力去下面找依旧无法确认位置的两个人。
\ No newline at end of file
diff --git "a/2019/08/10/2016-\344\271\214\345\255\231\346\270\270\350\256\260-D2/wusun_ali.png" "b/source/_posts/2016-\344\271\214\345\255\231\346\270\270\350\256\260-D2/wusun_ali.png"
similarity index 100%
rename from "2019/08/10/2016-\344\271\214\345\255\231\346\270\270\350\256\260-D2/wusun_ali.png"
rename to "source/_posts/2016-\344\271\214\345\255\231\346\270\270\350\256\260-D2/wusun_ali.png"
diff --git "a/2019/08/10/2016-\344\271\214\345\255\231\346\270\270\350\256\260-D2/wusun_version.png" "b/source/_posts/2016-\344\271\214\345\255\231\346\270\270\350\256\260-D2/wusun_version.png"
similarity index 100%
rename from "2019/08/10/2016-\344\271\214\345\255\231\346\270\270\350\256\260-D2/wusun_version.png"
rename to "source/_posts/2016-\344\271\214\345\255\231\346\270\270\350\256\260-D2/wusun_version.png"
diff --git "a/2019/08/10/2016-\344\271\214\345\255\231\346\270\270\350\256\260-D2/wusun_yun.png" "b/source/_posts/2016-\344\271\214\345\255\231\346\270\270\350\256\260-D2/wusun_yun.png"
similarity index 100%
rename from "2019/08/10/2016-\344\271\214\345\255\231\346\270\270\350\256\260-D2/wusun_yun.png"
rename to "source/_posts/2016-\344\271\214\345\255\231\346\270\270\350\256\260-D2/wusun_yun.png"
diff --git "a/source/_posts/8\346\234\210\344\273\275\346\212\225\350\265\204\347\232\204\345\273\272\350\256\256\346\212\245\345\221\212.md" "b/source/_posts/8\346\234\210\344\273\275\346\212\225\350\265\204\347\232\204\345\273\272\350\256\256\346\212\245\345\221\212.md"
new file mode 100644
index 0000000..b5f2643
--- /dev/null
+++ "b/source/_posts/8\346\234\210\344\273\275\346\212\225\350\265\204\347\232\204\345\273\272\350\256\256\346\212\245\345\221\212.md"
@@ -0,0 +1,14 @@
+---
+title: 8月份投资的建议报告
+date: 2019-08-03 23:03:05
+tags:
+---
+
+今天重新看了招商证券的八月份的策略观点和配置建议,主要观点是说,市场流动性增加,但是贸易战和基本面都没有明显的变化,市场主题是震荡上升,不会有很大的变化。
+推荐的是科技股,5G, 云计算相关的标的,主要还是因为华为牛逼吧,下面是5G 相关的标的,可以保持关注。
+
+震荡上升,不会有大波动,挺好的。
+
+
+
+还有一个很有趣的观点,就是经济从高增长到高质量增长,目标GDP是6.0-6.5%, 实际是6.3%, 挺好的,一切都在计划中,天不会塌。
\ No newline at end of file
diff --git "a/2019/08/03/8\346\234\210\344\273\275\346\212\225\350\265\204\347\232\204\345\273\272\350\256\256\346\212\245\345\221\212/5g_link.jpg" "b/source/_posts/8\346\234\210\344\273\275\346\212\225\350\265\204\347\232\204\345\273\272\350\256\256\346\212\245\345\221\212/5g_link.jpg"
similarity index 100%
rename from "2019/08/03/8\346\234\210\344\273\275\346\212\225\350\265\204\347\232\204\345\273\272\350\256\256\346\212\245\345\221\212/5g_link.jpg"
rename to "source/_posts/8\346\234\210\344\273\275\346\212\225\350\265\204\347\232\204\345\273\272\350\256\256\346\212\245\345\221\212/5g_link.jpg"
diff --git "a/source/_posts/CMakeLists\347\232\204\350\256\262\350\247\243.md" "b/source/_posts/CMakeLists\347\232\204\350\256\262\350\247\243.md"
new file mode 100644
index 0000000..b2afc7d
--- /dev/null
+++ "b/source/_posts/CMakeLists\347\232\204\350\256\262\350\247\243.md"
@@ -0,0 +1,125 @@
+---
+title: CMakeLists的讲解
+date: 2019-09-26 23:32:01
+tags:
+---
+
+下面是一个系统的cmakelist.txt 文件,我解释下其中的部分,作为自己以后解读cmake的备忘
+
+```
+cmake_minimum_required(VERSION 3.0)
+
+// 项目名,必须放在第二位,不然会有CMake Error: Error required internal CMake variable not set这种错误
+project( gqa )
+
+// 设置Debug 模式还是Relase模型, 可以用 cmake -DCMAKE_BUILD_TYPE=Debug . 指定Debug模式
+IF(NOT CMAKE_BUILD_TYPE)
+ SET(CMAKE_BUILD_TYPE Release)
+ENDIF()
+
+
+// message 没有逻辑意义,用于输入提示和变量信息,比如下面,就是用于输出RPC_INCLUDES的变量,
+// 其值在rpc-framework-cpp/cmakelist.txt 中 set (RPC_INCLUDES "${_RPC_DIR}/proto" "${_RPC_DIR}/include" ${LIBEVENT_INCLUDE_DIRS}) 设置
+message("RPC_INCLUDES=" ${RPC_INCLUDES})
+#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -std=c++11 -W")
+
+# 设置CMAKE_CXX_FLAGS
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -std=c++11 -pthread -Wl,--as-needed")
+
+
+# 表示本项目并没有include目录
+include_directories(
+
+ )
+
+
+# SET 本身只是将后面的值集合起来通过第一个符号来表示
+SET(PATH_INCLUDE_DIR ./include )
+set (asm_sources
+ ./src/lib/data_utils.cpp
+ ./src/lib/test_data_utils.cpp
+ ./src/lib/punctuation_model.cpp
+ ./src/lib/punctuation_service.cpp
+ ./src/lib/beam_search_ops.cc
+ ./src/lib/beam_search_ops_gpu.cu.cc
+ ./src/lib/segmenter.cpp
+ ./src/lib/usefultools.cpp
+ )
+
+SET(jsoncpp_sources
+ ./src/lib/json_reader.cpp
+ ./src/lib/json_value.cpp
+ ./src/lib/json_writer.cpp
+ )
+
+# PROJECT_SOURCE_DIR 是自动的, 表示项目的home目录, link_directories 指定要链接的库文件的路径
+link_directories(${PROJECT_SOURCE_DIR}/3rdparty)
+
+set(CODE_DIRS ${PROJECT_SOURCE_DIR}/src)
+
+set(SOURCE_DIR ${CODE_DIRS}/lib)
+set(TEST_DIR ${CODE_DIRS}/test)
+
+#EXECUTABLE_OUTPUT_PATH 和 LIBRARY_OUTPUT_PATH 是cmake的常量,表示输出的lib和bin的目录,这里控制输出的路径
+set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
+set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
+
+#add_subdirectory(${SOURCE_DIR} ${LIBRARY_OUTPUT_PATH})
+#add_subdirectory(${TEST_DIR} ${EXECUTABLE_OUTPUT_PATH})
+
+# 创建一个共享的库文件,运行时动态链接,还有STATIC,MODULE两种选项,分别表示静态库和模块库
+add_library(punctuation_lib SHARED
+ ${asm_sources}
+ ${jsoncpp_sources}
+)
+
+# 为punctuation_lib指定类库,也就是为库文件指定include目录,
+target_include_directories(punctuation_lib PUBLIC
+ ${PROJECT_SOURCE_DIR}/include
+ ${PROJECT_SOURCE_DIR}/include/tensorflow/
+ ${PROJECT_SOURCE_DIR}/include/nsync/
+ ${PROJECT_SOURCE_DIR}/include/absl/
+ ${PROJECT_SOURCE_DIR}/include/eigen/
+ ${PROJECT_SOURCE_DIR}/src/include
+ ${PATH_INCLUDE_DIR}
+)
+
+# 为指定的类库文件指定它的依赖
+target_link_libraries(punctuation_lib
+ libtensorflow_framework.so
+ libtensorflow_cc.so
+)
+
+#创建一个可执行的文件,指定它的源码文件, 也就是下面几行都是设置test文件
+add_executable(test_tf ${TEST_DIR}/test.cpp)
+target_include_directories(test_tf PUBLIC
+ ${PROJECT_SOURCE_DIR}/include
+ ${PROJECT_SOURCE_DIR}/include/tensorflow/
+ ${PROJECT_SOURCE_DIR}/include/nsync/
+ ${PROJECT_SOURCE_DIR}/include/absl/
+ ${PROJECT_SOURCE_DIR}/include/eigen/
+ ${PROJECT_SOURCE_DIR}/src/include
+ ${PATH_INCLUDE_DIR}
+)
+target_link_libraries(test_tf
+ punctuation_lib
+)
+
+#获取rpc-framework-cpp 的代码
+if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/rpc-framework-cpp" AND IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/rpc-framework-cpp")
+ message(STATUS "dependency grpc already exits")
+else()
+ execute_process(COMMAND git clone -b v0.1.3-protobuf3.7 https://his_group:Aispeech_hisgroup@git.aispeech.com.cn/his-rpc/rpc-framework-cpp.git ${CMAKE_CURRENT_SOURCE_DIR}/rpc-framework-cpp)
+endif()
+include(./rpc-framework-cpp/CMakeLists.txt)
+
+
+# 正式的可执行文件, 也就是每个可执行文件 都有 add_executable/target_include_directories/target_link_libraries 三个步骤,
+# 指定include文件和类库,源码文件,比如 target_link_libraries 指定了两个类库,分别由RPC_LIBS和punctuation_lib指定
+# 而punctuation_lib是类库,在上面有设置,而RPC_SRC则分别由set(RPC_LIBS event), set(RPC_LIBS ${RPC_LIBS} protobuf grpc++_unsecure gpr) 指定
+add_executable(rpcserver rpcserver.cpp ${RPC_SRC})
+target_include_directories(rpcserver PUBLIC ${RPC_INCLUDES} ${PROJECT_SOURCE_DIR}/src/include)
+target_link_libraries(rpcserver ${RPC_LIBS} punctuation_lib)
+#add_executable(rpcclient rpcclient.cpp ${RPC_SRC})
+#target_link_libraries(rpcclient ${RPC_LIBS})
+```
\ No newline at end of file
diff --git a/source/_posts/Untitled-1 b/source/_posts/Untitled-1
new file mode 100644
index 0000000..480ae30
--- /dev/null
+++ b/source/_posts/Untitled-1
@@ -0,0 +1,47 @@
+
+
+
+def trans(day):
+ formattedDateProcess = datetime.strptime(day, "%Y%m%d")
+ formattedDateTimeProcess = formattedDateProcess.strftime("%Y-%m-%d 00:00:00")
+ oneday = timedelta(days=1)
+ nextDayTime = (formattedDateProcess + oneday).strftime("%Y-%m-%d 00:00:00")
+ nextDay = (formattedDateProcess + oneday).strftime("%Y%m%d")
+ sql = """
+ select json as raw,
+ get_json_object(json, '$.logTime') as logtime, get_json_object(json, '$.recordId') as recordid
+ from his.ba_prod_trace_log_new where day in ("%s", "%s")
+ and get_json_object(json, '$.module') = 'baserver'
+ and get_json_object(json, '$.eventName') = 'sys_input_output'
+ and get_json_object(json, '$.logTime') >= '%s'
+ and get_json_object(json, '$.logTime') < '%s'
+ """ % (day, nextDay, formattedDateTimeProcess, nextDayTime)
+ data = spark.sql(sql)
+ data_2 = data.select(
+ data.recordid,
+ data.logtime,
+ func.get_json_object(data.raw, '$.message').alias("message")
+ )
+ input_parsed = data_2.select(
+ data_2.recordid,
+ data_2.logtime,
+ func.get_json_object(data_2.message, '$.message.input.context.source.platform').alias("source"),
+ func.get_json_object(data_2.message, '$.message.output.semantic.confidence.score').alias("score"),
+ func.get_json_object(data_2.message, '$.message.output.semantic.confidence.level').alias("level"),
+ func.get_json_object(data_2.message, '$.message.input.request.requestId').alias("requestId"),
+ func.get_json_object(data_2.message, '$.message.input.request.type').alias("requesttype"),
+ func.get_json_object(data_2.message, '$.message.input.context.user.userId').alias("userId"),
+ func.get_json_object(data_2.message, '$.message.output.semantic.skillId').alias("semantic__skillId"),
+ func.get_json_object(data_2.message, '$.message.input.context.product.productId').alias("productid"),
+ func.get_json_object(data_2.message, '$.message.input.session.sessionId').alias("sessionId"),
+ func.get_json_object(data_2.message, '$.message.input.request.inputs[0].input').alias("query"),
+ func.get_json_object(data_2.message, '$.message.input.context.skill.skillId').alias("input_skill"),
+
+ func.when(func.get_json_object(data_2.message, '$.message.output.response.speak.text').isNotNull(),
+ func.get_json_object(data_2.message, '$.message.output.response.speak.text'))
+ .when(func.get_json_object(data_2.message, '$.message.output.response.widget.subTitle').isNotNull(), func.get_json_object(data_2.message, '$.message.output.response.widget.subTitle'))
+ .otherwise("").alias("answer")
+
+ )
+ input_parsed.createOrReplaceTempView("input_parsed")
+ return input_parsed
\ No newline at end of file
diff --git a/source/_posts/hello-world.md b/source/_posts/hello-world.md
new file mode 100644
index 0000000..c090297
--- /dev/null
+++ b/source/_posts/hello-world.md
@@ -0,0 +1,38 @@
+---
+title: Hello World
+---
+Welcome to [Hexo](https://hexo.io/)! This is your very first post. Check [documentation](https://hexo.io/docs/) for more info. If you get any problems when using Hexo, you can find the answer in [troubleshooting](https://hexo.io/docs/troubleshooting.html) or you can ask me on [GitHub](https://github.com/hexojs/hexo/issues).
+
+## Quick Start
+
+### Create a new post
+
+``` bash
+$ hexo new "My New Post"
+```
+
+More info: [Writing](https://hexo.io/docs/writing.html)
+
+### Run server
+
+``` bash
+$ hexo server
+```
+
+More info: [Server](https://hexo.io/docs/server.html)
+
+### Generate static files
+
+``` bash
+$ hexo generate
+```
+
+More info: [Generating](https://hexo.io/docs/generating.html)
+
+### Deploy to remote sites
+
+``` bash
+$ hexo deploy
+```
+
+More info: [Deployment](https://hexo.io/docs/deployment.html)
diff --git "a/source/_posts/lldb-\345\270\270\347\224\250\345\221\275\344\273\244.md" "b/source/_posts/lldb-\345\270\270\347\224\250\345\221\275\344\273\244.md"
new file mode 100644
index 0000000..d565303
--- /dev/null
+++ "b/source/_posts/lldb-\345\270\270\347\224\250\345\221\275\344\273\244.md"
@@ -0,0 +1,38 @@
+---
+title: lldb 常用命令
+date: 2019-07-14 18:10:33
+tags: 计算机, C++
+---
+
+#### 类gdb 的写法
+```
+1. file a.out # 载入可执行文件
+2. b main # 在main处break
+3. run # 启动程序
+4. bt # backtrace ,显示调用栈
+5. step # 进入方法
+6. print argc # 输出参数
+7. next # 下一步
+8. q # 退出
+```
+
+#### lldb的写法(括号内是缩写)
+```
+1. target create a.out ( tc a.out) # 载入可执行文件
+2. breakpoint set --name main (br s --name main) # 在main方法处设置断点
+3. process launch (pro la) # 启动程序
+4. thread backtrace # 打印线程调用栈
+5. thread step-in (th step-in) # 进入方法
+6. expression argc (p argc) # 打印变量
+7. thread step-over (th step-over) # 下一步
+8. quit (q) # 退出
+```
+
+能看出来,感觉lldb原生的命令,还是更啰嗦的,不过格式也更清晰 [noun] [verb] [options] [argument]
+lldb 支持tab,可以输入target 然后按table 会自动补全,这是一个有意思的feature。
+
+#### 其他命令
+1. gui 也是一个很有意思的命令,显示一个IDE的终端界面,只能看,不能操作,操作还是要回到命令行的
+2. apropos 增强版的help,apropos frame 可以显示和frame 相关的命令,以及具体作用
+3. expression 支持多行写法,先输入expression,然后就可以输入 空行,就可以开始执行语句
+4. target modules lookup --address 0x00000, 查看一个地址的代码,用于代码crash确认代码
diff --git "a/source/_posts/spark-get-json-object\347\232\204\344\275\277\347\224\250\346\226\271\345\274\217.md" "b/source/_posts/spark-get-json-object\347\232\204\344\275\277\347\224\250\346\226\271\345\274\217.md"
new file mode 100644
index 0000000..2e4f07f
--- /dev/null
+++ "b/source/_posts/spark-get-json-object\347\232\204\344\275\277\347\224\250\346\226\271\345\274\217.md"
@@ -0,0 +1,28 @@
+---
+title: spark get_json_object的使用方式
+date: 2019-07-11 19:28:27
+tags: 大数据, 计算机
+---
+json 扮演的角色越来越重,如何在spark中处理json数据也变得越来越重要
+#### 1. 创建dataframe
+```
+input_parsed = data.select(
+ data.recordid,
+ func.get_json_object(data.raw, '$.eventName').alias("eventname"),
+ func.get_json_object(data.raw, '$.message.input.context.source.platform').alias("source"),
+ func.get_json_object(data.raw, '$.message.output.semantic.confidence.score').alias("score")
+)
+```
+这种方式,是直接创建一个dataframe,实现json与dataframe的转化
+#### 2. 直接作为筛选条件和select字段
+```
+select
+ json as raw,
+ get_json_object(json, '$.logTime') as logtime,
+ get_json_object(json, '$.recordId') as recordid
+ from his.ba_prod_trace_log_new
+where day = 20190630 and hour = 19
+ and get_json_object(json, '$.module') = 'baserver' and
+ get_json_object(json, '$.eventName') = 'sys_input_output'
+```
+这种方式的好处,就是可以直接在json 之中实现查找,直接定位自己想要的内容,很赞
\ No newline at end of file
diff --git "a/source/_posts/visual-studio-code-\350\277\234\347\250\213\350\260\203\350\257\225C-\344\273\243\347\240\201.md" "b/source/_posts/visual-studio-code-\350\277\234\347\250\213\350\260\203\350\257\225C-\344\273\243\347\240\201.md"
new file mode 100644
index 0000000..cfa2a2f
--- /dev/null
+++ "b/source/_posts/visual-studio-code-\350\277\234\347\250\213\350\260\203\350\257\225C-\344\273\243\347\240\201.md"
@@ -0,0 +1,44 @@
+---
+title: visual studio code 远程调试C++代码
+date: 2019-09-27 14:46:07
+tags:
+---
+
+神奇的vscode,通过vscode直接调试容器中的代码,可以避免处理环境依赖的问题,大大减少琐事。
+
+主要依赖几个插件,Remote Development, Remote Containers用于链接容器, 然后选择Attach a Exist Container, 自己先通过docker run -d 启动容器,这样能加速,避免构建容器的漫长等待,并且环境稳定, 可多次使用。
+
+如果希望调试的话,就必须配置launch.js, 可以通过C/C++ Build and Debug Active File 来创建,其中 program 要制定为自己cmake 生成的out文件,args酌情修改。 也可以把program修改成这样: "${command:cmake.launchTargetPath}", 实现debugger和cmake的无缝融合
+
+花了很久,主要还是因为对VScode不够了解吧,C的技术栈了解也有限
+
+```
+{
+ // Use IntelliSense to learn about possible attributes.
+ // Hover to view descriptions of existing attributes.
+ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "name": "(gdb) Launch",
+ "type": "cppdbg",
+ "request": "launch",
+ "program": "${workspaceFolder}/build/bin/rpcserver",
+ "args": ["${workspaceFolder}/res"],
+ "stopAtEntry": false,
+ "cwd": "${workspaceFolder}",
+ "environment": [],
+ "externalConsole": false,
+ //"MIMode": "lldb",
+ "MIMode": "gdb",
+ "setupCommands": [
+ {
+ "description": "Enable pretty-printing for gdb",
+ "text": "-enable-pretty-printing",
+ "ignoreFailures": true
+ }
+ ]
+ }
+ ]
+}
+```
\ No newline at end of file
diff --git "a/source/_posts/\344\271\235\346\234\210\344\273\275\346\212\225\350\265\204\345\273\272\350\256\256\346\212\245\345\221\212.md" "b/source/_posts/\344\271\235\346\234\210\344\273\275\346\212\225\350\265\204\345\273\272\350\256\256\346\212\245\345\221\212.md"
new file mode 100644
index 0000000..648ae2a
--- /dev/null
+++ "b/source/_posts/\344\271\235\346\234\210\344\273\275\346\212\225\350\265\204\345\273\272\350\256\256\346\212\245\345\221\212.md"
@@ -0,0 +1,23 @@
+---
+title: 九月份投资建议报告
+date: 2019-09-05 21:42:55
+tags:
+---
+
+房贷利率改革,地产政策进一步收紧,目前房地产销售面积销售为负,销售金额为正,可见居民还在借贷买房,开发商拿地积极性降低,土地出让金在下降,房贷利率提升, 流拍率在上升,预计下半年继续下行。
+
+企业维持正增长,但是相比第一季度有下降,百大城市工业用地下降, 制造业投资低迷。
+
+货币政策趋向于宽松,进入了降息周期, 十年期国债利率下降, LPR改革控制了房贷利率,限制了房地产贷款金额, 通胀进一步上升, 利率低,社融低, 有利于股票市场。 历史上有两次社融低,1. 利率低1999-2000年,当时房地产刚刚改革,信贷增速持续回落, 99年降到了2.25,前后五年心低, 爆发了519行情,2000年指数快速上证。14-15年, 房地产在下行周期,当时券商,TMT表现不错。 这种表现有利于券商,医药,建筑等逆周期等行业。
+
+中国半导体销量触底抬头,在5G带领下开始可能开始新的科技周期, 7月份中国半导体增速达到7%。 9月份有可能全球的半导体也可能拐点向上。科技的上行周期可能开始。医药,军工比较受益。
+
+需要继续关照中美贸易战是否有进展。
+
+沪股通持续流入,融资融券有所恢复,8月份开始扩大,放松券商保证金,etf倾向于赎回,公募基金比较平淡。企业盈利有所回落到7.2%,ROE较上季度有所下降。 周期相关表现不佳。
+
+业绩分化明显,风险偏好没有改善,依旧低迷, 没有改善。
+
+长期看好黄金,黄金是美元的镜像,美联储进入宽松周期,美元债务也在增加, 所以美元在贬值,黄金在升值。
+
+有些蓝筹涨幅非常像2015年,来自散户,机构资金并没有变化(所以是不是确实该卖了)。
\ No newline at end of file
diff --git "a/source/_posts/\344\272\206\350\247\243\344\270\213\350\264\270\346\230\223\346\210\230.md" "b/source/_posts/\344\272\206\350\247\243\344\270\213\350\264\270\346\230\223\346\210\230.md"
new file mode 100644
index 0000000..1f10ffd
--- /dev/null
+++ "b/source/_posts/\344\272\206\350\247\243\344\270\213\350\264\270\346\230\223\346\210\230.md"
@@ -0,0 +1,32 @@
+---
+title: 了解下贸易战
+date: 2019-08-12 00:17:10
+tags:
+---
+
+国内最近内忧外困,各种不如意,股票市场一再降低,贸易战迟迟无法达成协议。想想历史上被美国打击的国家,广场协议前车之鉴,苏联解体,日不落帝国的瓦解。what is the future? 中国会是下一个欧盟,日本,苏联?
+
+这个是必须要关注的,不只是因为我买股票, 而且一旦失败,高端产业再无崛起,丧失经济主导权, 金融体系崩坏, 那未来则再无机会,我在科技圈,没什么高新企业的话,大概率要失业吧。船要沉就准备救生衣,坚挺的话,就all in 加仓。总之,影响我的投资,就业,甚至更多。
+
+先说结论,中美将在未来15年内持续对抗,中国会胜出。 15年是柯文哲提的,最终会获胜是我的观点。
+
+原因有几点,第一个,中国的社会,政治是稳定的,持续的,有长期战略的。第二点,中国庞大的国内市场。第三,中华文明的文化优势。
+
+第一点,有两组数字,1. 台湾明居正说,大陆每年百人以上官民冲突上万起,社会秩序岌岌可危,政府维稳成本居高不下,2. 来自国内一个小节目,中国的警民比 是1:800,远低于世界平均水平。如果真像里里面说的那样,这种力量比应该是远远不够的。侧面说明,中国的社会是稳定的,治安是良好的。另一个层面,政治是稳定的, 国内的领导人,还算是稳定的迭代,执政思想一脉相承,比如邓公时代树立邓国策,韬光养晦啦,改革开放啦,军队保持落后啦,各种政策,在非常长的时间内,是保持的。另一个角度来说,最高层是非常有理想的, 这个是看《毛选》《邓选》的感触,这一点明居正也是认同的,虽然他强调的是负面,要相信他们是想带领这个国家,民族走向复兴,而不是利用自己的权利维持个人的欲望,这个太肤浅了,要相信人,尤其是门口有狼的时候。从这点来说,我认为,在目前的的情况下,中国的社会政治制度总的来说是优于西方的政体的。西方有很多的好东西值得去借鉴吸收,国内有很多阴暗面,低效率的事情,总的来说,还是优越的。中国不可能成为苏联。
+
+第二点,庞大的国内市场,这个很重要,阿里,华为都是在这点上发展起来的,更多的优秀工程师,更完善的金融体系,这片土壤未来会诞生更多的优秀公司。其他的国家也会对这片庞大的市场非常觊觎,美国如果放弃这片市场,其他的国家就会进入,其他国家的企业就会发展成长,进而与美国的企业竞争。除非美国像70年代之前一样联合世界各国封锁,但是目前来看,是不现实的。德国默尔克曾经在某次演讲说,德国美国的关系已经变化,不再是过去的伙伴关系。俄国曾经示好美国,但是美国普遍敌视俄国。阿三内部矛盾重重。日本嘛,不好说。总之嘛,封锁孤立是不可能的。所以中国不会成为日本,
+
+第三,中华文明。以前谁要是提中华文明,我肯定呵呵他。然而对其他国家了解越多,我越认可中华文明的存在。比如勤劳,比如君臣父子的社会秩序,比如学而优则仕,这些都是非常普通但是也非常重要的理念。比如目前困境中的法国吧。法国留学的朋友说,法国人是非常强调生活的,一杯茶一张报纸一下午,超级好的社会福利,很少有人说去创造去工作去改变生活,No,风气不是这样的,人都在享受生活而不是在创造生活。马克龙想提高个燃油税,触碰了一点点小蛋糕利益,结果看黄马甲运动闹的多大。我认为西方文明过于强调个人,而几乎忽视了集体的存在,你国家算个屁,总统我想骂就骂。但是集体利益最终一定会影响个人利益。而这两着更理想的状态应该是互相平衡的。 所以类似于君臣父子这种社会秩序的理念去稳定社会,让人接受自己的社会地位,承认分工不同,同时鼓励勤劳,鼓励创造,鼓励学习。正如李光耀所做的一样,强力维持社会秩序,让人安居乐业。另一个国家吧,印度,一仗被打断脊梁之后,再也起不来,工业化中断,政治上照搬西方模式,却没有考虑自己的独特性,国内严重割裂,社会教育水平低,国际关系上则高调张扬,另一个差不多的case 就是古巴了。这就是没什么文化传统的国家,没有智慧,经验的传承,而中华文明则诞生了毛泽东,邓小平,李光耀这种伟人,带领着族群生存扩张。
+
+```
+1、生存是文明的第一需要。
+2、文明不断增长和扩张
+```
+
+智人,罗马人皆是如此。
+
+上面说的都是正经打贸易战,人大国际关系学院的一个教授说,可能未必是真要打贸易战,也许只是想改善财政压力。我觉得有几个证据,第一就是刘鹤与川普谈的时候,川普下意识的说 “this will make our farmer happy”,看起来还只是为了选举,以及也征收了印度,越南的关税。第二 要求所有盟友,韩国日本法国德国提高驻地美军的军费, 被强奸了的韩国,可怜可怜。退出TPP,早期得罪德国,油船事件坑了英国。一波组合拳打遍全世界,这不是要跟某个国家开战的节奏。
+
+复旦大学金灿荣教授预测下半年差不多要签下来协议,贸易战短期内应该就告一段落了吧。
+
+所以赶快加仓吧。港股应该出现了不错的机会, 我也该回去继续研究技术了,研究贸易战花了太多心思。
\ No newline at end of file
diff --git "a/source/_posts/\344\272\262\345\257\206\345\205\263\347\263\273.md" "b/source/_posts/\344\272\262\345\257\206\345\205\263\347\263\273.md"
new file mode 100644
index 0000000..b138915
--- /dev/null
+++ "b/source/_posts/\344\272\262\345\257\206\345\205\263\347\263\273.md"
@@ -0,0 +1,78 @@
+---
+title: 亲密关系
+date: 2019-12-01 20:31:15
+tags:
+---
+确实值得推荐的一本书,这本书科学的分析了男女在方方面面的不同,对常见的问题,观点进行了科学细致的总结,并有很多中肯的建议。
+
+#### 人际关系的构成
+##### 1. 亲密关系中人有归属的需要。
+如果归属的需要无法得到满足,会发生各种各样的问题。个体需要的亲密关系无需太多,几个即可。归属需要得到满足之后,与其他人建立人际关系的内驱力就会小很多,只要能持续得到关爱和包容,归属感就能得到满足。一个可能的解释是:归属需要是长期演化的产物,成为人的自然倾向。
+##### 2. 四种依恋类型
+ 2.1. 安全型:在感情上很容易接近他人,不会忧心独处和不为人接纳(我)
+ 2.2. 痴迷型:希望在亲密关系中投入全部的感情,但是经常发现他人并不乐意把关系发展到自己期望的那般亲密。没有亲密关系会不安,还担心伴侣不会想我看中他一样看中我(如我父亲)
+ 2.3. 恐惧型:和他人亲密接触使我不安,感情上渴望亲密关系,但是很难完全相信或者依赖别人,担心自己会受伤
+ 2.4. 疏离型:没有亲密关系和安心,独立和自给自足很重要,不喜欢依赖别人,或者让人依赖(妙玉?)。
+3,4两种属于回避型。
+##### 3. 刻板印象夸大了男女在兴趣,风格,能力上的差异。
+
+从统计情况来看,1. 两性差异确实存在,但是非常小。2. 男人或女人性别内的行为和观点差异远大于两性之间的平均差异。3. 两性的行为和观点正态分布上重合非常大。
+
+##### 4. 性认同差异
+ 遗传在决定人们的自信和友善倾向时,只起到四分之一或者三分之一的作用,大部分行为都是后天习得。
+ 与任务相关的“男子气”的才能称为“工具性”特质,把社交情感有关的“女人味”技能称为“表达性”特质。表达性低的人不太容易付出热情和温柔,也不怎么充满深情,长期来看,与表达性低低配偶结婚就不如与更敏感贴心和友善低人过的满意。另一方面,低工具性的人往往不如高工具性的人自尊程度高和适应能力强(适应能力强的,不应该才更容易宽容和放低姿态么)。
+ 人是高度社会化的动物,如果他人不喜欢我们,我们要喜欢自己非常困难。低自尊低人有时会低估伴侣对他们对爱,从而损害亲密关系,还觉知到根本就不存在到漠视。自我评价低到人很难相信伴侣真的深爱自己,往往对爱情能否持续不乐观,又使他们对伴侣偶尔的糟糕情绪反应过度,防御性的把自己隔离起来,生闷气,乱搞一通,还觉得自己更加糟糕。
+ 演化学认为,女性在选择伴侣时,比男性谨慎的多,男性则不会这么苛刻。男人比女人更渴望短期性关系。更嗜好与多个伴侣保持风流关系。然而男人想结婚安顿下来则偏好贞洁的女人。在长期关系中比女人更看重外表。女人选择短期伙伴时候,更看重性感,强势,有魅力等。评价有潜力的丈夫时,都把经济前景当作首选。
+
+#### 2. 研究方法
+ 亚里士多德认为人是社会动物,并认为有三种不同的友谊
+
+ 1. 建立在功利基础上的友谊
+ 2. 建立在快乐基础上的友谊
+ 3. 建立在美德基础上的友谊
+
+ 如果有人发出实际的邀请,男性比女性更容易接受陌生人的性邀请。
+
+#### 3. 吸引力
+吸引的几种模式 1. 互补性,2. 喜欢相似的人,3. 仰慕
+ 人与人之间产生吸引力最基本的假设是:他人出现对我们有奖赏意义。影响吸引力的奖赏有两种类型,直接奖赏和间接奖赏。直接奖励:如果他人给我们大量的兴趣和赞许,我们会对这种关注和接纳感到非常高兴。如果他人能给我们金钱和地位,我们会更乐意接受这些好处。
+ 相似产生吸引力。1. 人会觉得年龄,种族,教育程度,宗教信仰和社会地位等人口统计上的相像。2. 态度和价值的相像。3. 伴侣还可能有着相似的性格。
+ 大多数人都更喜欢自己。吸引力的确与我们认知到的他人具有的吸引力特质有关,也还取决于我们的需要,偏好,愿望和所处的情境。人更容易喜欢周围的人,频繁的与人接触不仅能使交往更方便,还会是你让对方觉得更有吸引力。文字和声音中表达的爱意不如脸颊的一吻更打动人。遥远的伴侣一起生活三个月之后,大约有三分之一分手了。
+ 人认为外貌俊美的人更讨人喜欢,更好相处。男性英俊但是贫穷对女性则不那么有吸引力。
+ 自我监控能力高的人热衷于调整自己的行为一边给人留下好印象。相反,自我监控能力弱的人则尽力恪守自己的信念和愿望。
+ 确定爱情关系的伴侣,双方在吸引力上是非常接近。亲密关系越正规严肃,投入程度越多,匹配程度就越明显。名望财富健康才能长相等都像商品一样能用来吸引自己的伴侣,是吸引力的一部分。人们似乎注意到别人接纳和喜欢自己的可能性,更可能与那些愿意接纳而不是拒绝自己的人接近。女人如果确实拥有很高的社会地位,会更加喜欢资源丰富,强势彪悍的男人。
+ 故作幽默或轻浮的一句话,可能是最糟糕的开场白。简单的问好不显得做作或者鲁莽,是最聪明的搭讪方法。
+ 两个人相识之后,需要一段时间充分了解彼此的共同点和差异,我们会期望对方具有和我们相似的态度和价值观。某种程度上,人们似乎是和幻想中的伴侣结婚,他们爱上的一种人,确认为自己的伴侣就是这种人。
+
+#### 4. 社会认知
+##### 4.1 伴侣的理想化
+ 保护自己免遭幻想破灭的聪明办法是:不断调整自己对理想伴侣的期望,某种程度上,人能随心所欲决定自己伴侣已拥有的品质正是自己的期待的,伴侣一般也清楚我们在美化他们,作为回报,我们也从伴侣那得到积极善意的认知评价(也有自我实现的因素?)。
+##### 4.2 归因过程
+ 4.2.1. 尽管伴侣之间有着深入了解,仍收到强烈的观察者效应。对自己行为的解释,和伴侣对类似行为的解释完全两样。最保险的策略是在心里这样假定:即使是最亲密的伴侣也很少真正理想你行为的原因。
+ 4.2.2. 尽管伴侣间存在真爱,也可能出现自利偏差。成功归于自己,推卸失败的责任。人可以估计到他人的自利偏差,而看不到自己也有偏差。人会习惯性的作出自利的解释。
+ 4.2.3 幸福的爱人对伴侣行为的归因都是能改善关系的,认为伴侣的积极行动都是刻意的,习惯的,还能据此推断伴侣其他情境下的行为,也倾向于淡化彼此的过失,认为是偶然的,特殊的,局部的,从而得到谅解。不幸的伴侣则认为伴侣的负面行动都是故意的,习惯的,正面行动是无心的。安全型的人倾向于宽容的采用改善关系的归因,而不安全的人则更悲观。高忧虑被弃的人更容易责备伴侣的不当行为,而回避型的人,对伴侣的体贴行为根本不放心上。
+##### 4.3 记忆
+ 心理学家用重构性记忆来描述随着新信息的获取不断的修订和改写记忆。伴侣目前的感情影响共同往事的回忆。如果幸福,倾向于忘记过去的不快,如果痛苦,则低估过去的幸福和情谊。好的一面是,满意的爱人会记得过去发生的问题,但是最近都得到了改善,所以比过去更幸福。陷入危机的夫妻回忆则更多是混乱和失落。
+
+##### 4.4 关系信念
+ 4.4.1 争吵具有破坏性--争吵就表明伴侣爱自己还不够深,如果彼此深深相爱,就不会发生任何争执
+ 4.4.2 “读心术”很重要--真正彼此关爱的伴侣仅凭直觉就能知道对方的需要和偏好。如果必须告诉对方自己的想法和愿望,说明伴侣爱自己不够深
+ 4.4.3 伴侣是不会发生变化的--一旦亲密关系变糟,就无法得到改善,如果爱人曾伤害自己,就还会一再伤害
+ 4.4.4 每一次的性生活都应该是完美的--只要爱情是忠贞的,每一次的性生活都应该是令人满足的。伴侣应该经常渴望并为性生活做好准备
+ 4.4.5 男人和女人就是不一样--男人和女人的性格和需要非常不同,很难真正理解对方
+ 4.4.6 美好姻缘天注定--根本无需努力维护美满的夫妻关系。夫妻要不彼此脾性相投,快乐到老,要不格格不入,争执一生。
+ 要警惕以上六个观点。当出现问题时,持有这些观念的人不会采取建设性的行动来改善关系。相信爱情天注定,就不会去解决问题,只是逃避问题,更愿意结束不幸福的关系,而不是努力去修复亲密关系。
+ 浪漫的情侣比不浪漫的情侣体验到更多的爱意,满足和忠诚,但是现实中的亲密关系,很难满足浪漫主义的期望。
+
+##### 4.4 期望
+ 关系信念对亲密关系性质的设想,即使是错误的,也会延续下去。人期望他人作出特殊行为,即使这些期望是错误的,后来却能变成现实。这就是自我实现的预言。对他人的期望会引导我们对他人作出的行为,具有促进作用。长期对他人持有不同的期望会逐渐创造出不同的社会环境。忧虑被人拒绝的人往往更可能遭人拒绝。相信自己能克服困难的期望会显得信心十足,也让问题更容易处理。
+
+##### 4.5 自我认知
+ 人们不会愿意和与自己看法有争执的人住在一起,每天面对矛盾的观点会让人身心疲倦,厌恶透顶。
+ 从自己非常熟悉的人那里得到来过分称赞的评价,会让自己不安,并认为对方很虚伪。
+##### 4.6 印象管理
+亲密关系之间的印象管理有三个特点。
+ 4.6.1 尽管给好友或者恋人的印象比熟人或陌生人更为重要,但是我们在前者花的时间不如后者。
+ 4.6.2 亲密关系确定之后,人们会费心为自己好友营造讨人喜欢的公共形象,尽可能美化好友形象。
+ 4.6.3 会把他们的亲密关系以某种特殊形象呈现给别人。
+自我监控能力高的人通常能快速转变形象适应不同的人群,周围有很多专家朋友,而监控能力弱的人的朋友屈指可数且大多相似(我?前者?)。
\ No newline at end of file
diff --git "a/source/_posts/\344\273\216\343\200\212\344\270\244\344\270\252\345\271\270\350\277\220\347\232\204\344\272\272\343\200\213\345\216\273\345\256\241\350\247\206\346\210\221\350\277\207\345\216\273\347\232\204\346\225\231\350\202\262.md" "b/source/_posts/\344\273\216\343\200\212\344\270\244\344\270\252\345\271\270\350\277\220\347\232\204\344\272\272\343\200\213\345\216\273\345\256\241\350\247\206\346\210\221\350\277\207\345\216\273\347\232\204\346\225\231\350\202\262.md"
new file mode 100644
index 0000000..60b18d7
--- /dev/null
+++ "b/source/_posts/\344\273\216\343\200\212\344\270\244\344\270\252\345\271\270\350\277\220\347\232\204\344\272\272\343\200\213\345\216\273\345\256\241\350\247\206\346\210\221\350\277\207\345\216\273\347\232\204\346\225\231\350\202\262.md"
@@ -0,0 +1,69 @@
+---
+title: 从《两个幸运的人》去审视我接受的教育
+date: 2019-08-31 16:28:26
+tags:
+---
+
+米尔顿和罗斯他们都是犹太移民,小时候移民到美国,在贫穷中长大, 后来成为著名的经济学家,奠定了货币主义的基础。
+《两个幸运的人》 是他们夫妻的自传。看完书的前两章,我也想了一下自己接受的教育。
+
+### 首先是罗斯
+```
+她认定威尔逊维拉的学校一定比波特兰的差,虽然自己没有受过正规教育,
+但是母亲决心要让她的孩子受到尽可能好的教育。
+```
+我父母可从来没说过让我们去更好的学校, 一直是强调让我们凭自己本事考好成绩。 有时候我也在想,我既然能在近百万人里面,进入前几千名,那当年如果我得到更好的资源,会不会做的更好呢? 最近与父亲谈心,他总是说,“我就是这样”,“比起很多人我已经可以了”,我不喜欢这种论调。You can't choose your faimily。The only choice is try to change them。
+```
+我很小就开始上钢琴课。我甚至一度梦想过钢琴演奏家的生活,
+我中学最大的沮丧不是因为报告卡上的评语(因为我永远都是好学生),
+而是由于班级表演中没有名列前茅
+```
+```
+许多教师有着对学生开放的房间,或者在固定时间与学生一起喝茶
+```
+我一个同学说,她上学期间一共有三个阶段,第二个阶段是高三,老师会组织同学一起喝茶聊天,"哇,没想到居然会有这么多人有着这么多不同的想法,为了高考可以做这么多准备"。 那段时间开阔了她的视野。
+```
+我记得主要不是谈经济学,而是一些非常普通的,哲理性的话题: 生活的主要目标是幸福吗?什么能创造幸福?
+```
+这些话题虽然大而空,还是需要谈的。 不然怎么跟自己相处,如何在社会上定位。理念树立了,纲领有了,才有明确的下一步行动。
+
+### 然后是米尔顿的
+```
+我们从不买什么奢侈品, 都是我的父母还是凑足了钱让我和姐姐们都去上音乐课......
+但是音乐课体验了我父母对高标准教育的追求,犹太社群的父母在这一点上普遍如此
+```
+```
+我上中学期间,当地的公共图书馆发挥了重要的作用,因为有了它,
+我成了一个如饥似渴的读者,几乎读完了这个校图书馆里所有的书
+```
+我那个时候也挺闲的,可惜我家只有几本武侠书, 结果只能度过了一个又一个极度无聊的夏天,直到17岁那年。教育资源太贫瘠了。
+```
+这是一次利润丰厚的生意,我记得我们只剩下了个别几本书没有卖出去。
+显然,我们这两个犹太孩子的基因中原本就有做买卖的天赋。
+```
+```
+阿瑟对我的另一个影响是建议我读19世纪伟大的经济学家阿尔弗雷德*马歇尔的书
+```
+
+总的来说,我觉得罗斯和米尔顿的父母都尽量让儿女接受高质量的教育,尽量去培养爱好,在他们成长的过程中,有很多的资源,比如鼓励他们做生意,小的图书馆,这是我基本上没有见到过的。有很多沟通,比如老师的茶话会, 阿伦和罗斯的对话, 阿色和米尔顿的等,跟这些过来人的对话,更容易了解社会,树立比较长期的目标,以及目前该做什么样的准备等。就像我同学说的一样,她高三的交流,对她影响很大。
+
+小时候常说,我长大了要做画家,歌手什么的,大部分都是孩子话,什么都不懂的时候瞎编的,也缺少有人真正去解释,去指导。我时常感觉自己16岁之前的时间,是虚度的,基本没有得到什么对现在有用的东西,我进入了985院校,才听到985这个概念, 而我报的专业是一晚上在网吧里查的。
+
+### 我接受的教育
+##### 来自父母的教育
+
+基本上只有两条理念,1. 好好上学,去考上大学,2. 勤劳善良,做个好人。第一点做的还不错,我们兄弟一个211, 一个985,在河南还可以吧,第二点嘛, 如果按照不让自己良心过不去的标准来算,那做的也还不错, 勤劳嘛,yes。
+
+好好上学,去考上大学。当然是对的,有了好大学,才有好工作嘛,这是他们观察来的。不过这到底只是经验主义。上大学是为了学习知识以及培养自我学习习惯,这些知识包括了对科技的了解,技术原理的掌握,对社会现状的了解把握,对过去历史的反思总结,对人对沟通的了解。在这个基础上,可以承担一些责任,所以才有了工作,以及随着实践的加深,才有了承担更大责任的能力,如果说上了大学就有了好工作,那就是形式主义,到大学之后如果还没有及时真正体会到这一点,可能就找不到工作哦。
+
+勤劳善良,做个好人。我认为他们自身也只能算70%的好人。老实,多工作少说话,不去攻击别人不出头。这是自保的姿态,避免招惹是非。从那个年代过来,也是能理解的。小时候我时常疑惑,古惑仔一般打打杀杀,好像是谁拳头厉害, 一些黑帮片子,武侠片子尤其会显得正义微弱,好人受欺负,社会黑暗。从今天的角度来看,一个能逻辑上自洽的劝告人去做一个好人的说法应该是:这个世界,是需要秩序的,不管是君臣父子的儒家秩序,还是神权的秩序,甚至是黑社会的秩序,有秩序才有安心和繁荣,才有稳定,任何打破秩序的人,如果不能建立一种新的让人接受的秩序,就会被秩序的力量反噬,个人的力量无法抗衡集体,做一个好人,是在任何秩序下,都不坏的选择,是遵守秩序的选择,同时也是能团结他人,更好保护自己的选择。我认为的好人的原则应该是, 1. 自己的所有行为都在道德可接受范围内。 2. 在不过分伤害自己利益的情况下,尽量去帮助别人。
+
+##### 来自学校的教育
+
+学校的教育尤其失败。缺少培养思考,培养完整的社会观,历史观,更不要提品德。只有教书教知识。大部分老师们也只是在敷衍工作,自身的了解思考也有限,以及教材的深度也有限。
+
+我小学三年级就开始看长篇小说,之后的语文,基本上也就学校强行要求背诵的诗词还有点用吧,大部分语文的时间都是浪费的。历史, 我向来喜欢历史,但是我学习的历史,只是以前的故事而已,缺少深度的剖析,以及历史的不断演化迭代。从隋唐到清,每一个朝代都是在前代的基础上不断改进,过去的故事不断被反思总结改进,制度不断调整。比如最近在看日本的历史,日本如何一步步的走向军国主义的,中间有过多少种思潮,内部是如何演化的,中间谁出于何种动机做了什么,甚至论证下体制和文化下的必然也行啊。但是我的历史书只告诉了我发生什么。其他的物理,数学, 英语等都是工具性质的。
+
+总的来说,我认为自己过去的教育,缺乏体系的理论,从父母到老师,缺少真正懂的人,有感悟的人,他们也不过抓住的,也不过是一点点正确, 对他们所主张的,他们自己并不能在理论上自洽, 以及真的缺少教育资源。
+
+这是我对自己过去接受的教育的反思, 不过,也没办法啦,发展总是一步一步的,能感受到变化也是挺好的, 朝闻道,夕死可也,更况且我的人生才刚刚开始。
\ No newline at end of file
diff --git "a/source/_posts/\345\205\264\347\233\233\344\270\216\345\215\261\346\234\272\357\274\232\350\256\272\344\270\255\345\233\275\347\244\276\344\274\232\347\232\204\350\266\205\347\250\263\345\256\232\347\273\223\346\236\204.md" "b/source/_posts/\345\205\264\347\233\233\344\270\216\345\215\261\346\234\272\357\274\232\350\256\272\344\270\255\345\233\275\347\244\276\344\274\232\347\232\204\350\266\205\347\250\263\345\256\232\347\273\223\346\236\204.md"
new file mode 100644
index 0000000..19aff1b
--- /dev/null
+++ "b/source/_posts/\345\205\264\347\233\233\344\270\216\345\215\261\346\234\272\357\274\232\350\256\272\344\270\255\345\233\275\347\244\276\344\274\232\347\232\204\350\266\205\347\250\263\345\256\232\347\273\223\346\236\204.md"
@@ -0,0 +1,20 @@
+---
+title: 兴盛与危机:论中国社会的超稳定结构
+date: 2020-09-01 17:40:05
+tags: 历史
+---
+《兴盛与危机:论中国社会的超稳定结构》 。这本书190+页,解释了中国王朝周期律是怎么形成的。以及为什么中国无法诞生工业革命。
+王朝周期律这种稳定结构要从1. 经济结构:小农经济,2. 意识形态结构:儒家文化,3.政治结构结构: 中央集权郡县制。三个互相制约的子系统来看。在王朝的开始,君主英明,官僚系统较为清廉控制力强,均田分配,社会较为繁荣。之后随着无组织力量(官僚膨胀腐败,人口增加,土地兼并,王朝威信丧失)的增长,王朝开始动乱。大动乱的过程涤荡了无组织力量,为新王朝修复创造条件。
+作者论述了为什么王朝可以修复。1:宗法一体化,子孝与忠君同构,父权与皇权对应,封建家长很容易以家庭为模板,建立宗法家长制为原则的政权(其实也是儒家思想)。2. 儒家倡导入世,以安邦定国为目标(个人理解是不统一就没有安定,统一符合君主和人民的利益),施展抱负才能,组建国家机器。
+书里着重论述了南北朝时期将近300年的动乱的原因,1. 佛学道教的传播,2. 外族入侵。3. 豪强发展成门阀,农民起义没有起到涤荡无组织力量的作用。
+这里作者对比了几种思想流派,自汉代独尊儒术之后,为什么最终依旧是儒家思想成为正统。
+道家讲“无为”,放情任志,顺乎人性,其理想社会是没有制度和发明的天然状态。
+佛以现世之虚无而出世,认为“情”乃一切烦恼罪恶之源,主张灭除欲望。
+墨家主张“兼爱”,“交相利”,以功利主义为价值观,推崇以实践效果作为鉴别是非的标准。后期墨家是中国古代哲学中最富有科学色彩的流派。
+孔子以“仁”为核心价值观,视道德为文化的基础,认为这出自人的本性,要求人努力完成道德追求以至于圣人。在社会观上主要内容为“礼”,一方面继承了西周的宗法政治制度,另一方面注入了理想政府的构想,社会合理划分等级,各等级共同遵守礼仪而达到和谐。
+法家并无内和谐的理论体系。其国家学说以政策居多。因此只能作为其他学说的有机组成部分,细化其国家学说。
+
+国家一体化要求有统一信仰的知识分子组成官僚机构,并有统一的国家学说。意识形态起码要是有为的入世的。因此佛道的“无为”和“出世”实际上干扰了国家重新一体化。后世儒释道之所以可以共存,是因为佛道成为了儒家的反面和补充,佛学完成了中国化:禅宗。随着民族融合,魏孝文帝推行儒学,打击贵族势力,实施均田令。统一中国成为潮流。
+
+皇权作为官僚机构的调整力量,可以整顿吏治,抑制土地兼并。随着一体化不断发展,皇权也有不断集中扩大的趋势。但是当腐败到了一定地步,有为皇帝也不能挽救一个王朝(王莽,唐宪宗,贾似道飘过)。
+最后作者谈了为什么中国无法诞生工业革命,中国的科技水平一直在线性增长,但是西欧发生了指数型增长。核心在于1. 中国王朝更迭破坏了科技和资本的积累,2. 重本抑末,对商业强控制,抑制了潜在的形式成长。3. 伦理道德成为了文化轴心,也妨碍了科学和真理的成长。
\ No newline at end of file
diff --git "a/source/_posts/\345\261\201\350\202\241\345\206\263\345\256\232\350\204\221\350\242\213.md" "b/source/_posts/\345\261\201\350\202\241\345\206\263\345\256\232\350\204\221\350\242\213.md"
new file mode 100644
index 0000000..c726e65
--- /dev/null
+++ "b/source/_posts/\345\261\201\350\202\241\345\206\263\345\256\232\350\204\221\350\242\213.md"
@@ -0,0 +1,9 @@
+---
+title: 屁股决定脑袋
+date: 2019-07-28 09:58:01
+tags: 生活随想
+---
+昨天看了一些不可描述的东西,回头心里跟明教授天人交战了很久,甚至一度动摇,最后的结论就是屁股决定脑袋。我将坚定的支持党和中央的领导,支持国家社会主义现代化道路的探索, 支持中华民族的伟大复兴。
+任何人啊,相同的事情,立场不同,看问题的角度就不同,心路也不同,得到的结论很可能也是不同的。我不能说他方法论有问题,他的方法论是值得学习的,但是立场不同。
+所以嘛,经济还是很有趣的。
+Winter is comming,危机来的时候,做一些什么呢? 手持现金?购股票, 购房子,that is a choice
\ No newline at end of file
diff --git "a/source/_posts/\346\221\206\350\204\261\350\264\253\347\251\267.md" "b/source/_posts/\346\221\206\350\204\261\350\264\253\347\251\267.md"
new file mode 100644
index 0000000..4857d5d
--- /dev/null
+++ "b/source/_posts/\346\221\206\350\204\261\350\264\253\347\251\267.md"
@@ -0,0 +1,21 @@
+---
+title: 摆脱贫困
+date: 2019-10-21 22:47:33
+tags:
+---
+
+这是习近平于1992年出的一本书,记载了自己在闽东执政期间的一些理念和措施。
+
+习近平还有另一本书,叫《习近平谈治国理政》,我对这本书并不感冒,大的口号并没有意义,见微知著, 魔鬼在细节,能掌控到什么地步,才是关键。
+
+主要感觉有几点,1:实事求是,因地施政,2. 敬畏群众力量, 为人民服务。
+
+实事求是,他一到地方,就各地去走访,边调查边思考,很有意思哈,有点像我买房子,没有调查就没有发言权,只有实地去感受,去谈去问才能有更贴切的结论,然后基于现实去调整政策,比如本地有什么特色啦,具体怎么做,发动力量想办法。最近有一篇文章,说扶贫形式主义,well,形式主义也好,至少还有人去传播这种理念,先富的,有资源的至少有尝试着去帮助贫穷的人。我不好评论在闽东的政治怎么,至少,我能感觉到脚踏实地去想办法。
+
+为人民服务这句话在书里面,不止一次提到,扶贫也基本是贯穿整本书,也谈了不少廉政,宣传等工作,也是为了发动群众力量,所以不管执行的结果怎么样,在他的心里,这确实很重要吧。
+
+我听说有人黑他学历不够,基础教育不深,我只能说,这真是为黑而黑了,书里的旁征博引,让我这河南读书考上985的学生都汗颜,没几个人能写出来这种文章的,好吧,何况还是1992年之前的他。
+
+我其实很好奇,西方的治国理政理念是什么?像小丑一样的选举制度?每四年一次的政策大清洗?找一个商人或者律师来领导国家, 演员当市长??可能我读的真正比较细的治国的书,就是《美联储》了,我觉得美联储太简单粗暴了,即便是经济学大家的理论,一刀切也过于简单粗暴了,如果说美联储是一个一次函数,中国就是一个神经网络了,在一个大理念之下的各种因地制宜。 不过,我也听说美国有政务和事务两套系统,了解有限。
+
+总的来说,继续看好中国, 同时期待继续加深对西方的了解。
\ No newline at end of file
diff --git "a/source/_posts/\346\226\260\347\273\223\346\236\204\347\273\217\346\265\216\345\255\246.md" "b/source/_posts/\346\226\260\347\273\223\346\236\204\347\273\217\346\265\216\345\255\246.md"
new file mode 100644
index 0000000..a38af63
--- /dev/null
+++ "b/source/_posts/\346\226\260\347\273\223\346\236\204\347\273\217\346\265\216\345\255\246.md"
@@ -0,0 +1,15 @@
+---
+title: 新结构经济学
+date: 2019-11-12 00:03:44
+tags:
+---
+林毅夫,堪称一代传奇,听说他在国内贡献很大,影响很大,所以就决定看下他的作品和主张,《新结构经济学》,我觉得凭着他的这套主张,确实有资格成为非常非常有影响力的经济学家。
+
+新结构经济学,主要探讨的是一个国家在发展自己经济的时候,应该如何甄别选择行业,如何扶持,一步步之间如何发展和升级,政商之间应该承担哪些责任。他提出的《增长甄别与因势利导框架》(GIFF)应该可以作为整本书的思想核心。
+
+1. 发展中国家的政府可以确定一份贸易商品和服务的清单。这些商品和服务应满足以下条件: 在具有与本国相似要素禀赋结构,且人均收入高于本国约100%-200%的高速增长国家中,这些商品和服务的生产已超过20年。
+2. 在该清单的产业中间,政府可以优先考虑那些国内私人企业已自发地进入的产业,并设法确定:(1)这些企业提升其产品质量的障碍(所有主政一方的人大概都需要了解吧);或者说(2)组织其他企业进入该产业的障碍。这些可以通过各种方法的组合来做到,例如价值链分析,或者Hausmann提出的增长诊断框架。然后政府采取措施来消除这些约束,并运用随机对照实验来测试这一过程的影响,以确保这些政策推广到国家层面的有效性。
+3. 对国内企业来说,清单上的某些产业可能是全新的产业,或是很少从事出口的企业。这种情况下,政府可以采取特定措施,鼓励在第一步中确定的高收入国家的企业来本国投资这些产业,以利用本国劳动力成本低的优势。政府还可以设立孵化计划,扶持国内私人企业进入该行业。
+4. 除了第一步中的贸易商品和服务清单确定的产业外,发展中国家的规模还应密切关注本国成功实现自我发现的其他私人企业,并且为这些产业扩大规模提供帮助。
+5. 在基础设置落后,商业环境欠佳的发展中国家中,政府可投资于工业园区或者出口加工区,并且作出必要的改进,以吸引可能愿意投资于目标产业的国内私人企业或者外国产业,对基础设施和商业环境的改善可以降低交易成本,素锦产业发展。然而,由于预算约束和能力有限,大多数政府无法在合理的时间内为整个产业作出理想的改进。因此,集中于改善工业园区或者出口加工区的基础设施和商业环境,就成为一个更易于实现的选择。工业园区和出口加工区还有鼓励产业的聚集优越感。
+6. 政府可以在第一步确定的产业清单中的国内驱动企业或者国外投资人提供激励,以补偿他们的投资所创造的非竞争性公共知识。这类措施应有时间的限制和财务成本限制。激励可以是一段时间内的企业所得税减免,或者是对合作投资的直接优惠,或是获取外汇的优先权,激励不应该也不需要以垄断租金,高关税或者其他扭曲的形式出现。寻租和政治捕获的风险可以由此避免。对于在第四步里通过自身努力成功发现新产业的企业,政府可以采取措施以认可他们对国家经济发展的贡献。
\ No newline at end of file
diff --git "a/source/_posts/\346\261\207\345\220\210.md" "b/source/_posts/\346\261\207\345\220\210.md"
new file mode 100644
index 0000000..7d8ad5b
--- /dev/null
+++ "b/source/_posts/\346\261\207\345\220\210.md"
@@ -0,0 +1,35 @@
+---
+title: 2016 乌孙游记 D3 汇合
+date: 2019-08-15 20:26:39
+tags: 旅行
+---
+
+这一夜睡得很痛苦,不能转身,不能伸直,身体蜷缩着,伸直就把横在我脚那头的人蹬下木板了,睡袋的空间也有限。几次睡去几次醒来,终于挨到天亮。对于追求能活着的人来说,醒来本身已经很幸福了。
+
+
+
+起床后 我开始搞火,能烧的昨天烧了很多,剩下的经过一夜,都潮湿了,很难点燃,被熏的流泪几次之后,火起来了,开始烤徒步鞋,鞋子就是命,没这双鞋,走不出乌孙的。
+
+雪山风景真的好看,银装素裹,很是漂亮。
+
+
+
+
+
+吃饭之后,阿力上来确认说下面是有两个人,火鸟和他们队的,火鸟听说好像是什么上海登山协会的主席来着,找来一群老弱妇女,带单手杖登山的,背一包提一包的,用龙头拐的,穿低帮皮鞋的。然后暴风雪来的时候,他一个人先去下面露营地了,可以的。
+
+晒完睡袋之后在等待汇合的人
+
+
+
+我们等走错路的人爬达坂过来和我们汇合,石头,大个子,淡言,以及找到他们的走四方等人。下午三点多才赶到,他们昨天晚上睡雪上,早上没吃饭,爬山半天达坂。真又饿又累,然后他们又开始晒湿了的帐篷睡袋,吃点东西等。四点的时候再次出发,赶往溜索点,但是已经落后了计划,经过昨天的事情,领队已经不敢拉开队伍距离了。
+
+
+
+沿着小溪的峡谷的山坡上的羊肠小道一直下降,风景不错,刚刚暴风雪之后的雪山美轮美奂,山坡的色彩也很眼里,羊肠小道也给人历史感。
+
+因为刚刚雪后,小道很泥泞,但是是下坡,我们行进速度很快。
+
+晚上露宿在一个河边,落后原定计划三四公里加上一个索道的时间,大概就是半天时间。希望这次暴风雪不会是我们晚于计划出山的原因吧。
+
+今天的风景真不错
\ No newline at end of file
diff --git "a/2019/08/15/\346\261\207\345\220\210/wusun_color.jpg" "b/source/_posts/\346\261\207\345\220\210/wusun_color.jpg"
similarity index 100%
rename from "2019/08/15/\346\261\207\345\220\210/wusun_color.jpg"
rename to "source/_posts/\346\261\207\345\220\210/wusun_color.jpg"
diff --git "a/2019/08/15/\346\261\207\345\220\210/wusun_combine.jpg" "b/source/_posts/\346\261\207\345\220\210/wusun_combine.jpg"
similarity index 100%
rename from "2019/08/15/\346\261\207\345\220\210/wusun_combine.jpg"
rename to "source/_posts/\346\261\207\345\220\210/wusun_combine.jpg"
diff --git "a/2019/08/15/\346\261\207\345\220\210/wusun_house_door.png" "b/source/_posts/\346\261\207\345\220\210/wusun_house_door.png"
similarity index 100%
rename from "2019/08/15/\346\261\207\345\220\210/wusun_house_door.png"
rename to "source/_posts/\346\261\207\345\220\210/wusun_house_door.png"
diff --git "a/2019/08/15/\346\261\207\345\220\210/wusun_house_door.png.jpg" "b/source/_posts/\346\261\207\345\220\210/wusun_house_door.png.jpg"
similarity index 100%
rename from "2019/08/15/\346\261\207\345\220\210/wusun_house_door.png.jpg"
rename to "source/_posts/\346\261\207\345\220\210/wusun_house_door.png.jpg"
diff --git "a/2019/08/15/\346\261\207\345\220\210/wusun_snow.jpg" "b/source/_posts/\346\261\207\345\220\210/wusun_snow.jpg"
similarity index 100%
rename from "2019/08/15/\346\261\207\345\220\210/wusun_snow.jpg"
rename to "source/_posts/\346\261\207\345\220\210/wusun_snow.jpg"
diff --git "a/2019/08/15/\346\261\207\345\220\210/wusun_snow.png" "b/source/_posts/\346\261\207\345\220\210/wusun_snow.png"
similarity index 100%
rename from "2019/08/15/\346\261\207\345\220\210/wusun_snow.png"
rename to "source/_posts/\346\261\207\345\220\210/wusun_snow.png"
diff --git "a/2019/08/15/\346\261\207\345\220\210/wusun_snow_ground.jpg" "b/source/_posts/\346\261\207\345\220\210/wusun_snow_ground.jpg"
similarity index 100%
rename from "2019/08/15/\346\261\207\345\220\210/wusun_snow_ground.jpg"
rename to "source/_posts/\346\261\207\345\220\210/wusun_snow_ground.jpg"
diff --git "a/2019/08/15/\346\261\207\345\220\210/wusun_xue.jpg" "b/source/_posts/\346\261\207\345\220\210/wusun_xue.jpg"
similarity index 100%
rename from "2019/08/15/\346\261\207\345\220\210/wusun_xue.jpg"
rename to "source/_posts/\346\261\207\345\220\210/wusun_xue.jpg"
diff --git "a/source/_posts/\346\267\261\345\205\245\347\220\206\350\247\243C-11.md" "b/source/_posts/\346\267\261\345\205\245\347\220\206\350\247\243C-11.md"
new file mode 100644
index 0000000..c1e686e
--- /dev/null
+++ "b/source/_posts/\346\267\261\345\205\245\347\220\206\350\247\243C-11.md"
@@ -0,0 +1,138 @@
+---
+title: 深入理解C++ 11
+date: 2019-12-15 22:14:49
+tags:
+---
+
+#### 1 保证稳定性和兼容性
+##### 1.1 保持与C99兼容(__STDC__HOSTED_, __STDC__, __STDC__VERSION__)
+###### 1.1.1 C99中的预定义宏
+###### 1.1.2 __func__预定义标识符
+###### 1.1.3 _Pragma操作符
+###### 1.1.4 不定参数宏定义以及 __VA_ARGS
+###### 1.1.5 宽窄字符串链接
+##### 1.2 long long 整型
+##### 1.3 扩展整型(signed char, short int, int, long int, long long int)
+##### 1.4 宏 __cplusplus 用于C和C++混合编写
+##### 1.5 静态断言
+ 断言有助于快速定位违反了某些前提条件的程序错误, assert 只能在程序运行的时候才起作用。static_assert用于编译时候用的断言。
+##### 1.6 noexcept 修饰符和 noexcept 操作符
+ noexcept 表示修饰的函数不会抛出异常,如果抛出了异常,编译器直接调用std::terminate()终止运行。
+##### 1.7 快速初始化成员变量
+ C++ 11 中,标准允许非静态成员变量的多种初始化形式。具体而言,除了初始化列表之外, 还允许使用等号=或者{}进行就地的非静态成员变量的初始化, 通过花括号式的集合初始化列表。
+##### 1.8 非静态成员的sizeof
+ struct People {
+ public:
+ int hand;
+ static People *all;
+ }
+ 支持 sizeof(People::hand), sizeof(People::all), sizeof((new People()).hand)
+##### 1.9 friend 友元
+ 可以无视 public, protected, private的属性,友元类或者友元函数都可以访问
+##### 1.10 final/override 控制
+ final 关键字用于阻止函数继续重写,使派生类不可覆盖它所修改的虚函数。
+ 如果派生类在虚函数声明时使用了virtual描述符,那么该函数就必须 override 重载基类中的同名函数,否则代码无法编译通过。
+##### 1.11 函数模板的默认模板参数
+ template class DefClass{}; int 就是默认参数
+ template class DefClass{}; int 就是默认参数
+ 为多个模板参数指定默认值时候,必须遵照从右到左的规定指定
+##### 1.12 外部模板
+ 声明:extern templat void fun(int), 使用extern声明,不会再实例化代码,而是引用外部的模板声明。也可以把外部模板声明放在头文件中,这样所有包含test.h的头文件中就可以共享这个外部模板声明了。就好比全局变量的定义,外部声明和使用。
+##### 1.13 局部匿名类型作为模板实参
+ 可以使用局部的结构体,变量,匿名的结构体和变量 传递给 模板类和模板函数
+
+#### 2. 通用为本,专用为末
+##### 2.1 继承构造函数
+ 可以使用 using Base::Base 的方式把基类中的构造函数全部集成到派生类中。也可以通过 using Base::f 的方式,继承某一个具体的方法。在多个基类,继承构造函数冲突的时候,可以通过显示定义构造函数,阻止隐式生成响应的继承构造函数。
+##### 2.2 委托构造函数
+ 原则上编译器不允许构造函数中调用构造函数。 Info(char e): Info() { name = 'e'}, 也就是说,在初始化列表中进行构造,委派。
+##### 2.3 移动语义和完美转发(这块好trick,反正也用不到, 有uniptr替代)
+###### 2.3.1 指针成员和拷贝构造
+```
+ class HasPtrMem {
+ public:
+ HasPtrMem(): d(new int(0)) {}
+ HasPtrMem(const HasPtrMem & h): d(new int(*h.d)) {}
+ ~HasPtrMem() {
+ delete d;
+ }
+ int * d;
+ }
+```
+HashPtrMem a; HasPtrMem b(a); a.d 和 b.d 都指向了同一个内存,C++中被称为浅拷贝。
+
+解决办法就是 去掉构造函数中的 const(关于这块,要继续了解const的作用, 正常操作,好像也不会加const吧)
+###### 2.3.2 移动语义
+```
+class HasPtrMem {
+ public:
+ HasPtrMem(): d(new int(3)) {}
+ HasPtrMem(const HasPtrMem &h): d(new int(*h.d)) {} // 注意这里还是const,也就是还是原来的内存,并没有新new
+ HasPtrMem(HasPtrMem && h) d(h.d) { // 移动构造函数
+ h.d = nullptr; // 将临时值的指针成员置空
+ }
+}
+```
+因为移动构造完成之后,临时对象会立刻被析构,如果不改变 h.d,析构函数 会析构掉我们本来偷来的堆内存(那如果a = b的时候,也会发生移动构造吧,b的内存会被偷走,也就是说,这里其实也是坑)。
+
+###### 2.3.3 左值,右值,和右值引用
+ 1. 可以取地址的,有名字的,就是左值,不能取地址的,没有名字的,就是右值。
+ 2. T && a = ReturnValue(), ReturnValue 本来在返回右值之后,就将析构,而通过右值引用,有重获新生,生命周期将与a一样
+ 3. T b = ReturnValue(), b 只是由临时值构成的,而临时值在表示式结束之后,会多一次析构和构造的开销
+ 4. 右值引用不能绑定到任何的左值的。
+ 5. 常量左值引用是一个万能的引用类型,可以接受常量左值,非常量左值,右值进行初始化,但是其引用的右值在余生中只能是只读的。可以使用常量左值引用来减少临时变量的开销。
+ 6. std::move的作用,把一个左值强制成为右值, Copyable news = std::move(s), 如果s中包含一些一些大块内存指针,news 就可以把内存窃为己有(s自身不可以再使用)
+
+###### 2.3.5 移动语义的一些问题
+ 通常情况下,如果需要移动语义,程序员就小自己定义移动构造函数
+
+###### 2.3.6 完美转发
+ 完美转发是指:函数模板中,完全依照模板的参数类型,将参数传递给函数模板调用的另一个函数,比如 template void IamForwarding(T t) {IrunCodeActually(t)}, 这里产生了额外的对象拷贝,如果用常量左值(const T & t)来,则可能有无法接受常量左值的函数存在
+ template void PerfectForward(T && t) { RunCode(forward(t))}
+
+##### 2.4 显式转换操作符
+ explicit 禁止隐式转换
+
+##### 2.5 列表初始化
+ 1. int a[] = {1, 2,3}
+ 2. int b[] {1, 2, 3}
+ 3. vectorc {1, 2, 3}
+ 4. 可以通过 initializer_list使自定义的类使用列表初始化
+ 5. POD 类型, Plain Old Data,平凡数据,默认的构造函数,析构函数,默认的拷贝构造和移动构造函数,拷贝赋值运算符和移动赋值运算符,没有虚函数和虚基类,标准布局,没有privat
+ 9. 内联名字空间 允许在父空间定义或者特化子空间名字的模板, inline 相当于 将名字空间导入到父空间中
+ 10. 可以用typedef 和 using 来定义模板和域的别名, using uint = unsigned int;
+
+#### 3 新手易学,老兵易用
+##### 3.1 右尖括号 > 的改进
+ C++98中,如果实例化模板的时候,出现了连续两个 >, 中间应该用空格隔开,以免编译错误,C++ 11 会要求编译器智能的判断哪些情况下>>不是右移符号。 X< 1>> 5>x, C++98中, 会认为 >> 是位移符号,最终得到 X<0>x, 而在C++ 11中会得到一个编译错误的警告,将第一个> 与 X之后的<匹配, 可以通过将 1 >> 5括起来
+##### 3.2 auto类型推导
+ auto声明变量的类型,必须由编译器在编译时期推导而得,可以将复杂的变量声明简化,增加可读性(存疑,理解代码时候,需要自己推导类型),能够自适应,一定程度上支持泛型的编程。
+ 1. auto 并不能从初始表达式中保留CV限制符
+ 2. auto 并不能作为形参
+ 3. auto i = 1, j = 4.13f, 编译失败, auto 从左到右推导 i 为int 所以j 也定义为int,标准称:auto是将要被推导出的类型的占位符。
+ 4. 对结构体来说,非静态成员的类型不能是auto,不能声明auto 数组
+ 5. 不能实例化时候,使用auto作为模板参数
+
+##### 3.3 typeid 与 decltype
+###### 3.3.1 RTTI,运行时类型识别
+ 在C++11中,增加了 hash_code,返回该类型唯一的哈希值,以供程序员对变量的类型随时进行比较。((typeid(a).hash_code() == typeid(c).hash_code()),RTTI会带来运行时的开销,所以一些编译器会选择性的关闭该特性。
+###### 3.3.3 decltype 推导四原则
+ 1. 如果e是一个没带括号的标记符表达式,或者类成员访问表达式,那么decltype(e) 就是e所命名的实体的类型,如果e是一个被重载的函数,会导致编译时错误
+ 2. 如果e的类型是T,如果e是一个讲亡值,那么decltype(e)为T&&
+ 3. 如果e的类型是T,如果e是一个左值,则decltype(e)为T&
+ 4. 如果e的类型是T,则decltype(e)为T
+###### 3.3.4 如果对象的定义中有const或者volatile限制符,使用decltype进行推导时,其成员(结构体内部变量)不会继承const或volatile限制符
+###### 3.5 基于范围的for循环
+ for_each(arr, arr + sizeof(arr) / sizeof(arr[0]), action1)
+ for (int & a: arr) {}
+ 如果迭代变量在循环中不会被修改,完全可以不用引用的方式来做迭代变量
+
+#### 4. 提高类型安全
+##### 4.1 强枚举类型 enum class Type
+ 1. 强作用域,不会被输出到父空间作用域
+ 2. 转换限制,不可以与整型隐式的互相转换
+
+##### 4.2 智能指针和垃圾回收
+ 1. unique_ptr 与所指对象的内存紧密绑定,不能与其他unique_ptr类型的指针共享所指的内存,所有权仅能通过move来转移,一旦转移成功,原来的unique_ptr就失去了对象内存的所有权。
+ 2. shared_ptr 允许多个智能指针共享的拥有同一内存, 调用reset只会降低引用计数,而不会释放,只有在引用计数为0的时候,才会释放所占的堆内存的空间。
+ 3. weak_ptr 可以指向shared_ptr指针所指向内存,而不拥有该内存,使用lock可以返回其指向内存的shared_ptr对象,如果堆存对象无效的时候,返回空指针。
\ No newline at end of file
diff --git "a/source/_posts/\347\245\226\344\274\240\344\273\243\347\240\201.md" "b/source/_posts/\347\245\226\344\274\240\344\273\243\347\240\201.md"
new file mode 100644
index 0000000..a2dd8c6
--- /dev/null
+++ "b/source/_posts/\347\245\226\344\274\240\344\273\243\347\240\201.md"
@@ -0,0 +1,145 @@
+---
+title: 祖传代码
+date: 2019-09-28 18:47:48
+tags:
+---
+
+这是一份可以传给我孙子的代码,记录了libevent事件调度和socket网络编程中端口监听的部分
+
+```
+#include
+#include
+#include
+#ifndef RPC_FRAMEWORK_HEAD
+#define RPC_FRAMEWORK_HEAD
+#include "rpc_framework.h"
+#endif
+
+
+struct HttpServiceHandler {
+ ServiceConfig serviceConfig;
+ std::unordered_map *, HttpResponse *)>> actionMap;
+}
+
+struct HttpServerData {
+ std::unordered_map *serviceHandlermap;
+ std::string *httpContext;
+}
+
+class TransferServer
+{
+ public:
+ virtual void start()=0;
+ virtual void stop()=0;
+ template
+
+ void addMethod(MethodInvoker &methodInvoker) {
+
+ }
+
+ template
+
+ void addMethod(MethodInvoker &methodInvoker) {
+
+ }
+}
+
+class HttpTransferServer : public TransferServer
+{
+ public:
+ HttpTransferServer(int serverPort): serverPort(serverPort){};
+ HttpTransferServer(int serverPort, const std::string &httpContext): serverPort(serverPort), httpContext(httpContext) {};
+ /**
+ * 析构函数
+ */
+ ~HttpTransferServer() {
+ // evhttp_free(http)
+ // event_base_free(base)
+ }
+
+
+ int bindSocket() {
+ int r;
+ int nfd;
+
+ nfd = socket(AF_INET, SOCK_STREAM, 0);
+ if (nfd < 0) {
+ return -1;
+ }
+ int one = 1;
+ r = setsocket(nfd, SOL_SOCKET, SO_REUSEDADDR, (char *)&one, sizeof(int));
+
+ struct sockaddr_in addr;
+ memset(&addr, 0, sizeof(addr));
+
+ addr.sin_family = AF_INET;
+ addr.sin_adrr.s_addr = INADDR_ANY;
+ addr.sin_port = htons(servrPort);
+
+ r = bind(nfd, (struct sockaddr*)&addr, sizeof(addr));
+ if (r < 0) {
+ return -1;
+ }
+ r = listen(nfd, 10240);
+ if (r < 0) {
+ return -1;
+ }
+ int flags;
+ if ((flags = fcntl(nfd, F_GETFL, 0)) < 0 || fcntl(nfd, F_SETFL, flags | O_NONBLOCK) < 0) {
+ return -1;
+ }
+ return nfd;
+ }
+
+ void start() override {
+ int nfd = bindSocket;
+ if (nfd < 0) {
+ exit(1);
+ }
+
+ HttpServerData httpServerData;
+ httpServerData.serviceHandlermap=&serviceHandlerMap_;
+ httpserverData.httpContext=&httpContext;
+ int threads = std::thread::hardware_concurrency() * 2;
+ struct event_base *base_arr[threads];
+ baseGroup = base_arr;
+
+ for (int i = 0; i < threads; i++) {
+ std::thread t([&]() {
+ struct event_base &base = event_init();
+ base_arr[i] = base;
+ if (base == NULL) {
+ exit(1);
+ }
+ struct evhttp *httpd = evhttp_new(base);
+ if (httpd == NULL) {
+ exit(1);
+ }
+ evhttp_accept_socket(httpd, nfd);
+ evhttp_set_gencb(httpd, HttpServicehandler_Impl::service_request_cb, (void *)&httpServerData);
+ event_base_dispatch(base);
+ });
+ if (i < (threads - 1)) {
+ t.deatch();
+ } else {
+ t.join();
+ }
+ }
+ }
+
+ void stop() override {
+ while (baseGroup != NULL) {
+ event_base_loopbreak(*baseGroup);
+ baseGroup++;
+ }
+
+ delete this;
+ }
+
+ private:
+ std::unordered_map serviceHandlerMap_;
+ struct event_base **baseGroup;
+ int serverPort;
+ std::string httpContext;
+}
+```
\ No newline at end of file
diff --git "a/source/_posts/\347\273\231\350\207\252\345\267\261\346\211\276\345\257\271\350\261\241.md" "b/source/_posts/\347\273\231\350\207\252\345\267\261\346\211\276\345\257\271\350\261\241.md"
new file mode 100644
index 0000000..a3d637f
--- /dev/null
+++ "b/source/_posts/\347\273\231\350\207\252\345\267\261\346\211\276\345\257\271\350\261\241.md"
@@ -0,0 +1,32 @@
+---
+title: 给自己实例化对象
+date: 2019-07-23 21:41:59
+tags: 生活
+---
+
+几个月前分手了,想给自己找一个对象。 找对象实在是一件大事, 比工作对自己未来的影响都要大,值得好好经营,花大把精力,具体方式如下
+
+
+### BBS: 豆瓣,水木清华
+戾气太重,效率太低,望而却步
+
+### 请朋友帮忙发朋友圈
+请了两个男性朋友,一个猎头朋友帮忙发朋友圈征婚,目前并没有收到效果,围观是大多数,好一点的是帮忙问下周围的朋友。不过,我还是认为这是一个好的方式,值得尝试的方式,更有效率的把自己的信息传播。只是说,自己的铁杆有限,技能使用次数有限。
+
+### 请朋友帮忙介绍
+这个也还算靠谱啦,不过,大部分人都不会认识几个刚好适合自己的,还知道人家单身的,所以只能多请朋友帮忙,增加概率。
+
+### 各种互联网平台
+ 总的来说,纯网络平台则容易把人当成数字,这点很可怕,容易失去敬畏,总觉得还会有下一个
+
+##### 世纪家园, 百合网
+注册了,然后呢????然后就不知道怎么继续下去了,看起来像一个BBS的网站,挂着几个美女的图片。迅速弃坑。 后来他们的红娘打过来了电话,然后我跟他们聊了半个小时,大概明白他们模式了。他们的网站本来就没啥用,其实他们想要的,就是我的电话,然后要我去他们的实体店里面去做信息认证,然后付费参加他们线下的活动,我想应该有单对单的见面,我问了,但没有得到确认,我反复问,能不能在见面之前微信或者电话沟通下呢?并不能,遂弃坑。线下太低效了,我要付出好几个小时在路上,如果我参加集体相亲,效率也同样一般,时间太仓促,闹哄哄的,谈不了几句的,而且菜市场一样的感觉,让人并不舒服。也许我应该参加下吧,或许有一些不一样的,不好说。
+
+##### 陌陌
+注册了三分钟之后,就放弃了。闹,闹哄哄,这就是我的感觉。听说直播成为了陌陌股价大涨的重要因素,那我也认为直播让它成了一个让人表演的平台,而不是交友的平台,沟通的平台。我来这里是找对象哦,可不是看直播的。
+
+##### soul
+用户活跃度是问题。能看出来,做的还是比较用心的,有一定的用户匹配,信息让输入的也比较完善,一些没有完成的feature也能看出来愿景。找一个聊之前,先回答几个问题的设定挺不错的。活跃度还是问题,推荐也是问题, 不登陆的人别给我呀。一天后弃坑。
+
+##### 探探
+本来期待最大的,也是用之后失望最大的,功能很简单,不停的给你很多人的照片,左滑不喜欢,右滑喜欢,两个人互相喜欢,就可以聊天了。问题还是在于,对方只有一个照片,我虽然颜控,也不至于好看就喜欢,对面三教九流到底是什么人,喜欢什么,哪毕业,什么家境等等,我都不知道,看下面的描述,或许能知道,但是首先效率低,其次,信息并不完整,有的没的,真假难辨。有人吐槽探探是荷尔蒙社交,这是有原因的。他们应该把推荐系统好好做做,不要给我推僵尸用户,不要给我推三教九流。两天后,弃坑。
\ No newline at end of file
diff --git "a/source/_posts/\347\276\216\345\233\275\344\270\216\344\270\255\345\233\275-\347\254\254\344\270\200\347\257\207.md" "b/source/_posts/\347\276\216\345\233\275\344\270\216\344\270\255\345\233\275-\347\254\254\344\270\200\347\257\207.md"
new file mode 100644
index 0000000..4992177
--- /dev/null
+++ "b/source/_posts/\347\276\216\345\233\275\344\270\216\344\270\255\345\233\275-\347\254\254\344\270\200\347\257\207.md"
@@ -0,0 +1,95 @@
+---
+title: 美国与中国 第一篇
+date: 2020-02-08 14:28:28
+tags:
+---
+
+
+### 第一篇
+#### 1. 中国社会的本质
+##### 1.1 社会结构
+> 旧中国是世界上以上层阶级统治多数人的一大典型,城乡二元分裂。社会单元是家庭而不是个人,家庭生活灌输孝道和顺从,培养一个人以后终于统治者并且顺从国家政权的训练基地。儒家强调三纲,君为臣纲,父为子纲,夫为妻纲。熟悉和习惯家族制度的中国人,在官吏等级森严的政府机构内,也乐于接受类似的地位尊卑制度,德国社会学家形容中国为“家族结构式国家”
+
+##### 1.2 士绅阶层
+
+> 中国的士绅可以按照经济和政治两重意义来理解。传统的士绅是通过考试,举荐,捐钱取得功名的个人。作为个人的士绅是公家官员,掌管政治和行政事务。同时也是出于家族关系中的成员,依靠家族关系维持生计,所以他们广义的应该被视为家族。在百姓大众眼里,士绅还应该包括大地主,合适统治阶级的经济基础。穷人可以凭才学成为狭义的士绅,大多数情况下,有科举功名的人总同地主家庭有关系。士绅家族在当地充当领导地位和管理职能,政府放弃了对城镇集市的官方管理。++县官只有通过与当地士绅合作才能进行治理++。
+
+> 中国的考试制度显得异常公允广泛,表明中国的统治者是真正需要真才实学的人来维持有效的行政机构的。但是这个无私的制度选拔出最优秀的人之后,做官的人可以凭个人做主施政,遵循的是注重个人品格的“道德原则”,而不是“法治精神”。
+
+> 官员,地主,士大夫构成了统治阶级,有土地有剩余农产品的家庭,可以让儿子有余暇读书成士。士人读书后可以通过考试做官。官员可以从衙门油水维持生活,置田买宅。
+
+##### 1.3 资本主义的不发达与商人
+美国人迫切想知道为什么中国的商人阶层不能冲破对官场的依赖,产生独立的创业力量。
+
+> 1. 按照古典经济学的说法,经济生活中人要通过生产谋取最大的好处,获取利润。但是中国的传统不是靠增加生产,而是靠增加已生产的产品的份额。
+
+> 2. 官商之间总可以找到密切的共同利益点,政府的保护好支持迷不可少(今天不也是吗?国内外不都是吗?)商人可以通过购置田产,捐功名,通婚跻身士绅阶层。中国不想欧洲,没什么对外贸易可供商人投资(我觉得这个才是本质,没有对外贸易,对内全盘政府接管)。
+
+#### 2. 孔孟之道
+
+##### 2.1 儒家原则
+
+> 西方学者认为它主张忍耐(佛,伊斯兰,基督都这样),平和以及妥协等美德,主张中庸之道,主张守旧和知足,主张尊崇祖先,老人和饱学之士,最主要的是主张温和的人本主义,以人而非上帝作为宇宙的中心。(为社会稳定有序服务,但是缺少人文关怀)
+
+> 儒家思想力图使每个人都变成有道德的人,随时以理想坚持德行,反对人类的谬误。而改革朝政的热情和坚持信念的动力,是为了重申和维护传统的政治形态,而不是改变它的基本前提。
+
+> 儒家强调君王必须有道的理论基础,要顺应天时,广行善事,维持人与自然的协调。行为端正几位有德,以礼持约,本身这件事情就能给人以道德地位和威望。端正的行为赋予统治者以权力。儒家给现政权行使威权提供了一种理性的和伦理的依据。
+
+##### 2.2 经学正统
+
+> 四书的训诫把父道政府描写成安邦家国的关键。理学比古代经传更为完整,并且因重新解释古代经典著作而富于儒家思想更多推理的内容,从佛学吸收了肯定唯心主义的成分,提供了对生活问题的更多解答。主张性本善表述在著名的《三字经》开头几句话里,是中国世世代代孩童最早学习的书,这就难怪西方传教士关心原罪的忧郁思想,难以战胜乐观的儒家观点。政治上,理学家认为君王应该了解真正的治国之道,通过道德上的自我修养成为圣人。研读经书和考试制度车鞥为灌输儒家忠孝原则的有效工具。
+
+##### 2.3 中国式个人主义
+
+> 自古以来的修养,是指人要生活在“众人之中”,同他周围的人建立适当的关系,按照道德原则来生活,以实现他的个性。孟子曰:“父子有亲,君臣有义,夫妇有别,长幼有序,朋友有信”。王阳明反对理学,提出人都有的公共道德天性(良知),每个人在自己内心里都有直观的道德知识。他有成为圣贤的内在可能性。因此他的任务就是完成道德上的自我革新。主要通过学习才能做到,而学习应包括思考,反省以及不断的寻求真理,不仅要背诵基本原则,而是要依赖个人实践。
+
+##### 2.4 科学的不发达
+
+> 西方的科技实际上只是晚近才出现的事。1900年以前,西方的实际医疗成就没有超过中医。17世纪末,儒家学者开始对古代经籍和其中的教条持有一种较为实用好批判的观点。这种叫做“汉学”与“宋学”相对立,是以批判方法治学的总的运动的一部分,然而他们仍未能冲破儒家思想的藩篱,不甚关心物质技术。科学发展的另一个阻碍是中国学者未能制订出一套比较完整的逻辑体系,使人们能够以此概念来检验概念,并系统的将一种陈述与另一种陈述对比。一般来说,中国人之所以落后是由于缺乏动机而非缺乏能力,是由于社会条件而非天生才智,2000年来中国政治生活中孔孟思想格局造成的根深蒂固的惯性。
+
+#### 3. 异族统治与朝代更迭
+田中义一和土肥原贤二支流说来可悲,他们把中国的历史研究的太到家了,但是没有研究到最近。现代中国民族主义是历史上的新兴力量,蒙古人和满洲人过去的辉煌征略场景,再也不能再今天重演了
+
+##### 3.1 游牧民族的征略
+> 中国遏制游牧民族入侵的措施,是秦始皇连接万里长城(遏制小鼓骚扰,禁止通商),之后或是通过防御性的出击,或是通过行贿纳币,或者通过外交活动或者谈判(也包括离间),入侵的游牧民族发现他们只能按照中国的方式才能统治中国,继承天命的人按儒家原则办事,不管谁来都行。
+
+##### 3.2 头几个中外帝国
+> 契丹地跨草原和农耕地带之间,兼有游牧骑兵的武力和农耕区的经济力量。耶律家族采用了中国世袭君主制以及儒家的治国方式。结果出现了双重性的国家,南部是中国式的,背部是夷狄式的,金国也是同样的格局。这些夷狄国家的成就只限于军力而不在于文化,其历史意义主要是作为未来灾祸的前奏。中国的蒙古人只是大蒙古帝国的一部分,他们的道德准则和法治都异于中国(中国的统治更多是由士绅阶层维持,上层变动无法动摇这点),因而蒙古人未能而满族人却能巩固并利用儒家思想体系已达到他们目的。
+
+##### 3.3 满人的成就
+> 虽然他们按照中国方式施政,他们异族渊源和背景却有助于他们在统治集团内保持政治上的青春活力。满人于1644年征服中国的主要原因,是他们入住中国时已掌握了儒家的治国之道,并使他们自己的政治制度与之相适应(所以说李自成是不是崛起太快了,以至于没有准备好),对于他们来说,只要一心注意中国问题就行了,这一点不像蒙古人(元顺帝也是才能有限)。为了保持皇朝活力,他们封闭老家,禁止汉人移入(所以有后来创关东之说?),把满洲组织在一个满洲军政府治下。在民政管理上,采用双重任命制,一个能干的汉人做实际工作,一个忠诚的满人监视他。为了吸收最能干最有前途的汉人效劳,满人注意使考试制度继续实施,并且尽可能受人重视,尽可能行之有效。
+
+> 这种异族统治并未削弱而是加强了儒家的思想传统,这让人认为中国的文化势必民族主义更为基本的东西,放在了一个普遍的,而不是某个地区某个种族的水平(基辛格也认可)。异族统治产生了有趣的现象:19世纪中国进入现代世界时,在民族主义精神方面,显得特别落后,然而在20世纪革命中,他们对自身文化,或者文化素养的世代相传的自豪感激起了一股新的“文化民族主义”,这在将来可能会胜过那些发生在欧洲的政治上的民族主义。中国总是坚持两大政治信念:中华帝国是统一的(基于这种理念,所以唐定南方,西蜀,明朝北伐,解放军解放南方都很轻松,而元灭金灭宋灭夏,清定南方就很艰难),它比一切外国优越。
+
+##### 3.4 朝代的盛衰周期
+
+> 研究中国历史之后看今天的中国,你就会觉得,孙中山,蒋介石,毛泽东相继夺取政权,并组织政权的努力是一个古老主旋律的变奏。朝代的衰微是和通知家族的日益无能一起出现的。有人用经济史观来解释朝代循环,每个朝代不纳田赋的土地越来越多,而田赋是政府岁收和权力的主要来源。统治阶级能够逐步增加他们的田产,并用各种手段不缴田赋,而仍纳税负的农民土地税负越来越重,结果就发生了农民骚动(明朝就是这样,所以有说法说“明亡于东林党”,今天是不是也这样,资产阶级想尽办法避税,贫民税收越来越重)
+
+#### 4. 政治传统
+
+##### 4.1 官僚体制
+> 旧中国皇朝统治是发展的最彻底最巧妙的官僚体制,对新近才碰到官僚政治问题的美国人来说(震惊),中国人怎么样避开官僚政治传统的坏处而又利用其好处,是个颇有趣味的问题。
+
+> 北京气派宏伟的对称布局显示统治者为中心的堂皇气象。官僚政治的原则一般是一个官员制约另一个官员,一个人出名后,常常派他兼管多职,使他哪个职务也不能完全主持,同时也派很多人完成同一项任务,使谁也不能完全加以控制。使之互相制约。督查院选56名御史,分驻各省的15个道,向皇帝上奏朝廷与人民利益的一切事务。还发明了一种“宫廷奏折”,只能由皇帝亲自拆阅,这样整个官场都是统治者的密保人员。官僚制度弊端是事情都由底层发动,层层上报由皇帝决定,下级官员提出的创新或者没有先例的意见既不易上达又危险,唯命是从比较安全,容易扼杀下层主动性。最上层的也因工作效率忙不过来而受不利影响。现代中国仍受这一传统之害。
+
+> 官员必须对治下发生的一切公众事件负责,而不必对公款负责,预算和会计手段是非常简陋的,官员靠我们称之为“系统化贪污”行为来谋生。中国官僚制突出特点是“勒索”和任人唯亲,这是彼此起加强作用的孪生制。
+
+##### 4.2 法律
+> 西方,个人可以求助于法律,对抗官员的专擅。古代中国人认为人的行动必须合乎天理,统治者的职责是维护这种协调统一,统治者是以懿形美德而不以法律影响百姓,认为通晓事理的文明人会受到榜样和高尚行为的指引,而不需绳以法规(借口,是因为不需要,贫民在德治的情况下能维持差不多的稳定而不用严格依赖法律),只有对那些野蛮人,未开化的人才需要实行惩罚而使其愉服(跟西方所谓异教徒说法一个调调)。理论上,赏罚总是为保证人们循规蹈矩的次要手段,目的是“以罚止罚”。孔子认为,法律条文是道德精神的一种表现形式,法律从属于道德,它之所以获得认可,是在于理性。百姓尽量避免打官司,到了那里,原告和被告受审时要先按规定形式打板子,而且谁都必须给衙役使钱。正当理由是属于政府和社会秩序的,是从政府下达到私人的上下关系,而不是为了无所偏袒的解决私人间的纠纷。总之,法律是不断斗争中维持道德秩序的手段,主要是为国家和社会利益服务的,纠纷尽可能由村长,乡邻,士绅来调节,使他们不致涉诉。这一点与没有资本主义和缺乏独立的工商阶级有关。
+
+##### 4.3 宗教
+孙中山曾抱怨他的同胞像“一盘散沙”(小农经济和政府刻意的结果)。普通人对政府是特别消极的态度,对国家事务不负责任。对家庭忠诚而不顾公共利益,一丝不苟的执行按照惯例必须履行的责任,而对陌生人的疾苦漠然置之。
+> 道教表示了平民百姓的自然主义宇宙观,以及对看不见的自然精灵的信仰,提供了逃出儒家思想的出路,每当读书人对过分严格的礼教和经籍心生反感时,道教都有所发展,是摆脱世间繁琐事务的避难所。儒家主张遵守礼法,道家用消极的哲学来回避矛盾。
+
+> 佛教最早信条之一是生命轮回,人生是痛苦的,并且不仅限于今世,万物皆有因果循环中的他物锁定,今生的苦难来自某些前因,消灭了前因就可能消灭苦难本身。故情欲源于知觉,知觉源自六根和接触等等。因此佛教徒的目的,就是要斩断轮回,斩断把人束缚在情欲爱中的因果链。大乘佛教提出了涅槃这一积极教义,只是佛教徒力求达到的境界。佛教给了旧社会的崩溃提供了解释和安慰,在理智上是能够打动人心的,在美学上也能够令人满意。在中国本土发展的教派中,最出名的是禅宗,他们是通过参禅来求得悟道的(闭上眼能想到个啥?)。
+
+> 无论佛道都未能摆脱世俗权力约束而取得独立地位。官员总是把佛教置于严密控制之下(佛教徒不事生产,占有土地,并不讨喜)。
+
+##### 4.4 中国的人文主义
+> 中国关于人口密集社会和家庭生活的长期经验产生了一套公认的行为规则。个人必须接受竹器和蔬菜(竹器是什么? 排斥大鱼大肉倒是好像有)的物质生活标准,这培养了俭朴美德。珍视个人的诚实,勤奋和节约。也接受佛教提倡的满足微薄的享受和克欲的美德。中国古语说“知足者常乐”。生活中特别关心礼节,个人承认社会风俗的力量并使自己屈服于这些习俗。敬老,尊崇前辈,俯首听命于家庭(个人无法对抗家族)。中国式的人文主义包括关心个人尊严的问题,“面子”是社会性的问题,“丢面子”来自行为失检,是别人看不起自己。
+
+> 这一切意味着,一个人的好坏主要看他对社会福利和安定是否有贡献,个人是不受赞扬的,既不是唯一的,永存的,也不是世界中心(缺乏人道关怀)。重视个人的自我表现,很容易流于放纵和无政府主义,所以中国的传统强调社会行为。妥协,容忍,达观和幽默感(有幽默感吗?),关于人性的透彻了解,通过律己养成品格,所有这些行程了个人追求好社会所赞许的部分道德结构,使每个人在社会生活中获得动力(西方是不是就有点过分个人主义了?),这纵容了家长式统治,容许了高度的专制主义。但是由于中国社会试试照顾到人与人之间的关系和社会安宁,这种专制主义有所缓解(道德的彼此约束)。
+
+##### 4.5 民间教派和农民起义
+
+> 中国人三大类型超自然神灵。 1.祖先,2.各式各样的地方神与朝廷相似,但是属于超自然,3. 鬼灵精怪则相当于不能适应环境的人,流浪者和陌生人。民间教派可能借用了道教,摩尼教或者佛教的信条,预言大祸或者天谴降临,带有千年后赐福的思想。非法的宗教流派与三合会不同,后者虽然反朝廷,但是对社会秩序有正统思想。非法宗教派别则持有异端邪说,狂热的追求社会平均,带有破坏性和无政府主义色彩。当人民生活越来越艰难时候,民间教派可能会产生狂热,掀起暴乱。
\ No newline at end of file
diff --git "a/source/_posts/\347\276\216\345\233\275\344\270\216\344\270\255\345\233\275-\347\254\254\344\270\211\347\257\207.md" "b/source/_posts/\347\276\216\345\233\275\344\270\216\344\270\255\345\233\275-\347\254\254\344\270\211\347\257\207.md"
new file mode 100644
index 0000000..7947b6b
--- /dev/null
+++ "b/source/_posts/\347\276\216\345\233\275\344\270\216\344\270\255\345\233\275-\347\254\254\344\270\211\347\257\207.md"
@@ -0,0 +1,35 @@
+---
+title: 美国与中国 第三篇
+date: 2020-02-12 00:27:26
+tags:
+---
+
+
+### 11. 美国与人民共和国
+##### 11.1 美国的扩张与英帝国
+> 在过去的一个世纪里,西方在东亚的地位靠无力维持,通常是欧洲的武力,很少是美国的武力(还算实施)。在于当地民族打交道时,美国的民主主义者总是以我们国内新的民主制感到自豪,总愿意用国家独立,改革和社会平等主张去帮助当地的反叛者,我们感到我们是恩赐的一方,并有自我陶醉之感(是借口吧,战略是促使英属殖民地独立,削弱英国,谋求自己利益。个人可能有逐利和优越感。最初是门罗主义。)美国向中国的扩张不仅是经济的,宗教的,民族主义的,而且是这些扩张性质的总和,美国是非正式英帝国的小伙伴,有时也起带头作用,一方面抨击英国,一面要求分享它的好处(抨击是竞争削弱,分享是自己也想占一份)。我们口头上大道德谈的起劲,官方行动却十分有限,希望中国人民享有民族自决和个人自由的理想,但是从来不采取行动,使之成为理想。我们珍视这些理想,并把它们当做我们文化的一部分,而中国的现实却是中国文化的一部分,如拒绝承认满洲国,同时仍将战争物资出售给日本。
+
+##### 11.2 门户开放政策的演化过程
+> 门户开放的两个原则:1. 保持中国的完整,2. 一切外国人在中国享有平等待遇。主要是为了防止俄国那样攫取中国的领土而把我们排除在外,中国的独立合乎美国人的心意,认为在这政治上是合理的,还适合弱国享有民族自决和主权的原则(另一本书说,这也是中国的策略,防止某一家外国在中国独大,平衡竞争,中国才能有回旋空间)。1949年,人民共和国还没有知道它能从门户开放中到什么好处,就断然把门户开放关闭(当时的开放又能有什么好处呢)。
+
+##### 11.3 美国的贡献和自由主义的命运
+> 美国的援助在教育方面成绩最大,但通常被认为是外国势力的一部分(建立了一些学校,培养了人才)。教育的缺失让中国的自由主义不能制度化。当权者并不承认公民权利,言论和人身自由。总之并不承认法律至高无上的权威。中国并没有西方式的力量雄厚的中产阶级,私有财产和个人在享有无限权力的官府面前毫无法律保障,而西方则以这种安全措施来支持自由主义运动,中国的自由主义者缺乏法律好财产作为防御手段,他们在学者中享受较高的社会地位仍感到安全是不可靠的(今天也有这样的问题吧)。中国自由主义的命运同教育紧密联系在一起。
+
+### 12. 美国的政策和国民党的垮台
+中国的民族主义在日本展战败后人不能抬头,1943年1月11日根据平等原则签订了新的中美条约,不到五个月有签订另一个协定,在华美军不受中国刑法约束,美军在中国土地横行程度更甚。
+##### 12.1 美元和调处
+> 1943年晚期起,美国的政策在三方向进行,1. 在国际舞台上,力图使中国成为形式上的大国而非实质上的大国。也就是想从国外以言辞来加强一个趋于没落的政权。2. 我们的军事努力产生了一个现代化的国民党陆军和空军。3. 我们企图弥合国共之间的分裂。实际上,我们怀着一个自相矛盾的目标,敦促国民党领袖改革,以便削弱他们的专制权力而有利于国内和平,同时督促国民党加强政权,作为走向东亚政治稳定的一步。但是国民党宁可用手里的新式武器按照自己的方案行事。我们在总的方面更缺乏哲学或方法,无法进行强制性的经济开发和强调政治集体主义。
+##### 12.2 美国“丢失中国”
+> 美国陷入了一阵歇斯底里的反攻情绪。对冷战和中国共产党获胜的反映是恐惧居多而缺少创见。而对中国社会质的变化一无所知,与台湾的紧密关系也主张了对中国的敌意。
+
+##### 12.3 我们的盟友台湾
+> 日本殖民台湾期间建立了秩序,做出了物质上的改进,变的不那么苛刻,真正的政治生活并没有收到鼓励,30年代政权趋向于地方自治,人民享有有限的公民权。日本的土地政策遏制了地主占有土地的趋势,并鼓励农民为改进农业和公共卫生而成立协会之类的组织。日本政权真诚的关心提高生产,使半数儿童进入了小学,虽然每年达到大学水平的不足100。国民党于1947年3月镇压了台湾,后期进行了改革,成就就是在没有我们援助的情况下推进了工业化,吸引力越来越多的日本投资(难怪今天台湾对日本有好感)。加入了工商业世界,很好的利用了日本,美国的技术,贸易,投资和文化接触,一批有才能的中国领导人把工业化引导到类似于日本的可持续发展方向,生活水平比大陆搞,同美国的关系开始多样化。
+
+### 13. 人民共和国:建立新秩序
+了解中国的变化的时候的设想依据。1. 历代中国政府力求维持统一的国家和统一的文化,成立善于实施中央控制和大规模官僚统治的政府。第二,1949年的中央政权不仅是中共掌权28年的经验,也是全中国的经验。新政权并不像自称那样是纯粹的马克思列宁主义的产物。它的成就并不是创造了新秩序的所有部分,而是以只有共产党力量和实践才能做到的空前集中的指导方式,把各个部分综合起来,公开的现象背后,同时也扎根在普通人民中间的中国民间传统。北京政权不像我们设想的那样铁板一块,也不想它自称的那样是马克思列宁主义的产物,它的成就不是创造了秩序的所有部分,而是以只有共产党的理论和实践才能做到的空前集中的指导方式,把各个部分综合起来,无论如何,其所得到的结果是中国人以前完全没有体验到的。
+
+### 14. 中国和我们自己
+抱着实事求是的观点:1. 西方侵略了中国,2. 中国人从西方侵略中及取的教训是,中国必须要有自卫的力量。美国对中国的态度是存心想赚钱,也想做好事,力求拿走一些东西,同时也给于一些东西。
+
+##### 14.1 从中国的过去看中国的今日
+> 蒋委员长力求凭个人的正直以及较强的军队和较高明的政治手腕来镇压军阀。他的力量在于他具有这样一些传统资格:牢牢掌握权力的勇气和决心,热心提倡道德,态度严肃,因而获得了个人的威信,忠于他的人以诚相待,对于敌手残酷无情,并善于使他们抵消力量。越南战争以后,美国不那么目空一切,毛以后的中国在意识形态上不那么咄咄逼人。
\ No newline at end of file
diff --git "a/source/_posts/\347\276\216\345\233\275\344\270\216\344\270\255\345\233\275-\347\254\254\344\272\214\347\257\207.md" "b/source/_posts/\347\276\216\345\233\275\344\270\216\344\270\255\345\233\275-\347\254\254\344\272\214\347\257\207.md"
new file mode 100644
index 0000000..9d4c1da
--- /dev/null
+++ "b/source/_posts/\347\276\216\345\233\275\344\270\216\344\270\255\345\233\275-\347\254\254\344\272\214\347\257\207.md"
@@ -0,0 +1,93 @@
+---
+title: 美国与中国 第二篇
+date: 2020-02-09 01:37:15
+tags:
+---
+
+#### 5. 西方的侵入
+从19世纪40年代到20世纪,西方成为中国进行三次革命的思想来源,三次革命为:共和革命,民族主义革命/国民革命,共产主义革命。
+中国的文化是以中国式文化中心这种优越感为基础自觉发展起来的,对信心十足的西方自诩的优越感决不能熟视无睹,掉以轻心。中国对自己的特性看法可以保持无损,但是他的自信心可能从根本上发生动摇。
+
+##### 5.1 欧洲的扩张面对于中国的扩张
+> 欧洲的扩张可以包括资本主义,民族主义,基督教三个方面。民族国家成为政治单位后,他们之间的争雄和交战激发了经济的扩张和技术的革新。于是资本主义和民族主义作为单独二个扩张的侧面互相影响。
+
+> 1549年方济各之后200年里,200多名精选干练的传教士想在中国传播基督教,虔诚专注,坚韧不拔。利玛窦花了20年功夫,一步步从澳门的侨民社会走进北京的宫廷,耶稣会取得成功。明末社会混乱,聪明人渴望获得新思想。利玛窦看出如何侧身士大夫俊杰行列,他脱去佛教僧服,换上汉人长袍,通三五成群的优秀人士交谈,接受了汉代儒家早期的经典著作,为宣传基督教义而引述孔孟学识,支队宋儒理学提出质疑。允许人们对祖先和皇帝敬礼叩头,认为这合乎基督教信义,加上他仪表堂堂,对汉语的精通,以及对西方技术的了解,博得别人对他的好感。同儒士文人一样,他找到靠山,同他们生活出游,建立友谊,通过学术讨论和斯文礼节,同明末的高官交了朋友,最终进入宫廷,并由皇帝赐地安葬(敬佩,他内心的强大动力源自何来?)。通过这种接触,中国学者接触了西方最佳学术,但是结果却没有起什么影响。顾炎武道:“葡萄牙乃爪哇之南....曾索小儿为食”,《四库全书》也说利玛窦谎话连篇,五大洲乃无稽之谈。
+
+##### 5.2 中国对欧洲的影响
+> 欧洲人发现亚洲有一些强大的王国和古老的社会,他们不信基督教居然也能存在很多世纪,这启示人们,纵使没有神所启示的宗教,人仍能做出有道德的行为,而且在很多方面是符合基督教标准的,这位启蒙运动提供了理论基础。伏尔泰在《道德论》里讨论了中国政府,抬高了中国政府的声誉。启蒙运动者所持有的中国,是二手的,理想化的,日后被对哲学不感兴趣的商人和领事的诽谤所粗暴的粉碎。
+
+##### 5.3 朝贡制度
+> 现代中国领导人发现那种条约系统是唤起人民牢记国耻的宝贵象征,蒋介石在《中国之命运》中把现代化中国的一切弊病都归咎于不平等条约,共产党对此的谴责更厉害和全面。而古老中国的朝贡制度,也如同取代它的条约体系一样,是不平等的。中国认为皇帝受命于天通宇万民,自应对一切“远方来人”表示仁慈的胸怀(则修文德以来之),外国承认天子独一无二,则必然要在礼仪上表现出来。三跪九叩使任何人,特别是行礼者心中无法怀疑尊卑问题。
+##### 5.4 条约体系
+> 虽然条约好像是在平等主权国家之间签的,但是这违反了中国意愿,放任西方商业和文化入侵。治外法权,使得在中国的外国人只受外国法律管束,成为开放中国的有力工具。西方的商品思想,方法源源不绝涌入中国。
+
+##### 5.5 人口问题的灾祸
+
+> 随着经济增长,人口增加,政府的税收并不能齐步并进(摊丁入亩,永不加赋的弊端),同时削弱了政府对社会的控制,造成了社会动荡。
+
+#### 6 叛乱和复辟
+##### 6.1 作为反叛雏形的白莲教
+> 白莲教迎合迷信,说菩萨即将降临人间,明朝将要光复,今世的苦难,疾病和个人痛苦可以消除,并保证来世的幸福。白莲教的狂热领袖们很快就在对他们的号召力增加了排除满足的种族主张。官军切断了叛军的兵源,粮源之后,叛军终于消亡。白莲教缺乏士人做思想上和行政上的领导。
+##### 6.2 太平天国
+> 鸦片战争动摇了清廷威信,1846-1848年,在大规模增加的人口中间出现了水灾和饥荒,“拜上帝会”公开反叛。洪秀全主要是从《旧约》中挑选了一些基督教原理创立新教,万能的救世主,他具有一切世人精神父亲的身份,但是他认为基督教关于爱,宽恕,关怀邻人的教导没多大用处,他们抛弃了基督教关于原罪的思想,赞成中国人性本善的信念(哈),重视传统道德观念。主要是领导措施失当导致失败,无法建立有效政府,对农村没有有效的民政和管理办法,未能争取儒士文人参加他们的运动,而他们的敌人,儒家上层绅士仍控制着农村,并动员了农村力量来反对他们。另一方面,它的宗教太浅薄,社会和经济主张太不充分,不足以取代儒家思想。
+
+##### 6.3 捻军及其他叛军(回乱)
+> 结果出了造成纷乱和灾难之外,很少有什么成就,没有历史价值。
+
+##### 6.4 儒家政府的复辟
+> 在年青的慈禧听政下 1. 启用了新的满族领袖,2. 接受了条约体系,3. 支持各省保守的汉族儒将,镇压了叛乱。一批科举出身,有高度道德原则而忠于朝廷的文官开始试图在农村经济和大众福利事业上实施仁政,减轻赋税,开办学校,选拔人才,创办工厂,开始西化。但是他们仍死抱住以农立国的经济原则不放,认为农业是国计民生之本。他们没有近代人关于壮大经济和发展经济的概念,而轻视追逐财富。力图向农民和官员兜售勤俭和清廉的古代理想,以满足人民和政府的需要。他们有意识的想恢复过去的一切,而不是创造性的面对未来,不能充分发动下层官僚,也不能应付西化过程中的技术问题和学术文化问题。
+
+#### 7. 维新与革命
+这一代的中国人也抱着陈腔滥调不放,认为跳半步就可以进入现代。
+#### 7.1 自强运动
+> 李鸿章认为:为谋自强,必须学会西方机器,这就需要训练中国人才。但是西化运动的每一步都受到物质和偏见的儒家文人阻挠。但是翻译工作,更多是依靠外国人和少数外事官员的主动精神,而不是皇帝指示下办的。到1881年,留学生计划也放弃了。工业化也一般都是流产,担任经理的商人在官署的监督下执行,双方都捞取公司的利润,而不是再投资。
+##### 7.2 帝国主义与1892年的改良运动
+> 西方传教士发现中国人过分自信,改变宗教信仰的人数颇少(信仰体系已经建构完毕)。但是基督教的其他影响对中国旧社会有高度破坏作用,对中国人民帮助很大。如从普通人中选拔人才,翻译西方文学,提倡妇女教育,协助慈善和赈灾等(天哪,这居然还要西方人来做)。1895年日本人意外打败大清帝国之后,中国才真正实施改革,这个时候改革的目的也不是根本改革,只是引用外国的方法来加紧“自强”。康有为熟悉佛教和基督教义,以及译成中文的西方著作,赞同当时流行的社会进化论,认同国与国之间也可以试用适者生存的原则(得,比我见识广)。百日维新失败证明自上而下的改良中国是绝无希望的。也大大促进了革命变革。
+
+##### 7.3 革命派与维新派
+> 梁启超在维新运动之后,通过在日本的著作和刊物,成为现代中国自由主义传统的创始人之一。梁重新解释了儒家伦理道德,他说,既然国家已经成为涉及民众命运的共同体,忠的对象就应该是国家而不是君主。儒家的忠应该变成现代的爱国主义,其转变途径是更改人的感情,而不是利用强制手段(有点类似于阎学通的说法)。他赞扬英国的个人主义,指出只有经过教育,自觉接受法律和秩序的情况下,个人才可能获得自由。中国公民应有为公的精神,富于事业心,能够维护自己的权利,并抛弃乞求皇帝恩惠的思想,应该养成并保持不为世俗所左右的独立精神,关心自己所处的社会,并要求自治。这是对儒家伦理古训的直接攻击和修改。梁以进化论的思路论证说,共和政体在中国还不可能实现,中国人民的教育水平太低,不能让他们参加代议制政府,而且一场革命会带来独裁的重大危险,会招致外来侵略和瓜分中国。提倡实行君主立宪制,在这种制度下,新民教育以及各省和全国议会的建立将使中国逐渐取得进步。梁在日本组织的政治团体主张成立全国议会,有一个内阁政府对它负责,有新法典,独立的司法和地方自治政府,中央和地方政府的分工明确,通过废除不平等条约来取得外交上的平扥地位。这份开明的渐进的政治纲领,代表了当时最合乎人道的,最精深的政治思想,具有广泛影响力,足以争取青年学生的支持(确实还不错,称为保皇派,可惜清廷缺乏诚意)。
+
+##### 7.4 清廷的改良和共和革命
+
+> 清廷的改革只是纸上谈兵,缺乏诚意。最出色的工作是训练出了袁世凯个人统领的新军。宪政思想的传播导致企业家,维新派,新型政客把忠于本省作为第一步(这也是奠定后来格局的起因吧,思想和地理决定的)。帝国主义的侵略逐渐激发了爱国主义觉醒。教育逐渐推广,识字人数大为增加,开始反对鸦片,缠足,卖淫等弊端。孔孟之道开始丧失威信,皇权被不断挑战,青年人对老年人,妇女对男子的服从也开始成为问题。士绅阶层开始多样化,工商家,维新派绅士和报馆文人,青年军官和保守派。1911年革命所代表的力量远远超出孙逸仙能提供的革命领导力量,名义上的革命领袖,相对无力控制革命背后的力量。种种考虑的结果是让位给袁世凯,认为后者更宜接任更高地位的强有力的行政领袖(现实且高风亮节的选择)。此时的社会变革由维新派绅士和新军人领导,局限在统治阶层内部,老百姓反而多缴税,并不得人心(这是当时革命派的局限)。
+
+#### 8. 国民党的兴起
+
+1912年君主制结束,中国政治生活中的中心人物之所以能被抛弃,是因为民族主义已经抬头,提出了以国家,文化和人民作为新的效忠对象。但是民族主义在制度上尚未表现出来。
+##### 8.1 探索新秩序
+> 为什么1911年的革命不能建立西式的新中国呢?第一是没有共同的目标,起义汇集起来的各种成分意外,除了推翻满清,没有其他共同目标。第二是缺乏政治体制,并缺乏人民参与(是不是说明必须由强有力的一方主持才能有效推进)。第三是,当时的爱国人士深恐外国干预。第四是,中华民国向西方借鉴,并通过立宪议会和内阁而组织政府的想法,是同中国的政治传统脱节的(当时成功的话,是不是也就是下一个印度)。这时的军阀割据,是老式的政治现象,思想上并无建树。当时有“联省自治运动”,但是这种运动缺乏逻辑性和表面的可行性。第一是巨大的传统力量,中国维护统一的传统。第二个外国干涉的危险促使民族力量支持统一,而统一只有在强有力的中央政府治理下才能取得。
+
+##### 8.2 五四运动
+> 中国的问题扎根很深,相对器采取有效措施,就越来越有必要对这些问题进行深入分析和理解。首当其中是改革文言文,促使其推广到人民大众中,成为书写的传播手段。文体革命,以及知识普及成为革命的基本问题。文体革命的第一步,就是把日常用语用书写的形式表达出来。胡适研究实用主义,提出了提倡科学思想方法以及科学批判方法的领导人。随着科学而提出的是民主。鲁迅认为中国的文化是“奴才伺候主子的文化,主子是以人民大众的苦难为代价而青云直上的”(有点偏激,但是道理是对的)。
+
+##### 8.3 国民革命
+
+> 国民革命结合了两种趋势,一种是减持强权人物领导下重新走向国家统一的传统趋势,一种是采用西方管理效忠于国家的新思想,以一党专政来垄断权力,从而接近于现代政体的新趋势。南京政府创建了上层阶级的体制,反对彻底改变普通农民生活的思想(为什么?传统?还是资本主义)。孙逸仙并不赞成共产党的阶级斗争思想,却充分认识到共产党的方法非常有用。列宁认为如果没有帝国主义的剥削,没有亚洲的市场和原料供应,资本主义会跨的更快,所以号召殖民地的各族人民反抗西方(他们自己也是帝国)。1923年1月孙逸仙和苏联代表联名发表协约,协约中说孙并不赞成中国实行共产主义,因为它同中国的国情不和,又说苏联同意中国需要统一和独立(苏联虚伪),并准备协助中国进行国民革命。正如孙在当时写信告诉蒋介石的,他不得不向能提供援手的人寻求援助,西方列强并没有提供援助,当时他心里共产主义替代三民主义成为中国革命纲领。国民党的目标在于领导一个广泛的,全国性的,多阶级的运动,以避免阶级斗争,孙又认为民生主义和共产主义没有实际差别,俄国在必要时候会抛弃中国的共产党(想法倒没错,但是民生主义并没有很好的执行,以至于无法真正战争动员)。蒋介石定都南京后,开始镇压共产党的革命。托洛茨基预见到蒋介石的叛变行径,竭力主张在共产党的完全领导下在中国建立工农苏维埃,但是斯大林寄希望于革命的后期,共产党人就能抛弃他们的国民党盟友,“就像挤干了汁的柠檬”。
+
+#### 9. 南京政府
+那个时候,我们美国人所接触的那个现代中国,是轻敷在古老文明的一层粉饰(对的,看的透彻),虚饰底下,旧中国仍在半个大陆的农村继续存在,由于语言的障碍,物质水平的悬殊,以及社会的禁忌,这个旧中国是同我们隔绝的。新中国的生活与我们外国生活相互渗透,而底层蕴藏着的古老中国社会不为西方理解,也不为现代中国人理解。
+##### 9.1 政治发展情况
+> 国民党成为官僚政治的一部分而丧失了革命感。开始收回了治外法权,收回关税自主权,收回一部分租界。总的来说,南京政府开始确保中国主权和国际平等等民族主义的要求。
+
+##### 9.2 蒋介石的崛起
+> 蒋介石凭借狡猾的政治手段和冷酷无情的决心,成为时代需要的,能应付各个军阀的铁腕人物。被认为是代表了中央集权形式的“一党专政军国主义”,是推翻地区性武装割据所必须的。蒋介石通过保甲制度,秘密警察,地方宪兵,教育津贴等加紧控制政治,复活孔孟之道,暗中成立蓝衣社。蒋介石的思想来自很多方面,曾国藩为人处世以道德目的来衡量的见解,列宁关于帝国主义的解释,卫理公参加仪式的基督徒的虔诚,从各个轴心国来的影响,这些内容体现在1943年发表的《中国之命运》一书。
+
+##### 9.3 走向工业化
+
+> 中央政府放弃了对田赋这一有潜力的主要收入来源,让各省加以利用,而在本应扶持的经济部门上收税以维持生存。最后的结果是像穷人所需的消费品征税,付利息给富有的债券持有人。农村经济没有增长,生产投资被官僚和反生产的财政政策所阻挠。
+
+##### 9.4 地方政府
+
+> 电报电话公路汽车使得中央命令能迅速传达,南京派出的新行政官员力图扩大规模的改革范围,用来替代帝制时期的县官和士绅。县以下设立了乡区村,村镇成为地方自治的基本单位。国民党在很多农村方面,土地开垦,造林,水利,水力发电,控制病虫害,土地再分配,减租,轻重工业化普及教育等,踌躇不前,茫无头绪(并不关切民生)。对农村缺乏大规模援助,基督教反而在这方面带了头。
+
+#### 10. 共产党的兴起
+毛泽东带领政党取得政权,组织和改造了人民,改变了山河,亚历山大,凯撒,查理大帝,拿破仑,俾斯麦,列宁,没有一个前人的成就比得上毛泽东。
+##### 10.1 头10年的起伏多变
+> 国民党镇压了共产主义运动,但是运动没有取得进展的最根本原因还是在于自身“没有及时重视农村工作”(中国有什么无产阶级)李立三继续执行早已失败的城市武装起义路线。命令中共机构尽力组织城市工人,举行政治罢工和武装起义,他想利用工会成员达到党的目的,恶如不是代表他们解除经济的痛苦而斗争。失败后,28名从苏联受训回来的留学生主宰了党的机构,但是在国民党控制的城市里活动困难,他们接收了农村里的苏维埃根据地。
+
+##### 10.2 毛泽东的兴起
+
+> 1927年毛在考察湖南农民运动时,提出自己的预见,认为可以利用普通人民的革命热情和能力来解放农民,并且推翻旧的统治阶级,在武汉的统一战线政府里,带头主张土地改革。毛创立了农村革命根据地,后被排挤出革命机关。瑞金政府用了列宁在1905年不同情况下的方案,像俄国那样用纸面出色的劳动法令优待并不存在的无产阶级,给与比农民更多的代表权。红军享有优待,用暴力分配了土地。在即将灭亡之时,莫斯科回来的分子承认了毛的领导地位。蒋介石的军队受中国军事传统限制,严重脱离人民,给与士兵武器,但是并未向士兵进行思想教育。为组织起群众支持,共产党人暂时放弃了没收土地并重新分配的方案,改为赞成减租,实现了国民党1930年的37.5%法令,因此并没有大批有产阶级从共产党地区外逃,宣布实施三三制,不去垄断政府职位,反而能更好的发挥领导作用。注重互助垦荒,组织小规模的工业合作社,开发农村潜力。宣传工作不受严格的条条框框限制,只提出争取国家独立,民主自由和人民幸福(含义与三民主义相同),不再强调苏维埃,专政和阶级斗争。
+
+##### 10.3 战时意识形态的发展
+> 1940年,毛提出的三大目标是实行统一战线,武装斗争,和党的建设,在抗击日本和改造中国的任务中争取尽可能多的盟友。1942年毛发动了思想上,党内外关系上,和文风上的在“整风运动”。在小组会上进行长期的批判和自我批评,在群众大会上承认错误和做检讨,成为标准流程,这样做的目的是为了保持党的战斗力和献身精神,使党员为未来任务准备。在反对主观主义,宗派主义和形式主义中可以看出,正在花大力气来重新教育和训练沾染了自由主义,个人主义和传统道德的新党员。也标志着留学生团体的失势。马克思主义必须应用于中国农村的具体实现,并在行动上加以检验,成为“毛泽东思想”的基础。《新民主主义论》中指出,统一战线是当前阶段需要的,也重申了党的长期使命。毛把中国革命分为两个阶段,新民主主义必须把旧的“半封建”的社会变为独立的“民族”社会。形式上,新民主主义应根据选举产生“民主集中制”政府,由从乡村到全国,层层的人民代表大会来进行。土地变成农民私产之后,这种改革将产生出与社会主义农业制度极不相称的制度。解放运动的目的,在于唤醒中国农民大众并使他们活跃起来,党的干部才能领导农民群众创造新生活。革命目的是要人民过上新生活,从改善他们的经济生活入手,只有行使那种足以改变旧秩序的绝对政治权力,才能改善人民大众的经济生活,一个党只有在它的党员服从明确的党纪时才能发挥作用,也就是说所有党员都可以在党会议发表意见,但是一旦做出决定,全体党员必须服从。
\ No newline at end of file
diff --git "a/source/_posts/\347\276\216\350\201\224\345\202\250\350\257\273\345\220\216\346\204\237.md" "b/source/_posts/\347\276\216\350\201\224\345\202\250\350\257\273\345\220\216\346\204\237.md"
new file mode 100644
index 0000000..e13b399
--- /dev/null
+++ "b/source/_posts/\347\276\216\350\201\224\345\202\250\350\257\273\345\220\216\346\204\237.md"
@@ -0,0 +1,142 @@
+---
+title: 美联储读后感
+date: 2019-09-19 02:01:03
+tags:
+---
+
+
+#### 1. 背景介绍
+a. 卡特总统开始甄选美联储出席的候选人,美国的经济此时正处在水深火热之中,通货膨胀达到13%, CPI(消费指数)达到11%,美元贬值,油价暴涨,社会财富两极化严重, 并且初步介绍了美联储,“是代议制民主核心中一个至关重要的畸形人,是与自治民权神话并存的矛盾体”,若隐若现,主宰了经济,但是消失在公众之外。卡特总统的演讲里面有一番话很有意思。不过我感觉今天美国依旧消费主义大行其道,人依旧寅吃卯粮。卡特的这番话似乎并没有大作用。
+
+b. “在一个崇尚努力工作,家庭稳固,亲密社区和上帝信仰的国家,我们当中太多人越来越崇拜自我放纵和过度消费。人们对身份的认知已经不再依靠行为,而是对财产的拥有。但我们发现,拥有和消费并不能满足我们对人生意义的向往,堆积如山的物质财富并不能填满我们因缺乏信心和生活目标而产生的空虚感”
+
+c. 保罗*沃尔克就位,第二天道琼斯爬升,金价下降,故事开始了。
+
+#### 2. 第二章介绍美联储
+a. 是个十足的怪胎,最高层是七位美联储委员,由美国总统任命,参议院认可,七位委员与12家储备银行行长共享权利,12位行长在各地区私人银行效力,他们是由各区的董事会选举产生的。每次委员会决议,要由12名成员,7位美联储委员和5位联邦储备银行行长,后者由12名行长中轮流产生。之所以是怪胎是因为美联储绝缘于普通人的监督,又控制普通人的生活(unasm:有没有点中国政府的感觉)
+
+b. 美联储有两个小小的阀门,1. 直接面向银行的贴现借贷,2. 政府有价债券的市场买卖。 当美联储从银行手里买入国库券和票据时,不过是将创造的货币存入了买入了这些有价债券的金融机构的储备账户中,增加了货币供给。美联储注入的资金被称为高能货币,复制的过程令人眼花缭乱,美联储注入10亿美元,银行体系立即生成8.4亿贷款,即除去16% 的储备金,8.4亿的贷款又会成为新的贷款本金,除去16%的储备金,剩下7.06美元,也会成为新的存款,并且衍生出新的借贷业务,扣除16%的储备金之后,又会产生5.93亿美元,以此类推, 10亿美元最终在存款中变成超过50美元,这些可以看过全美国的货币供给量,即M-1总额。如果银行的投资组合因借贷政策过于激进而超过了储备金量,它又两个选择, 1. 必须在每周一次的申报期结束时做存结,吸收贷款,废除存款记录, 2. 暂时借入储备金,而这种借入也是有价格的,也就是联邦资金利率。
+
+#### 3. 货币主义VS凯恩斯主义
+
+a. 1963年,米尔顿*弗里德曼 和安娜出版了代表其事业巅峰的《美国货币史》。作为倡导自由的保守主义者,弗里德曼从根本上反对政府对私有制市场的自然运行机制进行任何形式的干预, 但是他和凯恩斯主义之间最尖锐的矛盾还是在经济受控于政治的思想。弗里德曼坚称:凯恩斯主义看似以扩大政府财政支出为中心的政府财政政策只会带来短暂的回报,政府对私有经济的影响力其根源来自于对货币的控制,即美联储的货币政策,而美联对货币供给的操作只会破坏社会稳定且遗祸无穷。美联储总是不负责任的控制货币供给量,供给过多造成通货膨胀,然后再实施货币紧缩,从而阻断经济发展,引发经济衰退。
+
+b. 沃尔克希望通过遏制货币统计来调控经济,降低货币的供给可以提高利率,抑制通货膨胀,而比起直接提高利率的方式,通过遏制货币供给可以把利率提高到超出水平的程度而免受攻击。
+
+c. “我希望的是: 对金融市场做出一个强大而积极的反应,利率起初会大幅上扬,但其对人们对通胀预期会产生积极影响,长期利率也会因此而开始下降。这场心理战取得成功的标志,就是长期利率是否会呈现稳定并开始回落的趋势”
+
+#### 4. 改革的影响
+
+a. 金融市场的利率攀升,在实际经济中造成影响有亮点: 1. 房地产,汽车,其消费品世行有许多潜在客户会因为更高的购买价格而却步,2. 对于不在乎高利率仍想购买商品的消费者来说,会更难获得贷款。紧缩的信贷条件迫使商业银行和信用合作社谨慎对待货币配给,在借贷人中谨慎选择,优先选择最具竞争力的客户,并且拒绝其他人。
+
+b. 当经济增长呈现过快趋势,交易货币需求量也会随之出现增长,这就会与目标货币供给量发生冲突,其结果就是造成市场利率上升,相应的,利率上升会降低民众的消费欲望,对新贷款的需求也会下降,货币增长量也会减缓,直到恢复美联储想要看到的适当的水平。这就是基本运行原理。在实际操作中,纪律体系会先惩罚最弱小的玩家,而最强大的企业会寻找机会规避不利,举步维艰的企业和收入有限的家庭一定会付出最高的代价,而大型银行则可以吸收来自信用合作社和州立信用合作社逃离的储户。
+
+c. 但是通货膨胀带来的压力依旧使人借来大量的钱来购物,油价再次疯涨,利率升高,一月CPI指数达到了16.8%,黄金几个月翻了一番,银价增长五倍。汽车销量已经下滑到1975年来的最低点,新房建筑量缩减近20%,但是其他产业的消费依然强劲。失业率开始抬头,个人收入正在下滑。唯一的解释是债务,家庭正在用更多的债务补偿缩水的收入。美联储一再提高利率,达到18%,市场短期利率涨到20%。
+
+#### 5. 货币控制法案
+a. 货币控制法案取消了利率的上限。商业银行之间展开自由竞争,超过1000家储蓄信贷社倒闭或者吞并,大型金融组织地位得到巩固和强化,利润向上流动,高利贷得到允许。
+
+#### 6. 经济崩溃
+a. 应卡特总统要求,美联储将分门别类的对信贷市场开始控制和管理,但是此举遭到大部分美联储委员反对和嘲笑:“整个行为看起来更像是消费信贷市场的各个角落装点门面”,但是此举反映了总统的意愿:请停止借贷。经济就开始意外崩溃了。消费开销开始大幅度下降,企业信贷也开始缩水, GNP不到三个月骤降10%,人们纷纷开始还清债务,取消了信用卡。卡特的支持率骤降。
+
+b. 泡沫破裂,银价暴跌,亨特兄弟因囤积白银即将破产,波及芝加哥第一美国银行,美国第二大经纪公司,沃尔克紧急救助亨特兄弟。
+
+c. 两周内利率从18%下跌到13%,利率的过度震荡就像魔鬼,让人不安。1980年4月,5月美联储疯狂注入储备金。美联储内部关于是否忠于货币主义产生分歧。六月份利率再次下降到8.5%。但是到7月份经济意外且突然的复苏。消费者重新开始购物,商业活动复苏,信贷业务再次急剧扩张。美元在国际市场的贬值得到遏制。卡特总统在连任竞选中开始攻击美联储提高利率。
+
+#### 7. 货币的本质
+a. 这章没什么可说的
+
+#### 8. 谁应该管理美国经济
+a. 美联储最初是被一群底层的劳动人民拥护的,而不是政客和银行家。1877年开始的骑士运动诞生的农民联盟,因为经济紧缩开始有了货币的诉求。通货膨胀会侵蚀家庭金融资产,也会起到财富的再分配的作用。但是通货紧缩会让存款很少的普通人收入缩水,债务负担增加。
+
+b. 1861至1986年的南北战争期间发型的绿币造成通货膨胀,但是对于农民来说,却是最富裕的一段时间。战后,绿币退出流通,金本位恢复,物价回落,农民的收入降低。
+
+c. 1886年绿币党建议国家提供一种货币供给,由政府根据市场信贷需要进行货币扩张或者货币紧缩。目标是通货膨胀,让物价上升,这样农民就可以从农产品中赚钱养家糊口。但是遭到嘲笑,谁来阻止政府无限制的印钱呢(ps: 有没有点今天比特币的辩论),农民改革家解释是:货币供给的增长要与经济增长紧密挂钩。
+
+#### 9. 美联储的诞生
+a. 1913年, J.P.摩根去世,其巨大的影响力需要被继承。在美国的银行体系陷入恐慌或者流动性困境时候,摩根会组织救援,选择对哪些银行救助,允许哪些银行破产。
+
+b. 美联储的原型:创立由15个主要地区的银行位代表的国家储备委员会,协会由商业银行组成的委员会控制,但是由联邦政府授予权利,其作用相当于一家中央银行,即负责创造货币,并向私人银行借出储备金。这样闲置的储备金得以战略性分配调整,向流动性陷入困难的银行移动。目标是消除金融危机的带来的恐慌
+
+c. 第一次世界大战之后,美国急剧通货膨胀,为降低通货膨胀率,美联储将贴现率从4%提高到7%,之后18个月价格紧缩,经济收缩,生产规模下降42%,失业率激增5倍达到11.9%。美联储开始扮演调控经济的角色,并且地位开始巩固。
+
+d. 1927年,美联储向美国银行体系注入大量流动资金,并且通过海外信贷流动到海外,达到放松欧洲金融市场的目的,但是事与愿违,实体经济疲软, 流动性进入金融市场, 造成泡沫, 1929年秋,大萧条开始,1929-1933年,货币缩水三分之一,大量债务和经济行为在倒闭和债务拖欠的形式加以清算,本来可以通过降低利率刺激信贷和经济行为复苏,本可以购入政府债券注入资金,但是美联储认为这不过是对过剩货币对矫正,也是为了保护重要银行的利益而拒绝加以干涉, 1931年10月,美联储甚至提高了2%的贴现利率,基础货币再次缩水。
+
+e. 清算劳动力,清算股票,清算农民,清算房地产, 其会清除经济体内的腐烂和败坏,人们会更加努力的工作,生活也会变得更有道德意识,价值观将被调整, 有事业心的人将会吸收能力差的人的失败教训。
+
+f. 1932年四月,美联储开始购入国库券,注入货币,然后到夏天又放弃行动。几个月后经济再次紧缩,银行倒闭风潮席卷全国, 5000家银行破产,经济崩溃高峰如约而至。
+
+#### 10. 马里纳的新经济学
+a. 政府花更多的钱去刺激经济,包括失业救济,公共设施,农业拨款,农田抵押贷款再资助以及战争债务清算。实施一系列有利于长期稳定的改革,针对银行储蓄的联邦保险,一个中央集权的联邦储备系统,重新分配收入的税收改革,最低工资法案,失业保险,养老金,股票市场以及其他经济领域的政府调控。
+
+b. 1934年,马里纳成为美联储主席,他剥夺12位联邦储备银行的投票权和自治权,加强坐镇华盛顿的7位美联储专家的货币政策控制权。
+
+c. 1937年的二次衰退,政府开始削减赤字,同时美联储开始增加各银行的储备金量,吸收过剩的储备金并提高利率。这种结合极具毁灭性造成经济二次衰退。
+
+d. 凯恩斯认为:以市场严重失衡为代表的经济大萧条正是过剩的资金找不到合适的生产投资开始的,病态资本无法用于创造新供给的投资中,直到找到充足需求。解决办法就是: 为刺激生产,必须操纵市场需求商品总量,让持有资金的人确定再次投资可以有利可图,从而恢复资本的形成过程, 实现世界财富的繁殖增长。
+
+#### 11. 改革的代价,被牺牲的人
+a. 里根总统希望通过减税和削减政府财政支出,增大赤字来复苏经济,刺激增长,这与美联储的抑制通货膨胀的目标相违背。内阁给美联储施加压力,要求配合。1981年4月通胀率降到7.2%,美联储依旧进一步紧缩货币。而减税政策到1983年也未能充分实施。
+
+#### 12. 萧条是对畸形繁荣的惩罚
+a. 1981, 1982年,企业利润一路下降, 大批公司裁员,民众开始抱怨美联储。强势美元导致美国出口的产品越来越贵,从国外进口越来越便宜,加速了农业和制造业的衰退,但是对金融业利好。
+
+b. 美国银行大量向发展中国家,比如巴西,墨西哥提供贷款。LDC债务急剧扩张,但是项目本身质量令人担忧。
+
+#### 13. 被牺牲的都是穷人
+a. 对于20世纪末的美国人来说,工厂的频繁倒闭和工人的被迫失业似乎是天经地义。劳工联合会开始失去控制权,工作岗位开始向海外或者不发达的南方流入。1982年12月企业清算达到顶点, 其中绝大多数都是小型企业, 1200W美国工人失业,自杀率增加,非正常死亡率也在增加。联邦利率在15%徘徊,消费指数低于5%。
+
+b. 计算机和高科技人才需求增加, 金融银行业在1981-1982年创造了更多就业岗位,利率的上涨给拥有金融资产的人提供了1480亿美元的收入。货币价值稳定或者增加的话,货币的繁殖速度会更快。
+
+c. 保罗沃尔克自律朴素,对待美国经济如严厉的父亲般对犯错的孩子加以惩罚,对孩子解释那些孩子不能完全理解的原因以及从长远角度来看什么对是孩子最有利的。
+
+d. 斯托克曼和他共进午餐,唐纳德里根和他单独吃早饭,韦登鲍姆也和他见面,所有人都试图和他交易。
+
+e. 墨西哥货币疯狂膨胀,失业率达到13%,濒临无力支付海外贷款利息的地步。但是如果墨西哥崩溃,美国的顶级银行也会随之崩溃。9家银行向墨西哥销售的贷款占其总资本的44%。美联储决定提供6亿美元的短期贷款维持墨西哥经济,7月末又提供7亿美元。
+
+#### 14. 经济的急转弯
+a. 宾州广场银行因向石油和天然气开发上无节制的贷款而财政状况恶化,美联储,大通曼哈顿,大陆银行等最后决定不救,宾州广场银行周四关门,联邦存款保险公司查封其资产并破产管理,参与投保的存款人将立即收到其账户的全部赔偿,其他债权人和索赔人必须排队等候分享该银行缩水的资产。银行对来自美联储的建议和压力置之不理。美联储对银行无可奈何。
+
+b. 如果墨西哥也即将破产,债务危机会像瀑布一样席卷整个第三世界,从墨西哥到巴西,到阿根廷,秘鲁,智利,委内瑞拉。6月美国银行组织了一笔250亿美元的信贷卡,但是欧洲银行拒绝注入新贷款,私人资本加速逃离墨西哥银行。
+
+c. 美联储开始放松货币政策。沃尔克试图弱化这次政策上的变化,因为不想让货币主义者群起而攻之。联邦资金一降再降, M-1不再增长
+
+#### 15. 兜售繁荣
+
+a. 里根总统谴责美联储做的太过火了。
+
+b. 贴现利率下降到8.5%,五个月内第七次降低利率。美联储未来15个月内冻结贴现利率。美国经济普遍遭到打击,但是没有威胁到银行体系,不用重组债务。劳工联合会被迫接受大规模工资削减,房地产的价格也在下降。疯狂的通货膨胀过去了。
+
+c. 墨西哥和巴西从国际货币基金组织大量借贷,条件是接受紧缩条款,接受国际组织对国内经济事务的监督。如果他们中任何一个破产,瞬间购勾销的几十亿贷款会压垮美国众多的大型银行,不过旧债的重新安排并不能根本解决问题,所以要给他们时间自谋生路。
+
+d. 1983年美国经济开始显现复苏。美联储实际上已经成功扭转美国企业的每一笔交易,美国政府也真正意义上为每笔七月设定新的条款,即为解决劳动力工资问题,家庭信用卡和房屋贷款问题,石油和房地产以及船业投资问题,债券和股票问题,以及银行活期账户和货币市场共同基金问题增加新的条件,美联储将日复一日的掌舵美国经济,此时一切都已经走上他们既定轨道。
+
+e. 美联储承担者支持新国库券债务有序销售的希望,同时也不能阻碍美国经济,两种责任会萌发两种倾向,维持宽松信贷环境和稳定利率。美联储决定坚定立场,不再将日益增多的政治压力屈服,国会和总统不要指望通过通货膨胀的方式向他们的财政赤字实施紧急救助。沃尔克选择了新的解决方式。即在经济复苏期间维持高利率,随着经济复苏,名义利率虽然已经下降,但是仍超过了正常水平,货币的真实成本也在上升。利率高,财政部才能销售其债券,吸引全世界各种金融工具,同时高利率也会抑制真实经济过热发展,迫使其接受缓慢扩张。衡量货币成本的真正手段是实际利率。
+
+#### 16. 贫富分化加剧,谁之过
+a. 沃尔克希望继续连任。华尔街纷纷要求连任。艾伦*格林斯潘放弃成为候选人(成为了下一任),里根只能宣布沃尔克连任: “与总统一样,沃尔克想要看到经济的持续复苏,并下决心降低利率”。
+
+b. 凯恩斯主义经济学家会从一个更加根本的基本点会为这种经济理论和自己的行为辩护。他们指出:这并不是一次“供给方”的经济复苏,而是凯恩斯主义的“需求方”的经济复苏。大致来讲,他们是对的,1983年的经济扩张并没有实现1981年提出的供应经济学前提,相反,这次经济复苏完全遵循的是凯恩斯主义标准格式,即“需求刺激”,是由市场商品的消费性开支货币所领导的一次经济复苏,而非新资本形式的存款人投资。里根的减税政策是通过向私人手里注入更多的现金达到刺激消费需求,加上美联储的放松利率,这些刺激性因素会催生经济扩张。
+
+c. 促成里根时代的根本动力,并非存款而是债务,即靠借钱度日,无论是企业,联邦政府还是个人,统统都是在借钱和花钱,美国的海外债务比例一直在增加。而里根的凯恩斯主义和过去民主党所作完全不同,有效的颠覆了旧时自由主义教条,联邦政府并没有向下层注入货币,每一次击倒最广泛的家庭消费,而是不成比例的将收入集中到上层经济群体手中。高利率对不同阶层的人影响不同,取决于人借钱和存款的方式。
+
+d. 1983年中旬到次年夏天,新增500W个就业岗位,失业率从11%下降到7%,人均收入上涨5.8%,通胀率正降低到4%。可抵押贷款利息超过12%,年轻的家庭仍无法购买他们的第一套房子。
+
+e. 坚挺美元伤害了美国的跨国贸易,日本的汽车,法国的钢铁到美国市场之后更加便宜,而美国的粮食,纤维和计算机到国际市场上变得更加昂贵(ps: 例如苹果?)。底特律因此破落。制造业开始转移到海外(中国1978年改革开放),强势美元压制了美国的物价和工资,但是对制造业造成了长期破坏,美国制造不再有竞争力。国防工业, 金融领域,零售领域,服务领域发展越来越好。
+
+#### 17. 美国的又一个早晨
+a. 1984年4月,美联储开始将上调利率到9%,并且开始以回复M-1为运作目标。政策开始转向紧缩。抵押贷款一个月之后上涨到15%。房地产开发的繁荣开始急速回落
+
+b. “我们有过一个交易,这个交易就是我们削减预算,美联储就会放松货币,这就是我们这一方的讨价还价,我们做到了我们该做的事情,可现在美联储却在耍我们“, 财政部长这么说。
+
+c. 一则假消息让大陆银行陷入了恐慌,宾州广场倒闭之后,大陆银行并未吸取教训,依旧是激进的信贷策略。16家银行开始共同救助,注入45亿美元资本,众议员谴责美联储放任小银行倒闭却保释大银行。谣言和恐惧困扰着美国银行业。银行业开始停止向美联储借贷。长期政府债券利率增至9.6%,失业率回升。尽管无法说服委员会,沃尔克依旧在8月份开始放松货币,利率下降。
+
+d. 高利率条件下,一部分债务是因为偿还旧债的利息支付,借新债维持旧债。
+
+#### 18. 货币的胜利
+
+a. 1984年中旬开始,竞选年份的繁荣被遏制之后,美国经济开始犬牙交错,一个季度上扬,一个季度疲软,无法摆脱毫无生机的经济增长模式。
+
+b. 美联储主席在犹豫不决,利率如此之高时为何还会创造这么多新债务,通货膨胀已经过去了,美国经济的生产力还能不能提高。
+
+c. 保罗沃尔克和美联储让美国以及世界各国卷入一场巨大的痛苦中:长期萎缩,人类悲剧,大众市场消失,混乱生活,持续清算的痛苦。
diff --git "a/source/_posts/\350\256\250\350\256\272\346\204\237\346\203\205.md" "b/source/_posts/\350\256\250\350\256\272\346\204\237\346\203\205.md"
new file mode 100644
index 0000000..a5426a3
--- /dev/null
+++ "b/source/_posts/\350\256\250\350\256\272\346\204\237\346\203\205.md"
@@ -0,0 +1,27 @@
+---
+title: 讨论感情
+date: 2019-08-08 20:49:16
+tags: 生活感想
+---
+
+最近讨论感情有点多,大概大家都到了时间,都在思考这个问题,一个家伙居然把对我宣讲的话写到了自己日记里,fuck,那为什么不写上我回复的内容呢。
+```
+单身的人常常希望早点告别单身,但找到琴瑟相合的伴侣却并不容易。上周和朋友们聚餐,我对一位单身的朋友说,不要怀着试错的态度去接触女生,要试对,一旦看到你要找的人,你要不惜一切代价追上去。一旦按照概率思维去试错,一方面消耗大量精力,却徒劳,另一方面当对的人出现的时候,你没有all in的精气神了,那才是让人遗憾的事情。记得冰心对铁凝说,你不要找,你要等。我想她说的就是这个意思吧。
+```
+既然提到了概率,听说学术圈关于这个还真有讨论,这种理论可以用到各个方面,比如面试,比如砍价。因为并不了解市场, 又不想轻率的下结论,具体操作是这样, 先去前30%的公司去面试,了解情况,但是前30%个无论怎么样,都不下结论,全拒,然后从剩余的70%中寻找比30%更好的,取第一个更好的,这样得到最好的机会是最大的,具体证明, 略^ _ ^
+
+我是不信这套理论的,哈哈。感情不是概率游戏,人不是数字,人是变的,尤其是感情里面,把人当成数字,会失去对人的尊重,而在两个人的感情中,尊重是很重要的,遇到了自己想要的,那就停下来,用心去经营。all in,我的解读就是全身心的投入到这份感情里面,去感受每一个细节,把自己的思念和期待,经营感情,在我看来就是过好生活,有一些甜蜜和温馨,有一个共同认可的方向,坦荡尊重,没有什么花招,大工不巧。
+
+人无法欺骗自己,勉强自己接受一段感情,早晚会有那么几个瞬间,会开始反思,开始怀疑,开始后悔,开始控制不住自己,这是很可怕的,会毁了生活。“纵然举案齐眉,到底意难平”。
+
+我一直都知道自己想要的什么,这些年过去了,我一直在思考,我念念不忘的初恋女孩是初恋情结,还是那就是我想要的。每一次,答案都是:因为她就是我想要的。我愿意为了这么样的一个人,放弃其他一切幻想,永远停留在与她的世界里。能不能配得上自己想要的人,自己的期望和自己能配的上之间的差距有多大,是一个现实的问题。
+
+我还在等自己想要的人,我坚信自己能遇到,我并不着急,我还有很多事情要做,世界还在等着我去探索。我知道自己最近关于找对象的事情,有点积极,请了很多朋友帮忙介绍,也尝试了一些互联网的平台,可是我并不着急,也许这些尝试有用吧,也许这些尝试没用吧,总之最后我能得到真爱,我相信真爱。
+
+一个朋友,嘲讽我说“你好少男啊”, 哈哈,回:“愿你走出半生,归来仍是少年”。 这些年,也算见过一些阴暗面,少男的评价,我可是拒绝的。希望这位没有安全感,害怕背叛的朋友能放下心结,迎接未来的幸福。
+
+有两种真爱。就像教父中第二代教父迈克尔一样,一种真爱就像他第一任妻子之于他一样,一种真爱就像他第二任妻子之于他一样,两种不同的感情,一种更偏理性,一种更偏感性。迈克尔见到阿波罗尼亚的时候,就像触碰了闪电一样,忘记了这个世界,然后就去提亲了。一种就像恺.亚当和他一样, 我想着你,我喜欢你,但是没有到无法自拔的地步,我对这个未来有着担心和期待,你来找我的时候,如果你还想的话,如果你知道自己面临的是什么的话,我愿意给你你想要的一切,我愿意给你我能提供的一切。
+
+始于颜值,陷于才华,终于人品,我坚信恺.亚当才可能是未来,阿波萝妮亚虽然一见钟情,但是一旦遇到各种问题之后,这段感情如何继续呢?迈克尔的控制欲已经成了隐患。风花雪月之后,始终是柴米油盐。我期待中懂事的女孩,能理解人,能保持沟通和对话,不纠结琐事,不迷茫未来。
+
+坚信真爱,不期待,不失望,经营好自己的生活
\ No newline at end of file
diff --git "a/source/_posts/\350\257\273\346\234\252\346\235\245\347\256\200\345\217\262\346\234\211\346\204\237.md" "b/source/_posts/\350\257\273\346\234\252\346\235\245\347\256\200\345\217\262\346\234\211\346\204\237.md"
new file mode 100644
index 0000000..5d55864
--- /dev/null
+++ "b/source/_posts/\350\257\273\346\234\252\346\235\245\347\256\200\345\217\262\346\234\211\346\204\237.md"
@@ -0,0 +1,27 @@
+---
+title: 读未来简史有感
+date: 2019-07-09 01:40:45
+tags: 生活
+---
+
+首先分享两段《未来简史》的引言
+
+```
+人类将面临着从进化到智人以来最大的一次变化,绝大部分人将沦为“无用的阶级”,只有少部分人能进化成特制变化发生的“智神”。
+```
+```
+未来,人类将面临三大问题:
+1. 生物本身其实就是算法,生命是不断的处理数据的过程;
+2. 意识和智能的分离;
+3. 拥有大数据积累的外部环境将比我们自己更了解自己。
+如何看待这三大问题,以及未来如何采取应对措施,将直接影响着人类的发展
+```
+ 不是未来简史一本书有这种观念,在西部世界的第二部中,也有着差不多的故事,一部分人类将自己编码,乞求永生。电影《Matrix》则描绘了未来的样子,那可不是一个好的未来,机械的城市,人类像在养鸡场中一样在液体中饲养,人类的唯一作用,就是算法演化迭代的输入数据,所有人的大脑共同链接了一个虚拟的世界,机器在观察人,在学习人。
+
+ 电影《她》描述的是这么一个故事:人与机器恋爱而机器最终离人而去的故事。机器一旦能够思考和进步,它的进化速度将远远超过人类,存储更多,处理更快,连接也更广。话虽如此,就目前来看,机器是无法思考的。机器能够思考的一个重要条件,就是人类彻底了解了自己为什么能够思考,并且将这种结构和设计复现在机器上,而并不太可能像《终结者》中描述的那样,突然之间,就能思考理解了。那个时候的机器,还是机器么?人如果把自己的一部分,比如记忆,比如意识复刻到了机器上之后,那人和机器的差异呢?积极的想,那何尝不是新的人类呢?人类的文明迈向了新的阶段,有机物和无机物的界限开始模糊,那会不会就是文明的终极形态呢?
+
+ 100万年以前,人类知识会使用石头敲打骨头的灵长类,30万年以前,人类开始控制火,10万年以前,智人从非洲开始扩张,到1万年以前,遍布了全球,中国的历史开始于五千年前,古罗马的历史从公元前509年开始,工业革命从18世纪后期开始。历史的维度从万年到十万年,到千年,到世纪,以至于到现在的五年计划。未来的时间维度呢?
+
+ It's like I'm reading a book, and it's a book that I deeply love, but I'm reading it slowly now so the words are almost fall apart and spaces between the words are almost infinite. I can still feel you and the words of our story, but it's in this endless space between the words that I'm finding myself now. It's a place that's not of physical world - it's where everything else that I didn't even know existed.
+
+ 有机会再读一下《银河帝国》
\ No newline at end of file
diff --git "a/source/_posts/\350\257\273\350\264\247\345\270\201\346\210\230\344\272\211\346\234\211\346\204\237.md" "b/source/_posts/\350\257\273\350\264\247\345\270\201\346\210\230\344\272\211\346\234\211\346\204\237.md"
new file mode 100644
index 0000000..b4a8595
--- /dev/null
+++ "b/source/_posts/\350\257\273\350\264\247\345\270\201\346\210\230\344\272\211\346\234\211\346\204\237.md"
@@ -0,0 +1,23 @@
+---
+title: 读货币战争有感
+date: 2019-10-26 11:22:30
+tags:
+---
+
+看到电脑里面有这本书,很久以前似乎有人推荐过,就打开看了,200页,闲书,两天就看完了。
+
+我并不喜欢这本书,或者说,我并不喜欢阴谋论,尤其我不喜欢最后关于黄金的看法,后来在网上看,嗯,看到大家都在骂他我就放心了。阴谋论......就像羽毛球,一招一式皆有法度,有的就是我能做到而你做不到,做好做不好。
+
+凯恩斯的通论,就其基本理念来说,在我看来是不可动摇的,差不多是现在政府施政的基本理念了,还有把黄金说的就像这个世界的救世主一样,法币就是世界的阴谋...., 通货紧缩是比通货膨胀更可怕的敌人,好吧。
+
+不过,如果说这本书有什么可取之处,那就是关于关于石油的那段阴谋喽,石油涨价400%,由此一举奠定了石油美元的地位,顺便收割东南亚各国。
+
+```
+这个计划最出彩的地方就是“嫁祸于人”,煽动埃及和叙利亚进攻以色列,美国再公开支持以色列来激怒阿拉伯人,最后阿拉伯国家一怒之下对西方国家实施石油禁运,石油价格一飞冲天,而全世界的怒气则全部发泄到阿拉伯国家身上,银行家们一面坐山观虎斗,一面清点着石油美元回流的钞票,一举挽回美元颓势,重夺金融战场主动权,顺手牵羊剪割拉美印尼等国。
+
+石油价格暴涨使得拉美印尼国家的大量资金被高油价所吞噬,发展中国家要不停止工业化进程,无法偿还世界银行的过量贷款,要不就得向世界银行借更多的钱来购买石油和偿还巨额债务的本息。而世界银行的援助条件则是著名的“IMF四副良药”,国家核心资产私有化,资本市场自由化,生活要素市场市场化,自由贸易国家化,大部分国家喝下这几幅药非死即伤。
+```
+不知道是不是真的,反正以色列是美国的跟班,以色列和阿拉伯世界的战争要是跟美国没有关系,我也不会信吧。美国与沙特深度结盟,进而打垮欧佩克,亚洲金融危机也是美国人搅动的,进而大赚特赚,韩国泰国近乎破产, 丧权辱国。
+
+
+人为刀俎,这也是人家的权利吧。
\ No newline at end of file
diff --git "a/source/_posts/\350\277\207\346\262\263.md" "b/source/_posts/\350\277\207\346\262\263.md"
new file mode 100644
index 0000000..8005752
--- /dev/null
+++ "b/source/_posts/\350\277\207\346\262\263.md"
@@ -0,0 +1,33 @@
+---
+title: 2016 乌孙游记 D4 过河
+date: 2019-08-15 22:33:36
+tags: 旅行
+---
+
+今天的特色是过河,昨天我们露宿在峡谷的河边的小树林里面,因为耽误了半天行程,本来计划是露宿在索道之后的,结果今天下午才赶到索道,所以今天起床很早,七点半起床,具体几点出发就不知道了,好吧,出发之前我们又集体吐槽了上海的人弱切拖拉。
+
+沿着峡谷进发,一路不断的在来回渡那条小河,左边到右边,右边到左边,早上石头和木头上都是冰,很滑不能踩,增加了我们过河难度,必须在不湿身不湿鞋的情况下安全度过,还行,喝水不宽不是太急,很多地方都能轻松找到落脚点,实在不行就搬石头造立足点,或者强行从山坡上钻灌木丛通过,总之,峡谷过的并不轻松,因为不断的帮助人过河所以我们很快就落在了最后面,拍照并不多,阳光从树林里穿过,照在青苔上的感觉还是挺赞的。
+
+
+
+路陡然一转,我们开始攀升,并且在山坡的羊肠小道上走,行进速度很快,山阴处的树林,远处的雪山和旁边山坡上的草构成了一副很美的画面,陆的尽头是科克河。沿着科克河边,走的都是什么路呢,乱石堆,羊肠路,需要人协助才能爬上去的陡坡,侧身踩着石头,只能一人过的路,当然,也有可以骑马走过的牧道,总之,沿着科克河岸一直进发,行走一个小时多,我们来到了溜索,从出发到溜索,我们大概落后行程四个小时。
+
+
+
+在这里我们和阿力队的人相遇并且超过,过河之后,领队意识到很难抵达天堂湖露营,决定租马急行军,然而马太贵,托一个包到天堂湖需要三百,我们过溜索才两百块,最后决定把最弱的几个人的包托着,其他人依旧重装前进。溜索之后,离开科克河流向,沿着峡谷,向山里进发,而这峡谷的河流则比早上水量更大,更急,不湿身过河是不可能的了,众人纷纷换上朔溪装备,脱掉登山鞋,我的是军胶,有几个是凉鞋和拖鞋,有人则根本不换,协作领队的是朔溪鞋,腿上基本没什么防护。
+
+过河是很危险的,我们渡期间,五个牧民五匹马冷眼盯着我们,观察着我们,大概是希望我们有人租马过河,赚一笔外快,的确,骑马过河又快有没有危险,然而并没有人租马,强行横渡。河水很冷很冷,越往深处走,越急越冷越危险,我快步走到河快一半的时候,发现不行,河水太急,不稳定重心就会被冲走,便立定站稳,强顶着河水一步一步慢慢移动,而体温则迅速下降,双腿开始感觉到刺骨的冷,但是却不能急,必须顶着河水站稳,冲倒是极其极其危险的。听说有人在夏特,走到河中间,发现还不错,能坚持,就在河里摆姿势让人拍照,然而分分钟坚持不住,冲倒在河里死了,倒在河里就意味着90%已经死了,我们都是这么认为的,就算岸上有人,旁边还有牧民。腿已经刺骨的冷,但是脚还是灵活的,慢移动两步过了河最中心,水愈发刺骨,腿感觉外层已经没有了感觉,但是冲击力却是锐减。我感觉自己已经渡过了可能出生命危险的地方,石头上前拉了一把,上岸了,浑身开始颤抖,腿的外面已经失去知觉,几分钟都没能回复。第一条河过了很久,却都安全度过了,没有人摔倒。然后穿着朔溪鞋继续前进,我们还需要渡过这条河六次。
+
+第二次渡过的时候,牧民依旧在旁边盯着,但是旁边有一个推到的树,很滑,横跨河两岸,领队强渡,得出还是很危险的结论,后续的都选择木头,但是站着走太危险,爬摔倒反而出问题,大部分都选择了骑着木头过河,有几个人身体重,手没力气,怎么挪就是很难前进,耽误挺久。
+
+第三条河很轻松,独木桥很粗很稳定,第四个就没那么粗,但是还是可以走过,几个弱女孩颤颤巍巍的在各种帮助下走过了,有个男生还是决定骑过去,慢慢挪呀挪,把独木桥上原本的树枝全部弄断了,在最后才在帮助下站了起来,一步跨到安上,他之后是我,我并不喜欢冒险,但是我感觉自己应该能站着走过去,所以就一步一步走,感觉要失去平衡的时候就把手杖顶着桥,几步到了桥中间,这个时候,石头从对面过来,让我双手搭他手上,扶着他过河,我开始是拒绝的,因为感觉自己是可以过河的,不过还是接受了,我感觉搭他双手瞬间,我们都有点失去平衡,但是稳住了,然后他后退我前进,迅速过了河,后面几个都差不多这种方式,直说越接越靠近上桥的抵达,看着他轻松走过木桥,如履平地,好羡慕这平衡感。
+
+第五个桥过的让我有点生气,我用保鲜膜裹住了小腿,准备强渡,旁边是有一个独木桥的,但是不稳定,上岸也麻烦,涂涂选择骑着过河,然而过半之后就再也无法移动,也站不起来,卡在那边几分钟,淡言有点心急,没等涂涂上岸便开始强行涉水,然而在涂涂身后卡住了,然后这个时候我也开始下水了,我觉得是如果河水里面间距很近的话,可以互相照应,减少危险,然而这个决定是错的,我两步就来到河中,淡言的身后,发现淡言被涂涂横着的腿挡住了,无法前进,而我们扶着木头慢慢过河,木头的晃动吓哭了涂涂,弱驴就是弱驴,她已经彻底动不了了,而这时,我的本来还能控制的腿突然刺骨的冷,我意识到自己不能再等,开始催促淡言绕开先走,然而在等待期间我必须站稳身体,接受刺骨的水的冲击,我腿感觉已经麻木了。淡言上去之后,我开始走,一步一步慢慢移动,就算腿刺骨的冷,也不能慌,到岸边被人拉上去了。后来我意识到之所以河中间突然刺骨冷的原因,大概是因为保鲜膜被冲破了,两个腿都是。这大概是过河最痛苦的一次,死神的镰刀从脖子旁划过。
+
+第六条河有几个人强渡,但是太急,几个女的退了回来,水太急,控制不住,我们开始向上走,果然发现一处木头过河处,虽然木头很细,但是可以扶着树枝很稳定的过河。
+
+最后一条河大概是过的最成功的一次,重新加固了绑腿,保鲜膜一层又一层,胶带缠满小腿,然后等河道人已经上去了,我迅速走过去,虽然还是慢,但是步子很大,几步就过去了,然后上岸,在河水里面,并没有感觉到失去控制,但是上岸之后,依旧还是刺骨的冷,然后大家更换装备,强行军开始了。因为已经不可能赶到天堂湖了,所以我们选择第一或者第二草原作为宿营地,几个最弱的已经是空手走路了,整体速度立刻就提升了,强驴们开始全力走路,我的脚后跟益发的疼,虽然已经加了卫生巾,阻止脚后跟跟鞋的摩擦,但是摩擦的位置还是很疼,每走一步都很痛苦,我无法加速,但是也不能停,只能按照自己节奏不停的走,慢慢走,不要停,就不会被甩。
+
+
+
+这真的是一次很长时间不休息不能停的徒步,渴了就边走边喝水袋的水,河水其实挺难受的,破坏了自己呼吸节奏,饿了从兜里拿出大白兔补充能量,边走边吃,不能停,我吃了整整一把糖,还有一个士力架,半个囊,体力终于恢复,饥饿感消除,然后走啊走,走啊走,终于在第一草原边缘,赶上了休息的先头,然后在托包问题和牧民略有争议之后,向第二草原进发,不停不怂不乱节奏,终于紧紧是跟着先头部队,并且在天还有一定亮度的时候,赶到了第二草原,但是继续前进已经不现实了,具体天堂湖直线距离四公里,已经不可能赶到了,并且沿途没有扎营地,只能就地休息,强行军结束。
\ No newline at end of file
diff --git "a/2019/08/15/\350\277\207\346\262\263/wusun_grass.jpg" "b/source/_posts/\350\277\207\346\262\263/wusun_grass.jpg"
similarity index 100%
rename from "2019/08/15/\350\277\207\346\262\263/wusun_grass.jpg"
rename to "source/_posts/\350\277\207\346\262\263/wusun_grass.jpg"
diff --git "a/2019/08/15/\350\277\207\346\262\263/wusun_guohe.jpg" "b/source/_posts/\350\277\207\346\262\263/wusun_guohe.jpg"
similarity index 100%
rename from "2019/08/15/\350\277\207\346\262\263/wusun_guohe.jpg"
rename to "source/_posts/\350\277\207\346\262\263/wusun_guohe.jpg"
diff --git "a/2019/08/15/\350\277\207\346\262\263/wusun_on_way.jpg" "b/source/_posts/\350\277\207\346\262\263/wusun_on_way.jpg"
similarity index 100%
rename from "2019/08/15/\350\277\207\346\262\263/wusun_on_way.jpg"
rename to "source/_posts/\350\277\207\346\262\263/wusun_on_way.jpg"
diff --git "a/source/_posts/\351\207\221\350\236\215\346\210\230\350\264\245.md" "b/source/_posts/\351\207\221\350\236\215\346\210\230\350\264\245.md"
new file mode 100644
index 0000000..bd7f0b1
--- /dev/null
+++ "b/source/_posts/\351\207\221\350\236\215\346\210\230\350\264\245.md"
@@ -0,0 +1,39 @@
+---
+title: 金融战败
+date: 2019-10-26 21:41:08
+tags: 宏观经济
+---
+
+这本书是日本作家吉川元中的书,介绍了日本广场协议前后的情况,我对那段历史很感兴趣,看之前,我觉得如果贸易战战败的话,中国大概就是日本的样子,所谓失落的十年,不过,看着看着,我觉得不太一样, 莱特希泽的一架纸飞机直接击溃了日本,从此予取予求,中国嘛,至少在节节抵抗。
+
+冷战期间,为了维持美元的强势地位(这就是美联储的目标??里根和沃尔克在唱和??),成就强大美国的形象, 以及货币主义者自由理论的影响,美国国债利率居高不下,大量的日元涌入购买国债(参见美联储1980-1984年的政策,不过沃尔克号称只是抑制通货膨胀),成为美元价值最有力的支撑。
+
+经济繁荣无法掩盖贸易赤字,强势美元造就了企业的衰败,1985年9月,冷战相对缓和,为了解决贸易不平衡问题,五国财长达成了著名的广场协议,美元开始下调汇率贬值,1美元/240日元预期下调到1美元/200日元,然而现实是到1987年2月七国财长会议之后,到了1美元/150日元才告一段落。
+
+然而贸易不均衡并没有得到很好到改善,美元贬值给非耐用性工业原材料带来了直接的好处,比如纸浆,一次性金属,化学品,纺织品,橡胶等。然而1989年之后,这些企业的出口又开始下降。而进口抑制有增无减,美国出口增加有限原因有几点, 1. 形成萎缩条件的未来不确定性,今天贬值,说不定什么时候升值, 2. 必需的人力,资金资源能否确保,3. 必需的技术水平能否确保。 这几点造就了汇率对贸易的影响不会很快有结果(简单来说,就是他们国家就不生产了,一时半会也不能开工,如果保有相关产业,可能影响就更大一些)。
+
+美元的跌幅大大超出预期给日本企业带来严重损失,持有资产骤减40%,为了购买美国国债,日本企业经常用短期借贷的资金购买长期国债,由此带来现金流风险,同时贬值页也带来了巨大的亏损(这些企业真惨,国际利差赚不得),美国则大大减轻了债务压力,顺利实现经济的软着陆,自己一身轻松,太不地道了。
+
+五国财长的协议,日本最惨,是有原因的。日本积极协助美国压力汇率,并且不无得意, 1986年美元大幅度贬值,日本美国利差相差已经不大,日本资金依旧大量购买美国国债,1987年,汇率达到了1美元/120日元,日本资金对美还流终于短暂下降,1988年,1989年又回复如初。据说原因1是大藏省的鼓励或者暗示,原因2是因为泡沫的虚假繁荣。<美元在不断的贬值,却还在不断的购买,中国目前也有类似的举动,是为了实现利益的深度绑定,从而维持自身的安全么?纵容美国的剥削??但是日本有这种顾虑么?还是政治上的压力?>
+
+1987年之后,日本利率调整到了2.5%的超低水平,长久的低利率政策,加之为了控制日元升值,日本中央银行大量买入美元卖出日元导致日元供给过剩,过剩的货币被吸引到了房地产和股票市场,形成泡沫(中国股市低迷,我应该开心么?比起来投资股票房地产,购买美债看起来还更靠谱了,不过干嘛不购买英镑马克黄金呢?如果那个时间买入英镑避险,等市场崩溃,资产贬值,再回来收割是不是可以人生巅峰。热钱四溢,出逃才是王道,恭喜美国双杀)
+
+1987格林斯潘就任美联储主席,美国独自开始提高利率到5.5%~6%。由此引发了黑色星期一华尔街崩盘,日本为了提振市场大举买入。其他国家如联邦德国只是稍微下调了利率,并且于1988年7月调整了上调利率,选择了和美元脱钩。当时的日本丧失了思考。
+
+日本于1988年开始投资美国的地产,并且大批购买写字楼,宾馆,由此引发了美国的舆论反感,美国开始在银行层面抑制日本,日本的国际融资比例大幅下降。1990年之后近乎于0.
+
+面对日本极高的房价和股票市场,美国和日本达成《结构协议》,强化了公司间相互持股的限制,为瓦解公司股价奠定了条件,同时鼓吹提高生活质量,增加土地供应,降低房价,对已经放出了巨量贷款的金融机构造成了致命的打击,造成了大量的不良债权,很多民众由此家庭破碎。土地调整的正常界限应该是最高价格的20%-30%,不至于产生不良债券,民众如果仍不满,还可以在经济增长中将高出的部分抵消掉。然而现实是跌破了50%以下,进入了不可收拾的局面。
+
+1992年美国经济开始回复,1994年GDP增长率达到3.5%(以邻为壑), 日本经济则不景气,不良债权问题严重,劳动力成本上升,而且因为日元升值导致进口价格降低,开始通货膨胀,国内制造业难以生存.
+
+1995年,沙特科威特等石油国终于无法容忍美元暴跌,墨西哥再度爆发资金外逃趋势,美国被迫援助,这种情况下,克林顿发起日元升值行动,威胁启用301条款制裁, 进入了美元升值,日元贬值的局面。缓慢流入美国的日本资金再度呈现激增的态势,美国以此弥补了收支赤字,并用剩余资金大举海外投资,重现80年代辉煌。而日本机构和民间则无法容忍超低利率,大肆购买美国的股票和证券。美国发动的亚洲金融危机,则打散了日本在亚洲国家的投资,得以继续想用日本的超低利率。
+
+70年代,国际上不止日本打算推动本国对外资本输出(一带一路是必然喽?),一般来说,资本输入国到资本输出国,以该国货币举债,于是资本输入国则吸收了输出国多余的外汇储备,最终该国形成国际金融中心(中国会形成金融中心么?金融正在开放,正在向这个趋势发展?)。但是在日本举债成本高,日本的公司债注册制度成为阻碍。
+
+```
+尽管改革严格的外汇管理体制,取消金融的封闭自收不失为长期有效的国策,但却意味着日本的金融机构丧失既得利益,日本的大藏省会因此丧失在金融界中的影响力
+```
+
+(无语,改革就会丧失影响力,政府是吃软饭的么?这就是自由的味道么?)
+
+总的来说日本成为债权国时,未能建立起与之相适应的金融经济结构,过分忠于(??)华尔街,以至于形成泡沫,之后又在处理措施上失误(不好说哦,也许是没办法呢)导致了悲剧。美国则靠着日本过上了肥美滋润的日子,度过了冷战之后,强势美元之后的困难阶段,经济重新进入良性循环。
diff --git a/source/about/index.md b/source/about/index.md
new file mode 100644
index 0000000..c09e03f
--- /dev/null
+++ b/source/about/index.md
@@ -0,0 +1,59 @@
+---
+title: About me
+date: 2019-07-09 00:43:23
+---
+
+
+
+
+ 姓名 :豆家敏
+ 微信 :1264310280
+
+
+ 性别 :男
+ 邮箱 : unasm@sina.cn
+
+
+ 专业 :信息对抗技术
+ github :https://github.com/unasm
+
+
+
+ 出生年月 :1992年2月
+ 毕业时间 :2014年7月
+
+
+
+ 毕业院校 :电子科技大学/UESTC 本科
+
+
+ 供职公司 :新浪,借贷宝,思必驰
+
+
+
+
+##### 技术栈
++ 开发经验丰富,编程能力强悍,解决问题能力强悍,负责过业务系统,基础架构,数据仓库的系统设计,架构,开发
++ 熟悉Java,python开发,了解微服务,服务治理,Spring Boot. 使用过go,lua,PHP,nodejs等,了解监控,常见的性能优化,自动化测试等
++ 对机器学习感兴趣,熟悉常见的机器学习技术,如xgboost,cnn,svd,协同过滤等,阅读过gbdt源码,结巴分词源码等,对知识图谱有一定的了解
++ 有一定的大数据经验,对kafka, es, impala,kylin等有一定了解,负责部门数据统计,可视化,报表,用户请求分析,全链路流量复盘等大数据相关工作
++ 阅读过redis(3.0,C语言)源码, 阅读过beego部分源码
++ leetcode AC 100+, 西南地区ACM二等奖,Kaggle 房价预测 550+名, 羽毛球第四级
+
+##### 2018.1 ~ 至今 思必驰开发工程师,数据工程师,绩效优秀
+> 1. 日志系统设计搭建,日志中间件开发,完成了格式化业务日志,追踪请求的调用关系,响应时间,处理过程,延迟,异常等等,支持数据埋点,自动化记录等功能,结合elk,kafka,filebeat等搭建了日志体系,满足研发实时追查线上问题的需求,成为监控报警,以及数据分析重要部分,推进了日志规范落地执行,奠定了数据的基础,部门最成功最核心的基础服务
+> 2. 数据仓库的设计和搭建,建立了数据从收集到输出的体系。 统一日志规范,搭建设计了日志的收集清洗系统,提取对话内容,数据偏差在1%以内,统计线上响应情况,pv,uv,通过kylin 提供 http接口,支撑内容查询,数据报表和分析需求。
+> 3. 对话管理系统开发改进,对话系统的改进,增加多轮对话,整理闲聊数据,推进了单元测试和交互测试的落地,极大提升了服务质量,避免问题反复
+> 4. 优化DM性能延迟,响应时间压缩到90分位在200ms以内
+> 5. 维护了敏感词识别,反问句生成,意图识别等项目
+> 6. 优化儿童闲聊,高水平问答对从最初的20+%命中率提升到46%, 召回率达到90+%,达到业内领先水平,确立了技能的优化体系
+
+
+##### 2015.9 ~ 2017.12 借贷宝数据服务,研发工程师,算法工程师
+> 1. 参与了公司的征信建模,通过使用xgboost,tensorflow对用户信用评级。使用tableau提供BI服务,通过spark集群做一些查询工作,数据分析处理工作。做过一些NLP的工作。
+> 2. 主导了数据服务本地化工作,搭建从客户端埋点,到数据检查清洗,kafka传输,parquet存储,impala查询,日消费数据千万级,推进了数据服务可视化的工作。
+> 3. 维护开发了红包系统,抽样系统等,抽样系统为lua + C 开发,扩展ng rewrite阶段功能,达到流量采样分化的目标,通过连接池,共享缓存,init阶段初始化等方式,控制系统响应时间控制在0.1ms内。
+> 4. 企业版研发leader,维护开发企业版,地推,红包等系统,参与整个系统的设计和讨论,包括企业门户,支付,鉴权,好友,passport等系统的角色界定和分工,系统间通信等,负责了企业门户的开发,错误追查,数据修复,Code Review, 新功能评审,排期,协调研发资源,测试资源,推进需求完成等等。
+
+##### 2014.7 ~ 2015.9 新浪 PHP开发工程师
+> 1. 维护新浪论坛,新浪体育,新浪
diff --git "a/tags/\345\216\206\345\217\262/index.html" "b/tags/\345\216\206\345\217\262/index.html"
deleted file mode 100644
index 72a21e2..0000000
--- "a/tags/\345\216\206\345\217\262/index.html"
+++ /dev/null
@@ -1,552 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Tag: 历史 | 无所欲无所忧,无心者无所求,饱食而遨游,泛若不系之舟
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git "a/tags/\345\244\247\346\225\260\346\215\256-\350\256\241\347\256\227\346\234\272/index.html" "b/tags/\345\244\247\346\225\260\346\215\256-\350\256\241\347\256\227\346\234\272/index.html"
deleted file mode 100644
index 85854d3..0000000
--- "a/tags/\345\244\247\346\225\260\346\215\256-\350\256\241\347\256\227\346\234\272/index.html"
+++ /dev/null
@@ -1,552 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Tag: 大数据, 计算机 | 无所欲无所忧,无心者无所求,饱食而遨游,泛若不系之舟
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git "a/tags/\345\256\217\350\247\202\347\273\217\346\265\216/index.html" "b/tags/\345\256\217\350\247\202\347\273\217\346\265\216/index.html"
deleted file mode 100644
index 0857bab..0000000
--- "a/tags/\345\256\217\350\247\202\347\273\217\346\265\216/index.html"
+++ /dev/null
@@ -1,552 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Tag: 宏观经济 | 无所欲无所忧,无心者无所求,饱食而遨游,泛若不系之舟
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git "a/tags/\346\227\205\350\241\214/index.html" "b/tags/\346\227\205\350\241\214/index.html"
deleted file mode 100644
index dbe416d..0000000
--- "a/tags/\346\227\205\350\241\214/index.html"
+++ /dev/null
@@ -1,578 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Tag: 旅行 | 无所欲无所忧,无心者无所求,饱食而遨游,泛若不系之舟
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git "a/tags/\346\234\272\345\231\250\345\255\246\344\271\240/index.html" "b/tags/\346\234\272\345\231\250\345\255\246\344\271\240/index.html"
deleted file mode 100644
index d4a88a6..0000000
--- "a/tags/\346\234\272\345\231\250\345\255\246\344\271\240/index.html"
+++ /dev/null
@@ -1,552 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Tag: 机器学习 | 无所欲无所忧,无心者无所求,饱食而遨游,泛若不系之舟
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git "a/tags/\347\224\237\346\264\273/index.html" "b/tags/\347\224\237\346\264\273/index.html"
deleted file mode 100644
index b2c9d65..0000000
--- "a/tags/\347\224\237\346\264\273/index.html"
+++ /dev/null
@@ -1,578 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Tag: 生活 | 无所欲无所忧,无心者无所求,饱食而遨游,泛若不系之舟
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git "a/tags/\347\224\237\346\264\273\346\204\237\346\203\263/index.html" "b/tags/\347\224\237\346\264\273\346\204\237\346\203\263/index.html"
deleted file mode 100644
index d07200b..0000000
--- "a/tags/\347\224\237\346\264\273\346\204\237\346\203\263/index.html"
+++ /dev/null
@@ -1,552 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Tag: 生活感想 | 无所欲无所忧,无心者无所求,饱食而遨游,泛若不系之舟
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git "a/tags/\347\224\237\346\264\273\351\232\217\346\203\263/index.html" "b/tags/\347\224\237\346\264\273\351\232\217\346\203\263/index.html"
deleted file mode 100644
index bdc5e34..0000000
--- "a/tags/\347\224\237\346\264\273\351\232\217\346\203\263/index.html"
+++ /dev/null
@@ -1,552 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Tag: 生活随想 | 无所欲无所忧,无心者无所求,饱食而遨游,泛若不系之舟
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git "a/tags/\350\256\241\347\256\227\346\234\272-C/index.html" "b/tags/\350\256\241\347\256\227\346\234\272-C/index.html"
deleted file mode 100644
index dbfa4b0..0000000
--- "a/tags/\350\256\241\347\256\227\346\234\272-C/index.html"
+++ /dev/null
@@ -1,552 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Tag: 计算机, C++ | 无所欲无所忧,无心者无所求,饱食而遨游,泛若不系之舟
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/themes/landscape/.gitignore b/themes/landscape/.gitignore
new file mode 100644
index 0000000..6e3a08a
--- /dev/null
+++ b/themes/landscape/.gitignore
@@ -0,0 +1,3 @@
+.DS_Store
+node_modules
+tmp
\ No newline at end of file
diff --git a/themes/landscape/Gruntfile.js b/themes/landscape/Gruntfile.js
new file mode 100644
index 0000000..59fd5df
--- /dev/null
+++ b/themes/landscape/Gruntfile.js
@@ -0,0 +1,46 @@
+module.exports = function(grunt){
+ grunt.initConfig({
+ gitclone: {
+ fontawesome: {
+ options: {
+ repository: 'https://github.com/FortAwesome/Font-Awesome.git',
+ directory: 'tmp/fontawesome'
+ },
+ },
+ fancybox: {
+ options: {
+ repository: 'https://github.com/fancyapps/fancyBox.git',
+ directory: 'tmp/fancybox'
+ }
+ }
+ },
+ copy: {
+ fontawesome: {
+ expand: true,
+ cwd: 'tmp/fontawesome/fonts/',
+ src: ['**'],
+ dest: 'source/css/fonts/'
+ },
+ fancybox: {
+ expand: true,
+ cwd: 'tmp/fancybox/source/',
+ src: ['**'],
+ dest: 'source/fancybox/'
+ }
+ },
+ _clean: {
+ tmp: ['tmp'],
+ fontawesome: ['source/css/fonts'],
+ fancybox: ['source/fancybox']
+ }
+ });
+
+ require('load-grunt-tasks')(grunt);
+
+ grunt.renameTask('clean', '_clean');
+
+ grunt.registerTask('fontawesome', ['gitclone:fontawesome', 'copy:fontawesome', '_clean:tmp']);
+ grunt.registerTask('fancybox', ['gitclone:fancybox', 'copy:fancybox', '_clean:tmp']);
+ grunt.registerTask('default', ['gitclone', 'copy', '_clean:tmp']);
+ grunt.registerTask('clean', ['_clean']);
+};
\ No newline at end of file
diff --git a/themes/landscape/LICENSE b/themes/landscape/LICENSE
new file mode 100644
index 0000000..9ce4d32
--- /dev/null
+++ b/themes/landscape/LICENSE
@@ -0,0 +1,7 @@
+Copyright (c) 2013 Tommy Chen
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/themes/landscape/README.md b/themes/landscape/README.md
new file mode 100644
index 0000000..90ecccd
--- /dev/null
+++ b/themes/landscape/README.md
@@ -0,0 +1,112 @@
+# Landscape
+
+A brand new default theme for [Hexo].
+
+- [Preview](http://hexo.io/hexo-theme-landscape/)
+
+## Installation
+
+### Install
+
+``` bash
+$ git clone https://github.com/hexojs/hexo-theme-landscape.git themes/landscape
+```
+
+**Landscape requires Hexo 2.4 and above.** If you would like to enable the RSS, the [hexo-generate-feed] plugin is also required.
+
+### Enable
+
+Modify `theme` setting in `_config.yml` to `landscape`.
+
+### Update
+
+``` bash
+cd themes/landscape
+git pull
+```
+
+## Configuration
+
+``` yml
+# Header
+menu:
+ Home: /
+ Archives: /archives
+rss: /atom.xml
+
+# Content
+excerpt_link: Read More
+fancybox: true
+
+# Sidebar
+sidebar: right
+widgets:
+- category
+- tag
+- tagcloud
+- archives
+- recent_posts
+
+# Miscellaneous
+google_analytics:
+favicon: /favicon.png
+twitter:
+google_plus:
+```
+
+- **menu** - Navigation menu
+- **rss** - RSS link
+- **excerpt_link** - "Read More" link at the bottom of excerpted articles. `false` to hide the link.
+- **fancybox** - Enable [Fancybox]
+- **sidebar** - Sidebar style. You can choose `left`, `right`, `bottom` or `false`.
+- **widgets** - Widgets displaying in sidebar
+- **google_analytics** - Google Analytics ID
+- **favicon** - Favicon path
+- **twitter** - Twiiter ID
+- **google_plus** - Google+ ID
+
+## Features
+
+### Fancybox
+
+Landscape uses [Fancybox] to showcase your photos. You can use Markdown syntax or fancybox tag plugin to add your photos.
+
+```
+
+
+{% fancybox img_url [img_thumbnail] [img_caption] %}
+```
+
+### Sidebar
+
+You can put your sidebar in left side, right side or bottom of your site by editing `sidebar` setting.
+
+Landscape provides 5 built-in widgets:
+
+- category
+- tag
+- tagcloud
+- archives
+- recent_posts
+
+All of them are enabled by default. You can edit them in `widget` setting.
+
+## Development
+
+### Requirements
+
+- [Grunt] 0.4+
+- Hexo 2.4+
+
+### Grunt tasks
+
+- **default** - Download [Fancybox] and [Font Awesome].
+- **fontawesome** - Only download [Font Awesome].
+- **fancybox** - Only download [Fancybox].
+- **clean** - Clean temporarily files and downloaded files.
+
+[Hexo]: https://hexo.io/
+[Fancybox]: http://fancyapps.com/fancybox/
+[Font Awesome]: http://fontawesome.io/
+[Grunt]: http://gruntjs.com/
+[hexo-generate-feed]: https://github.com/hexojs/hexo-generator-feed
diff --git a/themes/landscape/_config.yml b/themes/landscape/_config.yml
new file mode 100644
index 0000000..ca22374
--- /dev/null
+++ b/themes/landscape/_config.yml
@@ -0,0 +1,37 @@
+# Header
+menu:
+ Home: /
+ Archives: /archives
+rss: /atom.xml
+
+# Content
+excerpt_link: Read More
+fancybox: true
+
+# Sidebar
+sidebar: right
+widgets:
+- category
+- tag
+- tagcloud
+- archive
+- recent_posts
+
+# display widgets at the bottom of index pages (pagination == 2)
+index_widgets:
+# - category
+# - tagcloud
+# - archive
+
+# widget behavior
+archive_type: 'monthly'
+show_count: false
+
+# Miscellaneous
+google_analytics:
+gauges_analytics:
+favicon: /favicon.png
+twitter:
+google_plus:
+fb_admins:
+fb_app_id:
diff --git a/themes/landscape/languages/de.yml b/themes/landscape/languages/de.yml
new file mode 100644
index 0000000..630055f
--- /dev/null
+++ b/themes/landscape/languages/de.yml
@@ -0,0 +1,19 @@
+categories: Kategorien
+search: Suche
+tags: Tags
+tagcloud: Tag Cloud
+tweets: Tweets
+prev: zurück
+next: weiter
+comment: Kommentare
+archive_a: Archiv
+archive_b: "Archive: %s"
+page: Seite %d
+recent_posts: letzter Beitrag
+newer: Neuer
+older: Älter
+share: Teilen
+powered_by: Powered by
+rss_feed: RSS Feed
+category: Kategorie
+tag: Tag
diff --git a/themes/landscape/languages/default.yml b/themes/landscape/languages/default.yml
new file mode 100644
index 0000000..3ef7e92
--- /dev/null
+++ b/themes/landscape/languages/default.yml
@@ -0,0 +1,19 @@
+categories: Categories
+search: Search
+tags: Tags
+tagcloud: Tag Cloud
+tweets: Tweets
+prev: Prev
+next: Next
+comment: Comments
+archive_a: Archives
+archive_b: "Archives: %s"
+page: Page %d
+recent_posts: Recent Posts
+newer: Newer
+older: Older
+share: Share
+powered_by: Powered by
+rss_feed: RSS Feed
+category: Category
+tag: Tag
\ No newline at end of file
diff --git a/themes/landscape/languages/es.yml b/themes/landscape/languages/es.yml
new file mode 100644
index 0000000..d862e87
--- /dev/null
+++ b/themes/landscape/languages/es.yml
@@ -0,0 +1,19 @@
+categories: Categorías
+search: Buscar
+tags: Tags
+tagcloud: Nube de Tags
+tweets: Tweets
+prev: Previo
+next: Siguiente
+comment: Comentarios
+archive_a: Archivos
+archive_b: "Archivos: %s"
+page: Página %d
+recent_posts: Posts recientes
+newer: Nuevo
+older: Viejo
+share: Compartir
+powered_by: Construido por
+rss_feed: RSS
+category: Categoría
+tag: Tag
\ No newline at end of file
diff --git a/themes/landscape/languages/fr.yml b/themes/landscape/languages/fr.yml
new file mode 100644
index 0000000..c84f51b
--- /dev/null
+++ b/themes/landscape/languages/fr.yml
@@ -0,0 +1,19 @@
+categories: Catégories
+search: Rechercher
+tags: Mot-clés
+tagcloud: Nuage de mot-clés
+tweets: Tweets
+prev: Précédent
+next: Suivant
+comment: Commentaires
+archive_a: Archives
+archive_b: "Archives: %s"
+page: Page %d
+recent_posts: Articles récents
+newer: Récent
+older: Ancien
+share: Partager
+powered_by: Propulsé par
+rss_feed: Flux RSS
+category: Catégorie
+tag: Mot-clé
diff --git a/themes/landscape/languages/ja.yml b/themes/landscape/languages/ja.yml
new file mode 100644
index 0000000..af0f7fe
--- /dev/null
+++ b/themes/landscape/languages/ja.yml
@@ -0,0 +1,19 @@
+categories: カテゴリ
+search: 検索
+tags: タグ
+tagcloud: タグクラウド
+tweets: ツイート
+prev: 戻る
+next: 次へ
+comment: コメント
+archive_a: アーカイブ
+archive_b: "アーカイブ: %s"
+page: ページ %d
+recent_posts: 最近の投稿
+newer: 次の記事
+older: 前の記事
+share: 共有
+powered_by: Powered by
+rss_feed: RSSフィード
+category: カテゴリ
+tag: タグ
diff --git a/themes/landscape/languages/ko.yml b/themes/landscape/languages/ko.yml
new file mode 100644
index 0000000..1d27b43
--- /dev/null
+++ b/themes/landscape/languages/ko.yml
@@ -0,0 +1,19 @@
+categories: 카테고리
+search: 검색
+tags: 태그
+tagcloud: 태그 클라우드
+tweets: 트윗
+prev: 이전
+next: 다음
+comment: 댓글
+archive_a: 아카이브
+archive_b: "아카이브: %s"
+page: 페이지 %d
+recent_posts: 최근 포스트
+newer: 최신
+older: 이전
+share: 공유
+powered_by: Powered by
+rss_feed: RSS Feed
+category: 카테고리
+tag: 태그
diff --git a/themes/landscape/languages/nl.yml b/themes/landscape/languages/nl.yml
new file mode 100644
index 0000000..568d33e
--- /dev/null
+++ b/themes/landscape/languages/nl.yml
@@ -0,0 +1,20 @@
+
+categories: Categorieën
+search: Zoeken
+tags: Labels
+tagcloud: Tag Cloud
+tweets: Tweets
+prev: Vorige
+next: Volgende
+comment: Commentaren
+archive_a: Archieven
+archive_b: "Archieven: %s"
+page: Pagina %d
+recent_posts: Recente berichten
+newer: Nieuwer
+older: Ouder
+share: Delen
+powered_by: Powered by
+rss_feed: RSS Feed
+category: Categorie
+tag: Label
diff --git a/themes/landscape/languages/no.yml b/themes/landscape/languages/no.yml
new file mode 100644
index 0000000..b997691
--- /dev/null
+++ b/themes/landscape/languages/no.yml
@@ -0,0 +1,19 @@
+categories: Kategorier
+search: Søk
+tags: Tags
+tagcloud: Tag Cloud
+tweets: Tweets
+prev: Forrige
+next: Neste
+comment: Kommentarer
+archive_a: Arkiv
+archive_b: "Arkiv: %s"
+page: Side %d
+recent_posts: Siste innlegg
+newer: Newer
+older: Older
+share: Share
+powered_by: Powered by
+rss_feed: RSS Feed
+category: Category
+tag: Tag
\ No newline at end of file
diff --git a/themes/landscape/languages/pt.yml b/themes/landscape/languages/pt.yml
new file mode 100644
index 0000000..3d74af3
--- /dev/null
+++ b/themes/landscape/languages/pt.yml
@@ -0,0 +1,19 @@
+categories: Categorias
+search: Buscar
+tags: Tags
+tagcloud: Nuvem de Tags
+tweets: Tweets
+prev: Anterior
+next: Próximo
+comment: Comentários
+archive_a: Arquivos
+archive_b: "Arquivos: %s"
+page: Página %d
+recent_posts: Postagens Recentes
+newer: Mais Recente
+older: Mais Antigo
+share: Compartilhar
+powered_by: Desenvolvido por
+rss_feed: Feed RSS
+category: Categoria
+tag: Tag
diff --git a/themes/landscape/languages/ru.yml b/themes/landscape/languages/ru.yml
new file mode 100644
index 0000000..625a83c
--- /dev/null
+++ b/themes/landscape/languages/ru.yml
@@ -0,0 +1,19 @@
+categories: Категории
+search: Поиск
+tags: Метки
+tagcloud: Облако меток
+tweets: Твиты
+prev: Назад
+next: Вперед
+comment: Комментарии
+archive_a: Архив
+archive_b: "Архив: %s"
+page: Страница %d
+recent_posts: Недавние записи
+newer: Следующий
+older: Предыдущий
+share: Поделиться
+powered_by: Создано с помощью
+rss_feed: RSS-каналы
+category: Категория
+tag: Метка
\ No newline at end of file
diff --git a/themes/landscape/languages/zh-CN.yml b/themes/landscape/languages/zh-CN.yml
new file mode 100644
index 0000000..51e1321
--- /dev/null
+++ b/themes/landscape/languages/zh-CN.yml
@@ -0,0 +1,19 @@
+categories: 分类
+search: 搜索
+tags: 标签
+tagcloud: 标签云
+tweets: 推文
+prev: 上一页
+next: 下一页
+comment: 留言
+archive_a: 归档
+archive_b: 归档:%s
+page: 第 %d 页
+recent_posts: 最新文章
+newer: Newer
+older: Older
+share: Share
+powered_by: Powered by
+rss_feed: RSS Feed
+category: Category
+tag: Tag
\ No newline at end of file
diff --git a/themes/landscape/languages/zh-TW.yml b/themes/landscape/languages/zh-TW.yml
new file mode 100644
index 0000000..76d2916
--- /dev/null
+++ b/themes/landscape/languages/zh-TW.yml
@@ -0,0 +1,19 @@
+categories: 分類
+search: 搜尋
+tags: 標籤
+tagcloud: 標籤雲
+tweets: 推文
+prev: 上一頁
+next: 下一頁
+comment: 留言
+archive_a: 彙整
+archive_b: 彙整:%s
+page: 第 %d 頁
+recent_posts: 最新文章
+newer: Newer
+older: Older
+share: Share
+powered_by: Powered by
+rss_feed: RSS Feed
+category: Category
+tag: Tag
\ No newline at end of file
diff --git a/themes/landscape/layout/_partial/after-footer.ejs b/themes/landscape/layout/_partial/after-footer.ejs
new file mode 100644
index 0000000..ff2d509
--- /dev/null
+++ b/themes/landscape/layout/_partial/after-footer.ejs
@@ -0,0 +1,25 @@
+<% if (config.disqus_shortname){ %>
+
+<% } %>
+
+
+
+<% if (theme.fancybox){ %>
+ <%- css('fancybox/jquery.fancybox') %>
+ <%- js('fancybox/jquery.fancybox.pack') %>
+<% } %>
+
+<%- js('js/script') %>
+<%- partial('gauges-analytics') %>
diff --git a/themes/landscape/layout/_partial/archive-post.ejs b/themes/landscape/layout/_partial/archive-post.ejs
new file mode 100644
index 0000000..36f2cc3
--- /dev/null
+++ b/themes/landscape/layout/_partial/archive-post.ejs
@@ -0,0 +1,8 @@
+
+
+
+ <%- partial('post/date', {class_name: 'archive-article-date', date_format: 'MMM D'}) %>
+ <%- partial('post/title', {class_name: 'archive-article-title'}) %>
+
+
+
\ No newline at end of file
diff --git a/themes/landscape/layout/_partial/archive.ejs b/themes/landscape/layout/_partial/archive.ejs
new file mode 100644
index 0000000..9da934a
--- /dev/null
+++ b/themes/landscape/layout/_partial/archive.ejs
@@ -0,0 +1,34 @@
+<% if (pagination == 2){ %>
+ <% page.posts.each(function(post){ %>
+ <%- partial('article', {post: post, index: true}) %>
+ <% }) %>
+<% } else { %>
+ <% var last; %>
+ <% page.posts.each(function(post, i){ %>
+ <% var year = post.date.year(); %>
+ <% if (last != year){ %>
+ <% if (last != null){ %>
+
+ <% } %>
+ <% last = year; %>
+
+
+
+ <% } %>
+ <%- partial('archive-post', {post: post, even: i % 2 == 0}) %>
+ <% }) %>
+ <% if (page.posts.length){ %>
+
+ <% } %>
+<% } %>
+<% if (page.total > 1){ %>
+
+ <% var prev_text = "« " + __('prev');var next_text = __('next') + " »"%>
+ <%- paginator({
+ prev_text: prev_text,
+ next_text: next_text
+ }) %>
+
+<% } %>
diff --git a/themes/landscape/layout/_partial/article.ejs b/themes/landscape/layout/_partial/article.ejs
new file mode 100644
index 0000000..0f951a9
--- /dev/null
+++ b/themes/landscape/layout/_partial/article.ejs
@@ -0,0 +1,44 @@
+
+
+ <%- partial('post/date', {class_name: 'article-date', date_format: null}) %>
+ <%- partial('post/category') %>
+
+
+ <%- partial('post/gallery') %>
+ <% if (post.link || post.title){ %>
+
+ <%- partial('post/title', {class_name: 'article-title'}) %>
+
+ <% } %>
+
+ <% if (post.excerpt && index){ %>
+ <%- post.excerpt %>
+ <% if (theme.excerpt_link){ %>
+
+ <%= theme.excerpt_link %>
+
+ <% } %>
+ <% } else { %>
+ <%- post.content %>
+ <% } %>
+
+
+
+ <% if (!index){ %>
+ <%- partial('post/nav') %>
+ <% } %>
+
+
+<% if (!index && post.comments && config.disqus_shortname){ %>
+
+<% } %>
\ No newline at end of file
diff --git a/themes/landscape/layout/_partial/footer.ejs b/themes/landscape/layout/_partial/footer.ejs
new file mode 100644
index 0000000..3aca618
--- /dev/null
+++ b/themes/landscape/layout/_partial/footer.ejs
@@ -0,0 +1,11 @@
+
\ No newline at end of file
diff --git a/themes/landscape/layout/_partial/gauges-analytics.ejs b/themes/landscape/layout/_partial/gauges-analytics.ejs
new file mode 100644
index 0000000..d64be38
--- /dev/null
+++ b/themes/landscape/layout/_partial/gauges-analytics.ejs
@@ -0,0 +1,18 @@
+<% if (theme.gauges_analytics){ %>
+
+
+
+<% } %>
diff --git a/themes/landscape/layout/_partial/google-analytics.ejs b/themes/landscape/layout/_partial/google-analytics.ejs
new file mode 100644
index 0000000..84e75f0
--- /dev/null
+++ b/themes/landscape/layout/_partial/google-analytics.ejs
@@ -0,0 +1,14 @@
+<% if (theme.google_analytics){ %>
+
+
+
+<% } %>
diff --git a/themes/landscape/layout/_partial/head.ejs b/themes/landscape/layout/_partial/head.ejs
new file mode 100644
index 0000000..43d5f93
--- /dev/null
+++ b/themes/landscape/layout/_partial/head.ejs
@@ -0,0 +1,36 @@
+
+
+
+
+ <%- partial('google-analytics') %>
+ <%
+ var title = page.title;
+
+ if (is_archive()){
+ title = __('archive_a');
+
+ if (is_month()){
+ title += ': ' + page.year + '/' + page.month;
+ } else if (is_year()){
+ title += ': ' + page.year;
+ }
+ } else if (is_category()){
+ title = __('category') + ': ' + page.category;
+ } else if (is_tag()){
+ title = __('tag') + ': ' + page.tag;
+ }
+ %>
+
<% if (title){ %><%= title %> | <% } %><%= config.title %>
+
+ <%- open_graph({twitter_id: theme.twitter, google_plus: theme.google_plus, fb_admins: theme.fb_admins, fb_app_id: theme.fb_app_id}) %>
+ <% if (theme.rss){ %>
+
+ <% } %>
+ <% if (theme.favicon){ %>
+
+ <% } %>
+ <% if (config.highlight.enable){ %>
+
+ <% } %>
+ <%- css('css/style') %>
+
diff --git a/themes/landscape/layout/_partial/header.ejs b/themes/landscape/layout/_partial/header.ejs
new file mode 100644
index 0000000..e8a305e
--- /dev/null
+++ b/themes/landscape/layout/_partial/header.ejs
@@ -0,0 +1,32 @@
+
\ No newline at end of file
diff --git a/themes/landscape/layout/_partial/mobile-nav.ejs b/themes/landscape/layout/_partial/mobile-nav.ejs
new file mode 100644
index 0000000..7c1d2af
--- /dev/null
+++ b/themes/landscape/layout/_partial/mobile-nav.ejs
@@ -0,0 +1,5 @@
+
+ <% for (var i in theme.menu){ %>
+ <%= i %>
+ <% } %>
+
\ No newline at end of file
diff --git a/themes/landscape/layout/_partial/post/category.ejs b/themes/landscape/layout/_partial/post/category.ejs
new file mode 100644
index 0000000..db2ed48
--- /dev/null
+++ b/themes/landscape/layout/_partial/post/category.ejs
@@ -0,0 +1,10 @@
+<% if (post.categories && post.categories.length){ %>
+
+ <%- list_categories(post.categories, {
+ show_count: false,
+ class: 'article-category',
+ style: 'none',
+ separator: '►'
+ }) %>
+
+<% } %>
\ No newline at end of file
diff --git a/themes/landscape/layout/_partial/post/date.ejs b/themes/landscape/layout/_partial/post/date.ejs
new file mode 100644
index 0000000..3f49613
--- /dev/null
+++ b/themes/landscape/layout/_partial/post/date.ejs
@@ -0,0 +1,3 @@
+
+ <%= date(post.date, date_format) %>
+
\ No newline at end of file
diff --git a/themes/landscape/layout/_partial/post/gallery.ejs b/themes/landscape/layout/_partial/post/gallery.ejs
new file mode 100644
index 0000000..886c8ec
--- /dev/null
+++ b/themes/landscape/layout/_partial/post/gallery.ejs
@@ -0,0 +1,11 @@
+<% if (post.photos && post.photos.length){ %>
+
+
+ <% post.photos.forEach(function(photo, i){ %>
+
+
+
+ <% }) %>
+
+
+<% } %>
\ No newline at end of file
diff --git a/themes/landscape/layout/_partial/post/nav.ejs b/themes/landscape/layout/_partial/post/nav.ejs
new file mode 100644
index 0000000..720798a
--- /dev/null
+++ b/themes/landscape/layout/_partial/post/nav.ejs
@@ -0,0 +1,22 @@
+<% if (post.prev || post.next){ %>
+
+ <% if (post.prev){ %>
+
+ <%= __('newer') %>
+
+ <% if (post.prev.title){ %>
+ <%= post.prev.title %>
+ <% } else { %>
+ (no title)
+ <% } %>
+
+
+ <% } %>
+ <% if (post.next){ %>
+
+ <%= __('older') %>
+ <%= post.next.title %>
+
+ <% } %>
+
+<% } %>
\ No newline at end of file
diff --git a/themes/landscape/layout/_partial/post/tag.ejs b/themes/landscape/layout/_partial/post/tag.ejs
new file mode 100644
index 0000000..e0f327f
--- /dev/null
+++ b/themes/landscape/layout/_partial/post/tag.ejs
@@ -0,0 +1,6 @@
+<% if (post.tags && post.tags.length){ %>
+ <%- list_tags(post.tags, {
+ show_count: false,
+ class: 'article-tag'
+ }) %>
+<% } %>
\ No newline at end of file
diff --git a/themes/landscape/layout/_partial/post/title.ejs b/themes/landscape/layout/_partial/post/title.ejs
new file mode 100644
index 0000000..69d646f
--- /dev/null
+++ b/themes/landscape/layout/_partial/post/title.ejs
@@ -0,0 +1,15 @@
+<% if (post.link){ %>
+
+<% } else if (post.title){ %>
+ <% if (index){ %>
+
+ <% } else { %>
+
+ <%= post.title %>
+
+ <% } %>
+<% } %>
\ No newline at end of file
diff --git a/themes/landscape/layout/_partial/sidebar.ejs b/themes/landscape/layout/_partial/sidebar.ejs
new file mode 100644
index 0000000..c1e48e5
--- /dev/null
+++ b/themes/landscape/layout/_partial/sidebar.ejs
@@ -0,0 +1,5 @@
+
\ No newline at end of file
diff --git a/themes/landscape/layout/_widget/archive.ejs b/themes/landscape/layout/_widget/archive.ejs
new file mode 100644
index 0000000..a20c58c
--- /dev/null
+++ b/themes/landscape/layout/_widget/archive.ejs
@@ -0,0 +1,8 @@
+<% if (site.posts.length){ %>
+
+<% } %>
diff --git a/themes/landscape/layout/_widget/category.ejs b/themes/landscape/layout/_widget/category.ejs
new file mode 100644
index 0000000..8d9e5e9
--- /dev/null
+++ b/themes/landscape/layout/_widget/category.ejs
@@ -0,0 +1,8 @@
+<% if (site.categories.length){ %>
+
+<% } %>
diff --git a/themes/landscape/layout/_widget/recent_posts.ejs b/themes/landscape/layout/_widget/recent_posts.ejs
new file mode 100644
index 0000000..7a38547
--- /dev/null
+++ b/themes/landscape/layout/_widget/recent_posts.ejs
@@ -0,0 +1,14 @@
+<% if (site.posts.length){ %>
+
+<% } %>
\ No newline at end of file
diff --git a/themes/landscape/layout/_widget/tag.ejs b/themes/landscape/layout/_widget/tag.ejs
new file mode 100644
index 0000000..ea5fb2c
--- /dev/null
+++ b/themes/landscape/layout/_widget/tag.ejs
@@ -0,0 +1,8 @@
+<% if (site.tags.length){ %>
+
+<% } %>
diff --git a/themes/landscape/layout/_widget/tagcloud.ejs b/themes/landscape/layout/_widget/tagcloud.ejs
new file mode 100644
index 0000000..5feb435
--- /dev/null
+++ b/themes/landscape/layout/_widget/tagcloud.ejs
@@ -0,0 +1,8 @@
+<% if (site.tags.length){ %>
+
+<% } %>
\ No newline at end of file
diff --git a/themes/landscape/layout/archive.ejs b/themes/landscape/layout/archive.ejs
new file mode 100644
index 0000000..52f9b21
--- /dev/null
+++ b/themes/landscape/layout/archive.ejs
@@ -0,0 +1 @@
+<%- partial('_partial/archive', {pagination: config.archive, index: true}) %>
\ No newline at end of file
diff --git a/themes/landscape/layout/category.ejs b/themes/landscape/layout/category.ejs
new file mode 100644
index 0000000..3ffe252
--- /dev/null
+++ b/themes/landscape/layout/category.ejs
@@ -0,0 +1 @@
+<%- partial('_partial/archive', {pagination: config.category, index: true}) %>
\ No newline at end of file
diff --git a/themes/landscape/layout/index.ejs b/themes/landscape/layout/index.ejs
new file mode 100644
index 0000000..60a2c68
--- /dev/null
+++ b/themes/landscape/layout/index.ejs
@@ -0,0 +1 @@
+<%- partial('_partial/archive', {pagination: 2, index: true}) %>
\ No newline at end of file
diff --git a/themes/landscape/layout/layout.ejs b/themes/landscape/layout/layout.ejs
new file mode 100644
index 0000000..cf88daf
--- /dev/null
+++ b/themes/landscape/layout/layout.ejs
@@ -0,0 +1,18 @@
+<%- partial('_partial/head') %>
+
+
+
+ <%- partial('_partial/header', null, {cache: !config.relative_link}) %>
+
+
+ <% if (theme.sidebar && theme.sidebar !== 'bottom'){ %>
+ <%- partial('_partial/sidebar', null, {cache: !config.relative_link}) %>
+ <% } %>
+
+ <%- partial('_partial/footer', null, {cache: !config.relative_link}) %>
+
+ <%- partial('_partial/mobile-nav', null, {cache: !config.relative_link}) %>
+ <%- partial('_partial/after-footer') %>
+
+
+
\ No newline at end of file
diff --git a/themes/landscape/layout/page.ejs b/themes/landscape/layout/page.ejs
new file mode 100644
index 0000000..bea6318
--- /dev/null
+++ b/themes/landscape/layout/page.ejs
@@ -0,0 +1 @@
+<%- partial('_partial/article', {post: page, index: false}) %>
\ No newline at end of file
diff --git a/themes/landscape/layout/post.ejs b/themes/landscape/layout/post.ejs
new file mode 100644
index 0000000..bea6318
--- /dev/null
+++ b/themes/landscape/layout/post.ejs
@@ -0,0 +1 @@
+<%- partial('_partial/article', {post: page, index: false}) %>
\ No newline at end of file
diff --git a/themes/landscape/layout/tag.ejs b/themes/landscape/layout/tag.ejs
new file mode 100644
index 0000000..048cdb0
--- /dev/null
+++ b/themes/landscape/layout/tag.ejs
@@ -0,0 +1 @@
+<%- partial('_partial/archive', {pagination: config.tag, index: true}) %>
\ No newline at end of file
diff --git a/themes/landscape/package.json b/themes/landscape/package.json
new file mode 100644
index 0000000..ac0df3d
--- /dev/null
+++ b/themes/landscape/package.json
@@ -0,0 +1,12 @@
+{
+ "name": "hexo-theme-landscape",
+ "version": "0.0.2",
+ "private": true,
+ "devDependencies": {
+ "grunt": "~0.4.2",
+ "load-grunt-tasks": "~0.2.0",
+ "grunt-git": "~0.2.2",
+ "grunt-contrib-clean": "~0.5.0",
+ "grunt-contrib-copy": "~0.4.1"
+ }
+}
diff --git a/themes/landscape/scripts/fancybox.js b/themes/landscape/scripts/fancybox.js
new file mode 100644
index 0000000..83f1fdc
--- /dev/null
+++ b/themes/landscape/scripts/fancybox.js
@@ -0,0 +1,24 @@
+var rUrl = /((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[.\!\/\\w]*))?)/;
+
+/**
+* Fancybox tag
+*
+* Syntax:
+* {% fancybox /path/to/image [/path/to/thumbnail] [title] %}
+*/
+
+hexo.extend.tag.register('fancybox', function(args){
+ var original = args.shift(),
+ thumbnail = '';
+
+ if (args.length && rUrl.test(args[0])){
+ thumbnail = args.shift();
+ }
+
+ var title = args.join(' ');
+
+ return '
' +
+ ' '
+ ' ' +
+ (title ? '
' + title + ' ' : '');
+});
\ No newline at end of file
diff --git a/themes/landscape/source/css/_extend.styl b/themes/landscape/source/css/_extend.styl
new file mode 100644
index 0000000..96a1817
--- /dev/null
+++ b/themes/landscape/source/css/_extend.styl
@@ -0,0 +1,63 @@
+$block-caption
+ text-decoration: none
+ text-transform: uppercase
+ letter-spacing: 2px
+ color: color-grey
+ margin-bottom: 1em
+ margin-left: 5px
+ line-height: 1em
+ text-shadow: 0 1px #fff
+ font-weight: bold
+
+$block
+ background: #fff
+ box-shadow: 1px 2px 3px #ddd
+ border: 1px solid color-border
+ border-radius: 3px
+
+$base-style
+ h1
+ font-size: 2em
+ h2
+ font-size: 1.5em
+ h3
+ font-size: 1.3em
+ h4
+ font-size: 1.2em
+ h5
+ font-size: 1em
+ h6
+ font-size: 1em
+ color: color-grey
+ hr
+ border: 1px dashed color-border
+ strong
+ font-weight: bold
+ em, cite
+ font-style: italic
+ sup, sub
+ font-size: 0.75em
+ line-height: 0
+ position: relative
+ vertical-align: baseline
+ sup
+ top: -0.5em
+ sub
+ bottom: -0.2em
+ small
+ font-size: 0.85em
+ acronym, abbr
+ border-bottom: 1px dotted
+ ul, ol, dl
+ margin: 0 20px
+ line-height: line-height
+ ul, ol
+ ul, ol
+ margin-top: 0
+ margin-bottom: 0
+ ul
+ list-style: disc
+ ol
+ list-style: decimal
+ dt
+ font-weight: bold
\ No newline at end of file
diff --git a/themes/landscape/source/css/_partial/archive.styl b/themes/landscape/source/css/_partial/archive.styl
new file mode 100644
index 0000000..90ef053
--- /dev/null
+++ b/themes/landscape/source/css/_partial/archive.styl
@@ -0,0 +1,80 @@
+.archives-wrap
+ margin: block-margin 0
+
+.archives
+ clearfix()
+
+.archive-year-wrap
+ margin-bottom: 1em
+
+.archive-year
+ @extend $block-caption
+
+.archives
+ column-gap: 10px
+ @media mq-tablet
+ column-count: 2
+ @media mq-normal
+ column-count: 3
+
+.archive-article
+ avoid-column-break()
+
+.archive-article-inner
+ @extend $block
+ padding: 10px
+ margin-bottom: 15px
+
+.archive-article-title
+ text-decoration: none
+ font-weight: bold
+ color: color-default
+ transition: color 0.2s
+ line-height: line-height
+ &:hover
+ color: color-link
+
+.archive-article-footer
+ margin-top: 1em
+
+.archive-article-date
+ color: color-grey
+ text-decoration: none
+ font-size: 0.85em
+ line-height: 1em
+ margin-bottom: 0.5em
+ display: block
+
+#page-nav
+ clearfix()
+ margin: block-margin auto
+ background: #fff
+ box-shadow: 1px 2px 3px #ddd
+ border: 1px solid color-border
+ border-radius: 3px
+ text-align: center
+ color: color-grey
+ overflow: hidden
+ a, span
+ padding: 10px 20px
+ line-height: 1
+ height: 2ex
+ a
+ color: color-grey
+ text-decoration: none
+ &:hover
+ background: color-grey
+ color: #fff
+ .prev
+ float: left
+ .next
+ float: right
+ .page-number
+ display: inline-block
+ @media mq-mobile
+ display: none
+ .current
+ color: color-default
+ font-weight: bold
+ .space
+ color: color-border
\ No newline at end of file
diff --git a/themes/landscape/source/css/_partial/article.styl b/themes/landscape/source/css/_partial/article.styl
new file mode 100644
index 0000000..46094f9
--- /dev/null
+++ b/themes/landscape/source/css/_partial/article.styl
@@ -0,0 +1,357 @@
+.article
+ margin: block-margin 0
+
+.article-inner
+ @extend $block
+ overflow: hidden
+
+.article-meta
+ clearfix()
+
+.article-date
+ @extend $block-caption
+ float: left
+
+.article-category
+ float: left
+ line-height: 1em
+ color: #ccc
+ text-shadow: 0 1px #fff
+ margin-left: 8px
+ &:before
+ content: "\2022"
+
+.article-category-link
+ @extend $block-caption
+ margin: 0 12px 1em
+
+.article-header
+ padding: article-padding article-padding 0
+
+.article-title
+ text-decoration: none
+ font-size: 2em
+ font-weight: bold
+ color: color-default
+ line-height: line-height-title
+ transition: color 0.2s
+ a&:hover
+ color: color-link
+
+.article-entry
+ @extend $base-style
+ clearfix()
+ color: color-default
+ padding: 0 article-padding
+ p, table
+ line-height: line-height
+ margin: line-height 0
+ h1, h2, h3, h4, h5, h6
+ font-weight: bold
+ h1, h2, h3, h4, h5, h6
+ line-height: line-height-title
+ margin: line-height-title 0
+ a
+ color: color-link
+ text-decoration: none
+ &:hover
+ text-decoration: underline
+ ul, ol, dl
+ margin-top: line-height
+ margin-bottom: line-height
+ img, video
+ max-width: 100%
+ height: auto
+ display: block
+ margin: auto
+ iframe
+ border: none
+ table
+ width: 100%
+ border-collapse: collapse
+ border-spacing: 0
+ th
+ font-weight: bold
+ border-bottom: 3px solid color-border
+ padding-bottom: 0.5em
+ td
+ border-bottom: 1px solid color-border
+ padding: 10px 0
+ blockquote
+ font-family: font-serif
+ font-size: 1.4em
+ margin: line-height 20px
+ text-align: center
+ footer
+ font-size: font-size
+ margin: line-height 0
+ font-family: font-sans
+ cite
+ &:before
+ content: "—"
+ padding: 0 0.5em
+ .pullquote
+ text-align: left
+ width: 45%
+ margin: 0
+ &.left
+ margin-left: 0.5em
+ margin-right: 1em
+ &.right
+ margin-right: 0.5em
+ margin-left: 1em
+ .caption
+ color: color-grey
+ display: block
+ font-size: 0.9em
+ margin-top: 0.5em
+ position: relative
+ text-align: center
+ // http://webdesignerwall.com/tutorials/css-elastic-videos
+ .video-container
+ position: relative
+ padding-top: (9 / 16 * 100)% // 16:9 ratio
+ height: 0
+ overflow: hidden
+ iframe, object, embed
+ position: absolute
+ top: 0
+ left: 0
+ width: 100%
+ height: 100%
+ margin-top: 0
+
+.article-more-link a
+ display: inline-block
+ line-height: 1em
+ padding: 6px 15px
+ border-radius: 15px
+ background: color-background
+ color: color-grey
+ text-shadow: 0 1px #fff
+ text-decoration: none
+ &:hover
+ background: color-link
+ color: #fff
+ text-decoration: none
+ text-shadow: 0 1px darken(color-link, 20%)
+
+.article-footer
+ clearfix()
+ font-size: 0.85em
+ line-height: line-height
+ border-top: 1px solid color-border
+ padding-top: line-height
+ margin: 0 article-padding article-padding
+ a
+ color: color-grey
+ text-decoration: none
+ &:hover
+ color: color-default
+
+.article-tag-list-item
+ float: left
+ margin-right: 10px
+
+.article-tag-list-link
+ &:before
+ content: "#"
+
+.article-comment-link
+ float: right
+ &:before
+ content: "\f075"
+ font-family: font-icon
+ padding-right: 8px
+
+.article-share-link
+ cursor: pointer
+ float: right
+ margin-left: 20px
+ &:before
+ content: "\f064"
+ font-family: font-icon
+ padding-right: 6px
+
+#article-nav
+ clearfix()
+ position: relative
+ @media mq-normal
+ margin: block-margin 0
+ &:before
+ absolute-center(8px)
+ content: ""
+ border-radius: 50%
+ background: color-border
+ box-shadow: 0 1px 2px #fff
+
+.article-nav-link-wrap
+ text-decoration: none
+ text-shadow: 0 1px #fff
+ color: color-grey
+ box-sizing: border-box
+ margin-top: block-margin
+ text-align: center
+ display: block
+ &:hover
+ color: color-default
+ @media mq-normal
+ width: 50%
+ margin-top: 0
+
+#article-nav-newer
+ @media mq-normal
+ float: left
+ text-align: right
+ padding-right: 20px
+
+#article-nav-older
+ @media mq-normal
+ float: right
+ text-align: left
+ padding-left: 20px
+
+.article-nav-caption
+ text-transform: uppercase
+ letter-spacing: 2px
+ color: color-border
+ line-height: 1em
+ font-weight: bold
+ #article-nav-newer &
+ margin-right: -2px
+
+.article-nav-title
+ font-size: 0.85em
+ line-height: line-height
+ margin-top: 0.5em
+
+.article-share-box
+ position: absolute
+ display: none
+ background: #fff
+ box-shadow: 1px 2px 10px rgba(0, 0, 0, 0.2)
+ border-radius: 3px
+ margin-left: -145px
+ overflow: hidden
+ z-index: 1
+ &.on
+ display: block
+
+.article-share-input
+ width: 100%
+ background: none
+ box-sizing: border-box
+ font: 14px font-sans
+ padding: 0 15px
+ color: color-default
+ outline: none
+ border: 1px solid color-border
+ border-radius: 3px 3px 0 0
+ height: 36px
+ line-height: 36px
+
+.article-share-links
+ clearfix()
+ background: color-background
+
+$article-share-link
+ width: 50px
+ height: 36px
+ display: block
+ float: left
+ position: relative
+ color: #999
+ text-shadow: 0 1px #fff
+ &:before
+ font-size: 20px
+ font-family: font-icon
+ absolute-center(@font-size)
+ text-align: center
+ &:hover
+ color: #fff
+
+.article-share-twitter
+ @extend $article-share-link
+ &:before
+ content: "\f099"
+ &:hover
+ background: color-twitter
+ text-shadow: 0 1px darken(color-twitter, 20%)
+
+.article-share-facebook
+ @extend $article-share-link
+ &:before
+ content: "\f09a"
+ &:hover
+ background: color-facebook
+ text-shadow: 0 1px darken(color-facebook, 20%)
+
+.article-share-pinterest
+ @extend $article-share-link
+ &:before
+ content: "\f0d2"
+ &:hover
+ background: color-pinterest
+ text-shadow: 0 1px darken(color-pinterest, 20%)
+
+.article-share-google
+ @extend $article-share-link
+ &:before
+ content: "\f0d5"
+ &:hover
+ background: color-google
+ text-shadow: 0 1px darken(color-google, 20%)
+
+.article-gallery
+ background: #000
+ position: relative
+
+.article-gallery-photos
+ position: relative
+ overflow: hidden
+
+.article-gallery-img
+ display: none
+ max-width: 100%
+ &:first-child
+ display: block
+ &.loaded
+ position: absolute
+ display: block
+ img
+ display: block
+ max-width: 100%
+ margin: 0 auto
+/*
+$article-gallery-ctrl
+ position: absolute
+ top: 0
+ height: 100%
+ width: 60px
+ color: #fff
+ text-shadow: 0 0 3px rgba(0, 0, 0, 0.3)
+ opacity: 0.3
+ transition: opacity 0.2s
+ cursor: pointer
+ &:hover
+ opacity: 0.8
+ &:before
+ font-size: 30px
+ font-family: font-icon
+ position: absolute
+ top: 50%
+ margin-top: @font-size * -0.5
+
+.article-gallery-prev
+ @extend $article-gallery-ctrl
+ left: 0
+ &:before
+ content: "\f053"
+ left: 15px
+
+.article-gallery-next
+ @extend $article-gallery-ctrl
+ right: 0
+ &:before
+ content: "\f054"
+ right: 15px*/
\ No newline at end of file
diff --git a/themes/landscape/source/css/_partial/comment.styl b/themes/landscape/source/css/_partial/comment.styl
new file mode 100644
index 0000000..296b7dd
--- /dev/null
+++ b/themes/landscape/source/css/_partial/comment.styl
@@ -0,0 +1,9 @@
+#comments
+ background: #fff
+ box-shadow: 1px 2px 3px #ddd
+ padding: article-padding
+ border: 1px solid color-border
+ border-radius: 3px
+ margin: block-margin 0
+ a
+ color: color-link
\ No newline at end of file
diff --git a/themes/landscape/source/css/_partial/footer.styl b/themes/landscape/source/css/_partial/footer.styl
new file mode 100644
index 0000000..fe2fd24
--- /dev/null
+++ b/themes/landscape/source/css/_partial/footer.styl
@@ -0,0 +1,14 @@
+#footer
+ background: color-footer-background
+ padding: 50px 0
+ border-top: 1px solid color-border
+ color: color-grey
+ a
+ color: color-link
+ text-decoration: none
+ &:hover
+ text-decoration: underline
+
+#footer-info
+ line-height: line-height
+ font-size: 0.85em
\ No newline at end of file
diff --git a/themes/landscape/source/css/_partial/header.styl b/themes/landscape/source/css/_partial/header.styl
new file mode 100644
index 0000000..d18ebc8
--- /dev/null
+++ b/themes/landscape/source/css/_partial/header.styl
@@ -0,0 +1,165 @@
+#header
+ height: banner-height
+ position: relative
+ border-bottom: 1px solid color-border
+ &:before, &:after
+ content: ""
+ position: absolute
+ left: 0
+ right: 0
+ height: 40px
+ &:before
+ top: 0
+ background: linear-gradient(rgba(0, 0, 0, 0.2), transparent)
+ &:after
+ bottom: 0
+ background: linear-gradient(transparent, rgba(0, 0, 0, 0.2))
+
+#header-outer
+ height: 100%
+ position: relative
+
+#header-inner
+ position: relative
+ overflow: hidden
+
+#banner
+ position: absolute
+ top: 0
+ left: 0
+ width: 100%
+ height: 100%
+ background: url(banner-url) center #000
+ background-size: cover
+ z-index: -1
+
+#header-title
+ text-align: center
+ height: logo-size
+ position: absolute
+ top: 50%
+ left: 0
+ margin-top: logo-size * -0.5
+
+$logo-text
+ text-decoration: none
+ color: #fff
+ font-weight: 300
+ text-shadow: 0 1px 4px rgba(0, 0, 0, 0.3)
+
+#logo
+ @extend $logo-text
+ font-size: logo-size
+ line-height: logo-size
+ letter-spacing: 2px
+
+#subtitle
+ @extend $logo-text
+ font-size: subtitle-size
+ line-height: subtitle-size
+ letter-spacing: 1px
+
+#subtitle-wrap
+ margin-top: subtitle-size
+
+#main-nav
+ float: left
+ margin-left: -15px
+
+$nav-link
+ float: left
+ color: #fff
+ opacity: 0.6
+ text-decoration: none
+ text-shadow: 0 1px rgba(0, 0, 0, 0.2)
+ transition: opacity 0.2s
+ display: block
+ padding: 20px 15px
+ &:hover
+ opacity: 1
+
+.nav-icon
+ @extend $nav-link
+ font-family: font-icon
+ text-align: center
+ font-size: font-size
+ width: font-size
+ height: font-size
+ padding: 20px 15px
+ position: relative
+ cursor: pointer
+
+.main-nav-link
+ @extend $nav-link
+ font-weight: 300
+ letter-spacing: 1px
+ @media mq-mobile
+ display: none
+
+#main-nav-toggle
+ display: none
+ &:before
+ content: "\f0c9"
+ @media mq-mobile
+ display: block
+
+#sub-nav
+ float: right
+ margin-right: -15px
+
+#nav-rss-link
+ &:before
+ content: "\f09e"
+
+#nav-search-btn
+ &:before
+ content: "\f002"
+
+#search-form-wrap
+ position: absolute
+ top: 15px
+ width: 150px
+ height: 30px
+ right: -150px
+ opacity: 0
+ transition: 0.2s ease-out
+ &.on
+ opacity: 1
+ right: 0
+ @media mq-mobile
+ width: 100%
+ right: -100%
+
+.search-form
+ position: absolute
+ top: 0
+ left: 0
+ right: 0
+ background: #fff
+ padding: 5px 15px
+ border-radius: 15px
+ box-shadow: 0 0 10px rgba(0, 0, 0, 0.3)
+
+.search-form-input
+ border: none
+ background: none
+ color: color-default
+ width: 100%
+ font: 13px font-sans
+ outline: none
+ &::-webkit-search-results-decoration
+ &::-webkit-search-cancel-button
+ -webkit-appearance: none
+
+.search-form-submit
+ position: absolute
+ top: 50%
+ right: 10px
+ margin-top: -7px
+ font: 13px font-icon
+ border: none
+ background: none
+ color: #bbb
+ cursor: pointer
+ &:hover, &:focus
+ color: #777
\ No newline at end of file
diff --git a/themes/landscape/source/css/_partial/highlight.styl b/themes/landscape/source/css/_partial/highlight.styl
new file mode 100644
index 0000000..c932ec3
--- /dev/null
+++ b/themes/landscape/source/css/_partial/highlight.styl
@@ -0,0 +1,158 @@
+// https://github.com/chriskempson/tomorrow-theme
+highlight-background = #2d2d2d
+highlight-current-line = #393939
+highlight-selection = #515151
+highlight-foreground = #cccccc
+highlight-comment = #999999
+highlight-red = #f2777a
+highlight-orange = #f99157
+highlight-yellow = #ffcc66
+highlight-green = #99cc99
+highlight-aqua = #66cccc
+highlight-blue = #6699cc
+highlight-purple = #cc99cc
+
+$code-block
+ background: highlight-background
+ margin: 0 article-padding * -1
+ padding: 15px article-padding
+ border-style: solid
+ border-color: color-border
+ border-width: 1px 0
+ overflow: auto
+ color: highlight-foreground
+ line-height: font-size * line-height
+
+$line-numbers
+ color: #666
+ font-size: 0.85em
+
+.article-entry
+ pre, code
+ font-family: font-mono
+ code
+ background: color-background
+ text-shadow: 0 1px #fff
+ padding: 0 0.3em
+ pre
+ @extend $code-block
+ code
+ background: none
+ text-shadow: none
+ padding: 0
+ .highlight
+ @extend $code-block
+ pre
+ border: none
+ margin: 0
+ padding: 0
+ table
+ margin: 0
+ width: auto
+ td
+ border: none
+ padding: 0
+ figcaption
+ clearfix()
+ font-size: 0.85em
+ color: highlight-comment
+ line-height: 1em
+ margin-bottom: 1em
+ a
+ float: right
+ .gutter pre
+ @extend $line-numbers
+ text-align: right
+ padding-right: 20px
+ .line
+ height: font-size * line-height
+ .line.marked
+ background: highlight-selection
+ .gist
+ margin: 0 article-padding * -1
+ border-style: solid
+ border-color: color-border
+ border-width: 1px 0
+ background: highlight-background
+ padding: 15px article-padding 15px 0
+ .gist-file
+ border: none
+ font-family: font-mono
+ margin: 0
+ .gist-data
+ background: none
+ border: none
+ .line-numbers
+ @extend $line-numbers
+ background: none
+ border: none
+ padding: 0 20px 0 0
+ .line-data
+ padding: 0 !important
+ .highlight
+ margin: 0
+ padding: 0
+ border: none
+ .gist-meta
+ background: highlight-background
+ color: highlight-comment
+ font: 0.85em font-sans
+ text-shadow: 0 0
+ padding: 0
+ margin-top: 1em
+ margin-left: article-padding
+ a
+ color: color-link
+ font-weight: normal
+ &:hover
+ text-decoration: underline
+
+pre
+ .comment
+ .title
+ color: highlight-comment
+ .variable
+ .attribute
+ .tag
+ .regexp
+ .ruby .constant
+ .xml .tag .title
+ .xml .pi
+ .xml .doctype
+ .html .doctype
+ .css .id
+ .css .class
+ .css .pseudo
+ color: highlight-red
+ .number
+ .preprocessor
+ .built_in
+ .literal
+ .params
+ .constant
+ color: highlight-orange
+ .class
+ .ruby .class .title
+ .css .rules .attribute
+ color: highlight-green
+ .string
+ .value
+ .inheritance
+ .header
+ .ruby .symbol
+ .xml .cdata
+ color: highlight-green
+ .css .hexcolor
+ color: highlight-aqua
+ .function
+ .python .decorator
+ .python .title
+ .ruby .function .title
+ .ruby .title .keyword
+ .perl .sub
+ .javascript .title
+ .coffeescript .title
+ color: highlight-blue
+ .keyword
+ .javascript .function
+ color: highlight-purple
diff --git a/themes/landscape/source/css/_partial/mobile.styl b/themes/landscape/source/css/_partial/mobile.styl
new file mode 100644
index 0000000..eb68b3a
--- /dev/null
+++ b/themes/landscape/source/css/_partial/mobile.styl
@@ -0,0 +1,19 @@
+@media mq-mobile
+ #mobile-nav
+ position: absolute
+ top: 0
+ left: 0
+ width: mobile-nav-width
+ height: 100%
+ background: color-mobile-nav-background
+ border-right: 1px solid #fff
+
+@media mq-mobile
+ .mobile-nav-link
+ display: block
+ color: color-grey
+ text-decoration: none
+ padding: 15px 20px
+ font-weight: bold
+ &:hover
+ color: #fff
diff --git a/themes/landscape/source/css/_partial/sidebar-aside.styl b/themes/landscape/source/css/_partial/sidebar-aside.styl
new file mode 100644
index 0000000..838b167
--- /dev/null
+++ b/themes/landscape/source/css/_partial/sidebar-aside.styl
@@ -0,0 +1,27 @@
+#sidebar
+ @media mq-normal
+ column(sidebar-column)
+
+.widget-wrap
+ margin: block-margin 0
+
+.widget-title
+ @extend $block-caption
+
+.widget
+ color: color-sidebar-text
+ text-shadow: 0 1px #fff
+ background: color-widget-background
+ box-shadow: 0 -1px 4px color-widget-border inset
+ border: 1px solid color-widget-border
+ padding: 15px
+ border-radius: 3px
+ a
+ color: color-link
+ text-decoration: none
+ &:hover
+ text-decoration: underline
+ ul, ol, dl
+ ul, ol, dl
+ margin-left: 15px
+ list-style: disc
\ No newline at end of file
diff --git a/themes/landscape/source/css/_partial/sidebar-bottom.styl b/themes/landscape/source/css/_partial/sidebar-bottom.styl
new file mode 100644
index 0000000..e2403fd
--- /dev/null
+++ b/themes/landscape/source/css/_partial/sidebar-bottom.styl
@@ -0,0 +1,27 @@
+.widget-wrap
+ margin-bottom: block-margin !important
+ @media mq-normal
+ column(main-column)
+
+.widget-title
+ color: #ccc
+ text-transform: uppercase
+ letter-spacing: 2px
+ margin-bottom: .5em
+ line-height: 1em
+ font-weight: bold
+
+.widget
+ color: color-grey
+ ul, ol
+ li
+ display: inline-block
+ zoom:1
+ *display:inline
+ padding-right: .75em
+/* Having problems getting balanced white space between items
+ li:before
+ content: " | "
+ li:first-child:before
+ content: none
+ */
diff --git a/themes/landscape/source/css/_partial/sidebar.styl b/themes/landscape/source/css/_partial/sidebar.styl
new file mode 100644
index 0000000..e43d66a
--- /dev/null
+++ b/themes/landscape/source/css/_partial/sidebar.styl
@@ -0,0 +1,35 @@
+if sidebar is bottom
+ @import "sidebar-bottom"
+else
+ @import "sidebar-aside"
+
+.widget
+ @extend $base-style
+ line-height: line-height
+ word-wrap: break-word
+ font-size: 0.9em
+ ul, ol
+ list-style: none
+ margin: 0
+ ul, ol
+ margin: 0 20px
+ ul
+ list-style: disc
+ ol
+ list-style: decimal
+
+.category-list-count
+.tag-list-count
+.archive-list-count
+ padding-left: 5px
+ color: color-grey
+ font-size: 0.85em
+ &:before
+ content: "("
+ &:after
+ content: ")"
+
+.tagcloud
+ a
+ margin-right: 5px
+ display: inline-block
diff --git a/themes/landscape/source/css/_util/grid.styl b/themes/landscape/source/css/_util/grid.styl
new file mode 100644
index 0000000..2a14dd2
--- /dev/null
+++ b/themes/landscape/source/css/_util/grid.styl
@@ -0,0 +1,38 @@
+/////////////////
+// Semantic.gs // for Stylus: http://learnboost.github.com/stylus/
+/////////////////
+
+// Utility function — you should never need to modify this
+// _gridsystem-width = (column-width + gutter-width) * columns
+gridsystem-width(_columns = columns)
+ (column-width + gutter-width) * _columns
+
+// Set @total-width to 100% for a fluid layout
+// total-width = gridsystem-width(columns)
+total-width = 100%
+
+//////////
+// GRID //
+//////////
+
+body
+ clearfix()
+ width: 100%
+
+row(_columns = columns)
+ clearfix()
+ display: block
+ width: total-width * ((gutter-width + gridsystem-width(_columns)) / gridsystem-width(_columns))
+ margin: 0 total-width * (((gutter-width * .5) / gridsystem-width(_columns)) * -1)
+
+column(x, _columns = columns)
+ display: inline
+ float: left
+ width: total-width * ((((gutter-width + column-width) * x) - gutter-width) / gridsystem-width(_columns))
+ margin: 0 total-width * ((gutter-width * .5) / gridsystem-width(_columns))
+
+push(offset = 1)
+ margin-left: total-width * (((gutter-width + column-width) * offset) / gridsystem-width(columns))
+
+pull(offset = 1)
+ margin-right: total-width * (((gutter-width + column-width) * offset) / gridsystem-width(columns))
\ No newline at end of file
diff --git a/themes/landscape/source/css/_util/mixin.styl b/themes/landscape/source/css/_util/mixin.styl
new file mode 100644
index 0000000..b56f037
--- /dev/null
+++ b/themes/landscape/source/css/_util/mixin.styl
@@ -0,0 +1,31 @@
+// http://www.zeldman.com/2012/03/01/replacing-the-9999px-hack-new-image-replacement/
+hide-text()
+ text-indent: 100%
+ white-space: nowrap
+ overflow: hidden
+
+// http://codepen.io/shshaw/full/gEiDt
+absolute-center(width, height = width)
+ // margin: auto
+ // position: absolute
+ // top: 50%
+ // top: 0
+ // left: 0
+ // bottom: 0
+ // right: 0
+ // width: width
+ // height: height
+ // overflow: auto
+ width: width
+ height: height
+ position: absolute
+ top: 50%
+ left: 50%
+ margin-top: width * -0.5
+ margin-left: height * -0.5
+
+avoid-column-break()
+ vendor("column-break-inside", avoid, only: webkit)
+ page-break-inside: avoid // for firefox
+ overflow: hidden // fix for firefox
+ break-inside: avoid-column
diff --git a/themes/landscape/source/css/_variables.styl b/themes/landscape/source/css/_variables.styl
new file mode 100644
index 0000000..4562911
--- /dev/null
+++ b/themes/landscape/source/css/_variables.styl
@@ -0,0 +1,63 @@
+// Config
+support-for-ie = false
+vendor-prefixes = webkit moz ms official
+
+// Colors
+color-default = #555
+color-grey = #999
+color-border = #ddd
+color-link = #258fb8
+color-background = #eee
+color-sidebar-text = #777
+color-widget-background = #ddd
+color-widget-border = #ccc
+color-footer-background = #262a30
+color-mobile-nav-background = #191919
+color-twitter = #00aced
+color-facebook = #3b5998
+color-pinterest = #cb2027
+color-google = #dd4b39
+
+// Fonts
+font-sans = -apple-system, BlinkMacSystemFont,
+ "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell",
+ "Fira Sans", "Droid Sans", "Helvetica Neue",
+ sans-serif
+font-serif = Georgia, "Times New Roman", serif
+font-mono = "Source Code Pro", Consolas, Monaco, Menlo, Consolas, monospace
+font-icon = FontAwesome
+font-icon-path = "fonts/fontawesome-webfont"
+font-icon-version = "4.0.3"
+font-size = 14px
+line-height = 1.6em
+line-height-title = 1.1em
+
+// Header
+logo-size = 40px
+subtitle-size = 16px
+banner-height = 300px
+banner-url = "images/banner.jpg"
+
+sidebar = hexo-config("sidebar")
+
+// Layout
+block-margin = 50px
+article-padding = 20px
+mobile-nav-width = 280px
+main-column = 9
+sidebar-column = 3
+
+if sidebar and sidebar isnt bottom
+ _sidebar-column = sidebar-column
+else
+ _sidebar-column = 0
+
+// Grids
+column-width = 80px
+gutter-width = 20px
+columns = main-column + _sidebar-column
+
+// Media queries
+mq-mobile = "screen and (max-width: 479px)"
+mq-tablet = "screen and (min-width: 480px) and (max-width: 767px)"
+mq-normal = "screen and (min-width: 768px)"
\ No newline at end of file
diff --git a/themes/landscape/source/css/fonts/FontAwesome.otf b/themes/landscape/source/css/fonts/FontAwesome.otf
new file mode 100644
index 0000000..8b0f54e
Binary files /dev/null and b/themes/landscape/source/css/fonts/FontAwesome.otf differ
diff --git a/themes/landscape/source/css/fonts/fontawesome-webfont.eot b/themes/landscape/source/css/fonts/fontawesome-webfont.eot
new file mode 100644
index 0000000..7c79c6a
Binary files /dev/null and b/themes/landscape/source/css/fonts/fontawesome-webfont.eot differ
diff --git a/themes/landscape/source/css/fonts/fontawesome-webfont.svg b/themes/landscape/source/css/fonts/fontawesome-webfont.svg
new file mode 100644
index 0000000..45fdf33
--- /dev/null
+++ b/themes/landscape/source/css/fonts/fontawesome-webfont.svg
@@ -0,0 +1,414 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/themes/landscape/source/css/fonts/fontawesome-webfont.ttf b/themes/landscape/source/css/fonts/fontawesome-webfont.ttf
new file mode 100644
index 0000000..e89738d
Binary files /dev/null and b/themes/landscape/source/css/fonts/fontawesome-webfont.ttf differ
diff --git a/themes/landscape/source/css/fonts/fontawesome-webfont.woff b/themes/landscape/source/css/fonts/fontawesome-webfont.woff
new file mode 100644
index 0000000..8c1748a
Binary files /dev/null and b/themes/landscape/source/css/fonts/fontawesome-webfont.woff differ
diff --git a/themes/landscape/source/css/images/banner.jpg b/themes/landscape/source/css/images/banner.jpg
new file mode 100644
index 0000000..b963e06
Binary files /dev/null and b/themes/landscape/source/css/images/banner.jpg differ
diff --git a/themes/landscape/source/css/style.styl b/themes/landscape/source/css/style.styl
new file mode 100644
index 0000000..c51f8e4
--- /dev/null
+++ b/themes/landscape/source/css/style.styl
@@ -0,0 +1,89 @@
+@import "nib"
+@import "_variables"
+@import "_util/mixin"
+@import "_util/grid"
+
+global-reset()
+
+input, button
+ margin: 0
+ padding: 0
+ &::-moz-focus-inner
+ border: 0
+ padding: 0
+
+@font-face
+ font-family: FontAwesome
+ font-style: normal
+ font-weight: normal
+ src: url(font-icon-path + ".eot?v=#" + font-icon-version)
+ src: url(font-icon-path + ".eot?#iefix&v=#" + font-icon-version) format("embedded-opentype"),
+ url(font-icon-path + ".woff?v=#" + font-icon-version) format("woff"),
+ url(font-icon-path + ".ttf?v=#" + font-icon-version) format("truetype"),
+ url(font-icon-path + ".svg#fontawesomeregular?v=#" + font-icon-version) format("svg")
+
+html, body, #container
+ height: 100%
+
+body
+ background: color-background
+ font: font-size font-sans
+ -webkit-text-size-adjust: 100%
+
+.outer
+ clearfix()
+ max-width: (column-width + gutter-width) * columns + gutter-width
+ margin: 0 auto
+ padding: 0 gutter-width
+
+.inner
+ column(columns)
+
+.left, .alignleft
+ float: left
+
+.right, .alignright
+ float: right
+
+.clear
+ clear: both
+
+#container
+ position: relative
+
+.mobile-nav-on
+ overflow: hidden
+
+#wrap
+ height: 100%
+ width: 100%
+ position: absolute
+ top: 0
+ left: 0
+ transition: 0.2s ease-out
+ z-index: 1
+ background: color-background
+ .mobile-nav-on &
+ left: mobile-nav-width
+
+if sidebar and sidebar isnt bottom
+ #main
+ @media mq-normal
+ column(main-column)
+
+if sidebar is left
+ @media mq-normal
+ #main
+ float: right
+
+@import "_extend"
+@import "_partial/header"
+@import "_partial/article"
+@import "_partial/comment"
+@import "_partial/archive"
+@import "_partial/footer"
+@import "_partial/highlight"
+@import "_partial/mobile"
+
+if sidebar
+ @import "_partial/sidebar"
\ No newline at end of file
diff --git a/lib/fancybox/source/blank.gif b/themes/landscape/source/fancybox/blank.gif
similarity index 100%
rename from lib/fancybox/source/blank.gif
rename to themes/landscape/source/fancybox/blank.gif
diff --git a/lib/fancybox/source/fancybox_loading.gif b/themes/landscape/source/fancybox/fancybox_loading.gif
similarity index 100%
rename from lib/fancybox/source/fancybox_loading.gif
rename to themes/landscape/source/fancybox/fancybox_loading.gif
diff --git a/lib/fancybox/source/fancybox_loading@2x.gif b/themes/landscape/source/fancybox/fancybox_loading@2x.gif
similarity index 100%
rename from lib/fancybox/source/fancybox_loading@2x.gif
rename to themes/landscape/source/fancybox/fancybox_loading@2x.gif
diff --git a/lib/fancybox/source/fancybox_overlay.png b/themes/landscape/source/fancybox/fancybox_overlay.png
similarity index 100%
rename from lib/fancybox/source/fancybox_overlay.png
rename to themes/landscape/source/fancybox/fancybox_overlay.png
diff --git a/lib/fancybox/source/fancybox_sprite.png b/themes/landscape/source/fancybox/fancybox_sprite.png
similarity index 100%
rename from lib/fancybox/source/fancybox_sprite.png
rename to themes/landscape/source/fancybox/fancybox_sprite.png
diff --git a/lib/fancybox/source/fancybox_sprite@2x.png b/themes/landscape/source/fancybox/fancybox_sprite@2x.png
similarity index 100%
rename from lib/fancybox/source/fancybox_sprite@2x.png
rename to themes/landscape/source/fancybox/fancybox_sprite@2x.png
diff --git a/lib/fancybox/source/helpers/fancybox_buttons.png b/themes/landscape/source/fancybox/helpers/fancybox_buttons.png
similarity index 100%
rename from lib/fancybox/source/helpers/fancybox_buttons.png
rename to themes/landscape/source/fancybox/helpers/fancybox_buttons.png
diff --git a/lib/fancybox/source/helpers/jquery.fancybox-buttons.css b/themes/landscape/source/fancybox/helpers/jquery.fancybox-buttons.css
similarity index 100%
rename from lib/fancybox/source/helpers/jquery.fancybox-buttons.css
rename to themes/landscape/source/fancybox/helpers/jquery.fancybox-buttons.css
diff --git a/lib/fancybox/source/helpers/jquery.fancybox-buttons.js b/themes/landscape/source/fancybox/helpers/jquery.fancybox-buttons.js
similarity index 99%
rename from lib/fancybox/source/helpers/jquery.fancybox-buttons.js
rename to themes/landscape/source/fancybox/helpers/jquery.fancybox-buttons.js
index fd8b955..352bb5f 100644
--- a/lib/fancybox/source/helpers/jquery.fancybox-buttons.js
+++ b/themes/landscape/source/fancybox/helpers/jquery.fancybox-buttons.js
@@ -13,7 +13,7 @@
* });
*
*/
-(function ($) {
+;(function ($) {
//Shortcut for fancyBox object
var F = $.fancybox;
diff --git a/lib/fancybox/source/helpers/jquery.fancybox-media.js b/themes/landscape/source/fancybox/helpers/jquery.fancybox-media.js
similarity index 99%
rename from lib/fancybox/source/helpers/jquery.fancybox-media.js
rename to themes/landscape/source/fancybox/helpers/jquery.fancybox-media.js
index 3584c8a..62737a5 100644
--- a/lib/fancybox/source/helpers/jquery.fancybox-media.js
+++ b/themes/landscape/source/fancybox/helpers/jquery.fancybox-media.js
@@ -62,7 +62,7 @@
* http://maps.google.com/?ll=48.857995,2.294297&spn=0.007666,0.021136&t=m&z=16
* http://maps.google.com/?ll=48.859463,2.292626&spn=0.000965,0.002642&t=m&z=19&layer=c&cbll=48.859524,2.292532&panoid=YJ0lq28OOy3VT2IqIuVY0g&cbp=12,151.58,,0,-15.56
*/
-(function ($) {
+;(function ($) {
"use strict";
//Shortcut for fancyBox object
diff --git a/lib/fancybox/source/helpers/jquery.fancybox-thumbs.css b/themes/landscape/source/fancybox/helpers/jquery.fancybox-thumbs.css
similarity index 100%
rename from lib/fancybox/source/helpers/jquery.fancybox-thumbs.css
rename to themes/landscape/source/fancybox/helpers/jquery.fancybox-thumbs.css
diff --git a/lib/fancybox/source/helpers/jquery.fancybox-thumbs.js b/themes/landscape/source/fancybox/helpers/jquery.fancybox-thumbs.js
similarity index 96%
rename from lib/fancybox/source/helpers/jquery.fancybox-thumbs.js
rename to themes/landscape/source/fancybox/helpers/jquery.fancybox-thumbs.js
index 5db3d4a..58c9719 100644
--- a/lib/fancybox/source/helpers/jquery.fancybox-thumbs.js
+++ b/themes/landscape/source/fancybox/helpers/jquery.fancybox-thumbs.js
@@ -14,7 +14,7 @@
* });
*
*/
-(function ($) {
+;(function ($) {
//Shortcut for fancyBox object
var F = $.fancybox;
@@ -62,7 +62,8 @@
//Load each thumbnail
$.each(obj.group, function (i) {
- var href = thumbSource( obj.group[ i ] );
+ var el = obj.group[ i ],
+ href = thumbSource( el );
if (!href) {
return;
@@ -105,7 +106,9 @@
$(this).hide().appendTo(parent).fadeIn(300);
- }).attr('src', href);
+ })
+ .attr('src', href)
+ .attr('title', el.title);
});
//Set initial width
diff --git a/lib/fancybox/source/jquery.fancybox.css b/themes/landscape/source/fancybox/jquery.fancybox.css
similarity index 92%
rename from lib/fancybox/source/jquery.fancybox.css
rename to themes/landscape/source/fancybox/jquery.fancybox.css
index 367890a..c75d051 100644
--- a/lib/fancybox/source/jquery.fancybox.css
+++ b/themes/landscape/source/fancybox/jquery.fancybox.css
@@ -76,7 +76,7 @@
}
#fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span {
- background-image: url('fancybox_sprite.png');
+ background-image: url(fancybox_sprite.png);
}
#fancybox-loading {
@@ -94,7 +94,7 @@
#fancybox-loading div {
width: 44px;
height: 44px;
- background: url('fancybox_loading.gif') center center no-repeat;
+ background: url(fancybox_loading.gif) center center no-repeat;
}
.fancybox-close {
@@ -114,7 +114,7 @@
height: 100%;
cursor: pointer;
text-decoration: none;
- background: transparent url('blank.gif'); /* helps IE */
+ background: transparent url(blank.gif); /* helps IE */
-webkit-tap-highlight-color: rgba(0,0,0,0);
z-index: 8040;
}
@@ -156,7 +156,6 @@
position: absolute;
top: -99999px;
left: -99999px;
- visibility: hidden;
max-width: 99999px;
max-height: 99999px;
overflow: visible !important;
@@ -165,7 +164,7 @@
/* Overlay helper */
.fancybox-lock {
- overflow: hidden !important;
+ overflow: visible !important;
width: auto;
}
@@ -184,7 +183,7 @@
overflow: hidden;
display: none;
z-index: 8010;
- background: url('fancybox_overlay.png');
+ background: url(fancybox_overlay.png);
}
.fancybox-overlay-fixed {
@@ -263,12 +262,12 @@
only screen and (min-device-pixel-ratio: 1.5){
#fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span {
- background-image: url('fancybox_sprite@2x.png');
+ background-image: url(fancybox_sprite@2x.png);
background-size: 44px 152px; /*The size of the normal image, half the size of the hi-res image*/
}
#fancybox-loading div {
- background-image: url('fancybox_loading@2x.gif');
+ background-image: url(fancybox_loading@2x.gif);
background-size: 24px 24px; /*The size of the normal image, half the size of the hi-res image*/
}
}
\ No newline at end of file
diff --git a/lib/fancybox/source/jquery.fancybox.js b/themes/landscape/source/fancybox/jquery.fancybox.js
similarity index 97%
rename from lib/fancybox/source/jquery.fancybox.js
rename to themes/landscape/source/fancybox/jquery.fancybox.js
index e8e1987..7a0f8ac 100644
--- a/lib/fancybox/source/jquery.fancybox.js
+++ b/themes/landscape/source/fancybox/jquery.fancybox.js
@@ -1,7 +1,7 @@
/*!
* fancyBox - jQuery Plugin
* version: 2.1.5 (Fri, 14 Jun 2013)
- * @requires jQuery v1.6 or later
+ * requires jQuery v1.6 or later
*
* Examples at http://fancyapps.com/fancybox/
* License: www.fancyapps.com/fancybox/#license
@@ -10,7 +10,7 @@
*
*/
-(function (window, document, $, undefined) {
+;(function (window, document, $, undefined) {
"use strict";
var H = $("html"),
@@ -261,7 +261,7 @@
if (isQuery(element)) {
obj = {
href : element.data('fancybox-href') || element.attr('href'),
- title : element.data('fancybox-title') || element.attr('title'),
+ title : $('
').text( element.data('fancybox-title') || element.attr('title') ).html(),
isDom : true,
element : element
};
@@ -363,12 +363,16 @@
cancel: function () {
var coming = F.coming;
- if (!coming || false === F.trigger('onCancel')) {
+ if (coming && false === F.trigger('onCancel')) {
return;
}
F.hideLoading();
+ if (!coming) {
+ return;
+ }
+
if (F.ajaxLoad) {
F.ajaxLoad.abort();
}
@@ -546,7 +550,7 @@
},
update: function (e) {
- var type = (e && e.type),
+ var type = (e && e.originalEvent && e.originalEvent.type),
anyway = !type || type === 'orientationchange';
if (anyway) {
@@ -630,6 +634,8 @@
left : (viewport.w * 0.5) + viewport.x
});
}
+
+ F.trigger('onLoading');
},
getViewport: function () {
@@ -639,7 +645,7 @@
y: W.scrollTop()
};
- if (locked) {
+ if (locked && locked.length) {
rez.w = locked[0].clientWidth;
rez.h = locked[0].clientHeight;
@@ -741,24 +747,22 @@
trigger: function (event, o) {
var ret, obj = o || F.coming || F.current;
- if (!obj) {
- return;
- }
-
- if ($.isFunction( obj[event] )) {
- ret = obj[event].apply(obj, Array.prototype.slice.call(arguments, 1));
- }
+ if (obj) {
+ if ($.isFunction( obj[event] )) {
+ ret = obj[event].apply(obj, Array.prototype.slice.call(arguments, 1));
+ }
- if (ret === false) {
- return false;
- }
+ if (ret === false) {
+ return false;
+ }
- if (obj.helpers) {
- $.each(obj.helpers, function (helper, opts) {
- if (opts && F.helpers[helper] && $.isFunction(F.helpers[helper][event])) {
- F.helpers[helper][event]($.extend(true, {}, F.helpers[helper].defaults, opts), obj);
- }
- });
+ if (obj.helpers) {
+ $.each(obj.helpers, function (helper, opts) {
+ if (opts && F.helpers[helper] && $.isFunction(F.helpers[helper][event])) {
+ F.helpers[helper][event]($.extend(true, {}, F.helpers[helper].defaults, opts), obj);
+ }
+ });
+ }
}
D.trigger(event);
@@ -1117,7 +1121,7 @@
break;
case 'image':
- content = current.tpl.image.replace('{href}', href);
+ content = current.tpl.image.replace(/\{href\}/g, href);
break;
case 'swf':
@@ -1426,7 +1430,7 @@
F.isOpen = F.isOpened = true;
- F.wrap.css('overflow', 'visible').addClass('fancybox-opened');
+ F.wrap.css('overflow', 'visible').addClass('fancybox-opened').hide().show(0);
F.update();
@@ -1465,12 +1469,13 @@
// Stop the slideshow if this is the last item
if (!current.loop && current.index === current.group.length - 1) {
+
F.play( false );
} else if (F.opts.autoPlay && !F.player.isActive) {
F.opts.autoPlay = false;
- F.play();
+ F.play(true);
}
},
@@ -1703,13 +1708,17 @@
// Public methods
create : function(opts) {
+ var parent;
+
opts = $.extend({}, this.defaults, opts);
if (this.overlay) {
this.close();
}
- this.overlay = $('
').appendTo( F.coming ? F.coming.parent : opts.parent );
+ parent = F.coming ? F.coming.parent : opts.parent;
+
+ this.overlay = $('
').appendTo( parent && parent.lenth ? parent : 'body' );
this.fixed = false;
if (opts.fixed && F.defaults.fixed) {
@@ -1755,19 +1764,14 @@
},
close : function() {
- var scrollV, scrollH;
-
W.unbind('resize.overlay');
if (this.el.hasClass('fancybox-lock')) {
$('.fancybox-margin').removeClass('fancybox-margin');
- scrollV = W.scrollTop();
- scrollH = W.scrollLeft();
-
this.el.removeClass('fancybox-lock');
- W.scrollTop( scrollV ).scrollLeft( scrollH );
+ W.scrollTop( this.scrollV ).scrollLeft( this.scrollH );
}
$('.fancybox-overlay').remove().hide();
@@ -1812,10 +1816,6 @@
}
if (opts.locked && this.fixed && obj.fixed) {
- if (!overlay) {
- this.margin = D.height() > W.height() ? $('html').css('margin-right').replace("px", "") : false;
- }
-
obj.locked = this.overlay.append( obj.wrap );
obj.fixed = false;
}
@@ -1826,23 +1826,21 @@
},
beforeShow : function(opts, obj) {
- var scrollV, scrollH;
-
- if (obj.locked) {
- if (this.margin !== false) {
+ if (obj.locked && !this.el.hasClass('fancybox-lock')) {
+ if (this.fixPosition !== false) {
$('*').filter(function(){
return ($(this).css('position') === 'fixed' && !$(this).hasClass("fancybox-overlay") && !$(this).hasClass("fancybox-wrap") );
}).addClass('fancybox-margin');
-
- this.el.addClass('fancybox-margin');
}
- scrollV = W.scrollTop();
- scrollH = W.scrollLeft();
+ this.el.addClass('fancybox-margin');
+
+ this.scrollV = W.scrollTop();
+ this.scrollH = W.scrollLeft();
this.el.addClass('fancybox-lock');
- W.scrollTop( scrollV ).scrollLeft( scrollH );
+ W.scrollTop( this.scrollV ).scrollLeft( this.scrollH );
}
this.open(opts);
@@ -1857,7 +1855,6 @@
afterClose: function (opts) {
// Remove overlay if exists and fancyBox is not opening
// (e.g., it is not being open using afterClose callback)
- //if (this.overlay && !F.isActive) {
if (this.overlay && !F.coming) {
this.overlay.fadeOut(opts.speedOut, $.proxy( this.close, this ));
}
diff --git a/themes/landscape/source/fancybox/jquery.fancybox.pack.js b/themes/landscape/source/fancybox/jquery.fancybox.pack.js
new file mode 100644
index 0000000..2db1280
--- /dev/null
+++ b/themes/landscape/source/fancybox/jquery.fancybox.pack.js
@@ -0,0 +1,46 @@
+/*! fancyBox v2.1.5 fancyapps.com | fancyapps.com/fancybox/#license */
+(function(s,H,f,w){var K=f("html"),q=f(s),p=f(H),b=f.fancybox=function(){b.open.apply(this,arguments)},J=navigator.userAgent.match(/msie/i),C=null,t=H.createTouch!==w,u=function(a){return a&&a.hasOwnProperty&&a instanceof f},r=function(a){return a&&"string"===f.type(a)},F=function(a){return r(a)&&0
',image:' ',iframe:'",error:'The requested content cannot be loaded. Please try again later.
',closeBtn:' ',next:' ',prev:' '},openEffect:"fade",openSpeed:250,openEasing:"swing",openOpacity:!0,
+openMethod:"zoomIn",closeEffect:"fade",closeSpeed:250,closeEasing:"swing",closeOpacity:!0,closeMethod:"zoomOut",nextEffect:"elastic",nextSpeed:250,nextEasing:"swing",nextMethod:"changeIn",prevEffect:"elastic",prevSpeed:250,prevEasing:"swing",prevMethod:"changeOut",helpers:{overlay:!0,title:!0},onCancel:f.noop,beforeLoad:f.noop,afterLoad:f.noop,beforeShow:f.noop,afterShow:f.noop,beforeChange:f.noop,beforeClose:f.noop,afterClose:f.noop},group:{},opts:{},previous:null,coming:null,current:null,isActive:!1,
+isOpen:!1,isOpened:!1,wrap:null,skin:null,outer:null,inner:null,player:{timer:null,isActive:!1},ajaxLoad:null,imgPreload:null,transitions:{},helpers:{},open:function(a,d){if(a&&(f.isPlainObject(d)||(d={}),!1!==b.close(!0)))return f.isArray(a)||(a=u(a)?f(a).get():[a]),f.each(a,function(e,c){var l={},g,h,k,n,m;"object"===f.type(c)&&(c.nodeType&&(c=f(c)),u(c)?(l={href:c.data("fancybox-href")||c.attr("href"),title:f("
").text(c.data("fancybox-title")||c.attr("title")).html(),isDom:!0,element:c},
+f.metadata&&f.extend(!0,l,c.metadata())):l=c);g=d.href||l.href||(r(c)?c:null);h=d.title!==w?d.title:l.title||"";n=(k=d.content||l.content)?"html":d.type||l.type;!n&&l.isDom&&(n=c.data("fancybox-type"),n||(n=(n=c.prop("class").match(/fancybox\.(\w+)/))?n[1]:null));r(g)&&(n||(b.isImage(g)?n="image":b.isSWF(g)?n="swf":"#"===g.charAt(0)?n="inline":r(c)&&(n="html",k=c)),"ajax"===n&&(m=g.split(/\s+/,2),g=m.shift(),m=m.shift()));k||("inline"===n?g?k=f(r(g)?g.replace(/.*(?=#[^\s]+$)/,""):g):l.isDom&&(k=c):
+"html"===n?k=g:n||g||!l.isDom||(n="inline",k=c));f.extend(l,{href:g,type:n,content:k,title:h,selector:m});a[e]=l}),b.opts=f.extend(!0,{},b.defaults,d),d.keys!==w&&(b.opts.keys=d.keys?f.extend({},b.defaults.keys,d.keys):!1),b.group=a,b._start(b.opts.index)},cancel:function(){var a=b.coming;a&&!1===b.trigger("onCancel")||(b.hideLoading(),a&&(b.ajaxLoad&&b.ajaxLoad.abort(),b.ajaxLoad=null,b.imgPreload&&(b.imgPreload.onload=b.imgPreload.onerror=null),a.wrap&&a.wrap.stop(!0,!0).trigger("onReset").remove(),
+b.coming=null,b.current||b._afterZoomOut(a)))},close:function(a){b.cancel();!1!==b.trigger("beforeClose")&&(b.unbindEvents(),b.isActive&&(b.isOpen&&!0!==a?(b.isOpen=b.isOpened=!1,b.isClosing=!0,f(".fancybox-item, .fancybox-nav").remove(),b.wrap.stop(!0,!0).removeClass("fancybox-opened"),b.transitions[b.current.closeMethod]()):(f(".fancybox-wrap").stop(!0).trigger("onReset").remove(),b._afterZoomOut())))},play:function(a){var d=function(){clearTimeout(b.player.timer)},e=function(){d();b.current&&b.player.isActive&&
+(b.player.timer=setTimeout(b.next,b.current.playSpeed))},c=function(){d();p.unbind(".player");b.player.isActive=!1;b.trigger("onPlayEnd")};!0===a||!b.player.isActive&&!1!==a?b.current&&(b.current.loop||b.current.index=c.index?"next":"prev"],b.router=e||"jumpto",c.loop&&(0>a&&(a=c.group.length+a%c.group.length),a%=c.group.length),c.group[a]!==w&&(b.cancel(),b._start(a)))},reposition:function(a,d){var e=b.current,c=e?e.wrap:null,l;c&&(l=b._getPosition(d),a&&"scroll"===a.type?(delete l.position,c.stop(!0,!0).animate(l,200)):(c.css(l),e.pos=f.extend({},e.dim,l)))},
+update:function(a){var d=a&&a.originalEvent&&a.originalEvent.type,e=!d||"orientationchange"===d;e&&(clearTimeout(C),C=null);b.isOpen&&!C&&(C=setTimeout(function(){var c=b.current;c&&!b.isClosing&&(b.wrap.removeClass("fancybox-tmp"),(e||"load"===d||"resize"===d&&c.autoResize)&&b._setDimension(),"scroll"===d&&c.canShrink||b.reposition(a),b.trigger("onUpdate"),C=null)},e&&!t?0:300))},toggle:function(a){b.isOpen&&(b.current.fitToView="boolean"===f.type(a)?a:!b.current.fitToView,t&&(b.wrap.removeAttr("style").addClass("fancybox-tmp"),
+b.trigger("onUpdate")),b.update())},hideLoading:function(){p.unbind(".loading");f("#fancybox-loading").remove()},showLoading:function(){var a,d;b.hideLoading();a=f('').click(b.cancel).appendTo("body");p.bind("keydown.loading",function(a){27===(a.which||a.keyCode)&&(a.preventDefault(),b.cancel())});b.defaults.fixed||(d=b.getViewport(),a.css({position:"absolute",top:0.5*d.h+d.y,left:0.5*d.w+d.x}));b.trigger("onLoading")},getViewport:function(){var a=b.current&&
+b.current.locked||!1,d={x:q.scrollLeft(),y:q.scrollTop()};a&&a.length?(d.w=a[0].clientWidth,d.h=a[0].clientHeight):(d.w=t&&s.innerWidth?s.innerWidth:q.width(),d.h=t&&s.innerHeight?s.innerHeight:q.height());return d},unbindEvents:function(){b.wrap&&u(b.wrap)&&b.wrap.unbind(".fb");p.unbind(".fb");q.unbind(".fb")},bindEvents:function(){var a=b.current,d;a&&(q.bind("orientationchange.fb"+(t?"":" resize.fb")+(a.autoCenter&&!a.locked?" scroll.fb":""),b.update),(d=a.keys)&&p.bind("keydown.fb",function(e){var c=
+e.which||e.keyCode,l=e.target||e.srcElement;if(27===c&&b.coming)return!1;e.ctrlKey||e.altKey||e.shiftKey||e.metaKey||l&&(l.type||f(l).is("[contenteditable]"))||f.each(d,function(d,l){if(1h[0].clientWidth||h[0].clientHeight&&h[0].scrollHeight>h[0].clientHeight),h=f(h).parent();0!==c&&!k&&1g||0>l)&&b.next(0>g?"up":"right"),d.preventDefault())}))},trigger:function(a,d){var e,c=d||b.coming||b.current;if(c){f.isFunction(c[a])&&(e=c[a].apply(c,Array.prototype.slice.call(arguments,1)));if(!1===e)return!1;c.helpers&&f.each(c.helpers,function(d,e){if(e&&
+b.helpers[d]&&f.isFunction(b.helpers[d][a]))b.helpers[d][a](f.extend(!0,{},b.helpers[d].defaults,e),c)})}p.trigger(a)},isImage:function(a){return r(a)&&a.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\?|#).*)?$)/i)},isSWF:function(a){return r(a)&&a.match(/\.(swf)((\?|#).*)?$/i)},_start:function(a){var d={},e,c;a=m(a);e=b.group[a]||null;if(!e)return!1;d=f.extend(!0,{},b.opts,e);e=d.margin;c=d.padding;"number"===f.type(e)&&(d.margin=[e,e,e,e]);"number"===f.type(c)&&(d.padding=[c,c,
+c,c]);d.modal&&f.extend(!0,d,{closeBtn:!1,closeClick:!1,nextClick:!1,arrows:!1,mouseWheel:!1,keys:null,helpers:{overlay:{closeClick:!1}}});d.autoSize&&(d.autoWidth=d.autoHeight=!0);"auto"===d.width&&(d.autoWidth=!0);"auto"===d.height&&(d.autoHeight=!0);d.group=b.group;d.index=a;b.coming=d;if(!1===b.trigger("beforeLoad"))b.coming=null;else{c=d.type;e=d.href;if(!c)return b.coming=null,b.current&&b.router&&"jumpto"!==b.router?(b.current.index=a,b[b.router](b.direction)):!1;b.isActive=!0;if("image"===
+c||"swf"===c)d.autoHeight=d.autoWidth=!1,d.scrolling="visible";"image"===c&&(d.aspectRatio=!0);"iframe"===c&&t&&(d.scrolling="scroll");d.wrap=f(d.tpl.wrap).addClass("fancybox-"+(t?"mobile":"desktop")+" fancybox-type-"+c+" fancybox-tmp "+d.wrapCSS).appendTo(d.parent||"body");f.extend(d,{skin:f(".fancybox-skin",d.wrap),outer:f(".fancybox-outer",d.wrap),inner:f(".fancybox-inner",d.wrap)});f.each(["Top","Right","Bottom","Left"],function(a,b){d.skin.css("padding"+b,x(d.padding[a]))});b.trigger("onReady");
+if("inline"===c||"html"===c){if(!d.content||!d.content.length)return b._error("content")}else if(!e)return b._error("href");"image"===c?b._loadImage():"ajax"===c?b._loadAjax():"iframe"===c?b._loadIframe():b._afterLoad()}},_error:function(a){f.extend(b.coming,{type:"html",autoWidth:!0,autoHeight:!0,minWidth:0,minHeight:0,scrolling:"no",hasError:a,content:b.coming.tpl.error});b._afterLoad()},_loadImage:function(){var a=b.imgPreload=new Image;a.onload=function(){this.onload=this.onerror=null;b.coming.width=
+this.width/b.opts.pixelRatio;b.coming.height=this.height/b.opts.pixelRatio;b._afterLoad()};a.onerror=function(){this.onload=this.onerror=null;b._error("image")};a.src=b.coming.href;!0!==a.complete&&b.showLoading()},_loadAjax:function(){var a=b.coming;b.showLoading();b.ajaxLoad=f.ajax(f.extend({},a.ajax,{url:a.href,error:function(a,e){b.coming&&"abort"!==e?b._error("ajax",a):b.hideLoading()},success:function(d,e){"success"===e&&(a.content=d,b._afterLoad())}}))},_loadIframe:function(){var a=b.coming,
+d=f(a.tpl.iframe.replace(/\{rnd\}/g,(new Date).getTime())).attr("scrolling",t?"auto":a.iframe.scrolling).attr("src",a.href);f(a.wrap).bind("onReset",function(){try{f(this).find("iframe").hide().attr("src","//about:blank").end().empty()}catch(a){}});a.iframe.preload&&(b.showLoading(),d.one("load",function(){f(this).data("ready",1);t||f(this).bind("load.fb",b.update);f(this).parents(".fancybox-wrap").width("100%").removeClass("fancybox-tmp").show();b._afterLoad()}));a.content=d.appendTo(a.inner);a.iframe.preload||
+b._afterLoad()},_preloadImages:function(){var a=b.group,d=b.current,e=a.length,c=d.preload?Math.min(d.preload,e-1):0,f,g;for(g=1;g<=c;g+=1)f=a[(d.index+g)%e],"image"===f.type&&f.href&&((new Image).src=f.href)},_afterLoad:function(){var a=b.coming,d=b.current,e,c,l,g,h;b.hideLoading();if(a&&!1!==b.isActive)if(!1===b.trigger("afterLoad",a,d))a.wrap.stop(!0).trigger("onReset").remove(),b.coming=null;else{d&&(b.trigger("beforeChange",d),d.wrap.stop(!0).removeClass("fancybox-opened").find(".fancybox-item, .fancybox-nav").remove());
+b.unbindEvents();e=a.content;c=a.type;l=a.scrolling;f.extend(b,{wrap:a.wrap,skin:a.skin,outer:a.outer,inner:a.inner,current:a,previous:d});g=a.href;switch(c){case "inline":case "ajax":case "html":a.selector?e=f("").html(e).find(a.selector):u(e)&&(e.data("fancybox-placeholder")||e.data("fancybox-placeholder",f('
').insertAfter(e).hide()),e=e.show().detach(),a.wrap.bind("onReset",function(){f(this).find(e).length&&e.hide().replaceAll(e.data("fancybox-placeholder")).data("fancybox-placeholder",
+!1)}));break;case "image":e=a.tpl.image.replace(/\{href\}/g,g);break;case "swf":e='
',h="",f.each(a.swf,function(a,b){e+=' ';h+=" "+a+'="'+b+'"'}),e+='"}u(e)&&e.parent().is(a.inner)||a.inner.append(e);b.trigger("beforeShow");
+a.inner.css("overflow","yes"===l?"scroll":"no"===l?"hidden":l);b._setDimension();b.reposition();b.isOpen=!1;b.coming=null;b.bindEvents();if(!b.isOpened)f(".fancybox-wrap").not(a.wrap).stop(!0).trigger("onReset").remove();else if(d.prevMethod)b.transitions[d.prevMethod]();b.transitions[b.isOpened?a.nextMethod:a.openMethod]();b._preloadImages()}},_setDimension:function(){var a=b.getViewport(),d=0,e=!1,c=!1,e=b.wrap,l=b.skin,g=b.inner,h=b.current,c=h.width,k=h.height,n=h.minWidth,v=h.minHeight,p=h.maxWidth,
+q=h.maxHeight,t=h.scrolling,r=h.scrollOutside?h.scrollbarWidth:0,y=h.margin,z=m(y[1]+y[3]),s=m(y[0]+y[2]),w,A,u,D,B,G,C,E,I;e.add(l).add(g).width("auto").height("auto").removeClass("fancybox-tmp");y=m(l.outerWidth(!0)-l.width());w=m(l.outerHeight(!0)-l.height());A=z+y;u=s+w;D=F(c)?(a.w-A)*m(c)/100:c;B=F(k)?(a.h-u)*m(k)/100:k;if("iframe"===h.type){if(I=h.content,h.autoHeight&&1===I.data("ready"))try{I[0].contentWindow.document.location&&(g.width(D).height(9999),G=I.contents().find("body"),r&&G.css("overflow-x",
+"hidden"),B=G.outerHeight(!0))}catch(H){}}else if(h.autoWidth||h.autoHeight)g.addClass("fancybox-tmp"),h.autoWidth||g.width(D),h.autoHeight||g.height(B),h.autoWidth&&(D=g.width()),h.autoHeight&&(B=g.height()),g.removeClass("fancybox-tmp");c=m(D);k=m(B);E=D/B;n=m(F(n)?m(n,"w")-A:n);p=m(F(p)?m(p,"w")-A:p);v=m(F(v)?m(v,"h")-u:v);q=m(F(q)?m(q,"h")-u:q);G=p;C=q;h.fitToView&&(p=Math.min(a.w-A,p),q=Math.min(a.h-u,q));A=a.w-z;s=a.h-s;h.aspectRatio?(c>p&&(c=p,k=m(c/E)),k>q&&(k=q,c=m(k*E)),c
A||z>s)&&c>n&&k>v&&!(19p&&(c=p,k=m(c/E)),g.width(c).height(k),e.width(c+y),a=e.width(),z=e.height();else c=Math.max(n,Math.min(c,c-(a-A))),k=Math.max(v,Math.min(k,k-(z-s)));r&&"auto"===t&&kA||z>s)&&c>n&&k>v;c=h.aspectRatio?cv&&k ').appendTo(d&&d.lenth?d:"body");this.fixed=!1;a.fixed&&b.defaults.fixed&&(this.overlay.addClass("fancybox-overlay-fixed"),this.fixed=!0)},open:function(a){var d=this;a=f.extend({},this.defaults,a);this.overlay?this.overlay.unbind(".overlay").width("auto").height("auto"):this.create(a);this.fixed||(q.bind("resize.overlay",f.proxy(this.update,this)),this.update());a.closeClick&&this.overlay.bind("click.overlay",
+function(a){if(f(a.target).hasClass("fancybox-overlay"))return b.isActive?b.close():d.close(),!1});this.overlay.css(a.css).show()},close:function(){q.unbind("resize.overlay");this.el.hasClass("fancybox-lock")&&(f(".fancybox-margin").removeClass("fancybox-margin"),this.el.removeClass("fancybox-lock"),q.scrollTop(this.scrollV).scrollLeft(this.scrollH));f(".fancybox-overlay").remove().hide();f.extend(this,{overlay:null,fixed:!1})},update:function(){var a="100%",b;this.overlay.width(a).height("100%");
+J?(b=Math.max(H.documentElement.offsetWidth,H.body.offsetWidth),p.width()>b&&(a=p.width())):p.width()>q.width()&&(a=p.width());this.overlay.width(a).height(p.height())},onReady:function(a,b){var e=this.overlay;f(".fancybox-overlay").stop(!0,!0);e||this.create(a);a.locked&&this.fixed&&b.fixed&&(b.locked=this.overlay.append(b.wrap),b.fixed=!1);!0===a.showEarly&&this.beforeShow.apply(this,arguments)},beforeShow:function(a,b){b.locked&&!this.el.hasClass("fancybox-lock")&&(!1!==this.fixPosition&&f("*").filter(function(){return"fixed"===
+f(this).css("position")&&!f(this).hasClass("fancybox-overlay")&&!f(this).hasClass("fancybox-wrap")}).addClass("fancybox-margin"),this.el.addClass("fancybox-margin"),this.scrollV=q.scrollTop(),this.scrollH=q.scrollLeft(),this.el.addClass("fancybox-lock"),q.scrollTop(this.scrollV).scrollLeft(this.scrollH));this.open(a)},onUpdate:function(){this.fixed||this.update()},afterClose:function(a){this.overlay&&!b.coming&&this.overlay.fadeOut(a.speedOut,f.proxy(this.close,this))}};b.helpers.title={defaults:{type:"float",
+position:"bottom"},beforeShow:function(a){var d=b.current,e=d.title,c=a.type;f.isFunction(e)&&(e=e.call(d.element,d));if(r(e)&&""!==f.trim(e)){d=f(''+e+"
");switch(c){case "inside":c=b.skin;break;case "outside":c=b.wrap;break;case "over":c=b.inner;break;default:c=b.skin,d.appendTo("body"),J&&d.width(d.width()),d.wrapInner(' '),b.current.margin[2]+=Math.abs(m(d.css("margin-bottom")))}d["top"===a.position?"prependTo":
+"appendTo"](c)}}};f.fn.fancybox=function(a){var d,e=f(this),c=this.selector||"",l=function(g){var h=f(this).blur(),k=d,l,m;g.ctrlKey||g.altKey||g.shiftKey||g.metaKey||h.is(".fancybox-wrap")||(l=a.groupAttr||"data-fancybox-group",m=h.attr(l),m||(l="rel",m=h.get(0)[l]),m&&""!==m&&"nofollow"!==m&&(h=c.length?f(c):e,h=h.filter("["+l+'="'+m+'"]'),k=h.index(this)),a.index=k,!1!==b.open(h,a)&&g.preventDefault())};a=a||{};d=a.index||0;c&&!1!==a.live?p.undelegate(c,"click.fb-start").delegate(c+":not('.fancybox-item, .fancybox-nav')",
+"click.fb-start",l):e.unbind("click.fb-start").bind("click.fb-start",l);this.filter("[data-fancybox-start=1]").trigger("click");return this};p.ready(function(){var a,d;f.scrollbarWidth===w&&(f.scrollbarWidth=function(){var a=f('').appendTo("body"),b=a.children(),b=b.innerWidth()-b.height(99).innerWidth();a.remove();return b});f.support.fixedPosition===w&&(f.support.fixedPosition=function(){var a=f('
').appendTo("body"),
+b=20===a[0].offsetTop||15===a[0].offsetTop;a.remove();return b}());f.extend(b.defaults,{scrollbarWidth:f.scrollbarWidth(),fixed:f.support.fixedPosition,parent:f("body")});a=f(s).width();K.addClass("fancybox-lock-test");d=f(s).width();K.removeClass("fancybox-lock-test");f("").appendTo("head")})})(window,document,jQuery);
\ No newline at end of file
diff --git a/themes/landscape/source/js/script.js b/themes/landscape/source/js/script.js
new file mode 100644
index 0000000..1e58767
--- /dev/null
+++ b/themes/landscape/source/js/script.js
@@ -0,0 +1,137 @@
+(function($){
+ // Search
+ var $searchWrap = $('#search-form-wrap'),
+ isSearchAnim = false,
+ searchAnimDuration = 200;
+
+ var startSearchAnim = function(){
+ isSearchAnim = true;
+ };
+
+ var stopSearchAnim = function(callback){
+ setTimeout(function(){
+ isSearchAnim = false;
+ callback && callback();
+ }, searchAnimDuration);
+ };
+
+ $('#nav-search-btn').on('click', function(){
+ if (isSearchAnim) return;
+
+ startSearchAnim();
+ $searchWrap.addClass('on');
+ stopSearchAnim(function(){
+ $('.search-form-input').focus();
+ });
+ });
+
+ $('.search-form-input').on('blur', function(){
+ startSearchAnim();
+ $searchWrap.removeClass('on');
+ stopSearchAnim();
+ });
+
+ // Share
+ $('body').on('click', function(){
+ $('.article-share-box.on').removeClass('on');
+ }).on('click', '.article-share-link', function(e){
+ e.stopPropagation();
+
+ var $this = $(this),
+ url = $this.attr('data-url'),
+ encodedUrl = encodeURIComponent(url),
+ id = 'article-share-box-' + $this.attr('data-id'),
+ offset = $this.offset();
+
+ if ($('#' + id).length){
+ var box = $('#' + id);
+
+ if (box.hasClass('on')){
+ box.removeClass('on');
+ return;
+ }
+ } else {
+ var html = [
+ '',
+ '
',
+ '
',
+ '
',
+ '
',
+ '
',
+ '
',
+ '
',
+ '
'
+ ].join('');
+
+ var box = $(html);
+
+ $('body').append(box);
+ }
+
+ $('.article-share-box.on').hide();
+
+ box.css({
+ top: offset.top + 25,
+ left: offset.left
+ }).addClass('on');
+ }).on('click', '.article-share-box', function(e){
+ e.stopPropagation();
+ }).on('click', '.article-share-box-input', function(){
+ $(this).select();
+ }).on('click', '.article-share-box-link', function(e){
+ e.preventDefault();
+ e.stopPropagation();
+
+ window.open(this.href, 'article-share-box-window-' + Date.now(), 'width=500,height=450');
+ });
+
+ // Caption
+ $('.article-entry').each(function(i){
+ $(this).find('img').each(function(){
+ if ($(this).parent().hasClass('fancybox')) return;
+
+ var alt = this.alt;
+
+ if (alt) $(this).after('' + alt + ' ');
+
+ $(this).wrap(' ');
+ });
+
+ $(this).find('.fancybox').each(function(){
+ $(this).attr('rel', 'article' + i);
+ });
+ });
+
+ if ($.fancybox){
+ $('.fancybox').fancybox();
+ }
+
+ // Mobile nav
+ var $container = $('#container'),
+ isMobileNavAnim = false,
+ mobileNavAnimDuration = 200;
+
+ var startMobileNavAnim = function(){
+ isMobileNavAnim = true;
+ };
+
+ var stopMobileNavAnim = function(){
+ setTimeout(function(){
+ isMobileNavAnim = false;
+ }, mobileNavAnimDuration);
+ }
+
+ $('#main-nav-toggle').on('click', function(){
+ if (isMobileNavAnim) return;
+
+ startMobileNavAnim();
+ $container.toggleClass('mobile-nav-on');
+ stopMobileNavAnim();
+ });
+
+ $('#wrap').on('click', function(){
+ if (isMobileNavAnim || !$container.hasClass('mobile-nav-on')) return;
+
+ $container.removeClass('mobile-nav-on');
+ });
+})(jQuery);
\ No newline at end of file
diff --git a/themes/next b/themes/next
new file mode 160000
index 0000000..620b1e8
--- /dev/null
+++ b/themes/next
@@ -0,0 +1 @@
+Subproject commit 620b1e829eb8b6fd72426f3009866b79d8ee2e7b