diff --git a/scripts/tags/friends.js b/scripts/tags/friends.js
index 313026b..db0e1aa 100644
--- a/scripts/tags/friends.js
+++ b/scripts/tags/friends.js
@@ -3,64 +3,74 @@
* 格式与官方标签插件一致使用空格分隔,中括号内的是可选参数(中括号不需要写出来)
*
* {% friends [style:rect] [group:name] %}
+ * {% friends [api:https://issues-api.vercel.app] [repo:xaoxuu/friends] %}
*/
'use strict';
hexo.extend.tag.register('friends', function(args) {
- args = hexo.args.map(args, ['style', 'group']);
+ args = hexo.args.map(args, ['style', 'group', 'repo']);
var friends = hexo.locals.get('data').friends;
if (friends == undefined) {
- return;
+ friends = {};
}
- var el = '
0) {
el += args.style;
} else {
- el += ' round';
+ el += 'round';
}
- el += '">';
- function groupHeader(group) {
- var header = '';
- return header;
+ el += '"';
+ if (args.repo) {
+ el += ' id="issues-api"';
+ el += ' api="' + (args.api || 'https://issues-api.vercel.app') + '/' + args.repo + '"';
}
- function cell(friend) {
- if (friend.url && friend.title) {
- var cell = '
'
- return cell;
- } else {
- return '';
+ el += '>';
+ if (args.repo) {
+ el += '
';
+ } else {
+ function groupHeader(group) {
+ var header = '';
+ return header;
}
- }
- for (let groupId of Object.keys(friends)) {
- function f() {
- if (groupId in friends) {
- let group = friends[groupId];
- el += groupHeader(group);
- el += '
';
- group.items.forEach((friend, i) => {
- el += cell(friend);
- });
- el += '
';
+ function cell(friend) {
+ if (friend.url && friend.title) {
+ var cell = '
'
+ return cell;
+ } else {
+ return '';
}
}
- if (args.group && args.group.length > 0) {
- if (args.group == groupId) {
+ for (let groupId of Object.keys(friends)) {
+ function f() {
+ if (groupId in friends) {
+ let group = friends[groupId];
+ el += groupHeader(group);
+ el += '
';
+ group.items.forEach((friend, i) => {
+ el += cell(friend);
+ });
+ el += '
';
+ }
+ }
+ if (args.group && args.group.length > 0) {
+ if (args.group == groupId) {
+ f();
+ }
+ } else {
f();
}
- } else {
- f();
}
}
el += '
';
diff --git a/source/js/issues.js b/source/js/issues.js
index deb0def..697ae1f 100644
--- a/source/js/issues.js
+++ b/source/js/issues.js
@@ -1,6 +1,6 @@
const IssuesAPI = {
requestIssuesAPI(url, callback, timeout) {
- let retryTimes = 10;
+ let retryTimes = 5;
function request() {
return new Promise((resolve, reject) => {
let status = 0; // 0 等待 1 完成 2 超时
@@ -42,144 +42,45 @@ const IssuesAPI = {
}
request();
},
- parseIssueStrToJson(str) {
- let jsonStr = str.match(/```json[\s|\S]*```/);
- if (jsonStr && jsonStr.length > 0) {
- jsonStr = jsonStr[0];
- }
- if (jsonStr) {
- jsonStr = jsonStr.split('```json')[1].split('```')[0];
- if (jsonStr) {
- return JSON.parse(jsonStr);
- }
- }
- return undefined;
- },
- groupIssuesData(cfg, data) {
- var groups = new Object();
- if (data.length > 0) {
- if (cfg.group != undefined) {
- const arr = cfg.group.split('=');
- if (arr.length > 1) {
- const groupKey = arr[0];
- let groupList = arr[1];
- if (groupKey && groupList) {
- groupList = groupList.split(',');
- }
- cfg.group = groupList;
- for (i = 0; i < data.length; i++) {
- const obj = this.parseIssueStrToJson(data[i].body);
- if (obj && (groupKey in obj)) {
- let tmp = obj[groupKey];
- tmp = tmp.replace(', ', ',').split(',');
- for (var j = 0; j < tmp.length; j++) {
- if (groupList.includes(tmp[j])) {
- let arr = groups[tmp[j]];
- if (arr == undefined) {
- arr = new Array();
- }
- arr.push(obj);
- groups[tmp[j]] = arr;
- }
- }
- }
- }
- }
- } else {
- cfg.group = [''];
- for (i = 0; i < data.length; i++) {
- const obj = this.parseIssueStrToJson(data[i].body);
- if (obj) {
- let arr = groups[''];
- if (arr == undefined) {
- arr = new Array();
- }
- arr.push(obj);
- groups[''] = arr;
- }
- }
- }
- }
- return groups;
- },
- getIssuesAPIForSites(cfg) {
+ getIssuesAPIForFriends(cfg) {
const el = $(cfg.el)[0];
- $(el).append('');
+ $(el).append('');
this.requestIssuesAPI(cfg.api, function(data) {
$(el).find('.loading').remove();
- const dt = IssuesAPI.groupIssuesData(cfg, data);
- const groupTitles = Object.keys(dt);
- cfg.group.forEach((groupTitle, i) => {
- const issues = dt[groupTitle];
- if (issues && issues.length > 0) {
- if (groupTitle.length > 0) {
- $(el).append('' + groupTitle + '
');
- } else if (name == '' && groupTitles.length > 1) {
- $(el).append('' + '未分组' + '
');
- }
- $(el).append('');
- // layout items
- for (j = 0; j < issues.length; j++) {
- const issue = issues[j];
- let imgTag = '';
- if (issue.screenshot && issue.screenshot.length > 0) {
- imgTag = '';
- } else {
- imgTag = '';
- }
- let infoTag = '';
- if (issue.avatar && issue.avatar.length > 0) {
- infoTag += '
';
- }
- infoTag += '
' + issue.title + '' + issue.description + ' ';
- const cardTag = '';
- $(el).find('.site-card-group.' + i).append(cardTag);
- }
- }
+ const arr = data.content;
+ arr.forEach((item, i) => {
+ var user = '';
+ $(el).find('.group-body').append(user);
});
}, function() {
$(el).find('.loading i').remove();
$(el).find('.loading p').text('加载失败,请稍后重试。');
});
},
- getIssuesAPIForTimeline(cfg) {
- const el = $(cfg.el)[0];
- $(el).append('');
- this.requestIssuesAPI(cfg.api, function(data) {
- $(el).find('.loading').remove();
- if (data.length > 0) {
- for (i = 0; i < data.length; i++) {
- const a = ' ';
- const header = '';
- const body = '';
- const tag = '' + header + body + '
';
- $(el).append(tag);
- }
- }
- }, function() {
- $(el).find('.loading i').remove();
- $(el).find('.loading p').text('加载失败,请稍后重试。');
- });
- },
request() {
const els = document.getElementsByClassName('issues-wrap');
for (var i = 0; i < els.length; i++) {
const el = els[i];
const api = el.getAttribute('api');
const group = el.getAttribute('group');
+ if (api == null) {
+ continue;
+ }
var cfg = new Object();
cfg.class = el.getAttribute('class');
cfg.el = el;
cfg.api = api;
cfg.group = group;
- if (cfg.class.split(' ').includes('sites')) {
- this.getIssuesAPIForSites(cfg);
- } else if (cfg.class.split(' ').includes('timeline')) {
- this.getIssuesAPIForTimeline(cfg);
- }
+ this.getIssuesAPIForFriends(cfg);
}
}
};
$(function () {
IssuesAPI.request();
-});
\ No newline at end of file
+});