Gah, this is super-handy. Thanks Chas, Dave.
On Dec 1, 5:41 pm, "David Pollak" <[EMAIL PROTECTED]>
wrote:
> Charles,
>
> Thanks for the suggestion.
>
> I've just checked up code that looks something like yours:
>
> def ajaxButton(text: NodeSeq, func: () => JsCmd, attrs: (String,
> String)*): Elem =
> attrs.foldLeft(<button
> onclick={makeAjaxCall(Str(mapFunc(func)+"=true")).toJsCmd+"; return false;"}
> >{text}</button>)(_ % _)
>
> All the various form element creation methods take an attrs vararg.
>
> Also, note the use of foldLeft
>
> Thanks,
>
> David
>
> On Tue, Nov 18, 2008 at 1:25 AM, Charles F. Munat <[EMAIL PROTECTED]> wrote:
>
>
>
>
>
> > So I copied SHtml over for fun and renamed it FH (form helper). Then I
> > tried messing with textarea first, just for fun. This can probably be
> > done much better, but this works just fine:
>
> > private def getAttrs(attrs: Tuple2[String, String]*) : MetaData = {
> > attrs.toList match {
> > case x :: xs =>
> > new UnprefixedAttribute(x._1, x._2, getAttrs(xs: _*))
> > case _ => Null
> > }
> > }
>
> > def textarea(value: String, func: String => Any,
> > attrs: Tuple2[String, String]*): Elem =
> > textarea_*(value, SFuncHolder(func), attrs: _*)
>
> > def textarea_*(value: String, func: AFuncHolder,
> > attrs: Tuple2[String, String]*): Elem = {
> > (<textarea name={mapFunc(func)}
> > rows="8" cols="40">{value}</textarea>) %
> > getAttrs(attrs: _*)
> > }
>
> > Now I can call it like this:
>
> > FH.textarea(contact.message, contact.message = _, ("id", "myId"),
> > ("class", "myClass"), ("rows", "12"))
>
> > And I get this:
>
> > <textarea id="myId" class="myClass" rows="12" cols="40"></textarea>
>
> > (I added default rows and cols attributes because they are required for
> > valid XHTML.)
>
> > For what it's worth, this works much better for me.
>
> > Chas.
>
> > Charles F. Munat wrote:
> > > Ha. Great minds stink alike. I just discovered this little setback
> > > (after adding "id" attributes to about fifty checkboxes -- note to self:
> > > check one before doing them all).
>
> > > I've been messing with the map but it's messing with me. I can grab the
> > > right node pretty easily, but then I can't seem to add the MetaData.
>
> > > If you're looking to add an id, you can use checkbox_id:
>
> > > SHtml.checkbox_id(user.isStupid, user.isStupid = _, Full("isStupid"))
>
> > > which adds id="isStupid" to the checkbox input.
>
> > > Chas.
>
> > > Derek Chen-Becker wrote:
> > >> For a really neat trick, how would I set the ID for a checkbox? The
> > >> SHtml checkbox method returns a NodeSeq. I suppose I could just do a
> > >> "map", but I was wondering if there was a simpler way.
>
> > >> Thanks,
>
> > >> Derek
>
> > >> On Mon, Nov 17, 2008 at 4:54 PM, David Pollak
> > >> <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>>
> > >> wrote:
>
> > >> On Mon, Nov 17, 2008 at 3:41 PM, Charles F. Munat <[EMAIL PROTECTED]
> > >> <mailto:[EMAIL PROTECTED]>> wrote:
>
> > >> Added:
>
> >http://liftweb.net/index.php/FAQ#How_do_I_add_attributes_to_form_fiel...
>
> > >> Awesome! Thanks!
>
> > >> Chas.
>
> > >> Jorge Ortiz wrote:
> > >> > Oops, it might be:
>
> > >> > SHtml.text(user.name <http://user.name> <http://user.name>,
> > >> user.name <http://user.name> <http://user.name> = _) %
> > >> > ("size" -> "24") %
> > >> > ("maxlength" -> "48") %
> > >> > ("id" -> "user_name") %
> > >> > ("title" -> "Enter your name")
>
> > >> > One or both of those should work.
>
> > >> > --j
>
> > >> > On Mon, Nov 17, 2008 at 12:27 PM, Jorge Ortiz
> > >> <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>
> > >> > <mailto:[EMAIL PROTECTED]
> > >> <mailto:[EMAIL PROTECTED]>>> wrote:
>
> > >> > Try:
>
> > >> > SHtml.text(user.name <http://user.name>
> > >> <http://user.name>, user.name <http://user.name>
> > >> > <http://user.name> = _) %
> > >> > ("size", "24") %
> > >> > ("maxlength", "48") %
> > >> > ("id", "user_name") %
> > >> > ("title", "Enter your name")
>
> > >> > That should work.
>
> > >> > --j
>
> > >> > On Mon, Nov 17, 2008 at 12:21 PM, Charles F. Munat
> > >> <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>
> > >> > <mailto:[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>>>
> > >> wrote:
>
> > >> > I spend a lot of time writing % new
> > >> UnprefixedAttribute(...) to add
> > >> > attributes to SHtml form elements (input, textarea,
> > >> select, etc.).
>
> > >> > It would be nice if the relevant SHtml methods would
> > >> permit optional
> > >> > extra parameters in the form of tuples where contents
> > >> are name-value
> > >> > pairs that get translated to attributes. I don't
> > >> think this
> > >> > would be a
> > >> > breaking change.
>
> > >> > In other words, instead of:
>
> > >> > SHtml.text(user.name <http://user.name>
> > >> <http://user.name>, user.name <http://user.name>
> > >> > <http://user.name> = _) %
> > >> > new UnprefixedAttribute("size", "24",
> > >> > new UnprefixedAttribute("maxlength", "48",
> > >> > new UnprefixedAttribute("id", "user_name",
> > >> > new UnprefixedAttribute("title", "Enter your
> > >> name", Null)
> > >> > )
> > >> > )
> > >> > )
>
> > >> > I could do:
>
> > >> > SHtml.text(user.name <http://user.name>
> > >> <http://user.name>, user.name <http://user.name>
> > >> > <http://user.name> = _,
> > >> > ("size", "24"),
> > >> > ("maxlength", "48"),
> > >> > ("id", "user_name"),
> > >> > ("title", "Enter your name")
> > >> > )
>
> > >> > Which is a hell of a lot cleaner and faster, and I
> > >> don't have to
> > >> > import
> > >> > UnprefixedAttribute and remember the % and the new
> > >> keywords.
>
> > >> > Or is this already possible and I'm missing it?
>
> > >> > I have an online survey with 43 questions on 5 pages
> > >> involving
> > >> > more than
> > >> > 150 database fields. The snippet is already over 700
> > >> lines and
> > >> > growing.
> > >> > It's just unmanageable.
>
> > >> > Another thing: the <label> element is a very
> > >> important part of
> > >> > accessibility to persons with disabilities, but it
> > >> needs a "for"
> > >> > attribute that references the "id" attribute of the
> > input
> > >> > element (or
> > >> > textarea, etc.). The current SHtml output (unlike
> > >> Rails) does not
> > >> > generate an id attribute, so they have to be added by
> > >> hand. Has
> > >> > anyone
> > >> > given any thought to automatically-generated id
> > >> elements on form
> > >> > fields?
> > >> > Better yet, some way to integrate labels?
>
> > >> > Ideally, I would do something like this:
>
> > >> > <survey:name label="Your name"/>
>
> > >> > Or this:
>
> > >> > <survey:name>Your name</survey:name>
>
> > >> > and bind would allow me to generate this:
>
> > >> > <label for="id123">Your name
> > >> > <input type="text" id="id123" value=""
> > >> > name="F1226951216428645000_I0G"/>
> > >> > </label>
>
> > >> > What do others think? Is this already possible?
>
> > >> > Chas.
>
> > >> --
> > >> Lift, the simply functional web frameworkhttp://liftweb.net
> > >> Collaborative Task Managementhttp://much4.us
> > >> Follow me:http://twitter.com/dpp
> > >> Git some:http://github.com/dpp
>
> --
> Lift, the simply functional web frameworkhttp://liftweb.net
> Collaborative Task Managementhttp://much4.us
> Follow me:http://twitter.com/dpp
> Git some:http://github.com/dpp
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Lift" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/liftweb?hl=en
-~----------~----~----~----~------~----~------~--~---