[freenet-cvs] r14902 - in trunk/plugins/Echo: images src/plugins/echo src/plugins/echo/block src/plugins/echo/i18n src/resources src/xml

fred at freenetproject.org fred at freenetproject.org
Tue Aug 28 16:09:04 UTC 2007


Author: fred
Date: 2007-08-28 16:09:04 +0000 (Tue, 28 Aug 2007)
New Revision: 14902

Modified:
   trunk/plugins/Echo/images/echo-logo-small-0.1.png
   trunk/plugins/Echo/src/plugins/echo/Echo.java
   trunk/plugins/Echo/src/plugins/echo/Node.java
   trunk/plugins/Echo/src/plugins/echo/Project.java
   trunk/plugins/Echo/src/plugins/echo/ProjectManager.java
   trunk/plugins/Echo/src/plugins/echo/SiteGenerator.java
   trunk/plugins/Echo/src/plugins/echo/WikiMarkupRender.java
   trunk/plugins/Echo/src/plugins/echo/block/BlockManager.java
   trunk/plugins/Echo/src/plugins/echo/block/BlogrollBlock.java
   trunk/plugins/Echo/src/plugins/echo/block/CategoriesBlock.java
   trunk/plugins/Echo/src/plugins/echo/i18n/echo.i18n.en.properties
   trunk/plugins/Echo/src/resources/edit.css
   trunk/plugins/Echo/src/resources/style.css
   trunk/plugins/Echo/src/xml/edit.xsl
   trunk/plugins/Echo/src/xml/test.xsl
Log:
Preparing for release :
* New logo (Alpha release)
* Echo is now able to insert the site itself 
* Improvement of the SiteGenerator
* Small changes in the default CSS
* I18n



Modified: trunk/plugins/Echo/images/echo-logo-small-0.1.png
===================================================================
(Binary files differ)

Modified: trunk/plugins/Echo/src/plugins/echo/Echo.java
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/Echo.java	2007-08-28 16:07:10 UTC (rev 14901)
+++ trunk/plugins/Echo/src/plugins/echo/Echo.java	2007-08-28 16:09:04 UTC (rev 14902)
@@ -10,13 +10,13 @@
 import freenet.pluginmanager.FredPluginThreadless;
 import freenet.pluginmanager.PluginRespirator;
 import freenet.pluginmanager.PluginHTTPException;
-
 import freenet.pluginmanager.DownloadPluginHTTPException;
 import freenet.pluginmanager.RedirectPluginHTTPException;
 
 import freenet.keys.FreenetURI;
 import freenet.support.api.HTTPRequest;
 import freenet.support.HTMLNode;
+import freenet.node.fcp.ClientPutDir;
 
 import nu.xom.Builder;
 import nu.xom.Document;
@@ -32,9 +32,9 @@
 import java.io.FileInputStream;
 import java.io.InputStream;
 import java.io.ByteArrayOutputStream;
-
 import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.net.MalformedURLException;
 
 // TODO
 //	* Exceptions !
