riotfamily / riot
- Source
- Commits
- Network (17)
- Issues (28)
- Graphs
-
Branch:
master
click here to add a description
click here to add a homepage
-
5 comments Created 4 months ago by MosToolbar doesn't work very well with IE6 - IE8 (Riot 9)BugAs discussed in the online conference:
1.) JavaScript Errors like "Das Objekt unterstützt diese Eigenschaft oder Methode nicht." breaks
some functions of the toolbar2.) IE7: Add-Component couldn't render the component list (a gray line is rendered instead)
Comments
-
0 comments Created 6 months ago by riotfamilyLabels are not rendered for nested-forms having only 1 elementBugWhen indent is set to
falseon a nested form, that contains only one single element the label is not rendered. The code causing this unexpected behavior is here:NestedForm_noindent.ftl, line 11:
<#if element.label?? && (elements.elements?size > 1)>I assume that the original intention was to support wrapping a nested-form around an (anonymous?) element to explicitly set the value to
null(see dgmsgsrc -> messageBundleEntry -> defaultMessage). However the label is shown there though it shouldn't.Comments
Please log in to comment. -
0 comments Created 5 months ago by cwoelkLeaving nested elements does not restore marching antsBugAnts are only rendered onmouseenter which is not fired when leaving a nested element. Fix: elements should be pushed on a stack when entered and popped on leave.
Comments
Please log in to comment. -
As the parent is mapped reverse, the moved ContentPage is not updated itself. This is why the onUpdate method of the LifeCycle is not called, leaving the pages path untouched. The overall result is that the page is being moved in the sitemap, but its request URL is left unchanged.
Comments
Please log in to comment. -
0 comments Created 5 months ago by yblImage Cropping Tool shows inconvenient preview frameBugIf no specific image height is set, the preview frame has a height of 100px and is not expandable through dragging and clicking which makes it impossible to crop images that are supposed to have a height of more than 100px
Comments
Please log in to comment. -
6 comments Created 4 months ago by al-dexterStrings are not translatable in notifications and in search formBugIn notification popups keys for message bundle are null, and in search form all strings are hard-coded and have no keys for message bundle at all.
Comments
Please provide some more details, i.e. which strings exactly are hard-coded and which keys are null (and when)? Classnames and line numbers would certainly also be helpful.
If DAO implements Searchable interface, then list, where this DAO is used gets a nested form to enter a search string. The strings in this form (Search, Apply, Reset) are not translatable.
Null-keys are there for strings in notification popup, i.e. "Your cahnges have been saved" or "Item "XYZ" successfully deleted." I have seen it in class org.riotfamily.dbmsgsrc.RiotDbMessageSource in method revealCodes(String message, String... codes).
And one thing more: label for riot-chooser button doesn't take in attention message key "label.chooser.choose".The filter form now uses the following messageKeys:
label.list.filter.apply label.list.filter.reset label.list.filter.searchBTW, the riot:chooser button looks for the following keys:
[formId].[property].choose [className].[property].choose label.chooser.chooseThe codes are just not exposed using toggle-i18n as the current code-revelation mechanism doesn't work for attribute values.
(Closed by ca45a17)
Please log in to comment.Almost all works wonderful, except one thing: global keys such label.chooser.choose and confirm.delete are ignored. Only keys with concrete formId or property are taken into account.
-
0 comments Created 4 months ago by al-dextereditable-if-new blocks validation error messagesBug"required" and "regex" properties for textfield tag don't show any error messages in form, if this textfield tag surrounded by "editable-if-new" tag.
Comments
Please log in to comment. -
1 comment Created 5 months ago by cwoelkBugCropper JS Issue - Can't resize heightFeedbackWhen the image configuration has both (min & max) values for width and height, the corner is moveable on the x-axix only, but never on the y-axis to make the image smaller. I.E. 100-600 px×100-600 px
Test configuration:
<media:image-upload min-width="100" min-height="100" max-width="600" max-height="600" />Comments
-
4 comments Created 3 months ago by yblRichtext chunks require page reload before deletionBugIf new richtext chunks are created, one is able to edit the chunks but not to remove them. After a page reload everything works as expected again.
Comments
Works for me in riot-skeleton. Did you verify this with the latest version?
Please log in to comment.Any idea what could be different in your project from the paragraph-component in riot-skeleton?
-
Like in pre-9.0 versions it should be possible to choose a particular backoffice form by an discriminator value of a bean property. It would be great if java enums would be supported as discriminator.
Comments
Please log in to comment. -
0 comments Created 4 months ago by bole5FeatureFocus not returned to the original component after form save using CTRL+s (stayInForm)PatchI've just noticed that the "preserve focus" functionality after form save with CTRL+s doesn't work.
The problem lies in the function
save(stayInForm)ofform.ftlwhich creates hidden "focus" element used to return focus to correct element after form is reloaded.
The value that is currently submitted is textual representation of the component i.e. [HTMLTextElement]. What we really want to send here is theidproperty of the activeElement instead.My fix was to change
save()function to:function save(stayInForm) { if (stayInForm) { form.insert(new Element('input', { type: 'hidden', name: 'focus', value: (document.activeElement.id) ? document.activeElement.id.match(/^e\d+/g) : null})); } Element.addClassName(document.body, 'busy'); form.down('input.button-save').click(); }As you can see, I modified the code to send the
idof the component. Thisidis matched for pattern (^e\d+) which is for a valid element of the form. This works quite well even for cases when you have richtext, which is dynamically generated element.
In order to avoid theNullPointerExceptionin the above Javascript we need to always have thedocument.activeElementproperty set. Therefore, we also need to change the focus listener in theform.ftlto:if (document.addEventListener && typeof document.activeElement == 'undefined') { document.addEventListener("focus", function(e) { if (e && e.target) { document.activeElement = e.target; } }, true); }I hope you can include the fix for this issue in the 9.0.x branch.
Comments
Please log in to comment. -
2 comments Created 4 months ago by bole5FeatureWhen the form is defined as a list filter, it doesn't behave properlyPatchI have following filter form with initializer:
<form id="filter-documents" bean-class="Document" initializer-class="DocumentFormInitializer"> <selectbox bind="website" label-property="website" choose-label="All..."> <options ref="restrictedStagingHqlOptionsModel"> <property name="hql" value="from Website" /> </options> </selectbox> <our:menufield bind="currentMenu" /> </form>Within the initializer I add change listener to the selectbox which
triggers change in the menufield. Currently, this works as expected on forms
but doesn't work in the filter forms since (1) the events are not propagated
at all and (2) the initializer actually is never initialized.Comments
That's true, dynamic from elements are not supported in filter-forms. We are currently re-writing riot-forms from scratch, so this issue will be resolved in one of the next releases. However there probably won't be a fix for the 9.0.x branch.
Please log in to comment.After some debugging in the
riot-coreand experimenting with different elements in list filters I was able to make it work.This is what currently happens with the filter forms:
The filterForm is created but its' init() method is never called which prevents it from calling
FormInitializer(if defined) and from registeringajax.js(required for event propagation).
That is fine as long as you don't have any components in filter that do implementJavaScriptEventAdapterand as such require propagation.In case you have any components which implement
JavaScriptEventAdapterin the filter, the scriptriot.Resources.waitFor('propagate', ...will be evaluated by thelist.js::updateFilter(), resulting in infinite wait sinceajax.jsnever gets loaded (see 1.)
That doesn't bother users since this happens in the background, but could slow down someone with older browser and on slower machine.
There is a simple fix for this. We just need to add a call to form's
init()method by addingfilterForm.init();at the end ofListState.setFormContext(FormContext formContext), just after line 98. This will solve both 1. and 2. mentioned above.So now we have components generating Ajax calls on events but still don't have anything listening and acting upon these events on the server side. In order to fix that we need to properly handle
XmlHttpRequestsin theTreeListScreen. I did it by copying code fromAjaxFormControllerintoTreeListScreen. I looked at the possibility to makeTreeListScreenextendAjaxFormControllerjust as theFormScreendoes, but it didn't look like a simple and straight forward change. I am sure it can be done much cleaner by not copying the code, so if you have other ideas please add your comments...Following changes need to be made to
TreeListScreen:
1. Addedif (ServletUtils.isXmlHttpRequest(request)) { processAjaxRequest(state.getFilterForm(), request, response); return null; }to
handleRequest()after line 319.
2. Copied following functions from theAjaxFormControllerto theTreeListScreen:isEventRequest(),processAjaxRequest(),processEventRequest(),isExclusiveRequest()andprocessForm()With all the changes above we would have fully functional filter form which propagates events correctly and calls initializer, just as any other form.
Do you think we could add the above described fixes (probably improved to avoid code duplication) to the 9.0.x? -
1 comment Created 4 months ago by bole5Minor problems with IE8 and ui.css of tiny_mce riot skinPatchWe've noticed that there are some problems in how split buttons are shown in IE8 (i.e. when using spellchecker plugin)
The patch below (based on tinymce 3.2.7's ui.css) solves the the issue:*** ui.css.orig 2010-03-31 17:58:27.269476452 +0200 --- ui.css 2010-03-31 17:47:13.000000000 +0200
* 21,27 ** .riotSkin table.mceToolbar, .riotSkin tr.mceFirst .mceToolbar tr td, .riotSkin tr.mceLast .mceToolbar tr td {border:0; margin:0; padding:0;} .riotSkin td.mceToolbar {padding-top:1px; vertical-align:top;background:#ebebeb;} .riotSkin .mceIframeContainer {border-top:1px solid #CCC; border-bottom:1px solid #CCC} ! .riotSkin .mceStatusbar {font:11px'Lucida Grande',Helvetica,Arial,sans-serif; overflow:visible; color:#666; display:block; height:20px} .riotSkin .mceStatusbar div {float:left; margin:3px 0 0 4px; color:#666;} .riotSkin .mceStatusbar a.mceResize {display:block; float:right; background:url('img/icons.png') -801px -2px; width:20px; height:20px; cursor:se-resize} .riotSkin .mceStatusbar a:hover {text-decoration:underline} --- 21,27 ---- .riotSkin table.mceToolbar, .riotSkin tr.mceFirst .mceToolbar tr td, .riotSkin tr.mceLast .mceToolbar tr td {border:0; margin:0; padding:0;} .riotSkin td.mceToolbar {padding-top:1px; vertical-align:top;background:#ebebeb;} .riotSkin .mceIframeContainer {border-top:1px solid #CCC; border-bottom:1px solid #CCC} ! .riotSkin .mceStatusbar {font:11px'Lucida Grande',Helvetica,Arial,sans-serif; line-height:16px; overflow:visible; color:#666; display:block; height:20px} .riotSkin .mceStatusbar div {float:left; margin:3px 0 0 4px; color:#666;} .riotSkin .mceStatusbar a.mceResize {display:block; float:right; background:url('img/icons.png') -801px -2px; width:20px; height:20px; cursor:se-resize} .riotSkin .mceStatusbar a:hover {text-decoration:underline}
* 36,42 ** .riotSkin .mceButton {display:block; border:1px solid transparent; width:20px; height:20px; margin-right:1px} .riotSkin a.mceButtonEnabled:hover {border:1px solid #ccc; background-color:#F1F1F1} .riotSkin a.mceButtonActive, .riotSkin a.mceButtonSelected {border:1px solid #ccc; background-color:#F1F1F1} ! .riotSkin .mceButtonDisabled .mceIcon {opacity:0.3; filter:alpha(opacity=30)} .riotSkin .mceButtonLabeled {width:auto} .riotSkin .mceButtonLabeled span.mceIcon {float:left} .riotSkin span.mceButtonLabel {display:block; font-size:10px; padding:4px 6px 0 22px; font-family:Tahoma,Verdana,Arial,Helvetica} --- 36,42 ---- .riotSkin .mceButton {display:block; border:1px solid transparent; width:20px; height:20px; margin-right:1px} .riotSkin a.mceButtonEnabled:hover {border:1px solid #ccc; background-color:#F1F1F1} .riotSkin a.mceButtonActive, .riotSkin a.mceButtonSelected {border:1px solid #ccc; background-color:#F1F1F1} ! .riotSkin .mceButtonDisabled .mceIcon {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} .riotSkin .mceButtonLabeled {width:auto} .riotSkin .mceButtonLabeled span.mceIcon {float:left} .riotSkin span.mceButtonLabel {display:block; font-size:10px; padding:4px 6px 0 22px; font-family:Tahoma,Verdana,Arial,Helvetica}
* 63,74 ** .riotSkin .mceSplitButton a, .riotSkin .mceSplitButton span {height:20px; display:block} .riotSkin .mceSplitButton a.mceAction {width:20px; border:1px solid #F0F0EE; border-right:0;} .riotSkin .mceSplitButton span.mceAction {width:20px; background:url('img/icons.png') 20px 20px;} ! .riotSkin .mceSplitButton a.mceOpen {width:9px; border:1px solid #F0F0EE;} ! .riotSkin .mceSplitButton span.mceOpen {width:9px; background:url('img/icons.png') -741px 0;} .riotSkin table.mceSplitButtonEnabled:hover a.mceAction, .riotSkin .mceSplitButtonHover a.mceAction, .riotSkin .mceSplitButtonSelected a.mceAction {border:1px solid #0A246A; border-right:0; background-color:#B2BBD0} ! .riotSkin table.mceSplitButtonEnabled:hover a.mceOpen, .riotSkin .mceSplitButtonHover a.mceOpen, .riotSkin .mceSplitButtonSelected a.mceOpen {border:1px solid #0A246A;} ! .riotSkin table.mceSplitButtonEnabled:hover span.mceOpen, .riotSkin .mceSplitButtonHover span.mceOpen, .riotSkin .mceSplitButtonSelected span.mceOpen {background-color:#B2BBD0} ! .riotSkin .mceSplitButtonDisabled .mceAction, .riotSkin .mceSplitButtonDisabled span.mceOpen {opacity:0.3; filter:alpha(opacity=30)} .riotSkin .mceSplitButtonActive a.mceAction {border:1px solid #0A246A; background-color:#C2CBE0} .riotSkin .mceSplitButtonActive a.mceOpen {border-left:0;}
--- 63,74 ---- .riotSkin .mceSplitButton a, .riotSkin .mceSplitButton span {height:20px; display:block} .riotSkin .mceSplitButton a.mceAction {width:20px; border:1px solid #F0F0EE; border-right:0;} .riotSkin .mceSplitButton span.mceAction {width:20px; background:url('img/icons.png') 20px 20px;} ! .riotSkin .mceSplitButton a.mceOpen {width:9px; background:url(img/icons.png) -741px 0; border:1px solid #F0F0EE;} ! .riotSkin .mceSplitButton span.mceOpen {display:none} ! .riotSkin table.mceSplitButtonEnabled:hover a.mceAction, .riotSkin .mceSplitButtonHover a.mceAction, .riotSkin .mceSplitButtonSelected a.mceAction {border:1px solid #0A246A; border-right:0; background-color:#B2BBD0} ! .riotSkin table.mceSplitButtonEnabled:hover a.mceOpen, .riotSkin .mceSplitButtonHover a.mceOpen, .riotSkin .mceSplitButtonSelected a.mceOpen {background-color:#B2BBD0; border:1px solid #0A246A;} ! .riotSkin .mceSplitButtonDisabled .mceAction, .riotSkin .mceSplitButtonDisabled a.mceOpen {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)} .riotSkin .mceSplitButtonActive a.mceAction {border:1px solid #0A246A; background-color:#C2CBE0} .riotSkin .mceSplitButtonActive a.mceOpen {border-left:0;}
* 106,112 ** .riotSkin .mceMenuItemSub a {background:url('img/menu-arrow.png') no-repeat top right;}
/ Progress,Resize / ! .riotSkin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; filter:alpha(opacity=50); background:#FFF} .riotSkin .mceProgress {position:absolute; left:0; top:0; z-index:1001; background:url('img/progress.gif') no-repeat; width:32px; height:32px; margin:-16px 0 0 -16px} .riotSkin .mcePlaceHolder {border:1px dotted gray}
--- 106,112 ---- .riotSkin .mceMenuItemSub a {background:url('img/menu-arrow.png') no-repeat top right;}
/ Progress,Resize / ! .riotSkin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; -ms-filter:'alpha(opacity=50)'; filter:alpha(opacity=50); background:#FFF} .riotSkin .mceProgress {position:absolute; left:0; top:0; z-index:1001; background:url('img/progress.gif') no-repeat; width:32px; height:32px; margin:-16px 0 0 -16px} .riotSkin .mcePlaceHolder {border:1px dotted gray}
Comments
Please log in to comment.Hi Boris,
if you forked the repository, I could integrate your patches with a single click in GitHub's web-interface.
Here's a good tutorial to get started:
http://railsontherun.com/2008/03/03/how-to-use-github-and-submit-a-patch/If you don't want to use Git locally, you can even submit patches via the web-interface by clicking the "edit" button in your fork:
http://forum.jquery.com/topic/howto-submit-a-patch-to-jquery-ui-using-the-github-web-interface -
Currently, there is code in list.js that adds "busy" to the body
class when commands are executed. This works quite well, but there
is no placeholder for showing the "Please wait ..." message, so
the only way to have it is using screenlet containing code:<@c.message "label.busy">Please wait ...</@c.message>on every list and form.
(In case you wonder why placeholder, I tried only to change the cursor to wait on busy, but that doesn't work properly with IE8,
so I thought that good old "Please wait..." message should do
the job much better...)Also the body class doesn't get changed when user clicks on
save in the forms. I suggest the following improvements:1) Add dummy and hidden container to the screen.ftl:
<div id="busy_indicator"> <@c.message "label.busy">Please wait ...</@c.message> </div>also make it hidden as default in common.css:
#busy_indicator { display: none; position: absolute; right: 20px; top: 0px; padding: 2px 4px; background-color: ${error_color}; color: #FFFFFF; z-index: 2000; }2) To indicate that user is saving a form (CTRL+S or save button),
add following code to function save(stayInForm):(line 54) just before a call to form.down():<code>Element.addClassName(document.body, 'busy');</code>3) To indicate that user us using a filter or page browsing on a list page add
calls to setBusy() and setIdle() to list.js function updateRowsAndPager().4) Add support in
resources.jsto have global LOADING and LOADED states indicating that all css and js have been loaded, which can be hooked into using callbacks.Comments
Please log in to comment.Alternatively, we could use the same way as it is done by Riot 8 (
dwr.engine.setPreHook() and dwr.engine.setPostHook()).Example code we can try to embed somewhere after a RiotList is created:
var outstanding = 0; dwr.engine.setPreHook(function() { if (outstanding == 0) Element.addClassName(document.body, 'busy'); outstanding++; }); dwr.engine.setPostHook(function() { outstanding--; if (outstanding == 0) Element.removeClassName(document.body, 'busy'); });If we choose to use the hooks, we can safely remove the
Element.addClassNameandElement.removeClassNamefrom setBusy() and setIdle() in RiotList -
0 comments Created 6 months ago by riotfamilySupport non-standard ports when generating absolute page URLsFeatureThe Goto Site command does not work correctly when the application is running on other ports than 80/443 because the port number is not included in the absolute URL being constructed. Consider using the port of the current request (if available) or make it configurable via application.properties.
Comments
Please log in to comment. -
0 comments Created 6 months ago by riotfamilySupport URL lookup for multi-action handlersFeatureReverseHandlerMappings should support URL-resolution of handlers with multiple @RequestMapping annotations.
Comments
Please log in to comment. -
0 comments Created 6 months ago by riotfamilyAllow riot:chooser to select items that are no leafsFeatureCurrently the choose button is only available on the specified target list. It would be nice if one could select items from higher-level lists if they are assignment-compatible. This must of course be configurable - an option might be to specify multiple target lists.
Comments
Please log in to comment. -
1 comment Created 5 months ago by jflUse JS Cropper as Image preview, if cropping is disabledFeature -
0 comments Created 6 months ago by riotfamilyAllow specifying labels for UI elements (not only message keys)FeatureCurrently all UI labels are read from a MessageSource. As most applications only use a single language for their admin interface it would be convenient if one could specify labels directly.
Comments
Please log in to comment. -
After the server has been restarted, the open list views (such as commands inside sitemap) don't work correctly. List has to be refreshed.
Comments
-
0 comments Created 4 months ago by bole5User looses work in progress when server is restartedFeatureCurrently when server is restarted our users loose all work in progress since they get automatically redirected to the login page. This is caused by the implementation of the
dwr.engine.setTextHtmlHandlerinlist.jsthat currently looks like this:
dwr.engine.setTextHtmlHandler(function() {location.reload();});
Possible solution:
Make user-friendly warning about session being expired and allow user to copy data before he/she is forced to login again:
dwr.engine.setTextHtmlHandler(function(pageData) {riot.notification.show({"icon":"","autohide": false, "duration" : 600, "title":"Session expired", "message":"Your session has expired! <br />Please save your work to an empty notepad and login again by <a href=\"#\" onclick=\"location.reload()\">reloading</a> this page."});});
Comments
Please log in to comment. -
4 comments Created 4 months ago by bole5Add common.xml that is included by both riot-servlet.xml and website-servlet.xmlFeatureOriginal issue title: minifyCSS and minifyScript controllers are not working
I get following error message when running riotfamily.
Expression pathForHandler("minifyScriptController") is undefined on line 375, column 41 in classpath:org/riotfamily/common/web/macro/common.ftl. The problematic instruction: ---------- ==> macro resource [on line 81, column 1 in classpath:org/riotfamily/common/web/macro/common.ftl] in user-directive c.scripts [on line 44, column 9 in classpath:org/riotfamily/core/view/riot.ftl] in user-directive riot.scripts [on line 5, column 9 in classpath:/org/riotfamily/core/security/ui/LoginForm.ftl] ----------After spending some time debugging this issue it seems the problem is with the {version} in riot-core/riot-servlet.xml where the bean minifyScript is defined:
<bean id="minifyScriptController" name="/resources/{version}/joined.js" class="org.riotfamily.common.web.performance.MinifyScriptController"> <description> Controller to compress (minify) JavaScript files. </description> <constructor-arg ref="javaScriptCompressor" /> </bean>The same problem is with the minifyCSSController...
My workaround so far has been overriding current controller with the same mapping but without version: name="/resources/joined.js". That seems to work just fine, but it would be nice to see this issue solved "properly".Comments
This is strange. First let me say that is works for me (and others using Riot 9.0.x).
The CommonMacroHelper uses the HandlerUrlResolver from the website-servlet, hence it should use the controllers defined in common/META-INF/riot/website-servlet.xml, which are mapped to
/riot-utils/joined.jsand/riot-utils/joined.css.In fact the minify controllers in riot-servlet.xml aren't used anymore and should be removed, but their presence shouldn't do any harm either.
For me the Riot login page looks like this:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Riot Login</title> <script src="/riot-skeleton/riot-utils/joined.js?files=/riot/resources/9-0-0/prototype/prototype.js,/riot/resources/9-0-0/scriptaculous/effects.js,/riot/resources/9-0-0/riot-js/resources.js,/riot/resources/9-0-0/riot-js/window/dialog.js,/riot/resources/9-0-0/riot-js/notification/notification.js&081328" type="text/javascript"></script> <link rel="stylesheet" type="text/css" href="/riot-skeleton/riot/resources/9-0-0/riot-js/window/dialog.css" /> <link rel="stylesheet" type="text/css" href="/riot-skeleton/riot/resources/9-0-0/riot-js/notification/notification.css" /> <link rel="stylesheet" type="text/css" href="/riot-skeleton/riot/resources/9-0-0/style/common.css" /> <link rel="stylesheet" type="text/css" href="/riot-skeleton/riot/resources/9-0-0/style/logo.css" /> <link rel="stylesheet" type="text/css" href="/riot-skeleton/riot/resources/9-0-0/style/login.css" />Any ideas what could be different in your setup?
Yes, well I only use following riot modules:
core, common, forms, media, revolt and cachius. Also, I have my ownwebsite-servlet.xmland not the one from thecommonmodule, so the minifyCSS and minifyScript beans get created by theriot-core/riot-servlet.xml.
If you remove the these definitions from theriot-core/riot-servlet.xml, it would work without any errors, and the users would need to define them in their configs if they want.
Other solution would be leaving these definitions for the "rare" users like us, and removing ${version} from the name mapping...Ah okay, I see. Perhaps we could move them to a separate file which is then included by both servlets. This way we could avoid the rather confusing duplication.
Please log in to comment.That is certainly a good solution also in case with other duplicated beans in both
core and common, such as:SecurityContextInterceptor, FlashModelExposer, etc.... -
1 comment Created 4 months ago by cwoelkEnhance screens configuration override possibilitiesFeatureAt current in 9 if you want to add custom commands to lists, overriding these is not possible unless the list itself is defined as a toplevel bean. Use case is to add a custom command to the "sites" list.
Comments
-
Message Bundle Entries shall be escaped when rendered if possible
Comments
Please log in to comment.I suppose you mean XML escaped? So what about messages containing markup? I'd say it should be up to the view-layer (FreeMarker) to perform the escaping (not the MessageSource). It would certainly be nice to escape all output by default, i.e. every
${...}expression, which would then automatically apply to messages, too.This could probably be done on a per-project level by adding an escape-directive to the root template. But in order to do so, we have to make sure that nothing gets double-escaped, hence we we need to check every single place where output is generated.
We then also need another method to embed links in messages (which would be a good thing to have anyway). Currently we usually do it like this:
Yes, I've read the <a href="{0}">terms and conditions</a>.An alternative might be to use Markdown synatx instead:
Yes, I've read the [terms and conditions]({0}).This still looks quite messy, so it might be worth considering a completely different placeholder-pattern and not use Java's MessageFormat at all.
-
0 comments Created 3 months ago by yblContent forms depending on context (path)FeatureIt would be nice, if one could have different content forms, depending on the context path.
Comments
Please log in to comment. -
Sitemap: <p:type-ref> in <p:type> leads to Not-Found-Exception
0 comments Created 2 months ago by MosExample:
<p:system-page name="searches" path-component="search" handler="folderController">
<p:system-page name="one" handler="searchPageController" form="searchForm"> <p:type name="waitingScreen" > <p:handler> <bean class="org.riotfamily.common.web.controller.CacheableViewController" > <property name="viewName" value="pages/common/static.ftl" /> </bean> </p:handler> </p:type> </p:system-page> <p:system-page name="two" handler="searchPageController"> <p:type-ref name="waitingScreen" /> </p:system-page> <p:type name="three" handler="searchPageController" > <p:type-ref name="waitingScreen" /> </p:type> </p:system-page>"waitingScreen" works well for page "one" and "two" but for type "three" it leads to:
Caused by: java.lang.IllegalArgumentException: Referenced type not found: waitingScreen
at org.springframework.util.Assert.notNull(Assert.java:112) at org.riotfamily.pages.config.PageTypeRef.register(PageTypeRef.java:22) at org.riotfamily.pages.config.AbstractPageType.register(AbstractPageType.java:86) at org.riotfamily.pages.config.AbstractPageType.register(AbstractPageType.java:86) at org.riotfamily.pages.config.SystemPageType.register(SystemPageType.java:107) at org.riotfamily.pages.config.SystemPageType.register(SystemPageType.java:110) at org.riotfamily.pages.config.SitemapSchema.setRootPage(SitemapSchema.java:95) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:1101) ... 49 moreComments
Please log in to comment.




The skeleton works for me in IE6 & IE8 without any errors. In IE7 the component selection box is rendered too narrow (as described by Mos). Besides that everything works okay in IE7.
Regarding 2.) In IE8 same problem as IE7 for me
Regarding 1.): The error occurs only after I use the richtext-function on the page. Can you please check if you can reproduce it?
Further I started the Debugger in IE8 to check where the error is coming from:
Das Objekt unterstützt diese Eigenschaft oder Methode nicht: dialog.js,inplace.js,components.js&lang=en, Zeile 129 Zeichen 648
The problematic code that throws the exception:
return document.body.select(this.selector)}
More context of the code, so that you have a chance to found the code snippet. ;)
this.element.className=this.getClassName();riot.toolbar.buttonSelected(this);return true}return false},click:function(){if(this.select()){this.applyHandler(true)}},activate:function(){this.active=true;this.element.className=this.getClassName();return this},enable:function(){if(!this.enabled){this.enabled=true;this.element.className=this.getClassName()}return this},disable:function(){this.enabled=false;this.reset();if(riot.toolbar){riot.toolbar.buttonDisabled(this)}return this},reset:function(){if(this.selected){this.selected=false;this.applyHandler(false)}this.element.className=this.getClassName();return this},getHandlerTargets:function(){return document.body.select(this.selector)},applyHandler:function(a){if(a&&this.precondition){this.precondition(this.applyHandlerInternal.bind(this,true))}else{if(this.beforeApply){this.beforeApply(a)}this.applyHandlerInternal(a);if(this.afterApply){this.afterApply(a)}if(a&&window.onRiotToolbarClick){onRiotToolbarClick(this.handler)}}},applyHandlerInternal:function(b){dwr.engine.setActiveReverseAjax(true);
Problematic code from above seems to be in the file "toolbar.js" line 182
Fix is here: 9e48db4
Fix for IE7 min width: ab6b486