Thread: [Picfinity-commit] SF.net SVN: picfinity: [4] .themes
Status: Beta
Brought to you by:
espadav8
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. |