all files / src/datums/ text.cjsx

100% Statements 17/17
100% Branches 5/5
100% Functions 6/6
100% Lines 16/16
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65                                                              32×       64×       28× 28× 26×   28×               30×   29×      
 
React = require('react')
_ = require('underscore')
 
Datum = require('./datum')
 
 
###
  see ./text.md
###
module.exports = class Text extends Datum
  @displayName: "react-datum.Text"
 
  
  @propTypes: _.extend {}, Datum.propTypes,
    # set to true if rendering known, safe, html.  
    # see https://facebook.github.io/react/tips/dangerously-set-inner-html.html. 
    displayAsHtml: React.PropTypes.bool
    
    # set ellipsizeAt to false to display whole value. Only effects 'readonly' display
    # values displayed in 'edit' mode are never truncated.
    ellipsizeAt: React.PropTypes.oneOfType([
      React.PropTypes.number
      React.PropTypes.bool
    ])
    # If we want the ellipsis to be like ...Long Name we need to make this true
    reverseEllipsis: React.PropTypes.bool
 
 
  @defaultProps: _.extend {}, Datum.defaultProps,
    # ellipsizeAt is defaulted to prevent really long strings from breaking layouts
    ellipsizeAt: 35
    reverseEllipsis: false
 
  constructor: ->
    super
    
 
  render: ->
    super    # for breakpoint debugging
 
 
  renderValueForDisplay: ->
    superValue = super
    value = switch
      when _.isArray(superValue) then superValue.join(', ')
      when _.isObject(superValue ) then JSON.stringify(superValue)
      else superValue.toString()
    
    @renderEllipsizedValue value
 
  
  ### 
    Extends Datum#renderWrappedDisplayValue to provide support for displayAsHtml
    option.
  ###
  renderWrappedDisplayValue: (value)->
    if @props.displayAsHtml
      <span className="datum-display-value" dangerouslySetInnerHTML={@getMarkup(value)}/>
    else
      super
      
 
  getMarkup: (value) ->
    return {__html: value}