webmention
parent
84b057c052
commit
d0bb15e03d
|
@ -0,0 +1,32 @@
|
||||||
|
/**
|
||||||
|
* Webmastodon comment JSX component.
|
||||||
|
* @module layout/comment/webmastodon
|
||||||
|
*/
|
||||||
|
const { Component, Fragment } = require('inferno');
|
||||||
|
const { cacheComponent } = require('hexo-component-inferno/lib/util/cache');
|
||||||
|
|
||||||
|
class WebmentionTimeline extends Component {
|
||||||
|
|
||||||
|
render() {
|
||||||
|
|
||||||
|
const { helper } = this.props;
|
||||||
|
const { __ } = helper;
|
||||||
|
return <Fragment>
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-content">
|
||||||
|
<h2 class="title is-5">长短波</h2>
|
||||||
|
<div class="timeline webmention-timeline">
|
||||||
|
<script src={helper.url_for('/js/webmention-timeline.js')}></script>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</Fragment>
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
module.exports = WebmentionTimeline;
|
|
@ -0,0 +1,24 @@
|
||||||
|
const { Component, Fragment } = require('inferno');
|
||||||
|
|
||||||
|
class Webmention extends Component {
|
||||||
|
render() {
|
||||||
|
|
||||||
|
const { helper, plugin, head } = this.props;
|
||||||
|
const baseUrl = "https://webmention.io";
|
||||||
|
|
||||||
|
return <Fragment>
|
||||||
|
|
||||||
|
<script dangerouslySetInnerHTML={{
|
||||||
|
__html: `var webmentionContext = { baseUrl:'${baseUrl}'}; `}} >
|
||||||
|
</script>
|
||||||
|
<script src={helper.url_for('/js/webmention.js')}>
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</Fragment>;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
module.exports = Webmention;
|
|
@ -6,6 +6,7 @@ const Donates = require('./donates');
|
||||||
const Comment = require('./comment');
|
const Comment = require('./comment');
|
||||||
const Related = require('./related');
|
const Related = require('./related');
|
||||||
const Webmention = require('../comment/webmention')
|
const Webmention = require('../comment/webmention')
|
||||||
|
const WebmentionTimeline = require('../comment/webmention-timeline')
|
||||||
const ArticleLicensing = require('hexo-component-inferno/lib/view/misc/article_licensing');
|
const ArticleLicensing = require('hexo-component-inferno/lib/view/misc/article_licensing');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -132,6 +133,7 @@ module.exports = class extends Component {
|
||||||
{!index ? <Comment config={config} page={page} helper={helper} /> : null}
|
{!index ? <Comment config={config} page={page} helper={helper} /> : null}
|
||||||
{/* Webmention */}
|
{/* Webmention */}
|
||||||
{!index ? <Webmention config={config} page={page} helper={helper}/> :null}
|
{!index ? <Webmention config={config} page={page} helper={helper}/> :null}
|
||||||
|
{!index ? <WebmentionTimeline config={config} page={page} helper={helper}/> :null}
|
||||||
</Fragment>;
|
</Fragment>;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
function get_count(url) {
|
||||||
|
const webmentionBaseUrl = "https://webmention.io"
|
||||||
|
|
||||||
|
const cnt = fetch(`https://webmention.io/api/count.json?target=` + encodeURIComponent(url))
|
||||||
|
.then(function (response) {
|
||||||
|
return response.json();
|
||||||
|
})
|
||||||
|
.catch(function (ex){
|
||||||
|
console.error('featch mention count error' + ex);
|
||||||
|
});
|
||||||
|
return cnt
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
window.addEventListener('load', function () {
|
||||||
|
const webmentionsPromise = window.webmentionContext.webmentionsPromise;
|
||||||
|
const mastodonContext = window.mastodonContext;
|
||||||
|
const webmentionTimelineMessages = window.webmentionTimelineMessages;
|
||||||
|
|
||||||
|
webmentionsPromise && webmentionsPromise
|
||||||
|
.then(function (data) {
|
||||||
|
let html = '';
|
||||||
|
data.children.forEach(function (item) {
|
||||||
|
if (!(mastodonContext && item.url.startsWith(mastodonContext.mastodonBaseUrl))) {
|
||||||
|
html += `<article class="media"><div class="media-content"><p class="article-meta level-left">`;
|
||||||
|
|
||||||
|
if (item.author && item.author.name) {
|
||||||
|
html += `<i class="level-item author" >`;
|
||||||
|
if (item.author.url) {
|
||||||
|
html += `<a target="_blank" href="${item.author.url}" rel="noopener">${item.author.name}</a>`;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
html += item.author.name;
|
||||||
|
}
|
||||||
|
html += `</i>`;
|
||||||
|
}
|
||||||
|
let publishTime = (item.published && item.published.indexOf('T') > 0) ? item.published : item['wm-received'];
|
||||||
|
|
||||||
|
html += `<time class="level-item" datetime="${publishTime}">${publishTime.split('T')[0]}</time></p><p class="title level-left"><i class="level-item">🔗</i><a target="_blank" href="${item.url}" rel="noopener" class="level-item">${item.url}</a></p></div></article>`;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
html += `<article class="media"><div class="media-content"><p class="title level-right"><span class="level-item">🐘</span><span class="level-item"><a target="_blank" href="${item.url}" rel="noopener">${webmentionTimelineMessages['into_the_fediverse']}</a></span></p></article></div>`;
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
document.querySelector('div.webmention-timeline').innerHTML = html;
|
||||||
|
|
||||||
|
})
|
||||||
|
.catch(function (ex) {
|
||||||
|
console.error('fetch mastodon webmention error' + ex);
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,14 @@
|
||||||
|
(function (webmentionContext) {
|
||||||
|
|
||||||
|
const url = window.location.href;
|
||||||
|
const webmentionBaseUrl = "https://webmention.io"
|
||||||
|
|
||||||
|
webmentionContext.webmentionsPromise = fetch(webmentionBaseUrl + "/api/mentions.jf2?target=" + encodeURIComponent(url))
|
||||||
|
.then(function (response) {
|
||||||
|
console.error('sucess ' + url);
|
||||||
|
return response.json();
|
||||||
|
})
|
||||||
|
.catch(function (ex) {
|
||||||
|
console.error('fetch webmention error' + ex);
|
||||||
|
});
|
||||||
|
})(window.webmentionContext);
|
Loading…
Reference in New Issue