%3 ::xowiki::formfield::FormField ::xowiki::formfield::FormField → fc_decode → fc_encode → get_from_name → get_single_spec → interprete_condition CSSclass_list_add add_statistics answer_check=AND answer_check=answer_words answer_check=btwn answer_check=contains answer_check=contains-not answer_check=eq answer_check=ge answer_check=gt answer_check=in answer_check=le answer_check=lt answer_check=match answer_is_correct asWidgetSpec behavior booleanAttributes config_from_spec convert_to_external convert_to_internal describe dict_to_fc dict_to_spec dict_value escape_message_keys field_value handle_transmit_always has_instance_variable init initialize interprete_single_spec is_disabled is_repeat_template_p leaf_components localize make_correct pretty_image pretty_value process_correct_when_modifier remove_omit render render_answer_statistics render_collapsed render_disabled_as_div render_error_msg render_form_widget render_help_text render_input render_item render_localizer render_modal render_result_statistics render_word_statistics repeat repeat_add_label resetBooleanAttributes reset_on_validation_error reset_parameter same_value set_disabled set_feedback set_is_repeat_template stats_record_count validate validation_check value_if_nothing_is_returned_from_form word_statistics ::xo::tdom::Object ::xo::tdom::Object ::xowiki::formfield::FormField->::xo::tdom::Object ::xowiki::formfield::textarea ::xowiki::formfield::textarea add_statistics clear_editor_mixins initialize render_as_div render_input set_feedback ::xowiki::formfield::textarea->::xowiki::formfield::FormField ::xowiki::formfield::workflow_definition ::xowiki::formfield::workflow_definition as_graph check=workflow pretty_value ::xowiki::formfield::workflow_definition->::xowiki::formfield::textarea ::xowiki::formfield::menuentries ::xowiki::formfield::menuentries pretty_value ::xowiki::formfield::menuentries->::xowiki::formfield::textarea ::xowiki::formfield::code_listing ::xowiki::formfield::code_listing pretty_value ::xowiki::formfield::code_listing->::xowiki::formfield::textarea ::xowiki::formfield::richtext ::xowiki::formfield::richtext check=safe_html editor initialize preset_conf pretty_value ::xowiki::formfield::richtext->::xowiki::formfield::textarea ::xowiki::formfield::form_constraints ::xowiki::formfield::form_constraints ::xowiki::formfield::form_constraints->::xowiki::formfield::textarea ::xowiki::formfield::richtext::ckeditor4 ::xowiki::formfield::richtext::ckeditor4 imageSelectorDialog initialize js_image_helper pathNames render_input ::xowiki::formfield::richtext::ckeditor4->::xowiki::formfield::richtext ::xowiki::formfield::richtext::tinymce ::xowiki::formfield::richtext::tinymce compute_config initialize render_input ::xowiki::formfield::richtext::tinymce->::xowiki::formfield::richtext ::xowiki::formfield::richtext::wym ::xowiki::formfield::richtext::wym initialize render_input ::xowiki::formfield::richtext::wym->::xowiki::formfield::richtext ::xowiki::formfield::richtext::xinha ::xowiki::formfield::richtext::xinha initialize render_input ::xowiki::formfield::richtext::xinha->::xowiki::formfield::richtext ::xowiki::formfield::form ::xowiki::formfield::form check=form initialize ::xowiki::formfield::form->::xowiki::formfield::richtext ::xowiki::formfield::localized_richtext ::xowiki::formfield::localized_richtext ::xowiki::formfield::localized_richtext->::xowiki::formfield::richtext ::xowiki::formfield::localized_text ::xowiki::formfield::localized_text ::xowiki::formfield::localized_richtext->::xowiki::formfield::localized_text

Class ::xowiki::formfield::textarea

::xowiki::formfield::textarea[i] create ... \
           [ -autosave:boolean (default "false") ] \
           [ -cols (default "80") ] \
           [ -paste:boolean (default "true") ] \
           [ -rows (default "2") ] \
           [ -spell (default "false") ] \
           [ -spellcheck:boolean (default "true") ]

Class Relations

  • class: ::xotcl::Class[i]
  • superclass: ::xowiki::formfield::FormField[i]
  • subclass: ::xowiki::formfield::workflow_definition[i], ::xowiki::formfield::menuentries[i], ::xowiki::formfield::code_listing[i], ::xowiki::formfield::richtext[i], ::xowiki::formfield::form_constraints[i]
