Hi, Thanks a lot Marius, i’ve made a lot of progress… I now have a ‘Star rating’ based on a numeric field, type integer, min-value 1 max value of 5 In the custom display I have the following code: {{velocity}} #set($discard = $xwiki.ssx.use("tryControls.rangeValueSheet")) {{html clean=false}} <fieldset> <legend>Score</legend> <span class="rating"> #if($type == 'edit') #set($discard = $xwiki.jsfx.use("tryControls.rangeValueSheet")) #if($value == 5) <input type="radio" id="rating-5" name="rating" value="5" checked="checked" /> #else <input type="radio" id="rating-5" name="rating" value="5" /> #end <label for="rating-5">5</label> #if($value == 4) <input type="radio" id="rating-4" name="rating" value="4" checked="checked" /> #else <input type="radio" id="rating-4" name="rating" value="4" /> #end <label for="rating-4">4</label> #if($value == 3) <input type="radio" id="rating-3" name="rating" value="3" checked="checked"/> #else <input type="radio" id="rating-3" name="rating" value="3" /> #end <label for="rating-3">3</label> #if($value == 2) <input type="radio" id="rating-2" name="rating" value="2" checked="checked"/> #else <input type="radio" id="rating-2" name="rating" value="2" /> #end <label for="rating-2">2</label> #if($value == 1) <input type="radio" id="rating-1" name="rating" value="1" checked="checked"/> #else <input type="radio" id="rating-1" name="rating" value="1" /> #end <label for="rating-1">1</label> #else #if($value == 5) <input type="radio" id="rating-5" name="rating" value="5" disabled checked="checked" /> #else <input type="radio" id="rating-5" name="rating" value="5" disabled/> #end <label for="rating-5">5</label> #if($value == 4) <input type="radio" id="rating-4" name="rating" value="4" disabled checked="checked" /> #else <input type="radio" id="rating-4" name="rating" value="4" disabled/> #end <label for="rating-4">4</label> #if($value == 3) <input type="radio" id="rating-3" name="rating" value="3" disabled checked="checked"/> #else <input type="radio" id="rating-3" name="rating" value="3" disabled/> #end <label for="rating-3">3</label> #if($value == 2) <input type="radio" id="rating-2" name="rating" value="2" disabled checked="checked"/> #else <input type="radio" id="rating-2" name="rating" value="2" disabled/> #end <label for="rating-2">2</label> #if($value == 1) <input type="radio" id="rating-1" name="rating" value="1" disabled checked="checked"/> #else <input type="radio" id="rating-1" name="rating" value="1" disabled/> #end <label for="rating-1">1</label> #end </span> </fieldset> {{/html}} {{/velocity}}
I feel the code can be ‘shortened’ significantly? Suggestions on how? As you could see numeric value is displayed by radio button’s So if $value = 3 the third button is Checked. To make it look like a star rating I added a CSS extension sheet: (from http://lea.verou.me/2011/08/accessible-star-rating-widget-with-pure-css/) .rating { float:left; } /* :not(:checked) is a filter, so that browsers that don’t support :checked don’t follow these rules. Every browser that supports :checked also supports :not(), so it doesn’t make the test unnecessarily selective */ .rating:not(:checked) > input { position:absolute; top:-9999px; clip:rect(0,0,0,0); } .rating:not(:checked) > label { float:right; width:1em; padding:0 .1em; overflow:hidden; white-space:nowrap; cursor:pointer; font-size:200%; line-height:1.2; color:#ddd; text-shadow:1px 1px #bbb, 2px 2px #666, .1em .1em .2em rgba(0,0,0,.5); } .rating:not(:checked) > label:before { content: '★ '; } .rating > input:checked ~ label { color: #f70; text-shadow:1px 1px #c60, 2px 2px #940, .1em .1em .2em rgba(0,0,0,.5); } .rating:not(:checked) > label:hover, .rating:not(:checked) > label:hover ~ label { color: gold; text-shadow:1px 1px goldenrod, 2px 2px #B57340, .1em .1em .2em rgba(0,0,0,.5); } .rating > input:checked + label:hover, .rating > input:checked + label:hover ~ label, .rating > input:checked ~ label:hover, .rating > input:checked ~ label:hover ~ label, .rating > label:hover ~ input:checked ~ label { color: #ea0; text-shadow:1px 1px goldenrod, 2px 2px #B57340, .1em .1em .2em rgba(0,0,0,.5); } .rating > label:active { position:relative; top:2px; left:2px; } But my remaining problem is to SAVE the selected number? I have a record with a value of 4, so a 4-star rating is selected and displayed perfectly. If I select INLINE EDIT i’m able to SELECT 2 STARS (or any other), but as soon as I SAVE the 4 star rating is still there. How is this best done? Op 19 jun. 2014, om 09:24 heeft Marius Dumitru Florea <mariusdumitru.flo...@xwiki.com> het volgende geschreven: > On Tue, Jun 17, 2014 at 2:00 PM, Gerritjan Koekkoek > <gerritjankoekk...@gmail.com> wrote: >> Hi >> Op 17 jun. 2014, om 07:59 heeft Marius Dumitru Florea >> <mariusdumitru.flo...@xwiki.com> het volgende geschreven: >> >>> On Mon, Jun 16, 2014 at 4:53 PM, Gerritjan Koekkoek >>> <gerritjankoekk...@gmail.com> wrote: >>>> Hi, >>>> Yes, this surely helps but i fail to get it work as I hope it can. >>>> I have generated a app with App Within Minutes. >>>> >>>> In the sheet there is a construct like this: >>>> {{velocity}} >>>> {{html wiki="true"}} >>>> #set ($discard = $doc.use('TestStarRating.TestStarRatingClass')) >>>> #set ($discard = $services.localization.use('document', >>>> 'TestStarRating.TestStarRatingTranslations')) >>>> (% class="xform" %) >>>> ((( >>>> ; <label >>>> for="TestStarRating.TestStarRatingClass_0_Rating">$escapetool.xml($doc.displayPrettyName('Rating', >>>> false, false))</label> >>>> : $doc.display('Rating') >>>> ))) >>>> {{/html}} >>>> {{/velocity}} >>>> >>>> :$doc.display(‘Rating’) is ‘smart’ as it knows when in ‘View’ and ‘Edit’ >>>> mode. >>>> >>>> If I would go to the class and modify Custom Display >>> >>>> How can I keep the ‘smartness’ of $doc.display? >>> >>> Have you really looked at the code of the existing custom displayers >>> found on extensions.xwiki.org ? i.e. did you download the source XAR >>> and imported it in your wiki to check the code? It doesn't seem so, >>> because you would have seen something like: >>> >>> #if ($type == 'edit’) >> Yes, have looked at it and this is what puzzles me… >> In the generated sheet code from app-within minutes there is no notion of >> this… >> I think basically my question is: > >> If I keep $doc.display(‘rating’) in the sheet >> And build a IF then else for different behavior in View and Edit mode…will >> this work? > > If it works for the custom displayers published on > extensions.xwiki.org then it should work for you too. Have you tried > to use one of them? You don't have to do anything in the sheet except > calling $doc.display('propertyThatHasACustomDisplayer') . There are a > couple of Velocity variables available to the code of the custom > displayer. $type is one of them. Check the code of existing custom > displayers for the rest (if you don't see any #set for a variable then > it means it's predefined). > >> Or do I need to replace in the sheet $doc.display(‘rating’) with something >> else. >> In the sheet I know I can get the ‘old’ value (if any) and display it since >> I have the context of $doc >> In the Class i’m not knowing to what context variable I should refer to >> present the old value? >> >> Does my question/struggle make sense? >>>> >>>> I have the feeling that a velocity script in the custom display does not >>>> have notion of $doc? Or can I use this context variable? >>>> >>>> The important change I want to achieve is change the ‘radio button’ >>>> behavior’ in a star-rating behavior. >>>> Important is that this should stay visible in Read-mode as the numeric >>>> result 3 is less informative as seeing three stars. >>>> >>>> I’m inspired by this code: >>>> http://codepen.io/lsirivong/pen/ekBxI >>>> >>>> It uses CSS to style radiobuttons as star rating (and a small javascript) >>>> But it requires radiobuttons to stay visible in view mode… >>>> >>>> >>>> Op 10 jun. 2014, om 14:33 heeft Marius Dumitru Florea >>>> <mariusdumitru.flo...@xwiki.com> het volgende geschreven: >>>> >>>>> I don't think there is a documentation unfortunately, but there are 3 >>>>> examples on >>>>> http://extensions.xwiki.org/xwiki/bin/view/Main/WebHome#|t=extensions&p=1&l=30&s=doc.creationDate&d=desc&name=custom+display >>>>> . >>>>> >>>>> Hope this helps, >>>>> Marius >>>>> >>>>> On Thu, Jun 5, 2014 at 11:06 AM, Gerritjan Koekkoek >>>>> <gerritjankoekk...@gmail.com> wrote: >>>>>> Hi >>>>>> >>>>>> We are trying to develop questionnaires within xwiki. >>>>>> In order to get clear answers from people we prefer static lists above >>>>>> text >>>>>> fields which would be more difficult to analyze. >>>>>> >>>>>> As a approach we start with appWithinMinutes and add attributes of type >>>>>> static list >>>>>> >>>>>> Use case 1: >>>>>> When we want the user to select one of a limited set of options we >>>>>> typical >>>>>> use radio button as input control. >>>>>> >>>>>> In edit mode this works fine. >>>>>> But in collaborative mode this does not work very well for us. >>>>>> What we mean by collaborative mode? >>>>>> We have patients discussing the questionnaire with the expert. >>>>>> Over the internet they both look at the page which holds the >>>>>> questionnaire >>>>>> already completed by the patient... >>>>>> But since default XWiki is showing only the value selected discussions >>>>>> about why the patient chose the one option above the other are too >>>>>> difficult. >>>>>> We would like the radiobuttons view in edit mode, but disabled for >>>>>> modification; especially since in view mode changing the elected >>>>>> option... >>>>>> >>>>>> Would it be possible to modify the class and add something in the "Custom >>>>>> Display"? >>>>>> Is there a useful document on how the custom display option for classes >>>>>> works? >>>>>> >>>>>> Use case 2: >>>>>> Some questions are of the type "How much would you agree" >>>>>> Then the user can select between totally disagree, somewhat disagree, >>>>>> neutral, somewhat agree totally agree. >>>>>> We have now selected a static list with 5 options labeled as above... >>>>>> But on the internet we often see sliders that can be put in 5 positions >>>>>> (from left to right or from top to bottom) >>>>>> >>>>>> Would it be possible to use such sliders via Custom Display. As a base >>>>>> attribute we would then probably switch from static list to a numeric >>>>>> field >>>>>> holding the value of the slider. >>>>>> Same as in use case 1; can we also show the slider disabled in >>>>>> 'collaborative mode' >>>>>> >>>>>> Many thanks for suggestions or links to documents that describe the >>>>>> 'custom >>>>>> display' >>>>>> >>>>>> Gerritjan >>>>>> _______________________________________________ >>>>>> users mailing list >>>>>> users@xwiki.org >>>>>> http://lists.xwiki.org/mailman/listinfo/users >>>>> _______________________________________________ >>>>> users mailing list >>>>> users@xwiki.org >>>>> http://lists.xwiki.org/mailman/listinfo/users >>>> >>>> _______________________________________________ >>>> users mailing list >>>> users@xwiki.org >>>> http://lists.xwiki.org/mailman/listinfo/users >>> _______________________________________________ >>> users mailing list >>> users@xwiki.org >>> http://lists.xwiki.org/mailman/listinfo/users >> >> _______________________________________________ >> users mailing list >> users@xwiki.org >> http://lists.xwiki.org/mailman/listinfo/users > _______________________________________________ > users mailing list > users@xwiki.org > http://lists.xwiki.org/mailman/listinfo/users _______________________________________________ users mailing list users@xwiki.org http://lists.xwiki.org/mailman/listinfo/users