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 }..}.