Federation-widget/federation-widget.max.js

174 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\">&#x231B\;<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;