picfinity-commit Mailing List for Picfinity (Page 3)
Status: Beta
Brought to you by:
espadav8
You can subscribe to this list here.
2007 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(15) |
Aug
(44) |
Sep
(12) |
Oct
|
Nov
|
Dec
|
---|---|---|---|---|---|---|---|---|---|---|---|---|
2008 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <esp...@us...> - 2007-08-09 11:18:10
|
Revision: 22 http://picfinity.svn.sourceforge.net/picfinity/?rev=22&view=rev Author: espadav8 Date: 2007-08-09 04:18:11 -0700 (Thu, 09 Aug 2007) Log Message: ----------- Implement the 'link to image' feature Change the selectedImage div into a span - this means that the size doesn't need to be set/reset Remove some unneeded JS due to switching to a span Modified Paths: -------------- .themes/ajax/ajax.js .themes/ajax/ajax.xsl Modified: .themes/ajax/ajax.js =================================================================== --- .themes/ajax/ajax.js 2007-08-09 11:15:45 UTC (rev 21) +++ .themes/ajax/ajax.js 2007-08-09 11:18:11 UTC (rev 22) @@ -328,14 +328,9 @@ { var nodePath = getNodePath(getLayoutNode(imageNode.getAttribute("id"))); - var expandedImageDiv = document.createElement("div"); - expandedImageDiv.setAttribute("id", "expandedimage"); + var expandedImageSpan = document.createElement("span"); + expandedImageSpan.setAttribute("id", "expandedimage"); - // this should allow it to work in IE but makes it harder to follow - // in things like FireBug since you can't see the onclick for the divs - expandedImageDiv.style.width = "200px"; - expandedImageDiv.style.height = "43px"; - var linkToSpan = document.createElement("span"); linkToSpan.setAttribute("id", "linktospan"); linkToSpan.style.display = "none"; @@ -356,7 +351,6 @@ var imageSpan = document.createElement("span"); imageSpan.setAttribute("id", "expandedimagespan"); - // imageSpan.setAttribute("class", "image"); imageSpan.style.display = "none"; var albumImage = document.createElement("img"); @@ -373,10 +367,6 @@ expandedImage.src = imageThumbPath; expandedImage.onload = function() { - var expandedImageDiv = document.getElementById("expandedimage"); - expandedImageDiv.style.width = expandedImage.width + "px"; - expandedImageDiv.style.height = (expandedImage.height + 49) + "px"; - var loadingSpan = document.getElementById("loadingspan"); loadingSpan.style.display = "none"; @@ -387,12 +377,12 @@ linkToSpan.style.display = "block"; } - expandedImageDiv.appendChild(linkToSpan); - expandedImageDiv.appendChild(loadingSpan); - expandedImageDiv.appendChild(imageSpan); - expandedImageDiv.appendChild(imageNameSpan); + expandedImageSpan.appendChild(linkToSpan); + expandedImageSpan.appendChild(loadingSpan); + expandedImageSpan.appendChild(imageSpan); + expandedImageSpan.appendChild(imageNameSpan); - return expandedImageDiv; + return expandedImageSpan; } function createBreadcrumbTrail(element) Modified: .themes/ajax/ajax.xsl =================================================================== --- .themes/ajax/ajax.xsl 2007-08-09 11:15:45 UTC (rev 21) +++ .themes/ajax/ajax.xsl 2007-08-09 11:18:11 UTC (rev 22) @@ -32,28 +32,30 @@ </a> </h1> - <xsl:apply-templates select="layout" /> + <xsl:choose> + <xsl:when test="$post_id = 0"> + <xsl:apply-templates select="layout" /> + </xsl:when> + <xsl:otherwise> + <xsl:apply-templates select="layout" mode="post"/> + </xsl:otherwise> + </xsl:choose> </body> </html> </xsl:template> <xsl:template match="layout"> - <xsl:apply-templates select="themes"> - <xsl:with-param name="location" select="@name" /> - </xsl:apply-templates> + <xsl:apply-templates select="themes" /> <div id="breadcrumbtrail"></div> <div id="albums"> - <xsl:apply-templates select="folder"> - <xsl:with-param name="location" select="@name" /> - </xsl:apply-templates> + <xsl:apply-templates select="folder" /> + <xsl:apply-templates select="image" /> </div> </xsl:template> <xsl:template match="themes"> - <xsl:param name="location" /> - <div id="themes"> <form id="themeform" action="index.php" method="post"> <select name="theme" onchange="submit();"> @@ -76,8 +78,6 @@ </xsl:template> <xsl:template match="folder"> - <xsl:param name="location" /> - <div> <xsl:choose> <xsl:when test="count(folder) = 0 and count(image) = 0"> @@ -142,8 +142,114 @@ </xsl:template> <xsl:template match="image"> - <xsl:param name="location" /> - <xsl:variable name="id"><xsl:value-of select="@id" /></xsl:variable> + <xsl:param name="selectedID">0</xsl:param> + <xsl:variable name="path"> + <xsl:apply-templates select="ancestor::folder" mode="getpath" /> + </xsl:variable> + + <div class="thumbnail"> + <xsl:attribute name="id"><xsl:value-of select="@id" /></xsl:attribute> + <xsl:if test="@id = $selectedID"> + <xsl:attribute name="class">thumbnail selected</xsl:attribute> + </xsl:if> + <span class="image"> + <a> + <xsl:attribute name="onclick">showImage('<xsl:value-of select="@id" />'); return false;</xsl:attribute> + <xsl:attribute name="href">index.php?id=<xsl:value-of select="@id" /></xsl:attribute> + <img> + <xsl:attribute name="alt"><xsl:value-of select="@file" /></xsl:attribute> + <xsl:attribute name="src"><xsl:value-of select="concat('./.thumbs/', $path, @file)" /></xsl:attribute> + </img> + </a> + </span> + <span class="name"><xsl:value-of select="@file" /></span> + </div> </xsl:template> + + + <xsl:template match="layout" mode="post"> + <xsl:variable name="folder"> + <xsl:choose> + <xsl:when test="count(//folder[@id = $post_id]) = 1">1</xsl:when> + <xsl:when test="@id = $post_id">2</xsl:when> + <xsl:otherwise>0</xsl:otherwise> + </xsl:choose> + </xsl:variable> + + + <xsl:apply-templates select="themes" /> + + + <!-- the passed in ID is an image --> + <xsl:if test="$folder = 0"> + <xsl:apply-templates select="//image[@id = $post_id]" mode="post" /> + </xsl:if> + </xsl:template> + + <xsl:template match="folder" mode="breadcrumbtrail"> + <xsl:if test="parent::folder"> + <xsl:apply-templates select="parent::folder" mode="breadcrumbtrail" /> + </xsl:if> + + <ul class="trailentry"> + <li class="currentfolder"> + <span class="icon"> + <img src=".themes/ajax/foldericon.png" /> + </span> + <span class="name"><xsl:value-of select="@name" /></span> + <ul> + <xsl:for-each select="parent::*/folder"> + <li class="menuentry"> + <xsl:attribute name="onclick">openFolder('<xsl:value-of select="@id" />'); return false;</xsl:attribute> + <span class="icon"> + <img src=".themes/ajax/foldericon.png" /> + </span> + <span class="name"><xsl:value-of select="@name" /></span> + </li> + </xsl:for-each> + </ul> + </li> + </ul> + </xsl:template> + + <xsl:template match="image" mode="post"> + <xsl:variable name="path"> + <xsl:apply-templates select="ancestor::folder" mode="getpath" /> + </xsl:variable> + + <div id="breadcrumbtrail"> + <xsl:apply-templates select="parent::folder" mode="breadcrumbtrail" /> + </div> + + <div id="albums"> + <span id="expandedimage"> + <span style="display: block;" id="linktospan"> + <a> + <xsl:attribute name="href">index.php?id=<xsl:value-of select="@id" /></xsl:attribute> + Link to this image</a> + </span> + <span style="display: block;" id="expandedimagespan"> + <a href="#" onclick="closeImage(); return false;"> + <img> + <xsl:attribute name="src"><xsl:value-of select="concat('./', $path, @file)" /></xsl:attribute> + </img> + </a> + </span> + <span class="name"><xsl:value-of select="@file" /></span> + </span> + + <div id="selectedalbum"> + <xsl:apply-templates select="parent::*/folder" /> + <xsl:apply-templates select="parent::*/image"> + <xsl:with-param name="selectedID" select="@id" /> + </xsl:apply-templates> + </div> + + </div> + </xsl:template> + + <xsl:template match="folder" mode="getpath"> + <xsl:value-of select="concat(@name, '/')" /> + </xsl:template> </xsl:stylesheet> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <esp...@us...> - 2007-08-09 11:15:42
|
Revision: 21 http://picfinity.svn.sourceforge.net/picfinity/?rev=21&view=rev Author: espadav8 Date: 2007-08-09 04:15:45 -0700 (Thu, 09 Aug 2007) Log Message: ----------- Remove the 'div' before some of the ids since it's not needed Modified Paths: -------------- .themes/ajax/ajax.css Modified: .themes/ajax/ajax.css =================================================================== --- .themes/ajax/ajax.css 2007-08-09 11:13:16 UTC (rev 20) +++ .themes/ajax/ajax.css 2007-08-09 11:15:45 UTC (rev 21) @@ -27,25 +27,25 @@ /* --- ids --- */ -div#themes +#themes { position: absolute; top: 20px; right: 20px; } -div#selectedalbum +#selectedalbum { clear: both; - display: block; float: left; } -div#expandedimage +#expandedimage { padding: 5px 5px 0 5px; border: 1px solid #ccc; - clear: left; + clear: both; + float: left; } #loadingspan @@ -63,7 +63,7 @@ .folder, .thumbnail, -div#expandedimage +#expandedimage { background: #484848; } @@ -124,7 +124,7 @@ display: block; } -div#expandedimage span.name +#expandedimage span.name { margin: 5px -5px 0 -5px; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <esp...@us...> - 2007-08-09 11:13:16
|
Revision: 20 http://picfinity.svn.sourceforge.net/picfinity/?rev=20&view=rev Author: espadav8 Date: 2007-08-09 04:13:16 -0700 (Thu, 09 Aug 2007) Log Message: ----------- All ids in XHTML should start with a letter, to ensure this prepend 'id' to the md5 Modified Paths: -------------- index.php Modified: index.php =================================================================== --- index.php 2007-08-08 23:54:15 UTC (rev 19) +++ index.php 2007-08-09 11:13:16 UTC (rev 20) @@ -1,5 +1,4 @@ <?php - // site options $site_name = "Picfinity"; @@ -37,7 +36,7 @@ $create_thumbnails = true; // create a flat HTML version of the page - $create_html = true; + $create_html = false; // create the gallery.xml file (for use by themes $create_xml = true; @@ -90,7 +89,7 @@ $name = substr($folder, strrpos($folder, '/') + 1); // create a folder ID - $folder_id = md5($folder); + $folder_id = "id" . md5($folder); // add the folder to the Array (for use by the PEAR route) $layout = array('name' => $name, 'id' => $folder_id); @@ -155,7 +154,7 @@ { create_thumbnail($folder, $folder_entry, $ext); } - $image_id = md5($folder . '/' . $folder_entry); + $image_id = "id" . md5($folder . '/' . $folder_entry); $layout['image'][] = array('id' => $image_id, 'file' => $folder_entry); $folder_layout_xml .= "\t<image id=\"$image_id\" file=\"$folder_entry\" />\n"; } @@ -175,7 +174,7 @@ { global $use_pear; - $themes_id = md5(".themes"); + $themes_id = "id" . md5(".themes"); // create the themes node $layout = array('name' => '.themes', 'id' => $themes_id); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <esp...@us...> - 2007-08-08 23:54:14
|
Revision: 19 http://picfinity.svn.sourceforge.net/picfinity/?rev=19&view=rev Author: espadav8 Date: 2007-08-08 16:54:15 -0700 (Wed, 08 Aug 2007) Log Message: ----------- Add a link to the heading to show the default view - XSL Add an empty trail to the initial view - XSL A folder with only folders inside it now gets a mini-folder icon - XSL Slight position change for the mini-icons - CSS Set colour/pointer for the heading link - CSS Add reloadPage() function for the heading - JS Remove some (very) unneeded code from openFolder() - JS Set the correct text for folders with images and/or folders - JS Modified Paths: -------------- .themes/ajax/ajax.css .themes/ajax/ajax.js .themes/ajax/ajax.xsl Modified: .themes/ajax/ajax.css =================================================================== --- .themes/ajax/ajax.css 2007-08-08 14:46:22 UTC (rev 18) +++ .themes/ajax/ajax.css 2007-08-08 23:54:15 UTC (rev 19) @@ -16,7 +16,8 @@ background: #1a1a1a url('background.gif') repeat-x; } -h1 +h1, +h1 a { text-align: center; color: #d0d0d0; @@ -92,7 +93,7 @@ .icon { position: absolute; - top: 3px; + top: 4px; left: 15px; } @@ -144,11 +145,12 @@ /* --- hover actions --- */ - +a:hover +{ + cursor: pointer; +} .image a:hover, #linktospan a:hover, -.folder span.image:hover, -.thumbnail span.image:hover, #breadcrumbtrail ul li:hover { background: #606060; Modified: .themes/ajax/ajax.js =================================================================== --- .themes/ajax/ajax.js 2007-08-08 14:46:22 UTC (rev 18) +++ .themes/ajax/ajax.js 2007-08-08 23:54:15 UTC (rev 19) @@ -21,10 +21,20 @@ xmlDoc.load("gallery.xml"); } +function reloadPage() +{ + openFolder(xmlDoc.documentElement.getAttribute("id")); +} + function getLayoutNode(elementID) { + // check for the documentElement first + if (xmlDoc.documentElement.getAttribute("id") == elementID) + { + return xmlDoc.documentElement; + } // this is the best way, but nothing supports this (yet) - if ((xmlDoc.getElementById) && (xmlDoc.getElementById(elementID) != null)) + else if ((xmlDoc.getElementById) && (xmlDoc.getElementById(elementID) != null)) { return xmlDoc.getElementById(elementID); } @@ -50,33 +60,26 @@ // this is possibly the worse way, and it's still not supported by Safari else { - if (xmlDoc.documentElement.getAttribute("id") == elementID) + // this causes a problem with Safari + // xmlDocFolders.length == 0 + var xmlDocFolders = xmlDoc.getElementsByTagName("folder"); + + for (var i = 0; i < xmlDocFolders.length; i++) { - return xmlDoc.documentElement; + if (xmlDocFolders[i].getAttribute("id") == elementID) + { + return xmlDocFolders[i]; + } } - else + + var xmlDocImages = xmlDoc.getElementsByTagName("image"); + + for (var i = 0; i < xmlDocImages.length; i++) { - // this causes a problem with Safari - // xmlDocFolders.length == 0 - var xmlDocFolders = xmlDoc.getElementsByTagName("folder"); - - for (var i = 0; i < xmlDocFolders.length; i++) + if (xmlDocImages[i].getAttribute("id") == elementID) { - if (xmlDocFolders[i].getAttribute("id") == elementID) - { - return xmlDocFolders[i]; - } + return xmlDocImages[i]; } - - var xmlDocImages = xmlDoc.getElementsByTagName("image"); - - for (var i = 0; i < xmlDocImages.length; i++) - { - if (xmlDocImages[i].getAttribute("id") == elementID) - { - return xmlDocImages[i]; - } - } } } return null; @@ -158,10 +161,11 @@ } function openFolder(elementID) -{ - var nodePath = getNodePath(getLayoutNode(elementID)); +{ + var layoutNode = getLayoutNode(elementID); + var nodePath = getNodePath(layoutNode); - var breadcrumbDiv; + var breadcrumbDiv = createBreadcrumbTrail(layoutNode);; var newAlbumsDiv = document.createElement("div"); newAlbumsDiv.setAttribute("id", "albums"); @@ -172,42 +176,21 @@ var selectedDiv = document.createElement("div"); selectedDiv.setAttribute("id", "selectedalbum"); - var mainFolders = getLayoutNode(elementID).parentNode.childNodes; + var selectedAlbumFolders = getChildNodesByTagName(layoutNode, "folder"); + var selectedAlbumImages = getChildNodesByTagName(layoutNode, "image"); - for (var i = 0; i < mainFolders.length; i++) + for (var j = 0; j < selectedAlbumFolders.length; j++) { - // if it's a folder we've come across - if (mainFolders[i].nodeName == "folder") - { - // if it's not the folder we're acting on - if(mainFolders[i].getAttribute("id") == elementID) - { - breadcrumbDiv = createBreadcrumbTrail(mainFolders[i]); - - var selectedAlbumFolders = getChildNodesByTagName(mainFolders[i], "folder"); - var selectedAlbumImages = getChildNodesByTagName(mainFolders[i], "image"); - - for (var j = 0; j < selectedAlbumFolders.length; j++) - { - var subFolderContainer = createSubFolderContainer(selectedAlbumFolders[j]); - selectedDiv.appendChild(subFolderContainer); - } - - for (var j = 0; j < selectedAlbumImages.length; j++) - { - var thumbnailContainer = createImageThumbnailContainer(selectedAlbumImages[j]); - selectedDiv.appendChild(thumbnailContainer); - } - } - } - - // we've come across an image node - else if (mainFolders[i].nodeName == "image") - { - continue; - } + var subFolderContainer = createSubFolderContainer(selectedAlbumFolders[j]); + selectedDiv.appendChild(subFolderContainer); } + for (var j = 0; j < selectedAlbumImages.length; j++) + { + var thumbnailContainer = createImageThumbnailContainer(selectedAlbumImages[j]); + selectedDiv.appendChild(thumbnailContainer); + } + newAlbumsDiv.appendChild(selectedDiv); document.getElementById("albums").parentNode.replaceChild(newAlbumsDiv, document.getElementById("albums")); @@ -318,8 +301,19 @@ textSpan.setAttribute("class", "name"); // create the text - var textNode = document.createTextNode(folderNode.getAttribute("name") - + '(' + getChildNodesByTagName(folderNode, "image").length + ')'); + var textContents = folderNode.getAttribute("name"); + var noImages = getChildNodesByTagName(folderNode, "image").length; + var noFolders = getChildNodesByTagName(folderNode, "folder").length; + + if ((noImages || noFolders) > 0) + { + textContents += " ("; + if (noImages > 0) textContents += noImages; + if (noFolders > 0) textContents += "+" + noFolders; + textContents += ")"; + } + + var textNode = document.createTextNode(textContents); textSpan.appendChild(textNode); // appened them all in order @@ -406,7 +400,7 @@ var breadcrumbTrailDiv = document.createElement("div"); breadcrumbTrailDiv.setAttribute("id", "breadcrumbtrail"); - var nodePath = getNodePath(getLayoutNode(element.getAttribute("id"))) + element.getAttribute("name"); + var nodePath = getNodePath(element) + element.getAttribute("name"); var paths = nodePath.split('/'); var currentPath = ''; Modified: .themes/ajax/ajax.xsl =================================================================== --- .themes/ajax/ajax.xsl 2007-08-08 14:46:22 UTC (rev 18) +++ .themes/ajax/ajax.xsl 2007-08-08 23:54:15 UTC (rev 19) @@ -26,7 +26,11 @@ </head> <body> - <h1><xsl:value-of select="$title" /></h1> + <h1> + <a href="#" onclick="reloadPage();return false;"> + <xsl:value-of select="$title" /> + </a> + </h1> <xsl:apply-templates select="layout" /> </body> @@ -38,12 +42,12 @@ <xsl:with-param name="location" select="@name" /> </xsl:apply-templates> + <div id="breadcrumbtrail"></div> + <div id="albums"> - <xsl:apply-templates select="folder"> <xsl:with-param name="location" select="@name" /> </xsl:apply-templates> - </div> </xsl:template> @@ -112,7 +116,7 @@ </xsl:choose> </a> </span> - <xsl:if test="count(image) > 0"> + <xsl:if test="count(folder) > 0 or count(image) > 0"> <span class="icon"> <img> <xsl:attribute name="src"><xsl:value-of select="concat('.themes/', $themename, '/foldericon.png')" /></xsl:attribute> @@ -124,7 +128,7 @@ <xsl:value-of select="@name" /> <xsl:choose> <xsl:when test="(count(folder) > 0) and (count(image) > 0)"> - <xsl:text disable-output-escaping="yes">&nbsp;</xsl:text>(<xsl:value-of select="count(image)" /> +<xsl:value-of select="count(folder)" />) + <xsl:text disable-output-escaping="yes">&nbsp;</xsl:text>(<xsl:value-of select="count(image)" />+<xsl:value-of select="count(folder)" />) </xsl:when> <xsl:when test="count(folder) > 0"> <xsl:text disable-output-escaping="yes">&nbsp;</xsl:text>(+<xsl:value-of select="count(folder)" />) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <esp...@us...> - 2007-08-08 14:46:20
|
Revision: 18 http://picfinity.svn.sourceforge.net/picfinity/?rev=18&view=rev Author: espadav8 Date: 2007-08-08 07:46:22 -0700 (Wed, 08 Aug 2007) Log Message: ----------- Large update to the 'ajax' theme - Add a theme dropdown menu if they're present - change the containers to have <a> so it should work better in IE - Update CSS for the new layout - Remove traces of the old 'stack' layout - Update a lot of the JS - openFolder() now takes the ID of the folder to open - getLayoutNode() now takes the node ID - showImage() now takes the image ID - Added getElementsByClassName() function - Update the functions to produce the new layout (<a>'s) - onclick functions now return false so the <a> doesn't send - closeImage() doesn't need any params now - Added cookie functions (for changing the themes) Modified Paths: -------------- .themes/ajax/ajax.css .themes/ajax/ajax.js .themes/ajax/ajax.xsl Modified: .themes/ajax/ajax.css =================================================================== --- .themes/ajax/ajax.css 2007-08-08 14:35:50 UTC (rev 17) +++ .themes/ajax/ajax.css 2007-08-08 14:46:22 UTC (rev 18) @@ -2,6 +2,7 @@ { padding: 0; margin: 0; + border: 0; } img @@ -25,6 +26,13 @@ /* --- ids --- */ +div#themes +{ + position: absolute; + top: 20px; + right: 20px; +} + div#selectedalbum { clear: both; @@ -59,6 +67,13 @@ background: #484848; } +.image a +{ + height: 128px; + width: 150px; + display: block; +} + .folder, .thumbnail { @@ -71,15 +86,7 @@ position: relative; } -div.stack .folder -{ - height: 25px; - clear: left; - margin: -1px 0 0 0; - border: none; -} - /* --- icons --- */ .icon @@ -89,40 +96,21 @@ left: 15px; } -div.stack .folder span.icon -{ - top: 1px; - left: 5px; -} - /* --- images --- */ -.selected span.image +.selected a { background: #303030; } -.folder span.image, -.thumbnail span.image +.folder span.image img, +.thumbnail span.image img { - display: block; padding: 14px 25px; - height: 100px; - width: 100px; } - -div.stack -{ - margin-top: 25px; - padding: 0; - float: left; - clear: left; -} - - /* --- image names --- */ .name @@ -135,37 +123,30 @@ display: block; } -div.stack .folder span.name -{ -/* width = 150px; height = 25px */ - text-align: left; - height: 18px; - width: 120px; - border: 1px solid #ccc; - padding: 5px 0 0 28px; - bottom: 0; - position: absolute; -} - div#expandedimage span.name { margin: 5px -5px 0 -5px; } +/* --- image link --- */ -/* --- hover actions --- */ - -div#expandedimage:hover +#linktospan a { - cursor: pointer; + color: #f0f0f0; + font-weight: bold; + border-bottom: 1px solid #ccc; + padding: 3px 0 3px 0; + text-align: center; + display: block; + text-decoration: none; + margin: -5px -5px 5px -5px; } -.empty span.image:hover -{ - background: #ffd0d0; -} +/* --- hover actions --- */ -div.stack .folder:hover, + +.image a:hover, +#linktospan a:hover, .folder span.image:hover, .thumbnail span.image:hover, #breadcrumbtrail ul li:hover Modified: .themes/ajax/ajax.js =================================================================== --- .themes/ajax/ajax.js 2007-08-08 14:35:50 UTC (rev 17) +++ .themes/ajax/ajax.js 2007-08-08 14:46:22 UTC (rev 18) @@ -21,13 +21,12 @@ xmlDoc.load("gallery.xml"); } -function getLayoutNode(element) +function getLayoutNode(elementID) { - // this is the best way, but nothing supports this (yet) - if ((xmlDoc.getElementById) && (xmlDoc.getElementById(element.getAttribute("id")) != null)) + if ((xmlDoc.getElementById) && (xmlDoc.getElementById(elementID) != null)) { - return xmlDoc.getElementById(element.getAttribute("id")); + return xmlDoc.getElementById(elementID); } // this is the next best way, but only Firefox and Opera support this at the moment @@ -37,7 +36,7 @@ while ((node = nodes.nextNode()) != null) { - if (node.getAttribute("id") == element.getAttribute("id")) + if (node.getAttribute("id") == elementID) { return node; } @@ -51,7 +50,7 @@ // this is possibly the worse way, and it's still not supported by Safari else { - if (xmlDoc.documentElement.getAttribute("id") == element.getAttribute("id")) + if (xmlDoc.documentElement.getAttribute("id") == elementID) { return xmlDoc.documentElement; } @@ -63,7 +62,7 @@ for (var i = 0; i < xmlDocFolders.length; i++) { - if (xmlDocFolders[i].getAttribute("id") == element.getAttribute("id")) + if (xmlDocFolders[i].getAttribute("id") == elementID) { return xmlDocFolders[i]; } @@ -73,7 +72,7 @@ for (var i = 0; i < xmlDocImages.length; i++) { - if (xmlDocImages[i].getAttribute("id") == element.getAttribute("id")) + if (xmlDocImages[i].getAttribute("id") == elementID) { return xmlDocImages[i]; } @@ -98,6 +97,27 @@ } } +function getElementsByClassName(className, tag, elm) +{ + var testClass = new RegExp("(^|\\s)" + className + "(\\s|$)"); + var tag = tag || "*"; + var elm = elm || document; + var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag); + var returnElements = []; + var current; + var length = elements.length; + for(var i=0; i<length; i++){ + current = elements[i]; + if(testClass.test(current.className)){ + returnElements.push(current); + } + } + if (returnElements.length > 0) + return returnElements; + else + return null; +} + function getChildNodesByTagName(element, tagName) { var result = Array(); @@ -137,9 +157,9 @@ } } -function openFolder(element) +function openFolder(elementID) { - var nodePath = getNodePath(getLayoutNode(element), ''); + var nodePath = getNodePath(getLayoutNode(elementID)); var breadcrumbDiv; @@ -152,7 +172,7 @@ var selectedDiv = document.createElement("div"); selectedDiv.setAttribute("id", "selectedalbum"); - var mainFolders = getLayoutNode(element).parentNode.childNodes; + var mainFolders = getLayoutNode(elementID).parentNode.childNodes; for (var i = 0; i < mainFolders.length; i++) { @@ -160,7 +180,7 @@ if (mainFolders[i].nodeName == "folder") { // if it's not the folder we're acting on - if(mainFolders[i].getAttribute("id") == element.getAttribute("id")) + if(mainFolders[i].getAttribute("id") == elementID) { breadcrumbDiv = createBreadcrumbTrail(mainFolders[i]); @@ -191,6 +211,8 @@ newAlbumsDiv.appendChild(selectedDiv); document.getElementById("albums").parentNode.replaceChild(newAlbumsDiv, document.getElementById("albums")); + + return false; } function checkFolderContents(element) @@ -201,7 +223,7 @@ } else { - var nodePath = getNodePath(getLayoutNode(element), ''); + var nodePath = getNodePath(getLayoutNode(element.getAttribute("id"))); var imageChildNodes = getChildNodesByTagName(element, "image"); if (imageChildNodes.length > 0) @@ -222,28 +244,32 @@ function createImageThumbnailContainer(imageNode, optClass) { - var nodePath = getNodePath(getLayoutNode(imageNode), ''); + var imageNodeID = imageNode.getAttribute("id"); + var nodePath = getNodePath(getLayoutNode(imageNodeID)); var classes = (optClass == undefined) ? "thumbnail" : "thumbnail " + optClass; var albumImageDiv = document.createElement("div"); albumImageDiv.setAttribute("class", classes); - albumImageDiv.setAttribute("id", imageNode.getAttribute("id")); - albumImageDiv.onclick = function() { showImage(albumImageDiv) }; + albumImageDiv.setAttribute("id", imageNodeID); + var imageAnchor = document.createElement("a"); + imageAnchor.setAttribute("href", "index.php?id=" + imageNodeID); + imageAnchor.onclick = function() { showImage(imageNodeID); return false; }; + var imageSpan = document.createElement("span"); imageSpan.setAttribute("class", "image"); var albumImage = document.createElement("img"); var imageThumbPath = '.thumbs/' + nodePath + '/' + imageNode.getAttribute("file"); albumImage.setAttribute("src", imageThumbPath); - imageSpan.appendChild(albumImage); + imageAnchor.appendChild(albumImage); var imageNameSpan = document.createElement("span"); imageNameSpan.setAttribute("class", "name"); imageNameSpan.appendChild(document.createTextNode(imageNode.getAttribute("file"))); - + imageSpan.appendChild(imageAnchor) albumImageDiv.appendChild(imageSpan); albumImageDiv.appendChild(imageNameSpan); @@ -252,16 +278,20 @@ function createSubFolderContainer(folderNode) { - var nodePath = getNodePath(getLayoutNode(folderNode), ''); + var folderID = folderNode.getAttribute("id"); + var nodePath = getNodePath(getLayoutNode(folderID)); // create the main folder div var subFolder = document.createElement("div"); subFolder.setAttribute("class", "folder"); - subFolder.setAttribute("id", folderNode.getAttribute("id")); + subFolder.setAttribute("id", folderID); + var folderAnchor = document.createElement("a"); + folderAnchor.setAttribute("href", "index.php?id=" + folderID); + // this should allow it to work in IE but makes it harder to follow // in things like FireBug since you can't see the onclick for the divs - subFolder.onclick = function() { openFolder(subFolder) }; + folderAnchor.onclick = function() { openFolder(folderID); return false; }; // create a span for the image var folderImageSpan = document.createElement("span"); @@ -271,7 +301,8 @@ var folderImage = document.createElement("img"); var imagePath = checkFolderContents(folderNode); folderImage.setAttribute("src", imagePath); - folderImageSpan.appendChild(folderImage); + folderAnchor.appendChild(folderImage); + folderImageSpan.appendChild(folderAnchor); // create a span for the folder icon var iconSpan = document.createElement("span"); @@ -301,31 +332,44 @@ function createExpandedImage(imageNode) { - var nodePath = getNodePath(getLayoutNode(imageNode), ''); + var nodePath = getNodePath(getLayoutNode(imageNode.getAttribute("id"))); var expandedImageDiv = document.createElement("div"); expandedImageDiv.setAttribute("id", "expandedimage"); // this should allow it to work in IE but makes it harder to follow // in things like FireBug since you can't see the onclick for the divs - expandedImageDiv.onclick = function() { closeImage(expandedImageDiv, imageNode.getAttribute("id")) }; expandedImageDiv.style.width = "200px"; expandedImageDiv.style.height = "43px"; + var linkToSpan = document.createElement("span"); + linkToSpan.setAttribute("id", "linktospan"); + linkToSpan.style.display = "none"; + + var linkToAnchor = document.createElement("a"); + linkToAnchor.setAttribute("href", "index.php?id=" + imageNode.getAttribute("id")) + linkToAnchor.appendChild(document.createTextNode("Link to this image")); + linkToSpan.appendChild(linkToAnchor); + var loadingSpan = document.createElement("span"); loadingSpan.setAttribute("id", "loadingspan"); loadingSpan.style.display = "block"; loadingSpan.appendChild(document.createTextNode("Loading image")); + var imageAnchor = document.createElement("a"); + imageAnchor.onclick = function() { closeImage(); return false }; + imageAnchor.href = "#"; + var imageSpan = document.createElement("span"); imageSpan.setAttribute("id", "expandedimagespan"); - imageSpan.setAttribute("class", "image"); + // imageSpan.setAttribute("class", "image"); imageSpan.style.display = "none"; var albumImage = document.createElement("img"); var imageThumbPath = nodePath + '/' + imageNode.getAttribute("file"); albumImage.setAttribute("src", imageThumbPath); - imageSpan.appendChild(albumImage); + imageAnchor.appendChild(albumImage); + imageSpan.appendChild(imageAnchor); var imageNameSpan = document.createElement("span"); imageNameSpan.setAttribute("class", "name"); @@ -337,15 +381,19 @@ { var expandedImageDiv = document.getElementById("expandedimage"); expandedImageDiv.style.width = expandedImage.width + "px"; - expandedImageDiv.style.height = (expandedImage.height + 27) + "px"; + expandedImageDiv.style.height = (expandedImage.height + 49) + "px"; + var loadingSpan = document.getElementById("loadingspan"); + loadingSpan.style.display = "none"; + var imageSpan = document.getElementById("expandedimagespan"); imageSpan.style.display = "block"; - var loadingSpan = document.getElementById("loadingspan"); - loadingSpan.style.display = "none"; + var linkToSpan = document.getElementById("linktospan"); + linkToSpan.style.display = "block"; } + expandedImageDiv.appendChild(linkToSpan); expandedImageDiv.appendChild(loadingSpan); expandedImageDiv.appendChild(imageSpan); expandedImageDiv.appendChild(imageNameSpan); @@ -358,7 +406,7 @@ var breadcrumbTrailDiv = document.createElement("div"); breadcrumbTrailDiv.setAttribute("id", "breadcrumbtrail"); - var nodePath = getNodePath(getLayoutNode(element), '') + element.getAttribute("name"); + var nodePath = getNodePath(getLayoutNode(element.getAttribute("id"))) + element.getAttribute("name"); var paths = nodePath.split('/'); var currentPath = ''; @@ -438,7 +486,7 @@ if (node.hasChildNodes()) { - dropMenuItem.onclick = function() { openFolder(dropMenuItem) }; + dropMenuItem.onclick = function() { openFolder(dropMenuItem.getAttribute("id")); return false; }; // create a span for the folder icon var iconSpan = document.createElement("span"); @@ -521,54 +569,90 @@ } } -function showImage(element) +function showImage(imageID) { - var siblingNodes = getLayoutNode(element).parentNode.childNodes; - var nodePath = getNodePath(getLayoutNode(element), ''); + var siblingNodes = getChildNodesByTagName(getLayoutNode(imageID).parentNode, "image"); - var selectedDiv = document.createElement("div"); - selectedDiv.setAttribute("id", "selectedalbum"); - for (var i = 0; i < siblingNodes.length; i++) { - if ((siblingNodes[i].nodeName == "image") || - (siblingNodes[i].nodeName == "img")) + if (siblingNodes[i].getAttribute("id") == imageID) { - if (siblingNodes[i].getAttribute("id") == element.getAttribute("id")) + var expandedImage = createExpandedImage(siblingNodes[i]); + + if (document.getElementById("expandedimage")) { - var expandedImage = createExpandedImage(siblingNodes[i]); - - if (document.getElementById("expandedimage")) - { - document.getElementById("expandedimage").parentNode.replaceChild(expandedImage, document.getElementById("expandedimage")); - } - else - { - document.getElementById("selectedalbum").parentNode.insertBefore(expandedImage, document.getElementById("selectedalbum")); - } - - var thumbnailContainer = createImageThumbnailContainer(siblingNodes[i], "selected"); - selectedDiv.appendChild(thumbnailContainer); + document.getElementById("expandedimage").parentNode.replaceChild(expandedImage, document.getElementById("expandedimage")); } else { - var thumbnailContainer = createImageThumbnailContainer(siblingNodes[i]); - selectedDiv.appendChild(thumbnailContainer); + document.getElementById("selectedalbum").parentNode.insertBefore(expandedImage, document.getElementById("selectedalbum")); } } - else if (siblingNodes[i].nodeName == "folder") - { - var subFolderContainer = createSubFolderContainer(siblingNodes[i]); - selectedDiv.appendChild(subFolderContainer); - } } - document.getElementById("selectedalbum").parentNode.replaceChild(selectedDiv, document.getElementById("selectedalbum")); + var lastSelectedImage = getElementsByClassName("selected", "div", document); + + if (lastSelectedImage) + { + lastSelectedImage[0].className = "thumbnail"; + } + + document.getElementById(imageID).className += " selected"; } -function closeImage(element, id) +function closeImage() { document.getElementById("expandedimage").parentNode.removeChild(document.getElementById("expandedimage")); - document.getElementById(id).className = "thumbnail"; + var lastSelectedImage = getElementsByClassName("selected", "div", document); + + if (lastSelectedImage) + lastSelectedImage[0].className = "thumbnail"; +} + + + + + +function getCookie(name) { + var start = document.cookie.indexOf( name + "=" ); + var len = start + name.length + 1; + + if ((!start) && (name != document.cookie.substring(0, name.length))) + { + return null; + } + + if (start == -1) return null; + + var end = document.cookie.indexOf(';', len); + + if (end == -1) end = document.cookie.length; + + return unescape(document.cookie.substring(len, end)); +} + +function setCookie(name, value, expires, path, domain, secure) { + var today = new Date(); + today.setTime(today.getTime()); + + if (expires) { + expires = expires * 1000 * 60 * 60 * 24; + } + + var expires_date = new Date(today.getTime() + (expires)); + + document.cookie = name + '=' + escape(value) + + ((expires) ? ';expires='+expires_date.toGMTString() : '') + //expires.toGMTString() + ((path) ? ';path=' + path : '') + + ((domain) ? ';domain=' + domain : '') + + ((secure) ? ';secure' : ''); +} + +function deleteCookie(name, path, domain) { + if (getCookie(name)) + document.cookie = name + '=' + + ((path) ? ';path=' + path : '') + + ((domain) ? ';domain=' + domain : '') + + ';expires=Thu, 01-Jan-1970 00:00:01 GMT'; } \ No newline at end of file Modified: .themes/ajax/ajax.xsl =================================================================== --- .themes/ajax/ajax.xsl 2007-08-08 14:35:50 UTC (rev 17) +++ .themes/ajax/ajax.xsl 2007-08-08 14:46:22 UTC (rev 18) @@ -9,6 +9,7 @@ /> <xsl:param name="title" /> + <xsl:param name="post_id" /> <xsl:param name="themename">ajax</xsl:param> <xsl:template match="/"> @@ -22,7 +23,6 @@ <script type="text/javascript"> <xsl:attribute name="src"><xsl:value-of select="concat('.themes/', $themename, '/', $themename, '.js')" /></xsl:attribute> </script> - </head> <body> @@ -34,6 +34,10 @@ </xsl:template> <xsl:template match="layout"> + <xsl:apply-templates select="themes"> + <xsl:with-param name="location" select="@name" /> + </xsl:apply-templates> + <div id="albums"> <xsl:apply-templates select="folder"> @@ -42,42 +46,71 @@ </div> </xsl:template> + + <xsl:template match="themes"> + <xsl:param name="location" /> + + <div id="themes"> + <form id="themeform" action="index.php" method="post"> + <select name="theme" onchange="submit();"> + <option value="">Please choose a theme</option> + <xsl:apply-templates select="theme" /> + </select> + <button type="submit">Go</button> + </form> + </div> + </xsl:template> + + <xsl:template match="theme"> + <option> + <xsl:if test="@name = $themename"> + <xsl:attribute name="selected">selected</xsl:attribute> + </xsl:if> + <xsl:attribute name="value"><xsl:value-of select="@name" /></xsl:attribute> + <xsl:value-of select="@name" /> + </option> + </xsl:template> <xsl:template match="folder"> <xsl:param name="location" /> <div> - <xsl:attribute name="id"><xsl:value-of select="@id" /></xsl:attribute> <xsl:choose> <xsl:when test="count(folder) = 0 and count(image) = 0"> <xsl:attribute name="class">folder empty</xsl:attribute> </xsl:when> <xsl:otherwise> <xsl:attribute name="class">folder</xsl:attribute> - <xsl:attribute name="onclick">openFolder(this)</xsl:attribute> </xsl:otherwise> </xsl:choose> <span class="image"> - <xsl:choose> - <xsl:when test="count(image) > 0"> - <img> - <xsl:attribute name="src"><xsl:value-of select="concat('.thumbs/' , @name, '/', image[1]/@file)" /></xsl:attribute> - <xsl:attribute name="alt"><xsl:value-of select="@file" /></xsl:attribute> - </img> - </xsl:when> - <xsl:when test="count(folder) > 0"> - <img> - <xsl:attribute name="src"><xsl:value-of select="concat('.themes/', $themename, '/folder.png')" /></xsl:attribute> - <xsl:attribute name="alt">Image Folder</xsl:attribute> - </img> - </xsl:when> - <xsl:otherwise> - <img> - <xsl:attribute name="src"><xsl:value-of select="concat('.themes/', $themename, '/empty.png')" /></xsl:attribute> - <xsl:attribute name="alt">Empty Folder</xsl:attribute> - </img> - </xsl:otherwise> - </xsl:choose> + <a> + <xsl:if test="count(folder) > 0 or count(image) > 0"> + <xsl:attribute name="href">index.php?id=<xsl:value-of select="@id" /></xsl:attribute> + <xsl:attribute name="onclick">openFolder('<xsl:value-of select="@id" />'); return false;</xsl:attribute> + </xsl:if> + + <xsl:choose> + <xsl:when test="count(image) > 0"> + <img> + <xsl:attribute name="src"><xsl:value-of select="concat('.thumbs/' , @name, '/', image[1]/@file)" /></xsl:attribute> + <xsl:attribute name="alt"><xsl:value-of select="image[1]/@file" /></xsl:attribute> + </img> + </xsl:when> + <xsl:when test="count(folder) > 0"> + <img> + <xsl:attribute name="src"><xsl:value-of select="concat('.themes/', $themename, '/folder.png')" /></xsl:attribute> + <xsl:attribute name="alt">Image Folder</xsl:attribute> + </img> + </xsl:when> + <xsl:otherwise> + <img> + <xsl:attribute name="src"><xsl:value-of select="concat('.themes/', $themename, '/empty.png')" /></xsl:attribute> + <xsl:attribute name="alt">Empty Folder</xsl:attribute> + </img> + </xsl:otherwise> + </xsl:choose> + </a> </span> <xsl:if test="count(image) > 0"> <span class="icon"> @@ -106,7 +139,7 @@ <xsl:template match="image"> <xsl:param name="location" /> - <xsl:variable name="id"><xsl:value-of select="generate-id()" /></xsl:variable> + <xsl:variable name="id"><xsl:value-of select="@id" /></xsl:variable> </xsl:template> </xsl:stylesheet> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <esp...@us...> - 2007-08-08 14:35:50
|
Revision: 17 http://picfinity.svn.sourceforge.net/picfinity/?rev=17&view=rev Author: espadav8 Date: 2007-08-08 07:35:50 -0700 (Wed, 08 Aug 2007) Log Message: ----------- change the project name in eslipse Modified Paths: -------------- .project Modified: .project =================================================================== --- .project 2007-08-08 14:34:48 UTC (rev 16) +++ .project 2007-08-08 14:35:50 UTC (rev 17) @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <projectDescription> - <name>Egallery</name> + <name>picfinity</name> <comment></comment> <projects> </projects> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <esp...@us...> - 2007-08-08 14:34:50
|
Revision: 16 http://picfinity.svn.sourceforge.net/picfinity/?rev=16&view=rev Author: espadav8 Date: 2007-08-08 07:34:48 -0700 (Wed, 08 Aug 2007) Log Message: ----------- Add the ability to store the selected theme in a cookie Can disable the .themes folder being scanned and thus removing the option to change the theme Allow an ID to be sent and passed to the XML, should allow 'link to image' in themes IDs for items are now the md5 of the path to the item, this way the ID will always be the same for a given file path Changed the scandir() to a PHP4 friendly version Changed mkdir() to the PHP4 version which doesn't allow recursive creation Get the ext of a file in lowercase since JPG and jpg are the same, they would've been missed before Modified Paths: -------------- index.php Modified: index.php =================================================================== --- index.php 2007-07-29 10:54:19 UTC (rev 15) +++ index.php 2007-08-08 14:34:48 UTC (rev 16) @@ -3,9 +3,33 @@ // site options $site_name = "Picfinity"; - // use the default theme or get the one passed in - $theme = ($_GET['theme'] != '') ? $_GET['theme'] : "ajax" ; + // here we either get the theme posted in + // or if there's one stored in the cookie use that one + // otherwise use the default one + if ($_POST['theme']) + { + setcookie("theme", $_POST['theme']); + $theme = $_POST['theme']; + } + else if ($_COOKIE['theme']) + { + $theme = $_COOKIE['theme']; + } + else + { + // set the name of the default theme here + $theme = "ajax" ; + } + if ($_GET['id']) + { + $post_id = $_GET['id']; + } + else + { + $post_id = 0; + } + // not implemented yet $max_folders = 0; // 0 = unlimited @@ -21,6 +45,10 @@ // use the PEAR module to create the XML $use_pear = false; + // Allow the users to change the theme + // this needs the PHP version of the page + $enable_themes = true; + // thumbnail sizes $thumbnail_width = 100; $thumbnail_height = 100; @@ -39,11 +67,10 @@ $xml = $site_layout; // create the XML file if we've been told to - if ($create_xml) - file_put_contents("gallery.xml", $xml); + if ($create_xml) file_put_contents("gallery.xml", $xml); // pass the XML to the theme and get the HTML back - $html = xml_to_xhtml($xml, ".themes/$theme/$theme.xsl", array('title' => $site_name)); + $html = xml_to_xhtml($xml, ".themes/$theme/$theme.xsl", array('title' => $site_name, 'post_id' => $post_id)); // create the flat version if we need to if ($create_html) file_put_contents("index.html", $html); @@ -57,12 +84,13 @@ global $valid_image_formats; global $create_thumbnails; global $use_pear; + global $enable_themes; // get the name of the folder or '' if it's the root $name = substr($folder, strrpos($folder, '/') + 1); // create a folder ID - $folder_id = uniqid('id'); + $folder_id = md5($folder); // add the folder to the Array (for use by the PEAR route) $layout = array('name' => $name, 'id' => $folder_id); @@ -78,14 +106,20 @@ $folder_layout_xml = "<folder id=\"$folder_id\" name=\"$name\">\n"; // get a listing of the files/folder - $folder_contents = scandir($folder); + $dh = opendir($folder); + while (false !== ($filename = readdir($dh))) { + $folder_contents[] = $filename; + } + sort($folder_contents); + // for each entry while (list(,$folder_entry) = each($folder_contents)) { // if it's a folder and the path of it is ./.themes then create the list of themes if ((is_dir($folder . '/' . $folder_entry)) && - (($folder . '/' . $folder_entry) == "./.themes")) + (($folder . '/' . $folder_entry) == "./.themes") && + $enable_themes) { if ($use_pear) $layout['themes'] = create_themes_layout(); @@ -112,7 +146,7 @@ // otherwise check to see if it's an image else { - $ext = substr($folder_entry, strrpos($folder_entry, '.') + 1); + $ext = strtolower(substr($folder_entry, strrpos($folder_entry, '.') + 1)); if (in_array($ext, $valid_image_formats)) { @@ -121,7 +155,7 @@ { create_thumbnail($folder, $folder_entry, $ext); } - $image_id = uniqid('id'); + $image_id = md5($folder . '/' . $folder_entry); $layout['image'][] = array('id' => $image_id, 'file' => $folder_entry); $folder_layout_xml .= "\t<image id=\"$image_id\" file=\"$folder_entry\" />\n"; } @@ -141,15 +175,20 @@ { global $use_pear; - $themes_id = uniqid('id'); + $themes_id = md5(".themes"); // create the themes node + $layout = array('name' => '.themes', 'id' => $themes_id); $theme_xml = "<themes id=\"$themes_id\" name=\".themes\">\n"; - $layout = array('name' => '.themes', 'id' => $themes_id); // get the themes - $folder_contents = scandir(".themes"); + $dh = opendir(".themes"); + while (false !== ($filename = readdir($dh))) { + $folder_contents[] = $filename; + } + sort($folder_contents); + // for each entry while (list(,$folder_entry) = each($folder_contents)) { @@ -161,14 +200,13 @@ // otherwise if it's a dir assume it's a theme and add it to the list else if (is_dir(".themes/" . $folder_entry)) { - $theme_id = uniqid('id'); + $theme_id = md5(".themes/" . $folder_entry); $layout['theme'][] = array('name' => $folder_entry, 'id' => $theme_id); $theme_xml .= "\t<theme id=\"$theme_id\" name=\"$folder_entry\" />\n"; } } $theme_xml .= "</themes>\n"; - echo $theme_xml; if ($use_pear) return $layout; else return $theme_xml; @@ -181,7 +219,7 @@ if (!is_dir('.thumbs/'.$folder)) { - mkdir('.thumbs/'.$folder, 0777, TRUE); + MakeDirectory('.thumbs/'.$folder, 0777); chmod('.thumbs/'.$folder, 0777); } if (file_exists('.thumbs/'.$folder.'/'.$image)) @@ -306,5 +344,12 @@ return $xsl->transformToXML($doc); } + + function MakeDirectory($dir, $mode = 0755) + { + if (is_dir($dir) || @mkdir($dir,$mode)) return TRUE; + if (!MakeDirectory(dirname($dir),$mode)) return FALSE; + return @mkdir($dir,$mode); + } ?> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <esp...@us...> - 2007-07-29 10:56:41
|
Revision: 15 http://picfinity.svn.sourceforge.net/picfinity/?rev=15&view=rev Author: espadav8 Date: 2007-07-29 03:54:19 -0700 (Sun, 29 Jul 2007) Log Message: ----------- Add lots of comments to the file Add the option of using the XML_Seralizer PEAR module or not Make thumbnail_width, _height set with the other options Modified Paths: -------------- index.php Modified: index.php =================================================================== --- index.php 2007-07-29 10:50:51 UTC (rev 14) +++ index.php 2007-07-29 10:54:19 UTC (rev 15) @@ -2,14 +2,28 @@ // site options $site_name = "Picfinity"; + + // use the default theme or get the one passed in $theme = ($_GET['theme'] != '') ? $_GET['theme'] : "ajax" ; // not implemented yet $max_folders = 0; // 0 = unlimited - + + // create thumbnails for images that don't have one already $create_thumbnails = true; + + // create a flat HTML version of the page $create_html = true; + + // create the gallery.xml file (for use by themes $create_xml = true; + + // use the PEAR module to create the XML + $use_pear = false; + + // thumbnail sizes + $thumbnail_width = 100; + $thumbnail_height = 100; // valid images to be shown $valid_image_formats = array('png', 'gif', 'jpg', 'jpeg', 'bmp'); @@ -17,99 +31,154 @@ // get the layout of the current dir $site_layout = create_folder_layout('.'); - $xml = array_to_xml($site_layout); + // create the XML of the layout + // if we're not using the PEAR module then the XML will have already been returned + if ($use_pear) + $xml = array_to_xml($site_layout); + else + $xml = $site_layout; + // create the XML file if we've been told to if ($create_xml) - { file_put_contents("gallery.xml", $xml); - } + // pass the XML to the theme and get the HTML back $html = xml_to_xhtml($xml, ".themes/$theme/$theme.xsl", array('title' => $site_name)); - if ($create_html) - { - file_put_contents("index.html", $html); - } + // create the flat version if we need to + if ($create_html) file_put_contents("index.html", $html); + // echo the HTML to the screen echo $html; - echo "<div style=\"display:none;\">$xml</div>"; - - + // this function takes a folder path and creates a layout of the folder and sub folders function create_folder_layout($folder) { global $valid_image_formats; global $create_thumbnails; + global $use_pear; + // get the name of the folder or '' if it's the root + $name = substr($folder, strrpos($folder, '/') + 1); + + // create a folder ID + $folder_id = uniqid('id'); + + // add the folder to the Array (for use by the PEAR route) + $layout = array('name' => $name, 'id' => $folder_id); + + // create the non-PEAR XML + if ($name == "") + $folder_layout_xml = "<?xml version=\"1.0\"?>" + . "\n" + . "<!DOCTYPE layout PUBLIC \"-//picfinity//Gallery Layout//EN\" \"http://www.sunset-cigarette.co.uk/gallery/gallery.dtd\">" + . "\n" + . "<layout id=\"$folder_id\" name=\"\">\n"; + else + $folder_layout_xml = "<folder id=\"$folder_id\" name=\"$name\">\n"; + // get a listing of the files/folder $folder_contents = scandir($folder); - $name = substr($folder, strrpos($folder, '/') + 1); - $layout = array('name' => $name, 'id' => uniqid('id')); // for each entry while (list(,$folder_entry) = each($folder_contents)) { + // if it's a folder and the path of it is ./.themes then create the list of themes if ((is_dir($folder . '/' . $folder_entry)) && (($folder . '/' . $folder_entry) == "./.themes")) { - $layout['themes'] = create_themes_layout(); + if ($use_pear) + $layout['themes'] = create_themes_layout(); + else + $folder_layout_xml .= create_themes_layout(); } + + // else if it starts with a . ignore it else if (strpos($folder_entry, '.') === 0) { - // this is a hidden file/folder, ignore continue; } - // if it's a directory and doesn't start with a . + + // if it's a directory and doesn't start with a . then create a folder layout for it else if (is_dir($folder . '/' . $folder_entry)) { // get a list of it's files and check/create thumbnail(s) - $sub_layout = create_folder_layout($folder . '/' . $folder_entry); - $layout['folder'][] = $sub_layout; + if ($use_pear) + $layout['folder'][] = create_folder_layout($folder . '/' . $folder_entry); + else + $folder_layout_xml .= create_folder_layout($folder . '/' . $folder_entry); } + + // otherwise check to see if it's an image else { - // otherwise, check if it's an image to process $ext = substr($folder_entry, strrpos($folder_entry, '.') + 1); - // check if it's a valid image format if (in_array($ext, $valid_image_formats)) { + // create a thumbnail if we've been told to if ($create_thumbnails) { - // create a thumbnail create_thumbnail($folder, $folder_entry, $ext); } - $layout['image'][] = array('id' => uniqid('id'), 'file' => $folder_entry); + $image_id = uniqid('id'); + $layout['image'][] = array('id' => $image_id, 'file' => $folder_entry); + $folder_layout_xml .= "\t<image id=\"$image_id\" file=\"$folder_entry\" />\n"; } } } - return $layout; + // close up the hand-coded XML + if ($name == "") $folder_layout_xml .= "</layout>\n"; + else $folder_layout_xml .= "</folder>\n"; + + // return the correct layout (XML or Array) + if ($use_pear) return $layout; + else return $folder_layout_xml; } function create_themes_layout() { + global $use_pear; + + $themes_id = uniqid('id'); + + // create the themes node + $theme_xml = "<themes id=\"$themes_id\" name=\".themes\">\n"; + $layout = array('name' => '.themes', 'id' => $themes_id); + + // get the themes $folder_contents = scandir(".themes"); - $layout = array('name' => '.themes', 'id' => uniqid('id')); // for each entry while (list(,$folder_entry) = each($folder_contents)) { + // if it's hidden ignore it if (strpos($folder_entry, '.') === 0) { continue; } + // otherwise if it's a dir assume it's a theme and add it to the list else if (is_dir(".themes/" . $folder_entry)) { - $layout['theme'][] = array('name' => $folder_entry, 'id' => uniqid('id')); + $theme_id = uniqid('id'); + $layout['theme'][] = array('name' => $folder_entry, 'id' => $theme_id); + $theme_xml .= "\t<theme id=\"$theme_id\" name=\"$folder_entry\" />\n"; } } - return $layout; + $theme_xml .= "</themes>\n"; + echo $theme_xml; + + if ($use_pear) return $layout; + else return $theme_xml; } function create_thumbnail($folder, $image, $ext) { + global $thumbnail_width; + global $thumbnail_height; + if (!is_dir('.thumbs/'.$folder)) { mkdir('.thumbs/'.$folder, 0777, TRUE); @@ -138,25 +207,25 @@ case 'bmp': $src_img = imagecreatefrombmp($folder.'/'.$image); break; + default: + return; + break; } - $new_w = 100; - $new_h = 100; - $old_x = imageSX($src_img); $old_y = imageSY($src_img); if ($old_x > $old_y) { - $thumb_w = $new_w; - $thumb_h = $old_y * ($new_h/$old_x); + $thumb_w = $thumbnail_width; + $thumb_h = $old_y * ($thumbnail_height/$old_x); } else if ($old_x < $old_y) { - $thumb_w = $old_x * ($new_w/$old_y); - $thumb_h = $new_h; + $thumb_w = $old_x * ($thumbnail_width/$old_y); + $thumb_h = $thumbnail_height; } else if ($old_x == $old_y) { - $thumb_w = $new_w; - $thumb_h = $new_h; + $thumb_w = $thumbnail_width; + $thumb_h = $thumbnail_height; } $dst_img = ImageCreateTrueColor($thumb_w, $thumb_h); @@ -235,8 +304,7 @@ $xsl->setParameter('', $params); - $html = $xsl->transformToXML($doc); + return $xsl->transformToXML($doc); + } +?> - return $html; - } -?> \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <esp...@us...> - 2007-07-29 10:56:34
|
Revision: 14 http://picfinity.svn.sourceforge.net/picfinity/?rev=14&view=rev Author: espadav8 Date: 2007-07-29 03:50:51 -0700 (Sun, 29 Jul 2007) Log Message: ----------- Fix a CSS bug in some browsers Modified Paths: -------------- .themes/ajax/ajax.css Modified: .themes/ajax/ajax.css =================================================================== --- .themes/ajax/ajax.css 2007-07-29 10:49:23 UTC (rev 13) +++ .themes/ajax/ajax.css 2007-07-29 10:50:51 UTC (rev 14) @@ -212,6 +212,11 @@ z-index: 10; } +#breadcrumbtrail ul li ul li +{ + clear: left; +} + #breadcrumbtrail ul li .name { float: left; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <esp...@us...> - 2007-07-29 10:56:33
|
Revision: 13 http://picfinity.svn.sourceforge.net/picfinity/?rev=13&view=rev Author: espadav8 Date: 2007-07-29 03:49:23 -0700 (Sun, 29 Jul 2007) Log Message: ----------- Correct an error with the order of the folders under <layout> Modified Paths: -------------- gallery.dtd Modified: gallery.dtd =================================================================== --- gallery.dtd 2007-07-19 04:23:25 UTC (rev 12) +++ gallery.dtd 2007-07-29 10:49:23 UTC (rev 13) @@ -1,4 +1,4 @@ -<!ELEMENT layout (folder*,themes)> +<!ELEMENT layout (themes,folder*)> <!ELEMENT folder (folder*,image*)> <!ELEMENT themes (theme*)> <!ELEMENT image EMPTY> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <esp...@us...> - 2007-07-19 04:23:23
|
Revision: 12 http://picfinity.svn.sourceforge.net/picfinity/?rev=12&view=rev Author: espadav8 Date: 2007-07-18 21:23:25 -0700 (Wed, 18 Jul 2007) Log Message: ----------- Scan the ./.themes folder and add the themes to the layout of the XML file Update the DTD to show this as well Modified Paths: -------------- gallery.dtd index.php Modified: gallery.dtd =================================================================== --- gallery.dtd 2007-07-19 03:16:05 UTC (rev 11) +++ gallery.dtd 2007-07-19 04:23:25 UTC (rev 12) @@ -1,12 +1,20 @@ -<!ELEMENT layout (folder*)> +<!ELEMENT layout (folder*,themes)> <!ELEMENT folder (folder*,image*)> +<!ELEMENT themes (theme*)> <!ELEMENT image EMPTY> +<!ELEMENT theme EMPTY> -<!ATTLIST layout id ID #REQUIRED> +<!ATTLIST layout id ID #IMPLIED> <!ATTLIST layout name CDATA #REQUIRED> -<!ATTLIST folder id ID #REQUIRED> +<!ATTLIST folder id ID #IMPLIED> <!ATTLIST folder name CDATA #REQUIRED> -<!ATTLIST image id ID #REQUIRED> +<!ATTLIST themes id ID #IMPLIED> +<!ATTLIST themes name CDATA #REQUIRED> + +<!ATTLIST theme id ID #IMPLIED> +<!ATTLIST theme name CDATA #REQUIRED> + +<!ATTLIST image id ID #IMPLIED> <!ATTLIST image file CDATA #REQUIRED> \ No newline at end of file Modified: index.php =================================================================== --- index.php 2007-07-19 03:16:05 UTC (rev 11) +++ index.php 2007-07-19 04:23:25 UTC (rev 12) @@ -49,9 +49,15 @@ // for each entry while (list(,$folder_entry) = each($folder_contents)) { - if (strpos($folder_entry, '.') === 0) + if ((is_dir($folder . '/' . $folder_entry)) && + (($folder . '/' . $folder_entry) == "./.themes")) { + $layout['themes'] = create_themes_layout(); + } + else if (strpos($folder_entry, '.') === 0) + { // this is a hidden file/folder, ignore + continue; } // if it's a directory and doesn't start with a . else if (is_dir($folder . '/' . $folder_entry)) @@ -81,6 +87,27 @@ return $layout; } + function create_themes_layout() + { + $folder_contents = scandir(".themes"); + $layout = array('name' => '.themes', 'id' => uniqid('id')); + + // for each entry + while (list(,$folder_entry) = each($folder_contents)) + { + if (strpos($folder_entry, '.') === 0) + { + continue; + } + else if (is_dir(".themes/" . $folder_entry)) + { + $layout['theme'][] = array('name' => $folder_entry, 'id' => uniqid('id')); + } + } + + return $layout; + } + function create_thumbnail($folder, $image, $ext) { if (!is_dir('.thumbs/'.$folder)) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <esp...@us...> - 2007-07-19 03:16:02
|
Revision: 11 http://picfinity.svn.sourceforge.net/picfinity/?rev=11&view=rev Author: espadav8 Date: 2007-07-18 20:16:05 -0700 (Wed, 18 Jul 2007) Log Message: ----------- Update getLayoutNode. Still no Safari support. IE6 partly works but still badly broken. Modified Paths: -------------- .themes/ajax/ajax.js Modified: .themes/ajax/ajax.js =================================================================== --- .themes/ajax/ajax.js 2007-07-19 03:13:05 UTC (rev 10) +++ .themes/ajax/ajax.js 2007-07-19 03:16:05 UTC (rev 11) @@ -6,7 +6,7 @@ { if (document.implementation && document.implementation.createDocument) { - xmlDoc = document.implementation.createDocument("", "", null); + xmlDoc = document.implementation.createDocument("", "layout", null); } else if (window.ActiveXObject) { @@ -17,9 +17,72 @@ alert('Your browser can\'t handle this script'); return; } + xmlDoc.load("gallery.xml"); } +function getLayoutNode(element) +{ + + // this is the best way, but nothing supports this (yet) + if ((xmlDoc.getElementById) && (xmlDoc.getElementById(element.getAttribute("id")) != null)) + { + return xmlDoc.getElementById(element.getAttribute("id")); + } + + // this is the next best way, but only Firefox and Opera support this at the moment + else if (document.createTreeWalker) + { + var nodes = document.createTreeWalker(xmlDoc.documentElement, NodeFilter.SHOW_ELEMENT, null, false); + + while ((node = nodes.nextNode()) != null) + { + if (node.getAttribute("id") == element.getAttribute("id")) + { + return node; + } + else + { + continue; + } + } + } + + // this is possibly the worse way, and it's still not supported by Safari + else + { + if (xmlDoc.documentElement.getAttribute("id") == element.getAttribute("id")) + { + return xmlDoc.documentElement; + } + else + { + // this causes a problem with Safari + // xmlDocFolders.length == 0 + var xmlDocFolders = xmlDoc.getElementsByTagName("folder"); + + for (var i = 0; i < xmlDocFolders.length; i++) + { + if (xmlDocFolders[i].getAttribute("id") == element.getAttribute("id")) + { + return xmlDocFolders[i]; + } + } + + var xmlDocImages = xmlDoc.getElementsByTagName("image"); + + for (var i = 0; i < xmlDocImages.length; i++) + { + if (xmlDocImages[i].getAttribute("id") == element.getAttribute("id")) + { + return xmlDocImages[i]; + } + } + } + } + return null; +} + function addEvent(elm, evType, fn, useCapture) { if (elm.addEventListener) { @@ -74,29 +137,8 @@ } } -function getLayoutNode(element) -{ - if (document.createTreeWalker) { - var nodes = document.createTreeWalker(xmlDoc.documentElement, NodeFilter.SHOW_ELEMENT, null, false); - - while ((node = nodes.nextNode()) != null) - { - if (node.getAttribute("id") == element.getAttribute("id")) - { - return node; - } - else - { - continue; - } - } - } - - return null; -} - function openFolder(element) -{ +{ var nodePath = getNodePath(getLayoutNode(element), ''); var breadcrumbDiv; @@ -444,7 +486,6 @@ function selectLayoutNodeFromPath(path, node) { node = (node == undefined) ? xmlDoc.documentElement : node; - if(path == "./") { @@ -456,7 +497,9 @@ var currentPath = path.split('/')[0]; - if (document.createTreeWalker) { + // FIXME: doesn't work with IE or Safari + if (document.createTreeWalker) + { var nodes = document.createTreeWalker(node, NodeFilter.SHOW_ELEMENT, null, false); while ((selectedNode = nodes.nextNode()) != null) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <esp...@us...> - 2007-07-19 03:13:03
|
Revision: 10 http://picfinity.svn.sourceforge.net/picfinity/?rev=10&view=rev Author: espadav8 Date: 2007-07-18 20:13:05 -0700 (Wed, 18 Jul 2007) Log Message: ----------- Update to include IDs Modified Paths: -------------- gallery.dtd Modified: gallery.dtd =================================================================== --- gallery.dtd 2007-07-19 00:52:19 UTC (rev 9) +++ gallery.dtd 2007-07-19 03:13:05 UTC (rev 10) @@ -2,11 +2,11 @@ <!ELEMENT folder (folder*,image*)> <!ELEMENT image EMPTY> -<!ATTLIST layout id CDATA #REQUIRED> +<!ATTLIST layout id ID #REQUIRED> <!ATTLIST layout name CDATA #REQUIRED> -<!ATTLIST folder id CDATA #REQUIRED> +<!ATTLIST folder id ID #REQUIRED> <!ATTLIST folder name CDATA #REQUIRED> -<!ATTLIST image id CDATA #REQUIRED> +<!ATTLIST image id ID #REQUIRED> <!ATTLIST image file CDATA #REQUIRED> \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <esp...@us...> - 2007-07-19 00:52:19
|
Revision: 9 http://picfinity.svn.sourceforge.net/picfinity/?rev=9&view=rev Author: espadav8 Date: 2007-07-18 17:52:19 -0700 (Wed, 18 Jul 2007) Log Message: ----------- Little clean up and add the doctype to the XML Modified Paths: -------------- index.php Modified: index.php =================================================================== --- index.php 2007-07-19 00:51:22 UTC (rev 8) +++ index.php 2007-07-19 00:52:19 UTC (rev 9) @@ -1,7 +1,7 @@ <?php // site options - $site_name = "Andrew's Gallery"; + $site_name = "Picfinity"; $theme = ($_GET['theme'] != '') ? $_GET['theme'] : "ajax" ; // not implemented yet @@ -33,7 +33,7 @@ echo $html; - // echo "<div style=\"display:none;\">$xml</div>"; + echo "<div style=\"display:none;\">$xml</div>"; function create_folder_layout($folder) @@ -44,8 +44,7 @@ // get a listing of the files/folder $folder_contents = scandir($folder); $name = substr($folder, strrpos($folder, '/') + 1); - $id = uniqid('id'); - $layout = array('name' => $name, 'id' => $id); + $layout = array('name' => $name, 'id' => uniqid('id')); // for each entry while (list(,$folder_entry) = each($folder_contents)) @@ -59,7 +58,6 @@ { // get a list of it's files and check/create thumbnail(s) $sub_layout = create_folder_layout($folder . '/' . $folder_entry); - //$layout[] = array($folder_entry => $sub_layout); $layout['folder'][] = $sub_layout; } else @@ -169,14 +167,18 @@ // An array of serializer options $serializer_options = array ( 'addDecl' => !$headless, + 'addDoctype' => true, 'encoding' => 'ISO-8859-1', 'indent' => ' ', 'indentAttributes' => '_auto', 'rootName' => 'layout', 'defaultTagName' => $tag_name, 'mode' => 'simplexml', - 'scalarAsAttributes' => true - + 'scalarAsAttributes' => true, + 'doctype' => array ( + 'id' => '-//picfinity//Gallery Layout//EN', + 'uri' => 'http://www.sunset-cigarette.co.uk/gallery/gallery.dtd' + ) ); // Instantiate the serializer with the options @@ -189,8 +191,6 @@ if (PEAR::isError($status)) { die($status->getMessage()); } - - // print_r($Serializer->options); // return the XML document return $Serializer->getSerializedData(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <esp...@us...> - 2007-07-19 00:51:22
|
Revision: 8 http://picfinity.svn.sourceforge.net/picfinity/?rev=8&view=rev Author: espadav8 Date: 2007-07-18 17:51:22 -0700 (Wed, 18 Jul 2007) Log Message: ----------- Initial DTD for the gallery XML file Added Paths: ----------- gallery.dtd Added: gallery.dtd =================================================================== --- gallery.dtd (rev 0) +++ gallery.dtd 2007-07-19 00:51:22 UTC (rev 8) @@ -0,0 +1,12 @@ +<!ELEMENT layout (folder*)> +<!ELEMENT folder (folder*,image*)> +<!ELEMENT image EMPTY> + +<!ATTLIST layout id CDATA #REQUIRED> +<!ATTLIST layout name CDATA #REQUIRED> + +<!ATTLIST folder id CDATA #REQUIRED> +<!ATTLIST folder name CDATA #REQUIRED> + +<!ATTLIST image id CDATA #REQUIRED> +<!ATTLIST image file CDATA #REQUIRED> \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <esp...@us...> - 2007-07-18 18:15:30
|
Revision: 7 http://picfinity.svn.sourceforge.net/picfinity/?rev=7&view=rev Author: espadav8 Date: 2007-07-18 11:15:33 -0700 (Wed, 18 Jul 2007) Log Message: ----------- Initial support for Konqueror, and hopefully Safari with this commit now, as well as some changes towards IE support - Update some functions - Add a few hacks for Konqueror (and possibly Safari) (seems to replace <image> tags from the XML with <img> tags) - Change the element.setAttribute("onclick", ...) to element.onclick = function() { ... } should be a bit nicer for IE - Add alt tags to the images from the XSLT file (still needs to be done from the JS) Modified Paths: -------------- .themes/ajax/ajax.js .themes/ajax/ajax.xsl Modified: .themes/ajax/ajax.js =================================================================== --- .themes/ajax/ajax.js 2007-07-18 17:12:03 UTC (rev 6) +++ .themes/ajax/ajax.js 2007-07-18 18:15:33 UTC (rev 7) @@ -37,25 +37,26 @@ function getChildNodesByTagName(element, tagName) { - var result = Array(); - - if(!element.hasChildNodes()) { - return result; - } - - var i; - var lowerTagName = tagName.toLowerCase(); - - for(i = 0; i < element.childNodes.length; i++) - { - if (element.childNodes[i].nodeName.toLowerCase() != lowerTagName) { - continue; - } - - result.push(element.childNodes[i]); - } - - return result; + var result = Array(); + + if(!element.hasChildNodes()) { + return result; + } + + for(var i = 0; i < element.childNodes.length; i++) + { + // if (tagName == "image") alert(element.childNodes[i].nodeName + '\n' + tagName); + + // this hack is for Konqueror (and possibly Safari) + // for some reason the <image> tags are replaced + // with <img> tags + if ((element.childNodes[i].nodeName == tagName) || + (tagName == "image" && element.childNodes[i].nodeName == "img")) + { + result.push(element.childNodes[i]); + } + } + return result; } function getNodePath(element, nodePath) @@ -181,12 +182,12 @@ { var nodePath = getNodePath(getLayoutNode(imageNode), ''); - var classes = (optClass == null) ? "thumbnail" : "thumbnail " + optClass; + var classes = (optClass == undefined) ? "thumbnail" : "thumbnail " + optClass; var albumImageDiv = document.createElement("div"); albumImageDiv.setAttribute("class", classes); albumImageDiv.setAttribute("id", imageNode.getAttribute("id")); - albumImageDiv.setAttribute("onclick", "showImage(this)"); + albumImageDiv.onclick = function() { showImage(albumImageDiv) }; var imageSpan = document.createElement("span"); imageSpan.setAttribute("class", "image"); @@ -215,8 +216,11 @@ var subFolder = document.createElement("div"); subFolder.setAttribute("class", "folder"); subFolder.setAttribute("id", folderNode.getAttribute("id")); - subFolder.setAttribute("onclick", "openFolder(this)"); + // this should allow it to work in IE but makes it harder to follow + // in things like FireBug since you can't see the onclick for the divs + subFolder.onclick = function() { openFolder(subFolder) }; + // create a span for the image var folderImageSpan = document.createElement("span"); folderImageSpan.setAttribute("class", "image"); @@ -259,7 +263,10 @@ var expandedImageDiv = document.createElement("div"); expandedImageDiv.setAttribute("id", "expandedimage"); - expandedImageDiv.setAttribute("onclick", "closeImage(this, '" + imageNode.getAttribute("id") + "')"); + + // this should allow it to work in IE but makes it harder to follow + // in things like FireBug since you can't see the onclick for the divs + expandedImageDiv.onclick = function() { closeImage(expandedImageDiv, imageNode.getAttribute("id")) }; expandedImageDiv.style.width = "200px"; expandedImageDiv.style.height = "43px"; @@ -352,54 +359,8 @@ // these will all be hidden until the :hover if (node.nodeName == "folder") { - - var dropMenuLi = document.createElement("li"); - dropMenuLi.setAttribute("id", node.getAttribute("id")); - - if (node.hasChildNodes()) - { - dropMenuLi.setAttribute("onclick", "openFolder(this)"); - - // create a span for the folder icon - var iconSpan = document.createElement("span"); - iconSpan.setAttribute("class", "icon"); - - // create the icon image - var iconImage = document.createElement("img"); - iconImage.setAttribute("src", ".themes/ajax/foldericon.png"); - iconSpan.appendChild(iconImage); - dropMenuLi.appendChild(iconSpan); - } - else - { - dropMenuLi.setAttribute("class", "folder empty"); - - // create a span for the folder icon - var iconSpan = document.createElement("span"); - iconSpan.setAttribute("class", "icon"); - - // create the icon image - var iconImage = document.createElement("img"); - iconImage.setAttribute("src", ".themes/ajax/emptyicon.png"); - iconSpan.appendChild(iconImage); - dropMenuLi.appendChild(iconSpan); - } - - // we do this so we can show the user the currently selected folder in the drop down - if (node.getAttribute("name") == currentFolder) - { - dropMenuLi.setAttribute("class", "menuentry selected"); - } - else - { - dropMenuLi.setAttribute("class", "menuentry"); - } - var nameSpan = document.createElement("span"); - nameSpan.setAttribute("class", "name"); - nameSpan.appendChild(document.createTextNode(node.getAttribute("name"))); - dropMenuLi.appendChild(nameSpan); - - dropMenu.appendChild(dropMenuLi); + var dropMenuItem = createBreadcrumbItem(node, currentFolder); + dropMenu.appendChild(dropMenuItem); } // this is for the current folder @@ -417,7 +378,6 @@ var iconImage = document.createElement("img"); iconImage.setAttribute("src", ".themes/ajax/foldericon.png"); iconSpan.appendChild(iconImage); - dropMenuLi.appendChild(iconSpan); menuLi.insertBefore(nameSpan, menuLi.firstChild); menuLi.insertBefore(iconSpan, menuLi.firstChild); @@ -429,6 +389,58 @@ return breadcrumbEntry; } +function createBreadcrumbItem(node, currentFolder) +{ + var dropMenuItem = document.createElement("li"); + dropMenuItem.setAttribute("id", node.getAttribute("id")); + + if (node.hasChildNodes()) + { + dropMenuItem.onclick = function() { openFolder(dropMenuItem) }; + + // create a span for the folder icon + var iconSpan = document.createElement("span"); + iconSpan.setAttribute("class", "icon"); + + // create the icon image + var iconImage = document.createElement("img"); + iconImage.setAttribute("src", ".themes/ajax/foldericon.png"); + iconSpan.appendChild(iconImage); + dropMenuItem.appendChild(iconSpan); + } + else + { + dropMenuItem.setAttribute("class", "folder empty"); + + // create a span for the folder icon + var iconSpan = document.createElement("span"); + iconSpan.setAttribute("class", "icon"); + + // create the icon image + var iconImage = document.createElement("img"); + iconImage.setAttribute("src", ".themes/ajax/emptyicon.png"); + iconSpan.appendChild(iconImage); + dropMenuItem.appendChild(iconSpan); + } + + // we do this so we can show the user the currently selected folder in the drop down + if (node.getAttribute("name") == currentFolder) + { + dropMenuItem.setAttribute("class", "menuentry selected"); + } + else + { + dropMenuItem.setAttribute("class", "menuentry"); + } + + var nameSpan = document.createElement("span"); + nameSpan.setAttribute("class", "name"); + nameSpan.appendChild(document.createTextNode(node.getAttribute("name"))); + dropMenuItem.appendChild(nameSpan); + + return dropMenuItem; +} + function selectLayoutNodeFromPath(path, node) { node = (node == undefined) ? xmlDoc.documentElement : node; @@ -436,18 +448,15 @@ if(path == "./") { - // alert("returning documentElement"); return xmlDoc.documentElement; } else if (path != '') { - // alert(path); path = (path.indexOf("./") == 0) ? path.substring(2) : path; var currentPath = path.split('/')[0]; if (document.createTreeWalker) { - // alert("01\n" + node.nodeName); var nodes = document.createTreeWalker(node, NodeFilter.SHOW_ELEMENT, null, false); while ((selectedNode = nodes.nextNode()) != null) @@ -479,7 +488,8 @@ for (var i = 0; i < siblingNodes.length; i++) { - if (siblingNodes[i].nodeName == "image") + if ((siblingNodes[i].nodeName == "image") || + (siblingNodes[i].nodeName == "img")) { if (siblingNodes[i].getAttribute("id") == element.getAttribute("id")) { Modified: .themes/ajax/ajax.xsl =================================================================== --- .themes/ajax/ajax.xsl 2007-07-18 17:12:03 UTC (rev 6) +++ .themes/ajax/ajax.xsl 2007-07-18 18:15:33 UTC (rev 7) @@ -61,19 +61,20 @@ <xsl:choose> <xsl:when test="count(image) > 0"> <img> - <xsl:attribute name="src"> - <xsl:value-of select="concat('.thumbs/' , @name, '/', image[1]/@file)" /> - </xsl:attribute> + <xsl:attribute name="src"><xsl:value-of select="concat('.thumbs/' , @name, '/', image[1]/@file)" /></xsl:attribute> + <xsl:attribute name="alt"><xsl:value-of select="@file" /></xsl:attribute> </img> </xsl:when> <xsl:when test="count(folder) > 0"> <img> <xsl:attribute name="src"><xsl:value-of select="concat('.themes/', $themename, '/folder.png')" /></xsl:attribute> + <xsl:attribute name="alt">Image Folder</xsl:attribute> </img> </xsl:when> <xsl:otherwise> <img> <xsl:attribute name="src"><xsl:value-of select="concat('.themes/', $themename, '/empty.png')" /></xsl:attribute> + <xsl:attribute name="alt">Empty Folder</xsl:attribute> </img> </xsl:otherwise> </xsl:choose> @@ -81,9 +82,8 @@ <xsl:if test="count(image) > 0"> <span class="icon"> <img> - <xsl:attribute name="src"> - <xsl:value-of select="concat('.themes/', $themename, '/foldericon.png')" /> - </xsl:attribute> + <xsl:attribute name="src"><xsl:value-of select="concat('.themes/', $themename, '/foldericon.png')" /></xsl:attribute> + <xsl:attribute name="alt">Folder Icon</xsl:attribute> </img> </span> </xsl:if> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <esp...@us...> - 2007-07-18 17:12:02
|
Revision: 6 http://picfinity.svn.sourceforge.net/picfinity/?rev=6&view=rev Author: espadav8 Date: 2007-07-18 10:12:03 -0700 (Wed, 18 Jul 2007) Log Message: ----------- Remove unneeded functions from the javascript Remove the init function and instead add the onclick into the xsl template Remove all the code for creating the old 'stack' trail Modified Paths: -------------- .themes/ajax/ajax.js .themes/ajax/ajax.xsl Modified: .themes/ajax/ajax.js =================================================================== --- .themes/ajax/ajax.js 2007-07-18 12:31:15 UTC (rev 5) +++ .themes/ajax/ajax.js 2007-07-18 17:12:03 UTC (rev 6) @@ -1,4 +1,3 @@ -addEvent(window, 'load', init, false); addEvent(window, 'load', importLayout, false); var xmlDoc; @@ -21,24 +20,6 @@ xmlDoc.load("gallery.xml"); } -function getElementsByClassName(className, tag) -{ - var testClass = new RegExp("(^|\\s)" + className + "(\\s|$)"); - var tag = tag || "*"; - var elm = document; - var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag); - var returnElements = []; - var current; - var length = elements.length; - for(var i=0; i<length; i++){ - current = elements[i]; - if(testClass.test(current.className)){ - returnElements.push(current); - } - } - return returnElements; -} - function addEvent(elm, evType, fn, useCapture) { if (elm.addEventListener) { @@ -77,13 +58,6 @@ return result; } -function getSiblingNodes(element) -{ - var parentNode = getLayoutNode(element).parentNode; - - return parentNode.childNodes; -} - function getNodePath(element, nodePath) { nodePath = (nodePath == undefined) ? '' : nodePath; @@ -120,22 +94,6 @@ return null; } -function init() -{ - var folders = getElementsByClassName("folder", "div"); - - for (var i = 0; i < folders.length; i++) - { - if (folders[i].getAttribute("class").toString().match("empty")) - { - } - else - { - folders[i].setAttribute("onclick", "openFolder(this)"); - } - } -} - function openFolder(element) { var nodePath = getNodePath(getLayoutNode(element), ''); @@ -148,9 +106,6 @@ var backButton = document.createElement("div") backButton.setAttribute("id", "backbutton"); - var stackDiv = document.createElement("div"); - stackDiv.setAttribute("class", "stack"); - var selectedDiv = document.createElement("div"); selectedDiv.setAttribute("id", "selectedalbum"); @@ -162,15 +117,8 @@ if (mainFolders[i].nodeName == "folder") { // if it's not the folder we're acting on - if(mainFolders[i].getAttribute("id") != element.id) + if(mainFolders[i].getAttribute("id") == element.getAttribute("id")) { - // var stackFolder = createStackFolderContainer(mainFolders[i]); - // stackDiv.appendChild(stackFolder); - } - - // it is the folder we're acting on - else - { breadcrumbDiv = createBreadcrumbTrail(mainFolders[i]); var selectedAlbumFolders = getChildNodesByTagName(mainFolders[i], "folder"); @@ -198,28 +146,7 @@ } newAlbumsDiv.appendChild(selectedDiv); - newAlbumsDiv.appendChild(stackDiv); - // if we're not in the root node then create another stack with the main folders - if (nodePath != "./") - { - var rootStackDiv = document.createElement("div"); - rootStackDiv.setAttribute("class", "stack"); - - var rootNodeFolders = xmlDoc.documentElement.childNodes; - - for (var i = 0; i < rootNodeFolders.length; i++) - { - if (rootNodeFolders[i].nodeName == "folder") - { - var stackFolder = createStackFolderContainer(rootNodeFolders[i]); - rootStackDiv.appendChild(stackFolder); - } - } - - // newAlbumsDiv.appendChild(rootStackDiv); - } - document.getElementById("albums").parentNode.replaceChild(newAlbumsDiv, document.getElementById("albums")); } @@ -250,61 +177,6 @@ } } -function createStackFolderContainer(folderNode) -{ - var stackFolder = document.createElement("div"); - stackFolder.setAttribute("id", folderNode.getAttribute("id")); - - // var imageSpan = document.createElement("span") - // imageSpan.setAttribute("class", "image"); - - // var folderImage = document.createElement("img"); - // folderImage.setAttribute("src", checkFolderContents(folderNode, getNodePath(folderNode, ''))); - // imageSpan.appendChild(folderImage); - - var textSpan = document.createElement("span"); - textSpan.setAttribute("class", "name"); - textSpan.appendChild(document.createTextNode(folderNode.getAttribute("name"))); - - - // stackFolder.appendChild(imageSpan); - - // this has to be done here otherwise the nodes would be added in the wrong order - if (folderNode.hasChildNodes()) - { - stackFolder.setAttribute("class", "folder"); - stackFolder.setAttribute("onclick", "openFolder(this)"); - - // create a span for the folder icon - var iconSpan = document.createElement("span"); - iconSpan.setAttribute("class", "icon"); - - // create the icon image - var iconImage = document.createElement("img"); - iconImage.setAttribute("src", ".themes/ajax/foldericon.png"); - iconSpan.appendChild(iconImage); - stackFolder.appendChild(iconSpan); - } - else - { - stackFolder.setAttribute("class", "folder empty"); - - // create a span for the folder icon - var iconSpan = document.createElement("span"); - iconSpan.setAttribute("class", "icon"); - - // create the icon image - var iconImage = document.createElement("img"); - iconImage.setAttribute("src", ".themes/ajax/emptyicon.png"); - iconSpan.appendChild(iconImage); - stackFolder.appendChild(iconSpan); - } - - stackFolder.appendChild(textSpan); - - return stackFolder; -} - function createImageThumbnailContainer(imageNode, optClass) { var nodePath = getNodePath(getLayoutNode(imageNode), ''); @@ -458,7 +330,6 @@ { document.getElementById("albums").parentNode.insertBefore(breadcrumbTrailDiv, document.getElementById("albums")); } - } function createBreadcrumbMenu(path, currentFolder) @@ -600,24 +471,19 @@ function showImage(element) { - var siblingNodes = getSiblingNodes(element); + var siblingNodes = getLayoutNode(element).parentNode.childNodes; var nodePath = getNodePath(getLayoutNode(element), ''); var selectedDiv = document.createElement("div"); selectedDiv.setAttribute("id", "selectedalbum"); - // var selectedImage = document.createElement("div"); - // selectedImage.setAttribute("id", "selectimage"); - // selectedDiv.appendChild(selectedImage); - for (var i = 0; i < siblingNodes.length; i++) { if (siblingNodes[i].nodeName == "image") { - if (siblingNodes[i].getAttribute("id") == element.id) + if (siblingNodes[i].getAttribute("id") == element.getAttribute("id")) { var expandedImage = createExpandedImage(siblingNodes[i]); - //selectedImage.appendChild(expandedImage); if (document.getElementById("expandedimage")) { Modified: .themes/ajax/ajax.xsl =================================================================== --- .themes/ajax/ajax.xsl 2007-07-18 12:31:15 UTC (rev 5) +++ .themes/ajax/ajax.xsl 2007-07-18 17:12:03 UTC (rev 6) @@ -54,6 +54,7 @@ </xsl:when> <xsl:otherwise> <xsl:attribute name="class">folder</xsl:attribute> + <xsl:attribute name="onclick">openFolder(this)</xsl:attribute> </xsl:otherwise> </xsl:choose> <span class="image"> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <esp...@us...> - 2007-07-18 12:31:13
|
Revision: 5 http://picfinity.svn.sourceforge.net/picfinity/?rev=5&view=rev Author: espadav8 Date: 2007-07-18 05:31:15 -0700 (Wed, 18 Jul 2007) Log Message: ----------- Add a folder icon to the breadcrumb trail Modified Paths: -------------- .themes/ajax/ajax.css .themes/ajax/ajax.js Modified: .themes/ajax/ajax.css =================================================================== --- .themes/ajax/ajax.css 2007-07-18 12:02:03 UTC (rev 4) +++ .themes/ajax/ajax.css 2007-07-18 12:31:15 UTC (rev 5) @@ -165,35 +165,16 @@ background: #ffd0d0; } -div.stack .folder span.name:hover -{ - color: #fff; -} - -#breadcrumbtrail ul li:hover, div.stack .folder:hover, .folder span.image:hover, -.thumbnail span.image:hover +.thumbnail span.image:hover, +#breadcrumbtrail ul li:hover { background: #606060; cursor: pointer; } - - - - - - - - - - - - - - /* --- breadcrumb --- */ #breadcrumbtrail @@ -218,19 +199,34 @@ #breadcrumbtrail ul li { - height: 14px; - padding: 3px 0 3px 10px; - width: 140px; + height: 18px; + padding: 3px 0 3px 5px; + width: 145px; } #breadcrumbtrail ul li ul { display: none; - margin: 2px 0 -1px -11px; + margin: 21px 0 -1px -6px; position: fixed; z-index: 10; } +#breadcrumbtrail ul li .name +{ + float: left; + border: none; + text-align: left; + padding: 3px 0 3px 5px; +} + +#breadcrumbtrail ul li .icon +{ + position: static; + float: left; + margin: -3px 0 0 0; +} + #breadcrumbtrail ul li ul li:hover { background: #303030; Modified: .themes/ajax/ajax.js =================================================================== --- .themes/ajax/ajax.js 2007-07-18 12:02:03 UTC (rev 4) +++ .themes/ajax/ajax.js 2007-07-18 12:31:15 UTC (rev 5) @@ -481,9 +481,38 @@ // these will all be hidden until the :hover if (node.nodeName == "folder") { + var dropMenuLi = document.createElement("li"); dropMenuLi.setAttribute("id", node.getAttribute("id")); - dropMenuLi.setAttribute("onclick", "openFolder(this)"); + + if (node.hasChildNodes()) + { + dropMenuLi.setAttribute("onclick", "openFolder(this)"); + + // create a span for the folder icon + var iconSpan = document.createElement("span"); + iconSpan.setAttribute("class", "icon"); + + // create the icon image + var iconImage = document.createElement("img"); + iconImage.setAttribute("src", ".themes/ajax/foldericon.png"); + iconSpan.appendChild(iconImage); + dropMenuLi.appendChild(iconSpan); + } + else + { + dropMenuLi.setAttribute("class", "folder empty"); + + // create a span for the folder icon + var iconSpan = document.createElement("span"); + iconSpan.setAttribute("class", "icon"); + + // create the icon image + var iconImage = document.createElement("img"); + iconImage.setAttribute("src", ".themes/ajax/emptyicon.png"); + iconSpan.appendChild(iconImage); + dropMenuLi.appendChild(iconSpan); + } // we do this so we can show the user the currently selected folder in the drop down if (node.getAttribute("name") == currentFolder) @@ -494,7 +523,10 @@ { dropMenuLi.setAttribute("class", "menuentry"); } - dropMenuLi.appendChild(document.createTextNode(node.getAttribute("name"))); + var nameSpan = document.createElement("span"); + nameSpan.setAttribute("class", "name"); + nameSpan.appendChild(document.createTextNode(node.getAttribute("name"))); + dropMenuLi.appendChild(nameSpan); dropMenu.appendChild(dropMenuLi); } @@ -502,8 +534,23 @@ // this is for the current folder if ((node.nodeName == "folder") && (node.getAttribute("name") == currentFolder)) { - menuLi.insertBefore(document.createTextNode(node.getAttribute("name")), menuLi.firstChild); + var nameSpan = document.createElement("span"); + nameSpan.setAttribute("class", "name"); + nameSpan.appendChild(document.createTextNode(node.getAttribute("name"))); + // create a span for the folder icon + var iconSpan = document.createElement("span"); + iconSpan.setAttribute("class", "icon"); + + // create the icon image + var iconImage = document.createElement("img"); + iconImage.setAttribute("src", ".themes/ajax/foldericon.png"); + iconSpan.appendChild(iconImage); + dropMenuLi.appendChild(iconSpan); + + menuLi.insertBefore(nameSpan, menuLi.firstChild); + menuLi.insertBefore(iconSpan, menuLi.firstChild); + breadcrumbEntry.appendChild(menuLi); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <esp...@us...> - 2007-07-18 12:02:04
|
Revision: 4 http://picfinity.svn.sourceforge.net/picfinity/?rev=4&view=rev Author: espadav8 Date: 2007-07-18 05:02:03 -0700 (Wed, 18 Jul 2007) Log Message: ----------- Initial import of default themes Added Paths: ----------- .themes/ .themes/ajax/ .themes/ajax/ajax.css .themes/ajax/ajax.css.bak .themes/ajax/ajax.js .themes/ajax/ajax.xsl .themes/ajax/background.gif .themes/ajax/empty.png .themes/ajax/emptyicon.png .themes/ajax/folder.png .themes/ajax/foldericon.png .themes/gallery/ .themes/gallery/gallery.css .themes/gallery/gallery.js .themes/gallery/gallery.xsl Added: .themes/ajax/ajax.css =================================================================== --- .themes/ajax/ajax.css (rev 0) +++ .themes/ajax/ajax.css 2007-07-18 12:02:03 UTC (rev 4) @@ -0,0 +1,242 @@ +* +{ + padding: 0; + margin: 0; +} + +img +{ + display: block; +} + +html +{ + padding: 20px; + background: #1a1a1a url('background.gif') repeat-x; +} + +h1 +{ + text-align: center; + color: #d0d0d0; +} + + + +/* --- ids --- */ + +div#selectedalbum +{ + clear: both; + display: block; + float: left; +} + +div#expandedimage +{ + padding: 5px 5px 0 5px; + border: 1px solid #ccc; + clear: left; +} + +#loadingspan +{ + background: #cc0022; + text-align: center; + color: #fff; + font-weight: bold; + margin: -5px; + padding: 5px; +} + + +/* --- folders --- */ + +.folder, +.thumbnail, +div#expandedimage +{ + background: #484848; +} + +.folder, +.thumbnail +{ + height: 150px; + width: 150px; + display: block; + float: left; + margin: 5px 5px 0 0; + border: 1px solid #ccc; + position: relative; +} + +div.stack .folder +{ + height: 25px; + clear: left; + margin: -1px 0 0 0; + border: none; +} + + +/* --- icons --- */ + +.icon +{ + position: absolute; + top: 3px; + left: 15px; +} + +div.stack .folder span.icon +{ + top: 1px; + left: 5px; +} + + +/* --- images --- */ + +.selected span.image +{ + background: #303030; +} + +.folder span.image, +.thumbnail span.image +{ + display: block; + padding: 14px 25px; + height: 100px; + width: 100px; +} + + + +div.stack +{ + margin-top: 25px; + padding: 0; + float: left; + clear: left; +} + + +/* --- image names --- */ + +.name +{ + color: #f0f0f0; + font-weight: bold; + border-top: 1px solid #ccc; + padding: 3px 0; + text-align: center; + display: block; +} + +div.stack .folder span.name +{ +/* width = 150px; height = 25px */ + text-align: left; + height: 18px; + width: 120px; + border: 1px solid #ccc; + padding: 5px 0 0 28px; + bottom: 0; + position: absolute; +} + +div#expandedimage span.name +{ + margin: 5px -5px 0 -5px; +} + + +/* --- hover actions --- */ + +div#expandedimage:hover +{ + cursor: pointer; +} + +.empty span.image:hover +{ + background: #ffd0d0; +} + +div.stack .folder span.name:hover +{ + color: #fff; +} + +#breadcrumbtrail ul li:hover, +div.stack .folder:hover, +.folder span.image:hover, +.thumbnail span.image:hover +{ + background: #606060; + cursor: pointer; +} + + + + + + + + + + + + + + + + +/* --- breadcrumb --- */ + +#breadcrumbtrail +{ + display: block; + margin: 0 0 10px 0; + height: 20px; +} + +#breadcrumbtrail ul +{ + color: #fff; + font-weight: bold; + list-style: none; + background: #484848; + display: block; + float: left; + width: 150px; + margin: 0 5px 0 0; + border: 1px solid #ccc; +} + +#breadcrumbtrail ul li +{ + height: 14px; + padding: 3px 0 3px 10px; + width: 140px; +} + +#breadcrumbtrail ul li ul +{ + display: none; + margin: 2px 0 -1px -11px; + position: fixed; + z-index: 10; +} + +#breadcrumbtrail ul li ul li:hover +{ + background: #303030; +} + +#breadcrumbtrail ul li:hover ul +{ + display: block; +} \ No newline at end of file Added: .themes/ajax/ajax.css.bak =================================================================== --- .themes/ajax/ajax.css.bak (rev 0) +++ .themes/ajax/ajax.css.bak 2007-07-18 12:02:03 UTC (rev 4) @@ -0,0 +1,117 @@ +* +{ + padding: 0; + margin: 0; +} + +html +{ + background: #1a1a1a url('background.gif') repeat-x; +} + +h1 +{ + margin: 10px 0; + text-align: center; + color: #d0d0d0; +} + +#albums +{ + position: relative; + margin: 0 20px; +} + +.name +{ + color: #f0f0f0; + font-weight: bold; +} + + +.folder, +.thumbnail +{ + width: 150px; + height: 150px; + display: block; + float: left; + margin: 5px; + border: 1px solid #ccc; + position: relative; + background: #484848; +} + +.icon +{ + position:relative; + bottom: 125px; + left: 15px; +} + +.folder span.image:hover, +.thumbnail span.image:hover +{ + background: #d0ffd0; +} + +.empty span.image:hover +{ + background: #ffd0d0; +} + +.folder span.name, +.thumbnail span.name +{ + display: block; + text-align: center; + border-top: 1px solid #ccc; + padding: 3px 0; + position: absolute; + bottom: 0; + height: 15px; + overflow: hidden; + width: 150px; +} + +.folder span.image, +.thumbnail span.image +{ + display: block; + text-align: center; + vertical-align: middle; + padding: 14px 25px; + height: 100px; + width: 100px; +} + +div.stack +{ + margin-top: 25px; + padding: 5px; + float: left; + clear: left; +} + +div.stack .folder +{ + background: #484848; + width: 35px; + margin: 0 -1px 0 0; + overflow: hidden; +} + + +div.stack .folder:hover, +div.stack .folder image:hover +{ + width: 150px; + color: #000; +} + +div#selectedalbum +{ + clear: both; + display: block; + float: left; +} \ No newline at end of file Added: .themes/ajax/ajax.js =================================================================== --- .themes/ajax/ajax.js (rev 0) +++ .themes/ajax/ajax.js 2007-07-18 12:02:03 UTC (rev 4) @@ -0,0 +1,608 @@ +addEvent(window, 'load', init, false); +addEvent(window, 'load', importLayout, false); + +var xmlDoc; + +function importLayout() +{ + if (document.implementation && document.implementation.createDocument) + { + xmlDoc = document.implementation.createDocument("", "", null); + } + else if (window.ActiveXObject) + { + xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); + } + else + { + alert('Your browser can\'t handle this script'); + return; + } + xmlDoc.load("gallery.xml"); +} + +function getElementsByClassName(className, tag) +{ + var testClass = new RegExp("(^|\\s)" + className + "(\\s|$)"); + var tag = tag || "*"; + var elm = document; + var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag); + var returnElements = []; + var current; + var length = elements.length; + for(var i=0; i<length; i++){ + current = elements[i]; + if(testClass.test(current.className)){ + returnElements.push(current); + } + } + return returnElements; +} + +function addEvent(elm, evType, fn, useCapture) +{ + if (elm.addEventListener) { + elm.addEventListener(evType, fn, useCapture); + return true; + } + else if (elm.attachEvent) { + var r = elm.attachEvent('on' + evType, fn); + return r; + } + else { + elm['on' + evType] = fn; + } +} + +function getChildNodesByTagName(element, tagName) +{ + var result = Array(); + + if(!element.hasChildNodes()) { + return result; + } + + var i; + var lowerTagName = tagName.toLowerCase(); + + for(i = 0; i < element.childNodes.length; i++) + { + if (element.childNodes[i].nodeName.toLowerCase() != lowerTagName) { + continue; + } + + result.push(element.childNodes[i]); + } + + return result; +} + +function getSiblingNodes(element) +{ + var parentNode = getLayoutNode(element).parentNode; + + return parentNode.childNodes; +} + +function getNodePath(element, nodePath) +{ + nodePath = (nodePath == undefined) ? '' : nodePath; + + if (element == xmlDoc.documentElement) + { + return '.' + nodePath; + } + else + { + nodePath = element.parentNode.getAttribute("name") + '/' + nodePath; + return getNodePath(element.parentNode, nodePath); + } +} + +function getLayoutNode(element) +{ + if (document.createTreeWalker) { + var nodes = document.createTreeWalker(xmlDoc.documentElement, NodeFilter.SHOW_ELEMENT, null, false); + + while ((node = nodes.nextNode()) != null) + { + if (node.getAttribute("id") == element.getAttribute("id")) + { + return node; + } + else + { + continue; + } + } + } + + return null; +} + +function init() +{ + var folders = getElementsByClassName("folder", "div"); + + for (var i = 0; i < folders.length; i++) + { + if (folders[i].getAttribute("class").toString().match("empty")) + { + } + else + { + folders[i].setAttribute("onclick", "openFolder(this)"); + } + } +} + +function openFolder(element) +{ + var nodePath = getNodePath(getLayoutNode(element), ''); + + var breadcrumbDiv; + + var newAlbumsDiv = document.createElement("div"); + newAlbumsDiv.setAttribute("id", "albums"); + + var backButton = document.createElement("div") + backButton.setAttribute("id", "backbutton"); + + var stackDiv = document.createElement("div"); + stackDiv.setAttribute("class", "stack"); + + var selectedDiv = document.createElement("div"); + selectedDiv.setAttribute("id", "selectedalbum"); + + var mainFolders = getLayoutNode(element).parentNode.childNodes; + + for (var i = 0; i < mainFolders.length; i++) + { + // if it's a folder we've come across + if (mainFolders[i].nodeName == "folder") + { + // if it's not the folder we're acting on + if(mainFolders[i].getAttribute("id") != element.id) + { + // var stackFolder = createStackFolderContainer(mainFolders[i]); + // stackDiv.appendChild(stackFolder); + } + + // it is the folder we're acting on + else + { + breadcrumbDiv = createBreadcrumbTrail(mainFolders[i]); + + var selectedAlbumFolders = getChildNodesByTagName(mainFolders[i], "folder"); + var selectedAlbumImages = getChildNodesByTagName(mainFolders[i], "image"); + + for (var j = 0; j < selectedAlbumFolders.length; j++) + { + var subFolderContainer = createSubFolderContainer(selectedAlbumFolders[j]); + selectedDiv.appendChild(subFolderContainer); + } + + for (var j = 0; j < selectedAlbumImages.length; j++) + { + var thumbnailContainer = createImageThumbnailContainer(selectedAlbumImages[j]); + selectedDiv.appendChild(thumbnailContainer); + } + } + } + + // we've come across an image node + else if (mainFolders[i].nodeName == "image") + { + continue; + } + } + + newAlbumsDiv.appendChild(selectedDiv); + newAlbumsDiv.appendChild(stackDiv); + + // if we're not in the root node then create another stack with the main folders + if (nodePath != "./") + { + var rootStackDiv = document.createElement("div"); + rootStackDiv.setAttribute("class", "stack"); + + var rootNodeFolders = xmlDoc.documentElement.childNodes; + + for (var i = 0; i < rootNodeFolders.length; i++) + { + if (rootNodeFolders[i].nodeName == "folder") + { + var stackFolder = createStackFolderContainer(rootNodeFolders[i]); + rootStackDiv.appendChild(stackFolder); + } + } + + // newAlbumsDiv.appendChild(rootStackDiv); + } + + document.getElementById("albums").parentNode.replaceChild(newAlbumsDiv, document.getElementById("albums")); +} + +function checkFolderContents(element) +{ + if (element.hasChildNodes() == false) + { + return ".themes/ajax/empty.png"; + } + else + { + var nodePath = getNodePath(getLayoutNode(element), ''); + var imageChildNodes = getChildNodesByTagName(element, "image"); + + if (imageChildNodes.length > 0) + { + var imagePath = '.thumbs/' + + nodePath + + element.getAttribute("name") + + '/' + + imageChildNodes[0].getAttribute("file"); + return imagePath; + } + else + { + return ".themes/ajax/folder.png"; + } + } +} + +function createStackFolderContainer(folderNode) +{ + var stackFolder = document.createElement("div"); + stackFolder.setAttribute("id", folderNode.getAttribute("id")); + + // var imageSpan = document.createElement("span") + // imageSpan.setAttribute("class", "image"); + + // var folderImage = document.createElement("img"); + // folderImage.setAttribute("src", checkFolderContents(folderNode, getNodePath(folderNode, ''))); + // imageSpan.appendChild(folderImage); + + var textSpan = document.createElement("span"); + textSpan.setAttribute("class", "name"); + textSpan.appendChild(document.createTextNode(folderNode.getAttribute("name"))); + + + // stackFolder.appendChild(imageSpan); + + // this has to be done here otherwise the nodes would be added in the wrong order + if (folderNode.hasChildNodes()) + { + stackFolder.setAttribute("class", "folder"); + stackFolder.setAttribute("onclick", "openFolder(this)"); + + // create a span for the folder icon + var iconSpan = document.createElement("span"); + iconSpan.setAttribute("class", "icon"); + + // create the icon image + var iconImage = document.createElement("img"); + iconImage.setAttribute("src", ".themes/ajax/foldericon.png"); + iconSpan.appendChild(iconImage); + stackFolder.appendChild(iconSpan); + } + else + { + stackFolder.setAttribute("class", "folder empty"); + + // create a span for the folder icon + var iconSpan = document.createElement("span"); + iconSpan.setAttribute("class", "icon"); + + // create the icon image + var iconImage = document.createElement("img"); + iconImage.setAttribute("src", ".themes/ajax/emptyicon.png"); + iconSpan.appendChild(iconImage); + stackFolder.appendChild(iconSpan); + } + + stackFolder.appendChild(textSpan); + + return stackFolder; +} + +function createImageThumbnailContainer(imageNode, optClass) +{ + var nodePath = getNodePath(getLayoutNode(imageNode), ''); + + var classes = (optClass == null) ? "thumbnail" : "thumbnail " + optClass; + + var albumImageDiv = document.createElement("div"); + albumImageDiv.setAttribute("class", classes); + albumImageDiv.setAttribute("id", imageNode.getAttribute("id")); + albumImageDiv.setAttribute("onclick", "showImage(this)"); + + var imageSpan = document.createElement("span"); + imageSpan.setAttribute("class", "image"); + + var albumImage = document.createElement("img"); + var imageThumbPath = '.thumbs/' + nodePath + '/' + imageNode.getAttribute("file"); + albumImage.setAttribute("src", imageThumbPath); + imageSpan.appendChild(albumImage); + + var imageNameSpan = document.createElement("span"); + imageNameSpan.setAttribute("class", "name"); + imageNameSpan.appendChild(document.createTextNode(imageNode.getAttribute("file"))); + + + albumImageDiv.appendChild(imageSpan); + albumImageDiv.appendChild(imageNameSpan); + + return albumImageDiv; +} + +function createSubFolderContainer(folderNode) +{ + var nodePath = getNodePath(getLayoutNode(folderNode), ''); + + // create the main folder div + var subFolder = document.createElement("div"); + subFolder.setAttribute("class", "folder"); + subFolder.setAttribute("id", folderNode.getAttribute("id")); + subFolder.setAttribute("onclick", "openFolder(this)"); + + // create a span for the image + var folderImageSpan = document.createElement("span"); + folderImageSpan.setAttribute("class", "image"); + + // create the image + var folderImage = document.createElement("img"); + var imagePath = checkFolderContents(folderNode); + folderImage.setAttribute("src", imagePath); + folderImageSpan.appendChild(folderImage); + + // create a span for the folder icon + var iconSpan = document.createElement("span"); + iconSpan.setAttribute("class", "icon"); + + // create the icon image + var iconImage = document.createElement("img"); + iconImage.setAttribute("src", ".themes/ajax/foldericon.png"); + iconSpan.appendChild(iconImage); + + // create a span for the text + var textSpan = document.createElement("span"); + textSpan.setAttribute("class", "name"); + + // create the text + var textNode = document.createTextNode(folderNode.getAttribute("name") + + '(' + getChildNodesByTagName(folderNode, "image").length + ')'); + textSpan.appendChild(textNode); + + // appened them all in order + subFolder.appendChild(folderImageSpan); + subFolder.appendChild(iconSpan); + subFolder.appendChild(textSpan); + + return subFolder; +} + +function createExpandedImage(imageNode) +{ + var nodePath = getNodePath(getLayoutNode(imageNode), ''); + + var expandedImageDiv = document.createElement("div"); + expandedImageDiv.setAttribute("id", "expandedimage"); + expandedImageDiv.setAttribute("onclick", "closeImage(this, '" + imageNode.getAttribute("id") + "')"); + expandedImageDiv.style.width = "200px"; + expandedImageDiv.style.height = "43px"; + + var loadingSpan = document.createElement("span"); + loadingSpan.setAttribute("id", "loadingspan"); + loadingSpan.style.display = "block"; + loadingSpan.appendChild(document.createTextNode("Loading image")); + + var imageSpan = document.createElement("span"); + imageSpan.setAttribute("id", "expandedimagespan"); + imageSpan.setAttribute("class", "image"); + imageSpan.style.display = "none"; + + var albumImage = document.createElement("img"); + var imageThumbPath = nodePath + '/' + imageNode.getAttribute("file"); + albumImage.setAttribute("src", imageThumbPath); + imageSpan.appendChild(albumImage); + + var imageNameSpan = document.createElement("span"); + imageNameSpan.setAttribute("class", "name"); + imageNameSpan.appendChild(document.createTextNode(imageNode.getAttribute("file"))); + + var expandedImage = new Image(); + expandedImage.src = imageThumbPath; + expandedImage.onload = function() + { + var expandedImageDiv = document.getElementById("expandedimage"); + expandedImageDiv.style.width = expandedImage.width + "px"; + expandedImageDiv.style.height = (expandedImage.height + 27) + "px"; + + var imageSpan = document.getElementById("expandedimagespan"); + imageSpan.style.display = "block"; + + var loadingSpan = document.getElementById("loadingspan"); + loadingSpan.style.display = "none"; + } + + expandedImageDiv.appendChild(loadingSpan); + expandedImageDiv.appendChild(imageSpan); + expandedImageDiv.appendChild(imageNameSpan); + + return expandedImageDiv; +} + +function createBreadcrumbTrail(element) +{ + var breadcrumbTrailDiv = document.createElement("div"); + breadcrumbTrailDiv.setAttribute("id", "breadcrumbtrail"); + + var nodePath = getNodePath(getLayoutNode(element), '') + element.getAttribute("name"); + + var paths = nodePath.split('/'); + var currentPath = ''; + + for (var i = 0; i < paths.length - 1; i++) + { + currentPath += paths[i] + '/'; + + var breadcrumbMenu = createBreadcrumbMenu(currentPath, paths[i + 1]); + breadcrumbTrailDiv.appendChild(breadcrumbMenu); + } + + if (document.getElementById("breadcrumbtrail")) + { + document.getElementById("albums").parentNode.replaceChild(breadcrumbTrailDiv, document.getElementById("breadcrumbtrail")); + } + else + { + document.getElementById("albums").parentNode.insertBefore(breadcrumbTrailDiv, document.getElementById("albums")); + } + +} + +function createBreadcrumbMenu(path, currentFolder) +{ + var breadcrumbEntry = document.createElement("ul"); + breadcrumbEntry.setAttribute("class", "trailentry"); + + var menuLi = document.createElement("li"); + menuLi.setAttribute("class", "currentfolder"); + + var dropMenu = document.createElement("ul"); + menuLi.appendChild(dropMenu); + + var layoutNode = selectLayoutNodeFromPath(path); + + for (var i = 0; i < layoutNode.childNodes.length; i++) + { + var node = layoutNode.childNodes[i]; + + // these will all be hidden until the :hover + if (node.nodeName == "folder") + { + var dropMenuLi = document.createElement("li"); + dropMenuLi.setAttribute("id", node.getAttribute("id")); + dropMenuLi.setAttribute("onclick", "openFolder(this)"); + + // we do this so we can show the user the currently selected folder in the drop down + if (node.getAttribute("name") == currentFolder) + { + dropMenuLi.setAttribute("class", "menuentry selected"); + } + else + { + dropMenuLi.setAttribute("class", "menuentry"); + } + dropMenuLi.appendChild(document.createTextNode(node.getAttribute("name"))); + + dropMenu.appendChild(dropMenuLi); + } + + // this is for the current folder + if ((node.nodeName == "folder") && (node.getAttribute("name") == currentFolder)) + { + menuLi.insertBefore(document.createTextNode(node.getAttribute("name")), menuLi.firstChild); + + breadcrumbEntry.appendChild(menuLi); + } + } + + return breadcrumbEntry; +} + +function selectLayoutNodeFromPath(path, node) +{ + node = (node == undefined) ? xmlDoc.documentElement : node; + + + if(path == "./") + { + // alert("returning documentElement"); + return xmlDoc.documentElement; + } + else if (path != '') + { + // alert(path); + path = (path.indexOf("./") == 0) ? path.substring(2) : path; + + var currentPath = path.split('/')[0]; + + if (document.createTreeWalker) { + // alert("01\n" + node.nodeName); + var nodes = document.createTreeWalker(node, NodeFilter.SHOW_ELEMENT, null, false); + + while ((selectedNode = nodes.nextNode()) != null) + { + if ((selectedNode.nodeName == "folder") && (selectedNode.getAttribute("name") == currentPath)) + { + return selectLayoutNodeFromPath(path.replace(currentPath + '/', ''), selectedNode); + } + else + { + continue; + } + } + } + } + else + { + return node; + } +} + +function showImage(element) +{ + var siblingNodes = getSiblingNodes(element); + var nodePath = getNodePath(getLayoutNode(element), ''); + + var selectedDiv = document.createElement("div"); + selectedDiv.setAttribute("id", "selectedalbum"); + + // var selectedImage = document.createElement("div"); + // selectedImage.setAttribute("id", "selectimage"); + // selectedDiv.appendChild(selectedImage); + + for (var i = 0; i < siblingNodes.length; i++) + { + if (siblingNodes[i].nodeName == "image") + { + if (siblingNodes[i].getAttribute("id") == element.id) + { + var expandedImage = createExpandedImage(siblingNodes[i]); + //selectedImage.appendChild(expandedImage); + + if (document.getElementById("expandedimage")) + { + document.getElementById("expandedimage").parentNode.replaceChild(expandedImage, document.getElementById("expandedimage")); + } + else + { + document.getElementById("selectedalbum").parentNode.insertBefore(expandedImage, document.getElementById("selectedalbum")); + } + + var thumbnailContainer = createImageThumbnailContainer(siblingNodes[i], "selected"); + selectedDiv.appendChild(thumbnailContainer); + } + else + { + var thumbnailContainer = createImageThumbnailContainer(siblingNodes[i]); + selectedDiv.appendChild(thumbnailContainer); + } + } + else if (siblingNodes[i].nodeName == "folder") + { + var subFolderContainer = createSubFolderContainer(siblingNodes[i]); + selectedDiv.appendChild(subFolderContainer); + } + } + + document.getElementById("selectedalbum").parentNode.replaceChild(selectedDiv, document.getElementById("selectedalbum")); +} + +function closeImage(element, id) +{ + document.getElementById("expandedimage").parentNode.removeChild(document.getElementById("expandedimage")); + + document.getElementById(id).className = "thumbnail"; +} \ No newline at end of file Added: .themes/ajax/ajax.xsl =================================================================== --- .themes/ajax/ajax.xsl (rev 0) +++ .themes/ajax/ajax.xsl 2007-07-18 12:02:03 UTC (rev 4) @@ -0,0 +1,111 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> + <xsl:output + method="xml" + omit-xml-declaration="no" + indent="yes" + doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" + doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" + /> + + <xsl:param name="title" /> + <xsl:param name="themename">ajax</xsl:param> + + <xsl:template match="/"> + <html> + <head> + <title><xsl:value-of select="$title" /></title> + + <link href=".themes/ajax/ajax.css" rel="stylesheet" type="text/css"> + <xsl:attribute name="href"><xsl:value-of select="concat('.themes/', $themename, '/', $themename, '.css')" /></xsl:attribute> + </link> + <script type="text/javascript"> + <xsl:attribute name="src"><xsl:value-of select="concat('.themes/', $themename, '/', $themename, '.js')" /></xsl:attribute> + </script> + + </head> + + <body> + <h1><xsl:value-of select="$title" /></h1> + + <xsl:apply-templates select="layout" /> + </body> + </html> + </xsl:template> + + <xsl:template match="layout"> + <div id="albums"> + + <xsl:apply-templates select="folder"> + <xsl:with-param name="location" select="@name" /> + </xsl:apply-templates> + + </div> + </xsl:template> + + <xsl:template match="folder"> + <xsl:param name="location" /> + + <div> + <xsl:attribute name="id"><xsl:value-of select="@id" /></xsl:attribute> + <xsl:choose> + <xsl:when test="count(folder) = 0 and count(image) = 0"> + <xsl:attribute name="class">folder empty</xsl:attribute> + </xsl:when> + <xsl:otherwise> + <xsl:attribute name="class">folder</xsl:attribute> + </xsl:otherwise> + </xsl:choose> + <span class="image"> + <xsl:choose> + <xsl:when test="count(image) > 0"> + <img> + <xsl:attribute name="src"> + <xsl:value-of select="concat('.thumbs/' , @name, '/', image[1]/@file)" /> + </xsl:attribute> + </img> + </xsl:when> + <xsl:when test="count(folder) > 0"> + <img> + <xsl:attribute name="src"><xsl:value-of select="concat('.themes/', $themename, '/folder.png')" /></xsl:attribute> + </img> + </xsl:when> + <xsl:otherwise> + <img> + <xsl:attribute name="src"><xsl:value-of select="concat('.themes/', $themename, '/empty.png')" /></xsl:attribute> + </img> + </xsl:otherwise> + </xsl:choose> + </span> + <xsl:if test="count(image) > 0"> + <span class="icon"> + <img> + <xsl:attribute name="src"> + <xsl:value-of select="concat('.themes/', $themename, '/foldericon.png')" /> + </xsl:attribute> + </img> + </span> + </xsl:if> + <span class="name"> + <xsl:value-of select="@name" /> + <xsl:choose> + <xsl:when test="(count(folder) > 0) and (count(image) > 0)"> + <xsl:text disable-output-escaping="yes">&nbsp;</xsl:text>(<xsl:value-of select="count(image)" /> +<xsl:value-of select="count(folder)" />) + </xsl:when> + <xsl:when test="count(folder) > 0"> + <xsl:text disable-output-escaping="yes">&nbsp;</xsl:text>(+<xsl:value-of select="count(folder)" />) + </xsl:when> + <xsl:when test="count(image) > 0"> + <xsl:text disable-output-escaping="yes">&nbsp;</xsl:text>(<xsl:value-of select="count(image)" />) + </xsl:when> + </xsl:choose> + </span> + </div> + </xsl:template> + + <xsl:template match="image"> + <xsl:param name="location" /> + <xsl:variable name="id"><xsl:value-of select="generate-id()" /></xsl:variable> + </xsl:template> + +</xsl:stylesheet> Added: .themes/ajax/background.gif =================================================================== (Binary files differ) Property changes on: .themes/ajax/background.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: .themes/ajax/empty.png =================================================================== (Binary files differ) Property changes on: .themes/ajax/empty.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: .themes/ajax/emptyicon.png =================================================================== (Binary files differ) Property changes on: .themes/ajax/emptyicon.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: .themes/ajax/folder.png =================================================================== (Binary files differ) Property changes on: .themes/ajax/folder.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: .themes/ajax/foldericon.png =================================================================== (Binary files differ) Property changes on: .themes/ajax/foldericon.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: .themes/gallery/gallery.css =================================================================== --- .themes/gallery/gallery.css (rev 0) +++ .themes/gallery/gallery.css 2007-07-18 12:02:03 UTC (rev 4) @@ -0,0 +1,58 @@ +ul +{ + list-style: none; +} + +img +{ + border: 0; + display: block; + padding: 5px 10px 10px 0; +} + +a +{ + text-decoration: none; +} + +ul +{ + padding: 0; +} + +li +{ + display: block; + clear: both; +} + +ul li +{ + border: 4px ridge #ccc; + padding: 5px; + margin: 5px; +} + +ul li ul +{ + border: none; + padding: 0; + margin: 0; +} + +ul li ul li +{ + border: 1px solid #ccc; +} + +ul li ul li ul, +.noborder li, +.image +{ + border: none; +} + +.hidden +{ + display: none; +} \ No newline at end of file Added: .themes/gallery/gallery.js =================================================================== --- .themes/gallery/gallery.js (rev 0) +++ .themes/gallery/gallery.js 2007-07-18 12:02:03 UTC (rev 4) @@ -0,0 +1,106 @@ +function getElementsByClassName(className, tag){ + var testClass = new RegExp("(^|\\s)" + className + "(\\s|$)"); + var tag = tag || "*"; + var elm = document; + var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag); + var returnElements = []; + var current; + var length = elements.length; + for(var i=0; i<length; i++){ + current = elements[i]; + if(testClass.test(current.className)){ + returnElements.push(current); + } + } + return returnElements; +} + +function init() +{ + var ul_nodes = document.getElementsByTagName("ul"); + + for(var i = 0; i < ul_nodes.length; i++) + { + var parent_node = ul_nodes[i].parentNode; + + if (parent_node.nodeName == "LI") + { + ul_nodes[i].className += " hidden"; + // alert(parent_node.childNodes[1].nodeName); + parent_node.setAttribute("onclick", "switchHidden(this, event)"); + } + } + + + // var folders = getElementsByClassName('folder', 'li'); +} + +function switchHidden(element, e) +{ + var target = e ? e.target : window.event.srcElement; + + // alert(target); + if (target != element) return false; + + var child_nodes = element.childNodes; + + for(var i = 0; i < child_nodes.length; i++) + { + if (child_nodes[i].nodeName == "UL") + { + if (child_nodes[i].className.match("hidden")) + { + child_nodes[i].className = child_nodes[i].className.replace("hidden", ""); + } + else + { + child_nodes[i].className += " hidden"; + } + } + } + return false; +} + +function show_image(url, name, id) +{ + var image_li = document.getElementById(id); + var old_anchor = image_li.getElementsByTagName('a')[0]; + + var new_anchor = document.createElement("a"); + // set the onclick + new_anchor.setAttribute("onclick", "hide_image('" + url + "', '" + name + "', '" + id + "'); return false;"); + // set the href + new_anchor.setAttribute("href", url); + + var new_image = document.createElement("img"); + new_image.setAttribute("src", url); + + new_anchor.appendChild(document.createTextNode(name)); + new_anchor.appendChild(new_image); + + image_li.replaceChild(new_anchor, old_anchor); + + return false; +} + +function hide_image(url, name, id) +{ + var image_li = document.getElementById(id); + var old_anchor = image_li.getElementsByTagName('a')[0]; + + var new_anchor = document.createElement("a"); + // set the onclick + new_anchor.setAttribute("onclick", "show_image('" + url + "', '" + name + "', '" + id + "'); return false;"); + // set the href + new_anchor.setAttribute("href", url); + + var new_image = document.createElement("img"); + new_image.setAttribute("src", url.replace("./", ".thumbs/")); + + new_anchor.appendChild(document.createTextNode(name)); + new_anchor.appendChild(new_image); + + image_li.replaceChild(new_anchor, old_anchor); + + return false; +} \ No newline at end of file Added: .themes/gallery/gallery.xsl =================================================================== --- .themes/gallery/gallery.xsl (rev 0) +++ .themes/gallery/gallery.xsl 2007-07-18 12:02:03 UTC (rev 4) @@ -0,0 +1,79 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> + <xsl:output + method="xml" + omit-xml-declaration="yes" + indent="yes" + doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" + doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" + /> + + <xsl:param name="title" /> + + <xsl:template match="layout"> + <html> + <head> + <title><xsl:value-of select="$title" /></title> + <link href=".themes/gallery/gallery.css" rel="stylesheet" type="text/css" /> + <script type="text/javascript" src=".themes/gallery/gallery.js"></script> + </head> + <body onload="init();"> + <h1><xsl:value-of select="$title" /></h1> + <ul id="gallery"> + <xsl:apply-templates select="folder"> + <xsl:with-param name="location" select="@name" /> + </xsl:apply-templates> + </ul> + </body> + </html> + </xsl:template> + + <xsl:template match="folder"> + <xsl:param name="location" /> + + <li class="folder"> + <xsl:attribute name="id"><xsl:value-of select="generate-id()" /></xsl:attribute> + <xsl:if test="count(folder) = 0"> + <xsl:attribute name="class">noborder</xsl:attribute> + </xsl:if> + + <xsl:value-of select="@name" /><xsl:if test="count(folder) = 0 and count(image) = 0"><xsl:text disable-output-escaping="yes">&nbsp;</xsl:text>(empty)</xsl:if> + + <xsl:if test="count(folder) > 0"> + <ul> + <xsl:apply-templates select="folder"> + <xsl:with-param name="location" select="concat($location, '/', @name)" /> + </xsl:apply-templates> + </ul> + </xsl:if> + + <xsl:if test="count(image) > 0"> + <ul> + <xsl:apply-templates select="image"> + <xsl:with-param name="location" select="concat($location, '/', @name)" /> + </xsl:apply-templates> + </ul> + </xsl:if> + </li> + </xsl:template> + + <xsl:template match="image"> + <xsl:param name="location" /> + + <li class="image"> + <xsl:attribute name="id"><xsl:value-of select="@id" /></xsl:attribute> + + <a> + <xsl:attribute name="href"><xsl:value-of select="concat('.', $location, '/', .)" /></xsl:attribute> + <xsl:attribute name="onclick">show_image('<xsl:value-of select="concat('.', $location, '/', @file)" />', '<xsl:value-of select="@file" />', '<xsl:value-of select="@id" />'); return false;</xsl:attribute> + + <xsl:value-of select="substring(@file, 0, " /> + + <img> + <xsl:attribute name="src"><xsl:value-of select="concat('.thumbs', $location, '/', @file)" /></xsl:attribute> + </img> + </a> + </li> + </xsl:template> + +</xsl:stylesheet> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <esp...@us...> - 2007-07-18 10:34:09
|
Revision: 3 http://picfinity.svn.sourceforge.net/picfinity/?rev=3&view=rev Author: espadav8 Date: 2007-07-18 03:34:06 -0700 (Wed, 18 Jul 2007) Log Message: ----------- - Initial import Added Paths: ----------- .project .projectOptions index.php Added: .project =================================================================== --- .project (rev 0) +++ .project 2007-07-18 10:34:06 UTC (rev 3) @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>Egallery</name> + <comment></comment> + <projects> + </projects> + <buildSpec> + <buildCommand> + <name>org.eclipse.php.core.PhpIncrementalProjectBuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.wst.validation.validationbuilder</name> + <arguments> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>org.eclipse.php.core.PHPNature</nature> + </natures> +</projectDescription> Added: .projectOptions =================================================================== --- .projectOptions (rev 0) +++ .projectOptions 2007-07-18 10:34:06 UTC (rev 3) @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<phpProjectOptions> + <projectOption name="org.eclipse.php.core.contextRoot"> + </projectOption> + <projectOption name="org.eclipse.php.core.defaultEncoding"> + </projectOption> + <includepath> + </includepath> +</phpProjectOptions> Added: index.php =================================================================== --- index.php (rev 0) +++ index.php 2007-07-18 10:34:06 UTC (rev 3) @@ -0,0 +1,215 @@ +<?php + + // site options + $site_name = "Andrew's Gallery"; + $theme = ($_GET['theme'] != '') ? $_GET['theme'] : "ajax" ; + + // not implemented yet + $max_folders = 0; // 0 = unlimited + + $create_thumbnails = true; + $create_html = true; + $create_xml = true; + + // valid images to be shown + $valid_image_formats = array('png', 'gif', 'jpg', 'jpeg', 'bmp'); + + // get the layout of the current dir + $site_layout = create_folder_layout('.'); + + $xml = array_to_xml($site_layout); + + if ($create_xml) + { + file_put_contents("gallery.xml", $xml); + } + + $html = xml_to_xhtml($xml, ".themes/$theme/$theme.xsl", array('title' => $site_name)); + + if ($create_html) + { + file_put_contents("index.html", $html); + } + + echo $html; + + // echo "<div style=\"display:none;\">$xml</div>"; + + + function create_folder_layout($folder) + { + global $valid_image_formats; + global $create_thumbnails; + + // get a listing of the files/folder + $folder_contents = scandir($folder); + $name = substr($folder, strrpos($folder, '/') + 1); + $id = uniqid('id'); + $layout = array('name' => $name, 'id' => $id); + + // for each entry + while (list(,$folder_entry) = each($folder_contents)) + { + if (strpos($folder_entry, '.') === 0) + { + // this is a hidden file/folder, ignore + } + // if it's a directory and doesn't start with a . + else if (is_dir($folder . '/' . $folder_entry)) + { + // get a list of it's files and check/create thumbnail(s) + $sub_layout = create_folder_layout($folder . '/' . $folder_entry); + //$layout[] = array($folder_entry => $sub_layout); + $layout['folder'][] = $sub_layout; + } + else + { + // otherwise, check if it's an image to process + $ext = substr($folder_entry, strrpos($folder_entry, '.') + 1); + + // check if it's a valid image format + if (in_array($ext, $valid_image_formats)) + { + if ($create_thumbnails) + { + // create a thumbnail + create_thumbnail($folder, $folder_entry, $ext); + } + $layout['image'][] = array('id' => uniqid('id'), 'file' => $folder_entry); + } + } + } + + return $layout; + } + + function create_thumbnail($folder, $image, $ext) + { + if (!is_dir('.thumbs/'.$folder)) + { + mkdir('.thumbs/'.$folder, 0777, TRUE); + chmod('.thumbs/'.$folder, 0777); + } + if (file_exists('.thumbs/'.$folder.'/'.$image)) + { + // if it already exists, do nothing + return; + } + else + { + $src_img; + switch ($ext) + { + case 'png': + $src_img = imagecreatefrompng($folder.'/'.$image); + break; + case 'jpg': + case 'jpeg': + $src_img = imagecreatefromjpeg($folder.'/'.$image); + break; + case 'gif': + $src_img = imagecreatefromgif($folder.'/'.$image); + break; + case 'bmp': + $src_img = imagecreatefrombmp($folder.'/'.$image); + break; + } + + $new_w = 100; + $new_h = 100; + + $old_x = imageSX($src_img); + $old_y = imageSY($src_img); + + if ($old_x > $old_y) { + $thumb_w = $new_w; + $thumb_h = $old_y * ($new_h/$old_x); + } + else if ($old_x < $old_y) { + $thumb_w = $old_x * ($new_w/$old_y); + $thumb_h = $new_h; + } + else if ($old_x == $old_y) { + $thumb_w = $new_w; + $thumb_h = $new_h; + } + + $dst_img = ImageCreateTrueColor($thumb_w, $thumb_h); + imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $thumb_w, $thumb_h, $old_x, $old_y); + + switch ($ext) + { + case 'png': + imagepg($dst_img, '.thumbs/'.$folder.'/'.$image); + break; + case 'jpg': + case 'jpeg': + imagejpeg($dst_img, '.thumbs/'.$folder.'/'.$image); + break; + case 'gif': + imagegif($dst_img, '.thumbs/'.$folder.'/'.$image); + break; + case 'bmp': + imagebmp($dst_img, '.thumbs/'.$folder.'/'.$image); + break; + } + + imagedestroy($dst_img); + imagedestroy($src_img); + } + } + + function array_to_xml(&$array, $tag_name = 'image', $headless = false) + { + error_reporting(E_ALL ^ E_NOTICE); + + // Include XML_Serializer + require_once 'XML/Serializer.php'; + + // An array of serializer options + $serializer_options = array ( + 'addDecl' => !$headless, + 'encoding' => 'ISO-8859-1', + 'indent' => ' ', + 'indentAttributes' => '_auto', + 'rootName' => 'layout', + 'defaultTagName' => $tag_name, + 'mode' => 'simplexml', + 'scalarAsAttributes' => true + + ); + + // Instantiate the serializer with the options + $Serializer = &new XML_Serializer($serializer_options); + + // Serialize the data structure + $status = $Serializer->serialize($array); + + // Check whether serialization worked + if (PEAR::isError($status)) { + die($status->getMessage()); + } + + // print_r($Serializer->options); + + // return the XML document + return $Serializer->getSerializedData(); + } + + function xml_to_xhtml($xml, $xsl_file, $params = array()) + { + $doc = new DOMDocument(); + $xsl = new XSLTProcessor(); + + $doc->load($xsl_file); + $xsl->importStyleSheet($doc); + + $doc->loadXML($xml); + + $xsl->setParameter('', $params); + + $html = $xsl->transformToXML($doc); + + return $html; + } +?> \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <esp...@us...> - 2007-07-17 21:24:44
|
Revision: 2 http://picfinity.svn.sourceforge.net/picfinity/?rev=2&view=rev Author: espadav8 Date: 2007-07-17 14:24:47 -0700 (Tue, 17 Jul 2007) Log Message: ----------- - Mistake Removed Paths: ------------- trunk Deleted: trunk =================================================================== --- trunk 2007-07-17 21:24:05 UTC (rev 1) +++ trunk 2007-07-17 21:24:47 UTC (rev 2) @@ -1,215 +0,0 @@ -<?php - - // site options - $site_name = "Andrew's Gallery"; - $theme = ($_GET['theme'] != '') ? $_GET['theme'] : "ajax" ; - - // not implemented yet - $max_folders = 0; // 0 = unlimited - - $create_thumbnails = true; - $create_html = true; - $create_xml = true; - - // valid images to be shown - $valid_image_formats = array('png', 'gif', 'jpg', 'jpeg', 'bmp'); - - // get the layout of the current dir - $site_layout = create_folder_layout('.'); - - $xml = array_to_xml($site_layout); - - if ($create_xml) - { - file_put_contents("gallery.xml", $xml); - } - - $html = xml_to_xhtml($xml, ".themes/$theme/$theme.xsl", array('title' => $site_name)); - - if ($create_html) - { - file_put_contents("index.html", $html); - } - - echo $html; - - // echo "<div style=\"display:none;\">$xml</div>"; - - - function create_folder_layout($folder) - { - global $valid_image_formats; - global $create_thumbnails; - - // get a listing of the files/folder - $folder_contents = scandir($folder); - $name = substr($folder, strrpos($folder, '/') + 1); - $id = uniqid('id'); - $layout = array('name' => $name, 'id' => $id); - - // for each entry - while (list(,$folder_entry) = each($folder_contents)) - { - if (strpos($folder_entry, '.') === 0) - { - // this is a hidden file/folder, ignore - } - // if it's a directory and doesn't start with a . - else if (is_dir($folder . '/' . $folder_entry)) - { - // get a list of it's files and check/create thumbnail(s) - $sub_layout = create_folder_layout($folder . '/' . $folder_entry); - //$layout[] = array($folder_entry => $sub_layout); - $layout['folder'][] = $sub_layout; - } - else - { - // otherwise, check if it's an image to process - $ext = substr($folder_entry, strrpos($folder_entry, '.') + 1); - - // check if it's a valid image format - if (in_array($ext, $valid_image_formats)) - { - if ($create_thumbnails) - { - // create a thumbnail - create_thumbnail($folder, $folder_entry, $ext); - } - $layout['image'][] = array('id' => uniqid('id'), 'file' => $folder_entry); - } - } - } - - return $layout; - } - - function create_thumbnail($folder, $image, $ext) - { - if (!is_dir('.thumbs/'.$folder)) - { - mkdir('.thumbs/'.$folder, 0777, TRUE); - chmod('.thumbs/'.$folder, 0777); - } - if (file_exists('.thumbs/'.$folder.'/'.$image)) - { - // if it already exists, do nothing - return; - } - else - { - $src_img; - switch ($ext) - { - case 'png': - $src_img = imagecreatefrompng($folder.'/'.$image); - break; - case 'jpg': - case 'jpeg': - $src_img = imagecreatefromjpeg($folder.'/'.$image); - break; - case 'gif': - $src_img = imagecreatefromgif($folder.'/'.$image); - break; - case 'bmp': - $src_img = imagecreatefrombmp($folder.'/'.$image); - break; - } - - $new_w = 100; - $new_h = 100; - - $old_x = imageSX($src_img); - $old_y = imageSY($src_img); - - if ($old_x > $old_y) { - $thumb_w = $new_w; - $thumb_h = $old_y * ($new_h/$old_x); - } - else if ($old_x < $old_y) { - $thumb_w = $old_x * ($new_w/$old_y); - $thumb_h = $new_h; - } - else if ($old_x == $old_y) { - $thumb_w = $new_w; - $thumb_h = $new_h; - } - - $dst_img = ImageCreateTrueColor($thumb_w, $thumb_h); - imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $thumb_w, $thumb_h, $old_x, $old_y); - - switch ($ext) - { - case 'png': - imagepg($dst_img, '.thumbs/'.$folder.'/'.$image); - break; - case 'jpg': - case 'jpeg': - imagejpeg($dst_img, '.thumbs/'.$folder.'/'.$image); - break; - case 'gif': - imagegif($dst_img, '.thumbs/'.$folder.'/'.$image); - break; - case 'bmp': - imagebmp($dst_img, '.thumbs/'.$folder.'/'.$image); - break; - } - - imagedestroy($dst_img); - imagedestroy($src_img); - } - } - - function array_to_xml(&$array, $tag_name = 'image', $headless = false) - { - error_reporting(E_ALL ^ E_NOTICE); - - // Include XML_Serializer - require_once 'XML/Serializer.php'; - - // An array of serializer options - $serializer_options = array ( - 'addDecl' => !$headless, - 'encoding' => 'ISO-8859-1', - 'indent' => ' ', - 'indentAttributes' => '_auto', - 'rootName' => 'layout', - 'defaultTagName' => $tag_name, - 'mode' => 'simplexml', - 'scalarAsAttributes' => true - - ); - - // Instantiate the serializer with the options - $Serializer = &new XML_Serializer($serializer_options); - - // Serialize the data structure - $status = $Serializer->serialize($array); - - // Check whether serialization worked - if (PEAR::isError($status)) { - die($status->getMessage()); - } - - // print_r($Serializer->options); - - // return the XML document - return $Serializer->getSerializedData(); - } - - function xml_to_xhtml($xml, $xsl_file, $params = array()) - { - $doc = new DOMDocument(); - $xsl = new XSLTProcessor(); - - $doc->load($xsl_file); - $xsl->importStyleSheet($doc); - - $doc->loadXML($xml); - - $xsl->setParameter('', $params); - - $html = $xsl->transformToXML($doc); - - return $html; - } -?> \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <esp...@us...> - 2007-07-17 21:24:04
|
Revision: 1 http://picfinity.svn.sourceforge.net/picfinity/?rev=1&view=rev Author: espadav8 Date: 2007-07-17 14:24:05 -0700 (Tue, 17 Jul 2007) Log Message: ----------- - Initial import Added Paths: ----------- trunk Added: trunk =================================================================== --- trunk (rev 0) +++ trunk 2007-07-17 21:24:05 UTC (rev 1) @@ -0,0 +1,215 @@ +<?php + + // site options + $site_name = "Andrew's Gallery"; + $theme = ($_GET['theme'] != '') ? $_GET['theme'] : "ajax" ; + + // not implemented yet + $max_folders = 0; // 0 = unlimited + + $create_thumbnails = true; + $create_html = true; + $create_xml = true; + + // valid images to be shown + $valid_image_formats = array('png', 'gif', 'jpg', 'jpeg', 'bmp'); + + // get the layout of the current dir + $site_layout = create_folder_layout('.'); + + $xml = array_to_xml($site_layout); + + if ($create_xml) + { + file_put_contents("gallery.xml", $xml); + } + + $html = xml_to_xhtml($xml, ".themes/$theme/$theme.xsl", array('title' => $site_name)); + + if ($create_html) + { + file_put_contents("index.html", $html); + } + + echo $html; + + // echo "<div style=\"display:none;\">$xml</div>"; + + + function create_folder_layout($folder) + { + global $valid_image_formats; + global $create_thumbnails; + + // get a listing of the files/folder + $folder_contents = scandir($folder); + $name = substr($folder, strrpos($folder, '/') + 1); + $id = uniqid('id'); + $layout = array('name' => $name, 'id' => $id); + + // for each entry + while (list(,$folder_entry) = each($folder_contents)) + { + if (strpos($folder_entry, '.') === 0) + { + // this is a hidden file/folder, ignore + } + // if it's a directory and doesn't start with a . + else if (is_dir($folder . '/' . $folder_entry)) + { + // get a list of it's files and check/create thumbnail(s) + $sub_layout = create_folder_layout($folder . '/' . $folder_entry); + //$layout[] = array($folder_entry => $sub_layout); + $layout['folder'][] = $sub_layout; + } + else + { + // otherwise, check if it's an image to process + $ext = substr($folder_entry, strrpos($folder_entry, '.') + 1); + + // check if it's a valid image format + if (in_array($ext, $valid_image_formats)) + { + if ($create_thumbnails) + { + // create a thumbnail + create_thumbnail($folder, $folder_entry, $ext); + } + $layout['image'][] = array('id' => uniqid('id'), 'file' => $folder_entry); + } + } + } + + return $layout; + } + + function create_thumbnail($folder, $image, $ext) + { + if (!is_dir('.thumbs/'.$folder)) + { + mkdir('.thumbs/'.$folder, 0777, TRUE); + chmod('.thumbs/'.$folder, 0777); + } + if (file_exists('.thumbs/'.$folder.'/'.$image)) + { + // if it already exists, do nothing + return; + } + else + { + $src_img; + switch ($ext) + { + case 'png': + $src_img = imagecreatefrompng($folder.'/'.$image); + break; + case 'jpg': + case 'jpeg': + $src_img = imagecreatefromjpeg($folder.'/'.$image); + break; + case 'gif': + $src_img = imagecreatefromgif($folder.'/'.$image); + break; + case 'bmp': + $src_img = imagecreatefrombmp($folder.'/'.$image); + break; + } + + $new_w = 100; + $new_h = 100; + + $old_x = imageSX($src_img); + $old_y = imageSY($src_img); + + if ($old_x > $old_y) { + $thumb_w = $new_w; + $thumb_h = $old_y * ($new_h/$old_x); + } + else if ($old_x < $old_y) { + $thumb_w = $old_x * ($new_w/$old_y); + $thumb_h = $new_h; + } + else if ($old_x == $old_y) { + $thumb_w = $new_w; + $thumb_h = $new_h; + } + + $dst_img = ImageCreateTrueColor($thumb_w, $thumb_h); + imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $thumb_w, $thumb_h, $old_x, $old_y); + + switch ($ext) + { + case 'png': + imagepg($dst_img, '.thumbs/'.$folder.'/'.$image); + break; + case 'jpg': + case 'jpeg': + imagejpeg($dst_img, '.thumbs/'.$folder.'/'.$image); + break; + case 'gif': + imagegif($dst_img, '.thumbs/'.$folder.'/'.$image); + break; + case 'bmp': + imagebmp($dst_img, '.thumbs/'.$folder.'/'.$image); + break; + } + + imagedestroy($dst_img); + imagedestroy($src_img); + } + } + + function array_to_xml(&$array, $tag_name = 'image', $headless = false) + { + error_reporting(E_ALL ^ E_NOTICE); + + // Include XML_Serializer + require_once 'XML/Serializer.php'; + + // An array of serializer options + $serializer_options = array ( + 'addDecl' => !$headless, + 'encoding' => 'ISO-8859-1', + 'indent' => ' ', + 'indentAttributes' => '_auto', + 'rootName' => 'layout', + 'defaultTagName' => $tag_name, + 'mode' => 'simplexml', + 'scalarAsAttributes' => true + + ); + + // Instantiate the serializer with the options + $Serializer = &new XML_Serializer($serializer_options); + + // Serialize the data structure + $status = $Serializer->serialize($array); + + // Check whether serialization worked + if (PEAR::isError($status)) { + die($status->getMessage()); + } + + // print_r($Serializer->options); + + // return the XML document + return $Serializer->getSerializedData(); + } + + function xml_to_xhtml($xml, $xsl_file, $params = array()) + { + $doc = new DOMDocument(); + $xsl = new XSLTProcessor(); + + $doc->load($xsl_file); + $xsl->importStyleSheet($doc); + + $doc->loadXML($xml); + + $xsl->setParameter('', $params); + + $html = $xsl->transformToXML($doc); + + return $html; + } +?> \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |