%D \module
%D   [       file=m-fields,
%D        version=2010.03.14,
%D          title=\CONTEXT\ Extra Modules,
%D       subtitle=Fields,
%D         author=Hans Hagen,
%D           date=\currentdate,
%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
%C
%C This module is part of the \CONTEXT\ macro||package and is
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.

\unprotect

%D A rather old example of field usage is the following. It
%D makes no sense to have this in the core.
%D
%D \starttyping
%D before \fillinfield[oeps]{whatever} after
%D \stoptyping

\startJSpreamble{FillInField} used later
    function CheckFillInField(right) {
        if (event.value.toLowerCase() == right.toLowerCase()) {
            event.target.hidden = true ;
        }
        event.value = ""
    }
\stopJSpreamble

\newcount\noffillinfields

\definefieldcategory
  [fillinfield]
  [\c!n=1024,
   \c!height=\strutht,
   \c!depth=\strutdp,
   \c!align=\v!middle,
   \c!color=red,
   \c!fieldframecolor=blue,
   \c!fieldbackgroundcolor=\s!white,
   \c!validate=JS(CheckFillInField{\therightanswer})]

\def\fillinfield
  {\dosingleempty\dofillinfield}

\def\dofillinfield[#1]#2%
  {\dontleavehmode
   \hbox
     {\forgetall
      \global\advance\noffillinfields\plusone
      \edef\currentfillinfieldname{fillinfield:\number\noffillinfields}%
      \useJSscripts[ans]%
      \definefieldbody
        [\currentfillinfieldname]
        [\c!type=\v!line,
         \c!category=fillinfield]%
      \doifelsenothing{#1}
        {\def\therightanswer{#2}}
        {\def\therightanswer{#1}}%
      \setbox0\hbox{\strut#2}%
      \setbox2\hbox{\strut\therightanswer}%
      \dimen0=\dimexpr\ifdim\wd0>\wd2 \wd0 \else \wd2 \fi + .2em\relax
      \hbox to \wd0
        {\wd0\zeropoint
         \box0
         \hss\fieldbody[\currentfillinfieldname][\c!width=\dimen0]\hss}}}

\protect \endinput
