From 834d834a5b5bf6c9a11861bf15648bd8abc21497 Mon Sep 17 00:00:00 2001 From: Sammy Guergachi Date: Wed, 22 Feb 2017 12:32:23 -0500 Subject: [PATCH] Image zooming lib + Aurora page updated --- .../style.scssc | Bin 63437 -> 69809 bytes Images/Aurora/image1.png | Bin 0 -> 262933 bytes .../_convert-units.scssc | Bin 10146 -> 10643 bytes .../_directional-values.scssc | Bin 40283 -> 45236 bytes .../_font-source-declaration.scssc | Bin 0 -> 14295 bytes .../_modular-scale.scssc | Bin 17877 -> 18681 bytes .../style.scssc | Bin 63441 -> 69813 bytes css/style.css | 37 +- css/style.css.map | 2 +- css/style.scss | 41 +- index.html | 3 +- lib/zooming/build/zooming.js | 1231 +++++++++++++++++ lib/zooming/build/zooming.js.map | 1 + lib/zooming/build/zooming.min.js | 2 + lib/zooming/build/zooming.min.js.map | 1 + lib/zooming/scripts/build.js | 82 ++ lib/zooming/scripts/test.js | 3 + pages/auroraGameHub.html | 38 +- 18 files changed, 1423 insertions(+), 18 deletions(-) create mode 100644 Images/Aurora/image1.png create mode 100644 css/.sass-cache/6f6ca2875b64aec1bac4a093a8cd014e49532946/_font-source-declaration.scssc create mode 100644 lib/zooming/build/zooming.js create mode 100644 lib/zooming/build/zooming.js.map create mode 100644 lib/zooming/build/zooming.min.js create mode 100644 lib/zooming/build/zooming.min.js.map create mode 100644 lib/zooming/scripts/build.js create mode 100644 lib/zooming/scripts/test.js diff --git a/.sass-cache/eb7c39eaa1fd6c63ac0c0b33ae63b097ee84384d/style.scssc b/.sass-cache/eb7c39eaa1fd6c63ac0c0b33ae63b097ee84384d/style.scssc index 27bc25fc3bc010a4c6523a514aacd2d5361d72c8..c4308a3032d1f0a80f46c179c3d306466e722202 100644 GIT binary patch delta 13438 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 literal 0 HcmV?d00001 diff --git a/css/.sass-cache/6f6ca2875b64aec1bac4a093a8cd014e49532946/_convert-units.scssc b/css/.sass-cache/6f6ca2875b64aec1bac4a093a8cd014e49532946/_convert-units.scssc index 773d3975861c933b0e0a28de7cbd41dc70b551e3..81c560a2c1f2f8698431f26afc6eaa17cde1275c 100644 GIT binary patch literal 10643 zcmd^F+j85;5tW<`FCeLlElalLl_8qCS`sK*mMu(e1&%kaWwPsRS+X~^N)-)~LkYDc zh6{j{6_sl%52;k1@&);g{7pV0f3V$y!DT3dhAPU_>H*XMgL8U%8q+=9^JHgl=kXJD z{g8HO)3XLtJ@n{+ZYYgr+kC!D+qB)>d-D8g^|@&_st3*X{=wt@cGKK{deC^iQeTyw|Kni~5w&JheJ4huX(krr(cudda$7YKwjaV_t3HSB*Y&4q>ZX>_Grv316~jC4QN7?=9ncHO98ZAy z+So9=w5pd3)dn*2=f!f%7pdhUuKR$62)bWufk-WA(h?19@jU zmf7ggB3Y`H3t)r|>hL$`jlSK2p*NXBTUAxAqsqk{E1#RTD0fTrs=_iST=C?>h#CH1?v^q zWR-9g6^4{w0Oj8dRfMhixQZBAN0G>e&)e)qykwI+8UuPq0=+*5w3{AuNdhe=gJxDz z3tEvd*OD=_&C}GN8xp8wb+StHJ*#P^hSen4r(Q55t zQPX1K}{`(kUukWN^UMBw`1OGD)i~%3*nU3i(M^_+v?V4l#lrj0Q`0E%O zK=^mkH=P!3RUs%m>9B^`L1#WeidB3L5yvQ}mrsz2k;)XhdWA=ad|Fl*SuK(^@ZG*Q zOmNVzd2j^o(#mkTZW|CTK>z?lt8*~iGYHqMFMzYQ8Q6a8F-FnMu}4$Gub>!l8#8qMgWbU*dR> zhC}#wL6P0{-F+g%vc&K(4MX7V!%+zDpUANyajd7|h@8J*QFg;{AdzQN;?dIZWW^F2 zjzzQ+Id&zEy;K~+jfWhfoyf5-aU7)K2xA37lHU!2heQ@4vHT_tOAtGRBN4GgBF77f z~Z(m4K@ zq{o*0oXlI#>gf7w=5)=D^%vUu#_VPFS?pIAnH)$_=8dk|yON)T64WcYdXsH&ct)QGg$%;$*eUG z%)gvmFW7mIYBx%JqJvyJ>>juUz*Z_}GmjLiTtOv9rtbsqO9@MBZHhOm|_VguR)=X0V)5Xyr#bh z1&L3{!}7w)rEWv%&k7{6-`YRe?95hiSEat^do&OmWD{kHboo%Oo*5#mX9nykQV+J4 z?q0CB!W$eK$gl_8q*bJiPgg<$YK@c18W*Zs*FYo>o=m(M$wsaBO$niDQZ4NgN9%Y{IbwX($$4<~+}bP7DVM`>J11vd;WN9Ei^C6+t73l07$DM%6??I@An9)pTwJJ!Q7=b&kX|06 z2iSXF!Rd(_f7}jX*BNi}E!o|naovTHL`IG+9G7&0Ao!x~)?-HY_?9st2)s26OrA2bpC!*=JcL|v311YaI&cWNB!HkyGwNVSCVUBxiGZ~!XB`7G#lmGfEGDxnb`9Fvdw ztXKS1c1x|`mT5!1P*k-dG9bEI?tLh4spV!DuU&p!;Wtk4iWLd`wQRgn{ut8k{E^46 zP5yvm49@WX0e=w_sJzuR`7_8sViQt?_=71t{KZ{CnV>wpMy9K(3WcvN6)ID3>EdMt zTc>bAQQ*h2;X?5V$bq*#yfpD9zBo9;3-(6|_>YPAfgi3w3s+=^A0+48Jo%xk{AWGT zOrS2JfOv-0<{qoU`*01yO+1jLmgW8E!wWu?kMDQ*xS*HA_daUd?6?%^J_djycn{`h zLtXwtE&Fp-mMPu?s{i2QCEq!oMv#lQ;rJjdd+WZkVSs!z8$|i2@J%M1tQ%TeGw|6( NAEDn0*47tCKLcuK6F&d| literal 10146 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 U+%uUt-f$QOvNWs>Q#7pof6W5edjJ3c literal 40283 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 F^gkZegCGC^ diff --git a/css/.sass-cache/eb7c39eaa1fd6c63ac0c0b33ae63b097ee84384d/style.scssc b/css/.sass-cache/eb7c39eaa1fd6c63ac0c0b33ae63b097ee84384d/style.scssc index d533b9fe8253c343c6f99e7ba9603e90a1413c3c..396a049de4af26240f8ad398122c9cc9a1c073bb 100644 GIT binary patch delta 13062 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 Q67#|3_URaSb(!Y>0e^_c-2eap delta 9639 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 - + + Sammy Guergachi diff --git a/lib/zooming/build/zooming.js b/lib/zooming/build/zooming.js new file mode 100644 index 0000000..b67802a --- /dev/null +++ b/lib/zooming/build/zooming.js @@ -0,0 +1,1231 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global.Zooming = factory()); +}(this, (function () { 'use strict'; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { + return typeof obj; +} : function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; +}; + + + + + + + + + + + +var classCallCheck = function (instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +}; + +var createClass = function () { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; +}(); + + + + + + + +var _extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; +}; + +var get = function get(object, property, receiver) { + if (object === null) object = Function.prototype; + var desc = Object.getOwnPropertyDescriptor(object, property); + + if (desc === undefined) { + var parent = Object.getPrototypeOf(object); + + if (parent === null) { + return undefined; + } else { + return get(parent, property, receiver); + } + } else if ("value" in desc) { + return desc.value; + } else { + var getter = desc.get; + + if (getter === undefined) { + return undefined; + } + + return getter.call(receiver); + } +}; + + + + + + + + + + + + + + + + + +var set = function set(object, property, value, receiver) { + var desc = Object.getOwnPropertyDescriptor(object, property); + + if (desc === undefined) { + var parent = Object.getPrototypeOf(object); + + if (parent !== null) { + set(parent, property, value, receiver); + } + } else if ("value" in desc && desc.writable) { + desc.value = value; + } else { + var setter = desc.set; + + if (setter !== undefined) { + setter.call(receiver, value); + } + } + + return value; +}; + +var body = document.body; +var docElm = document.documentElement; +var isString = checkType('string'); +var isLink = checkTag('A'); +var webkitPrefix = 'WebkitAppearance' in docElm.style ? '-webkit-' : ''; + +function checkType(typeName) { + return function (el) { + return (typeof el === 'undefined' ? 'undefined' : _typeof(el)) === typeName; + }; +} + +function checkTag(tagName) { + return function (el) { + return el.tagName === tagName; + }; +} + +function getParents(el, match) { + var parents = []; + + for (; el && el !== document; el = el.parentNode) { + if (match) { + if (match(el)) { + parents.push(el); + } + } else { + parents.push(el); + } + } + + return parents; +} + +function isNotImage() { + return checkTag('IMG') === false; +} + +function loadImage(src, cb) { + if (!src) return; + + var img = new Image(); + img.onload = function () { + if (cb) cb(img); + }; + + img.src = src; +} + +function checkOriginalImage(el, cb) { + var srcOriginal = null; + + if (el.hasAttribute('data-original')) { + srcOriginal = el.getAttribute('data-original'); + } else if (isLink(el.parentNode)) { + srcOriginal = el.parentNode.getAttribute('href'); + } + + cb(srcOriginal); +} + +var trans = sniffTransition(document.createElement('div')); +var transformCssProp = trans.transformCssProp; +var transEndEvent = trans.transEndEvent; + +function checkTrans(styles) { + var transitionProp = trans.transitionProp; + var transformProp = trans.transformProp; + + var value = void 0; + if (styles.transition) { + value = styles.transition; + delete styles.transition; + styles[transitionProp] = value; + } + if (styles.transform) { + value = styles.transform; + delete styles.transform; + styles[transformProp] = value; + } +} + +function sniffTransition(el) { + var ret = {}; + var trans = ['webkitTransition', 'transition', 'mozTransition']; + var tform = ['webkitTransform', 'transform', 'mozTransform']; + var end = { + 'transition': 'transitionend', + 'mozTransition': 'transitionend', + 'webkitTransition': 'webkitTransitionEnd' + }; + + trans.some(function (prop) { + if (el.style[prop] !== undefined) { + ret.transitionProp = prop; + ret.transEndEvent = end[prop]; + return true; + } + }); + + tform.some(function (prop) { + if (el.style[prop] !== undefined) { + ret.transformProp = prop; + ret.transformCssProp = prop.replace(/(.*)Transform/, '-$1-transform'); + return true; + } + }); + + return ret; +} + +function divide(denominator) { + return function (numerator) { + return numerator / denominator; + }; +} + +var half = divide(2); + +var cursor = { + default: 'auto', + zoomIn: webkitPrefix + 'zoom-in', + zoomOut: webkitPrefix + 'zoom-out', + grab: webkitPrefix + 'grab', + move: 'move' +}; + +function toggleListener(el, type, handler, add) { + if (add) { + el.addEventListener(type, handler[type], { passive: false }); + } else { + el.removeEventListener(type, handler[type], { passive: false }); + } +} + +function getWindowCenter() { + var windowWidth = Math.min(docElm.clientWidth, window.innerWidth); + var windowHeight = Math.min(docElm.clientHeight, window.innerHeight); + + return { + x: half(windowWidth), + y: half(windowHeight) + }; +} + +function toggleGrabListeners(el, handler, add) { + ['mousedown', 'mousemove', 'mouseup', 'touchstart', 'touchmove', 'touchend'].forEach(function (type) { + toggleListener(el, type, handler, add); + }); +} + +function setStyle(el, styles, remember) { + checkTrans(styles); + + var s = el.style; + var original = {}; + + for (var key in styles) { + if (remember) original[key] = s[key] || ''; + s[key] = styles[key]; + } + + return original; +} + +function bindAll(_this, that) { + var methods = Object.getOwnPropertyNames(Object.getPrototypeOf(_this)); + + methods.forEach(function (method) { + _this[method] = _this[method].bind(that); + }); +} + +var overflowHiddenParents = { + + // Map from Element to its overflow:hidden parents + map: new Map(), + + // Map from parent to its original style + style: new Map(), + + disable: disableOverflowHiddenParents, + enable: enableOverflowHiddenParents +}; + +function isOverflowHidden(el) { + return getComputedStyle(el).overflow === 'hidden'; +} + +function getOverflowHiddenParents(el) { + if (overflowHiddenParents.map.has(el)) { + return overflowHiddenParents.map.get(el); + } else { + var parents = getParents(el.parentNode, isOverflowHidden); + overflowHiddenParents.map.set(el, parents); + return parents; + } +} + +function disableOverflowHiddenParents(el) { + getOverflowHiddenParents(el).forEach(function (parent) { + if (overflowHiddenParents.style.has(parent)) { + setStyle(parent, { + overflow: 'visible' + }); + } else { + overflowHiddenParents.style.set(parent, setStyle(parent, { + overflow: 'visible' + }, true)); + } + }); +} + +function enableOverflowHiddenParents(el) { + if (overflowHiddenParents.map.has(el)) { + overflowHiddenParents.map.get(el).forEach(function (parent) { + setStyle(parent, overflowHiddenParents.style.get(parent)); + }); + } +} + +var PRESS_DELAY = 200; +var MULTITOUCH_SCALE_FACTOR = 2; + +var EventHandler = function () { + function EventHandler(instance) { + classCallCheck(this, EventHandler); + + bindAll(this, instance); + } + + createClass(EventHandler, [{ + key: 'click', + value: function click(e) { + e.preventDefault(); + + if (this.shown) { + if (this.released) this.close();else this.release(); + } else { + this.open(e.currentTarget); + } + } + }, { + key: 'scroll', + value: function scroll() { + var scrollTop = window.pageYOffset || (docElm || body.parentNode || body).scrollTop; + + if (this.lastScrollPosition === null) { + this.lastScrollPosition = scrollTop; + } + + var deltaY = this.lastScrollPosition - scrollTop; + + if (Math.abs(deltaY) >= this.options.scrollThreshold) { + this.lastScrollPosition = null; + this.close(); + } + } + }, { + key: 'keydown', + value: function keydown(e) { + var _this = this; + + if (isEscape(e)) { + if (this.released) this.close();else this.release(function () { + return _this.close(); + }); + } + } + }, { + key: 'mousedown', + value: function mousedown(e) { + var _this2 = this; + + if (isNotLeftButton(e)) return; + e.preventDefault(); + + this.pressTimer = setTimeout(function () { + _this2.grab(e.clientX, e.clientY); + }, PRESS_DELAY); + } + }, { + key: 'mousemove', + value: function mousemove(e) { + if (this.released) return; + this.move(e.clientX, e.clientY); + } + }, { + key: 'mouseup', + value: function mouseup(e) { + if (isNotLeftButton(e)) return; + clearTimeout(this.pressTimer); + + if (this.released) this.close();else this.release(); + } + }, { + key: 'touchstart', + value: function touchstart(e) { + var _this3 = this; + + e.preventDefault(); + + this.pressTimer = setTimeout(function () { + processTouches(e.touches, _this3.options.scaleExtra, function (x, y, scaleExtra) { + _this3.grab(x, y, scaleExtra); + }); + }, PRESS_DELAY); + } + }, { + key: 'touchmove', + value: function touchmove(e) { + var _this4 = this; + + if (this.released) return; + + processTouches(e.touches, this.options.scaleExtra, function (x, y, scaleExtra) { + _this4.move(x, y, scaleExtra); + }); + } + }, { + key: 'touchend', + value: function touchend(e) { + if (isTouching(e)) return; + clearTimeout(this.pressTimer); + + if (this.released) this.close();else this.release(); + } + }]); + return EventHandler; +}(); + +function isNotLeftButton(event) { + return event.button !== 0; +} + +function isEscape(event) { + var code = event.key || event.code; + return code === 'Escape' || event.keyCode === 27; +} + +function isTouching(event) { + return event.targetTouches.length > 0; +} + +function processTouches(touches, currScaleExtra, cb) { + var total = touches.length; + var firstTouch = touches[0]; + var multitouch = total > 1; + + var scaleExtra = currScaleExtra; + var i = touches.length; + var xs = 0, + ys = 0; + + // keep track of the min and max of touch positions + + var min = { x: firstTouch.clientX, y: firstTouch.clientY }; + var max = { x: firstTouch.clientX, y: firstTouch.clientY }; + + while (i--) { + var t = touches[i]; + var _ref = [t.clientX, t.clientY], + x = _ref[0], + y = _ref[1]; + + xs += x; + ys += y; + + if (!multitouch) continue; + + if (x < min.x) { + min.x = x; + } else if (x > max.x) { + max.x = x; + } + + if (y < min.y) { + min.y = y; + } else if (y > max.y) { + max.y = y; + } + } + + if (multitouch) { + // change scaleExtra dynamically + var distX = max.x - min.x, + distY = max.y - min.y; + + + if (distX > distY) { + scaleExtra = distX / window.innerWidth * MULTITOUCH_SCALE_FACTOR; + } else { + scaleExtra = distY / window.innerHeight * MULTITOUCH_SCALE_FACTOR; + } + } + + cb(xs / total, ys / total, scaleExtra); +} + +var Overlay = function () { + function Overlay(el, instance) { + classCallCheck(this, Overlay); + + this.el = el; + this.instance = instance; + this.parent = document.body; + } + + createClass(Overlay, [{ + key: 'init', + value: function init(options) { + var _this = this; + + setStyle(this.el, { + zIndex: 998, + backgroundColor: options.bgColor, + position: 'fixed', + top: 0, + left: 0, + right: 0, + bottom: 0, + opacity: 0, + transition: 'opacity\n ' + options.transitionDuration + 's\n ' + options.transitionTimingFunction + }); + + this.el.addEventListener('click', function () { + return _this.instance.close(); + }); + } + }, { + key: 'updateStyle', + value: function updateStyle(options) { + setStyle(this.el, { + backgroundColor: options.bgColor, + transition: 'opacity\n ' + options.transitionDuration + 's\n ' + options.transitionTimingFunction + }); + } + }, { + key: 'insert', + value: function insert() { + this.parent.appendChild(this.el); + } + }, { + key: 'remove', + value: function remove() { + this.parent.removeChild(this.el); + } + }, { + key: 'show', + value: function show() { + var _this2 = this; + + setTimeout(function () { + return _this2.el.style.opacity = _this2.instance.options.bgOpacity; + }, 30); + } + }, { + key: 'hide', + value: function hide() { + this.el.style.opacity = 0; + } + }]); + return Overlay; +}(); + +var Target = function () { + function Target(el, instance) { + classCallCheck(this, Target); + + this.el = el; + this.instance = instance; + this.translate = null; + this.scale = null; + this.srcThumbnail = this.el.getAttribute('src'); + this.style = { + open: null, + close: null + }; + } + + createClass(Target, [{ + key: 'zoomIn', + value: function zoomIn() { + var options = this.instance.options; + var rect = this.el.getBoundingClientRect(); + + // Remove overflow:hidden from target's parent nodes if any. It prevents + // parent nodes from hiding the target after zooming in + overflowHiddenParents.disable(this.el); + + this.translate = calculateTranslate(rect); + this.scale = calculateScale(rect, options.scaleBase, options.customSize); + + // force layout update + this.el.offsetWidth; + + this.style.open = { + position: 'relative', + zIndex: 999, + cursor: options.enableGrab ? cursor.grab : cursor.zoomOut, + transition: transformCssProp + '\n ' + options.transitionDuration + 's\n ' + options.transitionTimingFunction, + transform: 'translate(' + this.translate.x + 'px, ' + this.translate.y + 'px)\n scale(' + this.scale.x + ',' + this.scale.y + ')', + width: rect.width + 'px', + height: rect.height + 'px' + }; + + // trigger transition + this.style.close = setStyle(this.el, this.style.open, true); + } + }, { + key: 'zoomOut', + value: function zoomOut() { + // Restore overflow:hidden to target's parent nodes if any + overflowHiddenParents.enable(this.el); + + // force layout update + this.el.offsetWidth; + + setStyle(this.el, { transform: 'none' }); + } + }, { + key: 'grab', + value: function grab(x, y, scaleExtra) { + var windowCenter = getWindowCenter(); + var dx = windowCenter.x - x, + dy = windowCenter.y - y; + + + setStyle(this.el, { + cursor: cursor.move, + transform: 'translate(\n ' + (this.translate.x + dx) + 'px, ' + (this.translate.y + dy) + 'px)\n scale(' + (this.scale.x + scaleExtra) + ',' + (this.scale.y + scaleExtra) + ')' + }); + } + }, { + key: 'move', + value: function move(x, y, scaleExtra) { + var windowCenter = getWindowCenter(); + var dx = windowCenter.x - x, + dy = windowCenter.y - y; + + + setStyle(this.el, { + transition: transformCssProp, + transform: 'translate(\n ' + (this.translate.x + dx) + 'px, ' + (this.translate.y + dy) + 'px)\n scale(' + (this.scale.x + scaleExtra) + ',' + (this.scale.y + scaleExtra) + ')' + }); + } + }, { + key: 'restoreCloseStyle', + value: function restoreCloseStyle() { + setStyle(this.el, this.style.close); + } + }, { + key: 'restoreOpenStyle', + value: function restoreOpenStyle() { + setStyle(this.el, this.style.open); + } + }, { + key: 'upgradeSource', + value: function upgradeSource(srcOriginal) { + var _this = this; + + if (!srcOriginal) return; + + var parentNode = this.el.parentNode; + var temp = this.el.cloneNode(false); + + // force compute the hi-res image in DOM to prevent + // image flickering while updating src + temp.setAttribute('src', srcOriginal); + temp.style.position = 'fixed'; + temp.style.visibility = 'hidden'; + parentNode.appendChild(temp); + + setTimeout(function () { + _this.el.setAttribute('src', srcOriginal); + parentNode.removeChild(temp); + }, 100); + } + }, { + key: 'downgradeSource', + value: function downgradeSource(srcOriginal) { + if (!srcOriginal) return; + + this.el.setAttribute('src', this.srcThumbnail); + } + }]); + return Target; +}(); + +function calculateTranslate(rect) { + var windowCenter = getWindowCenter(); + var targetCenter = { + x: rect.left + half(rect.width), + y: rect.top + half(rect.height) + }; + + // The vector to translate image to the window center + return { + x: windowCenter.x - targetCenter.x, + y: windowCenter.y - targetCenter.y + }; +} + +function calculateScale(rect, scaleBase, customSize) { + if (customSize) { + return { + x: customSize.width / rect.width, + y: customSize.height / rect.height + }; + } else { + var targetHalfWidth = half(rect.width); + var targetHalfHeight = half(rect.height); + var windowCenter = getWindowCenter(); + + // The distance between target edge and window edge + var targetEdgeToWindowEdge = { + x: windowCenter.x - targetHalfWidth, + y: windowCenter.y - targetHalfHeight + }; + + var scaleHorizontally = targetEdgeToWindowEdge.x / targetHalfWidth; + var scaleVertically = targetEdgeToWindowEdge.y / targetHalfHeight; + + // The additional scale is based on the smaller value of + // scaling horizontally and scaling vertically + var scale = scaleBase + Math.min(scaleHorizontally, scaleVertically); + + return { + x: scale, + y: scale + }; + } +} + +/** + * A list of options. + * + * @type {Object} + * @example + * // Default options + * var options = { + * defaultZoomable: 'img[data-action="zoom"]', + * enableGrab: true, + * preloadImage: true, + * transitionDuration: 0.4, + * transitionTimingFunction: 'cubic-bezier(0.4, 0, 0, 1)', + * bgColor: 'rgb(255, 255, 255)', + * bgOpacity: 1, + * scaleBase: 1.0, + * scaleExtra: 0.5, + * scrollThreshold: 40, + * customSize: null, + * onOpen: null, + * onClose: null, + * onRelease: null, + * onBeforeOpen: null, + * onBeforeClose: null, + * onBeforeGrab: null, + * onBeforeMove: null, + * onBeforeRelease: null + * } + */ +var OPTIONS = { + /** + * Zoomable elements by default. It can be a css selector or an element. + * @type {string|Element} + */ + defaultZoomable: 'img[data-action="zoom"]', + + /** + * To be able to grab and drag the image for extra zoom-in. + * @type {boolean} + */ + enableGrab: true, + + /** + * Preload images with attribute "data-original". + * @type {boolean} + */ + preloadImage: true, + + /** + * Transition duration in seconds. + * @type {number} + */ + transitionDuration: 0.4, + + /** + * Transition timing function. + * @type {string} + */ + transitionTimingFunction: 'cubic-bezier(0.4, 0, 0, 1)', + + /** + * Overlay background color. + * @type {string} + */ + bgColor: 'rgb(255, 255, 255)', + + /** + * Overlay background opacity. + * @type {number} + */ + bgOpacity: 1, + + /** + * The base scale factor for zooming. By default scale to fit the window. + * @type {number} + */ + scaleBase: 1.0, + + /** + * The extra scale factor when grabbing the image. + * @type {number} + */ + scaleExtra: 0.5, + + /** + * How much scrolling it takes before closing out. + * @type {number} + */ + scrollThreshold: 40, + + /** + * Scale (zoom in) to given width and height. Ignore scaleBase if set. + * @type {Object} + * @example + * customSize: { width: 800, height: 400 } + */ + customSize: null, + + /** + * A callback function that will be called when a target is opened and + * transition has ended. It will get the target element as the argument. + * @type {Function} + */ + onOpen: null, + + /** + * Same as above, except fired when closed. + * @type {Function} + */ + onClose: null, + + /** + * Same as above, except fired when released. + * @type {Function} + */ + onRelease: null, + + /** + * A callback function that will be called before open. + * @type {Function} + */ + onBeforeOpen: null, + + /** + * A callback function that will be called before close. + * @type {Function} + */ + onBeforeClose: null, + + /** + * A callback function that will be called before grab. + * @type {Function} + */ + onBeforeGrab: null, + + /** + * A callback function that will be called before move. + * @type {Function} + */ + onBeforeMove: null, + + /** + * A callback function that will be called before release. + * @type {Function} + */ + onBeforeRelease: null +}; + +var Zooming$1 = function () { + + /** + * @param {Object} [options] Update default options if provided. + */ + function Zooming(options) { + classCallCheck(this, Zooming); + + + // elements + this.target = null; + this.overlay = new Overlay(document.createElement('div'), this); + this.eventHandler = new EventHandler(this); + this.body = document.body; + + // state + this.shown = false; // target is open + this.lock = false; // target is in transform + this.released = true; // mouse/finger is not pressing down + this.lastScrollPosition = null; + this.pressTimer = null; + + // init + this.options = _extends({}, OPTIONS); + this.config(options); + this.listen(this.options.defaultZoomable); + this.overlay.init(this.options); + } + + /** + * Make element(s) zoomable. + * @param {string|Element} el A css selector or an Element. + * @return {this} + */ + + + createClass(Zooming, [{ + key: 'listen', + value: function listen(el) { + if (isString(el)) { + var els = document.querySelectorAll(el), + i = els.length; + + while (i--) { + this.listen(els[i]); + } + + return this; + } + + if (isNotImage(el)) return; + + el.style.cursor = cursor.zoomIn; + el.addEventListener('click', this.eventHandler.click, { passive: false }); + + if (this.options.preloadImage) { + checkOriginalImage(el, loadImage); + } + + return this; + } + + /** + * Update options. + * @param {Object} options An Object that contains this.options. + * @return {this} + */ + + }, { + key: 'config', + value: function config(options) { + if (!options) return this.options; + + _extends(this.options, options); + this.overlay.updateStyle(this.options); + + return this; + } + + /** + * Open (zoom in) the Element. + * @param {Element} el The Element to open. + * @param {Function} [cb=this.options.onOpen] A callback function that will + * be called when a target is opened and transition has ended. It will get + * the target element as the argument. + * @return {this} + */ + + }, { + key: 'open', + value: function open(el) { + var _this = this; + + var cb = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.options.onOpen; + + if (this.shown || this.lock) return; + + var target = isString(el) ? document.querySelector(el) : el; + + if (isNotImage(target)) return; + + // onBeforeOpen event + if (this.options.onBeforeOpen) this.options.onBeforeOpen(target); + + if (!this.options.preloadImage) { + checkOriginalImage(target, loadImage); + } + + this.target = new Target(target, this); + + this.shown = true; + this.lock = true; + + this.target.zoomIn(); + this.overlay.insert(); + this.overlay.show(); + + document.addEventListener('scroll', this.eventHandler.scroll); + document.addEventListener('keydown', this.eventHandler.keydown); + + var onEnd = function onEnd() { + target.removeEventListener(transEndEvent, onEnd); + + _this.lock = false; + + checkOriginalImage(target, function (srcOriginal) { + return _this.target.upgradeSource(srcOriginal); + }); + + if (_this.options.enableGrab) { + toggleGrabListeners(document, _this.eventHandler, true); + } + + if (cb) cb(target); + }; + + target.addEventListener(transEndEvent, onEnd); + + return this; + } + + /** + * Close (zoom out) the Element currently opened. + * @param {Function} [cb=this.options.onClose] A callback function that will + * be called when a target is closed and transition has ended. It will get + * the target element as the argument. + * @return {this} + */ + + }, { + key: 'close', + value: function close() { + var _this2 = this; + + var cb = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.options.onClose; + + if (!this.shown || this.lock) return; + + var target = this.target.el; + + // onBeforeClose event + if (this.options.onBeforeClose) this.options.onBeforeClose(target); + + this.lock = true; + + this.body.style.cursor = cursor.default; + this.overlay.hide(); + this.target.zoomOut(); + + document.removeEventListener('scroll', this.eventHandler.scroll); + document.removeEventListener('keydown', this.eventHandler.keydown); + + var onEnd = function onEnd() { + target.removeEventListener(transEndEvent, onEnd); + + _this2.shown = false; + _this2.lock = false; + + checkOriginalImage(target, function (srcOriginal) { + return _this2.target.downgradeSource(srcOriginal); + }); + + if (_this2.options.enableGrab) { + toggleGrabListeners(document, _this2.eventHandler, false); + } + + _this2.target.restoreCloseStyle(); + _this2.overlay.remove(); + + if (cb) cb(target); + }; + + target.addEventListener(transEndEvent, onEnd); + + return this; + } + + /** + * Grab the Element currently opened given a position and apply extra zoom-in. + * @param {number} x The X-axis of where the press happened. + * @param {number} y The Y-axis of where the press happened. + * @param {number} scaleExtra Extra zoom-in to apply. + * @param {Function} [cb=this.options.scaleExtra] A callback function that + * will be called when a target is grabbed and transition has ended. It + * will get the target element as the argument. + * @return {this} + */ + + }, { + key: 'grab', + value: function grab(x, y) { + var scaleExtra = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.options.scaleExtra; + var cb = arguments[3]; + + if (!this.shown || this.lock) return; + + var target = this.target.el; + + // onBeforeGrab event + if (this.options.onBeforeGrab) this.options.onBeforeGrab(target); + + this.released = false; + this.target.grab(x, y, scaleExtra); + + var onEnd = function onEnd() { + target.removeEventListener(transEndEvent, onEnd); + if (cb) cb(target); + }; + + target.addEventListener(transEndEvent, onEnd); + } + + /** + * Move the Element currently grabbed given a position and apply extra zoom-in. + * @param {number} x The X-axis of where the press happened. + * @param {number} y The Y-axis of where the press happened. + * @param {number} scaleExtra Extra zoom-in to apply. + * @param {Function} [cb=this.options.scaleExtra] A callback function that + * will be called when a target is moved and transition has ended. It will + * get the target element as the argument. + * @return {this} + */ + + }, { + key: 'move', + value: function move(x, y) { + var scaleExtra = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.options.scaleExtra; + var cb = arguments[3]; + + if (!this.shown || this.lock) return; + + var target = this.target.el; + + // onBeforeMove event + if (this.options.onBeforeMove) this.options.onBeforeMove(target); + + this.released = false; + + this.target.move(x, y, scaleExtra); + this.body.style.cursor = cursor.move; + + var onEnd = function onEnd() { + target.removeEventListener(transEndEvent, onEnd); + if (cb) cb(target); + }; + + target.addEventListener(transEndEvent, onEnd); + } + + /** + * Release the Element currently grabbed. + * @param {Function} [cb=this.options.onRelease] A callback function that + * will be called when a target is released and transition has ended. It + * will get the target element as the argument. + * @return {this} + */ + + }, { + key: 'release', + value: function release() { + var _this3 = this; + + var cb = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.options.onRelease; + + if (!this.shown || this.lock) return; + + var target = this.target.el; + + // onBeforeRelease event + if (this.options.onBeforeRelease) this.options.onBeforeRelease(target); + + this.lock = true; + + this.target.restoreOpenStyle(); + this.body.style.cursor = cursor.default; + + var onEnd = function onEnd() { + target.removeEventListener(transEndEvent, onEnd); + + _this3.lock = false; + _this3.released = true; + + if (cb) cb(target); + }; + + target.addEventListener(transEndEvent, onEnd); + + return this; + } + }]); + return Zooming; +}(); + +document.addEventListener('DOMContentLoaded', function () { + new Zooming$1(); +}); + +return Zooming$1; + +}))); +//# sourceMappingURL=zooming.js.map diff --git a/lib/zooming/build/zooming.js.map b/lib/zooming/build/zooming.js.map new file mode 100644 index 0000000..13f8f3a --- /dev/null +++ b/lib/zooming/build/zooming.js.map @@ -0,0 +1 @@ +{"version":3,"file":null,"sources":["../src/util/_dom.js","../src/util/_image.js","../src/util/_trans.js","../src/util/_math.js","../src/util/_helpers.js","../src/EventHandler.js","../src/Overlay.js","../src/Target.js","../src/_options.js","../src/Zooming.js","../src/main.js"],"sourcesContent":["export const body = document.body\nexport const docElm = document.documentElement\nexport const isString = checkType('string')\nexport const isLink = checkTag('A')\nexport const webkitPrefix = 'WebkitAppearance' in docElm.style\n ? '-webkit-'\n : ''\n\nexport function checkType (typeName) {\n return function (el) {\n return typeof el === typeName\n }\n}\n\nexport function checkTag (tagName) {\n return function (el) {\n return el.tagName === tagName\n }\n}\n\nexport function getParents (el, match) {\n let parents = []\n\n for (; el && el !== document; el = el.parentNode) {\n if (match) {\n if (match(el)) {\n parents.push(el)\n }\n } else {\n parents.push(el)\n }\n }\n\n return parents\n}\n","import { checkTag, isLink } from './_dom'\n\nexport function isNotImage () {\n return checkTag('IMG') === false\n}\n\nexport function loadImage (src, cb) {\n if (!src) return\n\n const img = new Image()\n img.onload = function () {\n if (cb) cb(img)\n }\n \n img.src = src\n}\n\nexport function checkOriginalImage (el, cb) {\n let srcOriginal = null\n\n if (el.hasAttribute('data-original')) {\n srcOriginal = el.getAttribute('data-original')\n } else if (isLink(el.parentNode)) {\n srcOriginal = el.parentNode.getAttribute('href')\n }\n\n cb(srcOriginal)\n}\n","const trans = sniffTransition(document.createElement('div'))\nexport const transformCssProp = trans.transformCssProp\nexport const transEndEvent = trans.transEndEvent\n\nexport function checkTrans (styles) {\n const transitionProp = trans.transitionProp\n const transformProp = trans.transformProp\n\n let value\n if (styles.transition) {\n value = styles.transition\n delete styles.transition\n styles[transitionProp] = value\n }\n if (styles.transform) {\n value = styles.transform\n delete styles.transform\n styles[transformProp] = value\n }\n}\n\nexport function sniffTransition (el) {\n let ret = {}\n const trans = ['webkitTransition', 'transition', 'mozTransition']\n const tform = ['webkitTransform', 'transform', 'mozTransform']\n const end = {\n 'transition' : 'transitionend',\n 'mozTransition' : 'transitionend',\n 'webkitTransition' : 'webkitTransitionEnd'\n }\n\n trans.some(prop => {\n if (el.style[prop] !== undefined) {\n ret.transitionProp = prop\n ret.transEndEvent = end[prop]\n return true\n }\n })\n\n tform.some(prop => {\n if (el.style[prop] !== undefined) {\n ret.transformProp = prop\n ret.transformCssProp = prop.replace(/(.*)Transform/, '-$1-transform')\n return true\n }\n })\n\n return ret\n}\n","function divide (denominator) {\n return (numerator) => {\n return numerator / denominator\n }\n}\n\nexport const half = divide(2)\n","import { docElm, webkitPrefix, getParents } from './_dom'\nimport { checkTrans } from './_trans'\nimport { half } from './_math'\n\nexport const cursor = {\n default: 'auto',\n zoomIn: `${webkitPrefix}zoom-in`,\n zoomOut: `${webkitPrefix}zoom-out`,\n grab: `${webkitPrefix}grab`,\n move: 'move'\n}\n\nexport function toggleListener (el, type, handler, add) {\n if (add) {\n el.addEventListener(type, handler[type], { passive: false })\n } else {\n el.removeEventListener(type, handler[type], { passive: false })\n }\n}\n\nexport function getWindowCenter () {\n const windowWidth = Math.min(docElm.clientWidth, window.innerWidth)\n const windowHeight = Math.min(docElm.clientHeight, window.innerHeight)\n\n return {\n x: half(windowWidth),\n y: half(windowHeight)\n }\n}\n\nexport function toggleGrabListeners (el, handler, add) {\n ['mousedown', 'mousemove', 'mouseup','touchstart', 'touchmove', 'touchend']\n .forEach(type => {\n toggleListener(el, type, handler, add)\n })\n}\n\nexport function setStyle (el, styles, remember) {\n checkTrans(styles)\n\n let s = el.style\n let original = {}\n\n for (let key in styles) {\n if (remember) original[key] = s[key] || ''\n s[key] = styles[key]\n }\n\n return original\n}\n\nexport function bindAll (_this, that) {\n const methods = (\n Object.getOwnPropertyNames(\n Object.getPrototypeOf(_this)\n )\n )\n\n methods.forEach(method => {\n _this[method] = _this[method].bind(that)\n })\n}\n\nexport const overflowHiddenParents = {\n\n // Map from Element to its overflow:hidden parents\n map: new Map(),\n\n // Map from parent to its original style\n style: new Map(),\n\n disable: disableOverflowHiddenParents,\n enable: enableOverflowHiddenParents\n}\n\nfunction isOverflowHidden (el) {\n return getComputedStyle(el).overflow === 'hidden'\n}\n\nfunction getOverflowHiddenParents (el) {\n if (overflowHiddenParents.map.has(el)) {\n return overflowHiddenParents.map.get(el)\n } else {\n const parents = getParents(el.parentNode, isOverflowHidden)\n overflowHiddenParents.map.set(el, parents)\n return parents\n }\n}\n\nfunction disableOverflowHiddenParents (el) {\n getOverflowHiddenParents(el).forEach(parent => {\n if (overflowHiddenParents.style.has(parent)) {\n setStyle(parent, {\n overflow: 'visible'\n })\n } else {\n overflowHiddenParents.style.set(parent, setStyle(parent, {\n overflow: 'visible'\n }, true))\n }\n })\n}\n\nfunction enableOverflowHiddenParents (el) {\n if (overflowHiddenParents.map.has(el)) {\n overflowHiddenParents.map.get(el).forEach(parent => {\n setStyle(parent, overflowHiddenParents.style.get(parent))\n })\n }\n}\n","import { docElm, body } from './util/_dom'\nimport { bindAll } from './util/_helpers'\n\nconst PRESS_DELAY = 200\nconst MULTITOUCH_SCALE_FACTOR = 2\n\nexport default class EventHandler {\n\n constructor (instance) {\n bindAll(this, instance)\n }\n\n click (e) {\n e.preventDefault()\n\n if (this.shown) {\n if (this.released) this.close()\n else this.release()\n } else {\n this.open(e.currentTarget)\n }\n }\n\n scroll () {\n const scrollTop = window.pageYOffset ||\n (docElm || body.parentNode || body).scrollTop\n\n if (this.lastScrollPosition === null) {\n this.lastScrollPosition = scrollTop\n }\n\n const deltaY = this.lastScrollPosition - scrollTop\n\n if (Math.abs(deltaY) >= this.options.scrollThreshold) {\n this.lastScrollPosition = null\n this.close()\n }\n }\n\n keydown (e) {\n if (isEscape(e)) {\n if (this.released) this.close()\n else this.release(() => this.close())\n }\n }\n\n mousedown (e) {\n if (isNotLeftButton(e)) return\n e.preventDefault()\n\n this.pressTimer = setTimeout(() => {\n this.grab(e.clientX, e.clientY)\n }, PRESS_DELAY)\n }\n\n mousemove (e) {\n if (this.released) return\n this.move(e.clientX, e.clientY)\n }\n\n mouseup (e) {\n if (isNotLeftButton(e)) return\n clearTimeout(this.pressTimer)\n\n if (this.released) this.close()\n else this.release()\n }\n\n touchstart (e) {\n e.preventDefault()\n\n this.pressTimer = setTimeout(() => {\n processTouches(e.touches, this.options.scaleExtra,\n (x, y, scaleExtra) => {\n this.grab(x, y, scaleExtra)\n })\n }, PRESS_DELAY)\n }\n\n touchmove (e) {\n if (this.released) return\n\n processTouches(e.touches, this.options.scaleExtra,\n (x, y, scaleExtra) => {\n this.move(x, y, scaleExtra)\n })\n }\n\n touchend (e) {\n if (isTouching(e)) return\n clearTimeout(this.pressTimer)\n\n if (this.released) this.close()\n else this.release()\n }\n}\n\nfunction isNotLeftButton (event) {\n return event.button !== 0\n}\n\nfunction isEscape (event) {\n const code = event.key || event.code\n return code === 'Escape' || event.keyCode === 27\n}\n\nfunction isTouching (event) {\n return event.targetTouches.length > 0\n}\n\nfunction processTouches (touches, currScaleExtra, cb) {\n const total = touches.length\n const firstTouch = touches[0]\n const multitouch = total > 1\n\n let scaleExtra = currScaleExtra\n let i = touches.length\n let [xs, ys] = [0, 0]\n\n // keep track of the min and max of touch positions\n let min = { x: firstTouch.clientX, y: firstTouch.clientY }\n let max = { x: firstTouch.clientX, y: firstTouch.clientY }\n\n while (i--) {\n const t = touches[i]\n const [x, y] = [t.clientX, t.clientY]\n xs += x\n ys += y\n\n if (!multitouch) continue\n\n if (x < min.x) {\n min.x = x\n } else if (x > max.x) {\n max.x = x\n }\n\n if (y < min.y) {\n min.y = y\n } else if (y > max.y) {\n max.y = y\n }\n }\n\n if (multitouch) {\n // change scaleExtra dynamically\n const [distX, distY] = [max.x - min.x, max.y - min.y]\n\n if (distX > distY) {\n scaleExtra = (distX / window.innerWidth) * MULTITOUCH_SCALE_FACTOR\n } else {\n scaleExtra = (distY / window.innerHeight) * MULTITOUCH_SCALE_FACTOR\n }\n }\n\n cb(xs / total, ys / total, scaleExtra)\n}\n","import { setStyle } from './util/_helpers'\n\nexport default class Overlay {\n\n constructor (el, instance) {\n this.el = el\n this.instance = instance\n this.parent = document.body\n }\n\n init (options) {\n setStyle(this.el, {\n zIndex: 998,\n backgroundColor: options.bgColor,\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n opacity: 0,\n transition: `opacity\n ${options.transitionDuration}s\n ${options.transitionTimingFunction}`\n })\n\n this.el.addEventListener('click', () => this.instance.close())\n }\n\n updateStyle (options) {\n setStyle(this.el, {\n backgroundColor: options.bgColor,\n transition: `opacity\n ${options.transitionDuration}s\n ${options.transitionTimingFunction}`\n })\n }\n\n insert () {\n this.parent.appendChild(this.el)\n }\n\n remove () {\n this.parent.removeChild(this.el)\n }\n\n show () {\n setTimeout(() => this.el.style.opacity = this.instance.options.bgOpacity, 30)\n }\n\n hide () {\n this.el.style.opacity = 0\n }\n}\n","import { cursor, setStyle, getWindowCenter, overflowHiddenParents } from './util/_helpers'\nimport { transformCssProp } from './util/_trans'\nimport { half } from './util/_math'\n\nexport default class Target {\n\n constructor (el, instance) {\n this.el = el\n this.instance = instance\n this.translate = null\n this.scale = null\n this.srcThumbnail = this.el.getAttribute('src')\n this.style = {\n open: null,\n close: null\n }\n }\n\n zoomIn () {\n const options = this.instance.options\n const rect = this.el.getBoundingClientRect()\n\n // Remove overflow:hidden from target's parent nodes if any. It prevents\n // parent nodes from hiding the target after zooming in\n overflowHiddenParents.disable(this.el)\n\n this.translate = calculateTranslate(rect)\n this.scale = calculateScale(rect, options.scaleBase, options.customSize)\n\n // force layout update\n this.el.offsetWidth\n\n this.style.open = {\n position: 'relative',\n zIndex: 999,\n cursor: options.enableGrab\n ? cursor.grab\n : cursor.zoomOut,\n transition: `${transformCssProp}\n ${options.transitionDuration}s\n ${options.transitionTimingFunction}`,\n transform: `translate(${this.translate.x}px, ${this.translate.y}px)\n scale(${this.scale.x},${this.scale.y})`,\n width: `${rect.width}px`,\n height: `${rect.height}px`\n }\n\n // trigger transition\n this.style.close = setStyle(this.el, this.style.open, true)\n }\n\n zoomOut () {\n // Restore overflow:hidden to target's parent nodes if any\n overflowHiddenParents.enable(this.el)\n\n // force layout update\n this.el.offsetWidth\n\n setStyle(this.el, { transform: 'none' })\n }\n\n grab (x, y, scaleExtra) {\n const windowCenter = getWindowCenter()\n const [dx, dy] = [windowCenter.x - x, windowCenter.y - y]\n\n setStyle(this.el, {\n cursor: cursor.move,\n transform: `translate(\n ${this.translate.x + dx}px, ${this.translate.y + dy}px)\n scale(${this.scale.x + scaleExtra},${this.scale.y + scaleExtra})`\n })\n }\n\n move (x, y, scaleExtra) {\n const windowCenter = getWindowCenter()\n const [dx, dy] = [windowCenter.x - x, windowCenter.y - y]\n\n setStyle(this.el, {\n transition: transformCssProp,\n transform: `translate(\n ${this.translate.x + dx}px, ${this.translate.y + dy}px)\n scale(${this.scale.x + scaleExtra},${this.scale.y + scaleExtra})`\n })\n }\n\n restoreCloseStyle () {\n setStyle(this.el, this.style.close)\n }\n\n restoreOpenStyle () {\n setStyle(this.el, this.style.open)\n }\n\n upgradeSource (srcOriginal) {\n if (!srcOriginal) return\n\n const parentNode = this.el.parentNode\n const temp = this.el.cloneNode(false)\n\n // force compute the hi-res image in DOM to prevent\n // image flickering while updating src\n temp.setAttribute('src', srcOriginal)\n temp.style.position = 'fixed'\n temp.style.visibility = 'hidden'\n parentNode.appendChild(temp)\n\n setTimeout(() => {\n this.el.setAttribute('src', srcOriginal)\n parentNode.removeChild(temp)\n }, 100)\n }\n\n downgradeSource (srcOriginal) {\n if (!srcOriginal) return\n\n this.el.setAttribute('src', this.srcThumbnail)\n }\n}\n\nfunction calculateTranslate (rect) {\n const windowCenter = getWindowCenter()\n const targetCenter = {\n x: rect.left + half(rect.width),\n y: rect.top + half(rect.height)\n }\n\n // The vector to translate image to the window center\n return {\n x: windowCenter.x - targetCenter.x,\n y: windowCenter.y - targetCenter.y\n }\n}\n\nfunction calculateScale (rect, scaleBase, customSize) {\n if (customSize) {\n return {\n x: customSize.width / rect.width,\n y: customSize.height / rect.height\n }\n } else {\n const targetHalfWidth = half(rect.width)\n const targetHalfHeight = half(rect.height)\n const windowCenter = getWindowCenter()\n\n // The distance between target edge and window edge\n const targetEdgeToWindowEdge = {\n x: windowCenter.x - targetHalfWidth,\n y: windowCenter.y - targetHalfHeight\n }\n\n const scaleHorizontally = targetEdgeToWindowEdge.x / targetHalfWidth\n const scaleVertically = targetEdgeToWindowEdge.y / targetHalfHeight\n\n // The additional scale is based on the smaller value of\n // scaling horizontally and scaling vertically\n const scale = scaleBase + Math.min(scaleHorizontally, scaleVertically)\n\n return {\n x: scale,\n y: scale\n }\n }\n}\n","/**\n * A list of options.\n *\n * @type {Object}\n * @example\n * // Default options\n * var options = {\n * defaultZoomable: 'img[data-action=\"zoom\"]',\n * enableGrab: true,\n * preloadImage: true,\n * transitionDuration: 0.4,\n * transitionTimingFunction: 'cubic-bezier(0.4, 0, 0, 1)',\n * bgColor: 'rgb(255, 255, 255)',\n * bgOpacity: 1,\n * scaleBase: 1.0,\n * scaleExtra: 0.5,\n * scrollThreshold: 40,\n * customSize: null,\n * onOpen: null,\n * onClose: null,\n * onRelease: null,\n * onBeforeOpen: null,\n * onBeforeClose: null,\n * onBeforeGrab: null,\n * onBeforeMove: null,\n * onBeforeRelease: null\n * }\n */\nconst OPTIONS = {\n /**\n * Zoomable elements by default. It can be a css selector or an element.\n * @type {string|Element}\n */\n defaultZoomable: 'img[data-action=\"zoom\"]',\n\n /**\n * To be able to grab and drag the image for extra zoom-in.\n * @type {boolean}\n */\n enableGrab: true,\n\n /**\n * Preload images with attribute \"data-original\".\n * @type {boolean}\n */\n preloadImage: true,\n\n /**\n * Transition duration in seconds.\n * @type {number}\n */\n transitionDuration: 0.4,\n\n /**\n * Transition timing function.\n * @type {string}\n */\n transitionTimingFunction: 'cubic-bezier(0.4, 0, 0, 1)',\n\n /**\n * Overlay background color.\n * @type {string}\n */\n bgColor: 'rgb(255, 255, 255)',\n\n /**\n * Overlay background opacity.\n * @type {number}\n */\n bgOpacity: 1,\n\n /**\n * The base scale factor for zooming. By default scale to fit the window.\n * @type {number}\n */\n scaleBase: 1.0,\n\n /**\n * The extra scale factor when grabbing the image.\n * @type {number}\n */\n scaleExtra: 0.5,\n\n /**\n * How much scrolling it takes before closing out.\n * @type {number}\n */\n scrollThreshold: 40,\n\n /**\n * Scale (zoom in) to given width and height. Ignore scaleBase if set.\n * @type {Object}\n * @example\n * customSize: { width: 800, height: 400 }\n */\n customSize: null,\n\n /**\n * A callback function that will be called when a target is opened and\n * transition has ended. It will get the target element as the argument.\n * @type {Function}\n */\n onOpen: null,\n\n /**\n * Same as above, except fired when closed.\n * @type {Function}\n */\n onClose: null,\n\n /**\n * Same as above, except fired when released.\n * @type {Function}\n */\n onRelease: null,\n\n /**\n * A callback function that will be called before open.\n * @type {Function}\n */\n onBeforeOpen: null,\n\n /**\n * A callback function that will be called before close.\n * @type {Function}\n */\n onBeforeClose: null,\n\n /**\n * A callback function that will be called before grab.\n * @type {Function}\n */\n onBeforeGrab: null,\n\n /**\n * A callback function that will be called before move.\n * @type {Function}\n */\n onBeforeMove: null,\n\n /**\n * A callback function that will be called before release.\n * @type {Function}\n */\n onBeforeRelease: null\n}\n\nexport default OPTIONS\n","import { isNotImage, loadImage, checkOriginalImage } from './util/_image'\nimport { cursor, toggleGrabListeners } from './util/_helpers'\nimport { transEndEvent } from './util/_trans'\nimport { isString } from './util/_dom'\n\nimport EventHandler from './EventHandler'\nimport Overlay from './Overlay'\nimport Target from './Target'\n\nimport DEFAULT_OPTIONS from './_options'\n\n/**\n * Zooming instance.\n */\nexport default class Zooming {\n\n /**\n * @param {Object} [options] Update default options if provided.\n */\n constructor (options) {\n\n // elements\n this.target = null\n this.overlay = new Overlay(document.createElement('div'), this)\n this.eventHandler = new EventHandler(this)\n this.body = document.body\n\n // state\n this.shown = false // target is open\n this.lock = false // target is in transform\n this.released = true // mouse/finger is not pressing down\n this.lastScrollPosition = null\n this.pressTimer = null\n\n // init\n this.options = Object.assign({}, DEFAULT_OPTIONS)\n this.config(options)\n this.listen(this.options.defaultZoomable)\n this.overlay.init(this.options)\n }\n\n /**\n * Make element(s) zoomable.\n * @param {string|Element} el A css selector or an Element.\n * @return {this}\n */\n listen (el) {\n if (isString(el)) {\n let els = document.querySelectorAll(el), i = els.length\n\n while (i--) {\n this.listen(els[i])\n }\n\n return this\n }\n\n if (isNotImage(el)) return\n\n el.style.cursor = cursor.zoomIn\n el.addEventListener('click', this.eventHandler.click, { passive: false })\n\n if (this.options.preloadImage) {\n checkOriginalImage(el, loadImage)\n }\n\n return this\n }\n\n /**\n * Update options.\n * @param {Object} options An Object that contains this.options.\n * @return {this}\n */\n config (options) {\n if (!options) return this.options\n\n Object.assign(this.options, options)\n this.overlay.updateStyle(this.options)\n\n return this\n }\n\n /**\n * Open (zoom in) the Element.\n * @param {Element} el The Element to open.\n * @param {Function} [cb=this.options.onOpen] A callback function that will\n * be called when a target is opened and transition has ended. It will get\n * the target element as the argument.\n * @return {this}\n */\n open (el, cb = this.options.onOpen) {\n if (this.shown || this.lock) return\n\n const target = isString(el)\n ? document.querySelector(el)\n : el\n\n if (isNotImage(target)) return\n\n // onBeforeOpen event\n if (this.options.onBeforeOpen) this.options.onBeforeOpen(target)\n\n if (!this.options.preloadImage) {\n checkOriginalImage(target, loadImage)\n }\n\n this.target = new Target(target, this)\n\n this.shown = true\n this.lock = true\n\n this.target.zoomIn()\n this.overlay.insert()\n this.overlay.show()\n\n document.addEventListener('scroll', this.eventHandler.scroll)\n document.addEventListener('keydown', this.eventHandler.keydown)\n\n const onEnd = () => {\n target.removeEventListener(transEndEvent, onEnd)\n\n this.lock = false\n\n checkOriginalImage(target, srcOriginal => this.target.upgradeSource(srcOriginal))\n\n if (this.options.enableGrab) {\n toggleGrabListeners(document, this.eventHandler, true)\n }\n\n if (cb) cb(target)\n }\n\n target.addEventListener(transEndEvent, onEnd)\n\n return this\n }\n\n /**\n * Close (zoom out) the Element currently opened.\n * @param {Function} [cb=this.options.onClose] A callback function that will\n * be called when a target is closed and transition has ended. It will get\n * the target element as the argument.\n * @return {this}\n */\n close (cb = this.options.onClose) {\n if (!this.shown || this.lock) return\n\n const target = this.target.el\n\n // onBeforeClose event\n if (this.options.onBeforeClose) this.options.onBeforeClose(target)\n\n this.lock = true\n\n this.body.style.cursor = cursor.default\n this.overlay.hide()\n this.target.zoomOut()\n\n document.removeEventListener('scroll', this.eventHandler.scroll)\n document.removeEventListener('keydown', this.eventHandler.keydown)\n\n const onEnd = () => {\n target.removeEventListener(transEndEvent, onEnd)\n\n this.shown = false\n this.lock = false\n\n checkOriginalImage(target, srcOriginal => this.target.downgradeSource(srcOriginal))\n\n if (this.options.enableGrab) {\n toggleGrabListeners(document, this.eventHandler, false)\n }\n\n this.target.restoreCloseStyle()\n this.overlay.remove()\n\n if (cb) cb(target)\n }\n\n target.addEventListener(transEndEvent, onEnd)\n\n return this\n }\n\n /**\n * Grab the Element currently opened given a position and apply extra zoom-in.\n * @param {number} x The X-axis of where the press happened.\n * @param {number} y The Y-axis of where the press happened.\n * @param {number} scaleExtra Extra zoom-in to apply.\n * @param {Function} [cb=this.options.scaleExtra] A callback function that\n * will be called when a target is grabbed and transition has ended. It\n * will get the target element as the argument.\n * @return {this}\n */\n grab (x, y, scaleExtra = this.options.scaleExtra, cb) {\n if (!this.shown || this.lock) return\n\n const target = this.target.el\n\n // onBeforeGrab event\n if (this.options.onBeforeGrab) this.options.onBeforeGrab(target)\n\n this.released = false\n this.target.grab(x, y, scaleExtra)\n\n const onEnd = () => {\n target.removeEventListener(transEndEvent, onEnd)\n if (cb) cb(target)\n }\n\n target.addEventListener(transEndEvent, onEnd)\n }\n\n /**\n * Move the Element currently grabbed given a position and apply extra zoom-in.\n * @param {number} x The X-axis of where the press happened.\n * @param {number} y The Y-axis of where the press happened.\n * @param {number} scaleExtra Extra zoom-in to apply.\n * @param {Function} [cb=this.options.scaleExtra] A callback function that\n * will be called when a target is moved and transition has ended. It will\n * get the target element as the argument.\n * @return {this}\n */\n move (x, y, scaleExtra = this.options.scaleExtra, cb) {\n if (!this.shown || this.lock) return\n\n const target = this.target.el\n\n // onBeforeMove event\n if (this.options.onBeforeMove) this.options.onBeforeMove(target)\n\n this.released = false\n\n this.target.move(x, y, scaleExtra)\n this.body.style.cursor = cursor.move\n\n const onEnd = () => {\n target.removeEventListener(transEndEvent, onEnd)\n if (cb) cb(target)\n }\n\n target.addEventListener(transEndEvent, onEnd)\n }\n\n /**\n * Release the Element currently grabbed.\n * @param {Function} [cb=this.options.onRelease] A callback function that\n * will be called when a target is released and transition has ended. It\n * will get the target element as the argument.\n * @return {this}\n */\n release (cb = this.options.onRelease) {\n if (!this.shown || this.lock) return\n\n const target = this.target.el\n\n // onBeforeRelease event\n if (this.options.onBeforeRelease) this.options.onBeforeRelease(target)\n\n this.lock = true\n\n this.target.restoreOpenStyle()\n this.body.style.cursor = cursor.default\n\n const onEnd = () => {\n target.removeEventListener(transEndEvent, onEnd)\n\n this.lock = false\n this.released = true\n\n if (cb) cb(target)\n }\n\n target.addEventListener(transEndEvent, onEnd)\n\n return this\n }\n}\n","import Zooming from './Zooming'\n\ndocument.addEventListener('DOMContentLoaded', () => {\n new Zooming()\n})\n\nexport default Zooming\n"],"names":["body","document","docElm","documentElement","isString","checkType","isLink","checkTag","webkitPrefix","style","typeName","el","tagName","getParents","match","parents","parentNode","push","isNotImage","loadImage","src","cb","img","Image","onload","checkOriginalImage","srcOriginal","hasAttribute","getAttribute","trans","sniffTransition","createElement","transformCssProp","transEndEvent","checkTrans","styles","transitionProp","transformProp","value","transition","transform","ret","tform","end","some","prop","undefined","replace","divide","denominator","numerator","half","cursor","toggleListener","type","handler","add","addEventListener","passive","removeEventListener","getWindowCenter","windowWidth","Math","min","clientWidth","window","innerWidth","windowHeight","clientHeight","innerHeight","toggleGrabListeners","forEach","setStyle","remember","s","original","key","bindAll","_this","that","methods","Object","getOwnPropertyNames","getPrototypeOf","method","bind","overflowHiddenParents","Map","disableOverflowHiddenParents","enableOverflowHiddenParents","isOverflowHidden","getComputedStyle","overflow","getOverflowHiddenParents","map","has","get","set","parent","PRESS_DELAY","MULTITOUCH_SCALE_FACTOR","EventHandler","instance","e","preventDefault","shown","released","close","release","open","currentTarget","scrollTop","pageYOffset","lastScrollPosition","deltaY","abs","options","scrollThreshold","isEscape","isNotLeftButton","pressTimer","setTimeout","grab","clientX","clientY","move","touches","scaleExtra","x","y","isTouching","event","button","code","keyCode","targetTouches","length","processTouches","currScaleExtra","total","firstTouch","multitouch","i","xs","ys","max","t","distX","distY","Overlay","bgColor","transitionDuration","transitionTimingFunction","appendChild","removeChild","opacity","bgOpacity","Target","translate","scale","srcThumbnail","rect","getBoundingClientRect","disable","calculateTranslate","calculateScale","scaleBase","customSize","offsetWidth","enableGrab","zoomOut","width","height","enable","windowCenter","dx","dy","temp","cloneNode","setAttribute","position","visibility","targetCenter","left","top","targetHalfWidth","targetHalfHeight","targetEdgeToWindowEdge","scaleHorizontally","scaleVertically","OPTIONS","Zooming","target","overlay","eventHandler","lock","babelHelpers.extends","DEFAULT_OPTIONS","config","listen","defaultZoomable","init","els","querySelectorAll","zoomIn","click","preloadImage","updateStyle","onOpen","querySelector","onBeforeOpen","insert","show","scroll","keydown","onEnd","upgradeSource","onClose","onBeforeClose","default","hide","downgradeSource","restoreCloseStyle","remove","onBeforeGrab","onBeforeMove","onRelease","onBeforeRelease","restoreOpenStyle"],"mappings":"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"} \ No newline at end of file diff --git a/lib/zooming/build/zooming.min.js b/lib/zooming/build/zooming.min.js new file mode 100644 index 0000000..5b15a07 --- /dev/null +++ b/lib/zooming/build/zooming.min.js @@ -0,0 +1,2 @@ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.Zooming=e()}(this,function(){"use strict";function t(t){return function(e){return("undefined"==typeof e?"undefined":T(e))===t}}function e(t){return function(e){return e.tagName===t}}function n(t,e){for(var n=[];t&&t!==document;t=t.parentNode)e?e(t)&&n.push(t):n.push(t);return n}function i(){return e("IMG")===!1}function o(t,e){if(t){var n=new Image;n.onload=function(){e&&e(n)},n.src=t}}function s(t,e){var n=null;t.hasAttribute("data-original")?n=t.getAttribute("data-original"):P(t.parentNode)&&(n=t.parentNode.getAttribute("href")),e(n)}function r(t){var e=I.transitionProp,n=I.transformProp,i=void 0;t.transition&&(i=t.transition,delete t.transition,t[e]=i),t.transform&&(i=t.transform,delete t.transform,t[n]=i)}function a(t){var e={},n=["webkitTransition","transition","mozTransition"],i=["webkitTransform","transform","mozTransform"],o={transition:"transitionend",mozTransition:"transitionend",webkitTransition:"webkitTransitionEnd"};return n.some(function(n){if(void 0!==t.style[n])return e.transitionProp=n,e.transEndEvent=o[n],!0}),i.some(function(n){if(void 0!==t.style[n])return e.transformProp=n,e.transformCssProp=n.replace(/(.*)Transform/,"-$1-transform"),!0}),e}function l(t){return function(e){return e/t}}function u(t,e,n,i){i?t.addEventListener(e,n[e],{passive:!1}):t.removeEventListener(e,n[e],{passive:!1})}function c(){var t=Math.min(z.clientWidth,window.innerWidth),e=Math.min(z.clientHeight,window.innerHeight);return{x:N(t),y:N(e)}}function h(t,e,n){["mousedown","mousemove","mouseup","touchstart","touchmove","touchend"].forEach(function(i){u(t,i,e,n)})}function f(t,e,n){r(e);var i=t.style,o={};for(var s in e)n&&(o[s]=i[s]||""),i[s]=e[s];return o}function d(t,e){var n=Object.getOwnPropertyNames(Object.getPrototypeOf(t));n.forEach(function(n){t[n]=t[n].bind(e)})}function v(t){return"hidden"===getComputedStyle(t).overflow}function p(t){if(G.map.has(t))return G.map.get(t);var e=n(t.parentNode,v);return G.map.set(t,e),e}function y(t){p(t).forEach(function(t){G.style.has(t)?f(t,{overflow:"visible"}):G.style.set(t,f(t,{overflow:"visible"},!0))})}function m(t){G.map.has(t)&&G.map.get(t).forEach(function(t){f(t,G.style.get(t))})}function g(t){return 0!==t.button}function b(t){var e=t.key||t.code;return"Escape"===e||27===t.keyCode}function k(t){return t.targetTouches.length>0}function w(t,e,n){for(var i=t.length,o=t[0],s=i>1,r=e,a=t.length,l=0,u=0,c={x:o.clientX,y:o.clientY},h={x:o.clientX,y:o.clientY};a--;){var f=t[a],d=[f.clientX,f.clientY],v=d[0],p=d[1];l+=v,u+=p,s&&(vh.x&&(h.x=v),ph.y&&(h.y=p))}if(s){var y=h.x-c.x,m=h.y-c.y;r=y>m?y/window.innerWidth*R:m/window.innerHeight*R}n(l/i,u/i,r)}function x(t){var e=c(),n={x:t.left+N(t.width),y:t.top+N(t.height)};return{x:e.x-n.x,y:e.y-n.y}}function E(t,e,n){if(n)return{x:n.width/t.width,y:n.height/t.height};var i=N(t.width),o=N(t.height),s=c(),r={x:s.x-i,y:s.y-o},a=r.x/i,l=r.y/o,u=e+Math.min(a,l);return{x:u,y:u}}var T="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},S=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},C=function(){function t(t,e){for(var n=0;n=this.options.scrollThreshold&&(this.lastScrollPosition=null,this.close())}},{key:"keydown",value:function(t){var e=this;b(t)&&(this.released?this.close():this.release(function(){return e.close()}))}},{key:"mousedown",value:function(t){var e=this;g(t)||(t.preventDefault(),this.pressTimer=setTimeout(function(){e.grab(t.clientX,t.clientY)},j))}},{key:"mousemove",value:function(t){this.released||this.move(t.clientX,t.clientY)}},{key:"mouseup",value:function(t){g(t)||(clearTimeout(this.pressTimer),this.released?this.close():this.release())}},{key:"touchstart",value:function(t){var e=this;t.preventDefault(),this.pressTimer=setTimeout(function(){w(t.touches,e.options.scaleExtra,function(t,n,i){e.grab(t,n,i)})},j)}},{key:"touchmove",value:function(t){var e=this;this.released||w(t.touches,this.options.scaleExtra,function(t,n,i){e.move(t,n,i)})}},{key:"touchend",value:function(t){k(t)||(clearTimeout(this.pressTimer),this.released?this.close():this.release())}}]),t}(),Y=function(){function t(e,n){S(this,t),this.el=e,this.instance=n,this.parent=document.body}return C(t,[{key:"init",value:function(t){var e=this;f(this.el,{zIndex:998,backgroundColor:t.bgColor,position:"fixed",top:0,left:0,right:0,bottom:0,opacity:0,transition:"opacity\n "+t.transitionDuration+"s\n "+t.transitionTimingFunction}),this.el.addEventListener("click",function(){return e.instance.close()})}},{key:"updateStyle",value:function(t){f(this.el,{backgroundColor:t.bgColor,transition:"opacity\n "+t.transitionDuration+"s\n "+t.transitionTimingFunction})}},{key:"insert",value:function(){this.parent.appendChild(this.el)}},{key:"remove",value:function(){this.parent.removeChild(this.el)}},{key:"show",value:function(){var t=this;setTimeout(function(){return t.el.style.opacity=t.instance.options.bgOpacity},30)}},{key:"hide",value:function(){this.el.style.opacity=0}}]),t}(),X=function(){function t(e,n){S(this,t),this.el=e,this.instance=n,this.translate=null,this.scale=null,this.srcThumbnail=this.el.getAttribute("src"),this.style={open:null,close:null}}return C(t,[{key:"zoomIn",value:function(){var t=this.instance.options,e=this.el.getBoundingClientRect();G.disable(this.el),this.translate=x(e),this.scale=E(e,t.scaleBase,t.customSize),this.el.offsetWidth,this.style.open={position:"relative",zIndex:999,cursor:t.enableGrab?D.grab:D.zoomOut,transition:M+"\n "+t.transitionDuration+"s\n "+t.transitionTimingFunction,transform:"translate("+this.translate.x+"px, "+this.translate.y+"px)\n scale("+this.scale.x+","+this.scale.y+")",width:e.width+"px",height:e.height+"px"},this.style.close=f(this.el,this.style.open,!0)}},{key:"zoomOut",value:function(){G.enable(this.el),this.el.offsetWidth,f(this.el,{transform:"none"})}},{key:"grab",value:function(t,e,n){var i=c(),o=i.x-t,s=i.y-e;f(this.el,{cursor:D.move,transform:"translate(\n "+(this.translate.x+o)+"px, "+(this.translate.y+s)+"px)\n scale("+(this.scale.x+n)+","+(this.scale.y+n)+")"})}},{key:"move",value:function(t,e,n){var i=c(),o=i.x-t,s=i.y-e;f(this.el,{transition:M,transform:"translate(\n "+(this.translate.x+o)+"px, "+(this.translate.y+s)+"px)\n scale("+(this.scale.x+n)+","+(this.scale.y+n)+")"})}},{key:"restoreCloseStyle",value:function(){f(this.el,this.style.close)}},{key:"restoreOpenStyle",value:function(){f(this.el,this.style.open)}},{key:"upgradeSource",value:function(t){var e=this;if(t){var n=this.el.parentNode,i=this.el.cloneNode(!1);i.setAttribute("src",t),i.style.position="fixed",i.style.visibility="hidden",n.appendChild(i),setTimeout(function(){e.el.setAttribute("src",t),n.removeChild(i)},100)}}},{key:"downgradeSource",value:function(t){t&&this.el.setAttribute("src",this.srcThumbnail)}}]),t}(),F={defaultZoomable:'img[data-action="zoom"]',enableGrab:!0,preloadImage:!0,transitionDuration:.4,transitionTimingFunction:"cubic-bezier(0.4, 0, 0, 1)",bgColor:"rgb(255, 255, 255)",bgOpacity:1,scaleBase:1,scaleExtra:.5,scrollThreshold:40,customSize:null,onOpen:null,onClose:null,onRelease:null,onBeforeOpen:null,onBeforeClose:null,onBeforeGrab:null,onBeforeMove:null,onBeforeRelease:null},Z=function(){function t(e){S(this,t),this.target=null,this.overlay=new Y(document.createElement("div"),this),this.eventHandler=new W(this),this.body=document.body,this.shown=!1,this.lock=!1,this.released=!0,this.lastScrollPosition=null,this.pressTimer=null,this.options=O({},F),this.config(e),this.listen(this.options.defaultZoomable),this.overlay.init(this.options)}return C(t,[{key:"listen",value:function(t){if(B(t)){for(var e=document.querySelectorAll(t),n=e.length;n--;)this.listen(e[n]);return this}if(!i(t))return t.style.cursor=D.zoomIn,t.addEventListener("click",this.eventHandler.click,{passive:!1}),this.options.preloadImage&&s(t,o),this}},{key:"config",value:function(t){return t?(O(this.options,t),this.overlay.updateStyle(this.options),this):this.options}},{key:"open",value:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.onOpen;if(!this.shown&&!this.lock){var r=B(t)?document.querySelector(t):t;if(!i(r)){this.options.onBeforeOpen&&this.options.onBeforeOpen(r),this.options.preloadImage||s(r,o),this.target=new X(r,this),this.shown=!0,this.lock=!0,this.target.zoomIn(),this.overlay.insert(),this.overlay.show(),document.addEventListener("scroll",this.eventHandler.scroll),document.addEventListener("keydown",this.eventHandler.keydown);var a=function t(){r.removeEventListener(A,t),e.lock=!1,s(r,function(t){return e.target.upgradeSource(t)}),e.options.enableGrab&&h(document,e.eventHandler,!0),n&&n(r)};return r.addEventListener(A,a),this}}}},{key:"close",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.onClose;if(this.shown&&!this.lock){var n=this.target.el;this.options.onBeforeClose&&this.options.onBeforeClose(n),this.lock=!0,this.body.style.cursor=D.default,this.overlay.hide(),this.target.zoomOut(),document.removeEventListener("scroll",this.eventHandler.scroll),document.removeEventListener("keydown",this.eventHandler.keydown);var i=function i(){n.removeEventListener(A,i),t.shown=!1,t.lock=!1,s(n,function(e){return t.target.downgradeSource(e)}),t.options.enableGrab&&h(document,t.eventHandler,!1),t.target.restoreCloseStyle(),t.overlay.remove(),e&&e(n)};return n.addEventListener(A,i),this}}},{key:"grab",value:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.options.scaleExtra,i=arguments[3];if(this.shown&&!this.lock){var o=this.target.el;this.options.onBeforeGrab&&this.options.onBeforeGrab(o),this.released=!1,this.target.grab(t,e,n);var s=function t(){o.removeEventListener(A,t),i&&i(o)};o.addEventListener(A,s)}}},{key:"move",value:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.options.scaleExtra,i=arguments[3];if(this.shown&&!this.lock){var o=this.target.el;this.options.onBeforeMove&&this.options.onBeforeMove(o),this.released=!1,this.target.move(t,e,n),this.body.style.cursor=D.move;var s=function t(){o.removeEventListener(A,t),i&&i(o)};o.addEventListener(A,s)}}},{key:"release",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.onRelease;if(this.shown&&!this.lock){var n=this.target.el;this.options.onBeforeRelease&&this.options.onBeforeRelease(n),this.lock=!0,this.target.restoreOpenStyle(),this.body.style.cursor=D.default;var i=function i(){n.removeEventListener(A,i),t.lock=!1,t.released=!0,e&&e(n)};return n.addEventListener(A,i),this}}}]),t}();return document.addEventListener("DOMContentLoaded",function(){new Z}),Z}); +//# sourceMappingURL=zooming.min.js.map diff --git a/lib/zooming/build/zooming.min.js.map b/lib/zooming/build/zooming.min.js.map new file mode 100644 index 0000000..f171866 --- /dev/null +++ b/lib/zooming/build/zooming.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":null,"sources":["../src/util/_dom.js","../src/util/_image.js","../src/util/_trans.js","../src/util/_math.js","../src/util/_helpers.js","../src/EventHandler.js","../src/Target.js","../src/Overlay.js","../src/_options.js","../src/Zooming.js","../src/main.js"],"sourcesContent":["export const body = document.body\nexport const docElm = document.documentElement\nexport const isString = checkType('string')\nexport const isLink = checkTag('A')\nexport const webkitPrefix = 'WebkitAppearance' in docElm.style\n ? '-webkit-'\n : ''\n\nexport function checkType (typeName) {\n return function (el) {\n return typeof el === typeName\n }\n}\n\nexport function checkTag (tagName) {\n return function (el) {\n return el.tagName === tagName\n }\n}\n\nexport function getParents (el, match) {\n let parents = []\n\n for (; el && el !== document; el = el.parentNode) {\n if (match) {\n if (match(el)) {\n parents.push(el)\n }\n } else {\n parents.push(el)\n }\n }\n\n return parents\n}\n","import { checkTag, isLink } from './_dom'\n\nexport function isNotImage () {\n return checkTag('IMG') === false\n}\n\nexport function loadImage (src, cb) {\n if (!src) return\n\n const img = new Image()\n img.onload = function () {\n if (cb) cb(img)\n }\n \n img.src = src\n}\n\nexport function checkOriginalImage (el, cb) {\n let srcOriginal = null\n\n if (el.hasAttribute('data-original')) {\n srcOriginal = el.getAttribute('data-original')\n } else if (isLink(el.parentNode)) {\n srcOriginal = el.parentNode.getAttribute('href')\n }\n\n cb(srcOriginal)\n}\n","const trans = sniffTransition(document.createElement('div'))\nexport const transformCssProp = trans.transformCssProp\nexport const transEndEvent = trans.transEndEvent\n\nexport function checkTrans (styles) {\n const transitionProp = trans.transitionProp\n const transformProp = trans.transformProp\n\n let value\n if (styles.transition) {\n value = styles.transition\n delete styles.transition\n styles[transitionProp] = value\n }\n if (styles.transform) {\n value = styles.transform\n delete styles.transform\n styles[transformProp] = value\n }\n}\n\nexport function sniffTransition (el) {\n let ret = {}\n const trans = ['webkitTransition', 'transition', 'mozTransition']\n const tform = ['webkitTransform', 'transform', 'mozTransform']\n const end = {\n 'transition' : 'transitionend',\n 'mozTransition' : 'transitionend',\n 'webkitTransition' : 'webkitTransitionEnd'\n }\n\n trans.some(prop => {\n if (el.style[prop] !== undefined) {\n ret.transitionProp = prop\n ret.transEndEvent = end[prop]\n return true\n }\n })\n\n tform.some(prop => {\n if (el.style[prop] !== undefined) {\n ret.transformProp = prop\n ret.transformCssProp = prop.replace(/(.*)Transform/, '-$1-transform')\n return true\n }\n })\n\n return ret\n}\n","function divide (denominator) {\n return (numerator) => {\n return numerator / denominator\n }\n}\n\nexport const half = divide(2)\n","import { docElm, webkitPrefix, getParents } from './_dom'\nimport { checkTrans } from './_trans'\nimport { half } from './_math'\n\nexport const cursor = {\n default: 'auto',\n zoomIn: `${webkitPrefix}zoom-in`,\n zoomOut: `${webkitPrefix}zoom-out`,\n grab: `${webkitPrefix}grab`,\n move: 'move'\n}\n\nexport function toggleListener (el, type, handler, add) {\n if (add) {\n el.addEventListener(type, handler[type], { passive: false })\n } else {\n el.removeEventListener(type, handler[type], { passive: false })\n }\n}\n\nexport function getWindowCenter () {\n const windowWidth = Math.min(docElm.clientWidth, window.innerWidth)\n const windowHeight = Math.min(docElm.clientHeight, window.innerHeight)\n\n return {\n x: half(windowWidth),\n y: half(windowHeight)\n }\n}\n\nexport function toggleGrabListeners (el, handler, add) {\n ['mousedown', 'mousemove', 'mouseup','touchstart', 'touchmove', 'touchend']\n .forEach(type => {\n toggleListener(el, type, handler, add)\n })\n}\n\nexport function setStyle (el, styles, remember) {\n checkTrans(styles)\n\n let s = el.style\n let original = {}\n\n for (let key in styles) {\n if (remember) original[key] = s[key] || ''\n s[key] = styles[key]\n }\n\n return original\n}\n\nexport function bindAll (_this, that) {\n const methods = (\n Object.getOwnPropertyNames(\n Object.getPrototypeOf(_this)\n )\n )\n\n methods.forEach(method => {\n _this[method] = _this[method].bind(that)\n })\n}\n\nexport const overflowHiddenParents = {\n\n // Map from Element to its overflow:hidden parents\n map: new Map(),\n\n // Map from parent to its original style\n style: new Map(),\n\n disable: disableOverflowHiddenParents,\n enable: enableOverflowHiddenParents\n}\n\nfunction isOverflowHidden (el) {\n return getComputedStyle(el).overflow === 'hidden'\n}\n\nfunction getOverflowHiddenParents (el) {\n if (overflowHiddenParents.map.has(el)) {\n return overflowHiddenParents.map.get(el)\n } else {\n const parents = getParents(el.parentNode, isOverflowHidden)\n overflowHiddenParents.map.set(el, parents)\n return parents\n }\n}\n\nfunction disableOverflowHiddenParents (el) {\n getOverflowHiddenParents(el).forEach(parent => {\n if (overflowHiddenParents.style.has(parent)) {\n setStyle(parent, {\n overflow: 'visible'\n })\n } else {\n overflowHiddenParents.style.set(parent, setStyle(parent, {\n overflow: 'visible'\n }, true))\n }\n })\n}\n\nfunction enableOverflowHiddenParents (el) {\n if (overflowHiddenParents.map.has(el)) {\n overflowHiddenParents.map.get(el).forEach(parent => {\n setStyle(parent, overflowHiddenParents.style.get(parent))\n })\n }\n}\n","import { docElm, body } from './util/_dom'\nimport { bindAll } from './util/_helpers'\n\nconst PRESS_DELAY = 200\nconst MULTITOUCH_SCALE_FACTOR = 2\n\nexport default class EventHandler {\n\n constructor (instance) {\n bindAll(this, instance)\n }\n\n click (e) {\n e.preventDefault()\n\n if (this.shown) {\n if (this.released) this.close()\n else this.release()\n } else {\n this.open(e.currentTarget)\n }\n }\n\n scroll () {\n const scrollTop = window.pageYOffset ||\n (docElm || body.parentNode || body).scrollTop\n\n if (this.lastScrollPosition === null) {\n this.lastScrollPosition = scrollTop\n }\n\n const deltaY = this.lastScrollPosition - scrollTop\n\n if (Math.abs(deltaY) >= this.options.scrollThreshold) {\n this.lastScrollPosition = null\n this.close()\n }\n }\n\n keydown (e) {\n if (isEscape(e)) {\n if (this.released) this.close()\n else this.release(() => this.close())\n }\n }\n\n mousedown (e) {\n if (isNotLeftButton(e)) return\n e.preventDefault()\n\n this.pressTimer = setTimeout(() => {\n this.grab(e.clientX, e.clientY)\n }, PRESS_DELAY)\n }\n\n mousemove (e) {\n if (this.released) return\n this.move(e.clientX, e.clientY)\n }\n\n mouseup (e) {\n if (isNotLeftButton(e)) return\n clearTimeout(this.pressTimer)\n\n if (this.released) this.close()\n else this.release()\n }\n\n touchstart (e) {\n e.preventDefault()\n\n this.pressTimer = setTimeout(() => {\n processTouches(e.touches, this.options.scaleExtra,\n (x, y, scaleExtra) => {\n this.grab(x, y, scaleExtra)\n })\n }, PRESS_DELAY)\n }\n\n touchmove (e) {\n if (this.released) return\n\n processTouches(e.touches, this.options.scaleExtra,\n (x, y, scaleExtra) => {\n this.move(x, y, scaleExtra)\n })\n }\n\n touchend (e) {\n if (isTouching(e)) return\n clearTimeout(this.pressTimer)\n\n if (this.released) this.close()\n else this.release()\n }\n}\n\nfunction isNotLeftButton (event) {\n return event.button !== 0\n}\n\nfunction isEscape (event) {\n const code = event.key || event.code\n return code === 'Escape' || event.keyCode === 27\n}\n\nfunction isTouching (event) {\n return event.targetTouches.length > 0\n}\n\nfunction processTouches (touches, currScaleExtra, cb) {\n const total = touches.length\n const firstTouch = touches[0]\n const multitouch = total > 1\n\n let scaleExtra = currScaleExtra\n let i = touches.length\n let [xs, ys] = [0, 0]\n\n // keep track of the min and max of touch positions\n let min = { x: firstTouch.clientX, y: firstTouch.clientY }\n let max = { x: firstTouch.clientX, y: firstTouch.clientY }\n\n while (i--) {\n const t = touches[i]\n const [x, y] = [t.clientX, t.clientY]\n xs += x\n ys += y\n\n if (!multitouch) continue\n\n if (x < min.x) {\n min.x = x\n } else if (x > max.x) {\n max.x = x\n }\n\n if (y < min.y) {\n min.y = y\n } else if (y > max.y) {\n max.y = y\n }\n }\n\n if (multitouch) {\n // change scaleExtra dynamically\n const [distX, distY] = [max.x - min.x, max.y - min.y]\n\n if (distX > distY) {\n scaleExtra = (distX / window.innerWidth) * MULTITOUCH_SCALE_FACTOR\n } else {\n scaleExtra = (distY / window.innerHeight) * MULTITOUCH_SCALE_FACTOR\n }\n }\n\n cb(xs / total, ys / total, scaleExtra)\n}\n","import { cursor, setStyle, getWindowCenter, overflowHiddenParents } from './util/_helpers'\nimport { transformCssProp } from './util/_trans'\nimport { half } from './util/_math'\n\nexport default class Target {\n\n constructor (el, instance) {\n this.el = el\n this.instance = instance\n this.translate = null\n this.scale = null\n this.srcThumbnail = this.el.getAttribute('src')\n this.style = {\n open: null,\n close: null\n }\n }\n\n zoomIn () {\n const options = this.instance.options\n const rect = this.el.getBoundingClientRect()\n\n // Remove overflow:hidden from target's parent nodes if any. It prevents\n // parent nodes from hiding the target after zooming in\n overflowHiddenParents.disable(this.el)\n\n this.translate = calculateTranslate(rect)\n this.scale = calculateScale(rect, options.scaleBase, options.customSize)\n\n // force layout update\n this.el.offsetWidth\n\n this.style.open = {\n position: 'relative',\n zIndex: 999,\n cursor: options.enableGrab\n ? cursor.grab\n : cursor.zoomOut,\n transition: `${transformCssProp}\n ${options.transitionDuration}s\n ${options.transitionTimingFunction}`,\n transform: `translate(${this.translate.x}px, ${this.translate.y}px)\n scale(${this.scale.x},${this.scale.y})`,\n width: `${rect.width}px`,\n height: `${rect.height}px`\n }\n\n // trigger transition\n this.style.close = setStyle(this.el, this.style.open, true)\n }\n\n zoomOut () {\n // Restore overflow:hidden to target's parent nodes if any\n overflowHiddenParents.enable(this.el)\n\n // force layout update\n this.el.offsetWidth\n\n setStyle(this.el, { transform: 'none' })\n }\n\n grab (x, y, scaleExtra) {\n const windowCenter = getWindowCenter()\n const [dx, dy] = [windowCenter.x - x, windowCenter.y - y]\n\n setStyle(this.el, {\n cursor: cursor.move,\n transform: `translate(\n ${this.translate.x + dx}px, ${this.translate.y + dy}px)\n scale(${this.scale.x + scaleExtra},${this.scale.y + scaleExtra})`\n })\n }\n\n move (x, y, scaleExtra) {\n const windowCenter = getWindowCenter()\n const [dx, dy] = [windowCenter.x - x, windowCenter.y - y]\n\n setStyle(this.el, {\n transition: transformCssProp,\n transform: `translate(\n ${this.translate.x + dx}px, ${this.translate.y + dy}px)\n scale(${this.scale.x + scaleExtra},${this.scale.y + scaleExtra})`\n })\n }\n\n restoreCloseStyle () {\n setStyle(this.el, this.style.close)\n }\n\n restoreOpenStyle () {\n setStyle(this.el, this.style.open)\n }\n\n upgradeSource (srcOriginal) {\n if (!srcOriginal) return\n\n const parentNode = this.el.parentNode\n const temp = this.el.cloneNode(false)\n\n // force compute the hi-res image in DOM to prevent\n // image flickering while updating src\n temp.setAttribute('src', srcOriginal)\n temp.style.position = 'fixed'\n temp.style.visibility = 'hidden'\n parentNode.appendChild(temp)\n\n setTimeout(() => {\n this.el.setAttribute('src', srcOriginal)\n parentNode.removeChild(temp)\n }, 100)\n }\n\n downgradeSource (srcOriginal) {\n if (!srcOriginal) return\n\n this.el.setAttribute('src', this.srcThumbnail)\n }\n}\n\nfunction calculateTranslate (rect) {\n const windowCenter = getWindowCenter()\n const targetCenter = {\n x: rect.left + half(rect.width),\n y: rect.top + half(rect.height)\n }\n\n // The vector to translate image to the window center\n return {\n x: windowCenter.x - targetCenter.x,\n y: windowCenter.y - targetCenter.y\n }\n}\n\nfunction calculateScale (rect, scaleBase, customSize) {\n if (customSize) {\n return {\n x: customSize.width / rect.width,\n y: customSize.height / rect.height\n }\n } else {\n const targetHalfWidth = half(rect.width)\n const targetHalfHeight = half(rect.height)\n const windowCenter = getWindowCenter()\n\n // The distance between target edge and window edge\n const targetEdgeToWindowEdge = {\n x: windowCenter.x - targetHalfWidth,\n y: windowCenter.y - targetHalfHeight\n }\n\n const scaleHorizontally = targetEdgeToWindowEdge.x / targetHalfWidth\n const scaleVertically = targetEdgeToWindowEdge.y / targetHalfHeight\n\n // The additional scale is based on the smaller value of\n // scaling horizontally and scaling vertically\n const scale = scaleBase + Math.min(scaleHorizontally, scaleVertically)\n\n return {\n x: scale,\n y: scale\n }\n }\n}\n","import { setStyle } from './util/_helpers'\n\nexport default class Overlay {\n\n constructor (el, instance) {\n this.el = el\n this.instance = instance\n this.parent = document.body\n }\n\n init (options) {\n setStyle(this.el, {\n zIndex: 998,\n backgroundColor: options.bgColor,\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n opacity: 0,\n transition: `opacity\n ${options.transitionDuration}s\n ${options.transitionTimingFunction}`\n })\n\n this.el.addEventListener('click', () => this.instance.close())\n }\n\n updateStyle (options) {\n setStyle(this.el, {\n backgroundColor: options.bgColor,\n transition: `opacity\n ${options.transitionDuration}s\n ${options.transitionTimingFunction}`\n })\n }\n\n insert () {\n this.parent.appendChild(this.el)\n }\n\n remove () {\n this.parent.removeChild(this.el)\n }\n\n show () {\n setTimeout(() => this.el.style.opacity = this.instance.options.bgOpacity, 30)\n }\n\n hide () {\n this.el.style.opacity = 0\n }\n}\n","/**\n * A list of options.\n *\n * @type {Object}\n * @example\n * // Default options\n * var options = {\n * defaultZoomable: 'img[data-action=\"zoom\"]',\n * enableGrab: true,\n * preloadImage: true,\n * transitionDuration: 0.4,\n * transitionTimingFunction: 'cubic-bezier(0.4, 0, 0, 1)',\n * bgColor: 'rgb(255, 255, 255)',\n * bgOpacity: 1,\n * scaleBase: 1.0,\n * scaleExtra: 0.5,\n * scrollThreshold: 40,\n * customSize: null,\n * onOpen: null,\n * onClose: null,\n * onRelease: null,\n * onBeforeOpen: null,\n * onBeforeClose: null,\n * onBeforeGrab: null,\n * onBeforeMove: null,\n * onBeforeRelease: null\n * }\n */\nconst OPTIONS = {\n /**\n * Zoomable elements by default. It can be a css selector or an element.\n * @type {string|Element}\n */\n defaultZoomable: 'img[data-action=\"zoom\"]',\n\n /**\n * To be able to grab and drag the image for extra zoom-in.\n * @type {boolean}\n */\n enableGrab: true,\n\n /**\n * Preload images with attribute \"data-original\".\n * @type {boolean}\n */\n preloadImage: true,\n\n /**\n * Transition duration in seconds.\n * @type {number}\n */\n transitionDuration: 0.4,\n\n /**\n * Transition timing function.\n * @type {string}\n */\n transitionTimingFunction: 'cubic-bezier(0.4, 0, 0, 1)',\n\n /**\n * Overlay background color.\n * @type {string}\n */\n bgColor: 'rgb(255, 255, 255)',\n\n /**\n * Overlay background opacity.\n * @type {number}\n */\n bgOpacity: 1,\n\n /**\n * The base scale factor for zooming. By default scale to fit the window.\n * @type {number}\n */\n scaleBase: 1.0,\n\n /**\n * The extra scale factor when grabbing the image.\n * @type {number}\n */\n scaleExtra: 0.5,\n\n /**\n * How much scrolling it takes before closing out.\n * @type {number}\n */\n scrollThreshold: 40,\n\n /**\n * Scale (zoom in) to given width and height. Ignore scaleBase if set.\n * @type {Object}\n * @example\n * customSize: { width: 800, height: 400 }\n */\n customSize: null,\n\n /**\n * A callback function that will be called when a target is opened and\n * transition has ended. It will get the target element as the argument.\n * @type {Function}\n */\n onOpen: null,\n\n /**\n * Same as above, except fired when closed.\n * @type {Function}\n */\n onClose: null,\n\n /**\n * Same as above, except fired when released.\n * @type {Function}\n */\n onRelease: null,\n\n /**\n * A callback function that will be called before open.\n * @type {Function}\n */\n onBeforeOpen: null,\n\n /**\n * A callback function that will be called before close.\n * @type {Function}\n */\n onBeforeClose: null,\n\n /**\n * A callback function that will be called before grab.\n * @type {Function}\n */\n onBeforeGrab: null,\n\n /**\n * A callback function that will be called before move.\n * @type {Function}\n */\n onBeforeMove: null,\n\n /**\n * A callback function that will be called before release.\n * @type {Function}\n */\n onBeforeRelease: null\n}\n\nexport default OPTIONS\n","import { isNotImage, loadImage, checkOriginalImage } from './util/_image'\nimport { cursor, toggleGrabListeners } from './util/_helpers'\nimport { transEndEvent } from './util/_trans'\nimport { isString } from './util/_dom'\n\nimport EventHandler from './EventHandler'\nimport Overlay from './Overlay'\nimport Target from './Target'\n\nimport DEFAULT_OPTIONS from './_options'\n\n/**\n * Zooming instance.\n */\nexport default class Zooming {\n\n /**\n * @param {Object} [options] Update default options if provided.\n */\n constructor (options) {\n\n // elements\n this.target = null\n this.overlay = new Overlay(document.createElement('div'), this)\n this.eventHandler = new EventHandler(this)\n this.body = document.body\n\n // state\n this.shown = false // target is open\n this.lock = false // target is in transform\n this.released = true // mouse/finger is not pressing down\n this.lastScrollPosition = null\n this.pressTimer = null\n\n // init\n this.options = Object.assign({}, DEFAULT_OPTIONS)\n this.config(options)\n this.listen(this.options.defaultZoomable)\n this.overlay.init(this.options)\n }\n\n /**\n * Make element(s) zoomable.\n * @param {string|Element} el A css selector or an Element.\n * @return {this}\n */\n listen (el) {\n if (isString(el)) {\n let els = document.querySelectorAll(el), i = els.length\n\n while (i--) {\n this.listen(els[i])\n }\n\n return this\n }\n\n if (isNotImage(el)) return\n\n el.style.cursor = cursor.zoomIn\n el.addEventListener('click', this.eventHandler.click, { passive: false })\n\n if (this.options.preloadImage) {\n checkOriginalImage(el, loadImage)\n }\n\n return this\n }\n\n /**\n * Update options.\n * @param {Object} options An Object that contains this.options.\n * @return {this}\n */\n config (options) {\n if (!options) return this.options\n\n Object.assign(this.options, options)\n this.overlay.updateStyle(this.options)\n\n return this\n }\n\n /**\n * Open (zoom in) the Element.\n * @param {Element} el The Element to open.\n * @param {Function} [cb=this.options.onOpen] A callback function that will\n * be called when a target is opened and transition has ended. It will get\n * the target element as the argument.\n * @return {this}\n */\n open (el, cb = this.options.onOpen) {\n if (this.shown || this.lock) return\n\n const target = isString(el)\n ? document.querySelector(el)\n : el\n\n if (isNotImage(target)) return\n\n // onBeforeOpen event\n if (this.options.onBeforeOpen) this.options.onBeforeOpen(target)\n\n if (!this.options.preloadImage) {\n checkOriginalImage(target, loadImage)\n }\n\n this.target = new Target(target, this)\n\n this.shown = true\n this.lock = true\n\n this.target.zoomIn()\n this.overlay.insert()\n this.overlay.show()\n\n document.addEventListener('scroll', this.eventHandler.scroll)\n document.addEventListener('keydown', this.eventHandler.keydown)\n\n const onEnd = () => {\n target.removeEventListener(transEndEvent, onEnd)\n\n this.lock = false\n\n checkOriginalImage(target, srcOriginal => this.target.upgradeSource(srcOriginal))\n\n if (this.options.enableGrab) {\n toggleGrabListeners(document, this.eventHandler, true)\n }\n\n if (cb) cb(target)\n }\n\n target.addEventListener(transEndEvent, onEnd)\n\n return this\n }\n\n /**\n * Close (zoom out) the Element currently opened.\n * @param {Function} [cb=this.options.onClose] A callback function that will\n * be called when a target is closed and transition has ended. It will get\n * the target element as the argument.\n * @return {this}\n */\n close (cb = this.options.onClose) {\n if (!this.shown || this.lock) return\n\n const target = this.target.el\n\n // onBeforeClose event\n if (this.options.onBeforeClose) this.options.onBeforeClose(target)\n\n this.lock = true\n\n this.body.style.cursor = cursor.default\n this.overlay.hide()\n this.target.zoomOut()\n\n document.removeEventListener('scroll', this.eventHandler.scroll)\n document.removeEventListener('keydown', this.eventHandler.keydown)\n\n const onEnd = () => {\n target.removeEventListener(transEndEvent, onEnd)\n\n this.shown = false\n this.lock = false\n\n checkOriginalImage(target, srcOriginal => this.target.downgradeSource(srcOriginal))\n\n if (this.options.enableGrab) {\n toggleGrabListeners(document, this.eventHandler, false)\n }\n\n this.target.restoreCloseStyle()\n this.overlay.remove()\n\n if (cb) cb(target)\n }\n\n target.addEventListener(transEndEvent, onEnd)\n\n return this\n }\n\n /**\n * Grab the Element currently opened given a position and apply extra zoom-in.\n * @param {number} x The X-axis of where the press happened.\n * @param {number} y The Y-axis of where the press happened.\n * @param {number} scaleExtra Extra zoom-in to apply.\n * @param {Function} [cb=this.options.scaleExtra] A callback function that\n * will be called when a target is grabbed and transition has ended. It\n * will get the target element as the argument.\n * @return {this}\n */\n grab (x, y, scaleExtra = this.options.scaleExtra, cb) {\n if (!this.shown || this.lock) return\n\n const target = this.target.el\n\n // onBeforeGrab event\n if (this.options.onBeforeGrab) this.options.onBeforeGrab(target)\n\n this.released = false\n this.target.grab(x, y, scaleExtra)\n\n const onEnd = () => {\n target.removeEventListener(transEndEvent, onEnd)\n if (cb) cb(target)\n }\n\n target.addEventListener(transEndEvent, onEnd)\n }\n\n /**\n * Move the Element currently grabbed given a position and apply extra zoom-in.\n * @param {number} x The X-axis of where the press happened.\n * @param {number} y The Y-axis of where the press happened.\n * @param {number} scaleExtra Extra zoom-in to apply.\n * @param {Function} [cb=this.options.scaleExtra] A callback function that\n * will be called when a target is moved and transition has ended. It will\n * get the target element as the argument.\n * @return {this}\n */\n move (x, y, scaleExtra = this.options.scaleExtra, cb) {\n if (!this.shown || this.lock) return\n\n const target = this.target.el\n\n // onBeforeMove event\n if (this.options.onBeforeMove) this.options.onBeforeMove(target)\n\n this.released = false\n\n this.target.move(x, y, scaleExtra)\n this.body.style.cursor = cursor.move\n\n const onEnd = () => {\n target.removeEventListener(transEndEvent, onEnd)\n if (cb) cb(target)\n }\n\n target.addEventListener(transEndEvent, onEnd)\n }\n\n /**\n * Release the Element currently grabbed.\n * @param {Function} [cb=this.options.onRelease] A callback function that\n * will be called when a target is released and transition has ended. It\n * will get the target element as the argument.\n * @return {this}\n */\n release (cb = this.options.onRelease) {\n if (!this.shown || this.lock) return\n\n const target = this.target.el\n\n // onBeforeRelease event\n if (this.options.onBeforeRelease) this.options.onBeforeRelease(target)\n\n this.lock = true\n\n this.target.restoreOpenStyle()\n this.body.style.cursor = cursor.default\n\n const onEnd = () => {\n target.removeEventListener(transEndEvent, onEnd)\n\n this.lock = false\n this.released = true\n\n if (cb) cb(target)\n }\n\n target.addEventListener(transEndEvent, onEnd)\n\n return this\n }\n}\n","import Zooming from './Zooming'\n\ndocument.addEventListener('DOMContentLoaded', () => {\n new Zooming()\n})\n\nexport default Zooming\n"],"names":["checkType","typeName","el","checkTag","tagName","getParents","match","parents","document","parentNode","push","isNotImage","loadImage","src","cb","img","Image","onload","checkOriginalImage","srcOriginal","hasAttribute","getAttribute","isLink","checkTrans","styles","transitionProp","trans","transformProp","value","transition","transform","sniffTransition","ret","tform","end","some","undefined","style","prop","transEndEvent","transformCssProp","replace","divide","denominator","numerator","toggleListener","type","handler","add","addEventListener","passive","removeEventListener","getWindowCenter","windowWidth","Math","min","docElm","clientWidth","window","innerWidth","windowHeight","clientHeight","innerHeight","half","toggleGrabListeners","forEach","setStyle","remember","s","original","key","bindAll","_this","that","methods","Object","getOwnPropertyNames","getPrototypeOf","method","bind","isOverflowHidden","getComputedStyle","overflow","getOverflowHiddenParents","overflowHiddenParents","map","has","get","set","disableOverflowHiddenParents","parent","enableOverflowHiddenParents","isNotLeftButton","event","button","isEscape","code","keyCode","isTouching","targetTouches","length","processTouches","touches","currScaleExtra","total","firstTouch","multitouch","scaleExtra","i","xs","ys","x","clientX","y","clientY","max","t","distX","distY","MULTITOUCH_SCALE_FACTOR","calculateTranslate","rect","windowCenter","targetCenter","left","width","top","height","calculateScale","scaleBase","customSize","targetHalfWidth","targetHalfHeight","targetEdgeToWindowEdge","scaleHorizontally","scaleVertically","scale","body","documentElement","isString","webkitPrefix","createElement","cursor","Map","PRESS_DELAY","EventHandler","instance","this","e","preventDefault","shown","released","close","release","open","currentTarget","scrollTop","pageYOffset","lastScrollPosition","deltaY","abs","options","scrollThreshold","pressTimer","setTimeout","grab","move","_this3","Overlay","bgColor","transitionDuration","transitionTimingFunction","appendChild","removeChild","_this2","opacity","bgOpacity","Target","translate","srcThumbnail","getBoundingClientRect","disable","offsetWidth","enableGrab","zoomOut","enable","dx","dy","temp","cloneNode","setAttribute","position","visibility","OPTIONS","Zooming","target","overlay","eventHandler","lock","babelHelpers.extends","DEFAULT_OPTIONS","config","listen","defaultZoomable","init","els","querySelectorAll","zoomIn","click","preloadImage","updateStyle","onOpen","querySelector","onBeforeOpen","insert","show","scroll","keydown","onEnd","upgradeSource","onClose","onBeforeClose","default","hide","downgradeSource","restoreCloseStyle","remove","onBeforeGrab","onBeforeMove","onRelease","onBeforeRelease","restoreOpenStyle"],"mappings":"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"} \ No newline at end of file diff --git a/lib/zooming/scripts/build.js b/lib/zooming/scripts/build.js new file mode 100644 index 0000000..4bf120b --- /dev/null +++ b/lib/zooming/scripts/build.js @@ -0,0 +1,82 @@ +const rollup = require('rollup') +const watch = require('rollup-watch') +const babel = require('rollup-plugin-babel') +const eslint = require('rollup-plugin-eslint') +const uglify = require('rollup-plugin-uglify') +const open = require('open') + +const defaultPlugins = [ + babel({ + exclude: 'node_modules/**' + }), + eslint({ + env: { + browser: true + }, + extends: 'eslint:recommended', + parserOptions: { + ecmaVersion: 6, + sourceType: 'module' + }, + rules: { + indent: ['off', 2], + quotes: ['error', 'single'], + semi: ['off', 'never'] + } + }) +] + +const config = (dest, plugins) => { + return { + entry: 'src/main.js', + dest: dest, + format: 'umd', + moduleName: 'Zooming', + sourceMap: true, + plugins: plugins, + onwarn: (message) => { + // https://github.com/rollup/rollup/wiki/Troubleshooting#this-is-undefined + if (/The 'this' keyword is equivalent to 'undefined' at the top level of an ES module, and has been rewritten./.test(message)) { + return + } + } + } +} + +const stderr = console.error.bind(console) // eslint-disable-line no-console +let opened = false + +const eventHandler = (event) => { + switch (event.code) { + case 'STARTING': + stderr('checking rollup-watch version...') + break + case 'BUILD_START': + stderr('bundling...') + break + case 'BUILD_END': + stderr('bundled in ' + event.duration + 'ms. Watching for changes...') + if (!opened) { + open(__dirname + '/../index.html') + opened = true + } + break + case 'ERROR': + stderr('error: ' + event.error) + break + default: + stderr('unknown event', event) + } +} + +const watcherDefault = watch(rollup, config( + 'build/zooming.js', + defaultPlugins +)) + +watch(rollup, config( + 'build/zooming.min.js', + defaultPlugins.concat([uglify({})]) +)) + +watcherDefault.on('event', eventHandler) diff --git a/lib/zooming/scripts/test.js b/lib/zooming/scripts/test.js new file mode 100644 index 0000000..03685d0 --- /dev/null +++ b/lib/zooming/scripts/test.js @@ -0,0 +1,3 @@ +const open = require('open') + +open(__dirname + '/../test.html') diff --git a/pages/auroraGameHub.html b/pages/auroraGameHub.html index 9cd7835..eb5d6d8 100644 --- a/pages/auroraGameHub.html +++ b/pages/auroraGameHub.html @@ -4,7 +4,8 @@ - + + Sammy Guergachi - Aurora Game Hub @@ -12,16 +13,41 @@
-
Aurora Game Hub is a project I spent 5 years of my free time devoted to
-
+
Aurora Game Hub was my software design playground
+
+

The Idea

+

Aurora Game Hub was a project I started in August 2010, the summer before grade 12 high school. I remember knowing just enough Java to be able to make something cool.

+

The problem I wanted to tackle was one I felt very passionately about at the time. Being a gamer and deeply interested in user interface/user experience development, I was keenly aware of a problem PC gamers faced that Console gamers didn’t. At the time I had an Xbox 360, and loved the experience around the console game, from the point of putting a disc in to the console and instantly being able to play a game, to the sleek integration of the Xbox dashboard. I wanted something like that for PC gamers.

+

[Image of Xbox 360 Dashboard]

+

I was angry, because the PC was more powerful than any console at the time and subjectively had great games on the platform, my view was the only thing missing was creating some sort of immersive experience where gamers could launch one application and have access to all things gaming without worrying about all the other stuff the PC did. The PC can do many things and because of that you get a very fractured experience where the way you play or access your games is the same as the way you access or open a PDF document. The other issue was that you had to use so many different applications from different digital distributors to play your various games.

+

[Image of PC Gamer Desktop]

+

My philosophy to side projects has primarily been to do something that hasn’t already been done already or done well enough. I’m not interested in putting a lot of work to make something marginally better than a competing product. So I make sure to put a lot of time into searching and analyzing competing services. Because to be honest, I much rather use someone else’s product which solves a problem I’m facing good enough than build something that is no more of a remix of a well made competing product. In this case the competition was miserable. There was nothing that could figure out this problem.

+

Most services that did something like this focused more around a social component. Whether it be a chat service, a gaming social network, they all had the ability to launch and manage your games library but none had it nailed down. Examples of these services/tools include Xfire, Raptr, and Curse. You also had digital distribution platforms like Steam and Origin, but the had a poor to no ability to add game’s that weren’t sold in their stores. My aim was to focus on the common denominator and do a good job at managing all your games, regardless of where you got it from. I also wanted no social features to start with, from my personal experience these social features have already been done well enough by many companies, not something I had any interest in.

+

Tackling this problem wasn’t my only goal. I really wanted to experiment with UI and UX design. I had so many ideas of un-conventional UIs that I wanted to see come alive. The accumulation of all these little UI details is really why I love this project so much.

+

Rev 09

+

The first build of Aurora released did nothing but show a loading screen. The same summer I started working on Aurora, I had decided to open source my project and use Source Forge as the host of my svn repository to manage my code. I released revision 9 as the first version of Aurora available to run. All that happened when you ran it was see a full screen window with a loop of green hexagons slowly moving horizontally. You saw the logo at the top and a spinning progress wheel at the bottom with messages that would slide and fade in and out of view.

+ +

On the surface, it seemed like nothing, but a lot of decisions I had made in this first, unusable, version was carried on until the very end.

+

First of all, the layout of this screen was inspired by a game I used to play called EVE Online. I loved the login screens in that game, it felt very sci-fi without feeling unnecessarily gaudy. The subtle sci-fi music in the background and the idle animation in the center really wowed me. With each expansion of EVE a new animation and theme song would greet you on login. A lot of other people were fans of this login screen by the looks of a search on youtube.

+

[Image of Eve Login Screen]

+

I didn’t have the ability to make an idle animation with as much fidelity as EVE did, so I settled for a simple horizontally moving animation of green hexagons. Why green hexagons? Because hexagons are the coolest shape. These green hexagons later lead me to build the piece of UI I am most proud of in this project.

+

The animated login text was inspired by the Office 2010 splash screen. I had never seen text being presented in that way anywhere else. It was a really digestible and nice way of delivering segmented pieces of information to the user. This component was reused many times throughout the project.

+

[https: //www.youtube.com/watch?v=160xBNUyMrg& + ab_channel=daSmirnov]

+

The last important thing I had done was a bit more philosophical. I was convinced that what made applications boring and unattractive was how static they were. I realize now with maturity that this philosophy was shortsighted, but it resulted in some interesting experiments. My goal was to make Aurora dynamic in subtle ways. The way I did this was to randomly pick different strings of text to use for the same message. So for example if I wanted to say “welcome” to the user, I would randomly pick from “hello” and “greetings” as possible synonyms to send the same message. This system was later extended to support me dynamically changing the dictionary of synonyms to support seasonal or holiday messages which would be dynamically updated in the background. I tried to apply this dynamic messaging everywhere I could, but I soon realized later in development it wasn’t very scalable for me to write variations of each message we needed to display to the user.

+

A Partner

+

In 2011 I had gone to University. By then I had done a lot more work on Aurora. Most notably I had implemented the dashboard UI, the info bar which would later turn into a live news ticker for PC gaming news, and the foundation of what would become the game library. But the most important thing to happen that year for the project was when I met Carlos online.

+

I had decided that I needed a partner if I was going to really turn this UI playground into something really functional in a realistic timeline. It turns out SourceForge had a form dedicated to “job” postings for open source projects on the site. It was a really great way to get exposure on this project. I got a bunch of replies, most of which went nowhere. I made sure to convey to the few promising candidates how passionate I was about the project and made it clear I was looking for a “creative programmer”, which was my way of saying someone who has good programing skills but also had the taste to appreciate my focus on the immersive UI design I was envisioning for the project.

+

One person who ended up being a partner on the project for years since was Carlos. Someone who I found out happened to live in a city called Aurora near me which was quite the coincidence. In this case Carlos was a huge help to me, and I will forever be grateful to him. I have never met Carlos in person, but he’s been like a friend to me.

+
Here are other projects I worked on

- - - + + +

Home