[Picfinity-commit] SF.net SVN: picfinity: [47] trunk/.themes/db
Status: Beta
Brought to you by:
espadav8
From: <esp...@us...> - 2007-08-18 20:34:16
|
Revision: 47 http://picfinity.svn.sourceforge.net/picfinity/?rev=47&view=rev Author: espadav8 Date: 2007-08-18 13:34:19 -0700 (Sat, 18 Aug 2007) Log Message: ----------- Move the files around for the new theme Added Paths: ----------- trunk/.themes/db/db.js trunk/.themes/db/db.xsl trunk/.themes/db/getcomments.php Removed Paths: ------------- trunk/.themes/db/ajax.css.bak trunk/.themes/db/ajax.js trunk/.themes/db/ajax.xsl Deleted: trunk/.themes/db/ajax.css.bak =================================================================== --- trunk/.themes/db/ajax.css.bak 2007-08-18 20:31:22 UTC (rev 46) +++ trunk/.themes/db/ajax.css.bak 2007-08-18 20:34:19 UTC (rev 47) @@ -1,117 +0,0 @@ -* -{ - 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 Deleted: trunk/.themes/db/ajax.js =================================================================== --- trunk/.themes/db/ajax.js 2007-08-18 20:31:22 UTC (rev 46) +++ trunk/.themes/db/ajax.js 2007-08-18 20:34:19 UTC (rev 47) @@ -1,673 +0,0 @@ -addEvent(window, 'load', importLayout, false); -addEvent(window, 'load', IE6navhover, false); - -var xmlDoc; - -function IE6navhover() -{ - if ((window.attachEvent) && (document.getElementById("breadcrumbtrail") != null)) - { - var sfEls = document.getElementById("breadcrumbtrail").getElementsByTagName("LI"); - for (var i=0; i<sfEls.length; i++) - { - sfEls[i].onmouseover = function() - { - this.className += " over"; - } - sfEls[i].onmouseout = function() - { - this.className = this.className.replace(new RegExp(" over\\b"), ""); - } - } - } -} - -function importLayout() -{ - if (window.XMLHttpRequest) - { - var xmlHttp = new XMLHttpRequest(); - xmlHttp.onreadystatechange = function() { - if (xmlHttp.readyState == 4) - { - xmlDoc = xmlHttp.responseXML; - } - } - xmlHttp.open("GET", "gallery.xml", true); - xmlHttp.send(null) - } - else if (document.implementation && document.implementation.createDocument) - { - xmlDoc = document.implementation.createDocument("", "layout", null); - xmlDoc.load("gallery.xml"); - } - else if (window.ActiveXObject) - { - xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); - xmlDoc.validateOnParse = false; - xmlDoc.resolveExternals = false; - xmlDoc.load("gallery.xml"); - } - else - { - alert('Your browser can\'t handle this script'); - return; - } -} - -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) - else if ((xmlDoc.getElementById) && (xmlDoc.getElementById(elementID) != null)) - { - return xmlDoc.getElementById(elementID); - } - - // 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") == elementID) - { - return node; - } - else - { - continue; - } - } - } - - // this is possibly the worse way, and it's still not supported by Safari - 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") == elementID) - { - return xmlDocFolders[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; -} - -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 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(); - - if(!element.hasChildNodes()) { - return result; - } - - for(var i = 0; i < element.childNodes.length; i++) - { - // 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) -{ - nodePath = (nodePath == undefined) ? '' : nodePath; - - if (element == xmlDoc.documentElement) - { - return '.' + nodePath; - } - else - { - nodePath = element.parentNode.getAttribute("name") + '/' + nodePath; - return getNodePath(element.parentNode, nodePath); - } -} - -function openFolder(elementID) -{ - var layoutNode = getLayoutNode(elementID); - var nodePath = getNodePath(layoutNode); - - var breadcrumbDiv = createBreadcrumbTrail(layoutNode); - - var newAlbumsDiv = document.createElement("div"); - newAlbumsDiv.setAttribute("id", "albums"); - - var backButton = document.createElement("div") - backButton.setAttribute("id", "backbutton"); - - var selectedDiv = document.createElement("div"); - selectedDiv.setAttribute("id", "selectedalbum"); - - var selectedAlbumFolders = getChildNodesByTagName(layoutNode, "folder"); - var selectedAlbumImages = getChildNodesByTagName(layoutNode, "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); - } - - newAlbumsDiv.appendChild(selectedDiv); - - document.getElementById("albums").parentNode.replaceChild(newAlbumsDiv, document.getElementById("albums")); - - IE6navhover() - return false; -} - -function checkFolderContents(element) -{ - if (element.hasChildNodes() == false) - { - return ".themes/ajax/empty.png"; - } - else - { - var nodePath = getNodePath(getLayoutNode(element.getAttribute("id"))); - 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 createImageThumbnailContainer(imageNode, optClass) -{ - var imageNodeID = imageNode.getAttribute("id"); - var nodePath = getNodePath(getLayoutNode(imageNodeID)); - - var classes = (optClass == undefined) ? "thumbnail" : "thumbnail " + optClass; - - var albumImageDiv = document.createElement("div"); - albumImageDiv.className = classes; - 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.className = "image"; - - var albumImage = document.createElement("img"); - var imageThumbPath = '.thumbs/' + nodePath + '/' + imageNode.getAttribute("file"); - albumImage.setAttribute("src", imageThumbPath); - imageAnchor.appendChild(albumImage); - - var imageNameSpan = document.createElement("span"); - imageNameSpan.className = "name"; - imageNameSpan.appendChild(document.createTextNode(imageNode.getAttribute("file"))); - - imageSpan.appendChild(imageAnchor) - albumImageDiv.appendChild(imageSpan); - albumImageDiv.appendChild(imageNameSpan); - - return albumImageDiv; -} - -function createSubFolderContainer(folderNode) -{ - var folderID = folderNode.getAttribute("id"); - var nodePath = getNodePath(getLayoutNode(folderID)); - - // create the main folder div - var subFolder = document.createElement("div"); - subFolder.className = "folder"; - 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 - folderAnchor.onclick = function() { openFolder(folderID); return false; }; - - // create a span for the image - var folderImageSpan = document.createElement("span"); - folderImageSpan.className = "image"; - - // create the image - var folderImage = document.createElement("img"); - var imagePath = checkFolderContents(folderNode); - folderImage.setAttribute("src", imagePath); - folderAnchor.appendChild(folderImage); - folderImageSpan.appendChild(folderAnchor); - - // create a span for the folder icon - var iconSpan = document.createElement("span"); - iconSpan.className = "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.className = "name"; - - // create the text - 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 - subFolder.appendChild(folderImageSpan); - subFolder.appendChild(iconSpan); - subFolder.appendChild(textSpan); - - return subFolder; -} - -function createExpandedImage(imageNode) -{ - var nodePath = getNodePath(getLayoutNode(imageNode.getAttribute("id"))); - - var expandedImageDiv = document.createElement("div"); - expandedImageDiv.setAttribute("id", "expandedimage"); - - var linkToDiv = document.createElement("div"); - linkToDiv.setAttribute("id", "linktospan"); - linkToDiv.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")); - linkToDiv.appendChild(linkToAnchor); - - var loadingDiv = document.createElement("div"); - loadingDiv.setAttribute("id", "loadingspan"); - loadingDiv.style.display = "block"; - loadingDiv.appendChild(document.createTextNode("Loading image")); - - var imageAnchor = document.createElement("a"); - imageAnchor.onclick = function() { closeImage(); return false }; - imageAnchor.href = "#"; - - var imageDiv = document.createElement("div"); - imageDiv.setAttribute("id", "expandedimagespan"); - imageDiv.style.display = "none"; - - var albumImage = document.createElement("img"); - var imageThumbPath = nodePath + '/' + imageNode.getAttribute("file"); - albumImage.setAttribute("src", imageThumbPath); - imageAnchor.appendChild(albumImage); - imageDiv.appendChild(imageAnchor); - - var imageNameDiv = document.createElement("div"); - imageNameDiv.className = "name"; - imageNameDiv.appendChild(document.createTextNode(imageNode.getAttribute("file"))); - - expandedImageDiv.appendChild(linkToDiv); - expandedImageDiv.appendChild(loadingDiv); - expandedImageDiv.appendChild(imageDiv); - expandedImageDiv.appendChild(imageNameDiv); - - var expandedImage = new Image(); - expandedImage.onload = function() - { - loadingDiv.style.display = "none"; - imageDiv.style.display = ""; - linkToDiv.style.display = ""; - }; - expandedImage.src = imageThumbPath; - - return expandedImageDiv; -} - -function createBreadcrumbTrail(element) -{ - var breadcrumbTrailDiv = document.createElement("div"); - breadcrumbTrailDiv.setAttribute("id", "breadcrumbtrail"); - - var nodePath = getNodePath(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.className = "trailentry"; - - var menuLi = document.createElement("li"); - menuLi.className = "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 dropMenuItem = createBreadcrumbItem(node, currentFolder); - dropMenu.appendChild(dropMenuItem); - } - - // this is for the current folder - if ((node.nodeName == "folder") && (node.getAttribute("name") == currentFolder)) - { - var dropMenuAnchor = document.createElement("a"); - dropMenuAnchor.href = "index.php?id=" + dropMenuItem.getAttribute("id"); - - var nameSpan = document.createElement("span"); - nameSpan.className = "name"; - nameSpan.appendChild(document.createTextNode(node.getAttribute("name"))); - - // create a span for the folder icon - var iconSpan = document.createElement("span"); - iconSpan.className = "icon"; - - // create the icon image - var iconImage = document.createElement("img"); - iconImage.setAttribute("src", ".themes/ajax/foldericon.png"); - iconSpan.appendChild(iconImage); - - dropMenuAnchor.appendChild(nameSpan); - dropMenuAnchor.appendChild(nameSpan); - - menuLi.insertBefore(dropMenuAnchor, menuLi.firstChild); - - breadcrumbEntry.appendChild(menuLi); - } - } - - return breadcrumbEntry; -} - -function createBreadcrumbItem(node, currentFolder) -{ - var dropMenuItem = document.createElement("li"); - dropMenuItem.setAttribute("id", node.getAttribute("id")); - - var dropMenuAnchor = document.createElement("a"); - dropMenuAnchor.href = "index.php?id=" + dropMenuItem.getAttribute("id"); - dropMenuAnchor.onclick = function() { openFolder(dropMenuItem.getAttribute("id")); return false; }; - - if (node.hasChildNodes()) - { - // create a span for the folder icon - var iconSpan = document.createElement("span"); - iconSpan.className = "icon"; - - // create the icon image - var iconImage = document.createElement("img"); - iconImage.setAttribute("src", ".themes/ajax/foldericon.png"); - iconSpan.appendChild(iconImage); - - dropMenuAnchor.appendChild(iconSpan); - } - else - { - dropMenuItem.setAttribute("class", "empty"); - - // create a span for the folder icon - var iconSpan = document.createElement("span"); - iconSpan.className = "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.className = "menuentry selected"; - } - else - { - dropMenuItem.className = "menuentry"; - } - - var nameSpan = document.createElement("span"); - nameSpan.className = "name"; - nameSpan.appendChild(document.createTextNode(node.getAttribute("name"))); - dropMenuAnchor.appendChild(nameSpan); - - dropMenuItem.appendChild(dropMenuAnchor); - return dropMenuItem; -} - -function selectLayoutNodeFromPath(path, node) -{ - node = (node == undefined) ? xmlDoc.documentElement : node; - - if(path == "./") - { - return xmlDoc.documentElement; - } - else if (path != '') - { - path = (path.indexOf("./") == 0) ? path.substring(2) : path; - var currentPath = path.split('/')[0]; - var nodes = getChildNodesByTagName(node, "folder"); - - for (var i = 0; i < nodes.length; i++) - { - if ((nodes[i].getAttribute("name") == currentPath)) - { - return selectLayoutNodeFromPath(path.replace(currentPath + '/', ''), nodes[i]); - } - else - { - continue; - } - } - } - else - { - return node; - } -} - -function showImage(imageID) -{ - var siblingNodes = getChildNodesByTagName(getLayoutNode(imageID).parentNode, "image"); - - for (var i = 0; i < siblingNodes.length; i++) - { - if (siblingNodes[i].getAttribute("id") == imageID) - { - 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 lastSelectedImage = getElementsByClassName("selected", "div", document); - - if (lastSelectedImage) - { - lastSelectedImage[0].className = "thumbnail"; - } - - document.getElementById(imageID).className += " selected"; -} - -function closeImage() -{ - document.getElementById("expandedimage").parentNode.removeChild(document.getElementById("expandedimage")); - - 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 Deleted: trunk/.themes/db/ajax.xsl =================================================================== --- trunk/.themes/db/ajax.xsl 2007-08-18 20:31:22 UTC (rev 46) +++ trunk/.themes/db/ajax.xsl 2007-08-18 20:34:19 UTC (rev 47) @@ -1,338 +0,0 @@ -<?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:param name="post_id" /> - <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> - <a href="index.php" onclick="reloadPage();return false;"> - <xsl:value-of select="$title" /> - </a> - </h1> - - <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" /> - - <div id="breadcrumbtrail"></div> - - <div id="albums"> - <xsl:apply-templates select="folder" /> - <xsl:apply-templates select="image" /> - </div> - </xsl:template> - - <xsl:template match="themes"> - <div id="themes"> - <form id="themeform" action="index.php" method="post"> - <fieldset> - <select name="theme" onchange="submit();"> - <option value="">Please choose a theme</option> - <xsl:apply-templates select="theme" /> - </select> - <button type="submit">Go</button> - </fieldset> - </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"> - <div> - <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"> - <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"> - <xsl:variable name="path"> - <xsl:call-template name="replaceCharsInString"> - <xsl:with-param name="stringIn"> - <xsl:text>.thumbs/</xsl:text><xsl:apply-templates select="ancestor::folder" mode="getpath" /><xsl:value-of select="concat(@name, '/', image[1]/@file)" /> - </xsl:with-param> - <xsl:with-param name="charsIn" select="' '"/> - <xsl:with-param name="charsOut" select="'%20'"/> - </xsl:call-template> - </xsl:variable> - <img alt="Sample Image"> - <xsl:attribute name="src"><xsl:value-of select="$path" /></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 alt="Image Folder"> - <xsl:attribute name="src"><xsl:value-of select="concat('.themes/', $themename, '/folder.png')" /></xsl:attribute> - </img> - </xsl:when> - <xsl:otherwise> - <img alt="Empty Folder"> - <xsl:attribute name="src"><xsl:value-of select="concat('.themes/', $themename, '/empty.png')" /></xsl:attribute> - </img> - </xsl:otherwise> - </xsl:choose> - </a> - </span> - <xsl:if test="count(folder) > 0 or count(image) > 0"> - <span class="icon"> - <img alt="Folder Icon"> - <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="selectedID">0</xsl:param> - <xsl:variable name="path"> - <xsl:call-template name="replaceCharsInString"> - <xsl:with-param name="stringIn"> - <xsl:text>.thumbs/</xsl:text><xsl:apply-templates select="ancestor::folder" mode="getpath" /><xsl:value-of select="@file" /> - </xsl:with-param> - <xsl:with-param name="charsIn" select="' '"/> - <xsl:with-param name="charsOut" select="'%20'"/> - </xsl:call-template> - </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="$path" /></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" /> - - <xsl:choose> - <!-- the passed in ID is an image --> - <xsl:when test="$folder = 0"> - <xsl:apply-templates select="//image[@id = $post_id]" mode="post" /> - </xsl:when> - - <!-- the passed in ID is an folder --> - <xsl:when test="$folder = 1"> - <xsl:apply-templates select="//folder[@id = $post_id]" mode="post" /> - </xsl:when> - </xsl:choose> - </xsl:template> - - <xsl:template match="folder" mode="post"> - <div id="breadcrumbtrail"> - <xsl:apply-templates select="self::*" mode="breadcrumbtrail" /> - </div> - <div id="albums"> - <div id="selectedalbum"> - <xsl:apply-templates select="folder"/> - <xsl:apply-templates select="image"/> - </div> - </div> - </xsl:template> - - <xsl:template match="folder" mode="breadcrumbtrail"> - <xsl:if test="parent::folder"> - <xsl:apply-templates select="parent::folder" mode="breadcrumbtrail" /> - </xsl:if> - - <xsl:variable name="currentName"><xsl:value-of select="@name" /></xsl:variable> - - <ul class="trailentry"> - <li class="currentfolder"> - <a> - <xsl:attribute name="onclick">openFolder('<xsl:value-of select="@id" />'); return false;</xsl:attribute> - <xsl:attribute name="href">index.php?id=<xsl:value-of select="@id" /></xsl:attribute> - <span class="icon"> - <img alt="Folder Icon"> - <xsl:attribute name="src"><xsl:value-of select="concat('.themes/', $themename, '/foldericon.png')" /></xsl:attribute> - </img> - </span> - <span class="name"><xsl:value-of select="@name" /></span> - </a> - <ul> - <xsl:for-each select="parent::*/folder"> - <li> - <xsl:choose> - <xsl:when test="$currentName = @name"> - <xsl:attribute name="class">menuentry selected</xsl:attribute> - </xsl:when> - <xsl:otherwise> - <xsl:attribute name="class">menuentry</xsl:attribute> - </xsl:otherwise> - </xsl:choose> - <a> - <xsl:attribute name="onclick">openFolder('<xsl:value-of select="@id" />'); return false;</xsl:attribute> - <xsl:attribute name="href">index.php?id=<xsl:value-of select="@id" /></xsl:attribute> - <span class="icon"> - <img src=".themes/ajax/foldericon.png" alt="Folder Icon" /> - </span> - <span class="name"><xsl:value-of select="@name" /></span> - </a> - </li> - </xsl:for-each> - </ul> - </li> - </ul> - </xsl:template> - - <xsl:template match="image" mode="post"> - <xsl:variable name="path"> - <xsl:call-template name="replaceCharsInString"> - <xsl:with-param name="stringIn"> - <xsl:text>./</xsl:text><xsl:apply-templates select="ancestor::folder" mode="getpath" /><xsl:value-of select="@file" /> - </xsl:with-param> - <xsl:with-param name="charsIn" select="' '"/> - <xsl:with-param name="charsOut" select="'%20'"/> - </xsl:call-template> - </xsl:variable> - - <div id="breadcrumbtrail"> - <xsl:apply-templates select="parent::folder" mode="breadcrumbtrail" /> - </div> - - <div id="albums"> - <div id="expandedimage"> - <div id="linktospan"> - <a> - <xsl:attribute name="href">index.php?id=<xsl:value-of select="@id" /></xsl:attribute> - <xsl:text>Link to this image</xsl:text> -<!-- - <img alt="Link to this image"> - <xsl:attribute name="src"><xsl:value-of select="concat('.themes/', $themename, '/link.png')" /></xsl:attribute> - </img> ---> - </a> - </div> - <div id="expandedimagespan"> - <a href="#" onclick="closeImage(); return false;"> - <img> - <xsl:attribute name="src"><xsl:value-of select="$path" /></xsl:attribute> - <xsl:attribute name="alt"><xsl:value-of select="@file" /></xsl:attribute> - </img> - </a> - </div> - <div class="name"><xsl:value-of select="@file" /></div> - </div> - - <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:template name="replaceCharsInString"> - <xsl:param name="stringIn"/> - <xsl:param name="charsIn"/> - <xsl:param name="charsOut"/> - <xsl:choose> - <xsl:when test="contains($stringIn,$charsIn)"> - <xsl:value-of select="concat(substring-before($stringIn,$charsIn),$charsOut)"/> - <xsl:call-template name="replaceCharsInString"> - <xsl:with-param name="stringIn" select="substring-after($stringIn,$charsIn)"/> - <xsl:with-param name="charsIn" select="$charsIn"/> - <xsl:with-param name="charsOut" select="$charsOut"/> - </xsl:call-template> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="$stringIn"/> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - -</xsl:stylesheet> Copied: trunk/.themes/db/db.js (from rev 45, trunk/.themes/db/ajax.js) =================================================================== --- trunk/.themes/db/db.js (rev 0) +++ trunk/.themes/db/db.js 2007-08-18 20:34:19 UTC (rev 47) @@ -0,0 +1,669 @@ +addEvent(window, 'load', importLayout, false); +addEvent(window, 'load', IE6navhover, false); + +var xmlDoc; + +function IE6navhover() +{ + if ((window.attachEvent) && (document.getElementById("breadcrumbtrail") != null)) + { + var sfEls = document.getElementById("breadcrumbtrail").getElementsByTagName("LI"); + for (var i=0; i<sfEls.length; i++) + { + sfEls[i].onmouseover = function() + { + this.className += " over"; + } + sfEls[i].onmouseout = function() + { + this.className = this.className.replace(new RegExp(" over\\b"), ""); + } + } + } +} + +function importLayout() +{ + if (window.XMLHttpRequest) + { + var xmlHttp = new XMLHttpRequest(); + xmlHttp.onreadystatechange = function() { + if (xmlHttp.readyState == 4) + { + xmlDoc = xmlHttp.responseXML; + } + } + xmlHttp.open("GET", "gallery.xml", true); + xmlHttp.send(null) + } + else if (document.implementation && document.implementation.createDocument) + { + xmlDoc = document.implementation.createDocument("", "layout", null); + xmlDoc.load("gallery.xml"); + } + else if (window.ActiveXObject) + { + xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); + xmlDoc.validateOnParse = false; + xmlDoc.resolveExternals = false; + xmlDoc.load("gallery.xml"); + } + else + { + alert('Your browser can\'t handle this script'); + return; + } +} + +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) + else if ((xmlDoc.getElementById) && (xmlDoc.getElementById(elementID) != null)) + { + return xmlDoc.getElementById(elementID); + } + + // 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") == elementID) + { + return node; + } + else + { + continue; + } + } + } + + // this is possibly the worse way, and it's still not supported by Safari + 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") == elementID) + { + return xmlDocFolders[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; +} + +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 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(); + + if(!element.hasChildNodes()) { + return result; + } + + for(var i = 0; i < element.childNodes.length; i++) + { + // 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) +{ + nodePath = (nodePath == undefined) ? '' : nodePath; + + if (element == xmlDoc.documentElement) + { + return '.' + nodePath; + } + else + { + nodePath = element.parentNode.getAttribute("name") + '/' + nodePath; + return getNodePath(element.parentNode, nodePath); + } +} + +function openFolder(elementID) +{ + var layoutNode = getLayoutNode(elementID); + var nodePath = getNodePath(layoutNode); + + var breadcrumbDiv = createBreadcrumbTrail(layoutNode); + + var newAlbumsDiv = document.createElement("div"); + newAlbumsDiv.setAttribute("id", "albums"); + + var backButton = document.createElement("div") + backButton.setAttribute("id", "backbutton"); + + var selectedDiv = document.createElement("div"); + selectedDiv.setAttribute("id", "selectedalbum"); + + var selectedAlbumFolders = getChildNodesByTagName(layoutNode, "folder"); + var selectedAlbumImages = getChildNodesByTagName(layoutNode, "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); + } + + newAlbumsDiv.appendChild(selectedDiv); + + document.getElementById("albums").parentNode.replaceChild(newAlbumsDiv, document.getElementById("albums")); + + IE6navhover() + return false; +} + +function checkFolderContents(element) +{ + if (element.hasChildNodes() == false) + { + return ".themes/ajax/empty.png"; + } + else + { + var nodePath = getNodePath(getLayoutNode(element.getAttribute("id"))); + 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 createImageThumbnailContainer(imageNode, optClass) +{ + var imageNodeID = imageNode.getAttribute("id"); + var nodePath = getNodePath(getLayoutNode(imageNodeID)); + + var classes = (optClass == undefined) ? "thumbnail" : "thumbnail " + optClass; + + var albumImageDiv = document.createElement("div"); + albumImageDiv.className = classes; + 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.className = "image"; + + var albumImage = document.createElement("img"); + var imageThumbPath = '.thumbs/' + nodePath + '/' + imageNode.getAttribute("file"); + albumImage.setAttribute("src", imageThumbPath); + imageAnchor.appendChild(albumImage); + + var imageNameSpan = document.createElement("span"); + imageNameSpan.className = "name"; + imageNameSpan.appendChild(document.createTextNode(imageNode.getAttribute("file"))); + + imageSpan.appendChild(imageAnchor) + albumImageDiv.appendChild(imageSpan); + albumImageDiv.appendChild(imageNameSpan); + + return albumImageDiv; +} + +function createSubFolderContainer(folderNode) +{ + var folderID = folderNode.getAttribute("id"); + var nodePath = getNodePath(getLayoutNode(folderID)); + + // create the main folder div + var subFolder = document.createElement("div"); + subFolder.className = "folder"; + 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 + folderAnchor.onclick = function() { openFolder(folderID); return false; }; + + // create a span for the image + var folderImageSpan = document.createElement("span"); + folderImageSpan.className = "image"; + + // create the image + var folderImage = document.createElement("img"); + var imagePath = checkFolderContents(folderNode); + folderImage.setAttribute("src", imagePath); + folderAnchor.appendChild(folderImage); + folderImageSpan.appendChild(folderAnchor); + + // create a span for the folder icon + var iconSpan = document.createElement("span"); + iconSpan.className = "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.className = "name"; + + // create the text + 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 + subFolder.appendChild(folderImageSpan); + subFolder.appendChild(iconSpan); + subFolder.appendChild(textSpan); + + return subFolder; +} + +function createExpandedImage(imageNode) +{ + var nodePath = getNodePath(getLayoutNode(imageNode.getAttribute("id"))); + + var expandedImageDiv = document.createElement("div"); + expandedImageDiv.setAttribute("id", "expandedimage"); + + var linkToDiv = document.createElement("div"); + linkToDiv.setAttribute("id", "linktospan"); + linkToDiv.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")); + linkToDiv.appendChild(linkToAnchor); + + var loadingDiv = document.createElement("div"); + loadingDiv.setAttribute("id", "loadingspan"); + loadingDiv.style.display = "block"; + loadingDiv.appendChild(document.createTextNode("Loading image")); + + var imageAnchor = document.createElement("a"); + imageAnchor.onclick = function() { closeImage(); return false }; + imageAnchor.href = "#"; + + var imageDiv = document.createElement("div"); + imageDiv.setAttribute("id", "expandedimagespan"); + imageDiv.style.display = "none"; + + var albumImage = document.createElement("img"); + var imageThumbPath = nodePath + '/' + imageNode.getAttribute("file"); + albumImage.setAttribute("src", imageThumbPath); + imageAnchor.appendChild(albumImage); + imageDiv.appendChild(imageAnchor); + + var imageNameDiv = document.createElement("div"); + imageNameDiv.className = "name"; + imageNameDiv.appendChild(document.createTextNode(imageNode.getAttribute("file"))); + + expandedImageDiv.appendChild(linkToDiv); + expandedImageDiv.appendChild(loadingDiv); + expandedImageDiv.appendChild(imageDiv); + expandedImageDiv.appendChild(imageNameDiv); + + var expandedImage = new Image(); + expandedImage.onload = function() + { + loadingDiv.style.display = "none"; + imageDiv.style.display = ""; + linkToDiv.style.display = ""; + }; + expandedImage.src = imageThumbPath; + + return expandedImageDiv; +} + +function createBreadcrumbTrail(element) +{ + var breadcrumbTrailDiv = document.createElement("div"); + breadcrumbTrailDiv.setAttribute("id", "breadcrumbtrail"); + + var nodePath = getNodePath(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.className = "trailentry"; + + var menuLi = document.createElement("li"); + menuLi.className = "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 dropMenuItem = createBreadcrumbItem(node, currentFolder); + dropMenu.appendChild(dropMenuItem); + } + + // this is for the current folder + if ((node.nodeName == "folder") && (node.getAttribute("name") == currentFolder)) + { + var dropMenuAnchor = document.createElement("a"); + dropMenuAnchor.href = "index.php?id=" + dropMenuItem.getAttribute("id"); + + var nameSpan = document.createElement("span"); + nameSpan.className = "name"; + nameSpan.appendChild(document.createTextNode(node.getAttribute("name"))); + + // create a span for the folder icon + var iconSpan = document.createElement("span"); + iconSpan.className = "icon"; + + // create the icon image + var iconImage = document.createElement("img"); + iconImage.setAttribute("src", ".themes/ajax/foldericon.png"); + iconSpan.appendChild(iconImage); + + dropMenuAnchor.appendChild(nameSpan); + dropMenuAnchor.appendChild(nameSpan); + + menuLi.insertBefore(dropMenuAnchor, menuLi.firstChild); + + breadcrumbEntry.appendChild(menuLi); + } + } + + return breadcrumbEntry; +} + +function createBreadcrumbItem(node, currentFolder) +{ + var dropMenuItem = document.createElement("li"); + dropMenuItem.setAttribute("id", node.getAttribute("id")); + + var dropMenuAnchor = document.createElement("a"); + dropMenuAnchor.href = "index.php?id=" + dropMenuItem.getAttribute("id"); + dropMenuAnchor.onclick = function() { openFolder(dropMenuItem.getAttribute("id")); return false; }; + + if (node.hasChildNodes()) + { + // create a span for the folder icon + var iconSpan = document.createElement("span"); + iconSpan.className = "icon"; + + // create the icon image + var iconImage = document.createElement("img"); + iconImage.setAttribute("src", ".themes/ajax/foldericon.png"); + iconSpan.appendChild(iconImage); + + dropMenuAnchor.appendChild(iconSpan); + } + else + { + dropMenuItem.setAttribute("class", "empty"); + + // create a span for the folder icon + var iconSpan = document.createElement("span"); + iconSpan.className = "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.className = "menuentry selected"; + } + else + { + dropMenuItem.className = "menuentry"; + } + + var nameSpan = document.createElement("span"); + nameSpan.className = "name"; + nameSpan.appendChild(document.createTextNode(node.getAttribute("name"))); + dropMenuAnchor.appendChild(nameSpan); + + dropMenuItem.appendChild(dropMenuAnchor); + return dropMenuItem; +} + +function selectLayoutNodeFromPath(path, node) +{ + node = (node == undefined) ? xmlDoc.documentElement : node; + + if(path == "./") + { + return xmlDoc.documentElement; + } + else if (path != '') + { + path = (path.indexOf("./") == 0) ? path.substring(2) : path; + var currentPath = path.split('/')[0]; + var nodes = getChildNodesByTagName(node, "folder"); + + for (var i = 0; i < nodes.length; i++) + { + if ((nodes[i].getAttribute("name") == currentPath)) + { + return selectLayoutNodeFromPath(path.replace(currentPath + '/', ''), nodes[i]); + } + else + { + continue; + } + } + } + else + { + return node; + } +} + +function showImage(imageID) +{ + var siblingNodes = getChildNodesByTagName(getLayoutNode(imageID).parentNode, "image"); + + var expandedImage = createExpandedImage(getLayoutNode(imageID)); + + // var imageComments = createComments(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 lastSelectedImage = getElementsByClassName("selected", "div", document); + + if (lastSelectedImage) + { + lastSelectedImage[0].className = "thumbnail"; + } + + document.getElementById(imageID).className += " selected"; +} + +function closeImage() +{ + document.getElementById("expandedimage").parentNode.removeChild(document.getElementById("expandedimage")); + + 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 Copied: trunk/.themes/db/db.xsl (from rev 45, trunk/.themes/db/ajax.xsl) =================================================================== --- trunk/.themes/db/db.xsl (rev 0) +++ trunk/.themes/db/db.xsl 2007-08-18 20:34:19 UTC (rev 47) @@ -0,0 +1,338 @@ +<?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:param name="post_id" /> + <xsl:param name="themename">db</xsl:param> + + <xsl:template match="/"> + <html> + <head> + <title><xsl:value-of select="$title" /></title> + + <link 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> + <a href="index.php" onclick="reloadPage();return false;"> + <xsl:value-of select="$title" /> + </a> + </h1> + + <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" /> + + <div id="breadcrumbtrail"></div> + + <div id="albums"> + <xsl:apply-templates select="folder" /> + <xsl:apply-templates select="image" /> + </div> + </xsl:template> + + <xsl:template match="themes"> + <div id="themes"> + <form id="themeform" action="index.php" method="post"> + <fieldset> + <select name="theme" onchange="submit();"> + <option value="">Please choose a theme</option> + <xsl:apply-templates select="theme" /> + </select> + <button type="submit">Go</button> + </fieldset> + </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"> + <div> + <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"> + <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"> + <xsl:variable name="path"> + <xsl:call-template name="replaceCharsInString"> + <xsl:with-param name="stringIn"> + <xsl:text>.thumbs/</xsl:text><xsl:apply-templates select="ancestor::folder" mode="getpath" /><xsl:value-of select="concat(@name, '/', image[1]/@file)" /> + </xsl:with-param> + <xsl:with-param name="charsIn" select="' '"/> + <xsl:with-param name="charsOut" select="'%20'"/> + </xsl:call-template> + </xsl:variable> + <img alt="Sample Image"> + <xsl:attribute name="src"><xsl:value-of select="$path" /></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 alt="Image Folder"> + <xsl:attribute name="src"><xsl:value-of select="concat('.themes/', $themename, '/folder.png')" /></xsl:attribute> + </img> + </xsl:when> + <xsl:otherwise> + <img alt="Empty Folder"> + <xsl:attribute name="src"><xsl:value-of select="concat('.themes/', $themename, '/empty.png')" /></xsl:attribute> + </img> + </xsl:otherwise> + </xsl:choose> + </a> + </span> + <xsl:if test="count(folder) > 0 or count(image) > 0"> + <span class="icon"> + <img alt="Folder Icon"> + <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="selectedID">0</xsl:param> + <xsl:variable name="path"> + <xsl:call-template name="replaceCharsInString"> + <xsl:with-param name="stringIn"> + <xsl:text>.thumbs/</xsl:text><xsl:apply-templates select="ancestor::folder" mode="getpath" /><xsl:value-of select="@file" /> + </xsl:with-param> + <xsl:with-param name="charsIn" select="' '"/> + <xsl:with-param name="charsOut" select="'%20'"/> + </xsl:call-template> + </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="$path" /></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" /> + + <xsl:choose> + <!-- the passed in ID is an image --> + <xsl:when test="$folder = 0"> + <xsl:apply-templates select="//image[@id = $post_id]" mode="post" /> + </xsl:when> + + <!-- the passed in ID is an folder --> + <xsl:when test="$folder = 1"> + <xsl:apply-templates select="//folder[@id = $post_id]" mode="post" /> + </xsl:when> + </xsl:choose> + </xsl:template> + + <xsl:template match="folder" mode="post"> + <div id="breadcrumbtrail"> + <xsl:apply-templates select="self::*" mode="breadcrumbtrail" /> + </div> + <div id="albums"> + <div id="selectedalbum"> + <xsl:apply-templates select="folder"/> + <xsl:apply-templates select="image"/> + </div> + </div> + </xsl:template> + + <xsl:template match="folder" mode="breadcrumbtrail"> + <xsl:if test="parent::folder"> + <xsl:apply-templates select="parent::folder" mode="breadcrumbtrail" /> + </xsl:if> + + <xsl:variable name="currentName"><xsl:value-of select="@name" ... [truncated message content] |