Guest User

Untitled

a guest
Jun 29th, 2016
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.03 KB | None | 0 0
  1. (function (ko, handlers, unwrap, extend) {
  2. "use strict";
  3. extend(handlers, {
  4. href: {
  5. update: function (element, valueAccessor) {
  6. handlers.attr.update(element, function () {
  7. return { href: valueAccessor() };
  8. });
  9. }
  10. },
  11. src: {
  12. update: function (element, valueAccessor) {
  13. handlers.attr.update(element, function () {
  14. return { src: valueAccessor() };
  15. });
  16. }
  17. },
  18. hidden: {
  19. update: function (element, valueAccessor) {
  20. var value = unwrap(valueAccessor());
  21. handlers.visible.update(element, function () { return !value; });
  22. }
  23. },
  24. instantValue: {
  25. init: function (element, valueAccessor, allBindingsAccessor) {
  26. handlers.value.init(element, valueAccessor,
  27. ko.observable(extend(allBindingsAccessor(), {valueUpdate: 'afterkeydown'}))
  28. );
  29. },
  30. update: handlers.value.update
  31. },
  32. toggle: {
  33. init: function (element, valueAccessor) {
  34. var value = valueAccessor();
  35. ko.applyBindingsToNode(element, {
  36. click: function () {
  37. value(!value());
  38. }
  39. });
  40. }
  41. },
  42. currency: {
  43. symbol: ko.observable('$'),
  44. numberToCurrency: function (value, symbol) {
  45. return symbol + value.toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, "$1,");
  46. },
  47. update: function (element, valueAccessor, allBindingsAccessor) {
  48. return handlers.text.update(element, function () {
  49. var value = +(unwrap(valueAccessor()) || 0),
  50. symbol = unwrap(allBindingsAccessor().symbol === undefined
  51. ? allBindingsAccessor().symbol
  52. : handlers.currency.symbol);
  53. return handlers.currency.numberToCurrency(value, symbol);
  54. });
  55. }
  56. },
  57. stopBinding: {
  58. init: function () {
  59. return { controlsDescendantBindings: true };
  60. }
  61. },
  62. toJSON: {
  63. update: function (element, valueAccessor) {
  64. return handlers.text.update(element, function () {
  65. return ko.toJSON(valueAccessor(), null, 2);
  66. });
  67. }
  68. },
  69. timeAgo: {
  70. dateToTimeAgo: function (dt) {
  71. var secs = (((new Date()).getTime() - dt.getTime()) / 1000),
  72. days = Math.floor(secs / 86400);
  73.  
  74. return days === 0 && (
  75. secs < 60 && "just now" ||
  76. secs < 120 && "a minute ago" ||
  77. secs < 3600 && Math.floor(secs / 60) + " minutes ago" ||
  78. secs < 7200 && "an hour ago" ||
  79. secs < 86400 && Math.floor(secs / 3600) + " hours ago") ||
  80. days === 1 && "yesterday" ||
  81. days < 31 && days + " days ago" ||
  82. days < 60 && "one month ago" ||
  83. days < 365 && Math.ceil(days / 30) + " months ago" ||
  84. days < 730 && "one year ago" ||
  85. Math.ceil(days / 365) + " years ago";
  86. },
  87. update: function (element, valueAccessor) {
  88. var val = unwrap(valueAccessor()),
  89. date = new Date(val), // WARNING: this is not compatibile with IE8
  90. timeAgo = handlers.timeAgo.toTimeAgo(date);
  91. return handlers.html.update(element, function () {
  92. return '<time datetime="' + encodeURIComponent(val) + '">' + timeAgo + '</time>';
  93. });
  94. }
  95. }
  96. });
  97.  
  98. ko.virtualElements.allowedBindings.stopBinding = true;
  99. }(ko, ko.bindingHandlers, ko.utils.unwrapObservable, ko.utils.extend));
Add Comment
Please, Sign In to add comment