Jörn Nettingsmeier wrote:
hi everyone!


here's a first attempt at cleaning up usecases.js: http://people.apache.org/~nettings/usecases.js

new version (patch against current trunk) is here:
http://people.apache.org/~nettings/usecase_cleanup-breaks_cforms_atm.diff

features:
+ rips cforms-specific stuff out of the core code
+ makes usecases.js fun to read
+ makes UsecaseViews.Java fun to read and adds documentation
+ seems to work ok for all usecases except cforms.edit with some
backwards-compatibility glue.
- breaks cforms, because the flow snippet insertion is not yet implemented.

here's how the xconf view declaration might look:

<view uri="/modules/foo/usecases/foo-mogrify.jx" loopFlow="/modules/foo/flow/mainLoop.js" submitFlow="/modules/foo/flow/submit.js"
menu="false|true" createContinuation="false|true" />

this is now implemented, although the *Flow attributes are currently non-functional.

as to cforms, i'm planning to add a generic solution for custom flowscripts, inspired by the existing mechanism of <intro/> and <outro/>, which should be ok for cforms. if it works out like i think
 it should, you will be able to pass two urls with custom flowscript
 snippets to the usecase declaration - one for the main loop, and the
 other for the "submit" case.

this is a little harder than it first looked.
looks like i need to replace the  entire
usecases.js::executeUsecase()::showView() and advance() functions with
custom code, because forms do not easily map to cocoon.sendPage (that
would bypass the entire Form.js code)...

i decided against reading the code from the <view> configuration,
because that would make it a build-time thing, which is horrible for
debugging. instead, i'd like to put URIs in the loopFlow and submitFlow attributes which should point to text files containing javascript snippets. these are transformed into functions in usecases.js:

source = resolve(loopView)
f = read source
customShowView() = new Function(f)
source = resolve(submitView)
f = read source
customAdvance() = new Function(f)

that way, they can be changed at runtime, unless i'm overlooking some hidden caching issue.

wdyt?

i'd also like to get rid of the duplicate view methods (<view template=""../> and <view uri="".../>). both do almost the same now anyway. the remaining one (i'm favouring "uri") will take a protocol-less uri that will be fed to the root sitemap if it starts with a slash, and to the usecases.xmap if not. this will make our framework consistent with the cocoon documentation. any objections?

i would like to formally deprecate the <view template=""/> attribute in
favor of <view uri=""/>. uri must not contain a protocol (for
consistency with sendPage/sendPageAndWait) - it will always be resolved
like "cocoon:/", i.e. if you don't use a leading slash, you end up in
the usecases.xmap, and if you do, you go to the root sitemap.

any objections?

in my patch, there is a compatibility hack that will map template="" to
the same view field as uri="", and usecases.js removes any old
"cocoon:/" protocols and logs a deprecation warning.


doug has recently requested an option to switch from sendPageAndWait to sendPage, to cater to one-shot usecase views. is that a purely hypothetical scenario, or will people use it? i can add an option, but i'd like to avoid creating dead code.

the switch is in. if you set createContinuation="false", then the
usecase framework will use cocoon.sendPage() and immediately call
cocoon.exit() afterwards.

if anybody is using custom variants of the cforms module for some more advanced stuff, i would be glad to hear about them, in order to find out about limitations in my outline.

this question still stands.
i'd welcome feedback.




regards,

jörn



--
Jörn Nettingsmeier

"Hofstadter's Law: It always takes longer than you expect,
even when you take into account Hofstadter's Law."
        - Douglas R. Hofstadter

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to