Commit ef31c684 authored by Van's avatar Van

🐛 #comment 为动态评论时无法定位

parent 1f4f3d0f
...@@ -51,7 +51,7 @@ ...@@ -51,7 +51,7 @@
  |     |  
<span class="vditor-tooltipped vditor-tooltipped__n" aria-label="${commentCountLabel}"> <span class="vditor-tooltipped vditor-tooltipped__n" aria-label="${commentCountLabel}">
<i class="icon-comments"></i> <i class="icon-comments"></i>
<a href="${servePath}${article.articlePermalink}#comments"> <a href="${servePath}${article.articlePermalink}#b3logsolocomments">
<span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span> ${commentLabel}</a> <span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span> ${commentLabel}</a>
</span> </span>
</#if> </#if>
......
...@@ -63,7 +63,7 @@ ...@@ -63,7 +63,7 @@
&nbsp; | &nbsp; &nbsp; | &nbsp;
<span class="vditor-tooltipped vditor-tooltipped__n" aria-label="${commentCountLabel}"> <span class="vditor-tooltipped vditor-tooltipped__n" aria-label="${commentCountLabel}">
<i class="icon-comments"></i> <i class="icon-comments"></i>
<a href="${servePath}${article.articlePermalink}#comments"> <a href="${servePath}${article.articlePermalink}#b3logsolocomments">
<span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span> ${commentLabel}</a> <span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span> ${commentLabel}</a>
</span> </span>
</#if> </#if>
...@@ -109,6 +109,7 @@ ...@@ -109,6 +109,7 @@
</div> </div>
</footer> </footer>
<#if commentable> <#if commentable>
<div id="b3logsolocomments"></div>
<div id="vcomment" data-name="${article.authorName}" data-postId="${article.oId}"></div> <div id="vcomment" data-name="${article.authorName}" data-postId="${article.oId}"></div>
<#if !staticSite> <#if !staticSite>
<div id="soloComments" class="fn__none"> <div id="soloComments" class="fn__none">
......
...@@ -49,7 +49,7 @@ ...@@ -49,7 +49,7 @@
${article.authorName}</a> ${article.authorName}</a>
<#if commentable> <#if commentable>
| |
<a rel="nofollow" class="underline" href="${servePath}${article.articlePermalink}#comments"> <a rel="nofollow" class="underline" href="${servePath}${article.articlePermalink}#b3logsolocomments">
<span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span> ${commentLabel} <span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span> ${commentLabel}
</a> </a>
</#if> </#if>
......
...@@ -63,7 +63,7 @@ ...@@ -63,7 +63,7 @@
${article.authorName}</a> ${article.authorName}</a>
<#if commentable> <#if commentable>
| |
<a rel="nofollow" href="${servePath}${article.articlePermalink}#comments"> <a rel="nofollow" href="${servePath}${article.articlePermalink}#b3logsolocomments">
<span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span> ${commentLabel} <span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span> ${commentLabel}
</a> </a>
</#if> </#if>
...@@ -105,6 +105,7 @@ ...@@ -105,6 +105,7 @@
<div id="externalRelevantArticles" class="article-relative"></div> <div id="externalRelevantArticles" class="article-relative"></div>
</div> </div>
<#if commentable> <#if commentable>
<div id="b3logsolocomments"></div>
<div id="vcomment" <div id="vcomment"
style="border-top: 2px solid #3F3D36;margin-top: 30px;padding-top: 27px; padding-bottom: 30px;" style="border-top: 2px solid #3F3D36;margin-top: 30px;padding-top: 27px; padding-bottom: 30px;"
data-name="${article.authorName}" data-postId="${article.oId}"></div> data-name="${article.authorName}" data-postId="${article.oId}"></div>
......
...@@ -74,6 +74,7 @@ ...@@ -74,6 +74,7 @@
</div> </div>
</div> </div>
<#if commentable> <#if commentable>
<div id="b3logsolocomments"></div>
<div id="vcomment" data-name="${article.authorName}" data-postId="${article.oId}"></div> <div id="vcomment" data-name="${article.authorName}" data-postId="${article.oId}"></div>
<#if !staticSite> <#if !staticSite>
<div id="soloComments" style="display: none;"> <div id="soloComments" style="display: none;">
......
...@@ -1386,7 +1386,6 @@ pre { ...@@ -1386,7 +1386,6 @@ pre {
word-break: break-all; word-break: break-all;
word-wrap: break-word; word-wrap: break-word;
background-color: #f5f5f5; background-color: #f5f5f5;
border: 1px solid #ccc;
border-radius: 4px; border-radius: 4px;
} }
pre code { pre code {
......
...@@ -1385,7 +1385,6 @@ pre { ...@@ -1385,7 +1385,6 @@ pre {
word-break: break-all; word-break: break-all;
word-wrap: break-word; word-wrap: break-word;
background-color: #f5f5f5; background-color: #f5f5f5;
border: 1px solid #ccc;
border-radius: 4px; } border-radius: 4px; }
pre code { pre code {
......
if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");!function(t){"use strict";t.fn.emulateTransitionEnd=function(e){var i=!1,o=this;t(this).one("bsTransitionEnd",(function(){i=!0}));return setTimeout((function(){i||t(o).trigger(t.support.transition.end)}),e),this},t((function(){t.support.transition=function(){var t=document.createElement("bootstrap"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var i in e)if(void 0!==t.style[i])return{end:e[i]};return!1}(),t.support.transition&&(t.event.special.bsTransitionEnd={bindType:t.support.transition.end,delegateType:t.support.transition.end,handle:function(e){if(t(e.target).is(this))return e.handleObj.handler.apply(this,arguments)}})}))}(jQuery),function(t){"use strict";var e='[data-dismiss="alert"]',i=function(i){t(i).on("click",e,this.close)};i.VERSION="3.2.0",i.prototype.close=function(e){var i=t(this),o=i.attr("data-target");o||(o=(o=i.attr("href"))&&o.replace(/.*(?=#[^\s]*$)/,""));var s=t(o);function n(){s.detach().trigger("closed.bs.alert").remove()}e&&e.preventDefault(),s.length||(s=i.hasClass("alert")?i:i.parent()),s.trigger(e=t.Event("close.bs.alert")),e.isDefaultPrevented()||(s.removeClass("in"),t.support.transition&&s.hasClass("fade")?s.one("bsTransitionEnd",n).emulateTransitionEnd(150):n())};var o=t.fn.alert;t.fn.alert=function(e){return this.each((function(){var o=t(this),s=o.data("bs.alert");s||o.data("bs.alert",s=new i(this)),"string"==typeof e&&s[e].call(o)}))},t.fn.alert.Constructor=i,t.fn.alert.noConflict=function(){return t.fn.alert=o,this},t(document).on("click.bs.alert.data-api",e,i.prototype.close)}(jQuery),function(t){"use strict";var e=function(i,o){this.$element=t(i),this.options=t.extend({},e.DEFAULTS,o),this.isLoading=!1};function i(i){return this.each((function(){var o=t(this),s=o.data("bs.button"),n="object"==typeof i&&i;s||o.data("bs.button",s=new e(this,n)),"toggle"==i?s.toggle():i&&s.setState(i)}))}e.VERSION="3.2.0",e.DEFAULTS={loadingText:"loading..."},e.prototype.setState=function(e){var i="disabled",o=this.$element,s=o.is("input")?"val":"html",n=o.data();e+="Text",null==n.resetText&&o.data("resetText",o[s]()),o[s](null==n[e]?this.options[e]:n[e]),setTimeout(t.proxy((function(){"loadingText"==e?(this.isLoading=!0,o.addClass(i).attr(i,i)):this.isLoading&&(this.isLoading=!1,o.removeClass(i).removeAttr(i))}),this),0)},e.prototype.toggle=function(){var t=!0,e=this.$element.closest('[data-toggle="buttons"]');if(e.length){var i=this.$element.find("input");"radio"==i.prop("type")&&(i.prop("checked")&&this.$element.hasClass("active")?t=!1:e.find(".active").removeClass("active")),t&&i.prop("checked",!this.$element.hasClass("active")).trigger("change")}t&&this.$element.toggleClass("active")};var o=t.fn.button;t.fn.button=i,t.fn.button.Constructor=e,t.fn.button.noConflict=function(){return t.fn.button=o,this},t(document).on("click.bs.button.data-api",'[data-toggle^="button"]',(function(e){var o=t(e.target);o.hasClass("btn")||(o=o.closest(".btn")),i.call(o,"toggle"),e.preventDefault()}))}(jQuery),function(t){"use strict";var e=function(e,i){this.$element=t(e).on("keydown.bs.carousel",t.proxy(this.keydown,this)),this.$indicators=this.$element.find(".carousel-indicators"),this.options=i,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter.bs.carousel",t.proxy(this.pause,this)).on("mouseleave.bs.carousel",t.proxy(this.cycle,this))};function i(i){return this.each((function(){var o=t(this),s=o.data("bs.carousel"),n=t.extend({},e.DEFAULTS,o.data(),"object"==typeof i&&i),r="string"==typeof i?i:n.slide;s||o.data("bs.carousel",s=new e(this,n)),"number"==typeof i?s.to(i):r?s[r]():n.interval&&s.pause().cycle()}))}e.VERSION="3.2.0",e.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},e.prototype.keydown=function(t){switch(t.which){case 37:this.prev();break;case 39:this.next();break;default:return}t.preventDefault()},e.prototype.cycle=function(e){return e||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(t.proxy(this.next,this),this.options.interval)),this},e.prototype.getItemIndex=function(t){return this.$items=t.parent().children(".item"),this.$items.index(t||this.$active)},e.prototype.to=function(e){var i=this,o=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(e>this.$items.length-1||e<0))return this.sliding?this.$element.one("slid.bs.carousel",(function(){i.to(e)})):o==e?this.pause().cycle():this.slide(e>o?"next":"prev",t(this.$items[e]))},e.prototype.pause=function(e){return e||(this.paused=!0),this.$element.find(".next, .prev").length&&t.support.transition&&(this.$element.trigger(t.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},e.prototype.next=function(){if(!this.sliding)return this.slide("next")},e.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},e.prototype.slide=function(e,i){var o=this.$element.find(".item.active"),s=i||o[e](),n=this.interval,r="next"==e?"left":"right",a="next"==e?"first":"last",l=this;if(!s.length){if(!this.options.wrap)return;s=this.$element.find(".item")[a]()}if(s.hasClass("active"))return this.sliding=!1;var h=s[0],p=t.Event("slide.bs.carousel",{relatedTarget:h,direction:r});if(this.$element.trigger(p),!p.isDefaultPrevented()){if(this.sliding=!0,n&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var c=t(this.$indicators.children()[this.getItemIndex(s)]);c&&c.addClass("active")}var d=t.Event("slid.bs.carousel",{relatedTarget:h,direction:r});return t.support.transition&&this.$element.hasClass("slide")?(s.addClass(e),s[0].offsetWidth,o.addClass(r),s.addClass(r),o.one("bsTransitionEnd",(function(){s.removeClass([e,r].join(" ")).addClass("active"),o.removeClass(["active",r].join(" ")),l.sliding=!1,setTimeout((function(){l.$element.trigger(d)}),0)})).emulateTransitionEnd(1e3*o.css("transition-duration").slice(0,-1))):(o.removeClass("active"),s.addClass("active"),this.sliding=!1,this.$element.trigger(d)),n&&this.cycle(),this}};var o=t.fn.carousel;t.fn.carousel=i,t.fn.carousel.Constructor=e,t.fn.carousel.noConflict=function(){return t.fn.carousel=o,this},t(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",(function(e){var o,s=t(this),n=t(s.attr("data-target")||(o=s.attr("href"))&&o.replace(/.*(?=#[^\s]+$)/,""));if(n.hasClass("carousel")){var r=t.extend({},n.data(),s.data()),a=s.attr("data-slide-to");a&&(r.interval=!1),i.call(n,r),a&&n.data("bs.carousel").to(a),e.preventDefault()}})),t(window).on("load",(function(){t('[data-ride="carousel"]').each((function(){var e=t(this);i.call(e,e.data())}))}))}(jQuery),function(t){"use strict";var e=function(i,o){this.$element=t(i),this.options=t.extend({},e.DEFAULTS,o),this.transitioning=null,this.options.parent&&(this.$parent=t(this.options.parent)),this.options.toggle&&this.toggle()};function i(i){return this.each((function(){var o=t(this),s=o.data("bs.collapse"),n=t.extend({},e.DEFAULTS,o.data(),"object"==typeof i&&i);!s&&n.toggle&&"show"==i&&(i=!i),s||o.data("bs.collapse",s=new e(this,n)),"string"==typeof i&&s[i]()}))}e.VERSION="3.2.0",e.DEFAULTS={toggle:!0},e.prototype.dimension=function(){return this.$element.hasClass("width")?"width":"height"},e.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var e=t.Event("show.bs.collapse");if(this.$element.trigger(e),!e.isDefaultPrevented()){var o=this.$parent&&this.$parent.find("> .panel > .in");if(o&&o.length){var s=o.data("bs.collapse");if(s&&s.transitioning)return;i.call(o,"hide"),s||o.data("bs.collapse",null)}var n=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[n](0),this.transitioning=1;var r=function(){this.$element.removeClass("collapsing").addClass("collapse in")[n](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!t.support.transition)return r.call(this);var a=t.camelCase(["scroll",n].join("-"));this.$element.one("bsTransitionEnd",t.proxy(r,this)).emulateTransitionEnd(350)[n](this.$element[0][a])}}},e.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var e=t.Event("hide.bs.collapse");if(this.$element.trigger(e),!e.isDefaultPrevented()){var i=this.dimension();this.$element[i](this.$element[i]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var o=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};if(!t.support.transition)return o.call(this);this.$element[i](0).one("bsTransitionEnd",t.proxy(o,this)).emulateTransitionEnd(350)}}},e.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var o=t.fn.collapse;t.fn.collapse=i,t.fn.collapse.Constructor=e,t.fn.collapse.noConflict=function(){return t.fn.collapse=o,this},t(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',(function(e){var o,s=t(this),n=s.attr("data-target")||e.preventDefault()||(o=s.attr("href"))&&o.replace(/.*(?=#[^\s]+$)/,""),r=t(n),a=r.data("bs.collapse"),l=a?"toggle":s.data(),h=s.attr("data-parent"),p=h&&t(h);a&&a.transitioning||(p&&p.find('[data-toggle="collapse"][data-parent="'+h+'"]').not(s).addClass("collapsed"),s[r.hasClass("in")?"addClass":"removeClass"]("collapsed")),i.call(r,l)}))}(jQuery),function(t){"use strict";var e=".dropdown-backdrop",i='[data-toggle="dropdown"]',o=function(e){t(e).on("click.bs.dropdown",this.toggle)};function s(o){o&&3===o.which||(t(e).remove(),t(i).each((function(){var e=n(t(this)),i={relatedTarget:this};e.hasClass("open")&&(e.trigger(o=t.Event("hide.bs.dropdown",i)),o.isDefaultPrevented()||e.removeClass("open").trigger("hidden.bs.dropdown",i))})))}function n(e){var i=e.attr("data-target");i||(i=(i=e.attr("href"))&&/#[A-Za-z]/.test(i)&&i.replace(/.*(?=#[^\s]*$)/,""));var o=i&&t(i);return o&&o.length?o:e.parent()}o.VERSION="3.2.0",o.prototype.toggle=function(e){var i=t(this);if(!i.is(".disabled, :disabled")){var o=n(i),r=o.hasClass("open");if(s(),!r){"ontouchstart"in document.documentElement&&!o.closest(".navbar-nav").length&&t('<div class="dropdown-backdrop"/>').insertAfter(t(this)).on("click",s);var a={relatedTarget:this};if(o.trigger(e=t.Event("show.bs.dropdown",a)),e.isDefaultPrevented())return;i.trigger("focus"),o.toggleClass("open").trigger("shown.bs.dropdown",a)}return!1}},o.prototype.keydown=function(e){if(/(38|40|27)/.test(e.keyCode)){var o=t(this);if(e.preventDefault(),e.stopPropagation(),!o.is(".disabled, :disabled")){var s=n(o),r=s.hasClass("open");if(!r||r&&27==e.keyCode)return 27==e.which&&s.find(i).trigger("focus"),o.trigger("click");var a=" li:not(.divider):visible a",l=s.find('[role="menu"]'+a+', [role="listbox"]'+a);if(l.length){var h=l.index(l.filter(":focus"));38==e.keyCode&&h>0&&h--,40==e.keyCode&&h<l.length-1&&h++,~h||(h=0),l.eq(h).trigger("focus")}}}};var r=t.fn.dropdown;t.fn.dropdown=function(e){return this.each((function(){var i=t(this),s=i.data("bs.dropdown");s||i.data("bs.dropdown",s=new o(this)),"string"==typeof e&&s[e].call(i)}))},t.fn.dropdown.Constructor=o,t.fn.dropdown.noConflict=function(){return t.fn.dropdown=r,this},t(document).on("click.bs.dropdown.data-api",s).on("click.bs.dropdown.data-api",".dropdown form",(function(t){t.stopPropagation()})).on("click.bs.dropdown.data-api",i,o.prototype.toggle).on("keydown.bs.dropdown.data-api",i+', [role="menu"], [role="listbox"]',o.prototype.keydown)}(jQuery),function(t){"use strict";var e=function(e,i){this.options=i,this.$body=t(document.body),this.$element=t(e),this.$backdrop=this.isShown=null,this.scrollbarWidth=0,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,t.proxy((function(){this.$element.trigger("loaded.bs.modal")}),this))};function i(i,o){return this.each((function(){var s=t(this),n=s.data("bs.modal"),r=t.extend({},e.DEFAULTS,s.data(),"object"==typeof i&&i);n||s.data("bs.modal",n=new e(this,r)),"string"==typeof i?n[i](o):r.show&&n.show(o)}))}e.VERSION="3.2.0",e.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},e.prototype.toggle=function(t){return this.isShown?this.hide():this.show(t)},e.prototype.show=function(e){var i=this,o=t.Event("show.bs.modal",{relatedTarget:e});this.$element.trigger(o),this.isShown||o.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.$body.addClass("modal-open"),this.setScrollbar(),this.escape(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',t.proxy(this.hide,this)),this.backdrop((function(){var o=t.support.transition&&i.$element.hasClass("fade");i.$element.parent().length||i.$element.appendTo(i.$body),i.$element.show().scrollTop(0),o&&i.$element[0].offsetWidth,i.$element.addClass("in").attr("aria-hidden",!1),i.enforceFocus();var s=t.Event("shown.bs.modal",{relatedTarget:e});o?i.$element.find(".modal-dialog").one("bsTransitionEnd",(function(){i.$element.trigger("focus").trigger(s)})).emulateTransitionEnd(300):i.$element.trigger("focus").trigger(s)})))},e.prototype.hide=function(e){e&&e.preventDefault(),e=t.Event("hide.bs.modal"),this.$element.trigger(e),this.isShown&&!e.isDefaultPrevented()&&(this.isShown=!1,this.$body.removeClass("modal-open"),this.resetScrollbar(),this.escape(),t(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),t.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",t.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal())},e.prototype.enforceFocus=function(){t(document).off("focusin.bs.modal").on("focusin.bs.modal",t.proxy((function(t){this.$element[0]===t.target||this.$element.has(t.target).length||this.$element.trigger("focus")}),this))},e.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",t.proxy((function(t){27==t.which&&this.hide()}),this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},e.prototype.hideModal=function(){var t=this;this.$element.hide(),this.backdrop((function(){t.$element.trigger("hidden.bs.modal")}))},e.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},e.prototype.backdrop=function(e){var i=this,o=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var s=t.support.transition&&o;if(this.$backdrop=t('<div class="modal-backdrop '+o+'" />').appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",t.proxy((function(t){t.target===t.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))}),this)),s&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!e)return;s?this.$backdrop.one("bsTransitionEnd",e).emulateTransitionEnd(150):e()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var n=function(){i.removeBackdrop(),e&&e()};t.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",n).emulateTransitionEnd(150):n()}else e&&e()},e.prototype.checkScrollbar=function(){document.body.clientWidth>=window.innerWidth||(this.scrollbarWidth=this.scrollbarWidth||this.measureScrollbar())},e.prototype.setScrollbar=function(){var t=parseInt(this.$body.css("padding-right")||0,10);this.scrollbarWidth&&this.$body.css("padding-right",t+this.scrollbarWidth)},e.prototype.resetScrollbar=function(){this.$body.css("padding-right","")},e.prototype.measureScrollbar=function(){var t=document.createElement("div");t.className="modal-scrollbar-measure",this.$body.append(t);var e=t.offsetWidth-t.clientWidth;return this.$body[0].removeChild(t),e};var o=t.fn.modal;t.fn.modal=i,t.fn.modal.Constructor=e,t.fn.modal.noConflict=function(){return t.fn.modal=o,this},t(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',(function(e){var o=t(this),s=o.attr("href"),n=t(o.attr("data-target")||s&&s.replace(/.*(?=#[^\s]+$)/,"")),r=n.data("bs.modal")?"toggle":t.extend({remote:!/#/.test(s)&&s},n.data(),o.data());o.is("a")&&e.preventDefault(),n.one("show.bs.modal",(function(t){t.isDefaultPrevented()||n.one("hidden.bs.modal",(function(){o.is(":visible")&&o.trigger("focus")}))})),i.call(n,r,this)}))}(jQuery),function(t){"use strict";var e=function(t,e){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",t,e)};e.VERSION="3.2.0",e.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},e.prototype.init=function(e,i,o){this.enabled=!0,this.type=e,this.$element=t(i),this.options=this.getOptions(o),this.$viewport=this.options.viewport&&t(this.options.viewport.selector||this.options.viewport);for(var s=this.options.trigger.split(" "),n=s.length;n--;){var r=s[n];if("click"==r)this.$element.on("click."+this.type,this.options.selector,t.proxy(this.toggle,this));else if("manual"!=r){var a="hover"==r?"mouseenter":"focusin",l="hover"==r?"mouseleave":"focusout";this.$element.on(a+"."+this.type,this.options.selector,t.proxy(this.enter,this)),this.$element.on(l+"."+this.type,this.options.selector,t.proxy(this.leave,this))}}this.options.selector?this._options=t.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},e.prototype.getDefaults=function(){return e.DEFAULTS},e.prototype.getOptions=function(e){return(e=t.extend({},this.getDefaults(),this.$element.data(),e)).delay&&"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),e},e.prototype.getDelegateOptions=function(){var e={},i=this.getDefaults();return this._options&&t.each(this._options,(function(t,o){i[t]!=o&&(e[t]=o)})),e},e.prototype.enter=function(e){var i=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);if(i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i)),clearTimeout(i.timeout),i.hoverState="in",!i.options.delay||!i.options.delay.show)return i.show();i.timeout=setTimeout((function(){"in"==i.hoverState&&i.show()}),i.options.delay.show)},e.prototype.leave=function(e){var i=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);if(i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i)),clearTimeout(i.timeout),i.hoverState="out",!i.options.delay||!i.options.delay.hide)return i.hide();i.timeout=setTimeout((function(){"out"==i.hoverState&&i.hide()}),i.options.delay.hide)},e.prototype.show=function(){var e=t.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(e);var i=t.contains(document.documentElement,this.$element[0]);if(e.isDefaultPrevented()||!i)return;var o=this,s=this.tip(),n=this.getUID(this.type);this.setContent(),s.attr("id",n),this.$element.attr("aria-describedby",n),this.options.animation&&s.addClass("fade");var r="function"==typeof this.options.placement?this.options.placement.call(this,s[0],this.$element[0]):this.options.placement,a=/\s?auto?\s?/i,l=a.test(r);l&&(r=r.replace(a,"")||"top"),s.detach().css({top:0,left:0,display:"block"}).addClass(r).data("bs."+this.type,this),this.options.container?s.appendTo(this.options.container):s.insertAfter(this.$element);var h=this.getPosition(),p=s[0].offsetWidth,c=s[0].offsetHeight;if(l){var d=r,f=this.$element.parent(),u=this.getPosition(f);r="bottom"==r&&h.top+h.height+c-u.scroll>u.height?"top":"top"==r&&h.top-u.scroll-c<0?"bottom":"right"==r&&h.right+p>u.width?"left":"left"==r&&h.left-p<u.left?"right":r,s.removeClass(d).addClass(r)}var g=this.getCalculatedOffset(r,h,p,c);this.applyPlacement(g,r);var v=function(){o.$element.trigger("shown.bs."+o.type),o.hoverState=null};t.support.transition&&this.$tip.hasClass("fade")?s.one("bsTransitionEnd",v).emulateTransitionEnd(150):v()}},e.prototype.applyPlacement=function(e,i){var o=this.tip(),s=o[0].offsetWidth,n=o[0].offsetHeight,r=parseInt(o.css("margin-top"),10),a=parseInt(o.css("margin-left"),10);isNaN(r)&&(r=0),isNaN(a)&&(a=0),e.top=e.top+r,e.left=e.left+a,t.offset.setOffset(o[0],t.extend({using:function(t){o.css({top:Math.round(t.top),left:Math.round(t.left)})}},e),0),o.addClass("in");var l=o[0].offsetWidth,h=o[0].offsetHeight;"top"==i&&h!=n&&(e.top=e.top+n-h);var p=this.getViewportAdjustedDelta(i,e,l,h);p.left?e.left+=p.left:e.top+=p.top;var c=p.left?2*p.left-s+l:2*p.top-n+h,d=p.left?"left":"top",f=p.left?"offsetWidth":"offsetHeight";o.offset(e),this.replaceArrow(c,o[0][f],d)},e.prototype.replaceArrow=function(t,e,i){this.arrow().css(i,t?50*(1-t/e)+"%":"")},e.prototype.setContent=function(){var t=this.tip(),e=this.getTitle();t.find(".tooltip-inner")[this.options.html?"html":"text"](e),t.removeClass("fade in top bottom left right")},e.prototype.hide=function(){var e=this,i=this.tip(),o=t.Event("hide.bs."+this.type);function s(){"in"!=e.hoverState&&i.detach(),e.$element.trigger("hidden.bs."+e.type)}if(this.$element.removeAttr("aria-describedby"),this.$element.trigger(o),!o.isDefaultPrevented())return i.removeClass("in"),t.support.transition&&this.$tip.hasClass("fade")?i.one("bsTransitionEnd",s).emulateTransitionEnd(150):s(),this.hoverState=null,this},e.prototype.fixTitle=function(){var t=this.$element;(t.attr("title")||"string"!=typeof t.attr("data-original-title"))&&t.attr("data-original-title",t.attr("title")||"").attr("title","")},e.prototype.hasContent=function(){return this.getTitle()},e.prototype.getPosition=function(e){var i=(e=e||this.$element)[0],o="BODY"==i.tagName;return t.extend({},"function"==typeof i.getBoundingClientRect?i.getBoundingClientRect():null,{scroll:o?document.documentElement.scrollTop||document.body.scrollTop:e.scrollTop(),width:o?t(window).width():e.outerWidth(),height:o?t(window).height():e.outerHeight()},o?{top:0,left:0}:e.offset())},e.prototype.getCalculatedOffset=function(t,e,i,o){return"bottom"==t?{top:e.top+e.height,left:e.left+e.width/2-i/2}:"top"==t?{top:e.top-o,left:e.left+e.width/2-i/2}:"left"==t?{top:e.top+e.height/2-o/2,left:e.left-i}:{top:e.top+e.height/2-o/2,left:e.left+e.width}},e.prototype.getViewportAdjustedDelta=function(t,e,i,o){var s={top:0,left:0};if(!this.$viewport)return s;var n=this.options.viewport&&this.options.viewport.padding||0,r=this.getPosition(this.$viewport);if(/right|left/.test(t)){var a=e.top-n-r.scroll,l=e.top+n-r.scroll+o;a<r.top?s.top=r.top-a:l>r.top+r.height&&(s.top=r.top+r.height-l)}else{var h=e.left-n,p=e.left+n+i;h<r.left?s.left=r.left-h:p>r.width&&(s.left=r.left+r.width-p)}return s},e.prototype.getTitle=function(){var t=this.$element,e=this.options;return t.attr("data-original-title")||("function"==typeof e.title?e.title.call(t[0]):e.title)},e.prototype.getUID=function(t){do{t+=~~(1e6*Math.random())}while(document.getElementById(t));return t},e.prototype.tip=function(){return this.$tip=this.$tip||t(this.options.template)},e.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},e.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},e.prototype.enable=function(){this.enabled=!0},e.prototype.disable=function(){this.enabled=!1},e.prototype.toggleEnabled=function(){this.enabled=!this.enabled},e.prototype.toggle=function(e){var i=this;e&&((i=t(e.currentTarget).data("bs."+this.type))||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i))),i.tip().hasClass("in")?i.leave(i):i.enter(i)},e.prototype.destroy=function(){clearTimeout(this.timeout),this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var i=t.fn.tooltip;t.fn.tooltip=function(i){return this.each((function(){var o=t(this),s=o.data("bs.tooltip"),n="object"==typeof i&&i;(s||"destroy"!=i)&&(s||o.data("bs.tooltip",s=new e(this,n)),"string"==typeof i&&s[i]())}))},t.fn.tooltip.Constructor=e,t.fn.tooltip.noConflict=function(){return t.fn.tooltip=i,this}}(jQuery),function(t){"use strict";var e=function(t,e){this.init("popover",t,e)};if(!t.fn.tooltip)throw new Error("Popover requires tooltip.js");e.VERSION="3.2.0",e.DEFAULTS=t.extend({},t.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),e.prototype=t.extend({},t.fn.tooltip.Constructor.prototype),e.prototype.constructor=e,e.prototype.getDefaults=function(){return e.DEFAULTS},e.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),i=this.getContent();t.find(".popover-title")[this.options.html?"html":"text"](e),t.find(".popover-content").empty()[this.options.html?"string"==typeof i?"html":"append":"text"](i),t.removeClass("fade top bottom left right in"),t.find(".popover-title").html()||t.find(".popover-title").hide()},e.prototype.hasContent=function(){return this.getTitle()||this.getContent()},e.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr("data-content")||("function"==typeof e.content?e.content.call(t[0]):e.content)},e.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},e.prototype.tip=function(){return this.$tip||(this.$tip=t(this.options.template)),this.$tip};var i=t.fn.popover;t.fn.popover=function(i){return this.each((function(){var o=t(this),s=o.data("bs.popover"),n="object"==typeof i&&i;(s||"destroy"!=i)&&(s||o.data("bs.popover",s=new e(this,n)),"string"==typeof i&&s[i]())}))},t.fn.popover.Constructor=e,t.fn.popover.noConflict=function(){return t.fn.popover=i,this}}(jQuery),function(t){"use strict";function e(i,o){var s=t.proxy(this.process,this);this.$body=t("body"),this.$scrollElement=t(i).is("body")?t(window):t(i),this.options=t.extend({},e.DEFAULTS,o),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",s),this.refresh(),this.process()}function i(i){return this.each((function(){var o=t(this),s=o.data("bs.scrollspy"),n="object"==typeof i&&i;s||o.data("bs.scrollspy",s=new e(this,n)),"string"==typeof i&&s[i]()}))}e.VERSION="3.2.0",e.DEFAULTS={offset:10},e.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},e.prototype.refresh=function(){var e="offset",i=0;t.isWindow(this.$scrollElement[0])||(e="position",i=this.$scrollElement.scrollTop()),this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight();var o=this;this.$body.find(this.selector).map((function(){var o=t(this),s=o.data("target")||o.attr("href"),n=/^#./.test(s)&&t(s);return n&&n.length&&n.is(":visible")&&[[n[e]().top+i,s]]||null})).sort((function(t,e){return t[0]-e[0]})).each((function(){o.offsets.push(this[0]),o.targets.push(this[1])}))},e.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,i=this.getScrollHeight(),o=this.options.offset+i-this.$scrollElement.height(),s=this.offsets,n=this.targets,r=this.activeTarget;if(this.scrollHeight!=i&&this.refresh(),e>=o)return r!=(t=n[n.length-1])&&this.activate(t);if(r&&e<=s[0])return r!=(t=n[0])&&this.activate(t);for(t=s.length;t--;)r!=n[t]&&e>=s[t]&&(!s[t+1]||e<=s[t+1])&&this.activate(n[t])},e.prototype.activate=function(e){this.activeTarget=e,t(this.selector).parentsUntil(this.options.target,".active").removeClass("active");var i=this.selector+'[data-target="'+e+'"],'+this.selector+'[href="'+e+'"]',o=t(i).parents("li").addClass("active");o.parent(".dropdown-menu").length&&(o=o.closest("li.dropdown").addClass("active")),o.trigger("activate.bs.scrollspy")};var o=t.fn.scrollspy;t.fn.scrollspy=i,t.fn.scrollspy.Constructor=e,t.fn.scrollspy.noConflict=function(){return t.fn.scrollspy=o,this},t(window).on("load.bs.scrollspy.data-api",(function(){t('[data-spy="scroll"]').each((function(){var e=t(this);i.call(e,e.data())}))}))}(jQuery),function(t){"use strict";var e=function(e){this.element=t(e)};function i(i){return this.each((function(){var o=t(this),s=o.data("bs.tab");s||o.data("bs.tab",s=new e(this)),"string"==typeof i&&s[i]()}))}e.VERSION="3.2.0",e.prototype.show=function(){var e=this.element,i=e.closest("ul:not(.dropdown-menu)"),o=e.data("target");if(o||(o=(o=e.attr("href"))&&o.replace(/.*(?=#[^\s]*$)/,"")),!e.parent("li").hasClass("active")){var s=i.find(".active:last a")[0],n=t.Event("show.bs.tab",{relatedTarget:s});if(e.trigger(n),!n.isDefaultPrevented()){var r=t(o);this.activate(e.closest("li"),i),this.activate(r,r.parent(),(function(){e.trigger({type:"shown.bs.tab",relatedTarget:s})}))}}},e.prototype.activate=function(e,i,o){var s=i.find("> .active"),n=o&&t.support.transition&&s.hasClass("fade");function r(){s.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),e.addClass("active"),n?(e[0].offsetWidth,e.addClass("in")):e.removeClass("fade"),e.parent(".dropdown-menu")&&e.closest("li.dropdown").addClass("active"),o&&o()}n?s.one("bsTransitionEnd",r).emulateTransitionEnd(150):r(),s.removeClass("in")};var o=t.fn.tab;t.fn.tab=i,t.fn.tab.Constructor=e,t.fn.tab.noConflict=function(){return t.fn.tab=o,this},t(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',(function(e){e.preventDefault(),i.call(t(this),"show")}))}(jQuery),function(t){"use strict";var e=function(i,o){this.options=t.extend({},e.DEFAULTS,o),this.$target=t(this.options.target).on("scroll.bs.affix.data-api",t.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",t.proxy(this.checkPositionWithEventLoop,this)),this.$element=t(i),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};function i(i){return this.each((function(){var o=t(this),s=o.data("bs.affix"),n="object"==typeof i&&i;s||o.data("bs.affix",s=new e(this,n)),"string"==typeof i&&s[i]()}))}e.VERSION="3.2.0",e.RESET="affix affix-top affix-bottom",e.DEFAULTS={offset:0,target:window},e.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(e.RESET).addClass("affix");var t=this.$target.scrollTop(),i=this.$element.offset();return this.pinnedOffset=i.top-t},e.prototype.checkPositionWithEventLoop=function(){setTimeout(t.proxy(this.checkPosition,this),1)},e.prototype.checkPosition=function(){if(this.$element.is(":visible")){var i=t(document).height(),o=this.$target.scrollTop(),s=this.$element.offset(),n=this.options.offset,r=n.top,a=n.bottom;"object"!=typeof n&&(a=r=n),"function"==typeof r&&(r=n.top(this.$element)),"function"==typeof a&&(a=n.bottom(this.$element));var l=!(null!=this.unpin&&o+this.unpin<=s.top)&&(null!=a&&s.top+this.$element.height()>=i-a?"bottom":null!=r&&o<=r&&"top");if(this.affixed!==l){null!=this.unpin&&this.$element.css("top","");var h="affix"+(l?"-"+l:""),p=t.Event(h+".bs.affix");this.$element.trigger(p),p.isDefaultPrevented()||(this.affixed=l,this.unpin="bottom"==l?this.getPinnedOffset():null,this.$element.removeClass(e.RESET).addClass(h).trigger(t.Event(h.replace("affix","affixed"))),"bottom"==l&&this.$element.offset({top:i-this.$element.height()-a}))}}};var o=t.fn.affix;t.fn.affix=i,t.fn.affix.Constructor=e,t.fn.affix.noConflict=function(){return t.fn.affix=o,this},t(window).on("load",(function(){t(".article__toc").animate({left:t(".site").outerWidth()+t(".site").offset().left+"px"},600),t('[data-spy="affix"]').each((function(){var e=t(this),o=e.data();o.offset=o.offset||{},o.offsetBottom&&(o.offset.bottom=o.offsetBottom),o.offsetTop&&(o.offset.top=o.offsetTop),i.call(e,o)}))}))}(jQuery); if("undefined"==typeof $)throw new Error("Bootstrap's JavaScript requires jQuery");!function(t){"use strict";t.fn.emulateTransitionEnd=function(e){var i=!1,o=this;t(this).one("bsTransitionEnd",(function(){i=!0}));return setTimeout((function(){i||t(o).trigger(t.support.transition.end)}),e),this},t((function(){t.support.transition=function(){var t=document.createElement("bootstrap"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var i in e)if(void 0!==t.style[i])return{end:e[i]};return!1}(),t.support.transition&&(t.event.special.bsTransitionEnd={bindType:t.support.transition.end,delegateType:t.support.transition.end,handle:function(e){if(t(e.target).is(this))return e.handleObj.handler.apply(this,arguments)}})}))}($),function(t){"use strict";var e='[data-dismiss="alert"]',i=function(i){t(i).on("click",e,this.close)};i.VERSION="3.2.0",i.prototype.close=function(e){var i=t(this),o=i.attr("data-target");o||(o=(o=i.attr("href"))&&o.replace(/.*(?=#[^\s]*$)/,""));var s=t(o);function n(){s.detach().trigger("closed.bs.alert").remove()}e&&e.preventDefault(),s.length||(s=i.hasClass("alert")?i:i.parent()),s.trigger(e=t.Event("close.bs.alert")),e.isDefaultPrevented()||(s.removeClass("in"),t.support.transition&&s.hasClass("fade")?s.one("bsTransitionEnd",n).emulateTransitionEnd(150):n())};var o=t.fn.alert;t.fn.alert=function(e){return this.each((function(){var o=t(this),s=o.data("bs.alert");s||o.data("bs.alert",s=new i(this)),"string"==typeof e&&s[e].call(o)}))},t.fn.alert.Constructor=i,t.fn.alert.noConflict=function(){return t.fn.alert=o,this},t(document).on("click.bs.alert.data-api",e,i.prototype.close)}($),function(t){"use strict";var e=function(i,o){this.$element=t(i),this.options=t.extend({},e.DEFAULTS,o),this.isLoading=!1};function i(i){return this.each((function(){var o=t(this),s=o.data("bs.button"),n="object"==typeof i&&i;s||o.data("bs.button",s=new e(this,n)),"toggle"==i?s.toggle():i&&s.setState(i)}))}e.VERSION="3.2.0",e.DEFAULTS={loadingText:"loading..."},e.prototype.setState=function(e){var i="disabled",o=this.$element,s=o.is("input")?"val":"html",n=o.data();e+="Text",null==n.resetText&&o.data("resetText",o[s]()),o[s](null==n[e]?this.options[e]:n[e]),setTimeout(t.proxy((function(){"loadingText"==e?(this.isLoading=!0,o.addClass(i).attr(i,i)):this.isLoading&&(this.isLoading=!1,o.removeClass(i).removeAttr(i))}),this),0)},e.prototype.toggle=function(){var t=!0,e=this.$element.closest('[data-toggle="buttons"]');if(e.length){var i=this.$element.find("input");"radio"==i.prop("type")&&(i.prop("checked")&&this.$element.hasClass("active")?t=!1:e.find(".active").removeClass("active")),t&&i.prop("checked",!this.$element.hasClass("active")).trigger("change")}t&&this.$element.toggleClass("active")};var o=t.fn.button;t.fn.button=i,t.fn.button.Constructor=e,t.fn.button.noConflict=function(){return t.fn.button=o,this},t(document).on("click.bs.button.data-api",'[data-toggle^="button"]',(function(e){var o=t(e.target);o.hasClass("btn")||(o=o.closest(".btn")),i.call(o,"toggle"),e.preventDefault()}))}($),function(t){"use strict";var e=function(e,i){this.$element=t(e).on("keydown.bs.carousel",t.proxy(this.keydown,this)),this.$indicators=this.$element.find(".carousel-indicators"),this.options=i,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter.bs.carousel",t.proxy(this.pause,this)).on("mouseleave.bs.carousel",t.proxy(this.cycle,this))};function i(i){return this.each((function(){var o=t(this),s=o.data("bs.carousel"),n=t.extend({},e.DEFAULTS,o.data(),"object"==typeof i&&i),r="string"==typeof i?i:n.slide;s||o.data("bs.carousel",s=new e(this,n)),"number"==typeof i?s.to(i):r?s[r]():n.interval&&s.pause().cycle()}))}e.VERSION="3.2.0",e.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},e.prototype.keydown=function(t){switch(t.which){case 37:this.prev();break;case 39:this.next();break;default:return}t.preventDefault()},e.prototype.cycle=function(e){return e||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(t.proxy(this.next,this),this.options.interval)),this},e.prototype.getItemIndex=function(t){return this.$items=t.parent().children(".item"),this.$items.index(t||this.$active)},e.prototype.to=function(e){var i=this,o=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(e>this.$items.length-1||e<0))return this.sliding?this.$element.one("slid.bs.carousel",(function(){i.to(e)})):o==e?this.pause().cycle():this.slide(e>o?"next":"prev",t(this.$items[e]))},e.prototype.pause=function(e){return e||(this.paused=!0),this.$element.find(".next, .prev").length&&t.support.transition&&(this.$element.trigger(t.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},e.prototype.next=function(){if(!this.sliding)return this.slide("next")},e.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},e.prototype.slide=function(e,i){var o=this.$element.find(".item.active"),s=i||o[e](),n=this.interval,r="next"==e?"left":"right",a="next"==e?"first":"last",l=this;if(!s.length){if(!this.options.wrap)return;s=this.$element.find(".item")[a]()}if(s.hasClass("active"))return this.sliding=!1;var h=s[0],p=t.Event("slide.bs.carousel",{relatedTarget:h,direction:r});if(this.$element.trigger(p),!p.isDefaultPrevented()){if(this.sliding=!0,n&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var c=t(this.$indicators.children()[this.getItemIndex(s)]);c&&c.addClass("active")}var d=t.Event("slid.bs.carousel",{relatedTarget:h,direction:r});return t.support.transition&&this.$element.hasClass("slide")?(s.addClass(e),s[0].offsetWidth,o.addClass(r),s.addClass(r),o.one("bsTransitionEnd",(function(){s.removeClass([e,r].join(" ")).addClass("active"),o.removeClass(["active",r].join(" ")),l.sliding=!1,setTimeout((function(){l.$element.trigger(d)}),0)})).emulateTransitionEnd(1e3*o.css("transition-duration").slice(0,-1))):(o.removeClass("active"),s.addClass("active"),this.sliding=!1,this.$element.trigger(d)),n&&this.cycle(),this}};var o=t.fn.carousel;t.fn.carousel=i,t.fn.carousel.Constructor=e,t.fn.carousel.noConflict=function(){return t.fn.carousel=o,this},t(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",(function(e){var o,s=t(this),n=t(s.attr("data-target")||(o=s.attr("href"))&&o.replace(/.*(?=#[^\s]+$)/,""));if(n.hasClass("carousel")){var r=t.extend({},n.data(),s.data()),a=s.attr("data-slide-to");a&&(r.interval=!1),i.call(n,r),a&&n.data("bs.carousel").to(a),e.preventDefault()}})),t(window).on("load",(function(){t('[data-ride="carousel"]').each((function(){var e=t(this);i.call(e,e.data())}))}))}($),function(t){"use strict";var e=function(i,o){this.$element=t(i),this.options=t.extend({},e.DEFAULTS,o),this.transitioning=null,this.options.parent&&(this.$parent=t(this.options.parent)),this.options.toggle&&this.toggle()};function i(i){return this.each((function(){var o=t(this),s=o.data("bs.collapse"),n=t.extend({},e.DEFAULTS,o.data(),"object"==typeof i&&i);!s&&n.toggle&&"show"==i&&(i=!i),s||o.data("bs.collapse",s=new e(this,n)),"string"==typeof i&&s[i]()}))}e.VERSION="3.2.0",e.DEFAULTS={toggle:!0},e.prototype.dimension=function(){return this.$element.hasClass("width")?"width":"height"},e.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var e=t.Event("show.bs.collapse");if(this.$element.trigger(e),!e.isDefaultPrevented()){var o=this.$parent&&this.$parent.find("> .panel > .in");if(o&&o.length){var s=o.data("bs.collapse");if(s&&s.transitioning)return;i.call(o,"hide"),s||o.data("bs.collapse",null)}var n=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[n](0),this.transitioning=1;var r=function(){this.$element.removeClass("collapsing").addClass("collapse in")[n](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!t.support.transition)return r.call(this);var a=t.camelCase(["scroll",n].join("-"));this.$element.one("bsTransitionEnd",t.proxy(r,this)).emulateTransitionEnd(350)[n](this.$element[0][a])}}},e.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var e=t.Event("hide.bs.collapse");if(this.$element.trigger(e),!e.isDefaultPrevented()){var i=this.dimension();this.$element[i](this.$element[i]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var o=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};if(!t.support.transition)return o.call(this);this.$element[i](0).one("bsTransitionEnd",t.proxy(o,this)).emulateTransitionEnd(350)}}},e.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var o=t.fn.collapse;t.fn.collapse=i,t.fn.collapse.Constructor=e,t.fn.collapse.noConflict=function(){return t.fn.collapse=o,this},t(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',(function(e){var o,s=t(this),n=s.attr("data-target")||e.preventDefault()||(o=s.attr("href"))&&o.replace(/.*(?=#[^\s]+$)/,""),r=t(n),a=r.data("bs.collapse"),l=a?"toggle":s.data(),h=s.attr("data-parent"),p=h&&t(h);a&&a.transitioning||(p&&p.find('[data-toggle="collapse"][data-parent="'+h+'"]').not(s).addClass("collapsed"),s[r.hasClass("in")?"addClass":"removeClass"]("collapsed")),i.call(r,l)}))}($),function(t){"use strict";var e=".dropdown-backdrop",i='[data-toggle="dropdown"]',o=function(e){t(e).on("click.bs.dropdown",this.toggle)};function s(o){o&&3===o.which||(t(e).remove(),t(i).each((function(){var e=n(t(this)),i={relatedTarget:this};e.hasClass("open")&&(e.trigger(o=t.Event("hide.bs.dropdown",i)),o.isDefaultPrevented()||e.removeClass("open").trigger("hidden.bs.dropdown",i))})))}function n(e){var i=e.attr("data-target");i||(i=(i=e.attr("href"))&&/#[A-Za-z]/.test(i)&&i.replace(/.*(?=#[^\s]*$)/,""));var o=i&&t(i);return o&&o.length?o:e.parent()}o.VERSION="3.2.0",o.prototype.toggle=function(e){var i=t(this);if(!i.is(".disabled, :disabled")){var o=n(i),r=o.hasClass("open");if(s(),!r){"ontouchstart"in document.documentElement&&!o.closest(".navbar-nav").length&&t('<div class="dropdown-backdrop"/>').insertAfter(t(this)).on("click",s);var a={relatedTarget:this};if(o.trigger(e=t.Event("show.bs.dropdown",a)),e.isDefaultPrevented())return;i.trigger("focus"),o.toggleClass("open").trigger("shown.bs.dropdown",a)}return!1}},o.prototype.keydown=function(e){if(/(38|40|27)/.test(e.keyCode)){var o=t(this);if(e.preventDefault(),e.stopPropagation(),!o.is(".disabled, :disabled")){var s=n(o),r=s.hasClass("open");if(!r||r&&27==e.keyCode)return 27==e.which&&s.find(i).trigger("focus"),o.trigger("click");var a=" li:not(.divider):visible a",l=s.find('[role="menu"]'+a+', [role="listbox"]'+a);if(l.length){var h=l.index(l.filter(":focus"));38==e.keyCode&&h>0&&h--,40==e.keyCode&&h<l.length-1&&h++,~h||(h=0),l.eq(h).trigger("focus")}}}};var r=t.fn.dropdown;t.fn.dropdown=function(e){return this.each((function(){var i=t(this),s=i.data("bs.dropdown");s||i.data("bs.dropdown",s=new o(this)),"string"==typeof e&&s[e].call(i)}))},t.fn.dropdown.Constructor=o,t.fn.dropdown.noConflict=function(){return t.fn.dropdown=r,this},t(document).on("click.bs.dropdown.data-api",s).on("click.bs.dropdown.data-api",".dropdown form",(function(t){t.stopPropagation()})).on("click.bs.dropdown.data-api",i,o.prototype.toggle).on("keydown.bs.dropdown.data-api",i+', [role="menu"], [role="listbox"]',o.prototype.keydown)}($),function(t){"use strict";var e=function(e,i){this.options=i,this.$body=t(document.body),this.$element=t(e),this.$backdrop=this.isShown=null,this.scrollbarWidth=0,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,t.proxy((function(){this.$element.trigger("loaded.bs.modal")}),this))};function i(i,o){return this.each((function(){var s=t(this),n=s.data("bs.modal"),r=t.extend({},e.DEFAULTS,s.data(),"object"==typeof i&&i);n||s.data("bs.modal",n=new e(this,r)),"string"==typeof i?n[i](o):r.show&&n.show(o)}))}e.VERSION="3.2.0",e.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},e.prototype.toggle=function(t){return this.isShown?this.hide():this.show(t)},e.prototype.show=function(e){var i=this,o=t.Event("show.bs.modal",{relatedTarget:e});this.$element.trigger(o),this.isShown||o.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.$body.addClass("modal-open"),this.setScrollbar(),this.escape(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',t.proxy(this.hide,this)),this.backdrop((function(){var o=t.support.transition&&i.$element.hasClass("fade");i.$element.parent().length||i.$element.appendTo(i.$body),i.$element.show().scrollTop(0),o&&i.$element[0].offsetWidth,i.$element.addClass("in").attr("aria-hidden",!1),i.enforceFocus();var s=t.Event("shown.bs.modal",{relatedTarget:e});o?i.$element.find(".modal-dialog").one("bsTransitionEnd",(function(){i.$element.trigger("focus").trigger(s)})).emulateTransitionEnd(300):i.$element.trigger("focus").trigger(s)})))},e.prototype.hide=function(e){e&&e.preventDefault(),e=t.Event("hide.bs.modal"),this.$element.trigger(e),this.isShown&&!e.isDefaultPrevented()&&(this.isShown=!1,this.$body.removeClass("modal-open"),this.resetScrollbar(),this.escape(),t(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),t.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",t.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal())},e.prototype.enforceFocus=function(){t(document).off("focusin.bs.modal").on("focusin.bs.modal",t.proxy((function(t){this.$element[0]===t.target||this.$element.has(t.target).length||this.$element.trigger("focus")}),this))},e.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",t.proxy((function(t){27==t.which&&this.hide()}),this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},e.prototype.hideModal=function(){var t=this;this.$element.hide(),this.backdrop((function(){t.$element.trigger("hidden.bs.modal")}))},e.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},e.prototype.backdrop=function(e){var i=this,o=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var s=t.support.transition&&o;if(this.$backdrop=t('<div class="modal-backdrop '+o+'" />').appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",t.proxy((function(t){t.target===t.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))}),this)),s&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!e)return;s?this.$backdrop.one("bsTransitionEnd",e).emulateTransitionEnd(150):e()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var n=function(){i.removeBackdrop(),e&&e()};t.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",n).emulateTransitionEnd(150):n()}else e&&e()},e.prototype.checkScrollbar=function(){document.body.clientWidth>=window.innerWidth||(this.scrollbarWidth=this.scrollbarWidth||this.measureScrollbar())},e.prototype.setScrollbar=function(){var t=parseInt(this.$body.css("padding-right")||0,10);this.scrollbarWidth&&this.$body.css("padding-right",t+this.scrollbarWidth)},e.prototype.resetScrollbar=function(){this.$body.css("padding-right","")},e.prototype.measureScrollbar=function(){var t=document.createElement("div");t.className="modal-scrollbar-measure",this.$body.append(t);var e=t.offsetWidth-t.clientWidth;return this.$body[0].removeChild(t),e};var o=t.fn.modal;t.fn.modal=i,t.fn.modal.Constructor=e,t.fn.modal.noConflict=function(){return t.fn.modal=o,this},t(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',(function(e){var o=t(this),s=o.attr("href"),n=t(o.attr("data-target")||s&&s.replace(/.*(?=#[^\s]+$)/,"")),r=n.data("bs.modal")?"toggle":t.extend({remote:!/#/.test(s)&&s},n.data(),o.data());o.is("a")&&e.preventDefault(),n.one("show.bs.modal",(function(t){t.isDefaultPrevented()||n.one("hidden.bs.modal",(function(){o.is(":visible")&&o.trigger("focus")}))})),i.call(n,r,this)}))}($),function(t){"use strict";var e=function(t,e){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",t,e)};e.VERSION="3.2.0",e.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},e.prototype.init=function(e,i,o){this.enabled=!0,this.type=e,this.$element=t(i),this.options=this.getOptions(o),this.$viewport=this.options.viewport&&t(this.options.viewport.selector||this.options.viewport);for(var s=this.options.trigger.split(" "),n=s.length;n--;){var r=s[n];if("click"==r)this.$element.on("click."+this.type,this.options.selector,t.proxy(this.toggle,this));else if("manual"!=r){var a="hover"==r?"mouseenter":"focusin",l="hover"==r?"mouseleave":"focusout";this.$element.on(a+"."+this.type,this.options.selector,t.proxy(this.enter,this)),this.$element.on(l+"."+this.type,this.options.selector,t.proxy(this.leave,this))}}this.options.selector?this._options=t.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},e.prototype.getDefaults=function(){return e.DEFAULTS},e.prototype.getOptions=function(e){return(e=t.extend({},this.getDefaults(),this.$element.data(),e)).delay&&"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),e},e.prototype.getDelegateOptions=function(){var e={},i=this.getDefaults();return this._options&&t.each(this._options,(function(t,o){i[t]!=o&&(e[t]=o)})),e},e.prototype.enter=function(e){var i=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);if(i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i)),clearTimeout(i.timeout),i.hoverState="in",!i.options.delay||!i.options.delay.show)return i.show();i.timeout=setTimeout((function(){"in"==i.hoverState&&i.show()}),i.options.delay.show)},e.prototype.leave=function(e){var i=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);if(i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i)),clearTimeout(i.timeout),i.hoverState="out",!i.options.delay||!i.options.delay.hide)return i.hide();i.timeout=setTimeout((function(){"out"==i.hoverState&&i.hide()}),i.options.delay.hide)},e.prototype.show=function(){var e=t.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(e);var i=t.contains(document.documentElement,this.$element[0]);if(e.isDefaultPrevented()||!i)return;var o=this,s=this.tip(),n=this.getUID(this.type);this.setContent(),s.attr("id",n),this.$element.attr("aria-describedby",n),this.options.animation&&s.addClass("fade");var r="function"==typeof this.options.placement?this.options.placement.call(this,s[0],this.$element[0]):this.options.placement,a=/\s?auto?\s?/i,l=a.test(r);l&&(r=r.replace(a,"")||"top"),s.detach().css({top:0,left:0,display:"block"}).addClass(r).data("bs."+this.type,this),this.options.container?s.appendTo(this.options.container):s.insertAfter(this.$element);var h=this.getPosition(),p=s[0].offsetWidth,c=s[0].offsetHeight;if(l){var d=r,f=this.$element.parent(),u=this.getPosition(f);r="bottom"==r&&h.top+h.height+c-u.scroll>u.height?"top":"top"==r&&h.top-u.scroll-c<0?"bottom":"right"==r&&h.right+p>u.width?"left":"left"==r&&h.left-p<u.left?"right":r,s.removeClass(d).addClass(r)}var g=this.getCalculatedOffset(r,h,p,c);this.applyPlacement(g,r);var v=function(){o.$element.trigger("shown.bs."+o.type),o.hoverState=null};t.support.transition&&this.$tip.hasClass("fade")?s.one("bsTransitionEnd",v).emulateTransitionEnd(150):v()}},e.prototype.applyPlacement=function(e,i){var o=this.tip(),s=o[0].offsetWidth,n=o[0].offsetHeight,r=parseInt(o.css("margin-top"),10),a=parseInt(o.css("margin-left"),10);isNaN(r)&&(r=0),isNaN(a)&&(a=0),e.top=e.top+r,e.left=e.left+a,t.offset.setOffset(o[0],t.extend({using:function(t){o.css({top:Math.round(t.top),left:Math.round(t.left)})}},e),0),o.addClass("in");var l=o[0].offsetWidth,h=o[0].offsetHeight;"top"==i&&h!=n&&(e.top=e.top+n-h);var p=this.getViewportAdjustedDelta(i,e,l,h);p.left?e.left+=p.left:e.top+=p.top;var c=p.left?2*p.left-s+l:2*p.top-n+h,d=p.left?"left":"top",f=p.left?"offsetWidth":"offsetHeight";o.offset(e),this.replaceArrow(c,o[0][f],d)},e.prototype.replaceArrow=function(t,e,i){this.arrow().css(i,t?50*(1-t/e)+"%":"")},e.prototype.setContent=function(){var t=this.tip(),e=this.getTitle();t.find(".tooltip-inner")[this.options.html?"html":"text"](e),t.removeClass("fade in top bottom left right")},e.prototype.hide=function(){var e=this,i=this.tip(),o=t.Event("hide.bs."+this.type);function s(){"in"!=e.hoverState&&i.detach(),e.$element.trigger("hidden.bs."+e.type)}if(this.$element.removeAttr("aria-describedby"),this.$element.trigger(o),!o.isDefaultPrevented())return i.removeClass("in"),t.support.transition&&this.$tip.hasClass("fade")?i.one("bsTransitionEnd",s).emulateTransitionEnd(150):s(),this.hoverState=null,this},e.prototype.fixTitle=function(){var t=this.$element;(t.attr("title")||"string"!=typeof t.attr("data-original-title"))&&t.attr("data-original-title",t.attr("title")||"").attr("title","")},e.prototype.hasContent=function(){return this.getTitle()},e.prototype.getPosition=function(e){var i=(e=e||this.$element)[0],o="BODY"==i.tagName;return t.extend({},"function"==typeof i.getBoundingClientRect?i.getBoundingClientRect():null,{scroll:o?document.documentElement.scrollTop||document.body.scrollTop:e.scrollTop(),width:o?t(window).width():e.outerWidth(),height:o?t(window).height():e.outerHeight()},o?{top:0,left:0}:e.offset())},e.prototype.getCalculatedOffset=function(t,e,i,o){return"bottom"==t?{top:e.top+e.height,left:e.left+e.width/2-i/2}:"top"==t?{top:e.top-o,left:e.left+e.width/2-i/2}:"left"==t?{top:e.top+e.height/2-o/2,left:e.left-i}:{top:e.top+e.height/2-o/2,left:e.left+e.width}},e.prototype.getViewportAdjustedDelta=function(t,e,i,o){var s={top:0,left:0};if(!this.$viewport)return s;var n=this.options.viewport&&this.options.viewport.padding||0,r=this.getPosition(this.$viewport);if(/right|left/.test(t)){var a=e.top-n-r.scroll,l=e.top+n-r.scroll+o;a<r.top?s.top=r.top-a:l>r.top+r.height&&(s.top=r.top+r.height-l)}else{var h=e.left-n,p=e.left+n+i;h<r.left?s.left=r.left-h:p>r.width&&(s.left=r.left+r.width-p)}return s},e.prototype.getTitle=function(){var t=this.$element,e=this.options;return t.attr("data-original-title")||("function"==typeof e.title?e.title.call(t[0]):e.title)},e.prototype.getUID=function(t){do{t+=~~(1e6*Math.random())}while(document.getElementById(t));return t},e.prototype.tip=function(){return this.$tip=this.$tip||t(this.options.template)},e.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},e.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},e.prototype.enable=function(){this.enabled=!0},e.prototype.disable=function(){this.enabled=!1},e.prototype.toggleEnabled=function(){this.enabled=!this.enabled},e.prototype.toggle=function(e){var i=this;e&&((i=t(e.currentTarget).data("bs."+this.type))||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i))),i.tip().hasClass("in")?i.leave(i):i.enter(i)},e.prototype.destroy=function(){clearTimeout(this.timeout),this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var i=t.fn.tooltip;t.fn.tooltip=function(i){return this.each((function(){var o=t(this),s=o.data("bs.tooltip"),n="object"==typeof i&&i;(s||"destroy"!=i)&&(s||o.data("bs.tooltip",s=new e(this,n)),"string"==typeof i&&s[i]())}))},t.fn.tooltip.Constructor=e,t.fn.tooltip.noConflict=function(){return t.fn.tooltip=i,this}}($),function(t){"use strict";var e=function(t,e){this.init("popover",t,e)};if(!t.fn.tooltip)throw new Error("Popover requires tooltip.js");e.VERSION="3.2.0",e.DEFAULTS=t.extend({},t.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),e.prototype=t.extend({},t.fn.tooltip.Constructor.prototype),e.prototype.constructor=e,e.prototype.getDefaults=function(){return e.DEFAULTS},e.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),i=this.getContent();t.find(".popover-title")[this.options.html?"html":"text"](e),t.find(".popover-content").empty()[this.options.html?"string"==typeof i?"html":"append":"text"](i),t.removeClass("fade top bottom left right in"),t.find(".popover-title").html()||t.find(".popover-title").hide()},e.prototype.hasContent=function(){return this.getTitle()||this.getContent()},e.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr("data-content")||("function"==typeof e.content?e.content.call(t[0]):e.content)},e.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},e.prototype.tip=function(){return this.$tip||(this.$tip=t(this.options.template)),this.$tip};var i=t.fn.popover;t.fn.popover=function(i){return this.each((function(){var o=t(this),s=o.data("bs.popover"),n="object"==typeof i&&i;(s||"destroy"!=i)&&(s||o.data("bs.popover",s=new e(this,n)),"string"==typeof i&&s[i]())}))},t.fn.popover.Constructor=e,t.fn.popover.noConflict=function(){return t.fn.popover=i,this}}($),function(t){"use strict";function e(i,o){var s=t.proxy(this.process,this);this.$body=t("body"),this.$scrollElement=t(i).is("body")?t(window):t(i),this.options=t.extend({},e.DEFAULTS,o),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",s),this.refresh(),this.process()}function i(i){return this.each((function(){var o=t(this),s=o.data("bs.scrollspy"),n="object"==typeof i&&i;s||o.data("bs.scrollspy",s=new e(this,n)),"string"==typeof i&&s[i]()}))}e.VERSION="3.2.0",e.DEFAULTS={offset:10},e.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},e.prototype.refresh=function(){var e="offset",i=0;t.isWindow(this.$scrollElement[0])||(e="position",i=this.$scrollElement.scrollTop()),this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight();var o=this;this.$body.find(this.selector).map((function(){var o=t(this),s=o.data("target")||o.attr("href"),n=/^#./.test(s)&&t(s);return n&&n.length&&n.is(":visible")&&[[n[e]().top+i,s]]||null})).sort((function(t,e){return t[0]-e[0]})).each((function(){o.offsets.push(this[0]),o.targets.push(this[1])}))},e.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,i=this.getScrollHeight(),o=this.options.offset+i-this.$scrollElement.height(),s=this.offsets,n=this.targets,r=this.activeTarget;if(this.scrollHeight!=i&&this.refresh(),e>=o)return r!=(t=n[n.length-1])&&this.activate(t);if(r&&e<=s[0])return r!=(t=n[0])&&this.activate(t);for(t=s.length;t--;)r!=n[t]&&e>=s[t]&&(!s[t+1]||e<=s[t+1])&&this.activate(n[t])},e.prototype.activate=function(e){this.activeTarget=e,t(this.selector).parentsUntil(this.options.target,".active").removeClass("active");var i=this.selector+'[data-target="'+e+'"],'+this.selector+'[href="'+e+'"]',o=t(i).parents("li").addClass("active");o.parent(".dropdown-menu").length&&(o=o.closest("li.dropdown").addClass("active")),o.trigger("activate.bs.scrollspy")};var o=t.fn.scrollspy;t.fn.scrollspy=i,t.fn.scrollspy.Constructor=e,t.fn.scrollspy.noConflict=function(){return t.fn.scrollspy=o,this},t(window).on("load.bs.scrollspy.data-api",(function(){t('[data-spy="scroll"]').each((function(){var e=t(this);i.call(e,e.data())}))}))}($),function(t){"use strict";var e=function(e){this.element=t(e)};function i(i){return this.each((function(){var o=t(this),s=o.data("bs.tab");s||o.data("bs.tab",s=new e(this)),"string"==typeof i&&s[i]()}))}e.VERSION="3.2.0",e.prototype.show=function(){var e=this.element,i=e.closest("ul:not(.dropdown-menu)"),o=e.data("target");if(o||(o=(o=e.attr("href"))&&o.replace(/.*(?=#[^\s]*$)/,"")),!e.parent("li").hasClass("active")){var s=i.find(".active:last a")[0],n=t.Event("show.bs.tab",{relatedTarget:s});if(e.trigger(n),!n.isDefaultPrevented()){var r=t(o);this.activate(e.closest("li"),i),this.activate(r,r.parent(),(function(){e.trigger({type:"shown.bs.tab",relatedTarget:s})}))}}},e.prototype.activate=function(e,i,o){var s=i.find("> .active"),n=o&&t.support.transition&&s.hasClass("fade");function r(){s.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),e.addClass("active"),n?(e[0].offsetWidth,e.addClass("in")):e.removeClass("fade"),e.parent(".dropdown-menu")&&e.closest("li.dropdown").addClass("active"),o&&o()}n?s.one("bsTransitionEnd",r).emulateTransitionEnd(150):r(),s.removeClass("in")};var o=t.fn.tab;t.fn.tab=i,t.fn.tab.Constructor=e,t.fn.tab.noConflict=function(){return t.fn.tab=o,this},t(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',(function(e){e.preventDefault(),i.call(t(this),"show")}))}($),function(t){"use strict";var e=function(i,o){this.options=t.extend({},e.DEFAULTS,o),this.$target=t(this.options.target).on("scroll.bs.affix.data-api",t.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",t.proxy(this.checkPositionWithEventLoop,this)),this.$element=t(i),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};function i(i){return this.each((function(){var o=t(this),s=o.data("bs.affix"),n="object"==typeof i&&i;s||o.data("bs.affix",s=new e(this,n)),"string"==typeof i&&s[i]()}))}e.VERSION="3.2.0",e.RESET="affix affix-top affix-bottom",e.DEFAULTS={offset:0,target:window},e.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(e.RESET).addClass("affix");var t=this.$target.scrollTop(),i=this.$element.offset();return this.pinnedOffset=i.top-t},e.prototype.checkPositionWithEventLoop=function(){setTimeout(t.proxy(this.checkPosition,this),1)},e.prototype.checkPosition=function(){if(this.$element.is(":visible")){var i=t(document).height(),o=this.$target.scrollTop(),s=this.$element.offset(),n=this.options.offset,r=n.top,a=n.bottom;"object"!=typeof n&&(a=r=n),"function"==typeof r&&(r=n.top(this.$element)),"function"==typeof a&&(a=n.bottom(this.$element));var l=!(null!=this.unpin&&o+this.unpin<=s.top)&&(null!=a&&s.top+this.$element.height()>=i-a?"bottom":null!=r&&o<=r&&"top");if(this.affixed!==l){null!=this.unpin&&this.$element.css("top","");var h="affix"+(l?"-"+l:""),p=t.Event(h+".bs.affix");this.$element.trigger(p),p.isDefaultPrevented()||(this.affixed=l,this.unpin="bottom"==l?this.getPinnedOffset():null,this.$element.removeClass(e.RESET).addClass(h).trigger(t.Event(h.replace("affix","affixed"))),"bottom"==l&&this.$element.offset({top:i-this.$element.height()-a}))}}};var o=t.fn.affix;t.fn.affix=i,t.fn.affix.Constructor=e,t.fn.affix.noConflict=function(){return t.fn.affix=o,this},t(window).on("load",(function(){t(".article__toc").animate({left:t(".site").outerWidth()+t(".site").offset().left+"px"},600),t('[data-spy="affix"]').each((function(){var e=t(this),o=e.data();o.offset=o.offset||{},o.offsetBottom&&(o.offset.bottom=o.offsetBottom),o.offsetTop&&(o.offset.top=o.offsetTop),i.call(e,o)}))}))}($);
\ No newline at end of file
...@@ -56,7 +56,7 @@ ...@@ -56,7 +56,7 @@
</#list> </#list>
<#if commentable> <#if commentable>
&nbsp;·&nbsp; &nbsp;·&nbsp;
<a class="item__tag" href="${servePath}${article.articlePermalink}#comments"> <a class="item__tag" href="${servePath}${article.articlePermalink}#b3logsolocomments">
<span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span> ${commentLabel} <span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span> ${commentLabel}
</a> </a>
</#if> </#if>
......
...@@ -83,6 +83,7 @@ ...@@ -83,6 +83,7 @@
</div> </div>
</#if> </#if>
<#if commentable> <#if commentable>
<div id="b3logsolocomments"></div>
<div class="wrapper"> <div class="wrapper">
<div id="vcomment" <div id="vcomment"
style=" margin-bottom: 40px; margin-top: 80px; style=" margin-bottom: 40px; margin-top: 80px;
......
...@@ -35,11 +35,11 @@ ...@@ -35,11 +35,11 @@
<svg class="side__top" id="sideTop" version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"> <svg class="side__top" id="sideTop" version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
<path d="M26.562 13.958c0 0.72 0.583 1.303 1.303 1.303s1.303-0.583 1.303-1.303v0c0-0.72-0.583-1.303-1.303-1.303s-1.303 0.583-1.303 1.303v0zM23.305 10.7c0 0 0 0 0 0 0 0.72 0.583 1.303 1.303 1.303s1.303-0.583 1.303-1.303c0-0 0-0 0-0v0c0-0 0-0 0-0 0-0.72-0.583-1.303-1.303-1.303s-1.303 0.583-1.303 1.303c0 0 0 0 0 0v0zM20.022 7.417c0 0 0 0 0 0 0 0.72 0.583 1.303 1.303 1.303s1.303-0.583 1.303-1.303c0-0 0-0 0-0v0c0-0 0-0 0-0 0-0.72-0.583-1.303-1.303-1.303s-1.303 0.583-1.303 1.303c0 0 0 0 0 0v0zM29.67 0h-27.339c-0.677 0-1.228 0.551-1.228 1.228s0.551 1.228 1.228 1.228h11.151l-10.725 10.725c-0.476 0.476-0.476 1.253 0 1.729 0.226 0.226 0.551 0.351 0.852 0.351s0.626-0.125 0.852-0.351l10.074-10.074v25.936c0 0.677 0.551 1.228 1.228 1.228s1.228-0.551 1.228-1.228v-26.011c0.476 0.426 1.203 0.426 1.679-0.050s0.476-1.253 0-1.729l-0.576-0.576h11.577c0.677 0 1.228-0.551 1.228-1.228 0-0.626-0.551-1.178-1.228-1.178z"></path> <path d="M26.562 13.958c0 0.72 0.583 1.303 1.303 1.303s1.303-0.583 1.303-1.303v0c0-0.72-0.583-1.303-1.303-1.303s-1.303 0.583-1.303 1.303v0zM23.305 10.7c0 0 0 0 0 0 0 0.72 0.583 1.303 1.303 1.303s1.303-0.583 1.303-1.303c0-0 0-0 0-0v0c0-0 0-0 0-0 0-0.72-0.583-1.303-1.303-1.303s-1.303 0.583-1.303 1.303c0 0 0 0 0 0v0zM20.022 7.417c0 0 0 0 0 0 0 0.72 0.583 1.303 1.303 1.303s1.303-0.583 1.303-1.303c0-0 0-0 0-0v0c0-0 0-0 0-0 0-0.72-0.583-1.303-1.303-1.303s-1.303 0.583-1.303 1.303c0 0 0 0 0 0v0zM29.67 0h-27.339c-0.677 0-1.228 0.551-1.228 1.228s0.551 1.228 1.228 1.228h11.151l-10.725 10.725c-0.476 0.476-0.476 1.253 0 1.729 0.226 0.226 0.551 0.351 0.852 0.351s0.626-0.125 0.852-0.351l10.074-10.074v25.936c0 0.677 0.551 1.228 1.228 1.228s1.228-0.551 1.228-1.228v-26.011c0.476 0.426 1.203 0.426 1.679-0.050s0.476-1.253 0-1.729l-0.576-0.576h11.577c0.677 0 1.228-0.551 1.228-1.228 0-0.626-0.551-1.178-1.228-1.178z"></path>
</svg> </svg>
<script type="text/javascript"
src="${staticServePath}/skins/${skinDirName}/js/circleMagic.min.js?${staticResourceVersion}"
charset="utf-8"></script>
<#include "../../common-template/label.ftl"> <#include "../../common-template/label.ftl">
<script type="text/javascript" <script type="text/javascript"
src="${staticServePath}/skins/${skinDirName}/js/common.min.js?${staticResourceVersion}" src="${staticServePath}/skins/${skinDirName}/js/common.min.js?${staticResourceVersion}"
charset="utf-8"></script> charset="utf-8"></script>
<script type="text/javascript"
src="${staticServePath}/skins/${skinDirName}/js/circleMagic.min.js?${staticResourceVersion}"
charset="utf-8"></script>
${plugins} ${plugins}
!function(t){t.fn.circleMagic=function(i){var n,o,s,e,h=!0,a=[],r=t.extend({color:"rgba(255,255,255,.5)",radius:10,density:.3,clearOffset:.2},i),l=this[0];function c(){n=l.clientWidth,o=l.clientHeight,l.height=o+"px",s.width=n,s.height=o}function d(){if(h)for(var t in e.clearRect(0,0,n,o),a)a[t].draw();requestAnimationFrame(d)}function p(){var t=this;function i(){t.pos.x=Math.random()*n,t.pos.y=o+100*Math.random(),t.alpha=.1+Math.random()*r.clearOffset,t.scale=.1+.3*Math.random(),t.speed=Math.random(),"random"===r.color?t.color="rgba("+Math.floor(255*Math.random())+", "+Math.floor(255*Math.random())+", "+Math.floor(255*Math.random())+", "+Math.random().toPrecision(2)+")":t.color=r.color}t.pos={},i(),this.draw=function(){t.alpha<=0&&i(),t.pos.y-=t.speed,t.alpha-=5e-4,e.beginPath(),e.arc(t.pos.x,t.pos.y,t.scale*r.radius,0,2*Math.PI,!1),e.fillStyle=t.color,e.fill(),e.closePath()}}!function(){n=l.offsetWidth,o=l.offsetHeight,t=document.createElement("canvas"),t.id="canvas",l.appendChild(t),t.parentElement.style.overflow="hidden",(s=document.getElementById("canvas")).width=n,s.height=o,s.style.position="absolute",s.style.left="0",s.style.bottom="0",e=s.getContext("2d");var t;for(var i=0;i<n*r.density;i++){var h=new p;a.push(h)}d()}(),window.addEventListener("resize",c,!1)}}(jQuery),"object"==typeof window&&(window.Ribbons=function(){var t=window,i=document.body,n=document.documentElement,o=function(){if(1===arguments.length){if(Array.isArray(arguments[0])){var t=Math.round(o(0,arguments[0].length-1));return arguments[0][t]}return o(0,arguments[0])}return 2===arguments.length?Math.random()*(arguments[1]-arguments[0])+arguments[0]:0},s=function(o){var s=Math.max(0,t.innerWidth||n.clientWidth||i.clientWidth||0),e=Math.max(0,t.innerHeight||n.clientHeight||i.clientHeight||0);return{width:s,height:e,ratio:s/e,centerx:s/2,centery:e/2,scrollx:Math.max(0,t.pageXOffset||n.scrollLeft||i.scrollLeft||0)-(n.clientLeft||0),scrolly:Math.max(0,t.pageYOffset||n.scrollTop||i.scrollTop||0)-(n.clientTop||0)}},e=function(t,i){this.x=0,this.y=0,this.set(t,i)};e.prototype={constructor:e,set:function(t,i){this.x=t||0,this.y=i||0},copy:function(t){return this.x=t.x||0,this.y=t.y||0,this},multiply:function(t,i){return this.x*=t||1,this.y*=i||1,this},divide:function(t,i){return this.x/=t||1,this.y/=i||1,this},add:function(t,i){return this.x+=t||0,this.y+=i||0,this},subtract:function(t,i){return this.x-=t||0,this.y-=i||0,this},clampX:function(t,i){return this.x=Math.max(t,Math.min(this.x,i)),this},clampY:function(t,i){return this.y=Math.max(t,Math.min(this.y,i)),this},flipX:function(){return this.x*=-1,this},flipY:function(){return this.y*=-1,this}};var h=function(t){this._canvas=null,this._context=null,this._sto=null,this._width=0,this._height=0,this._scroll=0,this._ribbons=[],this._options={colorSaturation:"80%",colorBrightness:"60%",colorAlpha:.65,colorCycleSpeed:6,verticalPosition:"center",horizontalSpeed:150,ribbonCount:3,strokeSize:0,parallaxAmount:-.5,animateSections:!0},this._onDraw=this._onDraw.bind(this),this._onResize=this._onResize.bind(this),this._onScroll=this._onScroll.bind(this),this.setOptions(t),this.init()};return h.prototype={constructor:h,setOptions:function(t){if("object"==typeof t)for(var i in t)t.hasOwnProperty(i)&&(this._options[i]=t[i])},init:function(){try{this._canvas=document.createElement("canvas"),this._canvas.style.display="block",this._canvas.style.position="fixed",this._canvas.style.margin="0",this._canvas.style.padding="0",this._canvas.style.border="0",this._canvas.style.outline="0",this._canvas.style.left="0",this._canvas.style.top="0",this._canvas.style.width="100%",this._canvas.style.height="100%",this._canvas.style["z-index"]="-1",this._onResize(),this._context=this._canvas.getContext("2d"),this._context.clearRect(0,0,this._width,this._height),this._context.globalAlpha=this._options.colorAlpha,window.addEventListener("resize",this._onResize),document.body.appendChild(this._canvas)}catch(t){return void console.warn("Canvas Context Error: "+t.toString())}this._onDraw()},addRibbon:function(){var t=Math.round(o(1,9))>5?"right":"left",i=1e3,n=this._width+200,s=0,h=0,a="right"===t?-200:n,r=Math.round(o(0,this._height));/^(top|min)$/i.test(this._options.verticalPosition)?r=200:/^(middle|center)$/i.test(this._options.verticalPosition)?r=this._height/2:/^(bottom|max)$/i.test(this._options.verticalPosition)&&(r=this._height-200);for(var l=[],c=new e(a,r),d=new e(a,r),p=null,_=Math.round(o(0,360)),u=0;!(i<=0);){if(i--,s=Math.round((1*Math.random()-.2)*this._options.horizontalSpeed),h=Math.round((1*Math.random()-.5)*(.25*this._height)),(p=new e).copy(d),"right"===t){if(p.add(s,h),d.x>=n)break}else if("left"===t&&(p.subtract(s,h),d.x<=-200))break;l.push({point1:new e(c.x,c.y),point2:new e(d.x,d.y),point3:p,color:_,delay:u,dir:t,alpha:0,phase:0}),c.copy(d),d.copy(p),u+=4,_+=this._options.colorCycleSpeed}this._ribbons.push(l)},_drawRibbonSection:function(t){if(t){if(t.phase>=1&&t.alpha<=0)return!0;if(t.delay<=0){if(t.phase+=.02,t.alpha=1*Math.sin(t.phase),t.alpha=t.alpha<=0?0:t.alpha,t.alpha=t.alpha>=1?1:t.alpha,this._options.animateSections){var i=.1*Math.sin(1+t.phase*Math.PI/2);"right"===t.dir?(t.point1.add(i,0),t.point2.add(i,0),t.point3.add(i,0)):(t.point1.subtract(i,0),t.point2.subtract(i,0),t.point3.subtract(i,0)),t.point1.add(0,i),t.point2.add(0,i),t.point3.add(0,i)}}else t.delay-=.5;var n=this._options.colorSaturation,o=this._options.colorBrightness,s="hsla("+t.color+", "+n+", "+o+", "+t.alpha+" )";this._context.save(),0!==this._options.parallaxAmount&&this._context.translate(0,this._scroll*this._options.parallaxAmount),this._context.beginPath(),this._context.moveTo(t.point1.x,t.point1.y),this._context.lineTo(t.point2.x,t.point2.y),this._context.lineTo(t.point3.x,t.point3.y),this._context.fillStyle=s,this._context.fill(),this._options.strokeSize>0&&(this._context.lineWidth=this._options.strokeSize,this._context.strokeStyle=s,this._context.lineCap="round",this._context.stroke()),this._context.restore()}return!1},_onDraw:function(){for(var t=0,i=this._ribbons.length;t<i;++t)this._ribbons[t]||this._ribbons.splice(t,1);this._context.clearRect(0,0,this._width,this._height);for(var n=0;n<this._ribbons.length;++n){for(var o=this._ribbons[n],s=o.length,e=0,h=0;h<s;++h)this._drawRibbonSection(o[h])&&e++;e>=s&&(this._ribbons[n]=null)}this._ribbons.length<this._options.ribbonCount&&this.addRibbon(),requestAnimationFrame(this._onDraw)},_onResize:function(t){var i=s();this._width=i.width,this._height=i.height,this._canvas&&(this._canvas.width=this._width,this._canvas.height=this._height,this._context&&(this._context.globalAlpha=this._options.colorAlpha))},_onScroll:function(t){var i=s();this._scroll=i.scrolly}},h}()); !function(t){t.fn.circleMagic=function(i){var n,o,s,e,h=!0,a=[],r=t.extend({color:"rgba(255,255,255,.5)",radius:10,density:.3,clearOffset:.2},i),l=this[0];function c(){n=l.clientWidth,o=l.clientHeight,l.height=o+"px",s.width=n,s.height=o}function d(){if(h)for(var t in e.clearRect(0,0,n,o),a)a[t].draw();requestAnimationFrame(d)}function p(){var t=this;function i(){t.pos.x=Math.random()*n,t.pos.y=o+100*Math.random(),t.alpha=.1+Math.random()*r.clearOffset,t.scale=.1+.3*Math.random(),t.speed=Math.random(),"random"===r.color?t.color="rgba("+Math.floor(255*Math.random())+", "+Math.floor(255*Math.random())+", "+Math.floor(255*Math.random())+", "+Math.random().toPrecision(2)+")":t.color=r.color}t.pos={},i(),this.draw=function(){t.alpha<=0&&i(),t.pos.y-=t.speed,t.alpha-=5e-4,e.beginPath(),e.arc(t.pos.x,t.pos.y,t.scale*r.radius,0,2*Math.PI,!1),e.fillStyle=t.color,e.fill(),e.closePath()}}!function(){n=l.offsetWidth,o=l.offsetHeight,t=document.createElement("canvas"),t.id="canvas",l.appendChild(t),t.parentElement.style.overflow="hidden",(s=document.getElementById("canvas")).width=n,s.height=o,s.style.position="absolute",s.style.left="0",s.style.bottom="0",e=s.getContext("2d");var t;for(var i=0;i<n*r.density;i++){var h=new p;a.push(h)}d()}(),window.addEventListener("resize",c,!1)}}($),"object"==typeof window&&(window.Ribbons=function(){var t=window,i=document.body,n=document.documentElement,o=function(){if(1===arguments.length){if(Array.isArray(arguments[0])){var t=Math.round(o(0,arguments[0].length-1));return arguments[0][t]}return o(0,arguments[0])}return 2===arguments.length?Math.random()*(arguments[1]-arguments[0])+arguments[0]:0},s=function(o){var s=Math.max(0,t.innerWidth||n.clientWidth||i.clientWidth||0),e=Math.max(0,t.innerHeight||n.clientHeight||i.clientHeight||0);return{width:s,height:e,ratio:s/e,centerx:s/2,centery:e/2,scrollx:Math.max(0,t.pageXOffset||n.scrollLeft||i.scrollLeft||0)-(n.clientLeft||0),scrolly:Math.max(0,t.pageYOffset||n.scrollTop||i.scrollTop||0)-(n.clientTop||0)}},e=function(t,i){this.x=0,this.y=0,this.set(t,i)};e.prototype={constructor:e,set:function(t,i){this.x=t||0,this.y=i||0},copy:function(t){return this.x=t.x||0,this.y=t.y||0,this},multiply:function(t,i){return this.x*=t||1,this.y*=i||1,this},divide:function(t,i){return this.x/=t||1,this.y/=i||1,this},add:function(t,i){return this.x+=t||0,this.y+=i||0,this},subtract:function(t,i){return this.x-=t||0,this.y-=i||0,this},clampX:function(t,i){return this.x=Math.max(t,Math.min(this.x,i)),this},clampY:function(t,i){return this.y=Math.max(t,Math.min(this.y,i)),this},flipX:function(){return this.x*=-1,this},flipY:function(){return this.y*=-1,this}};var h=function(t){this._canvas=null,this._context=null,this._sto=null,this._width=0,this._height=0,this._scroll=0,this._ribbons=[],this._options={colorSaturation:"80%",colorBrightness:"60%",colorAlpha:.65,colorCycleSpeed:6,verticalPosition:"center",horizontalSpeed:150,ribbonCount:3,strokeSize:0,parallaxAmount:-.5,animateSections:!0},this._onDraw=this._onDraw.bind(this),this._onResize=this._onResize.bind(this),this._onScroll=this._onScroll.bind(this),this.setOptions(t),this.init()};return h.prototype={constructor:h,setOptions:function(t){if("object"==typeof t)for(var i in t)t.hasOwnProperty(i)&&(this._options[i]=t[i])},init:function(){try{this._canvas=document.createElement("canvas"),this._canvas.style.display="block",this._canvas.style.position="fixed",this._canvas.style.margin="0",this._canvas.style.padding="0",this._canvas.style.border="0",this._canvas.style.outline="0",this._canvas.style.left="0",this._canvas.style.top="0",this._canvas.style.width="100%",this._canvas.style.height="100%",this._canvas.style["z-index"]="-1",this._onResize(),this._context=this._canvas.getContext("2d"),this._context.clearRect(0,0,this._width,this._height),this._context.globalAlpha=this._options.colorAlpha,window.addEventListener("resize",this._onResize),document.body.appendChild(this._canvas)}catch(t){return void console.warn("Canvas Context Error: "+t.toString())}this._onDraw()},addRibbon:function(){var t=Math.round(o(1,9))>5?"right":"left",i=1e3,n=this._width+200,s=0,h=0,a="right"===t?-200:n,r=Math.round(o(0,this._height));/^(top|min)$/i.test(this._options.verticalPosition)?r=200:/^(middle|center)$/i.test(this._options.verticalPosition)?r=this._height/2:/^(bottom|max)$/i.test(this._options.verticalPosition)&&(r=this._height-200);for(var l=[],c=new e(a,r),d=new e(a,r),p=null,_=Math.round(o(0,360)),u=0;!(i<=0);){if(i--,s=Math.round((1*Math.random()-.2)*this._options.horizontalSpeed),h=Math.round((1*Math.random()-.5)*(.25*this._height)),(p=new e).copy(d),"right"===t){if(p.add(s,h),d.x>=n)break}else if("left"===t&&(p.subtract(s,h),d.x<=-200))break;l.push({point1:new e(c.x,c.y),point2:new e(d.x,d.y),point3:p,color:_,delay:u,dir:t,alpha:0,phase:0}),c.copy(d),d.copy(p),u+=4,_+=this._options.colorCycleSpeed}this._ribbons.push(l)},_drawRibbonSection:function(t){if(t){if(t.phase>=1&&t.alpha<=0)return!0;if(t.delay<=0){if(t.phase+=.02,t.alpha=1*Math.sin(t.phase),t.alpha=t.alpha<=0?0:t.alpha,t.alpha=t.alpha>=1?1:t.alpha,this._options.animateSections){var i=.1*Math.sin(1+t.phase*Math.PI/2);"right"===t.dir?(t.point1.add(i,0),t.point2.add(i,0),t.point3.add(i,0)):(t.point1.subtract(i,0),t.point2.subtract(i,0),t.point3.subtract(i,0)),t.point1.add(0,i),t.point2.add(0,i),t.point3.add(0,i)}}else t.delay-=.5;var n=this._options.colorSaturation,o=this._options.colorBrightness,s="hsla("+t.color+", "+n+", "+o+", "+t.alpha+" )";this._context.save(),0!==this._options.parallaxAmount&&this._context.translate(0,this._scroll*this._options.parallaxAmount),this._context.beginPath(),this._context.moveTo(t.point1.x,t.point1.y),this._context.lineTo(t.point2.x,t.point2.y),this._context.lineTo(t.point3.x,t.point3.y),this._context.fillStyle=s,this._context.fill(),this._options.strokeSize>0&&(this._context.lineWidth=this._options.strokeSize,this._context.strokeStyle=s,this._context.lineCap="round",this._context.stroke()),this._context.restore()}return!1},_onDraw:function(){for(var t=0,i=this._ribbons.length;t<i;++t)this._ribbons[t]||this._ribbons.splice(t,1);this._context.clearRect(0,0,this._width,this._height);for(var n=0;n<this._ribbons.length;++n){for(var o=this._ribbons[n],s=o.length,e=0,h=0;h<s;++h)this._drawRibbonSection(o[h])&&e++;e>=s&&(this._ribbons[n]=null)}this._ribbons.length<this._options.ribbonCount&&this.addRibbon(),requestAnimationFrame(this._onDraw)},_onResize:function(t){var i=s();this._width=i.width,this._height=i.height,this._canvas&&(this._canvas.width=this._width,this._canvas.height=this._height,this._context&&(this._context.globalAlpha=this._options.colorAlpha))},_onScroll:function(t){var i=s();this._scroll=i.scrolly}},h}());
\ No newline at end of file
...@@ -69,7 +69,7 @@ ...@@ -69,7 +69,7 @@
<img src="${article.authorThumbnailURL}" /> <img src="${article.authorThumbnailURL}" />
</a> </a>
<#if commentable> <#if commentable>
<a class="item__meta" href="${servePath}${article.articlePermalink}#comments"> <a class="item__meta" href="${servePath}${article.articlePermalink}#b3logsolocomments">
<span data-uvstatcmt="${article.oId}"><span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span></span> ${commentLabel} <span data-uvstatcmt="${article.oId}"><span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span></span> ${commentLabel}
</a> </a>
<#else> <#else>
......
...@@ -86,6 +86,7 @@ ...@@ -86,6 +86,7 @@
</div> </div>
</#if> </#if>
<#if commentable> <#if commentable>
<div id="b3logsolocomments"></div>
<div id="vcomment" class="comment__wrapper wrapper" style="margin: 40px auto" data-name="${article.authorName}" data-postId="${article.oId}"></div> <div id="vcomment" class="comment__wrapper wrapper" style="margin: 40px auto" data-name="${article.authorName}" data-postId="${article.oId}"></div>
<#if !staticSite> <#if !staticSite>
<div id="soloComments" style="display: none;"> <div id="soloComments" style="display: none;">
......
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
</li> </li>
<#if commentable> <#if commentable>
<li> <li>
<a rel="nofollow" title="${commentLabel}" href="${servePath}${article.articlePermalink}#comments"> <a rel="nofollow" title="${commentLabel}" href="${servePath}${article.articlePermalink}#b3logsolocomments">
${commentLabel} (<span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span>) ${commentLabel} (<span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span>)
</a> </a>
</li> </li>
......
...@@ -64,7 +64,7 @@ ...@@ -64,7 +64,7 @@
</li> </li>
<#if commentable> <#if commentable>
<li> <li>
<a rel="nofollow" title="${commentLabel}" href="${servePath}${article.articlePermalink}#comments"> <a rel="nofollow" title="${commentLabel}" href="${servePath}${article.articlePermalink}#b3logsolocomments">
${commentLabel} (<span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span>) ${commentLabel} (<span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span>)
</a> </a>
</li> </li>
...@@ -122,9 +122,8 @@ ...@@ -122,9 +122,8 @@
</div> </div>
</div> </div>
<#if commentable> <#if commentable>
<div id="vcomment" style="margin-bottom: 40px; <div id="b3logsolocomments"></div>
border-top: 1px solid #dcdcdc; <div id="vcomment" style="margin-bottom: 40px;border-top: 1px solid #dcdcdc;padding-top: 30px;" data-name="${article.authorName}" data-postId="${article.oId}"></div>
padding-top: 30px;" data-name="${article.authorName}" data-postId="${article.oId}"></div>
<#if !staticSite> <#if !staticSite>
<div id="soloComments" style="display: none;"> <div id="soloComments" style="display: none;">
<@comments commentList=articleComments article=article></@comments> <@comments commentList=articleComments article=article></@comments>
......
...@@ -102,6 +102,7 @@ ...@@ -102,6 +102,7 @@
<div id="externalRelevantArticles" class="fn-wrap"></div> <div id="externalRelevantArticles" class="fn-wrap"></div>
</#if> </#if>
<#if commentable> <#if commentable>
<div id="b3logsolocomments"></div>
<div id="vcomment" style="margin-top: 100px" class="fn-wrap" data-name="${article.authorName}" data-postId="${article.oId}"></div> <div id="vcomment" style="margin-top: 100px" class="fn-wrap" data-name="${article.authorName}" data-postId="${article.oId}"></div>
<#if !staticSite> <#if !staticSite>
<div id="soloComments" style="display: none;"> <div id="soloComments" style="display: none;">
......
...@@ -49,7 +49,7 @@ ...@@ -49,7 +49,7 @@
</span> </span>
<div class="fn__right"> <div class="fn__right">
<#if commentable> <#if commentable>
<a class="ft__red" href="${servePath}${article.articlePermalink}#comments"><span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span> ${commentLabel}</a> <a class="ft__red" href="${servePath}${article.articlePermalink}#b3logsolocomments"><span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span> ${commentLabel}</a>
</#if> </#if>
<a class="ft__red" href="${servePath}${article.articlePermalink}"><span data-uvstaturl="${servePath}${article.articlePermalink}">${article.articleViewCount}</span> ${viewLabel}</a> <a class="ft__red" href="${servePath}${article.articlePermalink}"><span data-uvstaturl="${servePath}${article.articlePermalink}">${article.articleViewCount}</span> ${viewLabel}</a>
......
...@@ -63,7 +63,7 @@ ...@@ -63,7 +63,7 @@
</span> </span>
<div class="fn__right"> <div class="fn__right">
<#if commentable> <#if commentable>
<a class="ft__red" href="${servePath}${article.articlePermalink}#comments"><span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span> ${commentLabel}</a> <a class="ft__red" href="${servePath}${article.articlePermalink}#b3logsolocomments"><span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span> ${commentLabel}</a>
</#if> </#if>
<span data-uvstaturl="${servePath}${article.articlePermalink}">${article.articleViewCount}</span> ${viewLabel} <span data-uvstaturl="${servePath}${article.articlePermalink}">${article.articleViewCount}</span> ${viewLabel}
...@@ -102,6 +102,7 @@ ...@@ -102,6 +102,7 @@
</#if> </#if>
</div> </div>
<#if commentable> <#if commentable>
<div id="b3logsolocomments"></div>
<div id="vcomment" data-name="${article.authorName}" data-postId="${article.oId}"></div> <div id="vcomment" data-name="${article.authorName}" data-postId="${article.oId}"></div>
<#if !staticSite> <#if !staticSite>
<div id="soloComments" style="display: none;"> <div id="soloComments" style="display: none;">
......
...@@ -56,7 +56,7 @@ ...@@ -56,7 +56,7 @@
${article.articleUpdateDate?string("yyyy-MM-dd")} ${article.articleUpdateDate?string("yyyy-MM-dd")}
</time> &nbsp;•&nbsp; </time> &nbsp;•&nbsp;
<#if commentable> <#if commentable>
<a href="${servePath}${article.articlePermalink}#comments" class="ft-gray"> <a href="${servePath}${article.articlePermalink}#b3logsolocomments" class="ft-gray">
<span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span> ${commentLabel} <span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span> ${commentLabel}
</a> &nbsp;•&nbsp; </a> &nbsp;•&nbsp;
</#if> </#if>
......
...@@ -119,6 +119,7 @@ ...@@ -119,6 +119,7 @@
<div class="fn-flex-1" id="randomArticles"></div> <div class="fn-flex-1" id="randomArticles"></div>
</div> </div>
<#if commentable> <#if commentable>
<div id="b3logsolocomments"></div>
<div id="vcomment" class="article__comment" data-name="${article.authorName}" data-postId="${article.oId}"></div> <div id="vcomment" class="article__comment" data-name="${article.authorName}" data-postId="${article.oId}"></div>
<#if !staticSite> <#if !staticSite>
<div id="soloComments" style="display: none;"> <div id="soloComments" style="display: none;">
......
...@@ -54,7 +54,7 @@ ...@@ -54,7 +54,7 @@
</div> </div>
<div class="right article-element"> <div class="right article-element">
<#if commentable> <#if commentable>
<a rel="nofollow" href="${servePath}${article.articlePermalink}#comments"> <a rel="nofollow" href="${servePath}${article.articlePermalink}#b3logsolocomments">
<span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span>&nbsp;&nbsp;${commentLabel} <span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span>&nbsp;&nbsp;${commentLabel}
</a>&nbsp;&nbsp; </a>&nbsp;&nbsp;
</#if> </#if>
......
...@@ -61,7 +61,7 @@ ...@@ -61,7 +61,7 @@
</div> </div>
<div class="right article-element"> <div class="right article-element">
<#if commentable> <#if commentable>
<a rel="nofollow" href="${servePath}${article.articlePermalink}#comments"> <a rel="nofollow" href="${servePath}${article.articlePermalink}#b3logsolocomments">
<span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span>&nbsp;&nbsp;${commentLabel} <span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span>&nbsp;&nbsp;${commentLabel}
</a>&nbsp;&nbsp; </a>&nbsp;&nbsp;
</#if> </#if>
...@@ -107,6 +107,7 @@ ...@@ -107,6 +107,7 @@
</div> </div>
</div> </div>
<#if commentable> <#if commentable>
<div id="b3logsolocomments"></div>
<div id="vcomment" style="margin:15px 5px 0 5px;padding: 10px;background-color: #F5F5F5;box-sizing: border-box" <div id="vcomment" style="margin:15px 5px 0 5px;padding: 10px;background-color: #F5F5F5;box-sizing: border-box"
data-name="${article.authorName}" data-postId="${article.oId}"></div> data-name="${article.authorName}" data-postId="${article.oId}"></div>
<#if !staticSite> <#if !staticSite>
......
...@@ -64,7 +64,7 @@ ...@@ -64,7 +64,7 @@
</#if> </#if>
with <span data-uvstaturl="${servePath}${article.articlePermalink}">${article.articleViewCount}</span> views with <span data-uvstaturl="${servePath}${article.articlePermalink}">${article.articleViewCount}</span> views
<#if commentable> <#if commentable>
and <a href="#comments"><span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span> comments</a> and <a href="#b3logsolocomments"><span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span> comments</a>
</#if> </#if>
</div> </div>
<div class="item__tags"> <div class="item__tags">
...@@ -91,6 +91,7 @@ ...@@ -91,6 +91,7 @@
<div class="body--gray post__gray"> <div class="body--gray post__gray">
<div class="wrapper comment"> <div class="wrapper comment">
<#if commentable> <#if commentable>
<div id="b3logsolocomments"></div>
<div id="vcomment" style="padding: 30px 0;" data-name="${article.authorName}" data-postId="${article.oId}"></div> <div id="vcomment" style="padding: 30px 0;" data-name="${article.authorName}" data-postId="${article.oId}"></div>
<#if !staticSite> <#if !staticSite>
<div id="soloComments" style="display: none;"> <div id="soloComments" style="display: none;">
......
...@@ -68,7 +68,7 @@ ...@@ -68,7 +68,7 @@
</#list> </#list>
</div> </div>
<#if commentable> <#if commentable>
<a rel="nofollow" href="${servePath}${article.articlePermalink}#comments" class="left"> <a rel="nofollow" href="${servePath}${article.articlePermalink}#b3logsolocomments" class="left">
<span class="left articles-commentIcon" title="${commentLabel}"></span> <span class="left articles-commentIcon" title="${commentLabel}"></span>
<span class="count" data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span> <span class="count" data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span>
</a> </a>
......
...@@ -89,12 +89,12 @@ ...@@ -89,12 +89,12 @@
</span> </span>
</#list> </#list>
</div> </div>
<a rel="nofollow" href="${servePath}${article.articlePermalink}#comments" class="left"> <a rel="nofollow" href="${servePath}${article.articlePermalink}#b3logsolocomments" class="left">
<span class="left articles-commentIcon" title="${commentLabel}"></span> <span class="left articles-commentIcon" title="${commentLabel}"></span>
<span class="count" data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span> <span class="count" data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span>
</a> </a>
<div class="right"> <div class="right">
<a rel="nofollow" href="#comments" class="right"> <a rel="nofollow" href="#b3logsolocomments" class="right">
${replyLabel} ${replyLabel}
</a> </a>
</div> </div>
...@@ -120,6 +120,7 @@ ...@@ -120,6 +120,7 @@
<div id="externalRelevantArticles" class="article-relative"></div> <div id="externalRelevantArticles" class="article-relative"></div>
</div> </div>
<#if commentable> <#if commentable>
<div id="b3logsolocomments"></div>
<div id="vcomment" <div id="vcomment"
class="comments" class="comments"
style="padding-top: 15px" style="padding-top: 15px"
......
...@@ -49,7 +49,7 @@ ...@@ -49,7 +49,7 @@
</div> </div>
<#if commentable> <#if commentable>
<div class="right"> <div class="right">
<a rel="nofollow" href="${servePath}${article.articlePermalink}#comments" class="left"> <a rel="nofollow" href="${servePath}${article.articlePermalink}#b3logsolocomments" class="left">
<span class="left articles-commentIcon" title="${commentLabel}"></span> <span class="left articles-commentIcon" title="${commentLabel}"></span>
<span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span> <span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span>
</a> </a>
......
...@@ -62,7 +62,7 @@ ...@@ -62,7 +62,7 @@
</div> </div>
<#if commentable> <#if commentable>
<div class="right"> <div class="right">
<a rel="nofollow" href="${servePath}${article.articlePermalink}#comments" class="left"> <a rel="nofollow" href="${servePath}${article.articlePermalink}#b3logsolocomments" class="left">
<span class="left articles-commentIcon" title="${commentLabel}"></span> <span class="left articles-commentIcon" title="${commentLabel}"></span>
<span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span> <span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span>
</a> </a>
...@@ -113,6 +113,7 @@ ...@@ -113,6 +113,7 @@
<div id="externalRelevantArticles" class="article-relative"></div> <div id="externalRelevantArticles" class="article-relative"></div>
</div> </div>
<#if commentable> <#if commentable>
<div id="b3logsolocomments"></div>
<div id="vcomment" class="comments" <div id="vcomment" class="comments"
style="padding-top: 15px" style="padding-top: 15px"
data-name="${article.authorName}" data-postId="${article.oId}"></div> data-name="${article.authorName}" data-postId="${article.oId}"></div>
......
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
</div> </div>
<div class="fn-right"> <div class="fn-right">
<#if commentable> <#if commentable>
<a rel="nofollow" data-ico="&#xe14e;" data-uvstatcmt="${article.oId}" href="${servePath}${article.articlePermalink}#comments"> <a rel="nofollow" data-ico="&#xe14e;" data-uvstatcmt="${article.oId}" href="${servePath}${article.articlePermalink}#b3logsolocomments">
${article.articleCommentCount} ${article.articleCommentCount}
</a> </a>
</#if> </#if>
......
...@@ -59,7 +59,7 @@ ...@@ -59,7 +59,7 @@
</div> </div>
<div class="article-info"> <div class="article-info">
<#if commentable> <#if commentable>
<a rel="nofollow" data-ico="&#xe14e;" href="${servePath}${article.articlePermalink}#comments"> <a rel="nofollow" data-ico="&#xe14e;" href="${servePath}${article.articlePermalink}#b3logsolocomments">
<span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span> <span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span>
</a> </a>
</#if> </#if>
...@@ -81,6 +81,7 @@ ...@@ -81,6 +81,7 @@
</#if> </#if>
</div> </div>
<#if commentable> <#if commentable>
<div id="b3logsolocomments"></div>
<div id="vcomment" data-name="${article.authorName}" data-postId="${article.oId}"></div> <div id="vcomment" data-name="${article.authorName}" data-postId="${article.oId}"></div>
<#if !staticSite> <#if !staticSite>
<div id="soloComments" style="display: none;"> <div id="soloComments" style="display: none;">
......
...@@ -348,11 +348,11 @@ ...@@ -348,11 +348,11 @@
-webkit-animation-timing-function: cubic-bezier(0.2, 0, 0.13, 1.5); -webkit-animation-timing-function: cubic-bezier(0.2, 0, 0.13, 1.5);
animation-timing-function: cubic-bezier(0.2, 0, 0.13, 1.5); } animation-timing-function: cubic-bezier(0.2, 0, 0.13, 1.5); }
.vditor-panel--none { .vditor-panel--none {
color: #4285f4; color: #fff;
padding: 0; padding: 0;
-webkit-animation: none; -webkit-animation: none;
animation: none; animation: none;
background-color: #f6f8fa; background-color: #2c2c2c;
min-width: auto; min-width: auto;
max-width: none; } max-width: none; }
.vditor-panel h1, .vditor-panel h2, .vditor-panel h3, .vditor-panel h4, .vditor-panel h5, .vditor-panel h6 { .vditor-panel h1, .vditor-panel h2, .vditor-panel h3, .vditor-panel h4, .vditor-panel h5, .vditor-panel h6 {
...@@ -362,19 +362,19 @@ ...@@ -362,19 +362,19 @@
border-radius: 3px; border-radius: 3px;
line-height: normal; } line-height: normal; }
.vditor-panel h1:hover, .vditor-panel h2:hover, .vditor-panel h3:hover, .vditor-panel h4:hover, .vditor-panel h5:hover, .vditor-panel h6:hover { .vditor-panel h1:hover, .vditor-panel h2:hover, .vditor-panel h3:hover, .vditor-panel h4:hover, .vditor-panel h5:hover, .vditor-panel h6:hover {
background-color: #4285f4; background-color: #2c2c2c;
color: #fff; } color: #fff; }
.vditor-input { .vditor-input {
border: 0; border: 0;
padding: 3px 5px; padding: 3px 5px;
background-color: #f6f8fa; } background-color: #2c2c2c; }
.vditor-input:focus { .vditor-input:focus {
background-color: #fff; background-color: #fff;
outline: none; } outline: none; }
.vditor-icon { .vditor-icon {
color: #586069; color: #b9b9b9;
cursor: pointer; cursor: pointer;
float: left; float: left;
padding: 2px 5px; padding: 2px 5px;
...@@ -384,7 +384,7 @@ ...@@ -384,7 +384,7 @@
border: 0; border: 0;
box-sizing: border-box; } box-sizing: border-box; }
.vditor-icon:hover, .vditor-icon--current { .vditor-icon:hover, .vditor-icon--current {
color: #4285f4; color: #fff;
background-color: transparent; } background-color: transparent; }
.vditor-icon:focus { .vditor-icon:focus {
outline: none; } outline: none; }
...@@ -401,8 +401,8 @@ ...@@ -401,8 +401,8 @@
* @version 0.1.2.0, Jun 20, 2019 * @version 0.1.2.0, Jun 20, 2019
*/ */
.vditor-toolbar { .vditor-toolbar {
background-color: #f6f8fa; background-color: #2c2c2c;
border-bottom: 1px solid #d1d5da; border-bottom: 1px solid #fff;
padding: 0 5px; padding: 0 5px;
border-radius: 3px 3px 0 0; } border-radius: 3px 3px 0 0; }
.vditor-toolbar > div { .vditor-toolbar > div {
...@@ -418,9 +418,9 @@ ...@@ -418,9 +418,9 @@
.vditor-toolbar > div > .vditor-tooltipped:focus { .vditor-toolbar > div > .vditor-tooltipped:focus {
outline: none; } outline: none; }
.vditor-toolbar .vditor-tooltipped { .vditor-toolbar .vditor-tooltipped {
color: #586069; } color: #b9b9b9; }
.vditor-toolbar .vditor-tooltipped:hover { .vditor-toolbar .vditor-tooltipped:hover {
color: #4285f4; } color: #fff; }
.vditor-toolbar svg { .vditor-toolbar svg {
fill: currentColor; fill: currentColor;
display: inline-block; display: inline-block;
...@@ -439,7 +439,7 @@ ...@@ -439,7 +439,7 @@
overflow: hidden; } overflow: hidden; }
.vditor-menu--current svg { .vditor-menu--current svg {
color: #4285f4; } color: #fff; }
.vditor-menu__divider { .vditor-menu__divider {
width: 10px; width: 10px;
...@@ -451,7 +451,7 @@ ...@@ -451,7 +451,7 @@
height: 0 !important; } height: 0 !important; }
.vditor-menu--disabled svg { .vditor-menu--disabled svg {
color: rgba(88, 96, 105, 0.6); color: rgba(185, 185, 185, 0.6);
cursor: not-allowed; } cursor: not-allowed; }
.vditor-emojis { .vditor-emojis {
...@@ -464,21 +464,21 @@ ...@@ -464,21 +464,21 @@
flex: 1; flex: 1;
width: 200px; width: 200px;
margin-right: 10px; margin-right: 10px;
color: #586069; color: #b9b9b9;
white-space: nowrap; white-space: nowrap;
text-overflow: ellipsis; text-overflow: ellipsis;
overflow: hidden; } overflow: hidden; }
.vditor-emojis__tail { .vditor-emojis__tail {
margin-top: 5px; margin-top: 5px;
font-size: 12px; font-size: 12px;
color: #586069; color: #b9b9b9;
display: -webkit-box; display: -webkit-box;
display: flex; } display: flex; }
.vditor-emojis__tail a { .vditor-emojis__tail a {
text-decoration: none; text-decoration: none;
color: #586069; } color: #b9b9b9; }
.vditor-emojis__tail a:hover { .vditor-emojis__tail a:hover {
color: #4285f4; } color: #2c2c2c; }
.vditor-emojis button { .vditor-emojis button {
cursor: pointer; cursor: pointer;
border-radius: 3px; border-radius: 3px;
...@@ -532,7 +532,7 @@ ...@@ -532,7 +532,7 @@
-webkit-box-orient: vertical; -webkit-box-orient: vertical;
-webkit-box-direction: normal; -webkit-box-direction: normal;
flex-direction: column; flex-direction: column;
border: 1px solid #d1d5da; border: 1px solid #fff;
border-radius: 3px; border-radius: 3px;
box-sizing: border-box; box-sizing: border-box;
font-family: "Helvetica Neue", "Luxi Sans", "DejaVu Sans", Tahoma, "Hiragino Sans GB", "Microsoft Yahei", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji", "Segoe UI Symbol", "Android Emoji", "EmojiSymbols"; } font-family: "Helvetica Neue", "Luxi Sans", "DejaVu Sans", Tahoma, "Hiragino Sans GB", "Microsoft Yahei", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji", "Segoe UI Symbol", "Android Emoji", "EmojiSymbols"; }
...@@ -563,11 +563,11 @@ ...@@ -563,11 +563,11 @@
resize: none; resize: none;
padding: 10px 9px 10px 10px; padding: 10px 9px 10px 10px;
box-sizing: border-box; box-sizing: border-box;
background-color: #fafbfc; background-color: #fff;
outline: 0 none; outline: 0 none;
font-size: 16px; font-size: 16px;
line-height: 22px; line-height: 22px;
color: #24292e; color: rgba(0, 0, 0, 0.8);
border-radius: 0 0 3px 3px; border-radius: 0 0 3px 3px;
font-variant-ligatures: no-common-ligatures; font-variant-ligatures: no-common-ligatures;
white-space: pre-wrap; white-space: pre-wrap;
...@@ -580,15 +580,15 @@ ...@@ -580,15 +580,15 @@
background-color: #fff; } background-color: #fff; }
.vditor-textarea:empty::before { .vditor-textarea:empty::before {
content: attr(placeholder); content: attr(placeholder);
color: rgba(36, 41, 46, 0.68); } color: rgba(0, 0, 0, 0.68); }
.vditor-preview { .vditor-preview {
-webkit-box-flex: 1; -webkit-box-flex: 1;
flex: 1; flex: 1;
background-color: #fff; background-color: #f3f3f3;
overflow: auto; overflow: auto;
margin-left: -1px; margin-left: -1px;
padding: 10px; padding: 10px;
box-shadow: inset 1px 0 #d1d5da; box-shadow: inset 1px 0 #fff;
box-sizing: border-box; box-sizing: border-box;
border-radius: 0 0 3px 0; } border-radius: 0 0 3px 0; }
.vditor-preview > div::-webkit-scrollbar { .vditor-preview > div::-webkit-scrollbar {
...@@ -597,11 +597,11 @@ ...@@ -597,11 +597,11 @@
margin: 0 auto; } margin: 0 auto; }
.vditor-devtools { .vditor-devtools {
display: none; display: none;
background-color: #fff; background-color: #f3f3f3;
overflow: auto; overflow: auto;
-webkit-box-flex: 1; -webkit-box-flex: 1;
flex: 1; flex: 1;
box-shadow: inset 1px 0 #d1d5da; box-shadow: inset 1px 0 #fff;
box-sizing: border-box; box-sizing: border-box;
border-radius: 0 0 3px 0; border-radius: 0 0 3px 0;
padding: 10px; } padding: 10px; }
...@@ -610,7 +610,7 @@ ...@@ -610,7 +610,7 @@
position: absolute; position: absolute;
bottom: 10px; bottom: 10px;
right: 20px; right: 20px;
color: #24292e; color: rgba(0, 0, 0, 0.8);
background-color: rgba(255, 255, 255, 0.6); background-color: rgba(255, 255, 255, 0.6);
border-radius: 3px; border-radius: 3px;
font-size: 12px; font-size: 12px;
...@@ -638,11 +638,11 @@ ...@@ -638,11 +638,11 @@
bottom: -3px; } bottom: -3px; }
.vditor-resize > div { .vditor-resize > div {
height: 3px; height: 3px;
background-color: #f6f8fa; background-color: #f3f3f3;
-webkit-transition: all 0.15s ease-in-out; -webkit-transition: all 0.15s ease-in-out;
transition: all 0.15s ease-in-out; } transition: all 0.15s ease-in-out; }
.vditor-resize:hover > div, .vditor-resize--selected > div { .vditor-resize:hover > div, .vditor-resize--selected > div {
background-color: #4285f4; } background-color: #2c2c2c; }
.vditor-resize:hover svg, .vditor-resize--selected svg { .vditor-resize:hover svg, .vditor-resize--selected svg {
color: #fff; } color: #fff; }
.vditor-resize svg { .vditor-resize svg {
...@@ -653,7 +653,7 @@ ...@@ -653,7 +653,7 @@
height: 3px; height: 3px;
display: block; display: block;
margin: 0 auto; margin: 0 auto;
color: #586069; } color: #b9b9b9; }
.vditor-upload { .vditor-upload {
position: absolute; position: absolute;
height: 3px; height: 3px;
...@@ -661,7 +661,7 @@ ...@@ -661,7 +661,7 @@
top: -2px; top: -2px;
-webkit-transition: all 0.15s ease-in-out; -webkit-transition: all 0.15s ease-in-out;
transition: all 0.15s ease-in-out; transition: all 0.15s ease-in-out;
background-color: rgba(66, 133, 244, 0.8); } background-color: rgba(44, 44, 44, 0.8); }
.vditor-tip { .vditor-tip {
position: absolute; position: absolute;
font-size: 12px; font-size: 12px;
...@@ -682,7 +682,7 @@ ...@@ -682,7 +682,7 @@
line-height: 16px; line-height: 16px;
padding: 3px 10px; padding: 3px 10px;
border-radius: 3px; border-radius: 3px;
background: rgba(66, 133, 244, 0.8); background: rgba(44, 44, 44, 0.8);
position: relative; position: relative;
margin-left: -50%; } margin-left: -50%; }
.vditor-tip__content ul { .vditor-tip__content ul {
...@@ -690,13 +690,83 @@ ...@@ -690,13 +690,83 @@
padding: 0 0 0 18px; } padding: 0 0 0 18px; }
.vditor-tip__close { .vditor-tip__close {
position: absolute; position: absolute;
color: #586069; color: #b9b9b9;
top: -7px; top: -7px;
right: -15px; right: -15px;
font-weight: bold; font-weight: bold;
cursor: pointer; } cursor: pointer; }
.vditor-tip__close:hover { .vditor-tip__close:hover {
color: #4285f4; } color: #fff; }
.vditor-wysiwyg {
background-color: #fff;
box-sizing: border-box;
-webkit-box-flex: 1;
flex: 1;
margin: 0;
white-space: pre-wrap;
position: relative; }
.vditor-wysiwyg[contenteditable="false"] {
opacity: 0.3;
cursor: not-allowed; }
.vditor-wysiwyg:focus {
outline: none;
background-color: #fff; }
.vditor-wysiwyg blockquote:empty::before,
.vditor-wysiwyg pre > code:empty::before {
content: ' '; }
.vditor-wysiwyg__block[data-type="html-block"] > pre,
.vditor-wysiwyg__block[data-type="math-block"] > pre {
margin-bottom: 0; }
.vditor-wysiwyg__block > pre {
margin-bottom: -1em; }
.vditor-wysiwyg__block > pre > code {
background-color: #fff !important;
border: 1px solid #fff;
overflow: auto !important; }
.vditor-wysiwyg__block[data-type=html-inline] .vditor-wysiwyg__preview svg {
fill: rgba(185, 185, 185, 0.36);
height: 12px;
cursor: pointer;
width: 12px; }
.vditor-wysiwyg__preview {
cursor: pointer;
white-space: initial;
min-height: 27px; }
.vditor-wysiwyg__preview pre {
margin-bottom: 1em !important; }
.vditor-wysiwyg h1:before,
.vditor-wysiwyg h2:before,
.vditor-wysiwyg h3:before,
.vditor-wysiwyg h4:before,
.vditor-wysiwyg h5:before,
.vditor-wysiwyg h6:before,
.vditor-wysiwyg div.vditor-wysiwyg__block:before {
float: left;
padding-right: 4px;
margin-left: -29px;
content: 'h1';
font-size: 0.85rem;
font-weight: normal;
text-transform: uppercase;
color: rgba(185, 185, 185, 0.36); }
.vditor-wysiwyg h2:before {
content: 'h2'; }
.vditor-wysiwyg h3:before {
content: 'h3'; }
.vditor-wysiwyg h4:before {
content: 'h4'; }
.vditor-wysiwyg h5:before {
content: 'h5'; }
.vditor-wysiwyg h6:before {
content: 'h6'; }
.vditor-wysiwyg div.vditor-wysiwyg__block:before {
content: "</>"; }
.vditor-wysiwyg details {
white-space: initial; }
.vditor-wysiwyg span[data-type="backslash"] > span {
display: none;
color: rgba(185, 185, 185, 0.36); }
.vditor-hint { .vditor-hint {
background-color: #fff; background-color: #fff;
...@@ -707,7 +777,7 @@ ...@@ -707,7 +777,7 @@
z-index: 4; z-index: 4;
line-height: 20px; line-height: 20px;
list-style: none; list-style: none;
color: #24292e; color: rgba(0, 0, 0, 0.8);
font-size: 12px; font-size: 12px;
margin: 0; margin: 0;
max-width: 250px; max-width: 250px;
...@@ -717,7 +787,7 @@ ...@@ -717,7 +787,7 @@
display: block; display: block;
padding: 3px 10px; padding: 3px 10px;
border: 0; border: 0;
border-bottom: 1px solid #d1d5da; border-bottom: 1px solid #fff;
line-height: 20px; line-height: 20px;
width: 100%; width: 100%;
box-sizing: border-box; box-sizing: border-box;
...@@ -728,7 +798,7 @@ ...@@ -728,7 +798,7 @@
border-bottom: 0; } border-bottom: 0; }
.vditor-hint--current, .vditor-hint--current,
.vditor-hint button:hover { .vditor-hint button:hover {
background-color: #4285f4 !important; background-color: #2c2c2c !important;
color: #fff; } color: #fff; }
.vditor-hint__emoji { .vditor-hint__emoji {
font-size: 16px; font-size: 16px;
...@@ -833,7 +903,7 @@ ...@@ -833,7 +903,7 @@
.vditor-reset ins > iframe { .vditor-reset ins > iframe {
border: 0; } border: 0; }
.vditor-reset iframe { .vditor-reset iframe {
border: 1px solid #d1d5da; border: 1px solid #fff;
max-width: 100%; max-width: 100%;
box-sizing: border-box; } box-sizing: border-box; }
.vditor-reset iframe.iframe__video { .vditor-reset iframe.iframe__video {
...@@ -892,7 +962,7 @@ ...@@ -892,7 +962,7 @@
color: #555; color: #555;
vertical-align: middle; vertical-align: middle;
background-color: #fcfcfc; background-color: #fcfcfc;
border: solid 1px #d1d5da; border: solid 1px #fff;
border-bottom-color: #bbb; border-bottom-color: #bbb;
border-radius: 3px; border-radius: 3px;
box-shadow: inset 0 -1px 0 #bbb; } box-shadow: inset 0 -1px 0 #bbb; }
...@@ -937,11 +1007,11 @@ ...@@ -937,11 +1007,11 @@
height: 14px; height: 14px;
width: 14px; width: 14px;
display: block; display: block;
background-color: #f6f8fa; background-color: #2c2c2c;
border-radius: 3px; border-radius: 3px;
padding: 3px; } padding: 3px; }
.vditor-copy svg { .vditor-copy svg {
color: #586069; color: #b9b9b9;
height: 14px; height: 14px;
width: 14px !important; width: 14px !important;
display: block; display: block;
...@@ -976,14 +1046,14 @@ ...@@ -976,14 +1046,14 @@
.vditor-speech { .vditor-speech {
position: absolute; position: absolute;
display: none; display: none;
background-color: #f6f8fa; background-color: #2c2c2c;
border: 1px solid #d1d5da; border: 1px solid #fff;
border-radius: 3px; border-radius: 3px;
padding: 3px; padding: 3px;
cursor: pointer; cursor: pointer;
color: #586069; } color: #b9b9b9; }
.vditor-speech:hover, .vditor-speech--current { .vditor-speech:hover, .vditor-speech--current {
color: #4285f4; } color: #fff; }
.vditor-speech svg { .vditor-speech svg {
height: 14px; height: 14px;
width: 14px; width: 14px;
...@@ -1012,7 +1082,7 @@ ...@@ -1012,7 +1082,7 @@
padding: 0 10px; } padding: 0 10px; }
.vditor-linkcard a { .vditor-linkcard a {
border-radius: 3px; border-radius: 3px;
background-color: #f6f8fa; background-color: #2c2c2c;
overflow: hidden; overflow: hidden;
max-height: 250px; max-height: 250px;
display: -webkit-box; display: -webkit-box;
...@@ -1024,7 +1094,7 @@ ...@@ -1024,7 +1094,7 @@
box-shadow: 0 0 3px rgba(0, 0, 0, 0.13), 0 3px 6px rgba(0, 0, 0, 0.26); box-shadow: 0 0 3px rgba(0, 0, 0, 0.13), 0 3px 6px rgba(0, 0, 0, 0.26);
text-decoration: none; } text-decoration: none; }
.vditor-linkcard a:visited .vditor-linkcard__abstract { .vditor-linkcard a:visited .vditor-linkcard__abstract {
color: rgba(88, 96, 105, 0.6); } color: rgba(185, 185, 185, 0.6); }
.vditor-linkcard__info { .vditor-linkcard__info {
padding: 10px; padding: 10px;
min-width: 200px; min-width: 200px;
...@@ -1034,7 +1104,7 @@ ...@@ -1034,7 +1104,7 @@
.vditor-linkcard__title { .vditor-linkcard__title {
font-size: 14px; font-size: 14px;
font-weight: 400; font-weight: 400;
color: #24292e; color: rgba(0, 0, 0, 0.8);
display: -webkit-box; display: -webkit-box;
display: flex; display: flex;
-webkit-box-align: center; -webkit-box-align: center;
...@@ -1055,11 +1125,11 @@ ...@@ -1055,11 +1125,11 @@
-webkit-box-orient: vertical; -webkit-box-orient: vertical;
display: -webkit-box; display: -webkit-box;
font-size: 13px; font-size: 13px;
color: #586069; color: #b9b9b9;
margin: 5px 0; } margin: 5px 0; }
.vditor-linkcard__site { .vditor-linkcard__site {
font-size: 12px; font-size: 12px;
color: #4285f4; } color: #fff; }
.vditor-linkcard__image { .vditor-linkcard__image {
background-size: cover; background-size: cover;
background-repeat: no-repeat; background-repeat: no-repeat;
...@@ -1069,76 +1139,6 @@ ...@@ -1069,76 +1139,6 @@
cursor: pointer; cursor: pointer;
background-color: #fff; } background-color: #fff; }
.vditor-wysiwyg {
background-color: #fafbfc;
box-sizing: border-box;
-webkit-box-flex: 1;
flex: 1;
margin: 0;
white-space: pre-wrap;
position: relative; }
.vditor-wysiwyg[contenteditable="false"] {
opacity: 0.3;
cursor: not-allowed; }
.vditor-wysiwyg:focus {
outline: none;
background-color: #fff; }
.vditor-wysiwyg blockquote:empty::before,
.vditor-wysiwyg pre > code:empty::before {
content: ' '; }
.vditor-wysiwyg__block[data-type="html-block"] > pre,
.vditor-wysiwyg__block[data-type="math-block"] > pre {
margin-bottom: 0; }
.vditor-wysiwyg__block > pre {
margin-bottom: -1em; }
.vditor-wysiwyg__block > pre > code {
background-color: #fff !important;
border: 1px solid #d1d5da;
overflow: auto !important; }
.vditor-wysiwyg__block[data-type=html-inline] .vditor-wysiwyg__preview svg {
fill: rgba(88, 96, 105, 0.36);
height: 12px;
cursor: pointer;
width: 12px; }
.vditor-wysiwyg__preview {
cursor: pointer;
white-space: initial;
min-height: 27px; }
.vditor-wysiwyg__preview pre {
margin-bottom: 1em !important; }
.vditor-wysiwyg h1:before,
.vditor-wysiwyg h2:before,
.vditor-wysiwyg h3:before,
.vditor-wysiwyg h4:before,
.vditor-wysiwyg h5:before,
.vditor-wysiwyg h6:before,
.vditor-wysiwyg div.vditor-wysiwyg__block:before {
float: left;
padding-right: 4px;
margin-left: -29px;
content: 'h1';
font-size: 0.85rem;
font-weight: normal;
text-transform: uppercase;
color: rgba(88, 96, 105, 0.36); }
.vditor-wysiwyg h2:before {
content: 'h2'; }
.vditor-wysiwyg h3:before {
content: 'h3'; }
.vditor-wysiwyg h4:before {
content: 'h4'; }
.vditor-wysiwyg h5:before {
content: 'h5'; }
.vditor-wysiwyg h6:before {
content: 'h6'; }
.vditor-wysiwyg div.vditor-wysiwyg__block:before {
content: "</>"; }
.vditor-wysiwyg details {
white-space: initial; }
.vditor-wysiwyg span[data-type="backslash"] > span {
display: none;
color: rgba(88, 96, 105, 0.36); }
.vditor-reset pre > code { .vditor-reset pre > code {
background-color: rgba(255, 255, 255, 0.04); } background-color: rgba(255, 255, 255, 0.04); }
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
@import "../../../scss/toc"; @import "../../../scss/toc";
@import "../../../scss/usite"; @import "../../../scss/usite";
@import "../../../scss/function"; @import "../../../scss/function";
@import "vditor/src/assets/scss/classic"; @import "vditor/src/assets/scss/dark";
.vditor-reset pre > code { .vditor-reset pre > code {
background-color: rgba(255, 255, 255, 0.04); background-color: rgba(255, 255, 255, 0.04);
......
...@@ -53,7 +53,7 @@ ...@@ -53,7 +53,7 @@
<#if commentable> <#if commentable>
<span> <span>
&nbsp; | &nbsp; &nbsp; | &nbsp;
<a href="${servePath}${article.articlePermalink}#comments"> <a href="${servePath}${article.articlePermalink}#b3logsolocomments">
<span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span> ${cmtLabel}</a> <span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span> ${cmtLabel}</a>
</span> </span>
</#if> </#if>
......
...@@ -63,7 +63,7 @@ ...@@ -63,7 +63,7 @@
<#if commentable> <#if commentable>
<span class="post-comments-count"> <span class="post-comments-count">
&nbsp; | &nbsp; &nbsp; | &nbsp;
<a href="${servePath}${article.articlePermalink}#comments"> <a href="${servePath}${article.articlePermalink}#b3logsolocomments">
<span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span> ${cmtLabel}</a> <span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span> ${cmtLabel}</a>
</span> </span>
</#if> </#if>
...@@ -108,6 +108,7 @@ ...@@ -108,6 +108,7 @@
</article> </article>
</div> </div>
<#if commentable> <#if commentable>
<div id="b3logsolocomments"></div>
<div id="vcomment" data-name="${article.authorName}" data-postId="${article.oId}"></div> <div id="vcomment" data-name="${article.authorName}" data-postId="${article.oId}"></div>
<#if !staticSite> <#if !staticSite>
<div id="soloComments" style="display: none;"> <div id="soloComments" style="display: none;">
......
...@@ -1321,7 +1321,7 @@ img { ...@@ -1321,7 +1321,7 @@ img {
padding: 5px; padding: 5px;
background: #222; background: #222;
line-height: 0; line-height: 0;
z-index: 1050; z-index: 21;
cursor: pointer; cursor: pointer;
-webkit-transform: translateZ(0); } -webkit-transform: translateZ(0); }
...@@ -1380,7 +1380,7 @@ img { ...@@ -1380,7 +1380,7 @@ img {
position: fixed; position: fixed;
bottom: 19px; bottom: 19px;
right: 50px; right: 50px;
z-index: 1050; z-index: 22;
width: 15px; width: 15px;
height: 13px; height: 13px;
padding: 5px; padding: 5px;
...@@ -1408,7 +1408,7 @@ img { ...@@ -1408,7 +1408,7 @@ img {
right: -320px; right: -320px;
top: 0; top: 0;
bottom: 0; bottom: 0;
z-index: 1040; z-index: 20;
box-shadow: inset 0 2px 6px #000; box-shadow: inset 0 2px 6px #000;
background: #222; background: #222;
-webkit-transform: translateZ(0); -webkit-transform: translateZ(0);
......
...@@ -345,7 +345,7 @@ img { ...@@ -345,7 +345,7 @@ img {
padding: 5px; padding: 5px;
background: #222; background: #222;
line-height: 0; line-height: 0;
z-index: 1050; z-index: 21;
cursor: pointer; cursor: pointer;
-webkit-transform: translateZ(0); -webkit-transform: translateZ(0);
} }
...@@ -407,7 +407,7 @@ img { ...@@ -407,7 +407,7 @@ img {
position: fixed; position: fixed;
bottom: 19px; bottom: 19px;
right: 50px; right: 50px;
z-index: 1050; z-index: 22;
width: 15px; width: 15px;
height: 13px; height: 13px;
padding: 5px; padding: 5px;
...@@ -438,7 +438,7 @@ img { ...@@ -438,7 +438,7 @@ img {
right: -320px; right: -320px;
top: 0; top: 0;
bottom: 0; bottom: 0;
z-index: 1040; z-index: 20;
box-shadow: inset 0 2px 6px #000; box-shadow: inset 0 2px 6px #000;
background: #222; background: #222;
-webkit-transform: translateZ(0); -webkit-transform: translateZ(0);
......
...@@ -57,7 +57,7 @@ ...@@ -57,7 +57,7 @@
</#list> </#list>
</span> </span>
<#if commentable> <#if commentable>
<a class="tag" href="${servePath}${article.articlePermalink}#comments"> <a class="tag" href="${servePath}${article.articlePermalink}#b3logsolocomments">
<i class="icon__comments"></i> <span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span> ${commentLabel} <i class="icon__comments"></i> <span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span> ${commentLabel}
</a> </a>
</#if> </#if>
......
...@@ -73,7 +73,7 @@ ...@@ -73,7 +73,7 @@
</#list> </#list>
</span> </span>
<#if commentable> <#if commentable>
<a class="tag" href="${servePath}${article.articlePermalink}#comments"> <a class="tag" href="${servePath}${article.articlePermalink}#b3logsolocomments">
<i class="icon__comments"></i> <span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span> ${commentLabel} <i class="icon__comments"></i> <span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span> ${commentLabel}
</a> </a>
</#if> </#if>
...@@ -133,6 +133,7 @@ ...@@ -133,6 +133,7 @@
</div> </div>
</#if> </#if>
<#if commentable> <#if commentable>
<div id="b3logsolocomments"></div>
<div id="vcomment" class="module__content" <div id="vcomment" class="module__content"
style="border-radius: 5px;margin-bottom: 30px;box-shadow: 1px 1px 3px 1px rgba(0,0,0,0.2);transition: all .3s;" style="border-radius: 5px;margin-bottom: 30px;box-shadow: 1px 1px 3px 1px rgba(0,0,0,0.2);transition: all .3s;"
data-name="${article.authorName}" data-postId="${article.oId}"></div> data-name="${article.authorName}" data-postId="${article.oId}"></div>
......
...@@ -48,7 +48,7 @@ ...@@ -48,7 +48,7 @@
<a rel="nofollow" href="${servePath}${article.articlePermalink}"> <a rel="nofollow" href="${servePath}${article.articlePermalink}">
<span data-uvstaturl="${servePath}${article.articlePermalink}">${article.articleViewCount}</span> <span data-uvstaturl="${servePath}${article.articlePermalink}">${article.articleViewCount}</span>
</a><#if commentable> | ${commentCount1Label} </a><#if commentable> | ${commentCount1Label}
<a rel="nofollow" href="${servePath}${article.articlePermalink}#comments"> <a rel="nofollow" href="${servePath}${article.articlePermalink}#b3logsolocomments">
<span class="left articles-commentIcon" title="${commentLabel}"></span> <span class="left articles-commentIcon" title="${commentLabel}"></span>
<span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span> <span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span>
</a> </a>
......
...@@ -62,7 +62,7 @@ ${topBarReplacement} ...@@ -62,7 +62,7 @@ ${topBarReplacement}
<span data-uvstaturl="${servePath}${article.articlePermalink}">${article.articleViewCount}</span> <span data-uvstaturl="${servePath}${article.articlePermalink}">${article.articleViewCount}</span>
</a> </a>
<#if commentable> | ${commentCount1Label} <#if commentable> | ${commentCount1Label}
<a rel="nofollow" href="${servePath}${article.articlePermalink}#comments"> <a rel="nofollow" href="${servePath}${article.articlePermalink}#b3logsolocomments">
<span class="left articles-commentIcon" title="${commentLabel}"></span> <span class="left articles-commentIcon" title="${commentLabel}"></span>
<span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span> <span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span>
</a> </a>
...@@ -104,6 +104,7 @@ ${topBarReplacement} ...@@ -104,6 +104,7 @@ ${topBarReplacement}
<div id="randomArticles"></div> <div id="randomArticles"></div>
<div id="externalRelevantArticles"></div> <div id="externalRelevantArticles"></div>
<#if commentable> <#if commentable>
<div id="b3logsolocomments"></div>
<div id="vcomment" <div id="vcomment"
class="comments" class="comments"
style="padding-top: 15px;" style="padding-top: 15px;"
......
...@@ -57,7 +57,7 @@ ...@@ -57,7 +57,7 @@
<a rel="author" href="${servePath}/authors/${article.authorId}">${article.authorName}</a> <a rel="author" href="${servePath}/authors/${article.authorId}">${article.authorName}</a>
</span> </span>
<span class="ico-comment ico" title="${commentLabel}"> <span class="ico-comment ico" title="${commentLabel}">
<a rel="nofollow" href="${servePath}${article.articlePermalink}#comments"> <a rel="nofollow" href="${servePath}${article.articlePermalink}#b3logsolocomments">
<span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span> <span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span>
</a> </a>
</span> </span>
......
...@@ -79,7 +79,7 @@ ${topBarReplacement} ...@@ -79,7 +79,7 @@ ${topBarReplacement}
</span> </span>
<#if commentable> <#if commentable>
<span class="ico-comment ico" title="${commentLabel}"> <span class="ico-comment ico" title="${commentLabel}">
<a rel="nofollow" href="${servePath}${article.articlePermalink}#comments"> <a rel="nofollow" href="${servePath}${article.articlePermalink}#b3logsolocomments">
<span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span> <span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span>
</a> </a>
</span> </span>
...@@ -118,6 +118,7 @@ ${topBarReplacement} ...@@ -118,6 +118,7 @@ ${topBarReplacement}
<div id="externalRelevantArticles"></div> <div id="externalRelevantArticles"></div>
</#if> </#if>
<#if commentable> <#if commentable>
<div id="b3logsolocomments"></div>
<div id="vcomment" class="module" data-name="${article.authorName}" data-postId="${article.oId}"></div> <div id="vcomment" class="module" data-name="${article.authorName}" data-postId="${article.oId}"></div>
<#if !staticSite> <#if !staticSite>
<div id="soloComments" style="display: none;" class="module"> <div id="soloComments" style="display: none;" class="module">
......
...@@ -93,7 +93,7 @@ ...@@ -93,7 +93,7 @@
</span> </span>
<#if commentable> <#if commentable>
<span class="ico-comment ico" title="${commentLabel}"> <span class="ico-comment ico" title="${commentLabel}">
<a rel="nofollow" data-uvstatcmt="${article.oId} href="${servePath}${article.articlePermalink}#comments"> <a rel="nofollow" data-uvstatcmt="${article.oId} href="${servePath}${article.articlePermalink}#b3logsolocomments">
${article.articleCommentCount} ${article.articleCommentCount}
</a> </a>
</span> </span>
......
...@@ -310,7 +310,7 @@ window.timeline = { ...@@ -310,7 +310,7 @@ window.timeline = {
+ '<a rel="author" href="' + Label.servePath + '/authors/' + article.authorId + '">' + '<a rel="author" href="' + Label.servePath + '/authors/' + article.authorId + '">'
+ article.authorName + '</a></span>&nbsp;<span class="ico-comment ico" title="' + article.authorName + '</a></span>&nbsp;<span class="ico-comment ico" title="'
+ Label.commentLabel + '"><a rel="nofollow" href="' + Label.servePath + article.articlePermalink + Label.commentLabel + '"><a rel="nofollow" href="' + Label.servePath + article.articlePermalink
+ '#comments" data-uvstatcmt="' + article.oId + '">' + article.articleCommentCount + '#b3logsolocomments" data-uvstatcmt="' + article.oId + '">' + article.articleCommentCount
+ '</a></span>&nbsp;<span class="ico-view ico" title="' + Label.viewLabel + '">' + '</a></span>&nbsp;<span class="ico-view ico" title="' + Label.viewLabel + '">'
+ '<a rel="nofollow" href="${servePath}${article.articlePermalink}">' + '<a rel="nofollow" href="${servePath}${article.articlePermalink}">'
+ '<span data-uvstaturl="' + Label.servePath + article.articlePermalink + '">' + article.articleViewCount + '</span>' + '<span data-uvstaturl="' + Label.servePath + article.articlePermalink + '">' + article.articleViewCount + '</span>'
......
...@@ -173,7 +173,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var jque ...@@ -173,7 +173,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var jque
/***/ (function(module, __webpack_exports__, __webpack_require__) { /***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict"; "use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _js_common__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../js/common */ \"./src/main/resources/js/common.js\");\n/*\n * Solo - A small and beautiful blogging system written in Java.\n * Copyright (c) 2010-present, b3log.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n/**\n * @fileoverview timeline js.\n *\n * @author <a href=\"http://vanessa.b3log.org\">Liyuan Li</a>\n * @version 1.0.0.0, Jan 18, 2019\n */\n\n\n\nwindow.timeline = {\n _COLHA: 0,\n _COLHB: 20,\n /**\n * @description 时间戳转化为时间格式\n * @param {String} time 时间\n * @param {String} format 格式化后日期格式\n * @returns {String} 格式化后的时间\n */\n toDate: function (time, format) {\n var dateTime = new Date(time)\n var o = {\n 'M+': dateTime.getMonth() + 1, //month\n 'd+': dateTime.getDate(), //day\n 'H+': dateTime.getHours(), //hour\n 'm+': dateTime.getMinutes(), //minute\n 's+': dateTime.getSeconds(), //second\n 'q+': Math.floor((dateTime.getMonth() + 3) / 3), //quarter\n 'S': dateTime.getMilliseconds(), //millisecond\n }\n\n if (/(y+)/.test(format)) {\n format = format.replace(RegExp.$1,\n (dateTime.getFullYear() + '').substr(4 - RegExp.$1.length))\n }\n\n for (var k in o) {\n if (new RegExp('(' + k + ')').test(format)) {\n format = format.replace(RegExp.$1,\n RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(\n ('' + o[k]).length))\n }\n }\n return format\n },\n _initArticleList: function() {\n var $articles = $(\".articles\");\n if ($articles.length === 0 || $(\".articles > .fn-clear\").length > 0) {\n return;\n }\n\n $(window).resize(function() {\n if ($(\"#hideTop\").css(\"top\") === \"auto\") {\n var colH = [timeline._COLHA, timeline._COLHB];\n $articles.find(\"article\").each(function() {\n var $it = $(this),\n isLeft = colH[1] > colH[0],\n top = isLeft ? colH[0] : colH[1];\n if (parseInt($it.css(\"top\")) !== top || top === 0) {\n $it.css({\n \"top\": top + \"px\",\n \"position\": \"absolute\"\n });\n\n if (isLeft) {\n this.className = \"l\";\n } else {\n this.className = \"r\";\n }\n }\n colH[(isLeft ? '0' : '1')] += parseInt($it.outerHeight(true));\n });\n\n $articles.height(colH[0] > colH[1] ? colH[0] : colH[1]);\n } else {\n $articles.find(\"article\").each(function() {\n $(this).css({\n \"position\": \"inherit\",\n \"top\": \"auto\"\n }).removeClass(\"r l\");\n });\n $articles.css(\"height\", \"auto\");\n }\n });\n\n $(window).resize();\n $(\".module img\").imagesLoaded(function() {\n $(window).resize();\n });\n },\n _initIndexList: function() {\n var $archives = $(\".articles > .fn-clear\");\n if ($archives.length === 0) {\n return;\n }\n\n // 如果为 index 页面,重构 archives 结构,使其可收缩\n var year = 0;\n $(\".nav-abs li\").each(function(i) {\n var $this = $(this);\n $this.hide();\n if (year !== $this.data(\"year\")) {\n year = $this.data(\"year\");\n $this.before(\"<li class='close year' onclick='timeline.toggleArchives(this, \" +\n year + \")'>\" + year + \"</li>\");\n }\n });\n\n // 首次加载时,当没有下一页时,使用 js 隐藏\"更多\"按钮\n if ($(\".article-more\").parent().data(\"count\") <= $(\".article-more\").parent().find(\"article\").length) {\n $(\".article-more\").remove();\n }\n\n $(window).resize(function() {\n $archives.each(function() {\n if ($(\"#hideTop\").css(\"top\") === \"auto\") {\n var colH = [timeline._COLHA + 60, timeline._COLHB * 4];\n\n var $articles = $(this).find(\"article\");\n if ($articles.length === 0) {\n $(this).find(\"h2\").remove();\n $(this).css(\"margin-bottom\", 0);\n } else {\n $articles.each(function() {\n var $it = $(this),\n isLeft = colH[1] > colH[0],\n top = isLeft ? colH[0] : colH[1];\n\n if (parseInt($it.css(\"top\")) !== top || top === 0) {\n $it.css({\n \"top\": top + \"px\",\n \"position\": \"absolute\"\n });\n\n if (isLeft) {\n this.className = \"l\";\n } else {\n this.className = \"r\";\n }\n }\n colH[(isLeft ? '0' : '1')] += parseInt($it.outerHeight(true));\n });\n $(this).height(colH[0] > colH[1] ? colH[0] : colH[1]);\n }\n } else {\n var $articles = $(this).find(\"article\");\n if ($articles.length === 0) {\n $(this).find(\"h2\").remove();\n $(this).css(\"margin-bottom\", 0);\n } else {\n $articles.each(function() {\n $(this).css({\n \"position\": \"inherit\",\n \"top\": \"auto\"\n }).removeClass(\"r l\");\n });\n $(this).css(\"height\", \"auto\");\n }\n }\n });\n });\n\n $(window).resize();\n $(\".module img\").imagesLoaded(function() {\n $(window).resize();\n });\n },\n _setNavCurrent: function() {\n $(\".header li a\").each(function() {\n if ($(this).prop(\"href\") === location.href.split(\"#\")[0]) {\n this.className = \"current\";\n } else {\n this.className = \"\";\n }\n })\n },\n init: function() {\n $(window).scroll(function() {\n if ($(window).scrollTop() > 60) {\n $(\".ico-top\").show();\n } else {\n $(\".ico-top\").hide();\n }\n });\n timeline._initIndexList();\n timeline._initArticleList();\n timeline._setNavCurrent();\n\n // init header list\n $(\".ico-list\").click(function() {\n if ($(\".header > .container > form\").css(\"height\") === \"0px\") {\n $(\".header > .container > ul, .header > .container > form\").css({\n \"height\": \"auto\"\n });\n } else {\n $(\".header > .container > ul, .header > .container > form\").animate({\n \"height\": \"0px\"\n });\n }\n });\n },\n translate: function() {\n window.open(\"http://translate.google.com/translate?sl=auto&tl=auto&u=\" + location.href);\n },\n getArchive: function(year, month, monthName) {\n var archiveDate = year + month,\n archive = year + \"/\" + month;\n window.location.hash = \"#\" + archiveDate;\n if ($(\"#\" + archiveDate + \" > article\").length === 0) {\n var archiveDataTitle = year + \" \" + Label.yearLabel + \" \" + month + \" \" + Label.monthLabel;\n if (Label.localeString.substring(0, 2) === \"en\") {\n archiveDataTitle = monthName + \" \" + year;\n }\n var archiveHTML = '<h2><span class=\"article-archive\">' + archiveDataTitle + '</span></h2>'\n + '<div class=\"article-more\" onclick=\"timeline.getNextPage(this, \\''\n + archive + '\\')\" data-page=\"0\">' + Label.moreLabel + '</div>';\n\n $(\"#\" + archiveDate).html(archiveHTML).css(\"margin-bottom\", \"50px\");\n timeline.getNextPage($(\"#\" + archiveDate).find(\".article-more\")[0], archive);\n }\n },\n getNextPage: function(it, archive) {\n var $more = $(it),\n currentPage = $more.data(\"page\") + 1,\n path = \"/articles/\";\n if ($(\"#tag\").length === 1) {\n var pathnames = location.pathname.split(\"/\");\n path = \"/articles/tags/\" + pathnames[pathnames.length - 1];\n } else if ($(\"#author\").length === 1) {\n var pathnames = location.pathname.split(\"/\");\n path = \"/articles/authors/\" + pathnames[pathnames.length - 1];\n } else if ($(\"#category\").length === 1) {\n var pathnames = location.pathname.split(\"/\");\n path = \"/articles/category/\" + pathnames[pathnames.length - 1];\n } else if (archive) {\n path = \"/articles/archives/\" + archive;\n }\n $.ajax({\n url: Label.servePath + path + '?p=' + currentPage,\n type: \"GET\",\n beforeSend: function() {\n $more.css(\"background\",\n \"url(\" + Label.staticServePath\n + \"/skins/timeline/images/ajax-loader.gif) no-repeat scroll center center #60829F\").text(\"\");\n },\n success: function(result, textStatus) {\n if (!result.sc) {\n $more.css(\"background\", \"none #60829F\").text(\"Error\");\n return;\n }\n\n if (result.rslts.articles.length === 0) {\n $more.remove();\n return;\n }\n\n var articlesHTML = \"\",\n pagination = result.rslts.pagination;\n\n // append articles\n for (var i = 0; i < result.rslts.articles.length; i++) {\n var article = result.rslts.articles[i];\n\n articlesHTML += '<article><div class=\"module\"><div class=\"dot\"></div>'\n + '<div class=\"arrow\"></div><time class=\"article-time\"><span>'\n + timeline.toDate(article.articleCreateTime, 'yy-MM-dd HH:mm')\n + '</span></time><h3 class=\"article-title\"><a rel=\"bookmark\" href=\"'\n + Label.servePath + article.articlePermalink + '\">'\n + article.articleTitle + '</a>';\n\n if (article.articlePutTop) {\n articlesHTML += '<sup>' + Label.topArticleLabel + '</sup>';\n }\n\n if (article.hasUpdated) {\n articlesHTML += '<sup><a href=\"'\n + Label.servePath + article.articlePermalink + '\">' + Label.updatedLabel + '</a></sup>';\n }\n\n articlesHTML += '</h3><p>' + article.articleAbstract + '</p>'\n + '<span class=\"ico-tags ico\" title=\"' + Label.tagLabel + '\">';\n\n var articleTags = article.articleTags.split(\",\");\n for (var j = 0; j < articleTags.length; j++) {\n articlesHTML += '<a rel=\"category tag\" href=\"' + Label.servePath\n + '/tags/' + encodeURIComponent(articleTags[j]) + '\">' + articleTags[j] + '</a>';\n\n if (j < articleTags.length - 1) {\n articlesHTML += \",\";\n }\n }\n\n articlesHTML += '</span>&nbsp;<span class=\"ico-author ico\" title=\"' + Label.authorLabel + '\">'\n + '<a rel=\"author\" href=\"' + Label.servePath + '/authors/' + article.authorId + '\">'\n + article.authorName + '</a></span>&nbsp;<span class=\"ico-comment ico\" title=\"'\n + Label.commentLabel + '\"><a rel=\"nofollow\" href=\"' + Label.servePath + article.articlePermalink\n + '#comments\" data-uvstatcmt=\"' + article.oId + '\">' + article.articleCommentCount\n + '</a></span>&nbsp;<span class=\"ico-view ico\" title=\"' + Label.viewLabel + '\">'\n + '<a rel=\"nofollow\" href=\"${servePath}${article.articlePermalink}\">'\n + '<span data-uvstaturl=\"' + Label.servePath + article.articlePermalink + '\">' + article.articleViewCount + '</span>'\n + '</a></span></div></article>';\n }\n\n $more.before(articlesHTML).data(\"page\", currentPage);\n // 最后一页处理\n if (pagination.paginationPageCount <= currentPage) {\n $more.remove();\n } else {\n $more.css(\"background\", \"none #60829F\").text(Label.moreLabel);\n }\n\n $(window).resize();\n $(\".module img\").imagesLoaded(function() {\n $(window).resize();\n });\n\n Util.uvstat.renderStat()\n Util.uvstat.renderCmtStat()\n }\n });\n },\n toggleArchives: function(it, year) {\n $(\".nav-abs li\").each(function(i) {\n var $it = $(this);\n if (!$it.hasClass(\"year\")) {\n $it.hide();\n if (year === $it.data(\"year\") && $(it).hasClass(\"close\")) {\n $it.show();\n }\n }\n });\n\n $(\".nav-abs li.year\").each(function() {\n if (parseInt($(this).text()) === year) {\n if ($(it).hasClass(\"close\")) {\n it.className = \"year open\";\n } else {\n it.className = \"year close\";\n }\n } else {\n this.className = \"year close\";\n }\n });\n }\n};\n\n/*!\n * jQuery imagesLoaded plugin v2.1.1\n * http://github.com/desandro/imagesloaded\n *\n * MIT License. by Paul Irish et al.\n */\n\n/*jshint curly: true, eqeqeq: true, noempty: true, strict: true, undef: true, browser: true */\n/*global jQuery: false */\n\n;\n(function($, undefined) {\n 'use strict';\n\n // blank image data-uri bypasses webkit log warning (thx doug jones)\n var BLANK = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==';\n\n $.fn.imagesLoaded = function(callback) {\n var $this = this,\n deferred = $.isFunction($.Deferred) ? $.Deferred() : 0,\n hasNotify = $.isFunction(deferred.notify),\n $images = $this.find('img').add($this.filter('img')),\n loaded = [],\n proper = [],\n broken = [];\n\n // Register deferred callbacks\n if ($.isPlainObject(callback)) {\n $.each(callback, function(key, value) {\n if (key === 'callback') {\n callback = value;\n } else if (deferred) {\n deferred[key](value);\n }\n });\n }\n\n function doneLoading() {\n var $proper = $(proper),\n $broken = $(broken);\n\n if (deferred) {\n if (broken.length) {\n deferred.reject($images, $proper, $broken);\n } else {\n deferred.resolve($images);\n }\n }\n\n if ($.isFunction(callback)) {\n callback.call($this, $images, $proper, $broken);\n }\n }\n\n function imgLoadedHandler(event) {\n imgLoaded(event.target, event.type === 'error');\n }\n\n function imgLoaded(img, isBroken) {\n // don't proceed if BLANK image, or image is already loaded\n if (img.src === BLANK || $.inArray(img, loaded) !== -1) {\n return;\n }\n\n // store element in loaded images array\n loaded.push(img);\n\n // keep track of broken and properly loaded images\n if (isBroken) {\n broken.push(img);\n } else {\n proper.push(img);\n }\n\n // cache image and its state for future calls\n $.data(img, 'imagesLoaded', {\n isBroken: isBroken,\n src: img.src\n });\n\n // trigger deferred progress method if present\n if (hasNotify) {\n deferred.notifyWith($(img), [isBroken, $images, $(proper), $(broken)]);\n }\n\n // call doneLoading and clean listeners if all images are loaded\n if ($images.length === loaded.length) {\n setTimeout(doneLoading);\n $images.unbind('.imagesLoaded', imgLoadedHandler);\n }\n }\n\n // if no images, trigger immediately\n if (!$images.length) {\n doneLoading();\n } else {\n $images.bind('load.imagesLoaded error.imagesLoaded', imgLoadedHandler)\n .each(function(i, el) {\n var src = el.src;\n\n // find out if this image has been already checked for status\n // if it was, and src has not changed, call imgLoaded on it\n var cached = $.data(el, 'imagesLoaded');\n if (cached && cached.src === src) {\n imgLoaded(el, cached.isBroken);\n return;\n }\n\n // if complete is true and browser supports natural sizes, try\n // to check for image status manually\n if (el.complete && el.naturalWidth !== undefined) {\n imgLoaded(el, el.naturalWidth === 0 || el.naturalHeight === 0);\n return;\n }\n\n // cached images don't fire load sometimes, so we reset src, but only when\n // dealing with IE, or image is complete (loaded) and failed manual check\n // webkit hack from http://groups.google.com/group/jquery-dev/browse_thread/thread/eee6ab7b2da50e1f\n if (el.readyState || el.complete) {\n el.src = BLANK;\n el.src = src;\n }\n });\n }\n\n return deferred ? deferred.promise($this) : $this;\n };\n\n})($);\n\n(function() {\n Util.setTopBar()\n Util.buildTags(\"tagsSide\");\n\n timeline.init();\n})();\n\n\n//# sourceURL=webpack:///./src/main/resources/skins/timeline/js/common.js?"); eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _js_common__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../js/common */ \"./src/main/resources/js/common.js\");\n/*\n * Solo - A small and beautiful blogging system written in Java.\n * Copyright (c) 2010-present, b3log.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <https://www.gnu.org/licenses/>.\n */\n/**\n * @fileoverview timeline js.\n *\n * @author <a href=\"http://vanessa.b3log.org\">Liyuan Li</a>\n * @version 1.0.0.0, Jan 18, 2019\n */\n\n\n\nwindow.timeline = {\n _COLHA: 0,\n _COLHB: 20,\n /**\n * @description 时间戳转化为时间格式\n * @param {String} time 时间\n * @param {String} format 格式化后日期格式\n * @returns {String} 格式化后的时间\n */\n toDate: function (time, format) {\n var dateTime = new Date(time)\n var o = {\n 'M+': dateTime.getMonth() + 1, //month\n 'd+': dateTime.getDate(), //day\n 'H+': dateTime.getHours(), //hour\n 'm+': dateTime.getMinutes(), //minute\n 's+': dateTime.getSeconds(), //second\n 'q+': Math.floor((dateTime.getMonth() + 3) / 3), //quarter\n 'S': dateTime.getMilliseconds(), //millisecond\n }\n\n if (/(y+)/.test(format)) {\n format = format.replace(RegExp.$1,\n (dateTime.getFullYear() + '').substr(4 - RegExp.$1.length))\n }\n\n for (var k in o) {\n if (new RegExp('(' + k + ')').test(format)) {\n format = format.replace(RegExp.$1,\n RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(\n ('' + o[k]).length))\n }\n }\n return format\n },\n _initArticleList: function() {\n var $articles = $(\".articles\");\n if ($articles.length === 0 || $(\".articles > .fn-clear\").length > 0) {\n return;\n }\n\n $(window).resize(function() {\n if ($(\"#hideTop\").css(\"top\") === \"auto\") {\n var colH = [timeline._COLHA, timeline._COLHB];\n $articles.find(\"article\").each(function() {\n var $it = $(this),\n isLeft = colH[1] > colH[0],\n top = isLeft ? colH[0] : colH[1];\n if (parseInt($it.css(\"top\")) !== top || top === 0) {\n $it.css({\n \"top\": top + \"px\",\n \"position\": \"absolute\"\n });\n\n if (isLeft) {\n this.className = \"l\";\n } else {\n this.className = \"r\";\n }\n }\n colH[(isLeft ? '0' : '1')] += parseInt($it.outerHeight(true));\n });\n\n $articles.height(colH[0] > colH[1] ? colH[0] : colH[1]);\n } else {\n $articles.find(\"article\").each(function() {\n $(this).css({\n \"position\": \"inherit\",\n \"top\": \"auto\"\n }).removeClass(\"r l\");\n });\n $articles.css(\"height\", \"auto\");\n }\n });\n\n $(window).resize();\n $(\".module img\").imagesLoaded(function() {\n $(window).resize();\n });\n },\n _initIndexList: function() {\n var $archives = $(\".articles > .fn-clear\");\n if ($archives.length === 0) {\n return;\n }\n\n // 如果为 index 页面,重构 archives 结构,使其可收缩\n var year = 0;\n $(\".nav-abs li\").each(function(i) {\n var $this = $(this);\n $this.hide();\n if (year !== $this.data(\"year\")) {\n year = $this.data(\"year\");\n $this.before(\"<li class='close year' onclick='timeline.toggleArchives(this, \" +\n year + \")'>\" + year + \"</li>\");\n }\n });\n\n // 首次加载时,当没有下一页时,使用 js 隐藏\"更多\"按钮\n if ($(\".article-more\").parent().data(\"count\") <= $(\".article-more\").parent().find(\"article\").length) {\n $(\".article-more\").remove();\n }\n\n $(window).resize(function() {\n $archives.each(function() {\n if ($(\"#hideTop\").css(\"top\") === \"auto\") {\n var colH = [timeline._COLHA + 60, timeline._COLHB * 4];\n\n var $articles = $(this).find(\"article\");\n if ($articles.length === 0) {\n $(this).find(\"h2\").remove();\n $(this).css(\"margin-bottom\", 0);\n } else {\n $articles.each(function() {\n var $it = $(this),\n isLeft = colH[1] > colH[0],\n top = isLeft ? colH[0] : colH[1];\n\n if (parseInt($it.css(\"top\")) !== top || top === 0) {\n $it.css({\n \"top\": top + \"px\",\n \"position\": \"absolute\"\n });\n\n if (isLeft) {\n this.className = \"l\";\n } else {\n this.className = \"r\";\n }\n }\n colH[(isLeft ? '0' : '1')] += parseInt($it.outerHeight(true));\n });\n $(this).height(colH[0] > colH[1] ? colH[0] : colH[1]);\n }\n } else {\n var $articles = $(this).find(\"article\");\n if ($articles.length === 0) {\n $(this).find(\"h2\").remove();\n $(this).css(\"margin-bottom\", 0);\n } else {\n $articles.each(function() {\n $(this).css({\n \"position\": \"inherit\",\n \"top\": \"auto\"\n }).removeClass(\"r l\");\n });\n $(this).css(\"height\", \"auto\");\n }\n }\n });\n });\n\n $(window).resize();\n $(\".module img\").imagesLoaded(function() {\n $(window).resize();\n });\n },\n _setNavCurrent: function() {\n $(\".header li a\").each(function() {\n if ($(this).prop(\"href\") === location.href.split(\"#\")[0]) {\n this.className = \"current\";\n } else {\n this.className = \"\";\n }\n })\n },\n init: function() {\n $(window).scroll(function() {\n if ($(window).scrollTop() > 60) {\n $(\".ico-top\").show();\n } else {\n $(\".ico-top\").hide();\n }\n });\n timeline._initIndexList();\n timeline._initArticleList();\n timeline._setNavCurrent();\n\n // init header list\n $(\".ico-list\").click(function() {\n if ($(\".header > .container > form\").css(\"height\") === \"0px\") {\n $(\".header > .container > ul, .header > .container > form\").css({\n \"height\": \"auto\"\n });\n } else {\n $(\".header > .container > ul, .header > .container > form\").animate({\n \"height\": \"0px\"\n });\n }\n });\n },\n translate: function() {\n window.open(\"http://translate.google.com/translate?sl=auto&tl=auto&u=\" + location.href);\n },\n getArchive: function(year, month, monthName) {\n var archiveDate = year + month,\n archive = year + \"/\" + month;\n window.location.hash = \"#\" + archiveDate;\n if ($(\"#\" + archiveDate + \" > article\").length === 0) {\n var archiveDataTitle = year + \" \" + Label.yearLabel + \" \" + month + \" \" + Label.monthLabel;\n if (Label.localeString.substring(0, 2) === \"en\") {\n archiveDataTitle = monthName + \" \" + year;\n }\n var archiveHTML = '<h2><span class=\"article-archive\">' + archiveDataTitle + '</span></h2>'\n + '<div class=\"article-more\" onclick=\"timeline.getNextPage(this, \\''\n + archive + '\\')\" data-page=\"0\">' + Label.moreLabel + '</div>';\n\n $(\"#\" + archiveDate).html(archiveHTML).css(\"margin-bottom\", \"50px\");\n timeline.getNextPage($(\"#\" + archiveDate).find(\".article-more\")[0], archive);\n }\n },\n getNextPage: function(it, archive) {\n var $more = $(it),\n currentPage = $more.data(\"page\") + 1,\n path = \"/articles/\";\n if ($(\"#tag\").length === 1) {\n var pathnames = location.pathname.split(\"/\");\n path = \"/articles/tags/\" + pathnames[pathnames.length - 1];\n } else if ($(\"#author\").length === 1) {\n var pathnames = location.pathname.split(\"/\");\n path = \"/articles/authors/\" + pathnames[pathnames.length - 1];\n } else if ($(\"#category\").length === 1) {\n var pathnames = location.pathname.split(\"/\");\n path = \"/articles/category/\" + pathnames[pathnames.length - 1];\n } else if (archive) {\n path = \"/articles/archives/\" + archive;\n }\n $.ajax({\n url: Label.servePath + path + '?p=' + currentPage,\n type: \"GET\",\n beforeSend: function() {\n $more.css(\"background\",\n \"url(\" + Label.staticServePath\n + \"/skins/timeline/images/ajax-loader.gif) no-repeat scroll center center #60829F\").text(\"\");\n },\n success: function(result, textStatus) {\n if (!result.sc) {\n $more.css(\"background\", \"none #60829F\").text(\"Error\");\n return;\n }\n\n if (result.rslts.articles.length === 0) {\n $more.remove();\n return;\n }\n\n var articlesHTML = \"\",\n pagination = result.rslts.pagination;\n\n // append articles\n for (var i = 0; i < result.rslts.articles.length; i++) {\n var article = result.rslts.articles[i];\n\n articlesHTML += '<article><div class=\"module\"><div class=\"dot\"></div>'\n + '<div class=\"arrow\"></div><time class=\"article-time\"><span>'\n + timeline.toDate(article.articleCreateTime, 'yy-MM-dd HH:mm')\n + '</span></time><h3 class=\"article-title\"><a rel=\"bookmark\" href=\"'\n + Label.servePath + article.articlePermalink + '\">'\n + article.articleTitle + '</a>';\n\n if (article.articlePutTop) {\n articlesHTML += '<sup>' + Label.topArticleLabel + '</sup>';\n }\n\n if (article.hasUpdated) {\n articlesHTML += '<sup><a href=\"'\n + Label.servePath + article.articlePermalink + '\">' + Label.updatedLabel + '</a></sup>';\n }\n\n articlesHTML += '</h3><p>' + article.articleAbstract + '</p>'\n + '<span class=\"ico-tags ico\" title=\"' + Label.tagLabel + '\">';\n\n var articleTags = article.articleTags.split(\",\");\n for (var j = 0; j < articleTags.length; j++) {\n articlesHTML += '<a rel=\"category tag\" href=\"' + Label.servePath\n + '/tags/' + encodeURIComponent(articleTags[j]) + '\">' + articleTags[j] + '</a>';\n\n if (j < articleTags.length - 1) {\n articlesHTML += \",\";\n }\n }\n\n articlesHTML += '</span>&nbsp;<span class=\"ico-author ico\" title=\"' + Label.authorLabel + '\">'\n + '<a rel=\"author\" href=\"' + Label.servePath + '/authors/' + article.authorId + '\">'\n + article.authorName + '</a></span>&nbsp;<span class=\"ico-comment ico\" title=\"'\n + Label.commentLabel + '\"><a rel=\"nofollow\" href=\"' + Label.servePath + article.articlePermalink\n + '#b3logsolocomments\" data-uvstatcmt=\"' + article.oId + '\">' + article.articleCommentCount\n + '</a></span>&nbsp;<span class=\"ico-view ico\" title=\"' + Label.viewLabel + '\">'\n + '<a rel=\"nofollow\" href=\"${servePath}${article.articlePermalink}\">'\n + '<span data-uvstaturl=\"' + Label.servePath + article.articlePermalink + '\">' + article.articleViewCount + '</span>'\n + '</a></span></div></article>';\n }\n\n $more.before(articlesHTML).data(\"page\", currentPage);\n // 最后一页处理\n if (pagination.paginationPageCount <= currentPage) {\n $more.remove();\n } else {\n $more.css(\"background\", \"none #60829F\").text(Label.moreLabel);\n }\n\n $(window).resize();\n $(\".module img\").imagesLoaded(function() {\n $(window).resize();\n });\n\n Util.uvstat.renderStat()\n Util.uvstat.renderCmtStat()\n }\n });\n },\n toggleArchives: function(it, year) {\n $(\".nav-abs li\").each(function(i) {\n var $it = $(this);\n if (!$it.hasClass(\"year\")) {\n $it.hide();\n if (year === $it.data(\"year\") && $(it).hasClass(\"close\")) {\n $it.show();\n }\n }\n });\n\n $(\".nav-abs li.year\").each(function() {\n if (parseInt($(this).text()) === year) {\n if ($(it).hasClass(\"close\")) {\n it.className = \"year open\";\n } else {\n it.className = \"year close\";\n }\n } else {\n this.className = \"year close\";\n }\n });\n }\n};\n\n/*!\n * jQuery imagesLoaded plugin v2.1.1\n * http://github.com/desandro/imagesloaded\n *\n * MIT License. by Paul Irish et al.\n */\n\n/*jshint curly: true, eqeqeq: true, noempty: true, strict: true, undef: true, browser: true */\n/*global jQuery: false */\n\n;\n(function($, undefined) {\n 'use strict';\n\n // blank image data-uri bypasses webkit log warning (thx doug jones)\n var BLANK = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==';\n\n $.fn.imagesLoaded = function(callback) {\n var $this = this,\n deferred = $.isFunction($.Deferred) ? $.Deferred() : 0,\n hasNotify = $.isFunction(deferred.notify),\n $images = $this.find('img').add($this.filter('img')),\n loaded = [],\n proper = [],\n broken = [];\n\n // Register deferred callbacks\n if ($.isPlainObject(callback)) {\n $.each(callback, function(key, value) {\n if (key === 'callback') {\n callback = value;\n } else if (deferred) {\n deferred[key](value);\n }\n });\n }\n\n function doneLoading() {\n var $proper = $(proper),\n $broken = $(broken);\n\n if (deferred) {\n if (broken.length) {\n deferred.reject($images, $proper, $broken);\n } else {\n deferred.resolve($images);\n }\n }\n\n if ($.isFunction(callback)) {\n callback.call($this, $images, $proper, $broken);\n }\n }\n\n function imgLoadedHandler(event) {\n imgLoaded(event.target, event.type === 'error');\n }\n\n function imgLoaded(img, isBroken) {\n // don't proceed if BLANK image, or image is already loaded\n if (img.src === BLANK || $.inArray(img, loaded) !== -1) {\n return;\n }\n\n // store element in loaded images array\n loaded.push(img);\n\n // keep track of broken and properly loaded images\n if (isBroken) {\n broken.push(img);\n } else {\n proper.push(img);\n }\n\n // cache image and its state for future calls\n $.data(img, 'imagesLoaded', {\n isBroken: isBroken,\n src: img.src\n });\n\n // trigger deferred progress method if present\n if (hasNotify) {\n deferred.notifyWith($(img), [isBroken, $images, $(proper), $(broken)]);\n }\n\n // call doneLoading and clean listeners if all images are loaded\n if ($images.length === loaded.length) {\n setTimeout(doneLoading);\n $images.unbind('.imagesLoaded', imgLoadedHandler);\n }\n }\n\n // if no images, trigger immediately\n if (!$images.length) {\n doneLoading();\n } else {\n $images.bind('load.imagesLoaded error.imagesLoaded', imgLoadedHandler)\n .each(function(i, el) {\n var src = el.src;\n\n // find out if this image has been already checked for status\n // if it was, and src has not changed, call imgLoaded on it\n var cached = $.data(el, 'imagesLoaded');\n if (cached && cached.src === src) {\n imgLoaded(el, cached.isBroken);\n return;\n }\n\n // if complete is true and browser supports natural sizes, try\n // to check for image status manually\n if (el.complete && el.naturalWidth !== undefined) {\n imgLoaded(el, el.naturalWidth === 0 || el.naturalHeight === 0);\n return;\n }\n\n // cached images don't fire load sometimes, so we reset src, but only when\n // dealing with IE, or image is complete (loaded) and failed manual check\n // webkit hack from http://groups.google.com/group/jquery-dev/browse_thread/thread/eee6ab7b2da50e1f\n if (el.readyState || el.complete) {\n el.src = BLANK;\n el.src = src;\n }\n });\n }\n\n return deferred ? deferred.promise($this) : $this;\n };\n\n})($);\n\n(function() {\n Util.setTopBar()\n Util.buildTags(\"tagsSide\");\n\n timeline.init();\n})();\n\n\n//# sourceURL=webpack:///./src/main/resources/skins/timeline/js/common.js?");
/***/ }) /***/ })
......
...@@ -42,7 +42,7 @@ ...@@ -42,7 +42,7 @@
</div> </div>
<#if commentable> <#if commentable>
<div class="article-comment"> <div class="article-comment">
<a rel="nofollow" href="${servePath}${article.articlePermalink}#comments"> <a rel="nofollow" href="${servePath}${article.articlePermalink}#b3logsolocomments">
${commentLabel}(<span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span>) ${commentLabel}(<span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span>)
</a> </a>
</div> </div>
......
...@@ -87,7 +87,7 @@ ...@@ -87,7 +87,7 @@
</div> </div>
<div class="right"> <div class="right">
<#if commentable> <#if commentable>
<a rel="nofollow" href="${servePath}${article.articlePermalink}#comments" class="left"> <a rel="nofollow" href="${servePath}${article.articlePermalink}#b3logsolocomments" class="left">
&nbsp;<span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span> ${commentLabel}&nbsp;&nbsp; &nbsp;<span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span> ${commentLabel}&nbsp;&nbsp;
</a> </a>
</#if> </#if>
...@@ -103,6 +103,7 @@ ...@@ -103,6 +103,7 @@
</div> </div>
<div class="line right"></div> <div class="line right"></div>
<#if commentable> <#if commentable>
<div id="b3logsolocomments"></div>
<div id="vcomment" <div id="vcomment"
style="margin: 88px 100px 0 99px;background-color: #effdff;border-radius: 10px;padding: 10px;" style="margin: 88px 100px 0 99px;background-color: #effdff;border-radius: 10px;padding: 10px;"
data-name="${article.authorName}" data-postId="${article.oId}"></div> data-name="${article.authorName}" data-postId="${article.oId}"></div>
......
...@@ -59,7 +59,7 @@ ...@@ -59,7 +59,7 @@
</div> </div>
<span>&nbsp;&nbsp;&nbsp;</span> <span>&nbsp;&nbsp;&nbsp;</span>
<#if commentable> <#if commentable>
<a href="${servePath}${article.articlePermalink}#comments" <a href="${servePath}${article.articlePermalink}#b3logsolocomments"
class="vditor-tooltipped__n vditor-tooltipped link fn__flex-center" class="vditor-tooltipped__n vditor-tooltipped link fn__flex-center"
aria-label="${commentLabel}"> aria-label="${commentLabel}">
<span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span> <span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span>
......
...@@ -62,7 +62,7 @@ ...@@ -62,7 +62,7 @@
</div> </div>
<span>&nbsp;&nbsp;&nbsp;</span> <span>&nbsp;&nbsp;&nbsp;</span>
<#if commentable> <#if commentable>
<a href="${servePath}${article.articlePermalink}#comments" <a href="${servePath}${article.articlePermalink}#b3logsolocomments"
class="vditor-tooltipped__n vditor-tooltipped link fn__flex-center" class="vditor-tooltipped__n vditor-tooltipped link fn__flex-center"
aria-label="${commentLabel}"> aria-label="${commentLabel}">
<span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span> <span data-uvstatcmt="${article.oId}">${article.articleCommentCount}</span>
...@@ -132,6 +132,7 @@ ...@@ -132,6 +132,7 @@
<br> <br>
</article> </article>
<#if commentable> <#if commentable>
<div id="b3logsolocomments"></div>
<div id="vcomment" style="padding: 30px 60px 30px 50px;" data-name="${article.authorName}" <div id="vcomment" style="padding: 30px 60px 30px 50px;" data-name="${article.authorName}"
data-postId="${article.oId}"></div> data-postId="${article.oId}"></div>
<#if !staticSite> <#if !staticSite>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment