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