Jump To …


Copyright 2012-2013 The Apache Software Foundation

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at


Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.


The awkward name is to accomidate the "docco" documentation tool; it doesn't understand having the same named file in multiple folders. See https://github.com/jashkenas/docco/issues/201.

Supports extra validations related to the beanvalidator module.

define ["underscore", "t5/core/dom", "t5/core/events", "t5/core/utils", "t5/core/validation"],
  (_, dom, events, utils) ->

    rangeValue = (element, attribute, defaultValue) ->
      v = element.attr attribute
      if v is null
        parseInt v

    countOptions = (e) ->

A select that is used as part of a palette is different; the validation attributes are attached to the selected (right side)

      if e.findParent ".palette"

An ordinary

        _.filter(e.element.options, (o) -> o.selected).length

    doRangeValidate = (element, value, memo) ->
      min = rangeValue element, "data-range-min", 0
      max = rangeValue element, "data-range-max", Number.MAX_VALUE

If the translated value is still a string, and not a number, then the size refers to the length of the string, not its numeric value.

      if _.isString value
        value = value.length

      unless min <= value <= max
        memo.error = (element.attr "data-range-message") or "RANGE ERROR"
        return false

      return true

    dom.onDocument events.field.optional, "[data-optionality=prohibited]", (event, memo) ->

      unless utils.isBlank memo.value
        memo.error = (@attr "data-prohibited-message") or "PROHIBITED"
        return false

      return true

    dom.onDocument events.field.validate, "input[data-range-min], input[data-range-max], textarea[data-range-min], textarea[data-range-max]", (event, memo) ->
      doRangeValidate this, memo.translated, memo

    dom.onDocument events.field.validate, "select[data-range-min], select[data-range-max]", (event, memo) ->
      doRangeValidate this, (countOptions this), memo