kernel-goodies.js 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. //jshint eqnull:true
  2. define(function () {
  3. "use strict";
  4. function inherits (child, parent) {
  5. child.prototype = Object.create(parent.prototype, {
  6. constructor: {
  7. value: child,
  8. enumerable: false, configurable: true, writable: true
  9. }
  10. });
  11. return child;
  12. }
  13. function defineMethod (klass, name, method) {
  14. Object.defineProperty(klass.prototype, name, {
  15. value: method,
  16. enumerable: false, configurable: true, writable: true
  17. });
  18. }
  19. function installJSMethod (obj, jsSelector, fn) {
  20. Object.defineProperty(obj, jsSelector, {
  21. value: fn,
  22. enumerable: false, configurable: true, writable: true
  23. });
  24. }
  25. /* Convert a Smalltalk selector into a JS selector */
  26. function st2js (string) {
  27. return '_' + string
  28. .replace(/:/g, '_')
  29. .replace(/[\&]/g, '_and')
  30. .replace(/[\|]/g, '_or')
  31. .replace(/[+]/g, '_plus')
  32. .replace(/-/g, '_minus')
  33. .replace(/[*]/g, '_star')
  34. .replace(/[\/]/g, '_slash')
  35. .replace(/[\\]/g, '_backslash')
  36. .replace(/[\~]/g, '_tild')
  37. .replace(/%/g, '_percent')
  38. .replace(/>/g, '_gt')
  39. .replace(/</g, '_lt')
  40. .replace(/=/g, '_eq')
  41. .replace(/,/g, '_comma')
  42. .replace(/[@]/g, '_at');
  43. };
  44. function js2st (selector) {
  45. if (selector.match(/^__/)) {
  46. return binaryJsToSt(selector);
  47. } else {
  48. return keywordJsToSt(selector);
  49. }
  50. }
  51. function keywordJsToSt (selector) {
  52. return selector.replace(/^_/, '').replace(/_/g, ':');
  53. }
  54. function binaryJsToSt (selector) {
  55. return selector
  56. .replace(/^_/, '')
  57. .replace(/_and/g, '&')
  58. .replace(/_or/g, '|')
  59. .replace(/_plus/g, '+')
  60. .replace(/_minus/g, '-')
  61. .replace(/_star/g, '*')
  62. .replace(/_slash/g, '/')
  63. .replace(/_backslash/g, '\\')
  64. .replace(/_tild/g, '~')
  65. .replace(/_percent/g, '%')
  66. .replace(/_gt/g, '>')
  67. .replace(/_lt/g, '<')
  68. .replace(/_eq/g, '=')
  69. .replace(/_comma/g, ',')
  70. .replace(/_at/g, '@');
  71. }
  72. return {
  73. js2st: js2st,
  74. st2js: st2js,
  75. installJSMethod: installJSMethod,
  76. defineMethod: defineMethod,
  77. inherits: inherits
  78. }
  79. });