util.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. var Rx = require('cyclejs').Rx;
  2. var _ = require('lodash');
  3. // modified from https://github.com/JedWatson/classnames/blob/master/index.js
  4. function classNames () {
  5. var classes = '';
  6. for (var i = 0; i < arguments.length; i++) {
  7. var arg = arguments[i];
  8. if (!arg) continue;
  9. var argType = typeof arg;
  10. if ('string' === argType || 'number' === argType) {
  11. classes += '.' + arg;
  12. } else if (Array.isArray(arg)) {
  13. classes += '.' + classNames.apply(null, arg);
  14. } else if ('object' === argType) {
  15. for (var key in arg) {
  16. if (arg.hasOwnProperty(key) && arg[key]) {
  17. classes += '.' + key;
  18. }
  19. }
  20. }
  21. }
  22. return classes;
  23. }
  24. function log(label) {
  25. return _.bind(console.log, console, label);
  26. }
  27. function asObject(params) {
  28. var keys = _.keys(params).map(function(key) {
  29. return key.replace(/\$$/, '');
  30. });
  31. var vals = _.values(params);
  32. return Rx.Observable.combineLatest(vals, function() {
  33. return _.zipObject(keys, arguments);
  34. });
  35. }
  36. function sync(trigger$, data$) {
  37. return trigger$.withLatestFrom(data$, function(a, b) {
  38. return b;
  39. });
  40. }
  41. function PropertyHook(fn) {
  42. this.fn = fn;
  43. }
  44. PropertyHook.prototype.hook = function() {
  45. this.fn.apply(this, arguments);
  46. }
  47. function propHook(fn) {
  48. return new PropertyHook(fn);
  49. }
  50. module.exports = {
  51. asObject: asObject,
  52. sync: sync,
  53. log: log,
  54. classNames: classNames,
  55. propHook: propHook
  56. };