Requires

Provides

Interpolate.js

A logic to render (and nest) widgets out of the key-value hash or dom tree

License:
Public domain (http://unlicense.org).
Authors:
Yaroslaff Fedin
  1. 25
  2. 26
  3. 27
  4. 28
  5. 29
  6. 30
  7. 31
  8. 32
  9. 33
  10. 34
  11. 35
  12. 36
  13. 37
  14. 38
  15. 39
  16. 40
  17. 41
  18. 42
  19. 43
  20. 44
  21. 45
  22. 46
  23. 47
  24. 48
  25. 49
  26. 50
  27. 51
  28. 52
  29. 53
  30. 54
  31. 55
  32. 56
  33. 57
  34. 58
  35. 59
  36. 60
  37. 61
  38. 62
  39. 63
  40. 64
  41. 65
  42. 66
  43. 67
  44. 68
  45. 69
  46. 70
  47. 71
  48. 72
  49. 73
  50. 74
  51. 75
  52. 76
  53. 77
  54. 78
  55. 79
  56. 80
  57. 81
  58. 82
!function() { LSD.Interpolation = {} var helpers = LSD.Interpolation.helpers = { pluralize: function(count, singular, plural) { if (count == 1) return singular; return plural || (singular.pluralize()) }, auto_pluralize: function(count, singular, plural) { return count + " " + helpers.pluralize(count, singular, plural); } } var regex = SheetParser.Value.tokenize; var parsed = {}; var interpolate = LSD.Interpolation.interpolate = function(name, callback, simple) { if (!simple || (name.indexOf('(') > -1)) return execute(translate(name), callback); return callback(name); } var translate = LSD.Interpolation.translate = function(value) { var cached = parsed[name]; if (cached) return cached; var found, result = [], matched = [], scope = result, func, text; var names = regex.names; while (found = regex.exec(value)) matched.push(found); for (var i = 0; found = matched[i++];) { if (func = found[names['function']]) { var translated = translate(found[names._arguments]); for (var j = 0, bit; bit = translated[j]; j++) if (bit && bit.length == 1) translated[j] = bit[0]; scope.push({fn: func, arguments: translated}); } else if (text = (found[names.dstring] || found[names.sstring])) { scope.push(text) } else if (text = found[names.token]) { scope.push({fn: interpolate, arguments: [text, true], callback: true}) } } return (parsed[value] = (result.length == 1 ? result[0] : result)); } var execute = LSD.Interpolation.execute = function(command, callback) { var fn = command.fn; if (fn) { var func = fn.indexOf ? (helpers[fn] || (callback(fn))) : fn; if (!func) { console.error(fn, ' interpoaltion function is not found'); return ""; } console.log(fn.indexOf ? fn : '', command.arguments) var args = Array.prototype.slice.call(command.arguments, 0); for (var i = 0, j = args.length; i < j; i++) args[i] = execute(args[i], callback); if (command.callback) args.splice(1, 0, callback); return func.apply(this, args); } return command; } }();