This is an automated email from the ASF dual-hosted git repository.

thiagohp pushed a commit to branch feature/coffeescript-to-typescript
in repository https://gitbox.apache.org/repos/asf/tapestry-5.git

commit 2b2972d389c1823a078f4d0d880d118245880bbb
Author: Thiago H. de Paula Figueiredo <[email protected]>
AuthorDate: Sat Apr 19 15:58:56 2025 -0300

    TAP5-2804: removing t5-core-dom.coffee
---
 .../org/apache/tapestry5/t5-core-dom.coffee        | 993 ---------------------
 1 file changed, 993 deletions(-)

diff --git 
a/tapestry-core/src/main/preprocessed-coffeescript/org/apache/tapestry5/t5-core-dom.coffee
 
b/tapestry-core/src/main/preprocessed-coffeescript/org/apache/tapestry5/t5-core-dom.coffee
deleted file mode 100644
index 07234a83e..000000000
--- 
a/tapestry-core/src/main/preprocessed-coffeescript/org/apache/tapestry5/t5-core-dom.coffee
+++ /dev/null
@@ -1,993 +0,0 @@
-# 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/dom
-#
-# This is the abstraction layer that allows the majority of components to 
operate without caring whether the
-# underlying infrastructure framework is Prototype, jQuery, or something else.
-#
-# The abstraction layer has a number of disadvantages:
-#
-# * It adds a number of layers of wrapper around the infrastructure framework 
objects
-# * It is leaky; some behaviors will vary slightly based on the active 
infrastructure framework
-# * The abstraction is alien to both Prototype and jQuery developers; it mixes 
some ideas from both
-# * It is much less powerful or expressive than either infrastructure 
framework used directly
-#
-# It is quite concievable that some components will require direct access to 
the infrastructure framework, especially
-# those that are wrappers around third party libraries or plugins; however 
many simple components may need no more than
-# the abstract layer and gain the valuable benefit of not caring about the 
infrastructure framework.
-
-#if prototype
-define ["underscore", "./utils", "./events", "jquery"],
-(_, utils, events) ->
-#elseif jquery
-define ["underscore", "./utils", "./events", "jquery"],
-(_, utils, events, $) ->
-#endif
-
-#if prototype
-  # Save a local reference to Prototype.$ ... see notes about some challenges 
using Prototype, jQuery,
-  # and RequireJS together, here: 
https://github.com/jrburke/requirejs/issues/534
-  $ = window.$
-
-  # Fires a native event; something that Prototype does not normally do.
-  # Returns true if the event completed normally, false if it was canceled.
-  fireNativeEvent = (element, eventName) ->
-    if document.createEventObject
-      # IE support:
-      event = document.createEventObject()
-      return element.fireEvent "on#{eventName}", event
-
-    # Everyone else:
-    event = document.createEvent "HTMLEvents"
-    event.initEvent eventName, true, true
-    element.dispatchEvent event
-    return not event.defaultPrevented
-
-  # converts a selector to an array of DOM elements
-  parseSelectorToElements = (selector) ->
-    if _.isString selector
-      return $$ selector
-
-    # Array is assumed to be array of DOM elements
-    if _.isArray selector
-      return selector
-
-    # Assume its a single DOM element
-
-    [selector]
-#endif
-
-  # Converts content (provided to `ElementWrapper.update()` or `append()`) 
into an appropriate type. This
-  # primarily exists to validate the value, and to "unpack" an ElementWrapper 
into a DOM element.
-  convertContent = (content) ->
-    if _.isString content
-      return content
-
-    if _.isElement content
-      return content
-
-    if content instanceof ElementWrapper
-#if jquery
-      return content.$
-#elseif prototype
-      return content.element
-#endif
-
-    throw new Error "Provided value <#{content}> is not valid as DOM element 
content."
-
-  # Generic view of an DOM event that is passed to a handler function.
-  #
-  # Properties:
-  #
-  # * nativeEvent - the native Event object, which may provide additional 
information.
-  # * memo - the object passed to `ElementWrapper.trigger()`.
-  # * type - the name of the event that was triggered.
-  # * char - the character value of the pressed key, if a printable character, 
as a string.
-  # * key -The key value of the pressed key. This is the same as the `char` 
property for printable keys,
-  #  or a key name for others.
-  class EventWrapper
-
-#if jquery
-    constructor: (event, memo) ->
-      @nativeEvent = event
-      @memo = memo
-#elseif prototype
-    constructor: (event) ->
-      @nativeEvent = event
-      @memo = event.memo
-#endif
-      # This is to satisfy YUICompressor which doesn't seem to like 'char', 
even
-      # though it doesn't appear to be a reserved word.
-      this[name] = event[name] for name in ["type", "char", "key"]
-
-    # Stops the event which prevents further propagation of the DOM event,
-    # as well as DOM event bubbling.
-    stop: ->
-#if jquery
-      @nativeEvent.preventDefault()
-      @nativeEvent.stopImmediatePropagation()
-#elseif prototype
-      # There's no equivalent to stopImmediatePropagation() unfortunately.
-      @nativeEvent.stop()
-#endif
-
-#if jquery
-  # Interface between the dom's event model, and jQuery's.
-  #
-  # * jqueryObject - jQuery wrapper around one or more DOM elements
-  # * eventNames - space-separated list of event names
-  # * match - selector to match bubbled elements, or null
-  # * handler - event handler function to invoke; it will be passed an 
`EventWrapper` instance as the first parameter,
-  #   and the memo as the second parameter. `this` will be the 
`ElementWrapper` for the matched element.
-  #
-  # Event handlers may return false to stop event propogation; this prevents 
an event from bubbling up, and
-  # prevents any browser default behavior from triggering.  This is often 
easier than accepting the `EventWrapper`
-  # object as the first parameter and invoking `stop()`.
-  #
-  # Returns a function of no parameters that removes any added handlers.
-
-  onevent = (jqueryObject, eventNames, match, handler) ->
-    throw new Error "No event handler was provided." unless handler?
-
-    wrapped = (jqueryEvent, memo) ->
-      # Set `this` to be the matched ElementWrapper, rather than the element 
on which the event is observed
-      # (which is often further up the hierarchy).
-      elementWrapper = new ElementWrapper $(jqueryEvent.target)
-      eventWrapper = new EventWrapper jqueryEvent, memo
-
-      result = handler.call elementWrapper, eventWrapper, memo
-
-      # If an event handler returns exactly false, then stop the event.
-      if result is false
-        eventWrapper.stop()
-
-      return
-
-    jqueryObject.on eventNames, match, wrapped
-
-    # Return a function to stop listening
-    -> jqueryObject.off eventNames, match, wrapped
-#elseif prototype
-  # Interface between the dom's event model, and Prototype's.
-  #
-  # * elements - array of DOM elements (or the document object)
-  # * eventNames - array of event names
-  # * match - selector to match bubbled elements, or null
-  # * handler - event handler function to invoke; it will be passed an 
`EventWrapper` instance as the first parameter,
-  #   and the memo as the second parameter. `this` will be the 
`ElementWrapper` for the matched element.
-  #
-  # Event handlers may return false to stop event propagation; this prevents 
an event from bubbling up, and
-  # prevents any browser default behavior from triggering.  This is often 
easier than accepting the `EventWrapper`
-  # object as the first parameter and invoking `stop()`.
-  #
-  # Returns a function of no parameters that removes any added handlers.
-
-  onevent = (elements, eventNames, match, handler) ->
-      throw new Error "No event handler was provided." unless handler?
-
-      wrapped = (prototypeEvent) ->
-        # Set `this` to be the matched ElementWrapper, rather than the element 
on which the event is observed
-        # (which is often further up the hierarchy).
-        elementWrapper = new ElementWrapper prototypeEvent.findElement()
-        eventWrapper = new EventWrapper prototypeEvent
-
-        # Because there's no stopImmediatePropogation() as with jQuery, we 
detect if the
-        # event was stopped and simply stop calling the handler.
-        result = if prototypeEvent.stopped
-                  false
-                else handler.call elementWrapper, eventWrapper, 
eventWrapper.memo
-
-        # If an event handler returns exactly false, then stop the event.
-        if result is false
-          prototypeEvent.stop()
-
-        return
-
-      eventHandlers = []
-
-      for element in elements
-        for eventName in eventNames
-          eventHandlers.push (Event.on element, eventName, match, wrapped)
-
-      # Return a function to remove the handler(s)
-      ->
-        for eventHandler in eventHandlers
-          eventHandler.stop()
-#endif
-
-  # Wraps a DOM element, providing some common behaviors.
-  # Exposes the DOM element as property `element`.
-  class ElementWrapper
-
-#if jquery
-    # Passed the jQuery object
-    constructor: (query) ->
-      @$ = query
-      @element = query[0]
-#elseif prototype
-    constructor: (@element) ->
-#endif
-
-    # Some coders would use some JavaScript cleverness to automate more of the 
mapping from the ElementWrapper API
-    # to the jQuery API, but that eliminates a chance to write some very 
necessary documentation.
-
-    toString: ->
-      markup = @element.outerHTML
-
-      "ElementWrapper[#{markup.substring 0, (markup.indexOf ">") + 1}]"
-
-    # Hides the wrapped element, setting its display to 'none'.
-    hide: ->
-#if jquery
-      @$.hide()
-#elseif prototype
-      @element.hide()
-#endif
-
-      return this
-
-    # Displays the wrapped element if hidden.
-    show: ->
-#if jquery
-      @$.show()
-#elseif prototype
-      @element.show()
-#endif
-
-      return this
-
-    # Gets or sets a CSS property. jQuery provides a lot of mapping of names 
to canonical names.
-    css: (name, value) ->
-
-      if arguments.length is 1
-#if jquery
-        return @$.css name
-#elseif prototype
-        return @element.getStyle name
-#endif
-
-#if jquery
-      @$.css name, value
-#elseif prototype
-      @element.setStyle name: value
-#endif
-
-      return this
-
-    # Returns the offset of the object relative to the document. The returned 
object has
-    # keys `top`' and `left`'.
-    offset: ->
-#if jquery
-      @$.offset()
-#elseif prototype
-      @element.viewportOffset()
-#endif
-
-    # Removes the wrapped element from the DOM.  It can later be re-attached.
-    remove: ->
-#if jquery
-      @$.detach()
-#elseif prototype
-      @element.remove()
-#endif
-
-      return this
-
-    # Reads or updates an attribute. With one argument, returns the current 
value
-    # of the attribute. With two arguments, updates the attribute's value, and 
returns
-    # the previous value. Setting an attribute to null is the same as removing 
it.
-    #
-    # Alternately, the first attribute can be an object in which case all the 
keys
-    # and values of the object are applied as attributes, and this 
`ElementWrapper` is returned.
-    #
-    # * name - the attribute to read or update, or an object of keys and values
-    # * value - (optional) the new value for the attribute
-    attr: (name, value) ->
-
-      if _.isObject name
-        for attributeName, value of name
-          @attr attributeName, value
-
-        return this
-
-#if jquery
-      current = @$.attr name
-      if arguments.length > 1
-        if value is null
-          @$.removeAttr name
-        else
-          @$.attr name, value
-      if _.isUndefined current
-        current = null
-#elseif prototype
-      current = @element.readAttribute name
-      if arguments.length > 1
-        # Treat undefined and null the same; Prototype does something slightly 
odd,
-        # treating undefined as a special case where the attribute value 
matches
-        # the attribute name.
-        @element.writeAttribute name, if value is undefined then null else 
value
-#endif
-
-      return current
-
-    # Moves the cursor to the field.
-    focus: ->
-#if jquery
-      @$.focus()
-#elseif prototype
-      @element.focus()
-#endif
-
-      return this
-
-    # Returns true if the element has the indicated class name, false 
otherwise.
-    hasClass: (name) ->
-#if jquery
-      @$.hasClass name
-#elseif prototype
-      @element.hasClassName name
-#endif
-
-    # Removes the class name from the element.
-    removeClass: (name) ->
-#if jquery
-      @$.removeClass name
-#elseif prototype
-      @element.removeClassName name
-#endif
-
-      return this
-
-    # Adds the class name to the element.
-    addClass: (name) ->
-#if jquery
-      @$.addClass name
-#elseif prototype
-      @element.addClassName name
-#endif
-
-      return this
-
-    # Updates this element with new content, replacing any old content. The 
new content may be HTML text, or a DOM
-    # element, or an ElementWrapper, or null (to remove the body of the 
element).
-    update: (content) ->
-#if jquery
-      @$.empty()
-
-      if content
-        @$.append (convertContent content)
-#elseif prototype
-      @element.update (content and convertContent content)
-#endif
-
-      return this
-
-    # Appends new content (Element, ElementWrapper, or HTML markup string) to 
the body of the element.
-    append: (content) ->
-#if jquery
-      @$.append (convertContent content)
-#elseif prototype
-      @element.insert bottom: (convertContent content)
-#endif
-
-      return this
-
-    # Prepends new content (Element, ElementWrapper, or HTML markup string) to 
the body of the element.
-    prepend: (content) ->
-#if jquery
-      @$.prepend (convertContent content)
-#elseif prototype
-      @element.insert top: (convertContent content)
-#endif
-
-      return this
-
-    # Inserts new content (Element, ElementWrapper, or HTML markup string) 
into the DOM immediately before
-    # this ElementWrapper's element.
-    insertBefore: (content) ->
-#if jquery
-      @$.before (convertContent content)
-#elseif prototype
-      @element.insert before: (convertContent content)
-#endif
-
-      return this
-
-    # Inserts new content (Element, ElementWrapper, or HTML markup string) 
into the DOM immediately after
-    # this ElementWrapper's element.
-    insertAfter: (content) ->
-#if jquery
-      @$.after (convertContent content)
-#elseif prototype
-      @element.insert after: (convertContent content)
-#endif
-
-      return this
-
-    # Finds the first child element that matches the CSS selector, wrapped as 
an ElementWrapper.
-    # Returns null if not found.
-    findFirst: (selector) ->
-#if jquery
-      match = @$.find selector
-
-      if match.length
-        # At least one element was matched, just keep the first
-        new ElementWrapper match.first()
-#elseif prototype
-      match = @element.down selector
-
-      # Prototype returns undefined if not found, we want to return null.
-      if match
-        new ElementWrapper match
-#endif
-      else
-        return null
-
-    # Finds _all_ child elements matching the CSS selector, returning them
-    # as an array of ElementWrappers.
-    find: (selector) ->
-#if jquery
-      matches = @$.find selector
-
-      for i in [0...matches.length]
-        new ElementWrapper matches.eq i
-#elseif prototype
-      matches = @element.select selector
-
-      new ElementWrapper(e) for e in matches
-#endif
-
-    # Find the first container element that matches the selector (wrapped as 
an ElementWrapper),
-    # or returns null.
-    findParent: (selector) ->
-#if jquery
-      parents = @$.parents selector
-
-      return null unless parents.length
-
-      new ElementWrapper parents.eq(0)
-#elseif prototype
-      parent = @element.up selector
-
-      return null unless parent
-
-      new ElementWrapper parent
-#endif
-
-    # Returns this ElementWrapper if it matches the selector; otherwise, 
returns the first container element (as an ElementWrapper)
-    # that matches the selector. Returns null if no container element matches.
-    closest: (selector) ->
-#if jquery
-      match = @$.closest selector
-
-      switch
-        when match.length is 0 then return null
-        when match[0] is @element then return this
-        else return new ElementWrapper match
-#elseif prototype
-      if @element.match selector
-        return this
-
-      return @findParent selector
-#endif
-
-    # Returns an ElementWrapper for this element's containing element.
-    # Returns null if this element has no parent (either because this element 
is the document object, or
-    # because this element is not yet attached to the DOM).
-    parent: ->
-#if jquery
-      parent = @$.parent()
-
-      return null unless parent.length
-#elseif prototype
-      parent = @element.parentNode
-
-      return null unless parent
-#endif
-      new ElementWrapper parent
-
-    # Returns an array of all the immediate child elements of this element, as 
ElementWrappers.
-    children: ->
-#if jquery
-      children = @$.children()
-
-      for i in [0...children.length]
-        new ElementWrapper children.eq i
-
-#elseif prototype
-      new ElementWrapper(e) for e in @element.childElements()
-#endif
-
-    # Returns true if this element is visible, false otherwise. This does not 
check to see if all containers of the
-    # element are visible.
-    visible: ->
-#if jquery
-      @$.css("display") isnt "none"
-#elseif prototype
-      @element.visible()
-#endif
-
-    # Returns true if this element is visible, and all parent elements are 
also visible, up to the document body.
-    deepVisible: ->
-      element = this.element
-      element.offsetWidth > 0 && element.offsetHeight > 0
-
-    # Fires a named event, passing an optional _memo_ object to event handler 
functions. This must support
-    # common native events (exact list TBD), as well as custom events (in 
Prototype, custom events must have
-    # a prefix that ends with a colon).
-    #
-    # * eventName - name of event to trigger on the wrapped Element
-    # * memo - optional value assocated with the event; available as 
WrappedeEvent.memo in event handler functions (must
-    #   be null for native events). The memo, when provided, should be an 
object; it is an error if it is a string or other
-    #  non-object type..
-    #
-    # Returns true if the event fully executed, or false if the event was 
canceled.
-    trigger: (eventName, memo) ->
-      throw new Error "Attempt to trigger event with null event name" unless 
eventName?
-
-      unless (_.isNull memo) or (_.isObject memo) or (_.isUndefined memo)
-        throw new Error "Event memo may be null or an object, but not a simple 
type."
-
-#if jquery
-      jqEvent = $.Event eventName
-
-      @$.trigger jqEvent, memo
-
-      return not jqEvent.isImmediatePropagationStopped()
-#elseif prototype
-      if (eventName.indexOf ':') > 0
-        # Custom event is supported directly by Prototype:
-        event = @element.fire eventName, memo
-        return not event.defaultPrevented
-
-      # Native events take some extra work:
-      if memo
-        throw new Error "Memo must be null when triggering a native event"
-
-      # Hacky solution for TAP5-2602 (5.4 LinkSubmit does not work with 
Prototype JS)
-      unless Prototype.Browser.WebKit and eventName == 'submit' and @element 
instanceof HTMLFormElement
-        fireNativeEvent @element, eventName
-      else
-        @element.requestSubmit()
-              
-#endif
-
-    # With no parameters, returns the current value of the element (which must 
be a form control element, such as `<input>` or
-    # `<textarea>`). With one parameter, updates the field's value, and 
returns the previous value. The underlying
-    # foundation is responsible for mapping this correctly based on the type 
of control element.
-    # TODO: Define behavior for multi-named elements, such as `<select>`.
-    #
-    # * newValue - (optional) new value for field
-    value: (newValue) ->
-#if jquery
-      current = @$.val()
-
-      if arguments.length > 0
-        @$.val newValue
-#elseif prototype
-      current = @element.getValue()
-
-      if arguments.length > 0
-        @element.setValue newValue
-#endif
-      return current
-
-    # Returns true if element is a checkbox and is checked
-    checked: ->
-      @element.checked
-
-    # Stores or retrieves meta-data on the element. With one parameter, the 
current value for the name
-    # is returned (or undefined). With two parameters, the meta-data is 
updated and the previous value returned.
-    # For Prototype, the meta data is essentially empty (except, perhaps, for 
some internal keys used to store
-    # event handling information).  For jQuery, the meta data may be 
initialized from data- attributes.
-    #
-    # * name - name of meta-data value to store or retrieve
-    # * value - (optional) new value for meta-data
-    meta: (name, value) ->
-#if jquery
-      current = @$.data name
-
-      if arguments.length > 1
-        @$.data name, value
-#elseif prototype
-      current = @element.retrieve name
-
-      if arguments.length > 1
-        @element.store name, value
-#endif
-      return current
-
-    # Adds an event handler for one or more events.
-    #
-    # * events - one or more event names, separated by spaces
-    # * match - optional: CSS expression used as a filter; only events that 
bubble
-    #   up to the wrapped element from an originating element that matches the 
CSS expression
-    #   will invoke the handler.
-    # * handler - function invoked; the function is passed an `EventWrapper` 
object, and the
-    #   context (`this`) is the `ElementWrapper` for the matched element.
-    #
-    # Returns a function of no parameters that removes any added handlers.
-    on: (events, match, handler) ->
-      exports.on @element, events, match, handler
-      return this
-
-    # Returns the text of the element (and its children).
-    text: ->
-#if jquery
-      @$.text()
-#elseif prototype
-      @element.textContent or @element.innerText
-#endif
-
-#if jquery
-  # Wrapper around the `jqXHR` object
-  class RequestWrapper
-
-    constructor: (@jqxhr) ->
-
-    # Abort a running ajax request
-    abort: -> @jqxhr.abort()
-#elseif prototype
-  # Wrapper around the Prototype `Ajax.Request` object
-  class RequestWrapper
-
-    constructor: (@req) ->
-
-    # Abort a running ajax request
-    abort: -> throw "Cannot abort Ajax request when using Prototype."
-#endif
-
-
-#if jquery
-  # Wrapper around the `jqXHR` object
-  class ResponseWrapper
-
-    constructor: (@jqxhr, data) ->
-
-      @status = @jqxhr.status
-      @statusText = @jqxhr.statusText
-      @json = data # Mostly right?  Need a content type check?
-      @text = @jqxhr.responseText
-
-    # Retrieves a response header by name
-    header: (name) ->
-      @jqxhr.getResponseHeader name
-#elseif prototype
-  # Wrapper around the Prototype `Ajax.Response` object
-  class ResponseWrapper
-
-    constructor: (@res) ->
-
-      @status = @res.status
-      @statusText = @res.statusText
-      @json = @res.responseJSON
-      @text = @res.responseText
-
-    # Retrieves a response header by name
-    header: (name) ->
-      @res.getHeader name
-#endif
-
-  # Used to track how many active Ajax requests are currently in-process. This 
is incremented
-  # when an Ajax request is started, and decremented when an Ajax request 
completes or fails.
-  # The body attribute `data-ajax-active` is set to the number of active Ajax 
requests, whenever the
-  # count changes. This only applies to Ajax requests that are filtered 
through the t5/core/dom API;
-  # other libraries (including RequireJS) which bypass this API are not 
counted.
-
-  activeAjaxCount = 0
-
-  adjustAjaxCount = (delta) ->
-    activeAjaxCount += delta
-
-    exports.body.attr "data-ajax-active", activeAjaxCount
-
-  # Performs an asynchronous Ajax request, invoking callbacks when it 
completes.
-  #
-  # This is very low level; most code will want to go through the 
`t5/core/ajax` module instead,
-  # which adds better handling of exceptions and failures, and handles 
Tapestry's partial page
-  # render reponse keys.
-  #
-  # * options.method - "post", "get", etc., default: "post".
-  # * options.contentType - request content, defaults to 
"application/x-www-form-urlencoded"
-  # * options.data - optional, additional key/value pairs (for the default 
content type)
-  # * options.headers - optional, additional key/value pairs to be added to 
the request headers.
-  # * options.success - handler to invoke on success. Passed the 
ResponseWrapper object.
-  #   Default does nothing.
-  # * options.failure - handler to invoke on failure (server responds with a 
non-2xx code).
-  #   Passed the response. Default will throw the exception
-  # * options.exception - handler to invoke when an exception occurs (often 
means the server is unavailable).
-  #   Passed the exception. Default will generate an exception message and 
throw an `Error`.
-  #   Note: not really supported under jQuery, a hold-over from Prototype.
-  # Returns the module's exports
-  ajaxRequest = (url, options = {}) ->
-#if jquery
-    jqxhr = $.ajax
-      url: url
-      type: options.method?.toUpperCase() or "POST"
-      contentType: options.contentType
-      traditional: true
-      data: options.data
-      headers: options.headers or {}
-      # jQuery doesn't have the equivalent of Protoype's onException
-      error: (jqXHR, textStatus, errorThrown) ->
-        adjustAjaxCount -1
-
-        return if textStatus is "abort"
-        message = "Request to #{url} failed with status #{textStatus}"
-        text = jqXHR.statusText
-        if not _.isEmpty text
-          message += " -- #{text}"
-        message += "."
-
-        if options.failure
-          options.failure (new ResponseWrapper jqXHR), message
-        else
-          throw new Error message
-
-        return
-
-      success: (data, textStatus, jqXHR) ->
-
-        adjustAjaxCount -1
-
-        options.success and options.success(new ResponseWrapper jqXHR, data)
-        return
-
-    adjustAjaxCount +1
-
-    new RequestWrapper jqxhr
-#elseif prototype
-    finalOptions =
-      method: options.method or "post"
-      contentType: options.contentType or "application/x-www-form-urlencoded"
-      parameters: options.data
-      requestHeaders: options.headers
-      onException: (ajaxRequest, exception) ->
-
-        adjustAjaxCount -1
-
-        if options.exception
-          options.exception exception
-        else
-          throw exception
-
-        return
-
-      onFailure: (response) ->
-        adjustAjaxCount -1
-
-        message = "Request to #{url} failed with status 
#{response.getStatus()}"
-        text = response.getStatusText()
-        if not _.isEmpty text
-          message += " -- #{text}"
-        message += "."
-
-        if options.failure
-          options.failure (new ResponseWrapper response), message
-        else
-          throw new Error message
-
-        return
-
-      onSuccess: (response) ->
-
-        adjustAjaxCount -1
-
-        # Prototype treats status == 0 as success, even though it may
-        # indicate that the server didn't respond.
-        if (not response.getStatus()) or (not response.request.success())
-          finalOptions.onFailure(new ResponseWrapper response)
-          return
-
-        # Tapestry 5.3 includes lots more exception catching ... that just got 
in the way
-        # of identifying the source of problems.  That's been stripped out.
-        options.success and options.success(new ResponseWrapper response)
-        return
-
-    adjustAjaxCount +1
-
-    new RequestWrapper (new Ajax.Request url, finalOptions)
-#endif
-
-  scanners = null
-
-  # Sets up a scanner callback; this is used to perfom one-time setup of 
elements
-  # that match a particular CSS selector. The callback is passed each element 
that
-  # matches the selector. The callback is expected to modify the element so 
that it does not
-  # match future selections caused by zone updates, typically by removing the 
CSS class or data- attribute
-  # referenced by the selector.
-  scanner = (selector, callback) ->
-    # Define a function that scans some root element (the body initially; 
later an updated Zone)
-    scan = (root) ->
-      callback el for el in root.find selector
-      return
-
-    # Do it once immediately:
-
-    scan exports.body
-
-    # Lazily set up a single event handler for running any added scanners.
-
-    if scanners is null
-      scanners = []
-      exports.body.on events.initializeComponents, ->
-        f this for f in scanners
-        return
-
-    scanners.push scan
-
-    return
-
-  # The main export is a function that wraps a DOM element as an 
ElementWrapper; additional functions are attached as
-  # properties.
-  #
-  # * element - a DOM element, or a string id of a DOM element
-  #
-  # Returns the ElementWrapper, or null if no element with the id exists
-  exports = wrapElement = (element) ->
-    if _.isString element
-#if jquery
-      element = document.getElementById element
-#elseif prototype
-      element = $ element
-#endif
-      return null unless element
-    else
-      throw new Error "Attempt to wrap a null DOM element" unless element
-
-#if jquery
-    # Assume the object is a DOM element, document or window; something that 
is compatible with the
-    # jQuery API (especially with respect to events).
-    new ElementWrapper ($ element)
-#elseif prototype
-    # Assume the object is a DOM element, document or window; something that 
is compatible with the
-    # Prototype API (especially with respect to events).
-    new ElementWrapper element
-#endif
-
-  # Creates a new element, detached from the DOM.
-  #
-  # * elementName - (string) name of element to create, if ommitted, then "div"
-  # * attributes - (object) attributes to apply to the created element (may be 
omitted)
-  # * body - (string) content for the new element, may be omitted for no body
-  createElement = (elementName, attributes, body) ->
-
-    if _.isObject elementName
-      body = attributes
-      attributes = elementName
-      elementName = null
-
-    if _.isString attributes
-      body = attributes
-      attributes = null
-
-    element = wrapElement document.createElement (elementName or "div")
-
-    if attributes
-      element.attr attributes
-
-    if body
-      element.update body
-
-    return element
-
-  # Returns the value of a given data attribute as an object.
-  # The "data-" prefix is added automatically.
-  # element - (object) HTML dom element
-  # attribute - (string) name of the data attribute without the "data-" prefix.
-  getDataAttributeAsObject = (element, attribute) ->
-
-#if jquery
-    value = $(element).data(attribute)
-#elseif prototype
-    value = $(element).readAttribute('data-' + attribute)
-    if value isnt null
-      value = JSON.parse(value)
-    else
-      value = {}
-#endif
-
-  # Returns the URL of a component event based on its name and an optional 
element
-  # or null if the event information is not found. When the element isn't 
passed
-  # or it's null, the event data is taken from the <body> element.
-  #
-  # * eventName - (string) name of the component event
-  # * element - (object) HTML DOM element to be used as the beginning of the 
event data search. Optional.
-  getEventUrl = (eventName, element) ->
-
-    if not (eventName?)
-      throw 'dom.getEventUrl: the eventName parameter cannot be null'
-
-    if not _.isString eventName
-      throw 'dom.getEventUrl: the eventName parameter should be a string'
-
-    eventName = eventName.toLowerCase()
-
-    if element is null
-      element = document.body
-    else if element instanceof ElementWrapper
-      element = element.element;
-    else if element.jquery?
-      element = element[0];
-
-
-    # Look for event data in itself first, then in the preceding siblings
-    # if not found
-    url = null
-
-    while not url? and element.previousElementSibling?
-      data = getDataAttributeAsObject(element, 'component-events')
-      url = data?[eventName]?.url
-      element = element.previousElementSibling
-
-    if not url?
-
-      # Look at parent elements recursively
-      while not url? and element.parentElement?
-        data = getDataAttributeAsObject(element, 'component-events')
-        url = data?[eventName]?.url
-        element = element.parentElement;
-    
-    return url;
-
-  _.extend exports,
-  
-    getEventUrl: getEventUrl
-    
-    wrap: wrapElement
-
-    create: createElement
-
-    ajaxRequest: ajaxRequest
-
-    # Used to add an event handler to an element (possibly from elements below 
it in the hierarchy).
-    #
-    # * selector - CSS selector used to select elements to attach handler to; 
alternately,
-    #   a single DOM element, or an array of DOM elements. The document is 
considered an element
-    #   for these purposes.
-    # * events - one or more event names, separated by spaces
-    # * match - optional: CSS expression used as a filter; only events that 
bubble
-    # * up to a selected element from an originating element that matches the 
CSS expression
-    #   will invoke the handler.
-    # * handler - function invoked; the function is passed an `EventWrapper` 
object, and the context (`this`)
-    #   is the `ElementWrapper` for the matched element
-    #
-    # Returns a function of no parameters that removes any added handlers.
-    on: (selector, events, match, handler) ->
-      unless handler?
-        handler = match
-        match = null
-
-#if jquery
-      elements = $ selector
-#elseif prototype
-      elements = parseSelectorToElements selector
-      events = utils.split events
-#endif
-      onevent elements, events, match, handler
-
-    # onDocument() is used to add an event handler to the document object; 
this is used
-    # for global (or default) handlers.
-    # Returns a function of no parameters that removes any added handlers.
-    onDocument: (events, match, handler) ->
-      exports.on document, events, match, handler
-
-    # Returns a wrapped version of the document.body element. Because all 
Tapestry JavaScript occurs
-    # inside a block at the end of the document, inside the `<body`> element, 
it is assumed that
-    # it is always safe to get the body.
-    body: wrapElement document.body
-
-    scanner: scanner
-
-  return exports


Reply via email to