173 lines
5.5 KiB
JavaScript
173 lines
5.5 KiB
JavaScript
/* This program is free software. It comes without any warranty, to
|
|
* the extent permitted by applicable law. You can redistribute it
|
|
* and/or modify it under the terms of the Do What The Fuck You Want
|
|
* To Public License, Version 2, as published by Sam Hocevar. See
|
|
* http://sam.zoy.org/wtfpl/COPYING for more details. */
|
|
|
|
var loadForm = document.getElementById('loadForm');
|
|
loadForm.addEventListener('submit', function(e) {
|
|
e.preventDefault();
|
|
loadConfig();
|
|
}, true);
|
|
|
|
// Change variables here.
|
|
var type = 'user'; // could be 'group' to follow a group
|
|
var servertype ='friendica';
|
|
var user = 'marco';
|
|
var max = 5;
|
|
var tag = 'federation-widget';
|
|
var domain = 'https://freunde.ma-nic.de';
|
|
var posttime_label = 'Post time:';
|
|
|
|
// Other variables
|
|
if (servertype=='diaspora'){
|
|
url = domain+'/public/'+user+'.atom'
|
|
}
|
|
else if (servertype=='mastodon'){
|
|
url = domain+'/@'+user+'.atom'
|
|
}
|
|
else {
|
|
url = domain+'/feed/'+user;
|
|
}
|
|
|
|
function loadConfig()
|
|
{
|
|
domain = document.getElementById('profile_domain').value;
|
|
servertype = document.getElementById('server_type').value;
|
|
user = document.getElementById('profile_name').value;
|
|
profile_type = document.getElementById('profile_type');
|
|
type = profile_type.options[profile_type.selectedIndex].value;
|
|
if (servertype=='diaspora'){
|
|
url = domain+'/public/'+user+'.atom'
|
|
}
|
|
else if (servertype=='mastodon'){
|
|
url = domain+'/@'+user+'.atom'
|
|
}
|
|
else {
|
|
url = domain+'/feed/'+user;
|
|
}
|
|
getAtom();
|
|
}
|
|
|
|
function getAtom()
|
|
{
|
|
if (window.XMLHttpRequest)
|
|
{// code for IE7+, Firefox, Chrome, Opera, Safari
|
|
xmlhttp=new XMLHttpRequest();
|
|
}
|
|
else
|
|
{// code for IE6, IE5
|
|
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
|
|
}
|
|
xmlhttp.open("GET",url,true);
|
|
xmlhttp.onreadystatechange = function() {
|
|
if(xmlhttp.readyState === XMLHttpRequest.DONE) {
|
|
try{if (xmlhttp.status=200){updateWidget(xmlhttp.responseXML)}}
|
|
catch (e){}
|
|
}
|
|
}
|
|
xmlhttp.send();
|
|
}
|
|
|
|
function updateWidget(xmlDoc){;
|
|
|
|
if (servertype=='hubzilla'){
|
|
userinfo=xmlDoc.getElementsByTagNameNS('http://purl.org/zot','owner')[0];
|
|
} else{
|
|
userinfo=xmlDoc.getElementsByTagName('author')[0];
|
|
}
|
|
|
|
try {
|
|
if (servertype=='hubzilla'){
|
|
var imagelinks=userinfo.getElementsByTagName('link');
|
|
for (var i=0;i< imagelinks.length;i++) {
|
|
if (imagelinks[i].getAttribute('rel')=='avatar'){
|
|
img=imagelinks[i].getAttribute('href')
|
|
};
|
|
}
|
|
} else{
|
|
img = xmlDoc.getElementsByTagName('logo')[0].firstChild.data;
|
|
}
|
|
}
|
|
catch (e) {
|
|
img = '';
|
|
}
|
|
|
|
try {
|
|
profile = userinfo.getElementsByTagName('uri')[0].firstChild.data;
|
|
}
|
|
catch (e) {
|
|
profile = '';
|
|
}
|
|
|
|
try {
|
|
displayname = userinfo.getElementsByTagNameNS('http://portablecontacts.net/spec/1.0','displayName')[0].firstChild.data
|
|
}
|
|
catch (e) {
|
|
displayname = '';
|
|
}
|
|
|
|
//Header
|
|
content = '<div id="federation_widget"><header>';
|
|
if (img != '') {
|
|
content += '<a target= "_blank" href="'+profile + '"><img src="'+img+'" title="Avatar"/></a>';
|
|
}
|
|
content += ' <p><a target= "_blank" href="'+profile + '">'+displayname+ '</a></p></header>';
|
|
|
|
//Statuses in Array
|
|
var items = xmlDoc.getElementsByTagName('entry');
|
|
var max_item = max - 1
|
|
|
|
//Read item from array
|
|
for (var n=0; n < items.length; n++) {
|
|
try {//Images, names and link for Group member
|
|
var item_groupmember="",item_groupmember_screen_name="",item_groupmember_name="", item_groupmember_image="",item_groupmember_link="";
|
|
if (type=='group'){
|
|
var item_groupmember_screen_name = items[n].getElementsByTagName('author')[0].getElementsByTagNameNS('http://portablecontacts.net/spec/1.0','displayName')[0].firstChild.data;
|
|
var authorlinks=items[n].getElementsByTagName('link');
|
|
for (var i=0;i< authorlinks.length;i++) {
|
|
if (authorlinks[i].getAttribute('rel')=='avatar'){
|
|
var item_groupmember_image=authorlinks[i].getAttribute('href')
|
|
};
|
|
}
|
|
|
|
var item_groupmember_link = items[n].getElementsByTagName('uri')[0].firstChild.data;
|
|
var item_groupmember = '<span class=\"groupmember\"><a class=\"tooltip\" target= \"_blank\" href=\"' + item_groupmember_link + '\"><img style=\"max-width:50px;\" alt=\"Profile\" align=\"left\" src="' + item_groupmember_image + '\" />' + item_groupmember_screen_name + ' <span>' + item_groupmember_link +'</span> </a> </span>';
|
|
};
|
|
}
|
|
catch (e) {
|
|
var item_groupmember='',item_groupmember_name='',item_groupmember_image='',item_groupmember_link='';
|
|
}
|
|
|
|
try {//Get Status Html
|
|
var item_content = items[n].getElementsByTagName('content')[0].firstChild.data;
|
|
}
|
|
catch (e) {
|
|
var item_content = '';
|
|
}
|
|
|
|
|
|
try {//Get Create Time from status
|
|
var item_time = '';
|
|
item_time = new Date( items[n].getElementsByTagName('updated')[0].firstChild.data).toLocaleString();
|
|
item_time= "<span class=\"tooltip\">⌛\;<span>" + posttime_label + " " + item_time +"</span> </span>";
|
|
}
|
|
catch (e) {
|
|
var item_time = '';
|
|
}
|
|
|
|
//Build status string and add to timeline
|
|
content += '<article>'+item_groupmember+item_time+"<br />" +item_content+'</article>'
|
|
|
|
|
|
if ((max_item < items.length) && (n==max_item))
|
|
{
|
|
n = items.length;
|
|
}
|
|
}
|
|
|
|
content += '<footer></footer></div>';
|
|
document.getElementById(tag).innerHTML = content;
|
|
}
|
|
|
|
window.onload = getAtom;
|