• Jump To … +
    beanvalidator-validation.coffee t5-core-dom-jquery.coffee t5-core-dom-prototype.coffee ajax.coffee ajaxformloop.coffee alert.coffee autocomplete.coffee bootstrap.coffee confirm-click.coffee console.coffee datefield.coffee events.coffee exception-display.coffee exception-frame.coffee fields.coffee form-fragment.coffee forms.coffee init.coffee localdate.coffee messages.coffee moment.coffee pageinit.coffee palette.coffee select.coffee time-interval.coffee tree.coffee utils.coffee validation.coffee zone-refresh.coffee zone.coffee
  • ajaxformloop.coffee

  • ¶

    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

    http:#www.apache.org/licenses/LICENSE-2.0

    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.

  • ¶

    t5/core/ajaxformloop

    Provides handlers related to the core/AjaxFormLoop component (as well as core/AddRowLink and core/RemoveRowLink).

    define ["./dom", "./events", "./console", "./ajax"],
      (dom, events, console, ajax) ->
  • ¶

    “afl” is short for “AjaxFormLoop”.

        AFL_SELECTOR = "[data-container-type='core/AjaxFormLoop']"
        FRAGMENT_TYPE = "core/ajaxformloop-fragment"
    
        dom.onDocument "click", "#{AFL_SELECTOR} [data-afl-behavior=remove]", ->
    
          afl = @findParent AFL_SELECTOR
    
          unless afl
            console.error "Enclosing element for AjaxFormLoop remove row link not found."
            return false
    
          url = afl.attr "data-remove-row-url"
    
          ajax url,
            data:
              "t:rowvalue": (@closest "[data-afl-row-value]").attr "data-afl-row-value"
            success: =>
  • ¶

    The server has removed the row from persistent storage, lets do the same on the UI.

              fragment = @findParent "[data-container-type='#{FRAGMENT_TYPE}']"
  • ¶

    TODO: Fire some before & after events, to allow for animation.

  • ¶

    The fragment takes with it the hidden fields that control form submission for its portion of the form.

              fragment.remove()
    
          return false
    
        dom.onDocument "click", "#{AFL_SELECTOR} [data-afl-behavior=insert-before] [data-afl-trigger=add]", ->
    
          afl = @findParent AFL_SELECTOR
    
          insertionPoint = @findParent "[data-afl-behavior=insert-before]"
    
          url = afl.attr "data-inject-row-url"
    
          ajax url,
            success: (response) ->
              content = response.json?.content or ""
  • ¶

    Create a new element with the same type (usually “div”) and class as this element. It will contain the new content.

              newElement = dom.create insertionPoint.element.tagName,
                                      'class': insertionPoint.element.className, 'data-container-type': FRAGMENT_TYPE,
                                      content
    
    
              insertionPoint.insertBefore newElement
  • ¶

    Initialize components inside the new row

              newElement.trigger events.initializeComponents
  • ¶

    Trigger this event, to inform the world that the zone-like new element has been updated with content.

              insertionPoint.trigger events.zone.didUpdate
    
              return
    
          return false
  • ¶

    This module is all event handlers, and no exported functions.

        return