adapter.ender.coffee | |
---|---|
Ender Opentip AdapterUses ender packages | |
Because $ is my favorite character | (($) -> |
Using bean as event handler | bean = require "bean" |
Using reqwest as AJAX lib | reqwest = require "reqwest" |
Augment ender | $.ender {
opentip: (content, title, options) -> new Opentip this, content, title, options
}, true |
And now the class | class Adapter
name: "ender" |
Simply using $.domReady | domReady: (callback) -> $.domReady callback |
DOM | |
Using bonzo to create html | create: (html) -> $ html |
Element handling | |
Wraps the element in ender | wrap: (element) ->
element = $ element
throw new Error "Multiple elements provided." if element.length > 1
element |
Returns the unwrapped element | unwrap: (element) -> $(element).get 0 |
Returns the tag name of the element | tagName: (element) -> @unwrap(element).tagName |
Returns or sets the given attribute of element It's important not to simply forward name and value because the value is set whether or not the value argument is present | attr: (element, args...) -> $(element).attr args... |
Returns or sets the given data of element It's important not to simply forward name and value because the value is set whether or not the value argument is present | data: (element, args...) -> $(element).data args... |
Finds elements by selector | find: (element, selector) -> $(element).find selector |
Finds all elements by selector | findAll: -> @find.apply @, arguments |
Updates the content of the element | update: (element, content, escape) ->
element = $ element
if escape
element.text content
else
element.html content |
Appends given child to element | append: (element, child) -> $(element).append child |
Add a class | addClass: (element, className) -> $(element).addClass className |
Remove a class | removeClass: (element, className) -> $(element).removeClass className |
Set given css properties | css: (element, properties) -> $(element).css properties |
Returns an object with given dimensions | dimensions: (element) -> $(element).dim() |
Returns the scroll offsets of current document | scrollOffset: ->
[
window.pageXOffset or document.documentElement.scrollLeft or document.body.scrollLeft
window.pageYOffset or document.documentElement.scrollTop or document.body.scrollTop
] |
Returns the dimensions of the viewport (currently visible browser area) | viewportDimensions: ->
{
width: document.documentElement.clientWidth
height: document.documentElement.clientHeight
} |
Returns an object with x and y | mousePosition: (e) ->
pos = x: 0, y: 0
e ?= window.event
return unless e?
if e.pageX or e.pageY
pos.x = e.pageX
pos.y = e.pageY
else if e.clientX or e.clientY
pos.x = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft
pos.y = e.clientY + document.body.scrollTop + document.documentElement.scrollTop
pos |
Returns the offset of the element | offset: (element) ->
offset = $(element).offset()
{
top: offset.top
left: offset.left
} |
Observe given eventName | observe: (element, eventName, observer) ->
$(element).on eventName, observer |
Stop observing event | stopObserving: (element, eventName, observer) -> $(element).unbind eventName, observer |
Perform an AJAX request and call the appropriate callbacks. | ajax: (options) ->
throw new Error "No url provided" unless options.url?
reqwest
url: options.url
type: 'html'
method: options.method?.toUpperCase() ? "GET"
error: (resp) -> options.onError? "Server responded with status #{resp.status}"
success: (resp) -> options.onSuccess? resp
complete: -> options.onComplete?() |
Utility functions | |
Creates a shallow copy of the object | clone: (object) ->
newObject = { }
for own key, val of object
newObject[key] = val
newObject |
Copies all properties from sources to target | extend: (target, sources...) ->
for source in sources
for own key, val of source
target[key] = val
target |
Add the adapter to the list | Opentip.addAdapter new Adapter
)(ender)
|