position.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  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. var Position = /** @class */ (function () {
  16. function Position(x, y) {
  17. this.x = x;
  18. this.y = y;
  19. }
  20. /**
  21. * @param {?} e
  22. * @param {?=} el
  23. * @return {?}
  24. */
  25. Position.fromEvent = /**
  26. * @param {?} e
  27. * @param {?=} el
  28. * @return {?}
  29. */
  30. function (e, el) {
  31. if (el === void 0) { el = null; }
  32. /**
  33. * Fix issue: Resize doesn't work on Windows10 IE11 (and on some windows 7 IE11)
  34. * https://github.com/xieziyu/angular2-draggable/issues/164
  35. * e instanceof MouseEvent check returns false on IE11
  36. */
  37. if (this.isMouseEvent(e)) {
  38. return new Position(e.clientX, e.clientY);
  39. }
  40. else {
  41. if (el === null || e.changedTouches.length === 1) {
  42. return new Position(e.changedTouches[0].clientX, e.changedTouches[0].clientY);
  43. }
  44. /**
  45. * Fix issue: Multiple phone draggables at the same time
  46. * https://github.com/xieziyu/angular2-draggable/issues/128
  47. */
  48. for (var i = 0; i < e.changedTouches.length; i++) {
  49. if (e.changedTouches[i].target === el) {
  50. return new Position(e.changedTouches[i].clientX, e.changedTouches[i].clientY);
  51. }
  52. }
  53. }
  54. };
  55. /**
  56. * @param {?} e
  57. * @return {?}
  58. */
  59. Position.isMouseEvent = /**
  60. * @param {?} e
  61. * @return {?}
  62. */
  63. function (e) {
  64. return Object.prototype.toString.apply(e).indexOf('MouseEvent') === 8;
  65. };
  66. /**
  67. * @param {?} obj
  68. * @return {?}
  69. */
  70. Position.isIPosition = /**
  71. * @param {?} obj
  72. * @return {?}
  73. */
  74. function (obj) {
  75. return !!obj && ('x' in obj) && ('y' in obj);
  76. };
  77. /**
  78. * @param {?} el
  79. * @return {?}
  80. */
  81. Position.getCurrent = /**
  82. * @param {?} el
  83. * @return {?}
  84. */
  85. function (el) {
  86. /** @type {?} */
  87. var pos = new Position(0, 0);
  88. if (window) {
  89. /** @type {?} */
  90. var computed = window.getComputedStyle(el);
  91. if (computed) {
  92. /** @type {?} */
  93. var x = parseInt(computed.getPropertyValue('left'), 10);
  94. /** @type {?} */
  95. var y = parseInt(computed.getPropertyValue('top'), 10);
  96. pos.x = isNaN(x) ? 0 : x;
  97. pos.y = isNaN(y) ? 0 : y;
  98. }
  99. return pos;
  100. }
  101. else {
  102. console.error('Not Supported!');
  103. return null;
  104. }
  105. };
  106. /**
  107. * @param {?} p
  108. * @return {?}
  109. */
  110. Position.copy = /**
  111. * @param {?} p
  112. * @return {?}
  113. */
  114. function (p) {
  115. return new Position(0, 0).set(p);
  116. };
  117. Object.defineProperty(Position.prototype, "value", {
  118. get: /**
  119. * @return {?}
  120. */
  121. function () {
  122. return { x: this.x, y: this.y };
  123. },
  124. enumerable: true,
  125. configurable: true
  126. });
  127. /**
  128. * @template THIS
  129. * @this {THIS}
  130. * @param {?} p
  131. * @return {THIS}
  132. */
  133. Position.prototype.add = /**
  134. * @template THIS
  135. * @this {THIS}
  136. * @param {?} p
  137. * @return {THIS}
  138. */
  139. function (p) {
  140. (/** @type {?} */ (this)).x += p.x;
  141. (/** @type {?} */ (this)).y += p.y;
  142. return (/** @type {?} */ (this));
  143. };
  144. /**
  145. * @template THIS
  146. * @this {THIS}
  147. * @param {?} p
  148. * @return {THIS}
  149. */
  150. Position.prototype.subtract = /**
  151. * @template THIS
  152. * @this {THIS}
  153. * @param {?} p
  154. * @return {THIS}
  155. */
  156. function (p) {
  157. (/** @type {?} */ (this)).x -= p.x;
  158. (/** @type {?} */ (this)).y -= p.y;
  159. return (/** @type {?} */ (this));
  160. };
  161. /**
  162. * @param {?} n
  163. * @return {?}
  164. */
  165. Position.prototype.multiply = /**
  166. * @param {?} n
  167. * @return {?}
  168. */
  169. function (n) {
  170. this.x *= n;
  171. this.y *= n;
  172. };
  173. /**
  174. * @param {?} n
  175. * @return {?}
  176. */
  177. Position.prototype.divide = /**
  178. * @param {?} n
  179. * @return {?}
  180. */
  181. function (n) {
  182. this.x /= n;
  183. this.y /= n;
  184. };
  185. /**
  186. * @template THIS
  187. * @this {THIS}
  188. * @return {THIS}
  189. */
  190. Position.prototype.reset = /**
  191. * @template THIS
  192. * @this {THIS}
  193. * @return {THIS}
  194. */
  195. function () {
  196. (/** @type {?} */ (this)).x = 0;
  197. (/** @type {?} */ (this)).y = 0;
  198. return (/** @type {?} */ (this));
  199. };
  200. /**
  201. * @template THIS
  202. * @this {THIS}
  203. * @param {?} p
  204. * @return {THIS}
  205. */
  206. Position.prototype.set = /**
  207. * @template THIS
  208. * @this {THIS}
  209. * @param {?} p
  210. * @return {THIS}
  211. */
  212. function (p) {
  213. (/** @type {?} */ (this)).x = p.x;
  214. (/** @type {?} */ (this)).y = p.y;
  215. return (/** @type {?} */ (this));
  216. };
  217. return Position;
  218. }());
  219. export { Position };
  220. if (false) {
  221. /** @type {?} */
  222. Position.prototype.x;
  223. /** @type {?} */
  224. Position.prototype.y;
  225. }
  226. //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zaXRpb24uanMiLCJzb3VyY2VSb290Ijoibmc6Ly9hbmd1bGFyMi1kcmFnZ2FibGUvIiwic291cmNlcyI6WyJsaWIvbW9kZWxzL3Bvc2l0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSwrQkFHQzs7O0lBRkMsc0JBQVU7O0lBQ1Ysc0JBQVU7O0FBR1o7SUFDRSxrQkFBbUIsQ0FBUyxFQUFTLENBQVM7UUFBM0IsTUFBQyxHQUFELENBQUMsQ0FBUTtRQUFTLE1BQUMsR0FBRCxDQUFDLENBQVE7SUFBSSxDQUFDOzs7Ozs7SUFFNUMsa0JBQVM7Ozs7O0lBQWhCLFVBQWlCLENBQTBCLEVBQUUsRUFBYztRQUFkLG1CQUFBLEVBQUEsU0FBYztRQUN6RDs7OztXQUlHO1FBQ0gsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3hCLE9BQU8sSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDM0M7YUFBTTtZQUNMLElBQUksRUFBRSxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsY0FBYyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQ2hELE9BQU8sSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUMvRTtZQUVEOzs7ZUFHRztZQUNILEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDaEQsSUFBSSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUU7b0JBQ3JDLE9BQU8sSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFD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QUksQ0FBQyxDQUFDO1FBQ1osSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDZCxDQUFDOzs7Ozs7SUFFRCx3QkFBSzs7Ozs7SUFBTDtRQUNFLG1CQUFBLElBQUksRUFBQSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWCxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsT0FBTyxtQkFBQSxJQUFJLEVBQUEsQ0FBQztJQUNkLENBQUM7Ozs7Ozs7SUFFRCxzQkFBRzs7Ozs7O0lBQUgsVUFBSSxDQUFZO1FBQ2QsbUJBQUEsSUFBSSxFQUFBLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDYixtQkFBQSxJQUFJLEVBQUEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNiLE9BQU8sbUJBQUEsSUFBSSxFQUFBLENBQUM7SUFDZCxDQUFDO0lBQ0gsZUFBQztBQUFELENBQUMsQUEvRkQsSUErRkM7Ozs7SUE5RmEscUJBQWdCOztJQUFFLHFCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgSVBvc2l0aW9uIHtcbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBQb3NpdGlvbiBpbXBsZW1lbnRzIElQb3NpdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB4OiBudW1iZXIsIHB1YmxpYyB5OiBudW1iZXIpIHsgfVxuXG4gIHN0YXRpYyBmcm9tRXZlbnQoZTogTW91c2VFdmVudCB8IFRvdWNoRXZlbnQsIGVsOiBhbnkgPSBudWxsKSB7XG4gICAgLyoqXG4gICAgICogRml4IGlzc3VlOiBSZXNpemUgZG9lc24ndCB3b3JrIG9uIFdpbmRvd3MxMCBJRTExIChhbmQgb24gc29tZSB3aW5kb3dzIDcgSUUxMSlcbiAgICAgKiBodHRwczovL2dpdGh1Yi5jb20veGlleml5dS9hbmd1bGFyMi1kcmFnZ2FibGUvaXNzdWVzLzE2NFxuICAgICAqIGUgaW5zdGFuY2VvZiBNb3VzZUV2ZW50IGNoZWNrIHJldHVybnMgZmFsc2Ugb24gSUUxMVxuICAgICAqL1xuICAgIGlmICh0aGlzLmlzTW91c2VFdmVudChlKSkge1xuICAgICAgcmV0dXJuIG5ldyBQb3NpdGlvbihlLmNsaWVudFgsIGUuY2xpZW50WSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChlbCA9PT0gbnVsbCB8fCBlLmNoYW5nZWRUb3VjaGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gbmV3IFBvc2l0aW9uKGUuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WCwgZS5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZKTtcbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBGaXggaXNzdWU6IE11bHRpcGxlIHBob25lIGRyYWdnYWJsZXMgYXQgdGhlIHNhbWUgdGltZVxuICAgICAgICogaHR0cHM6Ly9naXRodWIuY29tL3hpZXppeXUvYW5ndWxhcjItZHJhZ2dhYmxlL2lzc3Vlcy8xMjhcbiAgICAgICAqL1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlLmNoYW5nZWRUb3VjaGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChlLmNoYW5nZWRUb3VjaGVzW2ldLnRhcmdldCA9PT0gZWwpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFBvc2l0aW9uKGUuY2hhbmdlZFRvdWNoZXNbaV0uY2xpZW50WCwgZS5jaGFuZ2VkVG91Y2hlc1tpXS5jbGllbnRZKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBpc01vdXNlRXZlbnQoZTogTW91c2VFdmVudCB8IFRvdWNoRXZlbnQpOiBlIGlzIE1vdXNlRXZlbnQge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KGUpLmluZGV4T2YoJ01vdXNlRXZlbnQnKSA9PT0gODtcbiAgfVxuXG4gIHN0YXRpYyBpc0lQb3NpdGlvbihvYmopOiBvYmogaXMgSVBvc2l0aW9uIHtcbiAgICByZXR1cm4gISFvYmogJiYgKCd4JyBpbiBvYmopICYmICgneScgaW4gb2JqKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRDdXJyZW50KGVsOiBFbGVtZW50KSB7XG4gICAgbGV0IHBvcyA9IG5ldyBQb3NpdGlvbigwLCAwKTtcblxuICAgIGlmICh3aW5kb3cpIHtcbiAgICAgIGNvbnN0IGNvbXB1dGVkID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpO1xuICAgICAgaWYgKGNvbXB1dGVkKSB7XG4gICAgICAgIGxldCB4ID0gcGFyc2VJbnQoY29tcHV0ZWQuZ2V0UHJvcGVydHlWYWx1ZSgnbGVmdCcpLCAxMCk7XG4gICAgICAgIGxldCB5ID0gcGFyc2VJbnQoY29tcHV0ZWQuZ2V0UHJvcGVydHlWYWx1ZSgndG9wJyksIDEwKTtcbiAgICAgICAgcG9zLnggPSBpc05hTih4KSA/IDAgOiB4O1xuICAgICAgICBwb3MueSA9IGlzTmFOKHkpID8gMCA6IHk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcG9zO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdOb3QgU3VwcG9ydGVkIScpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNvcHkocDogSVBvc2l0aW9uKSB7XG4gICAgcmV0dXJuIG5ldyBQb3NpdGlvbigwLCAwKS5zZXQocCk7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogSVBvc2l0aW9uIHtcbiAgICByZXR1cm4geyB4OiB0aGlzLngsIHk6IHRoaXMueSB9O1xuICB9XG5cbiAgYWRkKHA6IElQb3NpdGlvbikge1xuICAgIHRoaXMueCArPSBwLng7XG4gICAgdGhpcy55ICs9IHAueTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHN1YnRyYWN0KHA6IElQb3NpdGlvbikge1xuICAgIHRoaXMueCAtPSBwLng7XG4gICAgdGhpcy55IC09IHAueTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIG11bHRpcGx5KG46IG51bWJlcikge1xuICAgIHRoaXMueCAqPSBuO1xuICAgIHRoaXMueSAqPSBuO1xuICB9XG5cbiAgZGl2aWRlKG46IG51bWJlcikge1xuICAgIHRoaXMueCAvPSBuO1xuICAgIHRoaXMueSAvPSBuO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy54ID0gMDtcbiAgICB0aGlzLnkgPSAwO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc2V0KHA6IElQb3NpdGlvbikge1xuICAgIHRoaXMueCA9IHAueDtcbiAgICB0aGlzLnkgPSBwLnk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cbiJdfQ==