vttregion.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  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. (function(root, vttjs) {
  17. var scrollSetting = {
  18. "": true,
  19. "up": true
  20. };
  21. function findScrollSetting(value) {
  22. if (typeof value !== "string") {
  23. return false;
  24. }
  25. var scroll = scrollSetting[value.toLowerCase()];
  26. return scroll ? value.toLowerCase() : false;
  27. }
  28. function isValidPercentValue(value) {
  29. return typeof value === "number" && (value >= 0 && value <= 100);
  30. }
  31. // VTTRegion shim http://dev.w3.org/html5/webvtt/#vttregion-interface
  32. function VTTRegion() {
  33. var _width = 100;
  34. var _lines = 3;
  35. var _regionAnchorX = 0;
  36. var _regionAnchorY = 100;
  37. var _viewportAnchorX = 0;
  38. var _viewportAnchorY = 100;
  39. var _scroll = "";
  40. Object.defineProperties(this, {
  41. "width": {
  42. enumerable: true,
  43. get: function() {
  44. return _width;
  45. },
  46. set: function(value) {
  47. if (!isValidPercentValue(value)) {
  48. throw new Error("Width must be between 0 and 100.");
  49. }
  50. _width = value;
  51. }
  52. },
  53. "lines": {
  54. enumerable: true,
  55. get: function() {
  56. return _lines;
  57. },
  58. set: function(value) {
  59. if (typeof value !== "number") {
  60. throw new TypeError("Lines must be set to a number.");
  61. }
  62. _lines = value;
  63. }
  64. },
  65. "regionAnchorY": {
  66. enumerable: true,
  67. get: function() {
  68. return _regionAnchorY;
  69. },
  70. set: function(value) {
  71. if (!isValidPercentValue(value)) {
  72. throw new Error("RegionAnchorX must be between 0 and 100.");
  73. }
  74. _regionAnchorY = value;
  75. }
  76. },
  77. "regionAnchorX": {
  78. enumerable: true,
  79. get: function() {
  80. return _regionAnchorX;
  81. },
  82. set: function(value) {
  83. if(!isValidPercentValue(value)) {
  84. throw new Error("RegionAnchorY must be between 0 and 100.");
  85. }
  86. _regionAnchorX = value;
  87. }
  88. },
  89. "viewportAnchorY": {
  90. enumerable: true,
  91. get: function() {
  92. return _viewportAnchorY;
  93. },
  94. set: function(value) {
  95. if (!isValidPercentValue(value)) {
  96. throw new Error("ViewportAnchorY must be between 0 and 100.");
  97. }
  98. _viewportAnchorY = value;
  99. }
  100. },
  101. "viewportAnchorX": {
  102. enumerable: true,
  103. get: function() {
  104. return _viewportAnchorX;
  105. },
  106. set: function(value) {
  107. if (!isValidPercentValue(value)) {
  108. throw new Error("ViewportAnchorX must be between 0 and 100.");
  109. }
  110. _viewportAnchorX = value;
  111. }
  112. },
  113. "scroll": {
  114. enumerable: true,
  115. get: function() {
  116. return _scroll;
  117. },
  118. set: function(value) {
  119. var setting = findScrollSetting(value);
  120. // Have to check for false as an empty string is a legal value.
  121. if (setting === false) {
  122. throw new SyntaxError("An invalid or illegal string was specified.");
  123. }
  124. _scroll = setting;
  125. }
  126. }
  127. });
  128. }
  129. root.VTTRegion = root.VTTRegion || VTTRegion;
  130. vttjs.VTTRegion = VTTRegion;
  131. }(this, (this.vttjs || {})));