⌈⌋ ⎇ branch:  Bitrhythm


Hex Artifact Content

Artifact 60cb7abdd6ddd3cc708de8258a1011bb9eba25a229ebd49d06150400474a6c98:


0000: 27 75 73 65 20 73 74 72 69 63 74 27 3b 0a 0a 2f  'use strict';../
0010: 2f 6c 65 74 20 73 76 67 20 3d 20 72 65 71 75 69  /let svg = requi
0020: 72 65 28 27 2e 2e 2f 75 74 69 6c 2f 73 76 67 27  re('../util/svg'
0030: 29 3b 0a 6c 65 74 20 49 6e 74 65 72 66 61 63 65  );.let Interface
0040: 20 3d 20 72 65 71 75 69 72 65 28 27 2e 2e 2f 63   = require('../c
0050: 6f 72 65 2f 69 6e 74 65 72 66 61 63 65 27 29 3b  ore/interface');
0060: 0a 6c 65 74 20 42 75 74 74 6f 6e 20 3d 20 72 65  .let Button = re
0070: 71 75 69 72 65 28 27 2e 2e 2f 69 6e 74 65 72 66  quire('../interf
0080: 61 63 65 73 2f 62 75 74 74 6f 6e 27 29 3b 0a 0a  aces/button');..
0090: 2f 2a 2a 0a 20 2a 20 52 61 64 69 6f 42 75 74 74  /**. * RadioButt
00a0: 6f 6e 0a 20 2a 0a 20 2a 20 40 64 65 73 63 72 69  on. *. * @descri
00b0: 70 74 69 6f 6e 20 41 6e 20 61 72 72 61 79 20 6f  ption An array o
00c0: 66 20 62 75 74 74 6f 6e 73 2e 20 42 79 20 64 65  f buttons. By de
00d0: 66 61 75 6c 74 2c 20 73 65 6c 65 63 74 69 6e 67  fault, selecting
00e0: 20 6f 6e 65 20 62 75 74 74 6f 6e 20 77 69 6c 6c   one button will
00f0: 20 64 65 73 65 6c 65 63 74 20 61 6c 6c 20 6f 74   deselect all ot
0100: 68 65 72 20 62 75 74 74 6f 6e 73 2c 20 62 75 74  her buttons, but
0110: 20 74 68 69 73 20 63 61 6e 20 62 65 20 63 75 73   this can be cus
0120: 74 6f 6d 69 7a 65 64 20 75 73 69 6e 67 20 74 68  tomized using th
0130: 65 20 41 50 49 20 62 65 6c 6f 77 2e 0a 20 2a 0a  e API below.. *.
0140: 20 2a 20 40 64 65 6d 6f 20 3c 64 69 76 20 6e 65   * @demo <div ne
0150: 78 75 73 2d 75 69 3d 22 52 61 64 69 6f 42 75 74  xus-ui="RadioBut
0160: 74 6f 6e 22 3e 3c 2f 64 69 76 3e 0a 20 2a 0a 20  ton"></div>. *. 
0170: 2a 20 40 65 78 61 6d 70 6c 65 0a 20 2a 20 76 61  * @example. * va
0180: 72 20 72 61 64 69 6f 62 75 74 74 6f 6e 20 3d 20  r radiobutton = 
0190: 6e 65 77 20 4e 65 78 75 73 2e 52 61 64 69 6f 42  new Nexus.RadioB
01a0: 75 74 74 6f 6e 28 27 23 74 61 72 67 65 74 27 29  utton('#target')
01b0: 0a 20 2a 0a 20 2a 20 40 65 78 61 6d 70 6c 65 0a  . *. * @example.
01c0: 20 2a 20 76 61 72 20 72 61 64 69 6f 62 75 74 74   * var radiobutt
01d0: 6f 6e 20 3d 20 6e 65 77 20 4e 65 78 75 73 2e 52  on = new Nexus.R
01e0: 61 64 69 6f 42 75 74 74 6f 6e 28 27 23 74 61 72  adioButton('#tar
01f0: 67 65 74 27 2c 7b 0a 20 2a 20 20 20 27 73 69 7a  get',{. *   'siz
0200: 65 27 3a 20 5b 31 32 30 2c 32 35 5d 2c 0a 20 2a  e': [120,25],. *
0210: 20 20 20 27 6e 75 6d 62 65 72 4f 66 42 75 74 74     'numberOfButt
0220: 6f 6e 73 27 3a 20 34 2c 0a 20 2a 20 20 20 27 61  ons': 4,. *   'a
0230: 63 74 69 76 65 27 3a 20 2d 31 0a 20 2a 20 7d 29  ctive': -1. * })
0240: 0a 20 2a 0a 20 2a 20 40 6f 75 74 70 75 74 0a 20  . *. * @output. 
0250: 2a 20 63 68 61 6e 67 65 0a 20 2a 20 46 69 72 65  * change. * Fire
0260: 73 20 61 6e 79 20 74 69 6d 65 20 74 68 65 20 69  s any time the i
0270: 6e 74 65 72 66 61 63 65 27 73 20 76 61 6c 75 65  nterface's value
0280: 20 63 68 61 6e 67 65 73 2e 20 3c 62 72 3e 0a 20   changes. <br>. 
0290: 2a 20 54 68 65 20 65 76 65 6e 74 20 64 61 74 61  * The event data
02a0: 20 61 6e 20 3c 69 3e 69 6e 74 65 67 65 72 3c 2f   an <i>integer</
02b0: 69 3e 2c 20 74 68 65 20 69 6e 64 65 78 20 6f 66  i>, the index of
02c0: 20 74 68 65 20 62 75 74 74 6f 6e 20 74 68 61 74   the button that
02d0: 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 6f 6e   is currently on
02e0: 2e 20 49 66 20 6e 6f 20 62 75 74 74 6f 6e 20 69  . If no button i
02f0: 73 20 73 65 6c 65 63 74 65 64 2c 20 74 68 65 20  s selected, the 
0300: 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 2d 31  value will be -1
0310: 2e 0a 20 2a 0a 20 2a 20 40 6f 75 74 70 75 74 65  .. *. * @outpute
0320: 78 61 6d 70 6c 65 0a 20 2a 20 72 61 64 69 6f 62  xample. * radiob
0330: 75 74 74 6f 6e 2e 6f 6e 28 27 63 68 61 6e 67 65  utton.on('change
0340: 27 2c 66 75 6e 63 74 69 6f 6e 28 76 29 20 7b 0a  ',function(v) {.
0350: 20 2a 20 20 20 63 6f 6e 73 6f 6c 65 2e 6c 6f 67   *   console.log
0360: 28 76 29 3b 0a 20 2a 20 7d 29 0a 20 2a 0a 20 2a  (v);. * }). *. *
0370: 2f 0a 0a 65 78 70 6f 72 74 20 64 65 66 61 75 6c  /..export defaul
0380: 74 20 63 6c 61 73 73 20 52 61 64 69 6f 42 75 74  t class RadioBut
0390: 74 6f 6e 20 65 78 74 65 6e 64 73 20 49 6e 74 65  ton extends Inte
03a0: 72 66 61 63 65 20 7b 0a 20 20 63 6f 6e 73 74 72  rface {.  constr
03b0: 75 63 74 6f 72 28 29 20 7b 0a 20 20 20 20 6c 65  uctor() {.    le
03c0: 74 20 6f 70 74 69 6f 6e 73 20 3d 20 5b 27 76 61  t options = ['va
03d0: 6c 75 65 27 5d 3b 0a 0a 20 20 20 20 6c 65 74 20  lue'];..    let 
03e0: 64 65 66 61 75 6c 74 73 20 3d 20 7b 0a 20 20 20  defaults = {.   
03f0: 20 20 20 73 69 7a 65 3a 20 5b 31 32 30 2c 20 32     size: [120, 2
0400: 35 5d 2c 0a 20 20 20 20 20 20 6e 75 6d 62 65 72  5],.      number
0410: 4f 66 42 75 74 74 6f 6e 73 3a 20 34 2c 0a 20 20  OfButtons: 4,.  
0420: 20 20 20 20 61 63 74 69 76 65 3a 20 2d 31 0a 20      active: -1. 
0430: 20 20 20 7d 3b 0a 0a 20 20 20 20 73 75 70 65 72     };..    super
0440: 28 61 72 67 75 6d 65 6e 74 73 2c 20 6f 70 74 69  (arguments, opti
0450: 6f 6e 73 2c 20 64 65 66 61 75 6c 74 73 29 3b 0a  ons, defaults);.
0460: 0a 20 20 20 20 74 68 69 73 2e 62 75 74 74 6f 6e  .    this.button
0470: 73 20 3d 20 5b 5d 3b 0a 20 20 20 20 74 68 69 73  s = [];.    this
0480: 2e 5f 6e 75 6d 62 65 72 4f 66 42 75 74 74 6f 6e  ._numberOfButton
0490: 73 20 3d 20 74 68 69 73 2e 73 65 74 74 69 6e 67  s = this.setting
04a0: 73 2e 6e 75 6d 62 65 72 4f 66 42 75 74 74 6f 6e  s.numberOfButton
04b0: 73 3b 0a 20 20 20 20 74 68 69 73 2e 61 63 74 69  s;.    this.acti
04c0: 76 65 20 3d 20 74 68 69 73 2e 73 65 74 74 69 6e  ve = this.settin
04d0: 67 73 2e 61 63 74 69 76 65 3b 0a 0a 20 20 20 20  gs.active;..    
04e0: 74 68 69 73 2e 69 6e 69 74 28 29 3b 0a 20 20 20  this.init();.   
04f0: 20 74 68 69 73 2e 72 65 6e 64 65 72 28 29 3b 0a   this.render();.
0500: 20 20 7d 0a 0a 20 20 62 75 69 6c 64 46 72 61 6d    }..  buildFram
0510: 65 28 29 20 7b 0a 20 20 20 20 74 68 69 73 2e 65  e() {.    this.e
0520: 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e  lement = documen
0530: 74 2e 63 72 65 61 74 65 45 6c 65 6d 65 6e 74 28  t.createElement(
0540: 27 64 69 76 27 29 3b 0a 20 20 20 20 74 68 69 73  'div');.    this
0550: 2e 70 61 72 65 6e 74 2e 61 70 70 65 6e 64 43 68  .parent.appendCh
0560: 69 6c 64 28 74 68 69 73 2e 65 6c 65 6d 65 6e 74  ild(this.element
0570: 29 3b 0a 20 20 7d 0a 0a 20 20 62 75 69 6c 64 49  );.  }..  buildI
0580: 6e 74 65 72 66 61 63 65 28 29 20 7b 0a 20 20 20  nterface() {.   
0590: 20 66 6f 72 20 28 6c 65 74 20 69 20 3d 20 30 3b   for (let i = 0;
05a0: 20 69 20 3c 20 74 68 69 73 2e 5f 6e 75 6d 62 65   i < this._numbe
05b0: 72 4f 66 42 75 74 74 6f 6e 73 3b 20 69 2b 2b 29  rOfButtons; i++)
05c0: 20 7b 0a 20 20 20 20 20 20 6c 65 74 20 63 6f 6e   {.      let con
05d0: 74 61 69 6e 65 72 20 3d 20 64 6f 63 75 6d 65 6e  tainer = documen
05e0: 74 2e 63 72 65 61 74 65 45 6c 65 6d 65 6e 74 28  t.createElement(
05f0: 27 73 70 61 6e 27 29 3b 0a 0a 20 20 20 20 20 20  'span');..      
0600: 6c 65 74 20 62 75 74 74 6f 6e 20 3d 20 6e 65 77  let button = new
0610: 20 42 75 74 74 6f 6e 28 0a 20 20 20 20 20 20 20   Button(.       
0620: 20 63 6f 6e 74 61 69 6e 65 72 2c 0a 20 20 20 20   container,.    
0630: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
0640: 6d 6f 64 65 3a 20 27 74 6f 67 67 6c 65 27 2c 0a  mode: 'toggle',.
0650: 20 20 20 20 20 20 20 20 20 20 63 6f 6d 70 6f 6e            compon
0660: 65 6e 74 3a 20 74 72 75 65 0a 20 20 20 20 20 20  ent: true.      
0670: 20 20 7d 2c 0a 20 20 20 20 20 20 20 20 74 68 69    },.        thi
0680: 73 2e 75 70 64 61 74 65 2e 62 69 6e 64 28 74 68  s.update.bind(th
0690: 69 73 2c 20 69 29 0a 20 20 20 20 20 20 29 3b 0a  is, i).      );.
06a0: 0a 20 20 20 20 20 20 74 68 69 73 2e 62 75 74 74  .      this.butt
06b0: 6f 6e 73 2e 70 75 73 68 28 62 75 74 74 6f 6e 29  ons.push(button)
06c0: 3b 0a 20 20 20 20 20 20 74 68 69 73 2e 65 6c 65  ;.      this.ele
06d0: 6d 65 6e 74 2e 61 70 70 65 6e 64 43 68 69 6c 64  ment.appendChild
06e0: 28 63 6f 6e 74 61 69 6e 65 72 29 3b 0a 20 20 20  (container);.   
06f0: 20 7d 0a 20 20 7d 0a 0a 20 20 73 69 7a 65 49 6e   }.  }..  sizeIn
0700: 74 65 72 66 61 63 65 28 29 20 7b 0a 20 20 20 20  terface() {.    
0710: 6c 65 74 20 6f 72 69 65 6e 74 61 74 69 6f 6e 3b  let orientation;
0720: 0a 20 20 20 20 69 66 20 28 74 68 69 73 2e 77 69  .    if (this.wi
0730: 64 74 68 20 3e 20 74 68 69 73 2e 68 65 69 67 68  dth > this.heigh
0740: 74 29 20 7b 0a 20 20 20 20 20 20 6f 72 69 65 6e  t) {.      orien
0750: 74 61 74 69 6f 6e 20 3d 20 27 68 6f 72 69 7a 6f  tation = 'horizo
0760: 6e 74 61 6c 27 3b 0a 20 20 20 20 7d 20 65 6c 73  ntal';.    } els
0770: 65 20 7b 0a 20 20 20 20 20 20 6f 72 69 65 6e 74  e {.      orient
0780: 61 74 69 6f 6e 20 3d 20 27 76 65 72 74 69 63 61  ation = 'vertica
0790: 6c 27 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6c  l';.    }..    l
07a0: 65 74 20 62 75 74 74 6f 6e 57 69 64 74 68 20 3d  et buttonWidth =
07b0: 0a 20 20 20 20 20 20 74 68 69 73 2e 77 69 64 74  .      this.widt
07c0: 68 20 2f 20 28 6f 72 69 65 6e 74 61 74 69 6f 6e  h / (orientation
07d0: 20 3d 3d 3d 20 27 76 65 72 74 69 63 61 6c 27 20   === 'vertical' 
07e0: 3f 20 31 20 3a 20 74 68 69 73 2e 5f 6e 75 6d 62  ? 1 : this._numb
07f0: 65 72 4f 66 42 75 74 74 6f 6e 73 29 3b 0a 20 20  erOfButtons);.  
0800: 20 20 6c 65 74 20 62 75 74 74 6f 6e 48 65 69 67    let buttonHeig
0810: 68 74 20 3d 0a 20 20 20 20 20 20 74 68 69 73 2e  ht =.      this.
0820: 68 65 69 67 68 74 20 2f 20 28 6f 72 69 65 6e 74  height / (orient
0830: 61 74 69 6f 6e 20 3d 3d 3d 20 27 76 65 72 74 69  ation === 'verti
0840: 63 61 6c 27 20 3f 20 74 68 69 73 2e 5f 6e 75 6d  cal' ? this._num
0850: 62 65 72 4f 66 42 75 74 74 6f 6e 73 20 3a 20 31  berOfButtons : 1
0860: 29 3b 0a 0a 20 20 20 20 66 6f 72 20 28 6c 65 74  );..    for (let
0870: 20 69 20 3d 20 30 3b 20 69 20 3c 20 74 68 69 73   i = 0; i < this
0880: 2e 5f 6e 75 6d 62 65 72 4f 66 42 75 74 74 6f 6e  ._numberOfButton
0890: 73 3b 20 69 2b 2b 29 20 7b 0a 20 20 20 20 20 20  s; i++) {.      
08a0: 74 68 69 73 2e 62 75 74 74 6f 6e 73 5b 69 5d 2e  this.buttons[i].
08b0: 72 65 73 69 7a 65 28 62 75 74 74 6f 6e 57 69 64  resize(buttonWid
08c0: 74 68 2c 20 62 75 74 74 6f 6e 48 65 69 67 68 74  th, buttonHeight
08d0: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20  );.    }.  }..  
08e0: 63 6f 6c 6f 72 49 6e 74 65 72 66 61 63 65 28 29  colorInterface()
08f0: 20 7b 0a 20 20 20 20 66 6f 72 20 28 6c 65 74 20   {.    for (let 
0900: 69 20 3d 20 30 3b 20 69 20 3c 20 74 68 69 73 2e  i = 0; i < this.
0910: 5f 6e 75 6d 62 65 72 4f 66 42 75 74 74 6f 6e 73  _numberOfButtons
0920: 3b 20 69 2b 2b 29 20 7b 0a 20 20 20 20 20 20 74  ; i++) {.      t
0930: 68 69 73 2e 62 75 74 74 6f 6e 73 5b 69 5d 2e 63  his.buttons[i].c
0940: 6f 6c 6f 72 73 20 3d 20 74 68 69 73 2e 63 6f 6c  olors = this.col
0950: 6f 72 73 3b 0a 20 20 20 20 20 20 74 68 69 73 2e  ors;.      this.
0960: 62 75 74 74 6f 6e 73 5b 69 5d 2e 72 65 6e 64 65  buttons[i].rende
0970: 72 28 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a  r();.    }.  }..
0980: 20 20 75 70 64 61 74 65 28 69 6e 64 65 78 29 20    update(index) 
0990: 7b 0a 20 20 20 20 69 66 20 28 74 68 69 73 2e 62  {.    if (this.b
09a0: 75 74 74 6f 6e 73 5b 69 6e 64 65 78 5d 2e 73 74  uttons[index].st
09b0: 61 74 65 29 20 7b 0a 20 20 20 20 20 20 74 68 69  ate) {.      thi
09c0: 73 2e 73 65 6c 65 63 74 28 69 6e 64 65 78 29 3b  s.select(index);
09d0: 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20  .    } else {.  
09e0: 20 20 20 20 74 68 69 73 2e 64 65 73 65 6c 65 63      this.deselec
09f0: 74 28 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2f  t();.    }.    /
0a00: 2f 20 20 74 68 69 73 2e 72 65 6e 64 65 72 28 29  /  this.render()
0a10: 3b 0a 20 20 7d 0a 0a 20 20 72 65 6e 64 65 72 28  ;.  }..  render(
0a20: 29 20 7b 0a 20 20 20 20 66 6f 72 20 28 6c 65 74  ) {.    for (let
0a30: 20 69 20 3d 20 30 3b 20 69 20 3c 20 74 68 69 73   i = 0; i < this
0a40: 2e 62 75 74 74 6f 6e 73 2e 6c 65 6e 67 74 68 3b  .buttons.length;
0a50: 20 69 2b 2b 29 20 7b 0a 20 20 20 20 20 20 69 66   i++) {.      if
0a60: 20 28 69 20 3d 3d 3d 20 74 68 69 73 2e 61 63 74   (i === this.act
0a70: 69 76 65 29 20 7b 0a 20 20 20 20 20 20 20 20 74  ive) {.        t
0a80: 68 69 73 2e 62 75 74 74 6f 6e 73 5b 69 5d 2e 74  his.buttons[i].t
0a90: 75 72 6e 4f 6e 28 66 61 6c 73 65 29 3b 0a 20 20  urnOn(false);.  
0aa0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20      } else {.   
0ab0: 20 20 20 20 20 74 68 69 73 2e 62 75 74 74 6f 6e       this.button
0ac0: 73 5b 69 5d 2e 74 75 72 6e 4f 66 66 28 66 61 6c  s[i].turnOff(fal
0ad0: 73 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  se);.      }.   
0ae0: 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20   }.  }..  /**.  
0af0: 53 65 6c 65 63 74 20 6f 6e 65 20 62 75 74 74 6f  Select one butto
0b00: 6e 20 61 6e 64 20 64 65 73 65 6c 65 63 74 20 61  n and deselect a
0b10: 6c 6c 20 6f 74 68 65 72 20 62 75 74 74 6f 6e 73  ll other buttons
0b20: 2e 0a 20 20 40 70 61 72 61 6d 20 69 6e 64 65 78  ..  @param index
0b30: 20 7b 6e 75 6d 62 65 72 7d 20 54 68 65 20 69 6e   {number} The in
0b40: 64 65 78 20 6f 66 20 74 68 65 20 62 75 74 74 6f  dex of the butto
0b50: 6e 20 74 6f 20 73 65 6c 65 63 74 0a 20 20 2a 2f  n to select.  */
0b60: 0a 20 20 73 65 6c 65 63 74 28 69 6e 64 65 78 29  .  select(index)
0b70: 20 7b 0a 20 20 20 20 69 66 20 28 69 6e 64 65 78   {.    if (index
0b80: 20 3e 3d 20 30 20 26 26 20 69 6e 64 65 78 20 3c   >= 0 && index <
0b90: 20 74 68 69 73 2e 62 75 74 74 6f 6e 73 2e 6c 65   this.buttons.le
0ba0: 6e 67 74 68 29 20 7b 0a 20 20 20 20 20 20 74 68  ngth) {.      th
0bb0: 69 73 2e 61 63 74 69 76 65 20 3d 20 69 6e 64 65  is.active = inde
0bc0: 78 3b 0a 20 20 20 20 20 20 74 68 69 73 2e 65 6d  x;.      this.em
0bd0: 69 74 28 27 63 68 61 6e 67 65 27 2c 20 74 68 69  it('change', thi
0be0: 73 2e 61 63 74 69 76 65 29 3b 0a 20 20 20 20 20  s.active);.     
0bf0: 20 74 68 69 73 2e 72 65 6e 64 65 72 28 29 3b 0a   this.render();.
0c00: 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 2a      }.  }..  /**
0c10: 0a 20 20 44 65 73 65 6c 65 63 74 20 61 6c 6c 20  .  Deselect all 
0c20: 62 75 74 74 6f 6e 73 2e 0a 20 20 2a 2f 0a 20 20  buttons..  */.  
0c30: 64 65 73 65 6c 65 63 74 28 29 20 7b 0a 20 20 20  deselect() {.   
0c40: 20 74 68 69 73 2e 61 63 74 69 76 65 20 3d 20 2d   this.active = -
0c50: 31 3b 0a 20 20 20 20 74 68 69 73 2e 65 6d 69 74  1;.    this.emit
0c60: 28 27 63 68 61 6e 67 65 27 2c 20 74 68 69 73 2e  ('change', this.
0c70: 61 63 74 69 76 65 29 3b 0a 20 20 20 20 74 68 69  active);.    thi
0c80: 73 2e 72 65 6e 64 65 72 28 29 3b 0a 20 20 7d 0a  s.render();.  }.
0c90: 0a 20 20 67 65 74 20 6e 75 6d 62 65 72 4f 66 42  .  get numberOfB
0ca0: 75 74 74 6f 6e 73 28 29 20 7b 0a 20 20 20 20 72  uttons() {.    r
0cb0: 65 74 75 72 6e 20 74 68 69 73 2e 5f 6e 75 6d 62  eturn this._numb
0cc0: 65 72 4f 66 42 75 74 74 6f 6e 73 3b 0a 20 20 7d  erOfButtons;.  }
0cd0: 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20 55 70 64  ..  /**.   * Upd
0ce0: 61 74 65 20 68 6f 77 20 6d 61 6e 79 20 62 75 74  ate how many but
0cf0: 74 6f 6e 73 20 61 72 65 20 69 6e 20 74 68 65 20  tons are in the 
0d00: 69 6e 74 65 72 66 61 63 65 0a 20 20 20 2a 20 40  interface.   * @
0d10: 70 61 72 61 6d 20 20 7b 6e 75 6d 62 65 72 7d 20  param  {number} 
0d20: 62 75 74 74 6f 6e 73 20 48 6f 77 20 6d 61 6e 79  buttons How many
0d30: 20 62 75 74 74 6f 6e 73 20 61 72 65 20 69 6e 20   buttons are in 
0d40: 74 68 65 20 69 6e 74 65 72 66 61 63 65 0a 20 20  the interface.  
0d50: 20 2a 2f 0a 20 20 73 65 74 20 6e 75 6d 62 65 72   */.  set number
0d60: 4f 66 42 75 74 74 6f 6e 73 28 62 75 74 74 6f 6e  OfButtons(button
0d70: 73 29 20 7b 0a 20 20 20 20 74 68 69 73 2e 5f 6e  s) {.    this._n
0d80: 75 6d 62 65 72 4f 66 42 75 74 74 6f 6e 73 20 3d  umberOfButtons =
0d90: 20 62 75 74 74 6f 6e 73 3b 0a 20 20 20 20 66 6f   buttons;.    fo
0da0: 72 20 28 6c 65 74 20 69 20 3d 20 30 3b 20 69 20  r (let i = 0; i 
0db0: 3c 20 74 68 69 73 2e 62 75 74 74 6f 6e 73 2e 6c  < this.buttons.l
0dc0: 65 6e 67 74 68 3b 20 69 2b 2b 29 20 7b 0a 20 20  ength; i++) {.  
0dd0: 20 20 20 20 74 68 69 73 2e 62 75 74 74 6f 6e 73      this.buttons
0de0: 5b 69 5d 2e 64 65 73 74 72 6f 79 28 29 3b 0a 20  [i].destroy();. 
0df0: 20 20 20 7d 0a 20 20 20 20 74 68 69 73 2e 62 75     }.    this.bu
0e00: 74 74 6f 6e 73 20 3d 20 5b 5d 3b 0a 20 20 20 20  ttons = [];.    
0e10: 2f 2f 20 20 66 6f 72 20 28 6c 65 74 20 69 3d 30  //  for (let i=0
0e20: 3b 69 3c 74 68 69 73 2e 62 75 74 74 6f 6e 73 2e  ;i<this.buttons.
0e30: 6c 65 6e 67 74 68 3b 69 2b 2b 29 20 7b 0a 20 20  length;i++) {.  
0e40: 20 20 2f 2f 20 20 20 20 74 68 69 73 2e 62 75 74    //    this.but
0e50: 74 6f 6e 73 5b 69 5d 2e 64 65 73 74 72 6f 79 28  tons[i].destroy(
0e60: 29 3b 0a 20 20 20 20 2f 2f 20 20 7d 0a 20 20 20  );.    //  }.   
0e70: 20 74 68 69 73 2e 65 6d 70 74 79 28 29 3b 0a 20   this.empty();. 
0e80: 20 20 20 74 68 69 73 2e 62 75 69 6c 64 49 6e 74     this.buildInt
0e90: 65 72 66 61 63 65 28 29 3b 0a 20 20 7d 0a 7d 0a  erface();.  }.}.