my.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. "use strict";
  2. // 支付宝小程序的context适配
  3. Object.defineProperty(exports, "__esModule", { value: true });
  4. var CAPITALIZED_ATTRS_MAP = {
  5. fillStyle: 'FillStyle',
  6. fontSize: 'FontSize',
  7. globalAlpha: 'GlobalAlpha',
  8. opacity: 'GlobalAlpha',
  9. lineCap: 'LineCap',
  10. lineJoin: 'LineJoin',
  11. lineWidth: 'LineWidth',
  12. miterLimit: 'MiterLimit',
  13. strokeStyle: 'StrokeStyle',
  14. textAlign: 'TextAlign',
  15. textBaseline: 'TextBaseline',
  16. shadow: 'Shadow',
  17. font: 'Font'
  18. };
  19. function strLen(str) {
  20. var len = 0;
  21. for (var i = 0; i < str.length; i++) {
  22. if (str.charCodeAt(i) > 0 && str.charCodeAt(i) < 128) {
  23. len++;
  24. }
  25. else {
  26. len += 2;
  27. }
  28. }
  29. return len;
  30. }
  31. exports.default = (function (ctx) {
  32. Object.keys(CAPITALIZED_ATTRS_MAP).map(function (key) {
  33. Object.defineProperty(ctx, key, {
  34. set: function (value) {
  35. // 记录最新设置的值
  36. ctx["__" + key] = value;
  37. if (key === 'shadow' && ctx.setShadow && Array.isArray(value)) {
  38. ctx.setShadow(value[0], value[1], value[2], value[3]);
  39. return;
  40. }
  41. var name = 'set' + CAPITALIZED_ATTRS_MAP[key];
  42. if (!ctx[name]) {
  43. return;
  44. }
  45. ctx[name](value);
  46. }
  47. });
  48. return key;
  49. });
  50. // 钉钉钉钉小程序框架不支持 measureText 方法,用此方法 mock
  51. if (!ctx.measureText) {
  52. ctx.measureText = function (text) {
  53. var fontSize = 12;
  54. var font = ctx.__font;
  55. if (font) {
  56. fontSize = parseInt(font.split(' ')[3], 10);
  57. }
  58. fontSize /= 2;
  59. return {
  60. width: strLen(text) * fontSize
  61. };
  62. };
  63. }
  64. return ctx;
  65. });