Author: fred
Date: 2007-08-05 14:01:10 +0000 (Sun, 05 Aug 2007)
New Revision: 14484
Removed:
trunk/plugins/Echo/src/test/blocks.xml
Modified:
trunk/plugins/Echo/src/plugins/echo/Echo.java
trunk/plugins/Echo/src/plugins/echo/NodesManager.java
trunk/plugins/Echo/src/plugins/echo/SiteGenerator.java
trunk/plugins/Echo/src/plugins/echo/i18n/I18n.java
trunk/plugins/Echo/src/plugins/echo/i18n/echo.i18n.en.properties
trunk/plugins/Echo/src/xml/edit.xsl
Log:
blocks management
Modified: trunk/plugins/Echo/src/plugins/echo/Echo.java
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/Echo.java 2007-08-05 03:28:31 UTC
(rev 14483)
+++ trunk/plugins/Echo/src/plugins/echo/Echo.java 2007-08-05 14:01:10 UTC
(rev 14484)
@@ -1,6 +1,8 @@
package plugins.echo;
import plugins.echo.i18n.I18n;
+import plugins.echo.block.BlockManager;
+import plugins.echo.block.Block;
import freenet.pluginmanager.FredPlugin;
import freenet.pluginmanager.FredPluginHTTP;
@@ -41,6 +43,7 @@
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 File BLOCKS_DIR = new File(BASE_DIR.getPath() +
File.separator + "blocks");
public static final int NODE_ID_LENGTH = 4;
public static final int CATEGORY_ID_LENGTH = 3;
@@ -56,6 +59,7 @@
private I18n i18n;
private Page page;
private NodesManager nodesManager;
+ private BlockManager blockManager;
private Node node;
public Echo() throws PluginHTTPException
@@ -71,9 +75,11 @@
i18n.translateXML(styleSheet);
transform = new XSLTransform(styleSheet);
- transform.setParameter("contextprefix",
NODES_DIR.getAbsolutePath() + "/");
+ transform.setParameter("baseDir",
BASE_DIR.getAbsolutePath() + "/");
nodesManager = new NodesManager(BASE_DIR);
+ blockManager = new BlockManager(BLOCKS_DIR);
+
} catch (Exception e) {
e.printStackTrace(System.err);
}
@@ -99,11 +105,11 @@
private String transform(Page page) {
try {
- return
transform.transform(page.getDoc()).get(0).toXML();
+// 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);
@@ -111,9 +117,9 @@
serializer.write(new Document((Element)
transform.transform(page.getDoc()).get(0)));
return baos.toString();
- */
+
} catch (Exception e) {
return e.getMessage();
}
@@ -241,6 +247,10 @@
setCategoriesPage();
+ } else if ("blocks".equals(fileName)) {
+
+ setBlocksPage();
+
} else {
setDefaultPage();
@@ -309,6 +319,24 @@
} else {
page.appendError("Fied \"name\" is
empty");
}
+
+ } else if (request.isPartSet("blocks")) {
+
+ String[] blocksIds = blockManager.getIds();
+ for(String id : blocksIds) {
+ Block block =
blockManager.getBlockById(id);
+
+ String position =
request.getPartAsString("position-" + id, 8);
+ block.setPosition(position);
+
+ String weight =
request.getPartAsString("weight-" + id, 2);
+
block.setWeight(Integer.parseInt(weight));
+
+ blockManager.write(block);
+ }
+
+ setBlocksPage();
+
} else {
String title = request.getPartAsString("title",
MAX_TITLE_LENGTH).trim();
@@ -375,6 +403,28 @@
page.appendData(getFormPassword());
}
+ private void setBlocksPage() {
+
+ Element blocksElement = new Element("blocks");
+ Block[] blocks = blockManager.getBlocks();
+ for(Block b : blocks) {
+ Element block = new Element("block");
+ block.addAttribute(new Attribute("id", b.getId()));
+ block.addAttribute(new Attribute("type",
i18n.getString("echo.block." + b.getType().toString())));
+ block.addAttribute(new Attribute("position",
b.getPosition()));
+ block.addAttribute(new Attribute("weight",
String.valueOf(b.getWeight())));
+
+ if(b.isConfigurable())
+ block.addAttribute(new
Attribute("configurable", "true"));
+
+ blocksElement.appendChild(block);
+ }
+
+ page = new Page(blocksElement);
+ page.setTitle(i18n.getString("echo.common.blocks"));
+ page.appendData(getFormPassword());
+ }
+
private Element getFormPassword() {
Element formPassword = new Element("formpassword");
Modified: trunk/plugins/Echo/src/plugins/echo/NodesManager.java
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/NodesManager.java 2007-08-05
03:28:31 UTC (rev 14483)
+++ trunk/plugins/Echo/src/plugins/echo/NodesManager.java 2007-08-05
14:01:10 UTC (rev 14484)
@@ -38,7 +38,7 @@
File[] files = nodesDir.listFiles();
for(File f : files) {
- if(f.getName().matches("[0-9]{4}.xml"))
+ if(f.getName().matches("[0-9]{" + Echo.NODE_ID_LENGTH +
"}.xml"))
nodes.put(f.getName().substring(0,4), f);
}
Modified: trunk/plugins/Echo/src/plugins/echo/SiteGenerator.java
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/SiteGenerator.java 2007-08-05
03:28:31 UTC (rev 14483)
+++ trunk/plugins/Echo/src/plugins/echo/SiteGenerator.java 2007-08-05
14:01:10 UTC (rev 14484)
@@ -80,7 +80,5 @@
writeToFile(transform.transform(new Document(index)),
"category-" + category + ".html");
}
-
-
}
}
\ No newline at end of file
Modified: trunk/plugins/Echo/src/plugins/echo/i18n/I18n.java
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/i18n/I18n.java 2007-08-05 03:28:31 UTC
(rev 14483)
+++ trunk/plugins/Echo/src/plugins/echo/i18n/I18n.java 2007-08-05 14:01:10 UTC
(rev 14484)
@@ -12,6 +12,8 @@
import nu.xom.Text;
import nu.xom.Document;
+import java.io.*; // FIXME
+
/**
* This class provides a trivial internationalization framework
*/
@@ -59,6 +61,7 @@
props = new Properties();
try {
props.load(getClass().getResourceAsStream("/i18n/" +
PREFIX + language + SUFFIX));
+// props.load(new
FileInputStream("/home/fred/prog/soc/trunk/plugins/Echo/src/plugins/echo/i18n/"
+ PREFIX + language + SUFFIX));
} catch (IOException ioe) {
Logger.error(this, "IOException while accessing the " +
language +"file" + ioe.getMessage(), ioe);
throw new MissingResourceException("Unable to load the
translation file for " + language, "i18n", language);
Modified: trunk/plugins/Echo/src/plugins/echo/i18n/echo.i18n.en.properties
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/i18n/echo.i18n.en.properties
2007-08-05 03:28:31 UTC (rev 14483)
+++ trunk/plugins/Echo/src/plugins/echo/i18n/echo.i18n.en.properties
2007-08-05 14:01:10 UTC (rev 14484)
@@ -14,6 +14,9 @@
echo.common.date=Date
echo.common.title=Title
echo.common.nodeType=Type
+echo.common.blocks=Blocks
+echo.common.position=Position
+echo.common.weight=Weight
echo.write.newPost=Create a new post
echo.write.newPage=Create a new page
Deleted: trunk/plugins/Echo/src/test/blocks.xml
===================================================================
--- trunk/plugins/Echo/src/test/blocks.xml 2007-08-05 03:28:31 UTC (rev
14483)
+++ trunk/plugins/Echo/src/test/blocks.xml 2007-08-05 14:01:10 UTC (rev
14484)
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<blocks>
- <block id="menu.002" align="left" order="2" />
- <block id="menu.001" align="left" order="1" />
- <block id="recent-posts.001" align="right" order="1" />
-</blocks>
-
Modified: trunk/plugins/Echo/src/xml/edit.xsl
===================================================================
--- trunk/plugins/Echo/src/xml/edit.xsl 2007-08-05 03:28:31 UTC (rev 14483)
+++ trunk/plugins/Echo/src/xml/edit.xsl 2007-08-05 14:01:10 UTC (rev 14484)
@@ -14,8 +14,14 @@
<xsl:preserve-space elements="content" />
- <xsl:param name="contextprefix" />
+ <xsl:param name="baseDir" />
+ <xsl:variable name="categoriesFile"><xsl:value-of select="$baseDir"
/>categories.xml</xsl:variable>
+ <xsl:variable name="nodesDir"><xsl:value-of select="$baseDir"
/>nodes/</xsl:variable>
+ <xsl:variable name="blocksDir"><xsl:value-of select="$baseDir"
/>blocks/</xsl:variable>
+
+<!-- <xsl:import href="block.xsl" /> -->
+
<xsl:template match="/page">
<html>
<head>
@@ -70,18 +76,21 @@
<dt><a href="categories"><i18n
key="echo.common.categories" /></a></dt>
<dd><i18n
key="echo.manage.categories.desc" /></dd>
+ <dt><a href="blocks"><i18n
key="echo.common.blocks" /></a></dt>
+ <dd><i18n key="echo.manage.blocks.desc"
/></dd>
+
</dl>
</xsl:when>
<xsl:when test="categories">
- <xsl:if
test="count(document(concat($contextprefix, '../categories.xml'))//category) >
0">
+ <xsl:if
test="count(document($categoriesFile)//category) > 0">
<table>
<tr>
<th><i18n
key="echo.common.name" /></th>
<th colspan="2"><i18n
key="echo.common.action" /></th>
</tr>
- <xsl:for-each
select="document(concat($contextprefix, '../categories.xml'))//category">
+ <xsl:for-each
select="document($categoriesFile)//category">
<xsl:sort select="text()" />
<tr>
<xsl:if test="(position() mod
2) = 0">
@@ -133,9 +142,9 @@
</xsl:if>
<td><xsl:value-of select="@id" /></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><xsl:value-of
select="document(concat($nodesDir, @id, '.xml'))/node/modified" /></td>
+ <td><xsl:value-of
select="document(concat($nodesDir, @id, '.xml'))/node/title" /></td>
+ <td><xsl:value-of
select="document(concat($nodesDir, @id, '.xml'))/node/@type" /></td>
<td><a href="edit?node={@id}"><i18n
key="echo.common.edit" /></a></td>
<td><a href="del?node={@id}"><i18n
key="echo.common.delete" /></a></td>
</tr>
@@ -148,6 +157,57 @@
</xsl:choose>
</xsl:when>
+ <xsl:when test="./blocks">
+ <!-- <xsl:for-each select="'aa' 'bb'">
+ j
+ </xsl:for-each>-->
+ <form name="blocks" method="POST" action="">
+ <table>
+ <tr>
+ <th><i18n
key="echo.common.name" /></th>
+ <th><i18n
key="echo.common.position" /></th>
+ <th><i18n
key="echo.common.weight" /></th>
+ <th><i18n
key="echo.common.action" /></th>
+ </tr>
+ <xsl:for-each select="blocks/block">
+ <xsl:sort select="@postion" />
+ <tr>
+ <xsl:if test="(position() mod
2) = 0">
+ <xsl:attribute
name="class">alternate</xsl:attribute>
+ </xsl:if>
+
+ <td><xsl:value-of
select="@type" /></td>
+ <td>
+ <select
name="position-{@id}">
+
<xsl:call-template name="blockPosition">
+
<xsl:with-param name="blockPosition" select="@position" />
+
</xsl:call-template>
+ </select>
+ </td>
+ <td>
+ <select
name="weight-{@id}">
+
<xsl:call-template name="blockWeightOption">
+
<xsl:with-param name="start" select="0" />
+
<xsl:with-param name="end" select="5" />
+
<xsl:with-param name="blockWeight" select="@weight" />
+
</xsl:call-template>
+ </select>
+ </td>
+ <td>
+ <xsl:if
test="@configurable">
+ <a
href="configureBlock?block={@id}">configure</a>
+
+ </xsl:if>
+ </td>
+ </tr>
+ </xsl:for-each>
+ </table>
+ <input type="hidden" name="blocks" value="bleh"
/>
+ <input type="hidden" name="formPassword"
value="{formpassword/@value}" />
+ <input type="submit" />
+ </form>
+ </xsl:when>
+
<xsl:when test="./node">
<form name="edit" method="POST" action="">
<label for="edit-title"><i18n
key="echo.common.title" /></label>
@@ -165,7 +225,7 @@
</xsl:otherwise>
</xsl:choose>
</textarea>
- <xsl:if
test="count(document(concat($contextprefix,
'../categories.xml'))/categories/category) > 0">
+ <xsl:if
test="count(document($categoriesFile)/categories/category) > 0">
<fieldset>
<legend><i18n
key="echo.common.categories" /></legend>
<xsl:call-template
name="categoriesCheckbox">
@@ -224,7 +284,7 @@
<xsl:template name="categoriesCheckbox">
<xsl:param name="nodeCategories" />
- <xsl:for-each select="document(concat($contextprefix,
'../categories.xml'))/categories/category">
+ <xsl:for-each
select="document($categoriesFile)/categories/category">
<xsl:sort select="text()" />
<xsl:variable name="id"><xsl:value-of select="@id"
/></xsl:variable>
@@ -238,4 +298,63 @@
</xsl:template>
+ <xsl:template name="blockPosition">
+ <xsl:param name="blockPosition" />
+
+ <xsl:call-template name="blockPositionOption">
+ <xsl:with-param name="position">top</xsl:with-param>
+ <xsl:with-param name="blockPosition"
select="$blockPosition" />
+ </xsl:call-template>
+ <xsl:call-template name="blockPositionOption">
+ <xsl:with-param name="position">bottom</xsl:with-param>
+ <xsl:with-param name="blockPosition"
select="$blockPosition" />
+ </xsl:call-template>
+ <xsl:call-template name="blockPositionOption">
+ <xsl:with-param name="position">left</xsl:with-param>
+ <xsl:with-param name="blockPosition"
select="$blockPosition" />
+ </xsl:call-template>
+ <xsl:call-template name="blockPositionOption">
+ <xsl:with-param name="position">right</xsl:with-param>
+ <xsl:with-param name="blockPosition"
select="$blockPosition" />
+ </xsl:call-template>
+ <xsl:call-template name="blockPositionOption">
+ <xsl:with-param
name="position">disabled</xsl:with-param>
+ <xsl:with-param name="blockPosition"
select="$blockPosition" />
+ </xsl:call-template>
+ </xsl:template>
+
+ <xsl:template name="blockPositionOption">
+ <xsl:param name="position" />
+ <xsl:param name="blockPosition" />
+
+ <option value="{$position}">
+ <xsl:if test="$position = $blockPosition">
+ <xsl:attribute
name="selected">selected</xsl:attribute>
+ </xsl:if>
+ <xsl:value-of select="$position" />
+ </option>
+ </xsl:template>
+
+ <xsl:template name="blockWeightOption">
+ <xsl:param name="start" select="0" />
+ <xsl:param name="end" select="0" />
+ <xsl:param name="blockWeight" />
+
+ <option value="{$start}">
+ <xsl:if test="$start = $blockWeight">
+ <xsl:attribute
name="selected">selected</xsl:attribute>
+ </xsl:if>
+ <xsl:value-of select="$start" />
+ </option>
+
+ <xsl:if test="$start != $end">
+ <xsl:call-template name="blockWeightOption">
+ <xsl:with-param name="start" select="$start+1"
/>
+ <xsl:with-param name="end" select="$end" />
+ <xsl:with-param name="blockWeight"
select="$blockWeight" />
+ </xsl:call-template>
+ </xsl:if>
+
+ </xsl:template>
+
</xsl:stylesheet>
\ No newline at end of file