Button to add an event to Google Calendar, visited profile links shown in red, mutual kinks shown brighter, homepage feed enlarged, show pagination at the top of people lists
当前为
// ==UserScript==
// @name Improvements to FetLife's UI
// @namespace http://tampermonkey.net/
// @version 0.1
// @description Button to add an event to Google Calendar, visited profile links shown in red, mutual kinks shown brighter, homepage feed enlarged, show pagination at the top of people lists
// @author You
// @match https://fetlife.com/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=fetlife.com
// @require https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js
// @license MIT
// @grant none
// ==/UserScript==
/* global $ */
(function() {
'use strict';
console.log("Improve Fetlife: Start");
var s = document.createElement("style");
s.innerHTML="/* Added by Tampermonkey script: Improvements to FetLife's UI */ ";
//visited profile links shown in red
s.innerHTML+="#main-content .flex.flex-wrap a:visited {color: rgb(125,0,0) }";
//mutual kinks shown brighter
s.innerHTML+=".bg-gray-600 { background-color: #777; }";
//homepage feed enlargement
s.innerHTML+="#stories-list div { font-size: 22px; } #stories-list a.dib img { width: 150px !important; height: 150px !important; }";
document.head.appendChild(s);
//Improve group members e.g. page https://fetlife.com/groups/17165/members
//or attendee list e.g. https://fetlife.com/events/1064773/rsvps
if (pathMatch(/\/groups\/\d+\/members/) || pathMatch(/\/events\/\d+\/rsvps/)) {
copyPrevNextPageLinksToTop();
} else if (pathMatch(/\/events\/\d+\/?/)) {
addButtonCalendar();
}
console.log("Improve Fetlife: Complete");
})();
function pathMatch(regexp) {
var result = window.location.pathname.match(regexp);
//console.log(window.location.pathname, regexp, result);
return result;
}
function copyPrevNextPageLinksToTop() {
$("header.justify-start, header.relative").after( $("footer div.pagination").clone().addClass("tc") ); //tc = text center
}
function addButtonCalendar() {
var destination = $(".w275-l > div:first-child");
var sidebar = $(".w275-l > div:first-child > div > div");
if (sidebar.length == 0) {
destination.after("<div style='color:red; border:3px solid gray'>Cannot find sidebar</div>");
return;
}
//dates
var dates = $(sidebar[0]).find("p span");
var start = null;
var end = null;
if (dates.length > 2) {
//start and end are on different days
dates = dates.map(function(i,node) { return node.innerHTML; });
start = dates[2] +" "+ dates[3];
end = dates[5] +" "+ dates[6];
} else if (dates.length==1 || dates.length==2) {
//start and end are on the same day
var parts = dates[dates.length-1].innerHTML.split("<br>");
var times = parts[1].split(" - ");
start = parts[0] +" "+ times[0];
end = parts[0] +" "+ times[1];
} else {
destination.after("<div style='color:red; border:3px solid gray'>Date field has too few elements: " + dates.length +"</div>");
return;
}
//description += start +" to " + end; //debugging
start = new Date(start).toISOString().replace(/-|:|\.\d\d\d/g,"");
end = new Date(end).toISOString().replace(/-|:|\.\d\d\d/g,"");
//location
var location = $(sidebar[1]).find("p").html();
//replace parts of HTML with needed info, and then clear out the map link and closing span tag
location = location.replace(/\s*<br>/,": ").replace(/<br>/,", ").replace(/<span [^>]*>/,"").replace(/(, United States )?<a.*/,"");
var url = "http://www.google.com/calendar/render?action=TEMPLATE"
+ "&text=" + encodeURIComponent($("header h1").text())
+ "&dates=" + encodeURIComponent(start) + "/" + encodeURIComponent(end)
+ "&location=" + encodeURIComponent(location)
+ "&trp=false&sprop=&sprop=name:";
//description can be long, so add it last
var description = "URL: "+ window.location +"<br><br>" + $(".story__copy").html();
url += "&details=" + encodeURIComponent(description);
//add button!
var btn = "<a target='_blank' data-color='lined' "
+ "class='relative no-underline items-center br1 us-none ba b-gray-750 hover-b-gray-600 b-animate bg-transparent hover-bg-transparent gray-300 hover-gray-300 fill-gray-300 fw4 tc justify-center inline-flex lh-copy f7 pv1 ph2' "
+ "href=\""+ url +"\">Add to Google Calendar</a>";
destination.after(btn);
/*
<a href="http://www.google.com/calendar/render?
action=TEMPLATE
&text=[event-title]
&dates=[start-custom format='Ymd\\THi00\\Z']/[end-custom format='Ymd\\THi00\\Z']
&details=[description]
&location=[location]
&trp=false
&sprop=
&sprop=name:"
rel="nofollow">Add to my calendar</a>
*/
}