On Wednesday, Jan 15, 2003, at 17:50 Europe/London, Hussein Shafie wrote: > Jeremy Quinn wrote: >> >> I am trying to implement a Move command and am having some problems, >> has anyone got any suggestions about how to make them work better? >> >> Here are the commands: >> >> <button toolTip="Move Up" icon="../icons2/up.gif"> >> <command name="moveUp" /> >> </button> >> <button toolTip="Move Down" icon="../icons2/down.gif"> >> <command name="moveDown" /> >> </button> >> >> <command name="moveUp"> >> <macro> >> <sequence> >> <command name="cut" parameter="[implicitElement]" /> >> <command name="paste" parameter="before[implicitElement]" /> >> </sequence> >> </macro> >> </command> >> >> <command name="moveDown"> >> <macro> >> <sequence> >> <command name="cut" parameter="[implicitElement]" /> >> <command name="moveDotTo" parameter="nextElement" /> >> <command name="paste" parameter="after[implicitElement]" /> >> </sequence> >> </macro> >> </command> >> >> Here is some sample XML: >> >> <chapter type="simple" link="st_1" label="story"> >> <meta> >> <title>YOUR TITLE</title> >> <desc>YOUR DESCRIPTION</desc> >> </meta> >> <p>paragraph one</p> >> <p>paragraph two etc.</p> >> <contact link="co_1" label="contact details"> >> <desc>For further information please >> contact: </desc> >> <who>WHO TO CONTACT</who> >> <org>Institute of International >> Visual Arts</org> >> <addr>6-8 Standard Place, Rivington >> Street, London EC2A 3BE</addr> >> <email>SOMEONE at iniva.org</email> >> <tel>020 7729 9616</tel> >> </contact> >> </chapter> >> >> How they behave: >> >> 1) select <org/> click Move Up, and it moves above <who/> : >> Good! >> 2) select <org/> click Move Down, and it moves below <addr/> >> : Good! >> 3) select <desc/> click Move Up, and it disappears : Bad! >> <desc/> is not allowed in <chapter/> so it cannot >> paste here. >> 4) select <tel/> click Move Down, and nothing happens : Good! >> <tel/> is not allowed in <chapter/> so it cannot >> paste here. >> 5) select <p/>[1] click Move Up, and it disappears: Bad! >> meta/desc is left with the text selection. >> <p/> is not allowed inside <meta/> or outside >> <chapter/> >> 6) select <p/>[1] click Move Down, and it moves below >> <p/>[2]: Good! >> 7) select <p/>[2] click Move Down, and it disappears: Bad! >> the text selection ends up in contact/desc (!?!) >> <p/> is not allowed in <contact/> but should go after >> it >> >> Can anyone suggest how I can refine these commands further so as to >> get >> rid of the glitches in behaviour? > > I think you have reached the limits of macros and/or some primitive > commands are missing to implement more powerful macros. The clean, > reliable, solution is of course to implement this by writing a custom > command in Java or in BeanShell. > > If you want something that works *slightly* better, you may try > something like this (I've not tested what follows): > > <command name="moveUp"> > <macro> > <sequence> > <command name="cut" parameter="[implicitElement]" /> > <choice> > <command name="paste" parameter="before[implicitElement]" /> > <command name="undo" /> > </choice> > </sequence> > </macro> > </command> >
OK, I see, the 'undo' becomes a fallback if the 'paste' was refused. Cool, I'll play with this. Thanks for the suggestion. What I could not work out from my version was why sample behaviour (5) was happening. ie the selection moving to the child of the next element, instead on just moving to the next element itself. Could this be an side-effect of my XSD maybe? regards Jeremy

