vttregion.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. /**
  2. * Copyright 2013 vtt.js Contributors
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. var scrollSetting = {
  17. "": true,
  18. "up": true
  19. };
  20. function findScrollSetting(value) {
  21. if (typeof value !== "string") {
  22. return false;
  23. }
  24. var scroll = scrollSetting[value.toLowerCase()];
  25. return scroll ? value.toLowerCase() : false;
  26. }
  27. function isValidPercentValue(value) {
  28. return typeof value === "number" && (value >= 0 && value <= 100);
  29. }
  30. // VTTRegion shim http://dev.w3.org/html5/webvtt/#vttregion-interface
  31. function VTTRegion() {
  32. var _width = 100;
  33. var _lines = 3;
  34. var _regionAnchorX = 0;
  35. var _regionAnchorY = 100;
  36. var _viewportAnchorX = 0;
  37. var _viewportAnchorY = 100;
  38. var _scroll = "";
  39. Object.defineProperties(this, {
  40. "width": {
  41. enumerable: true,
  42. get: function() {
  43. return _width;
  44. },
  45. set: function(value) {
  46. if (!isValidPercentValue(value)) {
  47. throw new Error("Width must be between 0 and 100.");
  48. }
  49. _width = value;
  50. }
  51. },
  52. "lines": {
  53. enumerable: true,
  54. get: function() {
  55. return _lines;
  56. },
  57. set: function(value) {
  58. if (typeof value !== "number") {
  59. throw new TypeError("Lines must be set to a number.");
  60. }
  61. _lines = value;
  62. }
  63. },
  64. "regionAnchorY": {
  65. enumerable: true,
  66. get: function() {
  67. return _regionAnchorY;
  68. },
  69. set: function(value) {
  70. if (!isValidPercentValue(value)) {
  71. throw new Error("RegionAnchorX must be between 0 and 100.");
  72. }
  73. _regionAnchorY = value;
  74. }
  75. },
  76. "regionAnchorX": {
  77. enumerable: true,
  78. get: function() {
  79. return _regionAnchorX;
  80. },
  81. set: function(value) {
  82. if(!isValidPercentValue(value)) {
  83. throw new Error("RegionAnchorY must be between 0 and 100.");
  84. }
  85. _regionAnchorX = value;
  86. }
  87. },
  88. "viewportAnchorY": {
  89. enumerable: true,
  90. get: function() {
  91. return _viewportAnchorY;
  92. },
  93. set: function(value) {
  94. if (!isValidPercentValue(value)) {
  95. throw new Error("ViewportAnchorY must be between 0 and 100.");
  96. }
  97. _viewportAnchorY = value;
  98. }
  99. },
  100. "viewportAnchorX": {
  101. enumerable: true,
  102. get: function() {
  103. return _viewportAnchorX;
  104. },
  105. set: function(value) {
  106. if (!isValidPercentValue(value)) {
  107. throw new Error("ViewportAnchorX must be between 0 and 100.");
  108. }
  109. _viewportAnchorX = value;
  110. }
  111. },
  112. "scroll": {
  113. enumerable: true,
  114. get: function() {
  115. return _scroll;
  116. },
  117. set: function(value) {
  118. var setting = findScrollSetting(value);
  119. // Have to check for false as an empty string is a legal value.
  120. if (setting === false) {
  121. console.warn("Scroll: an invalid or illegal string was specified.");
  122. } else {
  123. _scroll = setting;
  124. }
  125. }
  126. }
  127. });
  128. }
  129. module.exports = VTTRegion;