position.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. /**
  2. * @fileoverview added by tsickle
  3. * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
  4. */
  5. /**
  6. * @record
  7. */
  8. export function IPosition() { }
  9. if (false) {
  10. /** @type {?} */
  11. IPosition.prototype.x;
  12. /** @type {?} */
  13. IPosition.prototype.y;
  14. }
  15. export class Position {
  16. /**
  17. * @param {?} x
  18. * @param {?} y
  19. */
  20. constructor(x, y) {
  21. this.x = x;
  22. this.y = y;
  23. }
  24. /**
  25. * @param {?} e
  26. * @param {?=} el
  27. * @return {?}
  28. */
  29. static fromEvent(e, el = null) {
  30. /**
  31. * Fix issue: Resize doesn't work on Windows10 IE11 (and on some windows 7 IE11)
  32. * https://github.com/xieziyu/angular2-draggable/issues/164
  33. * e instanceof MouseEvent check returns false on IE11
  34. */
  35. if (this.isMouseEvent(e)) {
  36. return new Position(e.clientX, e.clientY);
  37. }
  38. else {
  39. if (el === null || e.changedTouches.length === 1) {
  40. return new Position(e.changedTouches[0].clientX, e.changedTouches[0].clientY);
  41. }
  42. /**
  43. * Fix issue: Multiple phone draggables at the same time
  44. * https://github.com/xieziyu/angular2-draggable/issues/128
  45. */
  46. for (let i = 0; i < e.changedTouches.length; i++) {
  47. if (e.changedTouches[i].target === el) {
  48. return new Position(e.changedTouches[i].clientX, e.changedTouches[i].clientY);
  49. }
  50. }
  51. }
  52. }
  53. /**
  54. * @param {?} e
  55. * @return {?}
  56. */
  57. static isMouseEvent(e) {
  58. return Object.prototype.toString.apply(e).indexOf('MouseEvent') === 8;
  59. }
  60. /**
  61. * @param {?} obj
  62. * @return {?}
  63. */
  64. static isIPosition(obj) {
  65. return !!obj && ('x' in obj) && ('y' in obj);
  66. }
  67. /**
  68. * @param {?} el
  69. * @return {?}
  70. */
  71. static getCurrent(el) {
  72. /** @type {?} */
  73. let pos = new Position(0, 0);
  74. if (window) {
  75. /** @type {?} */
  76. const computed = window.getComputedStyle(el);
  77. if (computed) {
  78. /** @type {?} */
  79. let x = parseInt(computed.getPropertyValue('left'), 10);
  80. /** @type {?} */
  81. let y = parseInt(computed.getPropertyValue('top'), 10);
  82. pos.x = isNaN(x) ? 0 : x;
  83. pos.y = isNaN(y) ? 0 : y;
  84. }
  85. return pos;
  86. }
  87. else {
  88. console.error('Not Supported!');
  89. return null;
  90. }
  91. }
  92. /**
  93. * @param {?} p
  94. * @return {?}
  95. */
  96. static copy(p) {
  97. return new Position(0, 0).set(p);
  98. }
  99. /**
  100. * @return {?}
  101. */
  102. get value() {
  103. return { x: this.x, y: this.y };
  104. }
  105. /**
  106. * @template THIS
  107. * @this {THIS}
  108. * @param {?} p
  109. * @return {THIS}
  110. */
  111. add(p) {
  112. (/** @type {?} */ (this)).x += p.x;
  113. (/** @type {?} */ (this)).y += p.y;
  114. return (/** @type {?} */ (this));
  115. }
  116. /**
  117. * @template THIS
  118. * @this {THIS}
  119. * @param {?} p
  120. * @return {THIS}
  121. */
  122. subtract(p) {
  123. (/** @type {?} */ (this)).x -= p.x;
  124. (/** @type {?} */ (this)).y -= p.y;
  125. return (/** @type {?} */ (this));
  126. }
  127. /**
  128. * @param {?} n
  129. * @return {?}
  130. */
  131. multiply(n) {
  132. this.x *= n;
  133. this.y *= n;
  134. }
  135. /**
  136. * @param {?} n
  137. * @return {?}
  138. */
  139. divide(n) {
  140. this.x /= n;
  141. this.y /= n;
  142. }
  143. /**
  144. * @template THIS
  145. * @this {THIS}
  146. * @return {THIS}
  147. */
  148. reset() {
  149. (/** @type {?} */ (this)).x = 0;
  150. (/** @type {?} */ (this)).y = 0;
  151. return (/** @type {?} */ (this));
  152. }
  153. /**
  154. * @template THIS
  155. * @this {THIS}
  156. * @param {?} p
  157. * @return {THIS}
  158. */
  159. set(p) {
  160. (/** @type {?} */ (this)).x = p.x;
  161. (/** @type {?} */ (this)).y = p.y;
  162. return (/** @type {?} */ (this));
  163. }
  164. }
  165. if (false) {
  166. /** @type {?} */
  167. Position.prototype.x;
  168. /** @type {?} */
  169. Position.prototype.y;
  170. }
  171. //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zaXRpb24uanMiLCJzb3VyY2VSb290Ijoibmc6Ly9hbmd1bGFyMi1kcmFnZ2FibGUvIiwic291cmNlcyI6WyJsaWIvbW9kZWxzL3Bvc2l0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSwrQkFHQzs7O0lBRkMsc0JBQVU7O0lBQ1Ysc0JBQVU7O0FBR1osTUFBTSxPQUFPLFFBQVE7Ozs7O0lBQ25CLFlBQW1CLENBQVMsRUFBUyxDQUFTO1FBQTNCLE1BQUMsR0FBRCxDQUFDLENBQVE7UUFBUyxNQUFDLEdBQUQsQ0FBQyxDQUFRO0lBQUksQ0FBQzs7Ozs7O0lBRW5ELE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBMEIsRUFBRSxLQUFVLElBQUk7UUFDekQ7Ozs7V0FJRztRQUNILElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN4QixPQUFPLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzNDO2FBQU07WUFDTCxJQUFJLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUNoRCxPQUFPLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDL0U7WUFFRDs7O2VBR0c7WUFDSCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2hELElBQUksQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssRUFBRSxFQUFFO29CQUNyQyxPQUFPLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FB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QUFDOzs7Ozs7SUFFRCxLQUFLO1FBQ0gsbUJBQUEsSUFBSSxFQUFBLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNYLG1CQUFBLElBQUksRUFBQSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWCxPQUFPLG1CQUFBLElBQUksRUFBQSxDQUFDO0lBQ2QsQ0FBQzs7Ozs7OztJQUVELEdBQUcsQ0FBQyxDQUFZO1FBQ2QsbUJBQUEsSUFBSSxFQUFBLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDYixtQkFBQSxJQUFJLEVBQUEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNiLE9BQU8sbUJBQUEsSUFBSSxFQUFBLENBQUM7SUFDZCxDQUFDO0NBQ0Y7OztJQTlGYSxxQkFBZ0I7O0lBQUUscUJBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBJUG9zaXRpb24ge1xuICB4OiBudW1iZXI7XG4gIHk6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFBvc2l0aW9uIGltcGxlbWVudHMgSVBvc2l0aW9uIHtcbiAgY29uc3RydWN0b3IocHVibGljIHg6IG51bWJlciwgcHVibGljIHk6IG51bWJlcikgeyB9XG5cbiAgc3RhdGljIGZyb21FdmVudChlOiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCwgZWw6IGFueSA9IG51bGwpIHtcbiAgICAvKipcbiAgICAgKiBGaXggaXNzdWU6IFJlc2l6ZSBkb2Vzbid0IHdvcmsgb24gV2luZG93czEwIElFMTEgKGFuZCBvbiBzb21lIHdpbmRvd3MgNyBJRTExKVxuICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS94aWV6aXl1L2FuZ3VsYXIyLWRyYWdnYWJsZS9pc3N1ZXMvMTY0XG4gICAgICogZSBpbnN0YW5jZW9mIE1vdXNlRXZlbnQgY2hlY2sgcmV0dXJucyBmYWxzZSBvbiBJRTExXG4gICAgICovXG4gICAgaWYgKHRoaXMuaXNNb3VzZUV2ZW50KGUpKSB7XG4gICAgICByZXR1cm4gbmV3IFBvc2l0aW9uKGUuY2xpZW50WCwgZS5jbGllbnRZKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGVsID09PSBudWxsIHx8IGUuY2hhbmdlZFRvdWNoZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBuZXcgUG9zaXRpb24oZS5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRYLCBlLmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFkpO1xuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIEZpeCBpc3N1ZTogTXVsdGlwbGUgcGhvbmUgZHJhZ2dhYmxlcyBhdCB0aGUgc2FtZSB0aW1lXG4gICAgICAgKiBodHRwczovL2dpdGh1Yi5jb20veGlleml5dS9hbmd1bGFyMi1kcmFnZ2FibGUvaXNzdWVzLzEyOFxuICAgICAgICovXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGUuY2hhbmdlZFRvdWNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGUuY2hhbmdlZFRvdWNoZXNbaV0udGFyZ2V0ID09PSBlbCkge1xuICAgICAgICAgIHJldHVybiBuZXcgUG9zaXRpb24oZS5jaGFuZ2VkVG91Y2hlc1tpXS5jbGllbnRYLCBlLmNoYW5nZWRUb3VjaGVzW2ldLmNsaWVudFkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGlzTW91c2VFdmVudChlOiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCk6IGUgaXMgTW91c2VFdmVudCB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuYXBwbHkoZSkuaW5kZXhPZignTW91c2VFdmVudCcpID09PSA4O1xuICB9XG5cbiAgc3RhdGljIGlzSVBvc2l0aW9uKG9iaik6IG9iaiBpcyBJUG9zaXRpb24ge1xuICAgIHJldHVybiAhIW9iaiAmJiAoJ3gnIGluIG9iaikgJiYgKCd5JyBpbiBvYmopO1xuICB9XG5cbiAgc3RhdGljIGdldEN1cnJlbnQoZWw6IEVsZW1lbnQpIHtcbiAgICBsZXQgcG9zID0gbmV3IFBvc2l0aW9uKDAsIDApO1xuXG4gICAgaWYgKHdpbmRvdykge1xuICAgICAgY29uc3QgY29tcHV0ZWQgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCk7XG4gICAgICBpZiAoY29tcHV0ZWQpIHtcbiAgICAgICAgbGV0IHggPSBwYXJzZUludChjb21wdXRlZC5nZXRQcm9wZXJ0eVZhbHVlKCdsZWZ0JyksIDEwKTtcbiAgICAgICAgbGV0IHkgPSBwYXJzZUludChjb21wdXRlZC5nZXRQcm9wZXJ0eVZhbHVlKCd0b3AnKSwgMTApO1xuICAgICAgICBwb3MueCA9IGlzTmFOKHgpID8gMCA6IHg7XG4gICAgICAgIHBvcy55ID0gaXNOYU4oeSkgPyAwIDogeTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwb3M7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ05vdCBTdXBwb3J0ZWQhJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY29weShwOiBJUG9zaXRpb24pIHtcbiAgICByZXR1cm4gbmV3IFBvc2l0aW9uKDAsIDApLnNldChwKTtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBJUG9zaXRpb24ge1xuICAgIHJldHVybiB7IHg6IHRoaXMueCwgeTogdGhpcy55IH07XG4gIH1cblxuICBhZGQocDogSVBvc2l0aW9uKSB7XG4gICAgdGhpcy54ICs9IHAueDtcbiAgICB0aGlzLnkgKz0gcC55O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc3VidHJhY3QocDogSVBvc2l0aW9uKSB7XG4gICAgdGhpcy54IC09IHAueDtcbiAgICB0aGlzLnkgLT0gcC55O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgbXVsdGlwbHkobjogbnVtYmVyKSB7XG4gICAgdGhpcy54ICo9IG47XG4gICAgdGhpcy55ICo9IG47XG4gIH1cblxuICBkaXZpZGUobjogbnVtYmVyKSB7XG4gICAgdGhpcy54IC89IG47XG4gICAgdGhpcy55IC89IG47XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLnggPSAwO1xuICAgIHRoaXMueSA9IDA7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXQocDogSVBvc2l0aW9uKSB7XG4gICAgdGhpcy54ID0gcC54O1xuICAgIHRoaXMueSA9IHAueTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuIl19