anchor.diff:                  DIV className: 'next_proposal',
                     "Next: "
                       A
  -                      onClick: do (url = '/' + next_proposal.long_id) =>
  +                      onClick: do (url = proposal_url(next_proposal)) =>
                           => window.app_router.navigate(url, {trigger: true})
                         next_proposal.name
  +
  +
  +  componentDidMount : -> @initOrUpdateHeader()
  +  componentDidUpdate : -> @initOrUpdateHeader()
  +  initOrUpdateHeader : -> 
  +    $el = $(@getDOMNode())
  +
  +    $header = $el.find('.proposal_heading.stickable')
  +
  +    if $header.length > 0 && !@is_waiting()
  +      if @local.sticky_initialized
  +        $header.StickyElement('update')
  +      else 
  +        $header.StickyElement
  +          placeholder: $el.find('.proposal_heading.placeholder')[0]
  +          container: $el.parents('.proposal')
  +          stick_on_zoomed_screens: false
  +
  +        @local.sticky_initialized = true
  +        save @local
  +  componentWillUnmount : -> 
  +    $el = $(@getDOMNode())
  +    $el.find('.proposal_heading.stickable').StickyElement('destroy')
  +  mouseLeaveOtherCluster : (cluster) -> 
  +    if @local.show_cluster == cluster
  +      @local.show_cluster = null
  +      save(@local)
   
   
   
  
positive.code: # Has proposal description, feelings area (slider + histogram), and reasons area
  Proposal = ReactiveComponent
    displayName: 'Proposal'
  
    componentDidUpdate : ->
      $el = $(@getDOMNode())
  
      # Resizing the reasons region to solve a layout error when 
      # the height of the decision board (which is absolutely positioned) 
      # is taller than either of the wing point columns
      $el.find('.reasons_region').css {minHeight: $el.find('.opinion_region').height()} 
  
      # $el.find('.description_region').css
      #   top: $el.find('.proposal_heading').height() + 24
  
  
    renderDescriptionField : (field) ->
      DIV className: 'description_field', key: field.label,
        DIV className: 'field_heading', onClick: => 
          field.expanded = !field.expanded
          save(@local)
          if field.expanded 
            window.writeToLog
              what: 'expand proposal description'
              details: 
                description_type: field.label        
        ,
          SPAN className: "expand_arrow fa #{if field.expanded then 'fa-minus-circle' else 'fa-plus-circle'}" #, dangerouslySetInnerHTML: {__html: if field.expanded then '&#9660;' else '&#9658;'}
          SPAN className: 'field_name', field.label
        if field.expanded
          DIV className: 'field_body', dangerouslySetInnerHTML:{__html: field.html}
  
    renderDescriptionFieldGroup : (group) -> 
      DIV className: 'description_group', key: group.group,
        DIV className: 'description_group_name', 
          LABEL null, group.group
        for field in group.items
          @renderDescriptionField field
  
    ##
    # Make this thing!
    render : ->
      proposal = @proposal
      your_opinion = @data(@proposal.your_opinion)
  
negative.code:       if customer.identifier == 'livingvotersguide'
          TD className: 'summary_measure_designator',
            if proposal.category && proposal.designator
              A onClick: clickInternalLink, href: proposal_url(proposal), style: {color: "#{if @local.hovering_on then color.link_hover_color else ''}"},
                "#{proposal.category[0]}-#{proposal.designator}"
  
        TD className: 'summary_name', style: {width: (if customer.identifier == 'livingvotersguide' then 270 else 320)},
          A onClick: clickInternalLink, href: proposal_url(proposal), style: {color: "#{if @local.hovering_on then color.link_hover_color else ''}"},
            proposal.name
        TD
          className: 'summary_decide'
  