Author: kcardineaud Date: 2011-06-20 11:40:04 +0200 (Mon, 20 Jun 2011) New Revision: 126 Url: http://nuiton.org/repositories/revision/scmwebeditor/126 Log: Add preview functionality in modification page Added: trunk/src/main/java/org/nuiton/scmwebeditor/actions/PreviewAction.java Modified: trunk/src/main/resources/struts.xml trunk/src/main/webapp/ModificationViewer.jsp trunk/src/main/webapp/Preview.js trunk/src/main/webapp/css/main.css Added: trunk/src/main/java/org/nuiton/scmwebeditor/actions/PreviewAction.java =================================================================== --- trunk/src/main/java/org/nuiton/scmwebeditor/actions/PreviewAction.java (rev 0) +++ trunk/src/main/java/org/nuiton/scmwebeditor/actions/PreviewAction.java 2011-06-20 09:40:04 UTC (rev 126) @@ -0,0 +1,108 @@ +package org.nuiton.scmwebeditor.actions; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; + + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.struts2.interceptor.ServletRequestAware; +import org.nuiton.jrst.JRST; +import org.nuiton.scmwebeditor.AbstractScmWebEditor; + + +import com.opensymphony.xwork2.Action; + +public class PreviewAction extends AbstractScmWebEditor implements ServletRequestAware { + + HttpServletRequest request; + InputStream XMLResponse; + + + private static final Log log = LogFactory.getLog(PreviewAction.class); + + public String execute() { + setResponse(); + return Action.SUCCESS; + } + + public void setResponse() { + + if(log.isDebugEnabled()) { + log.debug("Enter in Servlet Action"); + } + + HttpSession httpSession = request.getSession(true); + File tmpDir = getTempDir(httpSession); + //Text recuperation + String myData = request.getParameter(PARAMETER_TEXT); + //Text formating and tempfile creating + String myDataWithoutcrlf = myData.replace("\r", ""); + File fileInDirCopy = new File(tmpDir, "copy" + httpSession.getId() + ".rst"); + File httpFile = new File(tmpDir, "preview" + httpSession.getId() + ".html"); + try { + fileInDirCopy.createNewFile(); + httpFile.createNewFile(); + FileUtils.writeStringToFile(fileInDirCopy, myDataWithoutcrlf); + } catch (IOException e) { + if(log.isErrorEnabled()) { + log.error("Erreur de lecture/ecriture",e); + } + } + + convertToUnicode(fileInDirCopy); + + File copy = new File(tmpDir, "copy" + httpSession.getId() + ".rst"); + + //Using jrst for generate html document + try { + JRST.generate(JRST.TYPE_HTML, copy, httpFile, JRST.Overwrite.ALLTIME); + if(log.isDebugEnabled()) { + log.debug("RST generate"); + } + } catch (Exception eee) { + if(log.isWarnEnabled()) { + log.warn("RST generate fail",eee); + } + XMLResponse = new ByteArrayInputStream("<h4>Parsing error, please read RST specification<h4>".getBytes()); + return; + } + copy.delete(); + + + try { + XMLResponse = new ByteArrayInputStream(FileUtils.readFileToString(httpFile).getBytes()); + } catch (IOException e) { + e.printStackTrace(); + } + + httpFile.delete(); + + + + } + + public InputStream getXMLResponse() { + return XMLResponse; + } + + public void setXMLResponse(InputStream xMLResponse) { + XMLResponse = xMLResponse; + } + + @Override + public void setServletRequest(HttpServletRequest request) { + this.request = request; + } + + + + + +} Modified: trunk/src/main/resources/struts.xml =================================================================== --- trunk/src/main/resources/struts.xml 2011-06-17 15:24:35 UTC (rev 125) +++ trunk/src/main/resources/struts.xml 2011-06-20 09:40:04 UTC (rev 126) @@ -16,5 +16,11 @@ <result name="authError" >/ModificationViewer.jsp</result> <result name="erreur">/BadFileRedirect.jsp</result> </action> + <action name="preview" class="org.nuiton.scmwebeditor.actions.PreviewAction" method="execute"> + <result type="stream" > + <param name="contentType">text/xml</param> + <param name="inputName">XMLResponse</param> + </result> + </action> </package> </struts> \ No newline at end of file Modified: trunk/src/main/webapp/ModificationViewer.jsp =================================================================== --- trunk/src/main/webapp/ModificationViewer.jsp 2011-06-17 15:24:35 UTC (rev 125) +++ trunk/src/main/webapp/ModificationViewer.jsp 2011-06-20 09:40:04 UTC (rev 126) @@ -18,7 +18,7 @@ <center> <form method="post" action=commit.action> <script src="GereFormSize.js" type="text/javascript"></script> - <textarea name="newText" id="newText" rows="20" cols="150"><%=request.getAttribute("OrigText")%></textarea> + <textarea name="newText" id="newText"><%=request.getAttribute("OrigText")%></textarea> <script src="Preview.js" type="text/javascript"></script> <script src="Saver.js" type="text/javascript"></script> <script src="GereSession.js" type="text/javascript"></script> @@ -49,16 +49,16 @@ <input type="hidden" name="origText" value=<%=request.getAttribute("OrigText")%>/> <input type="hidden" name="scmEditorUrl" value="<%=request.getAttribute("scmEditorUrl")%>"/> <input type="hidden" name="previewServletUrl" value="<%=request.getAttribute("previewServletUrl")%>"/> - <input title="Save your work and continue editing this file." type="button" value="Save and Continue Editing" name="SaveandC" onclick="javascript:saver(this.form.newText, this.form.username, this.form.pw, this.form.commitMessage, this.form.Orig_text, this.form.scmEditorUrl);"/> + <input title="Save your work and continue editing this file." type="button" value="Save and Continue Editing" name="SaveandC" onclick="javascript:saver(this.form.newText, this.form.username, this.form.pw, this.form.commitMessage, this.form.origText, this.form.scmEditorUrl);"/> <input title="Save this file and go back to previous page." type="submit" value="Save and Quit" name="Save"/> <%if (request.getAttribute("format")!=null && request.getAttribute("format")!=null && request.getAttribute("format").equals("rst") == true){ %><input title="html preview of the current rst file state." type="button" value="Preview" name="Preview" onclick="javascript:preview(this.form.newText, this.form.previewServletUrl);"/><%}%> <input title="Reset text as current repository HEAD revision." type="reset" value="Reset" name="Reset" alt="Test plop plop plop"/> - <input type="hidden" value="<%=request.getAttribute("Project_url")%>" name="Project_url"> - <input title="Exit ScmWebEditor without saving." type="button" value="Exit" name="Cancel" onclick="javascript:cancelRedirectDelete(this.form.Orig_text, this.form.username, this.form.pw, this.form.commitMessage, this.form.Project_url, this.form.scmEditorUrl);"/> + <input type="hidden" value="<%=request.getAttribute("ProjectUrl")%>" name="ProjectUrl"> + <input title="Exit ScmWebEditor without saving." type="button" value="Exit" name="Cancel" onclick="javascript:cancelRedirectDelete(this.form.origText, this.form.username, this.form.pw, this.form.commitMessage, this.form.ProjectUrl, this.form.scmEditorUrl);"/> </form></center> <%--Title and div for rst preview--%> - <h4 id="prevtitle" ></h4> + <h3 id="prevtitle" ></h3> <div id="prev" title="Preview"></div> <p align="right">©2004-2009 CodeLutin</p> </body> Modified: trunk/src/main/webapp/Preview.js =================================================================== --- trunk/src/main/webapp/Preview.js 2011-06-17 15:24:35 UTC (rev 125) +++ trunk/src/main/webapp/Preview.js 2011-06-20 09:40:04 UTC (rev 126) @@ -29,7 +29,7 @@ function sendRequest(method, url, text) { - http.open(method, url.value, true); + http.open(method, url, true); http.onreadystatechange = handleResponse; http.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); http.send("text="+text.value); @@ -41,7 +41,7 @@ { var response = http.responseText; document.getElementById("prevtitle").innerHTML = "Preview : "; - document.getElementById("prev").innerHTML = response; + document.getElementById("prev").innerHTML ="<div id=\"preview\" "+response+"</div>"; } else if (http.readyState == 4 && http.status == 406) { @@ -51,6 +51,6 @@ function preview(my_text, url) { - sendRequest("POST", url, my_text); + sendRequest("POST", "preview.action", my_text); } Modified: trunk/src/main/webapp/css/main.css =================================================================== --- trunk/src/main/webapp/css/main.css 2011-06-17 15:24:35 UTC (rev 125) +++ trunk/src/main/webapp/css/main.css 2011-06-20 09:40:04 UTC (rev 126) @@ -4,3 +4,22 @@ background-color: #b8b1b1; } +textarea { + width:72%; + margin:auto; + display:block; + min-height: 150px; +} + +#prevtitle { + margin-left:12%; +} + +#preview { + width:70%; + margin:auto; + display:block; + padding:1%; + border : solid 3px black; +} +