@@ -52,8 +52,9 @@
 	private static final int MAX_ID_LENGTH = Math.max(PROJECT_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 int MAX_KEY_LENGTH = 1024*1024;
 	
-	private PluginRespirator respirator;
+	protected PluginRespirator respirator;
 	private Builder parser;
 	private XSLTransform transform;
 	private I18n i18n;
@@ -63,29 +64,35 @@
 	private NodesManager nodesManager;
 	private BlockManager blockManager;
 	private Node node;
+	private ClientPutDir clientPutDir;
 	
-	private InsertTest test;
+	public Echo()
+	{
+
+	}
 	
-	public Echo() throws PluginHTTPException
-	{
+	public void runPlugin(PluginRespirator p) {
+		
 		try {
+			this.respirator = p;
 			i18n = new I18n("en");
 
 			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");
+			Document styleSheet = parser.build(getClass().getResourceAsStream("/xml/edit.xsl"));
+// 			Document styleSheet = parser.build("/home/fred/prog/soc/trunk/plugins/Echo/src/xml/edit.xsl");
 			i18n.translateXML(styleSheet);
 			
 			transform = new XSLTransform(styleSheet);
 
-			projectManager = new ProjectManager(BASE_DIR);
+			projectManager = new ProjectManager(BASE_DIR, respirator.getNode().random);
 			if(projectManager.countProjects() == 0)
-				projectManager.newProject("bleh");
+				projectManager.newProject("My Flog");
+			
 			setProject(projectManager.loadProject("001"));
 
 		} catch (Exception e) {
-			e.printStackTrace(System.err);
+			e.printStackTrace();
 		}
 // 		} catch (IOException ioe) {								//
 // 			throw new PluginHTTPException("Cannot open the style sheet", "");		//
@@ -94,15 +101,7 @@
 // 		} catch (XSLException xe) {								//
 // 			throw new PluginHTTPException("Cannot build the XSL transformer", "");		//
 // 		}
-
-	}
-	
-	public void runPlugin(PluginRespirator p) {
-		this.respirator = p;
 		
-// 		test = new InsertTest(respirator.getNode(), new File("/home/fred/test.jpg"));
-// 		System.err.println("Test.isNull ?? : " + (test == null));
-		
 	}
 
 	public void terminate() {
@@ -122,12 +121,12 @@
 	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);
@@ -135,8 +134,8 @@
 			serializer.write(new Document((Element) transform.transform(page.getDoc()).get(0)));
 			return baos.toString();
 			
+			*/
 			
-			
 		} catch (Exception e) {
 			return e.getMessage();
 		}
@@ -300,23 +299,7 @@
 			}
 		} else if ("insert".equals(fileName)) {
 			
-			Element insert = new Element("insert");
-			page= new Page(insert);
-			page.setTitle("Insert");
-			
-			FreenetURI uri = project.getInsertURI();
-			if(uri != null){
-				Element insertURI = new Element("insertURI");
-				insertURI.appendChild(uri.toString());
-				insert.appendChild(insertURI);
-			}
-			
-			uri = project.getRequestURI();
-			if(uri != null){
-				Element requestURI = new Element("requestURI");
-				requestURI.appendChild(uri.toString());
-				insert.appendChild(requestURI);
-			}
+			setInsertPage();
 				
 		} else if ("nodes".equals(fileName)) {
 			
@@ -416,6 +399,48 @@
 
 				setBlocksPage();
 				
+			} else if (request.isPartSet("insert-key")) {
+				setInsertPage();
+				
+				if(clientPutDir == null || clientPutDir.hasFinished()) {
+					FreenetURI insertURI = null;
+					FreenetURI requestURI = null;
+					
+					try {
+						insertURI = new FreenetURI(request.getPartAsString("insert-key", MAX_KEY_LENGTH));
+					} catch(MalformedURLException mue) {
+						page.appendError("Invalid insertion key : " + mue.getMessage());
+					}
+					
+					try {
+						requestURI = new FreenetURI(request.getPartAsString("request-key", MAX_KEY_LENGTH));
+					} catch(MalformedURLException mue) {
+						page.appendError("Invalid request key : " + mue.getMessage());
+					}
+					
+					if(insertURI != null && requestURI != null) {
+					
+						
+						if (! project.getInsertURI().equals(insertURI)){
+							project.setInsertURI(insertURI);
+							
+						}
+						
+						if (! project.getRequestURI().equals(requestURI)) {
+							project.setRequestURI(requestURI);
+							
+						}
+						
+						SiteGenerator generator = new SiteGenerator(project);
+						generator.generate();
+						
+						SimpleDirectoryInserter inserter = new SimpleDirectoryInserter(respirator.getNode().clientCore.getFCPServer());
+						clientPutDir = inserter.insert(new File(project.getProjectDir(), "out"), "index.html", insertURI);
+						
+						setInsertPage();					
+					}
+				}
+								
 			} else {
 			
 				String title = request.getPartAsString("title", MAX_TITLE_LENGTH).trim();
@@ -505,6 +530,34 @@
 		page.appendData(getFormPassword());
 	}
 	
+	private void setInsertPage() {
+		
+			Element insert = new Element("insert");
+			page= new Page(insert);
+			page.setTitle("Insert");
+			page.appendData(getFormPassword());
+			
+			if(clientPutDir == null || clientPutDir.hasFinished()) {
+			
+				FreenetURI uri = project.getInsertURI();
+				if(uri != null){
+					Element insertURI = new Element("insertURI");
+					insertURI.appendChild(uri.toString());
+					insert.appendChild(insertURI);
+				}
+				
+				uri = project.getRequestURI();
+				if(uri != null){
+					Element requestURI = new Element("requestURI");
+					requestURI.appendChild(uri.toString());
+					insert.appendChild(requestURI);
+				}
+			} else {
+				insert.addAttribute(new Attribute("running","true"));
+			}
+	
+	}
+	
 	private Element getFormPassword() {
 		
 		Element formPassword = new Element("formpassword");

Modified: trunk/plugins/Echo/src/plugins/echo/Node.java
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/Node.java	2007-08-28 16:07:10 UTC (rev 14901)
+++ trunk/plugins/Echo/src/plugins/echo/Node.java	2007-08-28 16:09:04 UTC (rev 14902)
@@ -227,10 +227,42 @@
 
 	}
 	
+	public Node summary() {
+	
+		WikiMarkupRender render = new TempWikiMarkupRender();
+		Node summary = this.copy();
+		Text content = (Text) summary.getContentElement().getChild(0);
+		
+		String str = content.getValue();
+		int words = 0;
+		int index = 1;
+		boolean lastIsSpace = false;
+		while(words < 80 && index < str.length()) {
+
+			if(' ' == str.charAt(index++)) {
+				if(!lastIsSpace)
+					words++;
+				lastIsSpace = true;
+			} else
+				lastIsSpace = false;
+		}
+		
+		if(index != str.length()) {
+			str = str.substring(0, index);
+			str += "...";
+		}
+		
+		content.setValue(str);
+		render.render(summary.getContentElement());
+
+		return summary;
+		
+	}
+	
 	public Node render() {
 	
-		Node renderedNode = (Node) this.copy();
-		WikiMarkupRender render = new WikiMarkupRender();
+		Node renderedNode = this.copy();
+		WikiMarkupRender render = new TempWikiMarkupRender();
 		
 		render.render(renderedNode.getContentElement());
 		

Modified: trunk/plugins/Echo/src/plugins/echo/Project.java
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/Project.java	2007-08-28 16:07:10 UTC (rev 14901)
+++ trunk/plugins/Echo/src/plugins/echo/Project.java	2007-08-28 16:09:04 UTC (rev 14902)
@@ -7,6 +7,7 @@
 import java.util.Properties;
 import java.io.File;
 import java.io.FileInputStream;
+import java.io.FileOutputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.net.MalformedURLException;
@@ -16,6 +17,7 @@
 public class Project {
 
 	private File projectDir;
+	private File projectConfigFile;
 	private Properties projectConfig;
 	private NodesManager nodesManager;
 	private BlockManager blockManager;
@@ -24,8 +26,9 @@
 	public Project(File projectDir) throws FileNotFoundException, ParsingException, IOException {
 		
 		this.projectDir = projectDir;
-		projectConfig = new Properties();
-		projectConfig.loadFromXML(new FileInputStream(projectDir.getPath() + File.separator + "conf.xml"));
+		this.projectConfigFile = new File(projectDir, "conf.xml");
+		this.projectConfig = new Properties();
+		projectConfig.loadFromXML(new FileInputStream(projectConfigFile));
 		
 		nodesManager = new NodesManager(new File(projectDir.getPath() + File.separator + "nodes"));
 		blockManager = new BlockManager(new File(projectDir.getPath() + File.separator + "blocks"));
@@ -46,25 +49,25 @@
 	
 	public FreenetURI getInsertURI() {
 		
-		return getURI("inserturi");
+		return getURI("insertURI");
 		
 	}
 	
 	public FreenetURI getRequestURI() {
 		
-		return getURI("requesturi");
+		return getURI("requestURI");
 	
 	}
 	
 	public void setInsertURI(FreenetURI uri) {
 	
-		projectConfig.setProperty("inserturi", uri.toString());
+		projectConfig.setProperty("insertURI", uri.toString());
 	
 	}
 	
 	public void setRequestURI(FreenetURI uri) {
 	
-		projectConfig.setProperty("requesturi", uri.toString());
+		projectConfig.setProperty("requestURI", uri.toString());
 	
 	}
 	
@@ -93,6 +96,14 @@
 		return blockManager;
 	
 	}
+	
+	public void writeConfig() throws FileNotFoundException, IOException {
+	
+		FileOutputStream out = new FileOutputStream(projectConfigFile);
+		projectConfig.storeToXML(out, null);
+		out.close();
+		
+	}
 
 
 }
\ No newline at end of file

Modified: trunk/plugins/Echo/src/plugins/echo/ProjectManager.java
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/ProjectManager.java	2007-08-28 16:07:10 UTC (rev 14901)
+++ trunk/plugins/Echo/src/plugins/echo/ProjectManager.java	2007-08-28 16:09:04 UTC (rev 14902)
@@ -1,5 +1,9 @@
 package plugins.echo;
 
+import freenet.crypt.RandomSource;
+import freenet.keys.InsertableClientSSK;
+import freenet.keys.FreenetURI;
+
 import java.util.HashMap;
 import java.util.Properties;
 import java.io.File;
@@ -13,10 +17,12 @@
 
 	private File baseDir;
 	private HashMap<String,File> projects;
+	private RandomSource randomSource;
 
-	public ProjectManager(File baseDir) {
+	public ProjectManager(File baseDir, RandomSource randomSource) {
 	
 		this.baseDir= baseDir;
+		this.randomSource = randomSource;
 		projects = new HashMap<String,File>();
 
 		File[] files = baseDir.listFiles();
@@ -50,7 +56,7 @@
 				break;
 		}
 		
-		File projectDir = new File(baseDir.getPath() + File.separator + id);
+		File projectDir = new File(baseDir, id);
 		if(projectDir.mkdirs()) {
 			
 			(new File(projectDir.getPath() + File.separator + "nodes")).mkdirs();
@@ -59,6 +65,11 @@
 			FileOutputStream configFile = new FileOutputStream(projectDir.getPath() + File.separator + "conf.xml");
 			Properties conf = new Properties();
 			conf.setProperty("title", projectTitle);
+			
+			InsertableClientSSK key = InsertableClientSSK.createRandom(randomSource, projectTitle);
+			conf.setProperty("insertURI", key.getInsertURI().toString());
+			conf.setProperty("requestURI", key.getURI().toString());
+			
 			conf.storeToXML(configFile, null);
 			configFile.close();
 			

Modified: trunk/plugins/Echo/src/plugins/echo/SiteGenerator.java
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/SiteGenerator.java	2007-08-28 16:07:10 UTC (rev 14901)
+++ trunk/plugins/Echo/src/plugins/echo/SiteGenerator.java	2007-08-28 16:09:04 UTC (rev 14902)
@@ -1,5 +1,8 @@
 package plugins.echo;
 
+import plugins.echo.block.Block;
+import plugins.echo.block.BlockManager;
+
 import nu.xom.*; 
 import nu.xom.xslt.*;
 
@@ -11,6 +14,7 @@
 	public static final int POSTS_PER_PAGE = 5;
 	
 	private NodesManager nodesManager;
+	private BlockManager blockManager;
 	private Builder parser;
 	private XSLTransform transform;
 	private XSLTransform rssTransform;
@@ -18,14 +22,15 @@
 	private Document template;
 	private Project project;
 	private File outDir;
+	private Element blocksElement;
 	
 	public SiteGenerator(Project project) throws IOException, ParsingException, XSLException {
 	
 		this.project = project;
 		this.outDir = new File(project.getProjectDir(), "out/");
 		nodesManager = project.getNodesManager();
+		blockManager = project.getBlockManager();
 		parser = new Builder();
-				
 		
 		template = parser.build(getClass().getResourceAsStream("/xml/test.xsl"));
 // 		template = parser.build("/home/fred/prog/soc/trunk/plugins/Echo/src/xml/test.xsl");
@@ -39,14 +44,27 @@
 		serializer.setIndent(4);
 		serializer.setMaxLength(128);
 		
+		blocksElement = new Element("blocks");
+		Block[] blocks = blockManager.getBlocks();
+		
+		for(Block b : blocks) {
+			if(! b.getPosition().equals("disabled"))
+				blocksElement.appendChild(b.toXMLElement());
+		}
 	}
 	
-	public void writeToFile(nu.xom.Nodes result, String fileName) throws XSLException, IOException {
+	private void makePage(Element e, String fileName) throws XSLException, IOException{
 	
-		serializer.setOutputStream(new FileOutputStream(outDir.getPath() + File.separator + fileName));
+		Element page = new Element("page");
+		blocksElement.detach();
+		page.appendChild(blocksElement);
+		page.appendChild(e);
+		
+		nu.xom.Nodes result = transform.transform(new Document(page));
+		serializer.setOutputStream(new FileOutputStream(new File(outDir.getPath(), fileName)));
 		serializer.write(new Document((Element) result.get(0)));
 		
-	}
+	} 
 	
 	public void generate() throws Exception{	// TODO : Pfouille !!
 
@@ -54,8 +72,7 @@
 		
 		Nodes nodes = nodesManager.getNodes();
 		for(Node node : nodes) {
-			System.out.println(node.getId());
-			writeToFile(transform.transform(node.render().getDoc()), node.getId() + ".html");
+			makePage(node.render().getRoot(), node.getId() + ".html");
 		}
 		
 		Nodes posts = nodes.getPosts();
@@ -63,25 +80,21 @@
 		
 		Element index = new Element("index");
 		for(Node post : posts) {
-			System.out.println(post.getId() + " (" + post.getCreationDate().toString() + ")");
-			index.appendChild(post.render().getRoot());
+			index.appendChild(post.summary().getRoot());
 		}
-		writeToFile(transform.transform(new Document(index)), "index.html");
+		makePage(index, "index.html");
 		
 // 		writeToFile(rssTransform.transform(new Document(index)), "feed.rss");
-		
-		System.out.println("\n * Categories *");
-		
+				
 		String[] categories = nodesManager.getCategoriesIds();
 		for(String category : categories) {
-			System.out.println(category);
 			index = new Element("index");
 			index.addAttribute(new Attribute("category", category));
 			for(Node post : posts) {
 				if(post.isInCategory(category))
-					index.appendChild(post.render().getRoot());
+					index.appendChild(post.summary().getRoot());
 			}
-			writeToFile(transform.transform(new Document(index)), "category-" + category + ".html");
+			makePage(index, "category-" + category + ".html");
 		}
 		
 		

Modified: trunk/plugins/Echo/src/plugins/echo/WikiMarkupRender.java
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/WikiMarkupRender.java	2007-08-28 16:07:10 UTC (rev 14901)
+++ trunk/plugins/Echo/src/plugins/echo/WikiMarkupRender.java	2007-08-28 16:09:04 UTC (rev 14902)
@@ -11,7 +11,7 @@
 
 /**
 	This class provides a simple wiki markup render.
-	Performances are acceptable but many optimizations are still possible
+	Atm the code is very crapy !!
 
 Formatting tricks :
 Heading

Modified: trunk/plugins/Echo/src/plugins/echo/block/BlockManager.java
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/block/BlockManager.java	2007-08-28 16:07:10 UTC (rev 14901)
+++ trunk/plugins/Echo/src/plugins/echo/block/BlockManager.java	2007-08-28 16:09:04 UTC (rev 14902)
@@ -1,5 +1,7 @@
 package plugins.echo.block;
 
+import plugins.echo.Project;
+
 import java.io.File;
 import java.io.FileOutputStream;
 import java.util.HashMap;
@@ -35,6 +37,9 @@
 					case BLOG_ROLL:
 						block = new BlogrollBlock(doc);
 						break;
+					case CATEGORIES:
+						block = new CategoriesBlock(doc);
+						break;
 				}
 				
 				if(block != null)
@@ -89,6 +94,9 @@
 	
 		Block blogroll = new BlogrollBlock("001");
 		write(blogroll);
+		
+		Block categories = new CategoriesBlock("002");
+		write(categories);
 	
 	}
 

Modified: trunk/plugins/Echo/src/plugins/echo/block/BlogrollBlock.java
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/block/BlogrollBlock.java	2007-08-28 16:07:10 UTC (rev 14901)
+++ trunk/plugins/Echo/src/plugins/echo/block/BlogrollBlock.java	2007-08-28 16:09:04 UTC (rev 14902)
@@ -10,7 +10,7 @@
 
 public class BlogrollBlock extends Block {
 
-	public BlogrollBlock (String id) {
+	protected BlogrollBlock(String id) {
 		
 		super(id, Block.BlockType.BLOG_ROLL);
 		

Modified: trunk/plugins/Echo/src/plugins/echo/block/CategoriesBlock.java
===================================================================
--- trunk/plugins/Echo/src/plugins/echo/block/CategoriesBlock.java	2007-08-28 16:07:10 UTC (rev 14901)
+++ trunk/plugins/Echo/src/plugins/echo/block/CategoriesBlock.java	2007-08-28 16:09:04 UTC (rev 14902)
@@ -1,11 +1,32 @@
 package plugins.echo.block;
 
-public class CategoriesBlock /*extends Block*/ {
+import nu.xom.Document;
 
-// 	public CategoriesBlock(String id) {
-// 	
-// 		super(id, Block.BlockType.CATEGORIES);
-// 	
-// 	}
 
+public class CategoriesBlock extends Block {
+	
+	protected CategoriesBlock(String id) {
+		
+		super(id, Block.BlockType.CATEGORIES);
+		
+	}
+	
+	public CategoriesBlock(Document document) {
+		
+		super(document);
+	
+	}
+	
+	public final boolean isConfigurable() {
+	
+		return false;
+		
+	}
+	
+	public final BlockType getType() {
+	
+		return Block.BlockType.CATEGORIES;
+	
+	}
+	
 }
\ No newline at end of file

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-28 16:07:10 UTC (rev 14901)
+++ trunk/plugins/Echo/src/plugins/echo/i18n/echo.i18n.en.properties	2007-08-28 16:09:04 UTC (rev 14902)
@@ -27,5 +27,13 @@
 echo.manage.myNodes.desc=A list of your nodes
 echo.manage.newCategory=New category
 echo.manage.categories.desc=Categorize your posts
+echo.manage.blocks.desc=Configure the sidebare and other regions
 
-echo.block.blog-roll=Blog Roll
\ No newline at end of file
+echo.block.blog-roll=Blog Roll
+echo.block.categories=Categories
+
+echo.generate=Generate the site
+echo.generate.desc=Generate the pages in order to preview the result
+
+echo.insert=Insert
+echo.insert.desc=Generate the site and insert it on Freenet
\ No newline at end of file

Modified: trunk/plugins/Echo/src/resources/edit.css
===================================================================
--- trunk/plugins/Echo/src/resources/edit.css	2007-08-28 16:07:10 UTC (rev 14901)
+++ trunk/plugins/Echo/src/resources/edit.css	2007-08-28 16:09:04 UTC (rev 14902)
@@ -42,8 +42,10 @@
 hr {clear : both; visibility : hidden; margin : 0; padding : 0;}
 p {margin: 0 0 10px 30px;}
 
+textarea {
+	width:80%;
+}
 
-
 #container {
 	width: 90%;
 	margin-top:20px;

Modified: trunk/plugins/Echo/src/resources/style.css
===================================================================
--- trunk/plugins/Echo/src/resources/style.css	2007-08-28 16:07:10 UTC (rev 14901)
+++ trunk/plugins/Echo/src/resources/style.css	2007-08-28 16:09:04 UTC (rev 14902)
@@ -16,7 +16,10 @@
 	text-decoration: none;
 	color:#6da0de;
 }
-
+blockquote {
+	border-left:5px solid #bbb;
+	padding-left:5px;
+}
 a:hover {
 	text-decoration: underline;
 }
@@ -25,6 +28,14 @@
 	color:black;
 }
 
+h2.post-title {
+	margin-bottom:0;
+}
+
+.date{
+	color:gray;
+}
+
 #container {
 	width: 760px;
 	margin: 0 auto;
@@ -67,14 +78,31 @@
 	color:white;
 }
 
+h2#page-title {
+	margin-top:0.5em;
+	font-size:2em;
+}
+
 ul.block {
 	list-style-type: none;
 	margin: 0;
 	padding: 0;
 }
 
+div.post {
+
+	margin-bottom:2em;
+
+}
+
+div.entry {
+	padding-left:10px;
+}
+
 div.meta {
 
+	background-color:#cfcfcf;
+	padding:3px;
 	
 }
 

Modified: trunk/plugins/Echo/src/xml/edit.xsl
===================================================================
--- trunk/plugins/Echo/src/xml/edit.xsl	2007-08-28 16:07:10 UTC (rev 14901)
+++ trunk/plugins/Echo/src/xml/edit.xsl	2007-08-28 16:09:04 UTC (rev 14902)
@@ -39,7 +39,7 @@
 							<li><a href="write"><i18n key="echo.action.write" /></a></li>
 							<li><a href="manage"><i18n key="echo.action.manage" /></a></li>
 							<li><a href="publish"><i18n key="echo.action.publish" /></a></li>
-							<li><a href="configure"><i18n key="echo.action.configure" /></a></li>
+<!-- 							<li><a href="configure"><i18n key="echo.action.configure" /></a></li> -->
 						</ul>
 					</div>
 
@@ -47,7 +47,7 @@
 						<h1><xsl:value-of select="title/text()" /></h1>
 						<xsl:apply-templates select="errors" />
 						<xsl:apply-templates select="data" />
- 						<div><xsl:copy-of select="/node()" /></div> 
+<!--  						<div><xsl:copy-of select="/node()" /></div>  -->
 					
 					</div>
 				</div>
@@ -85,11 +85,11 @@
 			
 			<xsl:when test="publish">
 				<dl>
-					<dt><a href="generate">Generate the site</a></dt>
-					<dd>Bleh bleh</dd>
+					<dt><a href="generate"><i18n key="echo.generate" /></a></dt>
+					<dd><i18n key="echo.generate.desc" /></dd>
 					
-					<dt><a href="insert">Insert</a></dt>
-					<dd>Generate the site and insert it on Freenet</dd>
+					<dt><a href="insert"><i18n key="echo.insert" /></a></dt>
+					<dd><i18n key="echo.insert.desc" /></dd>
 				</dl>
 			</xsl:when>
 			
@@ -100,27 +100,34 @@
 			</xsl:when>
 			
 			<xsl:when test="insert">
-				<form name="insert">
-					<label for="insert-key">Insert key</label>
-					<input type="text" name="insert-key" id="insert-key" size="70">
-					<xsl:if test="insert/insertKey" >
-						<xsl:attribute name="value">
-							<xsl:value-of select="insert/insertKey" />
-						</xsl:attribute>
-					</xsl:if>
-					</input>
-					
-					<label for="request-key">Request key</label>
-					<input type="text" name="request-key" id="request-key" size="70">
-					<xsl:if test="insert/requestKey">
-						<xsl:attribute name="value">
-							<xsl:value-of select="insert/requestKey" />
-						</xsl:attribute>
-					</xsl:if>
-					</input>
-					<input type="hidden" name="formPassword" value="{formpassword/@value}" />
-					<input type="submit" />
-				</form>
+				<xsl:choose>
+					<xsl:when test="insert/@running='true'">
+						An insertion is already running, you can see its advancement on the <a href="/queue/">queue page</a>.
+					</xsl:when>
+					<xsl:otherwise>
+						<form name="insert" method="POST" action="">
+							<label for="insert-key">Insert key</label>
+							<input type="text" name="insert-key" id="insert-key" size="70">
+							<xsl:if test="insert/insertURI" >
+								<xsl:attribute name="value">
+									<xsl:value-of select="insert/insertURI" />
+								</xsl:attribute>
+							</xsl:if>
+							</input>
+							
+							<label for="request-key">Request key</label>
+							<input type="text" name="request-key" id="request-key" size="70">
+							<xsl:if test="insert/requestURI">
+								<xsl:attribute name="value">
+									<xsl:value-of select="insert/requestURI" />
+								</xsl:attribute>
+							</xsl:if>
+							</input>
+							<input type="hidden" name="formPassword" value="{formpassword/@value}" />
+							<input type="submit" />
+						</form>
+					</xsl:otherwise>
+				</xsl:choose>
 			</xsl:when>
 			
 			<xsl:when test="configure">
@@ -160,7 +167,7 @@
 
 				<form name="newCategory" method="POST" action="">
 					<label for="category-name" class="inline"><i18n key="echo.manage.newCategory" /></label>
-					<input type="text" id="category-name" name="category-sname" class="inline" />
+					<input type="text" id="category-name" name="category-name" class="inline" />
 					<input type="hidden" name="formPassword" value="{formpassword/@value}" class="inline" />
 					<input type="submit" value="Create" class="inline" />
 				</form>
@@ -272,9 +279,9 @@
 			<xsl:when test="./node">
 			<form name="edit" method="POST" action="">
 				<label for="edit-title"><i18n key="echo.common.title" /></label>
-				<input type="text" id="edit-title" name="title" value="{node/title/text()}"/>
+				<input type="text" id="edit-title" name="title" size="100" value="{node/title/text()}"/>
 				<label for="edit-body"><i18n key="echo.write.nodeBody" /></label>
-				<textarea id="edit-body" name="body" cols="60" rows="20">
+				<textarea id="edit-body" name="body" cols="100" rows="50">
 					<xsl:choose>
 						<xsl:when test="node/content/text()">
 							<xsl:text><xsl:value-of select="node/content" /></xsl:text>

Modified: trunk/plugins/Echo/src/xml/test.xsl
===================================================================
--- trunk/plugins/Echo/src/xml/test.xsl	2007-08-28 16:07:10 UTC (rev 14901)
+++ trunk/plugins/Echo/src/xml/test.xsl	2007-08-28 16:09:04 UTC (rev 14902)
@@ -14,15 +14,15 @@
 	
 	<xsl:param name="basedir" />
 	<xsl:param name="project-title" />
-	
+	<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:variable name="categoriesFile"><xsl:value-of select="$basedir" />/categories.xml</xsl:variable>
+	<xsl:variable name="categoriesFile"><xsl:value-of select="$nodesdir" />/categories.xml</xsl:variable>
 
 	<xsl:template match="/">
 		<html>
 			<head>
 			<link rel="stylesheet" href="style.css" type="text/css" media="screen" />
-				<title>Blog - <xsl:call-template name="page-title" /></title>
+				<title><xsl:value-of select="$project-title" /> - <xsl:call-template name="page-title" /></title>
 			</head>
 			<body>
 				<div id="container">
@@ -37,15 +37,15 @@
 					</div>-->
 
 					<div id="main">
-						<h2><xsl:call-template name="page-title" /></h2>
+						<h2 id="page-title"><xsl:call-template name="page-title" /></h2>
 						<xsl:call-template name="content" />
 					</div>
 
-					<!--<div id="right">
+					<div id="right">
 					<xsl:call-template name="blocks">
-						<xsl:with-param name="align">right</xsl:with-param>
+						<xsl:with-param name="position">right</xsl:with-param>
 					</xsl:call-template>
-					</div>-->
+					</div>
 
 					<div id="footer">
 						Powered by Echo
@@ -56,12 +56,12 @@
 	</xsl:template>
 
 	<xsl:template name="blocks">
-		<xsl:param name="align" />
+		<xsl:param name="position" />
 		
-		<!--<xsl:for-each select="document(concat($blocksdir,'blocks.xml'))//block[@align=$align]">
- 			<xsl:sort order="ascending" select ="@order" />
+		<xsl:for-each select="/page/blocks/block[@position=$position]">
+ 			<xsl:sort order="ascending" select ="@weight" />
 			<xsl:apply-templates select="document(concat($blocksdir, @id, '.xml'))/block" />
-		</xsl:for-each>-->
+		</xsl:for-each>
 	</xsl:template>
 
 	<xsl:template match="block">
@@ -78,7 +78,7 @@
 			<xsl:when test="@type='categories'">
 				<h3 class="block">Categories</h3>
 				<ul class="block categories">
-				<xsl:for-each select="document(concat($basedir, 'categories.xml'))//category">
+				<xsl:for-each select="document($categoriesFile)//category">
 					<li>
 						<a href="category-{@id}.html"><xsl:value-of select="text()"/></a>
 					</li>
@@ -86,7 +86,7 @@
 				</ul>
 			</xsl:when>
 
-			<xsl:when test="@type='blogroll'">
+			<xsl:when test="@type='blog-roll'">
 				<h3 class="block">Blogroll</h3>
 				<ul class="block blogroll">
 				<xsl:for-each select="blog">
@@ -115,20 +115,20 @@
 
 	<xsl:template name="content">
 		<xsl:choose>
-			<xsl:when test="/node">
-				<xsl:copy-of select="/node/content/node()" />
+			<xsl:when test="/page/node">
+				<xsl:copy-of select="/page/node/content/node()" />
 			</xsl:when>
-			<xsl:when test="/index">
-				<xsl:for-each select="/index/node">
+			<xsl:when test="/page/index">
+				<xsl:for-each select="/page/index/node">
 					<div class="post" id="post-{@id}">
-						<h2><a href="{@id}.html"><xsl:value-of select="title/text()"/></a></h2>
+						<h2 class="post-title"><a href="{@id}.html"><xsl:value-of select="title/text()"/></a></h2>
+						<span class="date"><xsl:value-of select="created/text()" /></span>
 						<div class="entry">
 						<xsl:copy-of select="content/node()" />
 						</div>
 						<div class="meta">
-						<xsl:value-of select="created/text()" />
 						<xsl:if test="count(categories/category) > 0">
-							|<ul class="categories">
+							Posted in <ul class="categories">
 							<xsl:for-each select="categories/category">
 								<li>
 									<a href="category-{@id}.html">
@@ -143,25 +143,25 @@
 						</div>
 					</div>
 				</xsl:for-each>
-<!-- 				<xsl:copy-of select="." /> -->
 			</xsl:when>
 		</xsl:choose>
+<!-- 		<xsl:copy-of select="/" /> -->
 	</xsl:template>
 
 	<xsl:template name="page-title">
 		<xsl:choose>
-			<xsl:when test="/node">
-				<xsl:value-of select="/node/title/text()" />
+			<xsl:when test="/page/node">
+				<xsl:value-of select="/page/node/title/text()" />
 			</xsl:when>
-			<xsl:when test="/index">
+			<xsl:when test="/page/index">
 				<xsl:choose>
-					<xsl:when test="/index/@category">
+					<xsl:when test="/page/index/@category">
 						<xsl:call-template name="categoryName">
- 							<xsl:with-param name="id" select="/index/@category" />
+ 							<xsl:with-param name="id" select="/page/index/@category" />
 						</xsl:call-template>
 					</xsl:when>
 					<xsl:otherwise>
-						My Flog
+						Last posts
 					</xsl:otherwise>
 				</xsl:choose>
 			</xsl:when>




More information about the cvs mailing list