On 11/03/2009 01:34 PM, anamarias (SVN) wrote:
Author: anamarias
Date: 2009-11-03 13:34:40 +0100 (Tue, 03 Nov 2009)
New Revision: 24799
Log:
advanced q&a app
Added: sandbox/applications/xwiki-application-qa/pom.xml
===================================================================
--- sandbox/applications/xwiki-application-qa/pom.xml (rev 0)
+++ sandbox/applications/xwiki-application-qa/pom.xml 2009-11-03 12:34:40 UTC (rev
24799)
@@ -0,0 +1,14 @@
+<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
+<parent>
+<artifactId>xwiki-applications</artifactId>
+<groupId>com.xpn.xwiki.platform.applications</groupId>
+<version>15</version>
+</parent>
+<modelVersion>4.0.0</modelVersion>
+<groupId>com.xpn.xwiki.platform.applications</groupId>
+<artifactId>xwiki-application-qa</artifactId>
+<packaging>xar</packaging>
+<name>XWiki Platform - Applications - Question&Answers</name>
+<version>1.0-SNAPSHOT</version>
+<description>Q&A Application</description>
Q&A is not valid XML. The XML parser used by Maven complains about it
and fails to build.
+</project>
Added: sandbox/applications/xwiki-application-qa/src/main/resources/QA/QASearch.xml
===================================================================
--- sandbox/applications/xwiki-application-qa/src/main/resources/QA/QASearch.xml
(rev 0)
+++
sandbox/applications/xwiki-application-qa/src/main/resources/QA/QASearch.xml 2009-11-03
12:34:40 UTC (rev 24799)
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<xwikidoc>
+<web>QA</web>
+<name>QASearch</name>
[snip]
+{{html clean="false" wiki="true"}}
+= $msg.get('qa.search.title') =
+
+<form action="">
Please don't use a table here. Tables are supposed to be used only for
data that semantically belongs in a table.
+<table>
+<tr>
+<td>
+<input type="text" name="text"
value="$!request.text" size="40"/>
Use $xwiki.getXMLEncoded($!{requesttext}) to prevent cross-site
scripting and broken layout if the user enters some quotes.
+</td>
+<td>
+<input type="submit"
value="$msg.get('qa.search.submit.button.value')"/>
In general we wrapp all buttons with <span class="buttonwrapper">
+</td>
+</tr>
+</table>
+</form>
+<p/>
+#if($request.getParameter("text"))
+ #set($text = $request.getParameter("text"))
+#else
+ #set($text = "")
+#end
Shorter variant:
#set($text = "$!{request.getParameter('text')")
+
This is strange, why are you doing it like this?
+#set($space = "$doc.space")
+{{include document="${space}Code.WebSearchCode"/}}
+{{include document="XWiki.Results"/}}
> +{{/html}}
> +{{/velocity}}
> +</content></xwikidoc>
> \ No newline at end of file
>
>
> Added: sandbox/applications/xwiki-application-qa/src/main/resources/QA/WebHome.xml
> ===================================================================
> --- sandbox/applications/xwiki-application-qa/src/main/resources/QA/WebHome.xml
(rev 0)
> +++
sandbox/applications/xwiki-application-qa/src/main/resources/QA/WebHome.xml 2009-11-03
12:34:40 UTC (rev 24799)
> @@ -0,0 +1,252 @@
> +<?xml version="1.0" encoding="UTF-8"?>
+
> +<xwikidoc>
> +<web>QA</web>
> +<name>WebHome</name>
> [snip]
You should use the current color theme for styling.
> +<code>.qaSearchContainer, .qaAddContainer {
> + background-color:#EFF6D7;
> + padding:10px;
> + margin-bottom:10px;
> +}
+
> +.qaAddContainer {
> + background-color:#FFFACD;
> +}
+
> +.qaSearch, .qaAdd {
> + font-size:1.5em;
> + font-weight:bold;
> + line-height:2.5em;
> +}
+
> +.qaSearchName, .qaAddName {
> + display: inline;
> + color:#B5C742;
> +}
+
> +.qaAddName {
> + color:#E78013;
> +}
+
> +.qaSearchValue, .qaAddValue {
> + display: inline;
> + margin: 0;
> +}
+
> +.qaSearchValue form, .qaAddValue form {
> + display: inline;
> +}
+
> +.qaSearchValue form
input[type="text"], .qaAddValue form input[type="text"] {
> + font-size:0.9em;
px heights are not good. They don't scale well if the user increases the
font size, or if his OS in general uses a different DPI.
> + height:20px;
> +}
+
> +.qaSearchValue form
input[type="submit"], .qaAddValue form input[type="submit"] {
> + color:#4D4D4D;
> + font-size:0.6em;
> + height:26px;
> +}
>
+</code></property><property><name></name></property><property><parse>0</parse>
> +</property>
> +<property>
> [snip]
> +<content>{{include document="QACode.Macros" /}}
> +{{velocity filter="none"}}
> +## QA variables
> +#set($qaSpace = "$doc.space")
> +#set($qaWebHome = "${qaSpace}.WebHome")
> +#set($qaClassName = "${qaSpace}Code.${qaSpace}Class")
> +#set($qaSheet = "${qaSpace}Code.${qaSpace}Sheet")
> +#set($qaTemplate = "${qaSpace}Code.${qaSpace}Template")
> +#set($qaSearch = "${qaSpace}.${qaSpace}Search")
> +##
> +$xwiki.ssx.use("$qaWebHome")
> +##
> +{{html clean="false" wiki="true"}}
> += $msg.get('qa.webhome.title') =
> +## ---------------------------------------------------
> +## Let the user search for QAs
> +## ---------------------------------------------------
> +<div class='qaSearchContainer'>
> +<div class='qaSearch'>
> +<div class='qaSearchName'>Search:</div>
> +<div class='qaSearchValue'>
> +<form action="$xwiki.getURL("${qaSearch}")">
Not valid XHTML, since a form can contain only block level elements. You
must wrap the input elements in a <div> or <fieldset>.
+<input type="text"
name="text" value="$!request.text" size="40"/>
Again, use a buttonwrapper.
+<input type="submit"
value="$msg.get('qa.webhome.search.submit.button.value')"/>
+</form>
+</div>
+</div>
+</div>
+## ---------------------------------------------------
+## Let the user add QAs
+## ---------------------------------------------------
+<div class='qaAddContainer'>
+<div class='qaAdd'>
+<div class='qaAddName'>Submit:</div>
+<div class='qaAddValue'>
+<form action="" id="newqa">
Use a block wrapper for validity.
+<input type="hidden"
name="parent" value="${qaWebHome}" />
+<input type="hidden" name="template"
value="${qaTemplate}" />
+<input type="hidden" name="sheet" value="1"
/>
+<input type="hidden" name="webname"
value="${qaSpace}"/>
+<input type="hidden" name="name" value=""/>
+<input type="text" name="qa" value=""
size="40"/>
I know that the following code is copied from another XWiki document,
but it is not OK to use onclick.
> +<input type="submit"
value="$msg.get('qa.webhome.add.submit.button.value')" onclick='if
(updateName(this.form.qa,this.form.name)) { action="../../inline/" +
this.form.webname.value + "/" + this.form.name.value; this.form.submit(); }'
/>
> +</form>
> +</div>
> +</div>
> +</div>
+
> +## Display Question Class admin button
only for users with admin rights on the current space
> +#if($xwiki.hasAdminRights())
> +Questions Class:<a href='${xwiki.getURL("$qaClassName",
'edit', 'editor=class')}'>Edit Question Class Properties
(Metadata)</a>
> +#end
> +##
> +## ---------------------------------------------------
> +## Livetable for QA entries that have answers
> +## ---------------------------------------------------
> +== $msg.get('qa.answered.title') ==
> +#qaLiveGrid("ansqadiv" "$doc.space" true)
> +##
> +## ----------------------------------------------------
> +## Livetable for QA entries that have no answers yet
> +## ----------------------------------------------------
> +== $msg.get('qa.notanswered.title') ==
> +#qaLiveGrid("notansqadiv" "$doc.space" false)
+
> +{{/html}}
> +{{/velocity}}</content>
+</xwikidoc>
>
>
> Property changes on:
sandbox/applications/xwiki-application-qa/src/main/resources/QA/WebHome.xml
> ___________________________________________________________________
> Name: svn:executable
> + *
Why executable?
> Name: svn:keywords
> + Author Id Revision HeadURL
> Name: svn:eol-style
> + native
>
> Added:
sandbox/applications/xwiki-application-qa/src/main/resources/QACode/Install.xml
> ===================================================================
> --- sandbox/applications/xwiki-application-qa/src/main/resources/QACode/Install.xml
(rev 0)
> +++
sandbox/applications/xwiki-application-qa/src/main/resources/QACode/Install.xml 2009-11-03
12:34:40 UTC (rev 24799)
> @@ -0,0 +1,80 @@
> +<?xml version="1.0" encoding="UTF-8"?>
+
> +<xwikidoc>
> +<web>QACode</web>
> +<name>Install</name>
> [snip]
> +<content>{{velocity}}
> +#if(!$xwiki.hasAdminRights())
> +You are running this script as a non admin. It will have no effect. Login as admin.
> +#end
+
> +#set($transdoc =
$xwiki.getDocument("XWiki.XWikiPreferences"))
> +#set($ok = $transdoc.use("XWiki.XWikiPreferences"))
> +#set($transprefs = $transdoc.getValue("documentBundles"))
RecruitmentCode.Translations?
+#if($transprefs.indexOf("RecruitmentCode.Translations")==-1)
+#if($request.confirm=="1")
+#set($transprefs = "${transprefs},QACode.Translations")
+#set($ok = $transdoc.set("documentBundles", $transprefs))
+#set($ok = $transdoc.save())
+#end
This message should be before the #end above.
+* Added translation bundle to XWiki Preferences
Add an "everything OK" like message to let the user know that no work
needs to be done.
> +#end
+
Put this on an #else branch with a link back with a confirm=1 query
paraeter (if the current user has admin rights).
> +1.1 Additional Install steps
> +The page "QACode.Translations" also needs to be added to the translations
bundles in the XWiki Preferences / Programming section.
> +{{/velocity}}</content>
+</xwikidoc>
>
>
> Added:
sandbox/applications/xwiki-application-qa/src/main/resources/QACode/QAClass.xml
> ===================================================================
> --- sandbox/applications/xwiki-application-qa/src/main/resources/QACode/QAClass.xml
(rev 0)
> +++
sandbox/applications/xwiki-application-qa/src/main/resources/QACode/QAClass.xml 2009-11-03
12:34:40 UTC (rev 24799)
> @@ -0,0 +1,139 @@
> +<?xml version="1.0" encoding="UTF-8"?>
+
> +<xwikidoc>
> +<web>QACode</web>
> +<name>QAClass</name>
> [snip]
> +<class>
> +<answer>
> +</answer>
> +<country>
Why does a QA application need a country?
+</country>
+<fabrication>
Strange word in this context...
+</fabrication>
+<pays>
Who's paying?
+</pays>
+<question>
A problem with the StringClass is that it can only hold 255 characters.
Do you think it's enough?
> +<classType>com.xpn.xwiki.objects.classes.StringClass</classType>
> +</question>
> +</class>
>
> Added:
sandbox/applications/xwiki-application-qa/src/main/resources/QACode/QASheet.xml
> ===================================================================
> --- sandbox/applications/xwiki-application-qa/src/main/resources/QACode/QASheet.xml
(rev 0)
> +++
sandbox/applications/xwiki-application-qa/src/main/resources/QACode/QASheet.xml 2009-11-03
12:34:40 UTC (rev 24799)
> @@ -0,0 +1,261 @@
> +<?xml version="1.0" encoding="UTF-8"?>
+
> +<xwikidoc>
> +<web>QACode</web>
> +<name>QASheet</name>
> [snip]
> +<property>
> +<cache></cache>
> +</property>
> +<property>
Again, use the color theme.
> +<code>.qaContainer {
> + background-color:#EFF6D7;
> + padding:10px;
> +}
+
> +.qaQuestionContainer {
> + font-size:1.5em;
> + font-weight:bold;
> + line-height:2.5em;
> +}
+
> +.qaQuestionName {
> + color:#B5C742;
> +}
+
> +.qaQuestionValue { }
+
> +.qaMetadataContainer {
> + margin-left:40px;
> +}
+
> +.qaAnswerContainer {
> + border: 1px solid #D7D7D7;
> + padding:10px;
> + margin-top:10px;
> +}
+
> +.qaAnswerName {
> + color:#003399;
> + font-size:1.5em;
> + font-weight:bold;
> +}
+
> +.qaAnswerValue { }
+
> +.qaUnansweredContainer {
> + padding: 20px 40px;
> +}
+
> +.floatRight {
> + float: right;
> +}
+
> +.qaQuestionValue pre {
> + display: inline
> +}
>
+</code></property><property><name></name></property><property><parse>0</parse>
> +</property>
> +<property>
> +<use>onDemand</use>
> +</property>
> +</object>
> +<content>{{velocity filter="none"}}
> +#set($qaSpace = "$doc.space")
> +#set($qaClassName = "${qaSpace}Code.${qaSpace}Class")
> +#set($qaSheet = "${qaSpace}Code.${qaSpace}Sheet")
> +## CSS Stylesheet
> +$xwiki.ssx.use("$qaSheet")
> +##
> +{{html clean="false" wiki="true"}}
> +##
> +#set($qaObject = $doc.getObject("$qaClassName"))
> +#set($qaClass = $qaObject.xWikiClass)
> +##
> +## QA properties
.Value looks strange to me (C#). It's either .value or .getValue().
+#set($qaQuestion =
$qaObject.getProperty('question').Value)
+#set($qaAnswer = $qaObject.getProperty('answer').Value)
+= $qaQuestion =
+<div class='qaContainer'>
+<div class='qaQuestionContainer'>
+<span class='qaQuestionName'>Q:</span>
+<span
class='qaQuestionValue'>$doc.display('question')</span>
+</div>
+<div class='qaMetadataContainer'>
+ #foreach($prop in $qaClass.properties)
+ #set($propName = $prop.Name)
+ #if($propName != 'question'&& $propName !=
'answer')
+ ; $prop.prettyName
+ : $doc.display($prop.getName())
+ #end
+ #end
+</div>
+</div>
+#if($qaAnswer!='' || $context.action=='inline' )
+<div class='qaAnswerContainer'>
+ #if($context.action=='view')
+<div class='floatRight'><a
href="$doc.getURL('inline')">[Improve]</a></div>
+ #end
Too much HTML.
+<div
class='qaAnswerName'>A:</div>
+<div
class='qaAnswerValue'>$doc.display('answer')</div>
+</div>
+#else
+<div class='qaUnansweredContainer'>
+<b>This question has not been answered yet.</b><br
/>
And what am I supposed to do with this button if I don't have JavaScript
enabled? What's wrong with a plain link?
> +<input type="button" value="A: Answer Question"
onclick="window.location.href='$doc.getURL('inline')'"
/>
> +</div>
> +#end
> +{{/html}}
> +{{/velocity}}</content>
+</xwikidoc>
>
>
> Added:
sandbox/applications/xwiki-application-qa/src/main/resources/QACode/Translations.xml
> ===================================================================
> ---
sandbox/applications/xwiki-application-qa/src/main/resources/QACode/Translations.xml
(rev 0)
> +++
sandbox/applications/xwiki-application-qa/src/main/resources/QACode/Translations.xml 2009-11-03
12:34:40 UTC (rev 24799)
> @@ -0,0 +1,82 @@
> +<?xml version="1.0" encoding="UTF-8"?>
+
> +<xwikidoc>
> +<web>QACode</web>
> +<name>Translations</name>
> [snip]
> +<content>qa.webhome.title=Questions& Answers
> +qa.webhome.search.title=In order to find the information you're looking for, you
can use the search feature of your browser to search for QA entries displayed on this page
or use the search box below.
> +qa.webhome.search.submit.button.value=Go!
> +qa.webhome.add.title=If you don't find the QA you're looking for, create a
new QA using the following form and fill the answer once you've found it!
> +qa.webhome.add.submit.button.value=Add this QA
> +qa.webhome.table.answered.title={0} Answered QAs (latest first)
> +qa.webhome.table.notanswered.title={0} Unanswered QAs (latest first)
+
> +qa.search.title=QA Search
> +qa.search.submit.button.value=Search QAs
+
Where are these used?
> +qa.class.property.qa.question=Question
> +qa.class.property.qa.answer=Answer
> +qa.class.property.qa.country=Country
> +qa.class.property.qa.doc.date=Last Edited
> +qa.class.property.qa.doc.author=Last Author
> +qa.class.property.qa.doc.name=Questions
> +qa.class.property.qa.emptyvalue=-
> +qa.class.property.qa._actions=Actions
+
> +qa.answered.title=Answered QAs
> +qa.notanswered.title=Unanswered QAs</content>
+</xwikidoc>
>
>
> Added:
sandbox/applications/xwiki-application-qa/src/main/resources/QACode/WebHome.xml
> ===================================================================
> --- sandbox/applications/xwiki-application-qa/src/main/resources/QACode/WebHome.xml
(rev 0)
> +++
sandbox/applications/xwiki-application-qa/src/main/resources/QACode/WebHome.xml 2009-11-03
12:34:40 UTC (rev 24799)
> @@ -0,0 +1,61 @@
> +<?xml version="1.0" encoding="UTF-8"?>
+
> +<xwikidoc>
> +<web>QACode</web>
> +<name>WebHome</name>
> [snip]
> +<content></content>
A document with no content at all is not nice. At least put a short
message explaining what the space is for.
+</xwikidoc>
--
Sergiu Dumitriu
http://purl.org/net/sergiu/