Feature Requests item #1423268, was opened at 2006-02-03 11:54
Message generated for change (Tracker Item Submitted) made by Item Submitter
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=684978&aid=1423268&group_id=119783
Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: None
Group: None
Status: Open
Priority: 5
Submitted By: Juergen Donnerstag (jdonnerstag)
Assigned to: Nobody/Anonymous (nobody)
Summary: externaize javascript strings + some more ideas
Initial Comment:
Some ideas from Gavin:
I have been playing with Wicket and had a few ideas
for improvements.
1) Introduce JSON. This converts java objects
(models, maps, etc) into
javascript objects. This is a much easier way of
initialising javascript
(ajax) components. All this code exists in open
source already (see Java
JSON-RPC)
For example
List list = new ArrayList();
list.add("string");
list.add(new Integer(100));
list.add(new Double(100));
list.add(new Date());
Map firstMap = new LinkedHashMap();
firstMap.put("stringProp", "string");
firstMap.put("intProp", new Integer(100));
firstMap.put("doubleProp", new Double(100));
firstMap.put("dateProp", new Date());
firstMap.put("booleanProp", Boolean.TRUE);
firstMap.put("beanProp", new Bean());
firstMap.put
("trickyStringProp", "_\"_'_\t_\n_\\_");
firstMap.put("listProp", list);
String jsonString = ser.toJSONString(firstMap);
Creates....
{"javaClass":"java.util.LinkedHashMap","map":
{"doubleProp":100,"trickyString
Prop":"_\"_'_\t_\n_\\_","listProp":{"list":
["string",100,100,{"javaClass":"j
ava.util.Date","time":1.138678457762e12}],"javaClass":
"java.util.ArrayList"}
,"intProp":100,"stringProp":"string","beanProp":
{"doubleProp":100,"javaClass
":"proj.Bean","intProp":100,"stringProp":"string","dat
eProp":{"javaClass":"j
ava.util.Date","time":1.138678457762e12}},"booleanProp
":true,"dateProp":{"ja
vaClass":"java.util.Date","time":1.138678457762e12}}};
which can then be inserted into the html page and
used by the javascript
code. It can even be sent back via XmlHttpRequest (to
enable easy
roundtripping of models) and converted back in java
objects.
2) Introducing XmlResourceBundles (as seen in Java
V6). This would work very
well with the Template Engine suggested in point 3.
We could then move all the javascript / html stuff
out of java and remove
all the escaping and line wrapping. It is very easy
to implement (just
extend the PropertiesFactory to load from an xml
file).
No more...(from ImmediateTextField.java)
StringBuffer s = new StringBuffer(
"\t<script language=\"JavaScript\"
type=\"text/javascript\">\n").append(
"\tfunction immediateCheckBox(componentUrl,
componentPath, val) {
\n").append(
"\t\tdojo.io.bind({\n").append(
"\t\t\turl: componentUrl + '&' + componentPath
+ '=' + val,\n").append(
"\t\t\tmimetype: \"text/plain\",\n").append(
"\t\t\tload: function(type, data, evt) {}\n"
+ "\t\t});\n" +
"\t}\n").append(
"\t</script>\n");
just
getProperty("immediateCheckBox");
3) Introduce a template engine to remove the big (and
very ugly) strings
Although we can do this outside the core, having a
standard template
solution makes the framework more accessible and
standardise the components.
Template engines (Freemarker, velocity, etc) contruct
strings with ease. It
also means you can change strings (if you have watch
and reload xml property
files) without recompiling.
For example..(for FXOnClickHighlighter)
Map context = new HashMap();
context.put("component", this);
String TemplateEngine.render
("highlighterIn.ftl",context);
String TemplateEngine.render
("highlighterOut.ftl",context);
or with XmlPropertyFiles....
String TemplateEngine.render(getProperty
("highlighterIn"),context);
String TemplateEngine.render(getProperty
("highlighterOut"),context);
could replace:
// String to be written to the header
String s;
// dojo function calls for highlight/unhighlight
String highlightInFunction;
String highlightOutFunction;
// set the correct dojo functions for the type of
highlighter
if (type == "c2c")
{
highlightInFunction = "dojo.fx.html.colorFade
(node, " +
startColor.toString() + ","
+ endColor.toString() + ", duration, function(){"
+ componentId
+ "_highlighterState='highlighted';});";
highlightOutFunction = "dojo.fx.html.colorFade
(node, " +
endColor.toString() + ","
+ startColor.toString() + ", duration, function()
{" + componentId
+ "_highlighterState='unhighlighted';});";
}
else
{
highlightInFunction = "dojo.fx.html.colorFadeOut
(node, " +
endColor.toString()
+ ", duration ,0,function(){" + componentId
+ "_highlighterState='highlighted';});";
highlightOutFunction = "dojo.fx.html.colorFadeOut
(node, startbc, duration
,0,function(){"
+ componentId
+ "_highlighterState='unhighlighted';});";
}
s = "\t<script language=\"JavaScript\"
type=\"text/javascript\">\n" + "\t"
+ componentId
+ "_highlighterState = 'unhighlighted'; \n" + "\t"
+ componentId
+ "_first = false; \n" + "\tfunction " +
componentId
+ "_highlight(id, duration) { \n" + "\t\tif(" +
componentId
+ "_highlighterState!='highlighting'){\n"
+ "\t\t\tnode = document.getElementById(id);\n" +
"\t\t\tif(!" + componentId + "_first){\n"
+ "\t\t\t" + componentId
+ "_first = true; \n" + "\t\t\t\tstartbc =
dojo.html.getBackgroundColor(node);\n"
+ "\t\t\t}\n" + "\t\t\tif(" + componentId
+ "_highlighterState == 'unhighlighted') \n"
+ "\t\t\t{ \n" + "\t\t\t\t"
+ componentId + "_highlighterState
= 'highlighting';\n" + "\t\t\t\t"
+ highlightInFunction + "\n" + "\t\t\t} else {\n"
+ "\t\t\t\t" +
componentId
+ "_highlighterState = 'highlighting';\n"
+ "\t\t\t\t" +
highlightOutFunction
+ "\n" + "\t\t\t}\n" + "\t\t}\n" + "\t}\n"
+ "\t</script>\n";
Cheers
----------------------------------------------------------------------
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=684978&aid=1423268&group_id=119783
-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems? Stop! Download the new AJAX search engine that makes
searching your log files as easy as surfing the web. DOWNLOAD SPLUNK!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=103432&bid=230486&dat=121642
_______________________________________________
Wicket-develop mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/wicket-develop