1. 昨日以前のイベント背景を暗くする.2. ランキングページなどで参加済みイベントでタグを描画.
// ==UserScript==
// @name Connpass nnap
// @namespace http://tampermonkey.net/
// @version 0.1
// @description 1. 昨日以前のイベント背景を暗くする.2. ランキングページなどで参加済みイベントでタグを描画.
// @author kimitsu
// @match https://connpass.com/*
// @grant none
// ==/UserScript==
function getDate() {
let dt = new Date();
let yyyy = dt.getFullYear();
let mm = ("00" + (dt.getMonth()+1)).slice(-2);
let dd = ("00" + dt.getDate()).slice(-2);
return `${yyyy}/${mm}/${dd}`;
}
function darkenOldEvent() {
let eventLists = document.getElementsByClassName('event_list');
let today = getDate()
for (let elm of eventLists) {
let schedule = elm.children[0].children;
let date = `${schedule[0].innerText}/${schedule[1].innerText}`;
if (date < today) elm.style.backgroundColor = '#e0e0e0';
}
}
async function getEventURLs(username, owner) {
let url = `https://connpass.com/api/v1/event/?${owner ? 'owner_' : ''}nickname=${username}&order=2&count=100`;
let eventURLs = [];
await fetch(url)
.then(function(data) {
return data.json();
}).then(function(json) {
for (let event of json.events) {
eventURLs.push(event.event_url);
}
});
return eventURLs;
}
function createNewTag(owner) {
let newtag = document.createElement('p');
newtag.className = `label_status_tag ${owner ? 'owner' : 'join'}`;
newtag.innerText = owner ? '主催' : '参加';
return newtag;
}
function getEventList(path) {
if (path === 'user' || path === 'upcoming_events') {
return document.getElementsByClassName('event_list');
} else if (path === 'ranking') {
return document.getElementsByClassName('ranking_event_list');
} else if (path === 'explore') {
return document.getElementsByClassName('recent_event_list');
}
}
function findParent(elm, path) {
if (path === 'user') {
return elm.children[1].children[1];
} else if (path === 'explore' || path === 'ranking') {
return elm.children[0];
} else if (path === 'upcoming_events') {
return elm.children[1].children[0];
}
}
function getTitle(parent) {
for (let e of parent.children) {
if (e.className === 'event_title') {
return e;
}
}
}
async function addParticipationTag(username, path, owner) {
// 参加イベントのURL
let eventURLs = await getEventURLs(username, owner);
// userの参加イベントに参加ステータスを追加
let eventList = getEventList(path);
for (let elm of eventList) {
let parent = findParent(elm, path);
let title = getTitle(parent);
if (eventURLs.indexOf(title.children[0].href) !== -1) {
let newtag = createNewTag(owner);
if (path === 'user') {
elm.children[1].children[0].appendChild(newtag);
} else {
let pos = parent.childElementCount - 2;
parent.children[pos].appendChild(newtag);
}
}
}
}
(async function() {
'use strict';
let paths = location.pathname.split('/');
if (paths[1] === 'user') {
darkenOldEvent();
}
let username = document.getElementsByClassName('username image_link')[0].children[0].title;
if ((paths[1] === 'user' && paths[2] !== username) || ['explore', 'upcoming_events', 'ranking'].indexOf(paths[1]) !== -1) {
addParticipationTag(username, paths[1], true);
addParticipationTag(username, paths[1], false);
}
})();