::xotcl::Class create ::xowiki::formfield::textarea \
     -superclass ::xowiki::formfield::FormField

Methods (to be applied on instances)

  • add_statistics (scripted)

    #:log "add_statistics $options"
    next
    if {[dict exists $options word_statistics]} {
      #:log "add_statistics call :word_statistics"
      :word_statistics [dict get $options word_statistics]
    }
  • autosave (setter)

  • clear_editor_mixins (scripted)

    foreach m [:info mixin] {
      if {[$m exists editor_mixin]} {
        :mixin delete $m
      }
    }
  • cols (setter)

  • initialize (scripted)

    set :widget_type text(textarea)
    set :booleanHTMLAttributes {required readonly disabled formnovalidate}
    foreach p [list rows cols style] {
      if {[info exists :$p]} {set :html($p) [:$p]}
    }
    if {![:istype ::xowiki::formfield::richtext] && [info exists :editor]} {
      # downgrading
      #:msg "downgrading [:info class]"
      :clear_editor_mixins
      foreach v {editor options} {
        if {[info exists :$v]} {
          unset :$v
        }
      }
    }
    if {${:autosave}} {
      ::xo::Page requireJS  "/resources/xowiki/autosave-text.js"
    }
    next
  • paste (setter)

  • render_as_div (scripted)

    #
    # Rendering a textarea as a div is needed in particular for
    # richtext editors, where some may not expect to enhance a
    # textarea as usual, but a div.
    #
    #:msg "[:get_attributes id style {CSSclass class}]"
    ::html::div [:get_attributes id style {CSSclass class} data-repeat-template-id] {
      if {[:wiki]} {
        ${:object} references clear
        ::html::t -disableOutputEscaping [${:object} substitute_markup [:value]]
      } else {
        ::html::t -disableOutputEscaping [:value]
      }
    }
    ::html::div
  • render_input (scripted)

    if {[info exists :render_as_div_p] && ${:render_as_div_p}} {
      #
      # A subclass set :render_as_div_p to indicate they want the
      # field to be rendered as a div, but did not want to interrupt
      # inheritance.
      #
      # When superclass behavior is not needed, one may simply call
      # :render_as_div directly in the subclass methods.
      #
      :render_as_div
    } elseif {[:is_disabled] && [info exists :disabled_as_div]} {
      :render_disabled_as_div textarea
    } else {
      set booleanAtts [:booleanAttributes {*}${:booleanHTMLAttributes}]
      if {!${:spellcheck}} {
        set :data-gramm false
        set :data-lt-active false
      }
      if {${:autosave}} {
        ::html::div -class "autosave" {
          ::html::div -id ${:id}-status  -class "nochange"  -data-saved #xowiki.autosave_saved#  -data-rejected #xowiki.autosave_rejected#  -data-pending #xowiki.autosave_pending# {
                ::html::t "" ;#"no change"
              }
          ::html::textarea [:get_attributes id name cols rows style wrap placeholder  data-repeat-template-id {CSSclass class} spellcheck  data-gramm data-lt-active {*}$booleanAtts] {
                                  ::html::t [:value]
                                }
        }
        template::add_event_listener  -id ${:id}  -event keyup  -preventdefault=false  -script "autosave_handler('${:id}');"
    
      } else {
        ::html::textarea [:get_attributes id name cols rows style wrap placeholder  data-repeat-template-id {CSSclass class}  {*}$booleanAtts] {
                                ::html::t [:value]
                              }
      }
      #
      # For emergency situations, one might allow swa always pasting
      # if {!${:paste} && ![acs_user::site_wide_admin_p -user_id [::xo::cc user_id]]} { ... }
      #
      if {!${:paste}} {
        #
        # When "paste" is deactivated, the cut&paste and drag&drop
        # handlers are deactivated for this field. "copy" is
        # deactivated for the full page, since otherwise, one could
        # cut the field with the surrounding text.
        #
        foreach event_type {paste drag drop} {
          template::add_event_listener -id ${:id} -event $event_type  -preventdefault=true -script ""
        }
        template::add_script -section body -script {
          window.addEventListener('copy', function (event) {event.preventDefault();}, false);
        }
      }
    
      :resetBooleanAttributes $booleanAtts
    }
    :render_result_statistics
  • rows (setter)

  • set_feedback (scripted)

    set :correction [next]
    return ${:correction}
  • spell (setter)

  • spellcheck (setter)