To get it "in the fingers", I thought it might be handy to have all my browser links in an xml file and have an xsl attached to have it transformed into html providing them in pop-lists and a button. With a little java script it is then possible to have the link loaded after choosing a link and pressing the button. So I created my first version of the XML and XSL. It was in the time that Internet Explorer 6 was pretty new or at least the current release. I think I was into Firefox already. IE6 and Firefox were able to load and process the xsl file when it was attached to the xml file. To do so you have to add the following tag to the top of your xml file:
<?xml-stylesheet href="links.xsl" type="text/xsl"?>
Like;
<?xml version="1.0"?> <?xml-stylesheet href="links.xsl" type="text/xsl"?> <link-lists name="Links" title="Internet Links" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Begin van de Lists! <lists> <list name="DarwinApps" title="Darwin Links"> <link description="Darwin-IT" link="http://www.darwin-it.nl" name="Darwin-IT" /> ...
The XSL that I created for it is given at the bottom of this post.
Last week I enhanced it a little to have a button to load all the links of a list at once. That is particularly handy for a list of webmail-urls to load at the start of your day.
I'm very fond of this xml/xsl combi. It is so simple, since it consist of three ascii files (xml, xsl and css). The xml file is easy to extend and after a reload in the browser the link-lists are renewed. The xsl is simple to enhance to add extra functionality. And the css makes it possible to have it a layout that complies with your taste or desktop. Skinning was never so easy. And it works in both Windows and Linux. And probably Mac OS. On Windows XP I even had it on my Active Desktop. But I can't find how to do it on Windows 7 or Linux.
Later in history, also a few years ago (2009) I created a tool in java to edit the xml file. Also this one is enhanced a few times and last week I posted a blog on this tool. See here. I made it xml-parser-vendor-independent. And it's opensource thus you might take a look at the source.
To try the xml/xsl you can open the xml-links file from here. Of course you can download it to your laptop and edit it to add your own links and remove the ones not needed. The xsl is for download here and the css-file here. Place the xml and the xsl in the same folder, the css is expected in a subfolder called "style".
Below is the source of the XSL for investigation. As you can see I set it up in a modular way. I'm used to have a template for every hierarchical level of XML. And for particular functionalities, such as the generation of the java script for each poplist. You can use the xml-tool set in the the earlier post to perform a transform of the XML with the XSL to see the resulting HTML. Have fun with it.
<?xml version="1.0"?> <!-- (c) 2008-2011, by Martien van den Akker Darwin-IT Professionals --> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" /> <!-- Variables --> <xsl:variable name="newline"> <xsl:text></xsl:text></xsl:variable> <!-- main --> <xsl:template match="/"> <html> <xsl:call-template name="heading" /> <body> <xsl:call-template name="body" /></body></html></xsl:template> <xsl:template name="heading"> <!-- Heading --> <head> <title>Links</title> <LINK HREF="style/style.css" REL="STYLESHEET" TYPE="text/css" /></head> <!-- Script to load a page --> <script language="javascript"> <xsl:text>function loadPage(link) { newWdw=window.open(link,"_blank",""); }</xsl:text></script></xsl:template> <xsl:template name="body"> <!-- Body --> <body> <xsl:apply-templates select="/link-lists" /></body></xsl:template> <!-- /link-lists --> <xsl:template match="link-lists" name="link-lists"> <h1> <xsl:value-of select="@title" /></h1> <table> <xsl:apply-templates select="lists/list" /></table></xsl:template> <!-- /link-lists/lists/list --> <xsl:template match="lists/list" name="lists-list"> <tr> <td> <xsl:value-of select="@title" /></td> <!-- generate javascript for loading a link --> <xsl:call-template name="loadLink" /> <!-- generate javascript for loading a links --> <xsl:call-template name="loadAllLinks" /> <!-- generate a poplist and a button --> <xsl:call-template name="writePopList" /></tr></xsl:template> <!-- loadLink: generate a javascript that loads a link --> <xsl:template name="loadLink"> <xsl:text disable-output-escaping="yes"> <!-- script to load a link --> </xsl:text> <script language="javascript"> <xsl:value-of select="concat($newline,' function load', @name,'Link()')" /> <xsl:text disable-output-escaping="yes">{</xsl:text> <xsl:value-of select="concat(' var l_idx = document.', @name, 'LinkSelector.select.selectedIndex;',$newline)" /> <xsl:value-of select="concat(' var l_value = document.', @name, 'LinkSelector.select.options[l_idx].value;')" /> <xsl:text disable-output-escaping="yes">if (l_value != "none") { loadPage(l_value); } }</xsl:text></script></xsl:template> <!-- loadAllLinks: generate a javascript that loads all links of a poplist --> <xsl:template name="loadAllLinks"> <xsl:text disable-output-escaping="yes"> <!-- script to load a link --> </xsl:text> <script language="javascript"> <xsl:value-of select="concat($newline,' function loadAll', @name,'Links()')" /> <xsl:text disable-output-escaping="yes">{ var l_idx; var l_value;</xsl:text> <xsl:value-of select="concat(' for(l_idx=0; l_idx<document.', @name, 'LinkSelector.select.length; l_idx++)')"/> <xsl:value-of select="concat($newline,' {',$newline)"/> <xsl:value-of select="concat(' l_value=document.', @name, 'LinkSelector.select.options[l_idx].value;')"/> <xsl:text disable-output-escaping="yes"> if (l_value != "none") { loadPage(l_value); } } }</xsl:text></script></xsl:template> <xsl:template name="writePopList"> <td> <form name="{concat(@name, 'LinkSelector')}"> <table border="0" cellspacing="0"> <tr> <td width="250px"> <!-- Select --> <select name="select"> <option value="none">Kies een link:</option> <xsl:for-each select="link"> <option value="{@link}"> <xsl:value-of select="@name" /></option></xsl:for-each></select></td> <td> <!-- Button --> <input onclick="{concat('load',@name,'Link()')}" type="button" value="Toon" /></td> <td> <!-- Button Load All --> <input onclick="{concat('loadAll',@name,'Links()')}" type="button" value="Toon alles" /></td></tr></table></form></td></xsl:template> </xsl:stylesheet>
No comments:
Post a Comment