⌈⌋ ⎇ branch:  Bitrhythm


Hex Artifact Content

Artifact ca6989e10792c5676e8d3232107c070e5a12fa3f175732a5b48965e6d77311a9:


0000: 27 75 73 65 20 73 74 72 69 63 74 27 3b 0a 0a 69  'use strict';..i
0010: 6d 70 6f 72 74 20 53 74 65 70 20 66 72 6f 6d 20  mport Step from 
0020: 27 2e 2f 73 74 65 70 27 3b 0a 0a 2f 2a 2a 0a 20  './step';../**. 
0030: 20 43 72 65 61 74 65 73 20 61 6e 20 61 62 73 74   Creates an abst
0040: 72 61 63 74 20 6d 6f 64 65 6c 20 6f 66 20 61 20  ract model of a 
0050: 73 74 65 70 70 61 62 6c 65 20 72 61 6e 67 65 20  steppable range 
0060: 73 6c 69 64 65 72 20 77 69 74 68 20 73 74 61 72  slider with star
0070: 74 20 61 6e 64 20 65 6e 64 20 76 61 6c 75 65 73  t and end values
0080: 20 77 68 69 63 68 20 61 72 65 20 63 6f 6e 73 74   which are const
0090: 72 69 63 74 65 64 20 62 79 20 61 20 6d 69 6e 69  ricted by a mini
00a0: 6d 75 6d 2c 20 6d 61 78 69 6d 75 6d 2c 20 61 6e  mum, maximum, an
00b0: 64 20 73 74 65 70 20 73 69 7a 65 2e 0a 20 20 40  d step size..  @
00c0: 70 61 72 61 6d 20 7b 6e 75 6d 62 65 72 7d 20 5b  param {number} [
00d0: 6d 69 6e 3d 30 5d 20 6d 69 6e 69 6d 75 6d 0a 20  min=0] minimum. 
00e0: 20 40 70 61 72 61 6d 20 7b 6e 75 6d 62 65 72 7d   @param {number}
00f0: 20 5b 6d 61 78 3d 31 5d 20 6d 61 78 69 6d 75 6d   [max=1] maximum
0100: 0a 20 20 40 70 61 72 61 6d 20 7b 6e 75 6d 62 65  .  @param {numbe
0110: 72 7d 20 5b 73 74 65 70 3d 30 5d 0a 20 20 40 72  r} [step=0].  @r
0120: 65 74 75 72 6e 73 20 7b 4f 62 6a 65 63 74 7d 20  eturns {Object} 
0130: 53 74 65 70 0a 2a 2f 0a 0a 65 78 70 6f 72 74 20  Step.*/..export 
0140: 64 65 66 61 75 6c 74 20 63 6c 61 73 73 20 52 61  default class Ra
0150: 6e 67 65 20 7b 0a 0a 20 20 63 6f 6e 73 74 72 75  nge {..  constru
0160: 63 74 6f 72 28 6d 69 6e 20 3d 20 30 2c 6d 61 78  ctor(min = 0,max
0170: 20 3d 20 31 2c 73 74 65 70 20 3d 20 66 61 6c 73   = 1,step = fals
0180: 65 29 20 7b 0a 0a 20 20 20 20 2f 2a 2a 0a 20 20  e) {..    /**.  
0190: 20 20 20 20 7b 6e 75 6d 62 65 72 7d 20 4d 69 6e      {number} Min
01a0: 69 6d 75 6d 20 76 61 6c 75 65 20 6f 66 20 74 68  imum value of th
01b0: 65 20 72 61 6e 67 65 0a 20 20 20 20 2a 2f 0a 20  e range.    */. 
01c0: 20 20 20 74 68 69 73 2e 6d 69 6e 20 3d 20 6d 69     this.min = mi
01d0: 6e 3b 0a 0a 20 20 20 20 2f 2a 2a 0a 20 20 20 20  n;..    /**.    
01e0: 20 20 7b 6e 75 6d 62 65 72 7d 20 4d 61 78 69 6d    {number} Maxim
01f0: 75 6d 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  um value of the 
0200: 72 61 6e 67 65 0a 20 20 20 20 2a 2f 0a 20 20 20  range.    */.   
0210: 20 74 68 69 73 2e 6d 61 78 20 3d 20 6d 61 78 3b   this.max = max;
0220: 0a 0a 20 20 20 20 2f 2a 2a 0a 20 20 20 20 20 20  ..    /**.      
0230: 7b 53 74 65 70 7d 20 53 74 61 72 74 20 76 61 6c  {Step} Start val
0240: 75 65 20 6f 66 20 74 68 65 20 72 61 6e 67 65 20  ue of the range 
0250: 73 65 6c 65 63 74 69 6f 6e 0a 20 20 20 20 2a 2f  selection.    */
0260: 0a 20 20 20 20 74 68 69 73 2e 73 74 61 72 74 20  .    this.start 
0270: 3d 20 6e 65 77 20 53 74 65 70 28 6d 69 6e 2c 6d  = new Step(min,m
0280: 61 78 2c 73 74 65 70 29 3b 0a 0a 20 20 20 20 2f  ax,step);..    /
0290: 2a 2a 0a 20 20 20 20 20 20 7b 53 74 65 70 7d 20  **.      {Step} 
02a0: 45 6e 64 20 76 61 6c 75 65 20 6f 66 20 74 68 65  End value of the
02b0: 20 72 61 6e 67 65 20 73 65 6c 65 63 74 69 6f 6e   range selection
02c0: 0a 20 20 20 20 2a 2f 0a 20 20 20 20 74 68 69 73  .    */.    this
02d0: 2e 65 6e 64 20 3d 20 6e 65 77 20 53 74 65 70 28  .end = new Step(
02e0: 6d 69 6e 2c 6d 61 78 2c 73 74 65 70 29 3b 0a 20  min,max,step);. 
02f0: 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20 20 20 7b 6e   }..  /**.    {n
0300: 75 6d 62 65 72 7d 20 43 65 6e 74 65 72 20 6f 66  umber} Center of
0310: 20 74 68 65 20 72 61 6e 67 65 20 73 65 6c 65 63   the range selec
0320: 74 69 6f 6e 0a 20 20 2a 2f 0a 20 20 67 65 74 20  tion.  */.  get 
0330: 63 65 6e 74 65 72 28 29 20 7b 0a 20 20 20 20 72  center() {.    r
0340: 65 74 75 72 6e 20 74 68 69 73 2e 73 74 61 72 74  eturn this.start
0350: 2e 76 61 6c 75 65 20 2b 20 28 74 68 69 73 2e 65  .value + (this.e
0360: 6e 64 2e 76 61 6c 75 65 20 2d 20 74 68 69 73 2e  nd.value - this.
0370: 73 74 61 72 74 2e 76 61 6c 75 65 29 2f 32 3b 0a  start.value)/2;.
0380: 20 20 7d 0a 0a 20 20 73 65 74 20 63 65 6e 74 65    }..  set cente
0390: 72 28 76 61 6c 75 65 29 20 7b 0a 20 20 20 20 6c  r(value) {.    l
03a0: 65 74 20 73 69 7a 65 20 3d 20 74 68 69 73 2e 65  et size = this.e
03b0: 6e 64 2e 76 61 6c 75 65 2d 74 68 69 73 2e 73 74  nd.value-this.st
03c0: 61 72 74 2e 76 61 6c 75 65 3b 0a 20 20 20 20 63  art.value;.    c
03d0: 6f 6e 73 6f 6c 65 2e 6c 6f 67 28 27 3d 3d 3d 3d  onsole.log('====
03e0: 27 29 3b 0a 20 20 20 20 63 6f 6e 73 6f 6c 65 2e  ');.    console.
03f0: 6c 6f 67 28 74 68 69 73 2e 73 74 61 72 74 2e 76  log(this.start.v
0400: 61 6c 75 65 29 3b 0a 20 20 20 20 63 6f 6e 73 6f  alue);.    conso
0410: 6c 65 2e 6c 6f 67 28 74 68 69 73 2e 65 6e 64 2e  le.log(this.end.
0420: 76 61 6c 75 65 29 3b 0a 20 20 20 20 74 68 69 73  value);.    this
0430: 2e 73 74 61 72 74 2e 75 70 64 61 74 65 28 20 76  .start.update( v
0440: 61 6c 75 65 20 2d 20 73 69 7a 65 2f 32 20 29 3b  alue - size/2 );
0450: 0a 20 20 20 20 74 68 69 73 2e 65 6e 64 2e 75 70  .    this.end.up
0460: 64 61 74 65 28 20 74 68 69 73 2e 73 74 61 72 74  date( this.start
0470: 2e 76 61 6c 75 65 20 2b 20 73 69 7a 65 20 29 3b  .value + size );
0480: 0a 20 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20 20 20  .  }..  /**.    
0490: 7b 6e 75 6d 62 65 72 7d 20 53 69 7a 65 20 6f 66  {number} Size of
04a0: 20 74 68 65 20 72 61 6e 67 65 20 73 65 6c 65 63   the range selec
04b0: 74 69 6f 6e 0a 20 20 2a 2f 0a 20 20 67 65 74 20  tion.  */.  get 
04c0: 73 69 7a 65 28 29 20 7b 0a 20 20 20 20 72 65 74  size() {.    ret
04d0: 75 72 6e 20 74 68 69 73 2e 65 6e 64 2e 76 61 6c  urn this.end.val
04e0: 75 65 20 2d 20 74 68 69 73 2e 73 74 61 72 74 2e  ue - this.start.
04f0: 76 61 6c 75 65 3b 0a 20 20 7d 0a 0a 20 20 73 65  value;.  }..  se
0500: 74 20 73 69 7a 65 28 73 69 7a 65 29 20 7b 0a 20  t size(size) {. 
0510: 20 20 20 6c 65 74 20 63 65 6e 74 65 72 20 3d 20     let center = 
0520: 74 68 69 73 2e 63 65 6e 74 65 72 3b 0a 20 20 20  this.center;.   
0530: 20 74 68 69 73 2e 73 74 61 72 74 2e 75 70 64 61   this.start.upda
0540: 74 65 28 63 65 6e 74 65 72 20 2d 20 73 69 7a 65  te(center - size
0550: 2f 32 29 3b 0a 20 20 20 20 2f 2f 20 45 6e 73 75  /2);.    // Ensu
0560: 72 65 20 74 68 61 74 20 74 68 65 20 72 61 6e 67  re that the rang
0570: 65 20 73 6c 73 65 63 74 69 6f 6e 20 5f 69 73 5f  e slsection _is_
0580: 20 74 68 65 20 73 69 7a 65 20 64 65 73 69 72 65   the size desire
0590: 64 2c 20 65 76 65 6e 20 69 66 20 69 74 20 63 68  d, even if it ch
05a0: 61 6e 67 65 73 20 74 68 65 20 63 65 6e 74 65 72  anges the center
05b0: 2e 0a 20 20 20 20 74 68 69 73 2e 65 6e 64 2e 75  ..    this.end.u
05c0: 70 64 61 74 65 28 74 68 69 73 2e 73 74 61 72 74  pdate(this.start
05d0: 2e 76 61 6c 75 65 20 2b 20 73 69 7a 65 29 3b 0a  .value + size);.
05e0: 20 20 20 20 2f 2f 74 68 69 73 2e 65 6e 64 2e 75      //this.end.u
05f0: 70 64 61 74 65 28 63 65 6e 74 65 72 20 2b 20 73  pdate(center + s
0600: 69 7a 65 2f 32 29 3b 0a 20 20 7d 0a 0a 0a 20 20  ize/2);.  }...  
0610: 2f 2a 2a 0a 20 20 20 20 4d 6f 76 65 20 74 68 65  /**.    Move the
0620: 20 72 61 6e 67 65 20 73 65 6c 65 63 74 69 6f 6e   range selection
0630: 0a 20 20 20 20 40 70 61 72 61 6d 20 7b 6e 75 6d  .    @param {num
0640: 62 65 72 7d 20 73 74 61 72 74 20 4e 65 77 20 73  ber} start New s
0650: 74 61 72 74 20 76 61 6c 75 65 20 6f 66 20 74 68  tart value of th
0660: 65 20 72 61 6e 67 65 20 73 65 6c 65 63 74 69 6f  e range selectio
0670: 6e 0a 20 20 20 20 40 70 61 72 61 6d 20 7b 6e 75  n.    @param {nu
0680: 6d 62 65 72 7d 20 65 6e 64 20 4e 65 77 20 65 6e  mber} end New en
0690: 64 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72  d value of the r
06a0: 61 6e 67 65 20 73 65 6c 65 63 74 69 6f 6e 0a 20  ange selection. 
06b0: 20 2a 2f 0a 20 20 6d 6f 76 65 28 73 74 61 72 74   */.  move(start
06c0: 2c 65 6e 64 29 20 7b 0a 20 20 20 20 69 66 20 28  ,end) {.    if (
06d0: 73 74 61 72 74 29 20 7b 0a 20 20 20 20 20 20 74  start) {.      t
06e0: 68 69 73 2e 73 74 61 72 74 2e 75 70 64 61 74 65  his.start.update
06f0: 28 73 74 61 72 74 29 3b 0a 20 20 20 20 7d 0a 20  (start);.    }. 
0700: 20 20 20 69 66 20 28 65 6e 64 29 20 7b 0a 20 20     if (end) {.  
0710: 20 20 20 20 74 68 69 73 2e 65 6e 64 2e 75 70 64      this.end.upd
0720: 61 74 65 28 65 6e 64 29 3b 0a 20 20 20 20 7d 0a  ate(end);.    }.
0730: 20 20 7d 0a 0a 7d 0a                               }..}.