-
Notifications
You must be signed in to change notification settings - Fork 0
/
disqus.js
1 lines (1 loc) · 10.8 KB
/
disqus.js
1
/*! DisqusJS v1.3.0 | Sukka (https://skk.moe) | https://disqusjs.skk.moe | MIT License */"use strict";function DisqusJS(C){!function(e,p,t,n,o){function r(){for(var s=arguments.length,e=new Array(s),t=0;t<s;t++)e[t]=arguments[t];return(r=Object.assign||function(s){for(var e=0,t=arguments.length;e<t;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(s[r]=n[r])}return s}).apply(this,e)}var q=function(s){return p.getElementById(s)},f=function(s){var e=q("dsqjs-msg");e&&(e.innerHTML=s)},h="click",d="disqus_thread",j="dsqjs_sort",c='target="_blank" rel="external nofollow noopener noreferrer"',l='<footer><p class="dsqjs-footer">Powered by <a class="dsqjs-disqus-logo" href="https://disqus.com" '+c+'></a> & <a href="https://disqusjs.skk.moe" target="_blank">DisqusJS</a></p></footer>',u=function(s,e){return'<header class="dsqjs-header" id="dsqjs-header"><nav class="dsqjs-nav dsqjs-clearfix"><ul><li class="dsqjs-nav-tab dsqjs-tab-active"><span>'+s+' Comments</span></li><li class="dsqjs-nav-tab">'+e+'</li></ul><div class="dsqjs-order"><input class="dsqjs-order-radio" id="dsqjs-order-desc" type="radio" name="comment-order" value="desc" checked="true"><label class="dsqjs-order-label" for="dsqjs-order-desc" title="按从新到旧">最新</label><input class="dsqjs-order-radio" id="dsqjs-order-asc" type="radio" name="comment-order" value="asc"><label class="dsqjs-order-label" for="dsqjs-order-asc" title="按从旧到新">最早</label><input class="dsqjs-order-radio" id="dsqjs-order-popular" type="radio" name="comment-order" value="popular"><label class="dsqjs-order-label" for="dsqjs-order-popular" title="按评分从高到低">最佳</label></div></nav></header>'},g=function(s,e,t){var n=s.avatarEl,r=s.createdAt;return'<div class="dsqjs-post-item dsqjs-clearfix"><div class="dsqjs-post-avatar">'+n+'</div><div class="dsqjs-post-body"><div class="dsqjs-post-header">'+e+'<span class="dsqjs-meta"><time>'+a(r)+'</time></span></div><div class="dsqjs-post-content">'+t+"</div></div></div>"},v='如需完整体验请针对 disq.us | disquscdn.com | disqus.com 启用代理并 <a id="dsqjs-reload-disqus" class="dsqjs-msg-btn">尝试完整 Disqus 模式</a> | <a id="dsqjs-force-disqus" class="dsqjs-msg-btn">强制完整 Disqus 模式</a>',b=function(s){return n(s,{method:"GET"}).then(function(s){return o.all([s.ok,s.status,s.json(),s.headers])}).then(function(s){var e=s[0],t=s[1],n=s[2],r=s[3];if(e)return{ok:e,status:t,data:n,headers:r};throw new Error}).catch(function(s){throw s})},y=function(s,e){try{t.setItem(s,e)}catch(s){}},a=function(s){function e(s){return s<10?"0"+s:s}return s=Date.parse(new Date(s)),(s=new Date(s+288e5)).getFullYear()+"-"+e(s.getMonth()+1)+"-"+e(s.getDate())+" "+e(s.getHours())+":"+e(s.getMinutes())};function s(){var s;e.DISQUS?e.DISQUS.reset({reload:!0,config:function(){this.page.identifier=M.config.identifier,this.page.url=M.config.url,this.page.title=M.config.title}}):(s=p.createElement("script"),q(d).innerHTML='<div id="dsqjs"><section><div id="dsqjs-msg">评论完整模式加载中... 如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理,或切换至 <a id="dsqjs-force-dsqjs" class="dsqjs-msg-btn">评论基础模式</a></div></section>'+l+"</div>",q("dsqjs-force-dsqjs").addEventListener(h,D),s.src="https://"+M.config.shortname+".disqus.com/embed.js",s.setAttribute("data-timestamp",+new Date),(p.head||p.body).appendChild(s))}function E(){q(d).innerHTML='<div id="dsqjs"><section><div id="dsqjs-msg">正在检查 Disqus 能否访问...</div></section>'+l+"</div>";function s(r){return new o(function(s,e){var t=new Image,n=setTimeout(function(){t.onerror=t.onload=null,e()},3e3);t.onerror=function(){clearTimeout(n),e()},t.onload=function(){clearTimeout(n),s()},t.src="https://"+r+"/favicon.ico?"+ +new Date+"="+ +new Date})}return o.all([s("disqus.com"),s(M.config.shortname+".disqus.com")]).then(w,D)}function L(){q("dsqjs-reload-disqus").addEventListener(h,E),q("dsqjs-force-disqus").addEventListener(h,w)}function i(){f("评论基础模式加载中... "+v),L();var s=M.config.api+"3.0/threads/list.json?forum="+encodeURIComponent(M.config.shortname)+"&thread="+encodeURIComponent("ident:"+M.config.identifier)+"&api_key="+encodeURIComponent(k());b(s).then(function(s){var e=s.data;if(0===e.code&&1===e.response.length){var t=e.response[0],n=t.id,r=t.title,o=t.isClosed,a=t.posts;M.page={id:n,title:r,isClosed:o,length:a,comment:[]},q(d).innerHTML='<div id="dsqjs"><div id="dsqjs-msg">评论基础模式加载中... '+v+"</div>"+u(a,M.config.siteName)+'<section class="dsqjs-post-container"><ul class="dsqjs-post-list" id="dsqjs-post-container"><p class="dsqjs-no-comment">评论列表加载中...</p></ul><a id="dsqjs-load-more" class="dsqjs-load-more dsqjs-hide">加载更多评论</a></section>'+l+"</div>",L(),q("dsqjs-order-"+M.sortType).setAttribute("checked","true"),i()}else{if(0!==e.code||1===e.response.length)throw new Error;f('当前 Thread 尚未创建。是否切换至 <a id="dsqjs-force-disqus" class="dsqjs-msg-btn">完整 Disqus 模式</a>?'),q("dsqjs-force-disqus").addEventListener(h,w)}}).catch(T);function e(s){function n(s){return{comment:s,author:s.author.name,isPrimary:!!M.config.admin&&s.author.username===M.config.admin,children:t(+s.id),hasMore:s.hasMore}}var e=[],r=[],t=function(e){if(0===r.length)return null;var t=[];return r.forEach(function(s){s.parent===e&&t.unshift(n(s))}),t.length?t:null};return s.forEach(function(s){(s.parent?r:e).push(s)}),e.map(n)}var i=function t(s){void 0===s&&(s="");function n(){Array.prototype.slice.call(o).forEach(function(s){return s.removeEventListener("change",d)}),r.removeEventListener(h,i),Array.prototype.slice.call(a).forEach(function(s){return s.removeEventListener(h,E)})}var r=q("dsqjs-load-more"),o=p.getElementsByClassName("dsqjs-order-radio"),a=p.getElementsByClassName("dsqjs-has-more-btn"),i=function(){n(),t(M.page.next)},d=function(s){var e=s.target;M.sortType=e.getAttribute("value"),y(j,M.sortType),n(),M.page.comment=[],M.page.next="",q("dsqjs-post-container").innerHTML='<p class="dsqjs-no-comment">正在切换排序方式...</p>',r.classList.add("dsqjs-hide"),t()},e=""===s?"":"&cursor="+s;r.classList.add("dsqjs-disabled");function c(s){var e=s.createdAt;return Date.parse(new Date(e))}function l(s,e){return s.parent&&e.parent?c(s)-c(e):0}var u=M.config.api+"3.0/threads/listPostsThreaded?forum="+encodeURIComponent(M.config.shortname)+"&thread="+encodeURIComponent(M.page.id)+encodeURIComponent(e)+"&api_key="+encodeURIComponent(k())+"&order="+encodeURIComponent(M.sortType);b(u).then(function(s){var e,t=s.data;if(0===t.code&&0<t.response.length){r.classList.remove("dsqjs-disabled"),(e=M.page.comment).push.apply(e,t.response),M.page.comment.sort(l),m(M.page.comment),Array.prototype.slice.call(o).forEach(function(s){return s.addEventListener("change",d)}),Array.prototype.slice.call(a).forEach(function(s){return s.addEventListener(h,E)}),t.cursor.hasNext?(M.page.next=t.cursor.next,r.innerHTML="加载更多评论",r.classList.remove("dsqjs-hide"),r.addEventListener(h,i)):r.classList.add("dsqjs-hide")}else{if(0!==t.code||0!==t.response.length)throw new Error;f("你可能无法访问 Disqus,已启用评论基础模式。"+v),q("dsqjs-post-container").innerHTML='<p class="dsqjs-no-comment" >'+M.config.nocomment+"</p>",L(),q("dsqjs-force-disqus").addEventListener(h,D)}}).catch(function(){""===s?T():(r.classList.remove("dsqjs-disabled"),r.innerHTML="加载更多评论失败,点击重试",r.addEventListener(h,i))})},m=function(s){function o(s){return s.comment.author.profileUrl?(s.comment.avatarEl='<a href="'+s.comment.author.profileUrl+'"><img src="'+n(s.comment.author.avatar.cache)+'" '+c+"></a>",s.comment.authorEl='<span class="dsqjs-post-author"><a href="'+s.comment.author.profileUrl+'" '+c+">"+s.comment.author.name+"</a></span>"):(s.comment.avatarEl='<img src="'+n(s.comment.author.avatar.cache)+'">',s.comment.authorEl='<span class="dsqjs-post-author">'+s.comment.author.name+"</span>"),M.config.adminLabel&&s.isPrimary&&(s.comment.authorEl+='<span class="dsqjs-admin-badge">'+M.config.adminLabel+"</span>"),s}function a(s){var e="",t="",t=s.isDeleted?"<small>此评论已被删除</small>":(e=s.authorEl+'<span class="dsqjs-bullet"></span>',function(s){var e=p.createElement("div");e.innerHTML=s;var t=e.getElementsByTagName("a");return Array.prototype.slice.call(t).forEach(function(s){var e=decodeURIComponent(s.href.replace(/https:\/\/disq\.us\/url\?url=/g,"")).replace(/(.*):.+cuid=.*/,"$1");s.href=e,s.innerHTML=e,s.rel="external noopener nofollow noreferrer",s.target="_blank"}),e.innerHTML}(n(s.message)));return g(s,e,t)}var n=function(s){return s.replace(/a\.disquscdn\.com/g,"c.disquscdn.com")},t="";e(s).map(function(s){s.children&&(s.nesting=1);var e="";(s=o(s)).hasMore&&(e='<p class="dsqjs-has-more">切换至 <a id="load-more-'+s.comment.id+'">完整 Disqus 模式</a> 显示更多回复</p>'),t+='<li data-id="comment-'+s.comment.id+'" id="comment-'+s.comment.id+'">'+a(s.comment)+function t(s){var n=s.nesting,e=s.children||[];if(e){var r="",r=n<M.config.nesting?'<ul class="dsqjs-post-list dsqjs-children">':'<ul class="dsqjs-post-list">';return e.map(function(s){(s=o(s)).nesting=n+1;var e=s.hasMore?'<p class="dsqjs-has-more">切换至 <a class="dsqjs-has-more-btn" id="load-more-'+s.comment.id+'" data-more-id="comment-'+s.comment.id+'">完整 Disqus 模式</a> 显示更多回复</p>':"";r+='<li data-id="comment-'+s.comment.id+'" id="comment-'+s.comment.id+'">'+a(s.comment)+t(s)+e+"</li>"}),0!==(r+="</ul>").length?r:void 0}}(s)+e+"</li>"}),f("你可能无法访问 Disqus,已启用评论基础模式。"+v),q("dsqjs-post-container").innerHTML=t,L()}}function T(s){console.log(s),f('评论基础模式加载失败,是否 <a id="dsqjs-reload-dsqjs" class="dsqjs-msg-btn">重载</a> 或 <a id="dsqjs-reload-disqus" class="dsqjs-msg-btn">尝试完整 Disqus 模式</a> ?'),q("dsqjs-reload-dsqjs").addEventListener(h,i),q("dsqjs-reload-disqus").addEventListener(h,E)}function D(){y("dsqjs_mode","dsqjs"),i()}function w(){y("dsqjs_mode","disqus"),s()}var M={},m=p.location.origin+p.location.pathname+p.location.search;M.config=r({api:"https://disqus.skk.moe/disqus/",identifier:m,url:m,title:p.title,siteName:"",nesting:parseInt(C.nesting)||4,nocomment:"这里冷冷清清的,一条评论都没有"},C),M.page={};var I=M.config.apikey,k=function(){return Array.isArray(I)?I[Math.floor(Math.random()*I.length)]:I};e.disqus_config=function(){this.page.url=M.config.url,this.page.identifier=M.config.identifier,this.page.title=M.config.title},q(d).innerHTML='<div id="dsqjs"><div id="dsqjs-msg"></div>'+l+"</div>",n&&t&&o?(M.mode=t.getItem("dsqjs_mode"),M.sortType=t.getItem(j)||t.getItem("disqus.sort"),M.sortType||(y(j,"desc"),M.sortType="desc"),("disqus"===M.mode?s:"dsqjs"===M.mode?i:E)()):(f("你的浏览器版本过低,不兼容评论基础模式。"+v),L())}(window,document,localStorage,fetch,Promise)}try{module.exports=DisqusJS}catch(s){}