You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by "Ernesto Reinaldo Barreiro (Created) (JIRA)" <ji...@apache.org> on 2011/11/05 08:06:51 UTC
[jira] [Created] (WICKET-4199) add a hook to SubmitLink that
allows to insert arbitrary JavaScript before code that submit the form
add a hook to SubmitLink that allows to insert arbitrary JavaScript before code that submit the form
------------------------------------------------------------------------------------------------------
Key: WICKET-4199
URL: https://issues.apache.org/jira/browse/WICKET-4199
Project: Wicket
Issue Type: Improvement
Components: wicket
Affects Versions: 1.5.2
Reporter: Ernesto Reinaldo Barreiro
Priority: Minor
I need to execute some JavaScript before form is submmited and as method getTriggerJavaScrip is final I have to do it like
SubmitLink link = new SubmitLink("link") {
private static final long serialVersionUID = 1L;
@Override
protected void onComponentTag(ComponentTag tag)
{
super.onComponentTag(tag);
// If we're disabled
if (!isLinkEnabled())
{
disableLink(tag);
}
else
{
if (tag.getName().equalsIgnoreCase("a"))
{
tag.put("href", "#");
}
tag.put("onclick", getTriggerJavaScript1());
}
}
protected String getTriggerJavaScript1()
{
if (getForm() != null)
{
// find the root form - the one we are really going to submit
Form<?> root = getForm().getRootForm();
StringBuilder sb = new StringBuilder(100);
// my code
sb.append("document.getElementById('");
sb.append(description.getMarkupId());
sb.append("').value=CKEDITOR.instances.");
sb.append(description.getMarkupId());
sb.append(".getData();");
// end of my code
sb.append("var e=document.getElementById('");
sb.append(root.getHiddenFieldId());
sb.append("'); e.name=\'");
sb.append(getInputName());
sb.append("'; e.value='x';");
sb.append("var f=document.getElementById('");
sb.append(root.getMarkupId());
sb.append("');");
if (shouldInvokeJavaScriptFormOnsubmit())
{
if (getForm() != root)
{
sb.append("var ff=document.getElementById('");
sb.append(getForm().getMarkupId());
sb.append("');");
}
else
{
sb.append("var ff=f;");
}
sb.append("if (ff.onsubmit != undefined) { if (ff.onsubmit()==false) return false; }");
}
sb.append("f.submit();e.value='';e.name='';return false;");
return sb.toString();
}
else
{
return null;
}
}
};
This ugly and moreover if form submiting logic changes my extended link might stop to work properly. I propose adding a method decorareTriggerJavaScript that allows users to decorate the form submiting script. e.g. in my case
SubmitLink link = new SubmitLink("link") {
private static final long serialVersionUID = 1L;
@Override
protected void decorareTriggerJavaScript(StringBuilder sb) {
StringBuilder sb1 = new StringBuilder(100);
sb1.append("document.getElementById('");
sb1.append(description.getMarkupId());
sb1.append("').value=CKEDITOR.instances.");
sb1.append(description.getMarkupId());
sb1.append(".getData();");
sb.insert(0, sb1.toString());
}
};
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Updated] (WICKET-4199) add a hook to SubmitLink that
allows to insert arbitrary JavaScript before code that submit the form
Posted by "Ernesto Reinaldo Barreiro (Updated) (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/WICKET-4199?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Ernesto Reinaldo Barreiro updated WICKET-4199:
----------------------------------------------
Attachment: SubmitLink.java.patch
patch that adds method to class
> add a hook to SubmitLink that allows to insert arbitrary JavaScript before code that submit the form
> ------------------------------------------------------------------------------------------------------
>
> Key: WICKET-4199
> URL: https://issues.apache.org/jira/browse/WICKET-4199
> Project: Wicket
> Issue Type: Improvement
> Components: wicket
> Affects Versions: 1.5.2
> Reporter: Ernesto Reinaldo Barreiro
> Priority: Minor
> Labels: wicket
> Attachments: SubmitLink.java.patch
>
> Original Estimate: 1h
> Remaining Estimate: 1h
>
> I need to execute some JavaScript before form is submmited and as method getTriggerJavaScrip is final I have to do it like
> SubmitLink link = new SubmitLink("link") {
>
> private static final long serialVersionUID = 1L;
>
> @Override
> protected void onComponentTag(ComponentTag tag)
> {
> super.onComponentTag(tag);
> // If we're disabled
> if (!isLinkEnabled())
> {
> disableLink(tag);
> }
> else
> {
> if (tag.getName().equalsIgnoreCase("a"))
> {
> tag.put("href", "#");
> }
> tag.put("onclick", getTriggerJavaScript1());
> }
> }
>
> protected String getTriggerJavaScript1()
> {
> if (getForm() != null)
> {
> // find the root form - the one we are really going to submit
> Form<?> root = getForm().getRootForm();
> StringBuilder sb = new StringBuilder(100);
> // my code
> sb.append("document.getElementById('");
> sb.append(description.getMarkupId());
> sb.append("').value=CKEDITOR.instances.");
> sb.append(description.getMarkupId());
> sb.append(".getData();");
> // end of my code
> sb.append("var e=document.getElementById('");
> sb.append(root.getHiddenFieldId());
> sb.append("'); e.name=\'");
> sb.append(getInputName());
> sb.append("'; e.value='x';");
> sb.append("var f=document.getElementById('");
> sb.append(root.getMarkupId());
> sb.append("');");
> if (shouldInvokeJavaScriptFormOnsubmit())
> {
> if (getForm() != root)
> {
> sb.append("var ff=document.getElementById('");
> sb.append(getForm().getMarkupId());
> sb.append("');");
> }
> else
> {
> sb.append("var ff=f;");
> }
> sb.append("if (ff.onsubmit != undefined) { if (ff.onsubmit()==false) return false; }");
> }
> sb.append("f.submit();e.value='';e.name='';return false;");
> return sb.toString();
> }
> else
> {
> return null;
> }
> }
> };
> This ugly and moreover if form submiting logic changes my extended link might stop to work properly. I propose adding a method decorareTriggerJavaScript that allows users to decorate the form submiting script. e.g. in my case
> SubmitLink link = new SubmitLink("link") {
> private static final long serialVersionUID = 1L;
>
> @Override
> protected void decorareTriggerJavaScript(StringBuilder sb) {
> StringBuilder sb1 = new StringBuilder(100);
> sb1.append("document.getElementById('");
> sb1.append(description.getMarkupId());
> sb1.append("').value=CKEDITOR.instances.");
> sb1.append(description.getMarkupId());
> sb1.append(".getData();");
> sb.insert(0, sb1.toString());
> }
> };
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Resolved] (WICKET-4199) add a hook to SubmitLink that
allows to insert arbitrary JavaScript before code that submit the form
Posted by "Jeremy Thomerson (Resolved) (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/WICKET-4199?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jeremy Thomerson resolved WICKET-4199.
--------------------------------------
Resolution: Fixed
Fix Version/s: 1.5.3
Assignee: Jeremy Thomerson
Rather than using your patch to add a new method, I simply made the method non-final and added a comment to the javadoc. You can override the method and decorate that script (or replace it wholesale, although I wouldn't recommend that) as you wish.
Thanks for the report and the patch!
> add a hook to SubmitLink that allows to insert arbitrary JavaScript before code that submit the form
> ------------------------------------------------------------------------------------------------------
>
> Key: WICKET-4199
> URL: https://issues.apache.org/jira/browse/WICKET-4199
> Project: Wicket
> Issue Type: Improvement
> Components: wicket
> Affects Versions: 1.5.2
> Reporter: Ernesto Reinaldo Barreiro
> Assignee: Jeremy Thomerson
> Priority: Minor
> Labels: wicket
> Fix For: 1.5.3
>
> Attachments: SubmitLink.java.patch
>
> Original Estimate: 1h
> Remaining Estimate: 1h
>
> I need to execute some JavaScript before form is submmited and as method getTriggerJavaScrip is final I have to do it like
> SubmitLink link = new SubmitLink("link") {
>
> private static final long serialVersionUID = 1L;
>
> @Override
> protected void onComponentTag(ComponentTag tag)
> {
> super.onComponentTag(tag);
> // If we're disabled
> if (!isLinkEnabled())
> {
> disableLink(tag);
> }
> else
> {
> if (tag.getName().equalsIgnoreCase("a"))
> {
> tag.put("href", "#");
> }
> tag.put("onclick", getTriggerJavaScript1());
> }
> }
>
> protected String getTriggerJavaScript1()
> {
> if (getForm() != null)
> {
> // find the root form - the one we are really going to submit
> Form<?> root = getForm().getRootForm();
> StringBuilder sb = new StringBuilder(100);
> // my code
> sb.append("document.getElementById('");
> sb.append(description.getMarkupId());
> sb.append("').value=CKEDITOR.instances.");
> sb.append(description.getMarkupId());
> sb.append(".getData();");
> // end of my code
> sb.append("var e=document.getElementById('");
> sb.append(root.getHiddenFieldId());
> sb.append("'); e.name=\'");
> sb.append(getInputName());
> sb.append("'; e.value='x';");
> sb.append("var f=document.getElementById('");
> sb.append(root.getMarkupId());
> sb.append("');");
> if (shouldInvokeJavaScriptFormOnsubmit())
> {
> if (getForm() != root)
> {
> sb.append("var ff=document.getElementById('");
> sb.append(getForm().getMarkupId());
> sb.append("');");
> }
> else
> {
> sb.append("var ff=f;");
> }
> sb.append("if (ff.onsubmit != undefined) { if (ff.onsubmit()==false) return false; }");
> }
> sb.append("f.submit();e.value='';e.name='';return false;");
> return sb.toString();
> }
> else
> {
> return null;
> }
> }
> };
> This ugly and moreover if form submiting logic changes my extended link might stop to work properly. I propose adding a method decorareTriggerJavaScript that allows users to decorate the form submiting script. e.g. in my case
> SubmitLink link = new SubmitLink("link") {
> private static final long serialVersionUID = 1L;
>
> @Override
> protected void decorareTriggerJavaScript(StringBuilder sb) {
> StringBuilder sb1 = new StringBuilder(100);
> sb1.append("document.getElementById('");
> sb1.append(description.getMarkupId());
> sb1.append("').value=CKEDITOR.instances.");
> sb1.append(description.getMarkupId());
> sb1.append(".getData();");
> sb.insert(0, sb1.toString());
> }
> };
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira