足力健前端,vue版本

uni.compiler.js 2.1KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. function cached (fn) {
  2. const cache = Object.create(null)
  3. return function cachedFn (str) {
  4. const hit = cache[str]
  5. return hit || (cache[str] = fn(str))
  6. }
  7. }
  8. const capitalize = cached(str => {
  9. return str.charAt(0).toUpperCase() + str.slice(1)
  10. })
  11. const EVENTS = {
  12. click: 'tap',
  13. touchstart: 'touchStart',
  14. touchmove: 'touchMove',
  15. touchend: 'touchEnd',
  16. touchcancel: 'touchCancel',
  17. longtap: 'longTap',
  18. longpress: 'longTap',
  19. transitionend: 'transitionEnd',
  20. animationstart: 'animationStart',
  21. animationiteration: 'animationIteration',
  22. animationend: 'animationEnd',
  23. firstappear: 'firstAppear',
  24. // map
  25. markertap: 'markerTap',
  26. callouttap: 'calloutTap',
  27. controltap: 'controlTap',
  28. regionchange: 'regionChange',
  29. // scroll-view
  30. scrolltoupper: 'scrollToUpper',
  31. scrolltolower: 'scrollToLower',
  32. // movable-view
  33. changeend: 'changeEnd'
  34. }
  35. module.exports = {
  36. directive: 'a:',
  37. specialEvents: {
  38. form: {
  39. reset: 'onReset'
  40. },
  41. map: {
  42. markertap: 'onMarkerTap',
  43. controltap: 'onControlTap',
  44. callouttap: 'onCalloutTap',
  45. regionchange: 'onRegionChange'
  46. }
  47. },
  48. createFilterTag (filterTag, {
  49. attrs
  50. }) {
  51. return `<import-sjs name="${attrs.module}" from="${attrs.src}"></import-sjs>`
  52. },
  53. getEventType (eventType) {
  54. return EVENTS[eventType] || eventType
  55. },
  56. formatEventType: function (eventName, isCatch) {
  57. return `${isCatch ? 'catch' : 'on'}${capitalize(eventName)}`
  58. },
  59. createScopedSlots (slotName, props, state) {
  60. const node = {
  61. type: 'slot',
  62. attr: {
  63. name: slotName
  64. },
  65. children: []
  66. }
  67. Object.keys(props).forEach(name => {
  68. node.attr[name] = props[name]
  69. })
  70. return node
  71. },
  72. resolveScopedSlots (slotName, {
  73. paramExprNode,
  74. returnExprNodes,
  75. traverseExpr,
  76. normalizeChildren
  77. }, state) {
  78. const node = {
  79. type: 'view',
  80. attr: {
  81. slot: slotName
  82. },
  83. children: normalizeChildren(traverseExpr(returnExprNodes, state))
  84. }
  85. if (paramExprNode && paramExprNode.type === 'Identifier') {
  86. node.scoped = paramExprNode.name
  87. }
  88. return node
  89. }
  90. }