Author: fred
Date: 2007-07-20 10:28:55 +0000 (Fri, 20 Jul 2007)
New Revision: 14200

Modified:
   trunk/plugins/Echo/src/plugins/echo/Echo.java
   trunk/plugins/Echo/src/plugins/echo/Node.java
   trunk/plugins/Echo/src/plugins/echo/NodesManager.java
   trunk/plugins/Echo/src/plugins/echo/Page.java
   trunk/plugins/Echo/src/plugins/echo/Test.java
   trunk/plugins/Echo/src/resources/edit.css
   trunk/plugins/Echo/src/test/categories.xml
   trunk/plugins/Echo/src/xml/edit.xsl
Log:
Fix several bugs in the editor

Modified: trunk/plugins/Echo/src/plugins/echo/Echo.java
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/Echo.java       2007-07-19 22:15:10 UTC 
(rev 14199)
+++ trunk/plugins/Echo/src/plugins/echo/Echo.java       2007-07-20 10:28:55 UTC 
(rev 14200)
@@ -8,6 +8,7 @@
 import freenet.pluginmanager.PluginHTTPException;

 import freenet.pluginmanager.DownloadPluginHTTPException;
+import freenet.pluginmanager.RedirectPluginHTTPException;

 import freenet.support.api.HTTPRequest;
 import freenet.support.HTMLNode;
@@ -35,14 +36,18 @@


 public class Echo implements FredPlugin, FredPluginHTTP, 
