welcome-to-the-fediverse/plugin/title-footer/title-footer.js

117 rivejä
3,1 KiB
JavaScript

/********************************************************
* *
* Javascript for the Title-Footer plugin for Reveal.js *
* *
* Author: Igor Leturia *
* *
* License: GPL v3 *
* http://www.gnu.org/copyleft/gpl.html *
* *
********************************************************/
/* Title-Footer object and properties declaration with default values */
var title_footer=
{
title: '',
background:'rgba(0,0,0,0.1)',
};
/* Function to obtain all child elements with any of the indicated tags (from http://www.quirksmode.org/dom/getElementsByTagNames.html) */
title_footer.getElementsByTagNames=function(list,obj)
{
if (!obj)
{
var obj=document;
};
var tagNames=list.split(',');
var resultArray=new Array();
for (var i=0;i<tagNames.length;i++)
{
var tags=obj.getElementsByTagName(tagNames[i]);
for (var j=0;j<tags.length;j++)
{
resultArray.push(tags[j]);
};
};
var testNode=resultArray[0];
if (!testNode)
{
return [];
};
if (testNode.sourceIndex)
{
resultArray.sort(
function (a,b)
{
return a.sourceIndex-b.sourceIndex;
}
);
}
else if (testNode.compareDocumentPosition)
{
resultArray.sort(
function (a,b)
{
return 3-(a.compareDocumentPosition(b)&6);
}
);
};
return resultArray;
};
/* Method to initialize the Title-Footer footer */
title_footer.initialize=function(title,background)
{
// Link to the Title-Footer CSS
var link=document.createElement("link");
link.href="plugin/title-footer/title-footer.css";
link.type="text/css";
link.rel="stylesheet";
document.getElementsByTagName("head")[0].appendChild(link);
// Initialize properties according to parameters
this.background=background || 'rgba(0,0,0,0.1)';
var title=title || '';
if (title!='')
{
this.title=title;
}
else
{
var first_section=document.getElementsByTagName('section')[0];
if (first_section.getElementsByTagName('section').length>0)
{
first_section=first_section.getElementsByTagName('section')[0];
};
var title_elements=this.getElementsByTagNames('h1,h2,h3',first_section);
if (title_elements.length>0)
{
this.title=title_elements[0].textContent;
for (var title_elements_index=1;title_elements_index<title_elements.length;title_elements_index++)
{
this.title=this.title+' - '+title_elements[title_elements_index].textContent;
};
};
};
// Create the Title-Footer footer
var title_footer=document.createElement('footer');
title_footer.setAttribute('id','title-footer');
title_footer.setAttribute('style','background:'+this.background);
var title_footer_p=document.createElement('p');
title_footer.appendChild(title_footer_p);
var a_element=document.createElement('a');
a_element.setAttribute('href','#/0');
a_element.appendChild(document.createTextNode(this.title));
title_footer_p.appendChild(a_element);
var div_class_reveal=document.querySelectorAll('.reveal')[0];
div_class_reveal.appendChild(title_footer);
};