item_slider.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. "use strict";
  2. var __extends = (this && this.__extends) || (function () {
  3. var extendStatics = function (d, b) {
  4. extendStatics = Object.setPrototypeOf ||
  5. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  6. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  7. return extendStatics(d, b);
  8. };
  9. return function (d, b) {
  10. extendStatics(d, b);
  11. function __() { this.constructor = d; }
  12. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  13. };
  14. })();
  15. Object.defineProperty(exports, "__esModule", { value: true });
  16. exports.Slider = void 0;
  17. var abstract_variable_item_js_1 = require("./abstract_variable_item.js");
  18. var menu_util_js_1 = require("./menu_util.js");
  19. var html_classes_js_1 = require("./html_classes.js");
  20. var key_navigatable_js_1 = require("./key_navigatable.js");
  21. var Slider = (function (_super) {
  22. __extends(Slider, _super);
  23. function Slider(menu, content, variable, id) {
  24. var _this = _super.call(this, menu, 'slider', content, id) || this;
  25. _this.role = 'slider';
  26. _this.labelId = 'ctx_slideLabel' + menu_util_js_1.MenuUtil.counter();
  27. _this.valueId = 'ctx_slideValue' + menu_util_js_1.MenuUtil.counter();
  28. _this.inputEvent = false;
  29. _this.variable = menu.pool.lookup(variable);
  30. _this.register();
  31. return _this;
  32. }
  33. Slider.fromJson = function (_factory, _a, menu) {
  34. var content = _a.content, variable = _a.variable, id = _a.id;
  35. return new this(menu, content, variable, id);
  36. };
  37. Slider.prototype.executeAction = function () {
  38. this.variable.setValue(this.input.value, menu_util_js_1.MenuUtil.getActiveElement(this));
  39. this.update();
  40. };
  41. Slider.prototype.space = function (event) {
  42. _super.prototype.space.call(this, event);
  43. menu_util_js_1.MenuUtil.close(this);
  44. };
  45. Slider.prototype.focus = function () {
  46. _super.prototype.focus.call(this);
  47. this.input.focus();
  48. };
  49. Slider.prototype.unfocus = function () {
  50. _super.prototype.unfocus.call(this);
  51. this.updateSpan();
  52. };
  53. Slider.prototype.generateHtml = function () {
  54. _super.prototype.generateHtml.call(this);
  55. var html = this.html;
  56. html.classList.add(html_classes_js_1.HtmlClasses['MENUSLIDER']);
  57. this.valueSpan = document.createElement('span');
  58. this.valueSpan.setAttribute('id', this.valueId);
  59. this.valueSpan.classList.add(html_classes_js_1.HtmlClasses['SLIDERVALUE']);
  60. this.html.appendChild(this.valueSpan);
  61. };
  62. Slider.prototype.generateSpan = function () {
  63. this.span = document.createElement('span');
  64. this.labelSpan = document.createElement('span');
  65. this.labelSpan.setAttribute('id', this.labelId);
  66. this.labelSpan.appendChild(this.html.childNodes[0]);
  67. this.html.appendChild(this.labelSpan);
  68. this.input = document.createElement('input');
  69. this.input.setAttribute('type', 'range');
  70. this.input.setAttribute('min', '0');
  71. this.input.setAttribute('max', '100');
  72. this.input.setAttribute('aria-valuemin', '0');
  73. this.input.setAttribute('aria-valuemax', '100');
  74. this.input.setAttribute('aria-labelledby', this.labelId);
  75. this.input.addEventListener('keydown', this.inputKey.bind(this));
  76. this.input.addEventListener('input', this.executeAction.bind(this));
  77. this.input.classList.add(html_classes_js_1.HtmlClasses['SLIDERBAR']);
  78. this.span.appendChild(this.input);
  79. };
  80. Slider.prototype.inputKey = function (_event) {
  81. this.inputEvent = true;
  82. };
  83. Slider.prototype.mousedown = function (event) {
  84. event.stopPropagation();
  85. };
  86. Slider.prototype.mouseup = function (_event) {
  87. event.stopPropagation();
  88. };
  89. Slider.prototype.keydown = function (event) {
  90. var code = event.keyCode;
  91. if (code === key_navigatable_js_1.KEY.UP || code === key_navigatable_js_1.KEY.DOWN) {
  92. event.preventDefault();
  93. _super.prototype.keydown.call(this, event);
  94. return;
  95. }
  96. if (this.inputEvent &&
  97. code !== key_navigatable_js_1.KEY.ESCAPE && code !== key_navigatable_js_1.KEY.RETURN) {
  98. this.inputEvent = false;
  99. event.stopPropagation();
  100. return;
  101. }
  102. _super.prototype.keydown.call(this, event);
  103. event.stopPropagation();
  104. };
  105. Slider.prototype.updateAria = function () {
  106. var value = this.variable.getValue();
  107. if (value && this.input) {
  108. this.input.setAttribute('aria-valuenow', value);
  109. this.input.setAttribute('aria-valuetext', value + '%');
  110. }
  111. };
  112. Slider.prototype.updateSpan = function () {
  113. var initValue;
  114. try {
  115. initValue = this.variable.getValue(menu_util_js_1.MenuUtil.getActiveElement(this));
  116. this.valueSpan.innerHTML = initValue + '%';
  117. }
  118. catch (e) {
  119. initValue = '';
  120. }
  121. this.input.value = initValue;
  122. };
  123. Slider.prototype.toJson = function () {
  124. return { type: ''
  125. };
  126. };
  127. return Slider;
  128. }(abstract_variable_item_js_1.AbstractVariableItem));
  129. exports.Slider = Slider;
  130. //# sourceMappingURL=item_slider.js.map