FredPluginHTTPAdvanced, FredPluginThreadless {
+                       
+       public static final File BASE_DIR = new File("plugins/Echo/");
+       public static final File NODES_DIR = new File(BASE_DIR.getPath() + 
File.separator + "nodes");
+       public static final int NODE_ID_LENGTH = 4;
+       public static final int CATEGORY_ID_LENGTH = 3;

        private static final int MAX_TITLE_LENGTH = 200;
        private static final int MAX_BODY_LENGTH = 100000;
-       private static final int MAX_ID_LENGTH = 4;
+       private static final int MAX_ID_LENGTH = Math.max(NODE_ID_LENGTH, 
CATEGORY_ID_LENGTH);
+       private static final int MAX_OBJECT_LENGTH = 8;
+       private static final int MAX_CATEGORY_NAME_LENGTH = 100;

-       private static final String PATH_PREFIX = "plugins/Echo/";
-       private static final File NODES_DIR = new File(PATH_PREFIX + "nodes");
-       
        private PluginRespirator respirator;
        private Builder parser;
        private XSLTransform transform;
@@ -55,22 +60,24 @@
                try {
                        // suxx
                        NODES_DIR.mkdirs();
-                       
+                       System.err.println("Bleh");
                        parser = new Builder();
 //                     Document styleSheet = 
parser.build(getClass().getResourceAsStream("/xml/edit.xsl"));
                        Document styleSheet = 
parser.build("/home/fred/prog/soc/trunk/plugins/Echo/src/xml/edit.xsl");
                        transform = new XSLTransform(styleSheet);
                        transform.setParameter("contextprefix", 
NODES_DIR.getAbsolutePath() + "/");

-                       nodesManager = new NodesManager(NODES_DIR);
-                       
-               } catch (IOException ioe) {                                     
                        //
-                       throw new PluginHTTPException("Cannot open the style 
sheet", "");               //
-               } catch (ParsingException pe) {                                 
                        //  Useless ?
-                       throw new PluginHTTPException("Cannot parse the style 
sheet", "");              //
-               } catch (XSLException xe) {                                     
                        //
-                       throw new PluginHTTPException("Cannot build the XSL 
transformer", "");          //
+                       nodesManager = new NodesManager(BASE_DIR);
+               } catch (Exception e) {
+                       e.printStackTrace(System.err);
                }
+//             } catch (IOException ioe) {                                     
                        //
+//                     throw new PluginHTTPException("Cannot open the style 
sheet", "");               //
+//             } catch (ParsingException pe) {                                 
                        //  Useless ?
+//                     throw new PluginHTTPException("Cannot parse the style 
sheet", "");              //
+//             } catch (XSLException xe) {                                     
                        //
+//                     throw new PluginHTTPException("Cannot build the XSL 
transformer", "");          //
+//             }

        }

@@ -85,13 +92,22 @@

        private String transform(Page page) {
                try {
+                       
+//                     return 
transform.transform(page.getDoc()).get(0).toXML();
+                       
+                       /*
+                               Nice but input white space are not respected
+                       */
                        ByteArrayOutputStream baos = new 
ByteArrayOutputStream();
                        Serializer serializer = new Serializer(baos);
                        serializer.setIndent(4);
                        serializer.setMaxLength(128);
                        serializer.write(new Document((Element) 
transform.transform(page.getDoc()).get(0)));
-
                        return baos.toString();
+                       
+                       
+                       
+                       
                } catch (Exception e) {
                        return e.getMessage();
                }
@@ -99,9 +115,15 @@

        public String handleHTTPGet(HTTPRequest request) throws 
PluginHTTPException {

+               
+               if ("/plugins/plugins.echo.Echo".equals(request.getPath()))     
// FIXME
+                       throw new RedirectPluginHTTPException("", 
"/plugins/plugins.echo.Echo", "/plugins/plugins.echo.Echo/");
+                       
+               
                String fileName = (new File(request.getPath())).getName();
                String nodeId = request.getParam("node");
-                               
+               String catId = request.getParam("category");
+               
                if ("edit.css".equals(fileName) || 
"echo-logo-small-0.1.png".equals(fileName)) {

                        try {
@@ -120,14 +142,11 @@
                                return ioe.getMessage();
                        }

-               } else if ("new".equals(fileName) || ("edit".equals(fileName) 
&& ! "".equals(nodeId))) {
+               } else if ("newPost".equals(fileName) || 
"newPage".equals(fileName) || ("edit".equals(fileName) && ! "".equals(nodeId))) 
{

                        page = new Page();
+                       page.appendData(getFormPassword());

-                       Element formPassword = new Element("formpassword");
-                       formPassword.addAttribute(new Attribute("value", 
respirator.getNode().clientCore.formPassword));
-                       page.appendData(formPassword);
-                       
                        if("edit".equals(fileName)) {

                                page.setTitle("Edit");
@@ -136,9 +155,11 @@
                                        node = nodesManager.getNodeById(nodeId);
                                        if(node == null)
                                                page.appendError("The node " + 
nodeId + "does not exist");
-                                       else
+                                       else {
                                                page.appendData(node.getRoot());
-
+                                               // DEBUG
+                                               
System.err.println("node.getRoot() : '" + node.getRoot().toXML() +"'");
+                                       }
                                } catch (IOException ioe) {
                                        page.appendError(ioe.getMessage());
                                } catch (ParsingException pe) {
@@ -146,44 +167,80 @@
                                }

                        } else {
-                               page.setTitle("New node");
-                               node = nodesManager.newNode();
+                               page.setTitle("New " + fileName.substring(3,7));
+                               node = new Node(nodesManager.getFreeNodeId(),
+                                               "newPost".equals(fileName) ? 
Node.NodeType.POST_NODE : Node.NodeType.STATIC_PAGE_NODE);
                                page.appendData(node.getRoot());
                        }
+                       
+               } else if ("renameCategory".equals(fileName) &&  ! 
"".equals(catId)) {

-               } else if ("del".equals(fileName) && ! "".equals(nodeId)) {
+                       page = new Page();
+                       page.setTitle("Rename");
+                       Element rename = new Element("rename");
+                       
+                       Element category = new Element("category");
+                       category.addAttribute(new Attribute("id", catId));
+                       category.addAttribute(new Attribute("name", 
nodesManager.getCategoryNameById(catId)));
+                       
+                       rename.appendChild(category);
+                       page.appendData(rename);
+                       page.appendData(getFormPassword());
+                       
+               } else if ("del".equals(fileName) && (! "".equals(nodeId) || ! 
"".equals(catId))) {

                        page = new Page();
                        page.setTitle("Delete");

+                       Element object;
+                       if(!"".equals(nodeId)) {
+                               object = new Element("node");
+                               object.addAttribute(new Attribute("id", 
nodeId));
+                       } else {
+                               object = new Element("category");
+                               object.addAttribute(new Attribute("id", catId));
+                       }
+                       
                        Element del = new Element("delete");
-                       del.addAttribute(new Attribute("id", nodeId));
+                       del.appendChild(object);
                        page.appendData(del);
+                       page.appendData(getFormPassword());
+
+               } else if ("write".equals(fileName) || 
"manage".equals(fileName)) {

-                       Element formPassword = new Element("formpassword");
-                       formPassword.addAttribute(new Attribute("value", 
respirator.getNode().clientCore.formPassword));
-                       page.appendData(formPassword);
-               } else if ("generate".equals(fileName)) {
+                       page = new Page(new Element(fileName));

-                       page = new Page();
-                       page.setTitle("Generated");
+               } else if ("publish".equals(fileName)) {

+                       Element pub = new Element("publish");
+                       page = new Page(pub);
+                       
                        try {
                                Test test = new Test();
                                test.generate();

-                               Element gen = new Element("generated");
-                               gen.addAttribute(new Attribute("outputdir",(new 
File(PATH_PREFIX + "out/")).getAbsolutePath() + "/"));
-                               page.appendData(gen);
+                               pub.addAttribute(new Attribute("outputdir",(new 
File(BASE_DIR.getPath() + File.separator + "out")).getAbsolutePath() + "/"));

                        } catch (Exception e) {
                                page.appendError(e.getMessage());
                        }

+               } else if ("nodes".equals(fileName)) {
+                       
+                       setNodesPage();
+                       
+               } else if ("categories".equals(fileName)) {
+
+                       setCategoriesPage();
+                       
                } else {        
+                       
                        setDefaultPage();
+                       
                }
-       
+               
+               // DEBUG
+//             System.out.println("Page : '" + page.getDoc().toXML() + "'");
                return transform(page);

        }
@@ -194,25 +251,59 @@

        public String handleHTTPPost(HTTPRequest request) throws 
PluginHTTPException {
                try {
-                       String passwd = request.getPartAsString("formPassword", 
32);
-                       if((passwd == null) || 
!passwd.equals(respirator.getNode().clientCore.formPassword))
-                               return "Wrong Password !!";
-
-                       page = new Page();
+                       String passwd = request.getPartAsString("formPassword", 
32);                            //
+                       if((passwd == null) || 
!passwd.equals(respirator.getNode().clientCore.formPassword))    // FIXME : 
useless ?
+                               return "Wrong Password !!";                     
                                //

-                       if(request.isPartSet("confirmdelete") || 
request.isPartSet("cancel")) {
-
-                               setDefaultPage();
+                       if(request.isPartSet("confirmdelete") || 
request.isPartSet("cancel")) { // TODO

-                               if(request.isPartSet("confirmdelete")) {
-                                       String nodeId = 
request.getPartAsString("node-id", MAX_ID_LENGTH);
-
-                                       if(nodesManager.nodeExists(nodeId))
-                                               nodesManager.deleteNode(nodeId);
+                               String object = 
request.getPartAsString("object", MAX_OBJECT_LENGTH);
+                               
+                               if(request.isPartSet("cancel")) {
+                                       if("node".equals(object))
+                                               setNodesPage();
                                        else
-                                               page.appendError("The node " + 
nodeId + "does not exist");
+                                               setCategoriesPage();
+                               }else {
+                                       
+                                       String id = 
request.getPartAsString("id", MAX_ID_LENGTH);
+                                       
+                                       if("node".equals(object)) {
+                                               
+                                               if(nodesManager.nodeExists(id)) 
{
+                                                       
nodesManager.deleteNode(id);
+                                                       setNodesPage();
+                                               } else {
+                                                       setNodesPage();
+                                                       page.appendError("The 
node " + id + "does not exist");
+                                               }
+                                               
+                                       } else {
+                                               
+                                               setCategoriesPage();
+                                               
if(nodesManager.categoryExists(id)) {
+                                                       
nodesManager.deleteCategory(id);
+                                                       
nodesManager.writeCategories();
+                                               } else
+                                                       page.appendError("The 
category " + id + "does not exist");
+                                       }
                                }
+                       } else if (request.isPartSet("category-name")) {

+                               String name = 
request.getPartAsString("category-name", MAX_CATEGORY_NAME_LENGTH).trim();
+                               String catId = 
request.getPartAsString("category-id", CATEGORY_ID_LENGTH);
+                               
+                               if(! "".equals(name)) {
+                                       if(! nodesManager.renameCategory(catId, 
name))
+                                               nodesManager.newCategory(name);
+                                       
+                                       nodesManager.writeCategories();
+                                       
+                                       setCategoriesPage();
+                                       
+                               } else {
+                                       page.appendError("Fied \"name\" is 
empty");
+                               }
                        } else {

                                String title = request.getPartAsString("title", 
MAX_TITLE_LENGTH).trim();
@@ -228,13 +319,12 @@
                                node.setBody(body);

                                if(page.countErrors() == 0) {
-                                       page = new Page();
-                                       page.setTitle("My nodes");

+                                       setNodesPage();
+                                       
                                        try {

                                                nodesManager.writeNode(node);
-                                               
page.appendData(nodesManager.getXMLNodesList());

                                        } catch (FileNotFoundException fnfe) {
                                                page.appendError("fnfe" + 
fnfe.getMessage());
@@ -246,10 +336,7 @@
                                } else {

                                        page.setTitle("Edit");
-                                       
-                                       Element formPassword = new 
Element("formpassword");
-                                       formPassword.addAttribute(new 
Attribute("value", respirator.getNode().clientCore.formPassword));
-                                       page.appendData(formPassword);
+                                       page.appendData(getFormPassword());
                                        page.appendData(node.getRoot());
                                }
                        }
@@ -261,11 +348,29 @@

        }

-
        private void setDefaultPage() {
+       
                page = new Page();
+       
+       }
+
+       private void setNodesPage() {
+               page = new Page();
                page.setTitle("My nodes");
                page.appendData(nodesManager.getXMLNodesList());
        }
+       
+       private void setCategoriesPage() {
+               page = new Page(new Element("categories"));
+               page.appendData(getFormPassword());
+       }

+       private Element getFormPassword() {
+               
+               Element formPassword = new Element("formpassword");
+               formPassword.addAttribute(new Attribute("value", 
respirator.getNode().clientCore.formPassword));
+
+               return formPassword;
+       }
+
 }
\ No newline at end of file

Modified: trunk/plugins/Echo/src/plugins/echo/Node.java
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/Node.java       2007-07-19 22:15:10 UTC 
(rev 14199)
+++ trunk/plugins/Echo/src/plugins/echo/Node.java       2007-07-20 10:28:55 UTC 
(rev 14200)
@@ -13,23 +13,37 @@

 public class Node {

+       public enum NodeType { POST_NODE, STATIC_PAGE_NODE };
+       
        private String id;
        private Document doc = null;
        private Element nodeElement = null;
-       private Element createdElement = null;
        private Element modifiedElement = null;
        private Element categoriesElement = null;
        private Element titleElement = null;
        private Element contentElement = null;

-       public Node (String nodeId) {
+       public Node (String nodeId, NodeType nodeType) {

+               String type;
+               switch(nodeType) {
+                       case POST_NODE :
+                               type = "post";
+                               break;
+                       case STATIC_PAGE_NODE :
+                               type = "page";
+                               break;
+                       default :
+                               throw new IllegalArgumentException();
+               }
+               
                this.id = nodeId;

                nodeElement = new Element("node");
                nodeElement.addAttribute(new Attribute("id", id));
-
-               createdElement = new Element("created");
+               nodeElement.addAttribute(new Attribute("type", type));
+               
+               Element createdElement = new Element("created");
                createdElement.appendChild(dateToString(new Date()));
                nodeElement.appendChild(createdElement);

@@ -55,7 +69,7 @@

        }

-       private String dateToString(Date date) {
+       public static String dateToString(Date date) {

                Calendar calendar = Calendar.getInstance();
                calendar.setTime(date);
@@ -137,16 +151,6 @@
                return id;
        }

-       // FIXME: delete
-       public void write(OutputStream out) throws IOException{
-
-               Serializer serializer = new Serializer(out);
-               serializer.setIndent(4);
-               serializer.setMaxLength(128);
-
-               serializer.write(doc);
-       }
-       
        protected Document getDoc() {
                return doc;
        }

Modified: trunk/plugins/Echo/src/plugins/echo/NodesManager.java
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/NodesManager.java       2007-07-19 
22:15:10 UTC (rev 14199)
+++ trunk/plugins/Echo/src/plugins/echo/NodesManager.java       2007-07-20 
10:28:55 UTC (rev 14200)
@@ -14,33 +14,42 @@
 import java.io.IOException;
 import java.io.FileNotFoundException;

+// TODO
+// * nodesDirectory -> ..dir
+// * Exceptions !!

 public class NodesManager {

        private Builder parser;
+       private File baseDir;
        private File nodesDir;
+       private File categoriesFile;
        private HashMap<String, File> nodes;
        private HashMap<String, String> categories;


-       public NodesManager(File nodesDirectory) throws IOException, 
ParsingException{
+       public NodesManager(File baseDirectory) throws IOException, 
ParsingException{

-               nodesDir = nodesDirectory;
+               baseDir = baseDirectory;
+               nodesDir = new File(baseDir.getPath() + File.separator + 
"nodes");
+               categoriesFile = new File(baseDir.getPath() + File.separator + 
"categories.xml");
+                               
                nodes = new HashMap<String, File> ();
                parser = new Builder();

-               File[] files = nodesDirectory.listFiles();
+               File[] files = nodesDir.listFiles();
                for(File f : files) {
                        if(f.getName().matches("[0-9]{4}.xml"))
                                nodes.put(f.getName().substring(0,4), f);
                }

                categories = new HashMap<String, String> ();
-               Document categoriesDoc = 
parser.build(nodesDirectory.getParent() + File.separator + "categories.xml");
+               Document categoriesDoc = parser.build(categoriesFile);
                nu.xom.Nodes cats = categoriesDoc.query("//category");
                for(int i=0; i < cats.size(); i++) {
                        categories.put(((Element) 
cats.get(i)).getAttribute("id").getValue() , ((Element) 
cats.get(i)).getValue());
                }
+
        }

        public Node getNodeById(String nodeId) throws IOException, 
ParsingException {
@@ -53,8 +62,8 @@

        }

-       // TODO 
-       public Node newNode() {
+       // TODO + use Echo.
+       public String getFreeNodeId() {

                String id = "";
                for(int i=1; i < 10000; i++) {
@@ -62,12 +71,11 @@
                        while(id.length() < 4)
                                id = "0" + id;

-                       if(!nodes.containsKey(id))
-                               break;
+                       if(! nodeExists(id))
+                               return id;
                }
-               
-               return new Node(id); 

+               return "9999";  // Suxx
        }


@@ -76,7 +84,9 @@
                return nodes.containsKey(nodeId);

        }
+

+       
        public void deleteNode(String nodeId) throws IOException {

                File file = nodes.get(nodeId);
@@ -127,6 +137,23 @@
                return nodesElement;
        }

+       /**
+       *       Tests whether the category denoted by this id exists.
+       *       @param id The id of the category
+       *       @return true if the category exists; false otherwise
+       */
+       public boolean categoryExists(String id) {
+
+               return categories.containsKey(id);
+               
+       }
+       
+       public String getCategoryNameById(String id) {
+               
+               return categories.get(id);
+       
+       }
+       
        public void newCategory(String name) {

                String id = "";
@@ -146,7 +173,7 @@
        *       Rename a category
        *       @param id The id of the category
        *       @param newName The new name to set
-       *       @return true if the category was successfully , false if the 
category 'id' does not exists.
+       *       @return true if the category was successfully; false if the 
category 'id' does not exists.
        *
        */
        public boolean renameCategory(String id, String newName) {
@@ -169,12 +196,32 @@
                for(String i : ids) {
                        Node node = getNodeById(i);
                        nu.xom.Nodes c = 
node.getDoc().query("/node/categories/category[@id = '" + id + "']");
-                       if(c.size() != 0)
+                       if(c.size() != 0) {
                                c.get(0).detach();
+                               writeNode(node);
+                       }
                }

                categories.remove(id);
-               
                return true;
        }
+
+       // FIXME : crappy
+       public void writeCategories() throws IOException {
+               
+                       Element cats = new Element("categories");
+                       for(String c : categories.keySet()) {
+                               Element category = new Element("category");
+                               category.addAttribute(new Attribute("id", c));
+                               category.appendChild(categories.get(c));
+                               cats.appendChild(category);
+                       }
+                       
+                       Serializer serializer = new Serializer(new 
FileOutputStream(categoriesFile));
+                       serializer.setIndent(4);
+                       serializer.setMaxLength(128);
+                       serializer.write(new Document(cats));
+                       System.err.println("Manager.categories.size : " + 
categories.size());
+               
+       }
 }

Modified: trunk/plugins/Echo/src/plugins/echo/Page.java
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/Page.java       2007-07-19 22:15:10 UTC 
(rev 14199)
+++ trunk/plugins/Echo/src/plugins/echo/Page.java       2007-07-20 10:28:55 UTC 
(rev 14200)
@@ -18,6 +18,14 @@
                errors = new Vector<String> ();
        }       

+       public Page(Element content) {
+               data = new nu.xom.Nodes();
+               errors = new Vector<String> ();
+               this.setTitle(content.getLocalName()); // TODO : upperFirst ?
+               this.appendData(content);
+               
+       } 
+       
        public void setTitle(String title) {
                this.title = title;
        }
@@ -53,9 +61,10 @@
                }

                Element dataElement = new Element("data");
-               for(int i=0; i < data.size(); i++)
+               for(int i=0; i < data.size(); i++) {
+                       data.get(i).detach();
                        dataElement.appendChild(data.get(i));
-               
+               }
                page.appendChild(dataElement);

                return new Document(page);

Modified: trunk/plugins/Echo/src/plugins/echo/Test.java
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/Test.java       2007-07-19 22:15:10 UTC 
(rev 14199)
+++ trunk/plugins/Echo/src/plugins/echo/Test.java       2007-07-20 10:28:55 UTC 
(rev 14200)
@@ -6,22 +6,19 @@
 import java.io.*;

 public class Test{
-
-       private static final String PATH_PREFIX = "plugins/Echo/";

        public void generate() throws Exception{

-               File nodeDir = new File(PATH_PREFIX + "nodes" + File.separator);
-               File outDir = new File(PATH_PREFIX + "out" + File.separator);
+               File outDir = new File(Echo.BASE_DIR.getPath() +  
File.separator + "out");
                outDir.mkdirs();

-               NodesManager nodesManager = new NodesManager(nodeDir);
+               NodesManager nodesManager = new NodesManager(Echo.BASE_DIR);

                Builder parser = new Builder();
                Document styleSheet = 
parser.build(getClass().getResourceAsStream("/xml/test.xsl"));
 //             Document styleSheet = 
parser.build("/home/fred/prog/soc/trunk/plugins/Echo/src/xml/test.xsl");
                XSLTransform transform = new XSLTransform(styleSheet);
-               transform.setParameter("contextprefix", (new 
File(PATH_PREFIX)).getAbsolutePath() + "/");
+               transform.setParameter("contextprefix", 
Echo.BASE_DIR.getAbsolutePath() + "/");

                Serializer serializer = new Serializer(System.out);
                serializer.setIndent(4);

Modified: trunk/plugins/Echo/src/resources/edit.css
===================================================================
--- trunk/plugins/Echo/src/resources/edit.css   2007-07-19 22:15:10 UTC (rev 
14199)
+++ trunk/plugins/Echo/src/resources/edit.css   2007-07-20 10:28:55 UTC (rev 
14200)
@@ -96,6 +96,10 @@
        margin-bottom:0px;
 }

+label.inline {
+       display:inline;
+}
+
 input {
        display:block;
        margin-bottom:5px;

Modified: trunk/plugins/Echo/src/test/categories.xml
===================================================================
--- trunk/plugins/Echo/src/test/categories.xml  2007-07-19 22:15:10 UTC (rev 
14199)
+++ trunk/plugins/Echo/src/test/categories.xml  2007-07-20 10:28:55 UTC (rev 
14200)
@@ -1,5 +1,5 @@
 <categories>
-       <category id="001">Freenet"</category>
+       <category id="001">Freenet</category>
        <category id="002">Linux</category>
        <category id="003">My life</category>
 </categories>

Modified: trunk/plugins/Echo/src/xml/edit.xsl
===================================================================
--- trunk/plugins/Echo/src/xml/edit.xsl 2007-07-19 22:15:10 UTC (rev 14199)
+++ trunk/plugins/Echo/src/xml/edit.xsl 2007-07-20 10:28:55 UTC (rev 14200)
@@ -30,10 +30,9 @@

                                        <div id="left">
                                                <ul id="menu">
-                                                       <li><a href="./new">New 
node</a></li>
-                                                       <li><a 
href="./nodes">My nodes</a></li>
-                                                       <li><a 
href="./categories">Categories</a></li>
-                                                       <li><a 
href="./generate">Generate</a></li>
+                                                       <li><a 
href="write">Write</a></li>
+                                                       <li><a 
href="manage">Manage</a></li>
+                                                       <li><a 
href="publish">Publish</a></li>
                                                </ul>
                                        </div>

@@ -52,13 +51,78 @@
        <xsl:template match="data">
                <!--     otherwise nodes list ? (document(..))          -->
                <xsl:choose>
-                       <xsl:when test="./nodes">
+                       <xsl:when test="write">
+                               <dl>
+                                       <dt><a href="newPost">Blog post</a></dt>
+                                       <dd>Create a new post</dd>
+                                       
+                                       <dt><a href="newPage">Static 
page</a></dt>
+                                       <dd>Create a new static page.</dd>
+                               </dl>
+                       </xsl:when>
+                       
+                       <xsl:when test="manage">
+                               <dl>
+                                       <!-- Suxx ? -->
+                                       <dt><a href="nodes">My nodes</a></dt>
+                                       <dd>A list of your nodes</dd>
+
+                                       <dt><a 
href="categories">Categories</a></dt>
+                                       <dd>Categorize your posts</dd>
+                                       
+                               </dl>
+                       </xsl:when>
+
+                       <xsl:when test="categories">
+                               <xsl:if 
test="count(document(concat($contextprefix, '../categories.xml'))//category) > 
0">
+                               <table>
+                                       <tr>
+                                               <th>Name</th>
+                                               <th colspan="2">Action</th>
+                                       </tr>
+                                       
+                                       <xsl:for-each 
select="document(concat($contextprefix, '../categories.xml'))//category">
+                                       <xsl:sort select="text()" />
+                                       <tr>
+                                               <xsl:if test="(position() mod 
2) = 0">
+                                                       <xsl:attribute 
name="class">alternate</xsl:attribute>
+                                               </xsl:if>
+                                               
+                                               <td><xsl:value-of 
select="text()" /></td>
+                                               <td><a 
href="renameCategory?category={@id}">Rename</a></td>
+                                               <td><a 
href="del?category={@id}">Delete</a></td>
+                                       </tr>   
+                                       </xsl:for-each>
+                               </table>
+                               </xsl:if>
+
+                               <form name="newCategory" method="POST" 
action="">
+                                       <label for="category-name" 
class="inline">New category</label>
+                                       <input type="text" id="category-name" 
name="category-sname" class="inline" />
+                                       <input type="hidden" 
name="formPassword" value="{formpassword/@value}" class="inline" />
+                                       <input type="submit" value="Create" 
class="inline" />
+                               </form>
+                               
+                       </xsl:when>
+                       <xsl:when test="rename">
+                               <form name="newCategory" method="POST" 
action="">
+                                       <label for="category-name" 
class="inline">Name</label>
+                                       <input type="text" id="category-name" 
name="category-name" value="{rename/category/@name}" class="inline" />
+                                       <input type="hidden" name="category-id" 
value="{rename/category/@id}" class="inline" />
+                                       <input type="hidden" 
name="formPassword" value="{formpassword/@value}" class="inline" />
+                                       <input type="submit" class="inline" />
+                               </form>
+                               
+                       </xsl:when>
+                       <xsl:when test="nodes">
                                <xsl:choose>
                                <xsl:when test="count(./nodes/node) > 0">
                                <table>
                                <tr>
                                        <th>Id</th>
+                                       <th>Date</th>
                                        <th>Title</th>
+                                       <th>Type</th>
                                        <th colspan="2">Action</th>
                                </tr>
                                <xsl:for-each select="nodes/node">
@@ -69,11 +133,11 @@
                                        </xsl:if>

                                        <td><xsl:value-of select="@id" /></td>
-                                       <td>
-                                       <xsl:value-of 
select="document(concat($contextprefix, @id, '.xml'))/node/title/text()" />
-                                       </td>
-                                       <td><a 
href="./edit?node={@id}">Edit</a></td>
-                                       <td><a 
href="./del?node={@id}">Delete</a></td>
+                                       <td><xsl:value-of 
select="document(concat($contextprefix, @id, '.xml'))/node/modified" /></td>
+                                       <td><xsl:value-of 
select="document(concat($contextprefix, @id, '.xml'))/node/title" /></td>
+                                       <td><xsl:value-of 
select="document(concat($contextprefix, @id, '.xml'))/node/@type" /></td>
+                                       <td><a 
href="edit?node={@id}">Edit</a></td>
+                                       <td><a 
href="del?node={@id}">Delete</a></td>
                                </tr>
                                </xsl:for-each>
                                </table>
@@ -83,6 +147,7 @@
                                </xsl:otherwise>
                                </xsl:choose>
                        </xsl:when>
+                       
                        <xsl:when test="./node">
                        <form name="edit" method="POST" action="">
                                <label for="edit-title">Title</label>
@@ -104,14 +169,14 @@
                                <fieldset>
                                        <legend>Categories</legend>
                                        <xsl:for-each 
select="document(concat($contextprefix, 
'../categories.xml'))/categories/category">
-<!--                                   <input type="checkbox" 
id="category-{@id}" name="category-{@id}"> -->
+                                       <input type="checkbox" 
id="category-{@id}" name="category-{@id}" class="inline">
 <!--                                   <xsl:for-each 
select="node/categories/category[@id = '001']"> -->
 <!--<xsl:if test="count(node/categories/category[@id='001']) > 0">
                                                <xsl:attribute 
name="checked">checked</xsl:attribute>
                                        </xsl:if>-->
-<!--                                   </input> -->
-                                       <xsl:value-of 
select="node/categories/category[@id = '001']/@id" />
-<!--                                   <label 
for="category-{@id}"><xsl:value-of select="@name" /></label> -->
+                                       </input>
+<!--                                   <xsl:value-of 
select="node/categories/category[@id = '001']/@id" /> -->
+                                       <label for="category-{@id}" 
class="inline"><xsl:value-of select="text()" /></label>
                                        </xsl:for-each>
                                </fieldset>
                                </xsl:if>
@@ -119,18 +184,30 @@
                                <input type="submit" />
                        </form>
                        </xsl:when>
+                       
                        <xsl:when test="./delete">
-                       Are you sure you want to delete the node <xsl:value-of 
select="./delete/@id" /> ?
-                       <form name="del" method="POST" action="">
-                               <input type="hidden" name="node-id" 
value="{delete/@id}" />
-                               <input type="hidden" name="formPassword" 
value="{formpassword/@value}" />
-                               <input type="submit" name="confirmdelete" 
value="Delete" class="inline" />
-                               <input type="submit" name="cancel" 
value="Cancel" class="inline" />
+                       Are you sure you want to delete the
+                               <xsl:value-of select="name(delete/*)" />
+                               <xsl:text> </xsl:text>
+                               <xsl:value-of select="delete/*/@id" /> ?
+                               
+                       <form name="del" method="POST" action=""> 
+                               <input type="hidden" name="object" 
value="{name(delete/*)}" />
+                               <input type="hidden" name="id" 
value="{delete/*/@id}" />
+                               <input type="hidden" name="formPassword" 
value="{formpassword/@value}" />
+                               <input type="submit" name="confirmdelete" 
value="Delete" class="inline" />
+                               <input type="submit" name="cancel" 
value="Cancel" class="inline" />
                        </form>
                        </xsl:when>
-                       <xsl:when test="./generated">
-                               <a href="file://{generated/@outputdir}">Output 
dir</a>
+                       
+                       <xsl:when test="publish">
+                               <a href="file://{publish/@outputdir}">Output 
dir</a>
                        </xsl:when>
+                       
+                       <xsl:otherwise>
+                               Welcome
+                       </xsl:otherwise>
+                       
                </xsl:choose>
        </xsl:template> 

@@ -151,5 +228,4 @@
                </xsl:choose>
                </div>
        </xsl:template>
-</xsl:stylesheet>
- 
+</xsl:stylesheet>
\ No newline at end of file


Reply via email to