[development] implementing #format
Larry Garfield
larry at garfieldtech.com
Tue Feb 19 20:25:06 UTC 2008
On Tue, 19 Feb 2008 16:06:35 +0100, Konstantin Käfer <kkaefer at gmail.com> wrote:
> Hi,
>
>
>> Any other field one would need to support? Do we need to support
>> textfields really?
>
> IIRC, textarea and textfield are the only input types in core which
> allow entering of freeform text. I'd absolutely go for supporting
> textfield input formats as well; I see a lot of use cases here, e.g.
> allowing specific HTML tags (Like <strong> or <em>) or parts of other
> input formats (e.g. **bold**) for node titles. I'd add an additional
> locked input format named "Plain text" which represents the current
> format (without any filtering // only check_plain (depending on the
> use case)).
>
> Another issue with allowing filters for regular textfields is the vast
> space required by the current filter selector. I think we can minimize
> this by not displaying it for textfields when there is only one
> available input format. The input method can be specified in the
> textfield's description.
>
>
>> Core things like teasers and the splitter require that wrapper so that
>> related fields are together. We should either enforce the wrapper
>> (which could complicate life for #tree forms), or do not care about a
>> wrapper existing or not, leave that off to the implementor.
>
> I don't particularly like such "wrapper" elements because they are not
> part of the semantics of the form. In fact, they are only a helper for
> associating the current input filter control with the body field. But
> when the filter is part of the textarea/textfield, this is no longer
> necessary.
>
>> - Expand textareas with #format to a textarea and a format selector
>> (or just help if there is only one format) with the help of #process
Big +1 on the concept here. Filterable text is part of the essence of the textarea/textfield just as much as its max length. Probably more. :-)
I would suggest something like the following, to parallel other FAPI keys:
$formats = array(1, 4, 5);
$form['mytext'] = array(
'#type' => 'textarea',
'#input_formats' = $formats,
'#default_format' => 4
...
);
Alternatively, $formats could be an associative array.
$formats = array(
1 => $format_description_text_here,
4 => $format_description_text_here,
5 => $format_description_text_here,
);
That way, it's easier to form_alter and even change the help text on if some client complaints about the default text. :-) The actual display of the filterable content is then controlled via a FAPI theme function.
Perhaps we should also, then, look at using the #access property of the element to control access to it rather than making the entire page uneditable and not form_alter-able? (The #access property seems, to me, to be the "right" way to control access to a form field rather than conditionally adding it, because the latter can't be form_altered to enable access again.) That would have the side effect of only making the one field inaccessible instead of the entire node form, which I'd consider a good thing.
--Larry Garfield
More information about the development
mailing list