@danielkalen/simplybind
Version:
Magically simple, framework-less one-way/two-way data binding for frontend/backend in ~5kb.
42 lines (25 loc) • 1.45 kB
text/coffeescript
targetIncludes = (target, item)-> target and target.indexOf(item) isnt -1
checkIf =
isDefined: (subject)-> subject isnt undefined
isArray: (subject)-> subject instanceof Array
isObject: (subject)-> typeof subject is 'object' and subject # 2nd check is to test against 'null' values
isString: (subject)-> typeof subject is 'string'
isNumber: (subject)-> typeof subject is 'number'
isFunction: (subject)-> typeof subject is 'function'
isBindingInterface: (subject)-> subject instanceof BindingInterface
# simplyimport:if BUNDLE_TARGET = 'browser'
isBinding: (subject)-> subject instanceof Binding
isIterable: (subject)-> checkIf.isObject(subject) and checkIf.isNumber(subject.length)
isDom: (subject)-> subject.nodeName and subject.nodeType is 1
isDomInput: (subject)->
nodeName = subject.nodeName
return nodeName is 'INPUT' or nodeName is 'TEXTAREA' or nodeName is 'SELECT'
isDomRadio: (subject)-> subject.type is 'radio'
isDomCheckbox: (subject)-> subject.type is 'checkbox'
isElCollection: (subject)-> (subject instanceof NodeList) or (subject instanceof HTMLCollection) or (window.jQuery and subject instanceof jQuery)
domElsAreSame: (iterable)->
type = iterable[0].type
itemsWithSameType = [].filter.call iterable, (item)-> item.type is type
return itemsWithSameType.length is iterable.length
isDomNode: (subject)-> checkIf.isDom(subject) or subject is window or subject is document
# simplyimport:end