⌈⌋ ⎇ branch:  Bitrhythm


Hex Artifact Content

Artifact 98ece64304d55b4052e70d9e2c2ad778748755fcef795a3ce3f8637b68572aac:


0000: 27 75 73 65 20 73 74 72 69 63 74 27 3b 0a 0a 65  'use strict';..e
0010: 78 70 6f 72 74 73 2e 66 69 6e 64 50 6f 73 69 74  xports.findPosit
0020: 69 6f 6e 20 3d 20 28 65 6c 29 20 3d 3e 20 7b 0a  ion = (el) => {.
0030: 20 20 6c 65 74 20 76 69 65 77 70 6f 72 74 4f 66    let viewportOf
0040: 66 73 65 74 20 3d 20 65 6c 2e 67 65 74 42 6f 75  fset = el.getBou
0050: 6e 64 69 6e 67 43 6c 69 65 6e 74 52 65 63 74 28  ndingClientRect(
0060: 29 3b 0a 20 20 6c 65 74 20 74 6f 70 20 3d 20 76  );.  let top = v
0070: 69 65 77 70 6f 72 74 4f 66 66 73 65 74 2e 74 6f  iewportOffset.to
0080: 70 20 2b 20 77 69 6e 64 6f 77 2e 73 63 72 6f 6c  p + window.scrol
0090: 6c 59 3b 0a 20 20 6c 65 74 20 6c 65 66 74 20 3d  lY;.  let left =
00a0: 20 76 69 65 77 70 6f 72 74 4f 66 66 73 65 74 2e   viewportOffset.
00b0: 6c 65 66 74 20 2b 20 77 69 6e 64 6f 77 2e 73 63  left + window.sc
00c0: 72 6f 6c 6c 58 3b 0a 20 20 72 65 74 75 72 6e 20  rollX;.  return 
00d0: 7b 74 6f 70 2c 6c 65 66 74 7d 3b 0a 7d 3b 0a 0a  {top,left};.};..
00e0: 65 78 70 6f 72 74 73 2e 70 61 72 73 65 45 6c 65  exports.parseEle
00f0: 6d 65 6e 74 20 3d 20 28 70 61 72 65 6e 74 29 20  ment = (parent) 
0100: 3d 3e 20 7b 0a 20 20 69 66 20 28 74 79 70 65 6f  => {.  if (typeo
0110: 66 20 70 61 72 65 6e 74 20 3d 3d 3d 20 27 73 74  f parent === 'st
0120: 72 69 6e 67 27 29 20 7b 0a 20 20 20 20 70 61 72  ring') {.    par
0130: 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 67  ent = document.g
0140: 65 74 45 6c 65 6d 65 6e 74 42 79 49 64 28 70 61  etElementById(pa
0150: 72 65 6e 74 2e 72 65 70 6c 61 63 65 28 27 23 27  rent.replace('#'
0160: 2c 27 27 29 29 3b 0a 20 20 7d 0a 0a 20 20 69 66  ,''));.  }..  if
0170: 20 28 70 61 72 65 6e 74 20 69 6e 73 74 61 6e 63   (parent instanc
0180: 65 6f 66 20 48 54 4d 4c 45 6c 65 6d 65 6e 74 20  eof HTMLElement 
0190: 7c 7c 20 70 61 72 65 6e 74 20 69 6e 73 74 61 6e  || parent instan
01a0: 63 65 6f 66 20 53 56 47 45 6c 65 6d 65 6e 74 29  ceof SVGElement)
01b0: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 70 61 72  {.    return par
01c0: 65 6e 74 3b 0a 20 20 7d 20 65 6c 73 65 20 7b 0a  ent;.  } else {.
01d0: 20 20 20 20 72 65 74 75 72 6e 20 27 4e 6f 20 76      return 'No v
01e0: 61 6c 69 64 20 70 61 72 65 6e 74 20 61 72 67 75  alid parent argu
01f0: 6d 65 6e 74 27 3b 0a 20 20 7d 0a 7d 3b 0a 0a 65  ment';.  }.};..e
0200: 78 70 6f 72 74 73 2e 6c 6f 63 61 74 65 4d 6f 75  xports.locateMou
0210: 73 65 20 3d 20 28 65 2c 6f 66 66 73 65 74 29 20  se = (e,offset) 
0220: 3d 3e 20 7b 0a 20 20 72 65 74 75 72 6e 20 7b 0a  => {.  return {.
0230: 20 20 20 20 78 3a 20 65 2e 70 61 67 65 58 20 2d      x: e.pageX -
0240: 20 6f 66 66 73 65 74 2e 6c 65 66 74 2c 0a 20 20   offset.left,.  
0250: 20 20 79 3a 20 65 2e 70 61 67 65 59 20 2d 20 6f    y: e.pageY - o
0260: 66 66 73 65 74 2e 74 6f 70 0a 20 20 7d 3b 0a 7d  ffset.top.  };.}
0270: 3b 0a 0a 65 78 70 6f 72 74 73 2e 6c 6f 63 61 74  ;..exports.locat
0280: 65 54 6f 75 63 68 20 3d 20 28 65 2c 6f 66 66 73  eTouch = (e,offs
0290: 65 74 29 20 3d 3e 20 7b 0a 20 20 72 65 74 75 72  et) => {.  retur
02a0: 6e 20 7b 0a 20 20 20 20 78 3a 20 65 2e 74 61 72  n {.    x: e.tar
02b0: 67 65 74 54 6f 75 63 68 65 73 2e 6c 65 6e 67 74  getTouches.lengt
02c0: 68 20 3f 20 65 2e 74 61 72 67 65 74 54 6f 75 63  h ? e.targetTouc
02d0: 68 65 73 5b 30 5d 2e 70 61 67 65 58 20 2d 20 6f  hes[0].pageX - o
02e0: 66 66 73 65 74 2e 6c 65 66 74 20 3a 20 66 61 6c  ffset.left : fal
02f0: 73 65 2c 0a 20 20 20 20 79 3a 20 65 2e 74 61 72  se,.    y: e.tar
0300: 67 65 74 54 6f 75 63 68 65 73 2e 6c 65 6e 67 74  getTouches.lengt
0310: 68 20 3f 20 65 2e 74 61 72 67 65 74 54 6f 75 63  h ? e.targetTouc
0320: 68 65 73 5b 30 5d 2e 70 61 67 65 59 20 2d 20 6f  hes[0].pageY - o
0330: 66 66 73 65 74 2e 74 6f 70 20 3a 20 66 61 6c 73  ffset.top : fals
0340: 65 0a 20 20 7d 3b 0a 7d 3b 0a 0a 65 78 70 6f 72  e.  };.};..expor
0350: 74 73 2e 53 6d 61 72 74 43 61 6e 76 61 73 20 3d  ts.SmartCanvas =
0360: 20 66 75 6e 63 74 69 6f 6e 28 70 61 72 65 6e 74   function(parent
0370: 29 20 7b 0a 0a 20 20 74 68 69 73 2e 65 6c 65 6d  ) {..  this.elem
0380: 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 63  ent = document.c
0390: 72 65 61 74 65 45 6c 65 6d 65 6e 74 28 27 63 61  reateElement('ca
03a0: 6e 76 61 73 27 29 3b 0a 20 20 74 68 69 73 2e 63  nvas');.  this.c
03b0: 6f 6e 74 65 78 74 20 3d 20 74 68 69 73 2e 65 6c  ontext = this.el
03c0: 65 6d 65 6e 74 2e 67 65 74 43 6f 6e 74 65 78 74  ement.getContext
03d0: 28 27 32 64 27 29 3b 0a 20 20 70 61 72 65 6e 74  ('2d');.  parent
03e0: 2e 61 70 70 65 6e 64 43 68 69 6c 64 28 74 68 69  .appendChild(thi
03f0: 73 2e 65 6c 65 6d 65 6e 74 29 3b 0a 0a 20 20 74  s.element);..  t
0400: 68 69 73 2e 72 65 73 69 7a 65 20 3d 20 28 77 2c  his.resize = (w,
0410: 68 29 20 3d 3e 20 7b 0a 20 20 20 20 74 68 69 73  h) => {.    this
0420: 2e 65 6c 65 6d 65 6e 74 2e 77 69 64 74 68 20 3d  .element.width =
0430: 20 77 2a 32 3b 0a 20 20 20 20 74 68 69 73 2e 65   w*2;.    this.e
0440: 6c 65 6d 65 6e 74 2e 68 65 69 67 68 74 20 3d 20  lement.height = 
0450: 68 2a 32 3b 0a 20 20 20 20 74 68 69 73 2e 65 6c  h*2;.    this.el
0460: 65 6d 65 6e 74 2e 73 74 79 6c 65 2e 77 69 64 74  ement.style.widt
0470: 68 20 3d 20 77 2b 27 70 78 27 3b 0a 20 20 20 20  h = w+'px';.    
0480: 74 68 69 73 2e 65 6c 65 6d 65 6e 74 2e 73 74 79  this.element.sty
0490: 6c 65 2e 68 65 69 67 68 74 20 3d 20 68 2b 27 70  le.height = h+'p
04a0: 78 27 3b 0a 20 20 7d 3b 0a 0a 7d 3b 0a           x';.  };..};.