@operato/scene-timer 1.2.90 → 1.3.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,23 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [1.3.14](https://github.com/things-scene/operato-scene/compare/v1.3.13...v1.3.14) (2024-02-14)
7
+
8
+ **Note:** Version bump only for package @operato/scene-timer
9
+
10
+
11
+
12
+
13
+
14
+ ## [1.2.91](https://github.com/things-scene/operato-scene/compare/v1.2.90...v1.2.91) (2023-11-26)
15
+
16
+
17
+ ### :bug: Bug Fix
18
+
19
+ * timer format error ([dbde4c5](https://github.com/things-scene/operato-scene/commit/dbde4c5ad45f1185d5dfcd4c5621cf75f71a3d6f))
20
+
21
+
22
+
6
23
  ## [1.2.90](https://github.com/things-scene/operato-scene/compare/v1.2.89...v1.2.90) (2023-11-22)
7
24
 
8
25
  **Note:** Version bump only for package @operato/scene-timer
@@ -1 +1 @@
1
- {"version":3,"file":"duetimer.js","sourceRoot":"","sources":["../src/duetimer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA+B,QAAQ,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAEhG;;GAEG;AACH,OAAO,MAAM,MAAM,eAAe,CAAA;AAElC,MAAM,MAAM,GAAoB;IAC9B,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IACf,UAAU,EAAE;QACV;YACE,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,KAAK;YACX,WAAW,EAAE,WAAW;SACzB;QACD;YACE,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,YAAY;YACnB,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,UAAU;SACxB;QACD;YACE,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,aAAa;YACpB,IAAI,EAAE,aAAa;YACnB,WAAW,EAAE,UAAU;SACxB;QACD;YACE,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,iBAAiB;YACxB,IAAI,EAAE,gBAAgB;YACtB,QAAQ,EAAE;gBACR,OAAO,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC;aACpC;SACF;QACD;YACE,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,gBAAgB;YACvB,IAAI,EAAE,eAAe;YACrB,QAAQ,EAAE,eAAe;SAC1B;KACF;IACD,gBAAgB,EAAE,KAAK;IACvB,IAAI,EAAE,0BAA0B;CACjC,CAAA;AAED,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,QAAQ,CAAC,KAAK,CAAC;IAArD;;QACU,WAAM,GAAW,CAAC,CAAA;IAmH5B,CAAC;IAjHC,IAAI,MAAM;QACR,OAAO,MAAM,CAAA;IACf,CAAC;IAED,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE;YACxB,OAAM;SACP;QAED,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAA;QAE5B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;IACnE,CAAC;IAED,QAAQ,CAAC,KAAiB;QACxB,IAAI,SAAS,IAAI,KAAK,EAAE;YACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;YACtE,IAAI,CAAC,QAAQ,EAAE,CAAA;SAChB;IACH,CAAC;IAED,QAAQ;QACN,aAAa;QACb,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,OAAM;SACP;QAED,qBAAqB,CAAC,GAAG,EAAE;YACzB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;YAChC,MAAM,EAAE,cAAc,GAAG,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAA;YAEnD,IAAI,SAAS,GAAG,CAAC,EAAE;gBACjB,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAA;gBAE3D,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;gBAEhB,IAAI,cAAc,IAAI,OAAO,EAAE;oBAC7B,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;iBAC5B;gBAED,UAAU,CAAC,GAAG,EAAE;oBACd,IAAI,CAAC,QAAQ,EAAE,CAAA;gBACjB,CAAC,EAAE,IAAI,CAAC,CAAA;aACT;iBAAM;gBACL,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAA;gBAE5D,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;gBAEhB,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,cAAc,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;aACxE;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,CAAC,OAAiC;QACtC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,aAAa,EAAE,GAAG,IAAI,CAAC,KAAK,CAAA;QAE5E,eAAe;QACf,OAAO,CAAC,SAAS,EAAE,CAAA;QACnB,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;QAEtC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;QAEtB,YAAY;QACZ,OAAO,CAAC,SAAS,EAAE,CAAA;QAEnB,IAAI,QAAQ,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,CAAA;QAEpD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;YACpB,QAAQ,GAAG,KAAK,GAAG,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAA;YAC3C,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;YAEjD,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;YACzC,OAAO,CAAC,SAAS,GAAG,aAAa,CAAA;YACjC,OAAO,CAAC,IAAI,EAAE,CAAA;YAEd,OAAO,CAAC,SAAS,EAAE,CAAA;SACpB;QAED,SAAS;QACT,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;IACxC,CAAC;IAED,UAAU,CAAC,OAAiC;QAC1C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;QACxB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;IACxB,CAAC;IAED,IAAI,OAAO;QACT,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA;IAC9C,CAAC;IAED,IAAI,OAAO,CAAC,OAAO;QACjB,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;IAChD,CAAC;IAED,IAAI,GAAG;QACL,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;IAC1C,CAAC;IAED,IAAI,GAAG,CAAC,GAAG;QACT,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IAC3B,CAAC;IAED,IAAI,SAAS;QACX,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAA;QACpB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAEtB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;IACpD,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;CACF;AAED,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA","sourcesContent":["import { Component, ComponentNature, Properties, RectPath, Shape } from '@hatiolab/things-scene'\n\n/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\nimport format from './libs/format'\n\nconst NATURE: ComponentNature = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n {\n type: 'number',\n label: 'due',\n name: 'due',\n placeholder: 'timestamp'\n },\n {\n type: 'string',\n label: 'format-run',\n name: 'format-run',\n placeholder: 'hh:mm:ss'\n },\n {\n type: 'string',\n label: 'format-stop',\n name: 'format-stop',\n placeholder: '--:--:--'\n },\n {\n type: 'select',\n label: 'data-reflection',\n name: 'dataReflection',\n property: {\n options: ['', 'countdown', 'round']\n }\n },\n {\n type: 'color',\n label: 'progress-color',\n name: 'progressColor',\n property: 'progressColor'\n }\n ],\n 'value-property': 'due',\n help: 'scene/component/duetimer'\n}\n\nexport default class DueTimer extends RectPath(Shape) {\n private _round: number = 0\n\n get nature() {\n return NATURE\n }\n\n ready() {\n if (!this.app.isViewMode) {\n return\n }\n\n var { due = 0 } = this.state\n\n this.timeout = Math.max(Math.round((due - Date.now()) / 1000), 0)\n }\n\n onchange(after: Properties) {\n if ('timeout' in after) {\n this.timeout = Math.max(Math.round((this.due - Date.now()) / 1000), 0)\n this.counting()\n }\n }\n\n counting() {\n // @ts-ignore\n if (this.disposed) {\n return\n }\n\n requestAnimationFrame(() => {\n const countdown = this.countdown\n const { dataReflection = 'countdown' } = this.state\n\n if (countdown > 0) {\n const text = format(countdown, this.getState('format-run'))\n\n this.text = text\n\n if (dataReflection != 'round') {\n this.setState('data', text)\n }\n\n setTimeout(() => {\n this.counting()\n }, 1000)\n } else {\n const text = format(countdown, this.getState('format-stop'))\n\n this.text = text\n\n this.setState('data', dataReflection != 'round' ? text : ++this._round)\n }\n })\n }\n\n render(context: CanvasRenderingContext2D) {\n var { top, left, height, width, progressColor = 'transparent' } = this.state\n\n // progress의 색상\n context.beginPath()\n context.rect(left, top, width, height)\n\n this.drawFill(context)\n\n // value의 색상\n context.beginPath()\n\n var progress = (this.countdown / this.timeout) * 100\n\n if (!isNaN(progress)) {\n progress = width - (width * progress) / 100\n progress = Math.max(Math.min(progress, width), 0)\n\n context.rect(left, top, progress, height)\n context.fillStyle = progressColor\n context.fill()\n\n context.beginPath()\n }\n\n // stroke\n context.rect(left, top, width, height)\n }\n\n postrender(context: CanvasRenderingContext2D) {\n this.drawStroke(context)\n this.drawText(context)\n }\n\n get timeout() {\n return Number(this.getState('timeout') || 0)\n }\n\n set timeout(timeout) {\n this.setState('timeout', Number(timeout) || 0)\n }\n\n get due() {\n return Number(this.getState('due') || 0)\n }\n\n set due(due) {\n this.setState('due', due)\n }\n\n get countdown() {\n const due = this.due\n const now = Date.now()\n\n return Math.max(Math.round((due - now) / 1000), 0)\n }\n\n get round() {\n return this._round\n }\n}\n\nComponent.register('duetimer', DueTimer)\n"]}
1
+ {"version":3,"file":"duetimer.js","sourceRoot":"","sources":["../src/duetimer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, ComponentNature, Properties, RectPath, Shape } from '@hatiolab/things-scene'\n\n/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\nimport format from './libs/format'\n\nconst NATURE: ComponentNature = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n {\n type: 'number',\n label: 'due',\n name: 'due',\n placeholder: 'timestamp'\n },\n {\n type: 'string',\n label: 'format-run',\n name: 'format-run',\n placeholder: 'hh:mm:ss'\n },\n {\n type: 'string',\n label: 'format-stop',\n name: 'format-stop',\n placeholder: '--:--:--'\n },\n {\n type: 'select',\n label: 'data-reflection',\n name: 'dataReflection',\n property: {\n options: ['', 'countdown', 'round']\n }\n },\n {\n type: 'color',\n label: 'progress-color',\n name: 'progressColor',\n property: 'progressColor'\n }\n ],\n 'value-property': 'due',\n help: 'scene/component/duetimer'\n}\n\nexport default class DueTimer extends RectPath(Shape) {\n private _round: number = 0\n\n get nature() {\n return NATURE\n }\n\n ready() {\n if (!this.app.isViewMode) {\n return\n }\n\n var { due = 0 } = this.state\n\n this.timeout = Math.max(Math.round((due - Date.now()) / 1000), 0)\n }\n\n onchange(after: Properties) {\n if ('timeout' in after) {\n this.timeout = Math.max(Math.round((this.due - Date.now()) / 1000), 0)\n this.counting()\n }\n }\n\n counting() {\n // @ts-ignore\n if (this.disposed) {\n return\n }\n\n requestAnimationFrame(() => {\n const countdown = this.countdown\n const { dataReflection = 'countdown' } = this.state\n\n if (countdown > 0) {\n const text = format(countdown, this.getState('format-run'))\n\n this.text = text\n\n if (dataReflection != 'round') {\n this.setState('data', text)\n }\n\n setTimeout(() => {\n this.counting()\n }, 1000)\n } else {\n const text = format(countdown, this.getState('format-stop'))\n\n this.text = text\n\n this.setState('data', dataReflection != 'round' ? text : ++this._round)\n }\n })\n }\n\n render(context: CanvasRenderingContext2D) {\n var { top, left, height, width, progressColor = 'transparent' } = this.state\n\n // progress의 색상\n context.beginPath()\n context.rect(left, top, width, height)\n\n this.drawFill(context)\n\n // value의 색상\n context.beginPath()\n\n var progress = (this.countdown / this.timeout) * 100\n\n if (!isNaN(progress)) {\n progress = width - (width * progress) / 100\n progress = Math.max(Math.min(progress, width), 0)\n\n context.rect(left, top, progress, height)\n context.fillStyle = progressColor\n context.fill()\n\n context.beginPath()\n }\n\n // stroke\n context.rect(left, top, width, height)\n }\n\n postrender(context: CanvasRenderingContext2D) {\n this.drawStroke(context)\n this.drawText(context)\n }\n\n get timeout() {\n return Number(this.getState('timeout') || 0)\n }\n\n set timeout(timeout) {\n this.setState('timeout', Number(timeout) || 0)\n }\n\n get due() {\n return Number(this.getState('due') || 0)\n }\n\n set due(due) {\n this.setState('due', due)\n }\n\n get countdown() {\n const due = this.due\n const now = Date.now()\n\n return Math.max(Math.round((due - now) / 1000), 0)\n }\n\n get round() {\n return this._round\n }\n}\n\nComponent.register('duetimer', DueTimer)\n"]}
@@ -2,6 +2,6 @@
2
2
  * 시간 표시 포맷을 맞추는 함수
3
3
  *
4
4
  * @param {Number} seconds seconds
5
- * @param {string} format hh:mm:ss
5
+ * @param {string} timeFormat hh:mm:ss
6
6
  */
7
- export default function format(seconds?: number, format?: string): string;
7
+ export default function formatTime(seconds?: number, timeFormat?: string): string;
@@ -5,7 +5,7 @@
5
5
  * @param {Number} len
6
6
  */
7
7
  function ii(i, len) {
8
- var s = i + '';
8
+ var s = i;
9
9
  len = len || 2;
10
10
  while (s.length < len)
11
11
  s = '0' + s;
@@ -15,28 +15,28 @@ function ii(i, len) {
15
15
  * 시간 표시 포맷을 맞추는 함수
16
16
  *
17
17
  * @param {Number} seconds seconds
18
- * @param {string} format hh:mm:ss
18
+ * @param {string} timeFormat hh:mm:ss
19
19
  */
20
- export default function format(seconds = 0, format = '') {
20
+ export default function formatTime(seconds = 0, timeFormat = '') {
21
21
  var h = 0, m = 0, s = 0;
22
- var formated = '';
22
+ var formatted = '';
23
23
  h = Math.floor(seconds / 3600);
24
- formated = format.replace(/(^|[^\\])hh+/g, '$1' + ii(h));
25
- formated = formated.replace(/(^|[^\\])h/g, '$1' + h);
26
- if (format != formated) {
27
- format = formated;
28
- seconds %= 1440;
24
+ formatted = timeFormat.replace(/(^|[^\\])hh+/g, '$1' + ii(h.toString()));
25
+ formatted = formatted.replace(/(^|[^\\])h/g, '$1' + h);
26
+ if (timeFormat !== formatted) {
27
+ timeFormat = formatted;
28
+ seconds %= 3600;
29
29
  }
30
30
  m = Math.floor(seconds / 60);
31
- formated = format.replace(/(^|[^\\])mm+/g, '$1' + ii(m));
32
- formated = formated.replace(/(^|[^\\])m/g, '$1' + m);
33
- if (format != formated) {
34
- format = formated;
31
+ formatted = timeFormat.replace(/(^|[^\\])mm+/g, '$1' + ii(m.toString()));
32
+ formatted = formatted.replace(/(^|[^\\])m/g, '$1' + m);
33
+ if (timeFormat !== formatted) {
34
+ timeFormat = formatted;
35
35
  seconds %= 60;
36
36
  }
37
37
  s = seconds;
38
- formated = format.replace(/(^|[^\\])ss+/g, '$1' + ii(s));
39
- formated = formated.replace(/(^|[^\\])s/g, '$1' + s);
40
- return formated;
38
+ formatted = timeFormat.replace(/(^|[^\\])ss+/g, '$1' + ii(s.toString()));
39
+ formatted = formatted.replace(/(^|[^\\])s/g, '$1' + s);
40
+ return formatted;
41
41
  }
42
42
  //# sourceMappingURL=format.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/libs/format.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,SAAS,EAAE,CAAC,CAAS,EAAE,GAAY;IACjC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAA;IACd,GAAG,GAAG,GAAG,IAAI,CAAC,CAAA;IACd,OAAO,CAAC,CAAC,MAAM,GAAG,GAAG;QAAE,CAAC,GAAG,GAAG,GAAG,CAAC,CAAA;IAClC,OAAO,CAAC,CAAA;AACV,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,OAAO,GAAG,CAAC,EAAE,MAAM,GAAG,EAAE;IACrD,IAAI,CAAC,GAAG,CAAC,EACP,CAAC,GAAG,CAAC,EACL,CAAC,GAAG,CAAC,CAAA;IACP,IAAI,QAAQ,GAAG,EAAE,CAAA;IAEjB,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;IAC9B,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IACxD,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,GAAG,CAAC,CAAC,CAAA;IACpD,IAAI,MAAM,IAAI,QAAQ,EAAE;QACtB,MAAM,GAAG,QAAQ,CAAA;QACjB,OAAO,IAAI,IAAI,CAAA;KAChB;IAED,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAA;IAC5B,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IACxD,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,GAAG,CAAC,CAAC,CAAA;IACpD,IAAI,MAAM,IAAI,QAAQ,EAAE;QACtB,MAAM,GAAG,QAAQ,CAAA;QACjB,OAAO,IAAI,EAAE,CAAA;KACd;IAED,CAAC,GAAG,OAAO,CAAA;IACX,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IACxD,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,GAAG,CAAC,CAAC,CAAA;IAEpD,OAAO,QAAQ,CAAA;AACjB,CAAC","sourcesContent":["/**\n * 문자열 길이를 늘려주는 함수\n *\n * @param {String} i\n * @param {Number} len\n */\nfunction ii(i: number, len?: number) {\n var s = i + ''\n len = len || 2\n while (s.length < len) s = '0' + s\n return s\n}\n\n/**\n * 시간 표시 포맷을 맞추는 함수\n *\n * @param {Number} seconds seconds\n * @param {string} format hh:mm:ss\n */\nexport default function format(seconds = 0, format = '') {\n var h = 0,\n m = 0,\n s = 0\n var formated = ''\n\n h = Math.floor(seconds / 3600)\n formated = format.replace(/(^|[^\\\\])hh+/g, '$1' + ii(h))\n formated = formated.replace(/(^|[^\\\\])h/g, '$1' + h)\n if (format != formated) {\n format = formated\n seconds %= 1440\n }\n\n m = Math.floor(seconds / 60)\n formated = format.replace(/(^|[^\\\\])mm+/g, '$1' + ii(m))\n formated = formated.replace(/(^|[^\\\\])m/g, '$1' + m)\n if (format != formated) {\n format = formated\n seconds %= 60\n }\n\n s = seconds\n formated = format.replace(/(^|[^\\\\])ss+/g, '$1' + ii(s))\n formated = formated.replace(/(^|[^\\\\])s/g, '$1' + s)\n\n return formated\n}\n"]}
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/libs/format.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,SAAS,EAAE,CAAC,CAAS,EAAE,GAAY;IACjC,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,GAAG,GAAG,GAAG,IAAI,CAAC,CAAA;IACd,OAAO,CAAC,CAAC,MAAM,GAAG,GAAG;QAAE,CAAC,GAAG,GAAG,GAAG,CAAC,CAAA;IAClC,OAAO,CAAC,CAAA;AACV,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,OAAO,GAAG,CAAC,EAAE,UAAU,GAAG,EAAE;IAC7D,IAAI,CAAC,GAAG,CAAC,EACP,CAAC,GAAG,CAAC,EACL,CAAC,GAAG,CAAC,CAAA;IACP,IAAI,SAAS,GAAG,EAAE,CAAA;IAElB,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;IAC9B,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;IACxE,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,GAAG,CAAC,CAAC,CAAA;IACtD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,UAAU,GAAG,SAAS,CAAA;QACtB,OAAO,IAAI,IAAI,CAAA;IACjB,CAAC;IAED,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAA;IAC5B,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;IACxE,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,GAAG,CAAC,CAAC,CAAA;IACtD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,UAAU,GAAG,SAAS,CAAA;QACtB,OAAO,IAAI,EAAE,CAAA;IACf,CAAC;IAED,CAAC,GAAG,OAAO,CAAA;IACX,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;IACxE,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,GAAG,CAAC,CAAC,CAAA;IAEtD,OAAO,SAAS,CAAA;AAClB,CAAC","sourcesContent":["/**\n * 문자열 길이를 늘려주는 함수\n *\n * @param {String} i\n * @param {Number} len\n */\nfunction ii(i: string, len?: number) {\n var s = i\n len = len || 2\n while (s.length < len) s = '0' + s\n return s\n}\n\n/**\n * 시간 표시 포맷을 맞추는 함수\n *\n * @param {Number} seconds seconds\n * @param {string} timeFormat hh:mm:ss\n */\nexport default function formatTime(seconds = 0, timeFormat = '') {\n var h = 0,\n m = 0,\n s = 0\n var formatted = ''\n\n h = Math.floor(seconds / 3600)\n formatted = timeFormat.replace(/(^|[^\\\\])hh+/g, '$1' + ii(h.toString()))\n formatted = formatted.replace(/(^|[^\\\\])h/g, '$1' + h)\n if (timeFormat !== formatted) {\n timeFormat = formatted\n seconds %= 3600\n }\n\n m = Math.floor(seconds / 60)\n formatted = timeFormat.replace(/(^|[^\\\\])mm+/g, '$1' + ii(m.toString()))\n formatted = formatted.replace(/(^|[^\\\\])m/g, '$1' + m)\n if (timeFormat !== formatted) {\n timeFormat = formatted\n seconds %= 60\n }\n\n s = seconds\n formatted = timeFormat.replace(/(^|[^\\\\])ss+/g, '$1' + ii(s.toString()))\n formatted = formatted.replace(/(^|[^\\\\])s/g, '$1' + s)\n\n return formatted\n}\n"]}
package/dist/timer.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"timer.js","sourceRoot":"","sources":["../src/timer.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport { Component, ComponentNature, Properties, RectPath, Shape } from '@hatiolab/things-scene'\n\nimport format from './libs/format'\n\nconst NATURE: ComponentNature = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n {\n type: 'number',\n label: 'days',\n name: 'days',\n placeholder: 'days'\n },\n {\n type: 'number',\n label: 'hours',\n name: 'hours',\n placeholder: 'hours'\n },\n {\n type: 'number',\n label: 'minutes',\n name: 'minutes',\n placeholder: 'minutes'\n },\n {\n type: 'number',\n label: 'seconds',\n name: 'seconds',\n placeholder: 'seconds'\n },\n {\n type: 'string',\n label: 'format-run',\n name: 'format-run',\n placeholder: 'hh:mm:ss'\n },\n {\n type: 'string',\n label: 'format-stop',\n name: 'format-stop',\n placeholder: '--:--:--'\n },\n {\n type: 'color',\n label: 'progress-color',\n name: 'progressColor',\n property: 'progressColor'\n },\n {\n type: 'select',\n label: 'data-reflection',\n name: 'dataReflection',\n property: {\n options: ['countdown', 'round']\n }\n },\n {\n type: 'boolean',\n label: 'repeat',\n name: 'repeat'\n }\n ],\n 'value-property': 'timeout',\n help: 'scene/component/timer'\n}\n\nexport default class Timer extends RectPath(Shape) {\n private _due?: number\n private _round: number = 0\n\n get nature() {\n return NATURE\n }\n\n ready() {\n if (!this.app.isViewMode) {\n return\n }\n\n var { days = 0, hours = 0, minutes = 0, seconds = 0 } = this.state\n\n this.timeout = days * 86400 + hours * 3600 + minutes * 60 + seconds\n }\n\n onchange(after: Properties) {\n if ('timeout' in after) {\n this._due = Date.now() + this.timeout * 1000\n this.counting()\n }\n }\n\n counting() {\n // @ts-ignore\n if (this.disposed) {\n return\n }\n\n const { dataReflection = 'countdown' } = this.state\n\n requestAnimationFrame(() => {\n const countdown = this.countdown\n\n if (countdown > 0) {\n const text = format(countdown, this.getState('format-run'))\n this.text = text\n\n if (dataReflection != 'round') {\n this.setState('data', text)\n }\n\n setTimeout(() => {\n this.counting()\n }, 1000)\n } else {\n const text = format(countdown, this.getState('format-stop'))\n this.text = text\n\n this.setState('data', dataReflection != 'round' ? text : ++this._round)\n\n if (this.state.repeat) {\n this._due = Date.now() + this.timeout * 1000\n this.counting()\n }\n }\n })\n }\n\n render(context: CanvasRenderingContext2D) {\n var { top, left, height, width, progressColor = 'transparent' } = this.state\n\n // progress의 색상\n context.beginPath()\n context.rect(left, top, width, height)\n this.drawFill(context)\n\n // value의 색상\n context.beginPath()\n\n var progress = (this.countdown / this.timeout) * 100\n\n if (!isNaN(progress)) {\n progress = width - (width * progress) / 100\n progress = Math.max(Math.min(progress, width), 0)\n\n context.rect(left, top, progress, height)\n context.fillStyle = progressColor\n context.fill()\n\n context.beginPath()\n }\n\n // stroke\n context.rect(left, top, width, height)\n }\n\n postrender(context: CanvasRenderingContext2D) {\n this.drawStroke(context)\n this.drawText(context)\n }\n\n get timeout() {\n return Number(this.getState('timeout') || 0)\n }\n\n set timeout(timeout) {\n this.setState('timeout', Number(timeout) || 0)\n }\n\n get countdown() {\n const timeout = this.timeout\n if (!timeout || timeout < 0) {\n return 0\n }\n\n const due = this._due || 0\n const now = Date.now()\n\n return Math.max(Math.round((due - now) / 1000), 0)\n }\n\n get round() {\n return this._round\n }\n}\n\nComponent.register('timer', Timer)\n"]}
1
+ {"version":3,"file":"timer.js","sourceRoot":"","sources":["../src/timer.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport { Component, ComponentNature, Properties, RectPath, Shape } from '@hatiolab/things-scene'\n\nimport format from './libs/format'\n\nconst NATURE: ComponentNature = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n {\n type: 'number',\n label: 'days',\n name: 'days',\n placeholder: 'days'\n },\n {\n type: 'number',\n label: 'hours',\n name: 'hours',\n placeholder: 'hours'\n },\n {\n type: 'number',\n label: 'minutes',\n name: 'minutes',\n placeholder: 'minutes'\n },\n {\n type: 'number',\n label: 'seconds',\n name: 'seconds',\n placeholder: 'seconds'\n },\n {\n type: 'string',\n label: 'format-run',\n name: 'format-run',\n placeholder: 'hh:mm:ss'\n },\n {\n type: 'string',\n label: 'format-stop',\n name: 'format-stop',\n placeholder: '--:--:--'\n },\n {\n type: 'color',\n label: 'progress-color',\n name: 'progressColor',\n property: 'progressColor'\n },\n {\n type: 'select',\n label: 'data-reflection',\n name: 'dataReflection',\n property: {\n options: ['countdown', 'round']\n }\n },\n {\n type: 'boolean',\n label: 'repeat',\n name: 'repeat'\n }\n ],\n 'value-property': 'timeout',\n help: 'scene/component/timer'\n}\n\nexport default class Timer extends RectPath(Shape) {\n private _due?: number\n private _round: number = 0\n\n get nature() {\n return NATURE\n }\n\n ready() {\n if (!this.app.isViewMode) {\n return\n }\n\n var { days = 0, hours = 0, minutes = 0, seconds = 0 } = this.state\n\n this.timeout = days * 86400 + hours * 3600 + minutes * 60 + seconds\n }\n\n onchange(after: Properties) {\n if ('timeout' in after) {\n this._due = Date.now() + this.timeout * 1000\n this.counting()\n }\n }\n\n counting() {\n // @ts-ignore\n if (this.disposed) {\n return\n }\n\n const { dataReflection = 'countdown' } = this.state\n\n requestAnimationFrame(() => {\n const countdown = this.countdown\n\n if (countdown > 0) {\n const text = format(countdown, this.getState('format-run'))\n this.text = text\n\n if (dataReflection != 'round') {\n this.setState('data', text)\n }\n\n setTimeout(() => {\n this.counting()\n }, 1000)\n } else {\n const text = format(countdown, this.getState('format-stop'))\n this.text = text\n\n this.setState('data', dataReflection != 'round' ? text : ++this._round)\n\n if (this.state.repeat) {\n this._due = Date.now() + this.timeout * 1000\n this.counting()\n }\n }\n })\n }\n\n render(context: CanvasRenderingContext2D) {\n var { top, left, height, width, progressColor = 'transparent' } = this.state\n\n // progress의 색상\n context.beginPath()\n context.rect(left, top, width, height)\n this.drawFill(context)\n\n // value의 색상\n context.beginPath()\n\n var progress = (this.countdown / this.timeout) * 100\n\n if (!isNaN(progress)) {\n progress = width - (width * progress) / 100\n progress = Math.max(Math.min(progress, width), 0)\n\n context.rect(left, top, progress, height)\n context.fillStyle = progressColor\n context.fill()\n\n context.beginPath()\n }\n\n // stroke\n context.rect(left, top, width, height)\n }\n\n postrender(context: CanvasRenderingContext2D) {\n this.drawStroke(context)\n this.drawText(context)\n }\n\n get timeout() {\n return Number(this.getState('timeout') || 0)\n }\n\n set timeout(timeout) {\n this.setState('timeout', Number(timeout) || 0)\n }\n\n get countdown() {\n const timeout = this.timeout\n if (!timeout || timeout < 0) {\n return 0\n }\n\n const due = this._due || 0\n const now = Date.now()\n\n return Math.max(Math.round((due - now) / 1000), 0)\n }\n\n get round() {\n return this._round\n }\n}\n\nComponent.register('timer', Timer)\n"]}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@operato/scene-timer",
3
3
  "description": "Timer component for things-scene",
4
4
  "author": "heartyoh",
5
- "version": "1.2.90",
5
+ "version": "1.3.14",
6
6
  "main": "dist/index.js",
7
7
  "module": "dist/index.js",
8
8
  "license": "MIT",
@@ -57,5 +57,5 @@
57
57
  "prettier --write"
58
58
  ]
59
59
  },
60
- "gitHead": "93fdb854cd60011a20786ed3dc693088dbb751bc"
60
+ "gitHead": "4bcb3cf4efb2f99d89d9219246be65055c78b4c3"
61
61
  }
@@ -4,8 +4,8 @@
4
4
  * @param {String} i
5
5
  * @param {Number} len
6
6
  */
7
- function ii(i: number, len?: number) {
8
- var s = i + ''
7
+ function ii(i: string, len?: number) {
8
+ var s = i
9
9
  len = len || 2
10
10
  while (s.length < len) s = '0' + s
11
11
  return s
@@ -15,33 +15,33 @@ function ii(i: number, len?: number) {
15
15
  * 시간 표시 포맷을 맞추는 함수
16
16
  *
17
17
  * @param {Number} seconds seconds
18
- * @param {string} format hh:mm:ss
18
+ * @param {string} timeFormat hh:mm:ss
19
19
  */
20
- export default function format(seconds = 0, format = '') {
20
+ export default function formatTime(seconds = 0, timeFormat = '') {
21
21
  var h = 0,
22
22
  m = 0,
23
23
  s = 0
24
- var formated = ''
24
+ var formatted = ''
25
25
 
26
26
  h = Math.floor(seconds / 3600)
27
- formated = format.replace(/(^|[^\\])hh+/g, '$1' + ii(h))
28
- formated = formated.replace(/(^|[^\\])h/g, '$1' + h)
29
- if (format != formated) {
30
- format = formated
31
- seconds %= 1440
27
+ formatted = timeFormat.replace(/(^|[^\\])hh+/g, '$1' + ii(h.toString()))
28
+ formatted = formatted.replace(/(^|[^\\])h/g, '$1' + h)
29
+ if (timeFormat !== formatted) {
30
+ timeFormat = formatted
31
+ seconds %= 3600
32
32
  }
33
33
 
34
34
  m = Math.floor(seconds / 60)
35
- formated = format.replace(/(^|[^\\])mm+/g, '$1' + ii(m))
36
- formated = formated.replace(/(^|[^\\])m/g, '$1' + m)
37
- if (format != formated) {
38
- format = formated
35
+ formatted = timeFormat.replace(/(^|[^\\])mm+/g, '$1' + ii(m.toString()))
36
+ formatted = formatted.replace(/(^|[^\\])m/g, '$1' + m)
37
+ if (timeFormat !== formatted) {
38
+ timeFormat = formatted
39
39
  seconds %= 60
40
40
  }
41
41
 
42
42
  s = seconds
43
- formated = format.replace(/(^|[^\\])ss+/g, '$1' + ii(s))
44
- formated = formated.replace(/(^|[^\\])s/g, '$1' + s)
43
+ formatted = timeFormat.replace(/(^|[^\\])ss+/g, '$1' + ii(s.toString()))
44
+ formatted = formatted.replace(/(^|[^\\])s/g, '$1' + s)
45
45
 
46
- return formated
46
+ return formatted
47
47
  }