Anton Shestakov <av6@dwimlabs.net>, Fri, 08 Apr 2016 21:33:16 +0800
XMPPInterface: also trigger 'status' event and pass current status as-is
Literal statuses are nice to bind to individually, but that's not always
enough.
coffee/rivets.coffee
Permissions: -rw-r--r--
observe: (obj, keypath, callback) -> obj.on('change:' + keypath, callback) unobserve: (obj, keypath, callback) -> obj.off('change:' + keypath, callback) set: (obj, keypath, value) -> rivets.formatters['first-letter'] = (value) -> rivets.formatters['dumb-hash'] = (value) -> for i in [0...value.length] result += value.charCodeAt(i) rivets.formatters['fn'] = (value, fn) -> rivets.formatters['only'] = (value, allowed...) -> if value in allowed then value else '' rivets.formatters['eq'] = (a, b) -> rivets.formatters['has'] = (a, b) -> rivets.formatters['format-date'] = (value, format) -> if value? then value.format(format) else '' rivets.formatters['iso-date'] = (value) -> if value? then value.toISOString() else '' rivets.formatters['from-now'] = (value) -> if value? then value.fromNow() else ''