mirror of
https://github.com/docsifyjs/docsify.git
synced 2025-12-08 19:55:52 +00:00
25 lines
8.3 KiB
JavaScript
25 lines
8.3 KiB
JavaScript
(function () {
|
|
/*
|
|
* medium-zoom v0.3.0
|
|
* Medium zoom on your images in vanilla JavaScript
|
|
* Copyright 2017 Francois Chalifour
|
|
* https://github.com/francoischalifour/medium-zoom
|
|
* MIT License
|
|
*/function __$styleInject(a,b){if('undefined'==typeof document){ return b; }a=a||'';var c=document.head||document.getElementsByTagName('head')[0],d=document.createElement('style');return d.type='text/css', c.appendChild(d), d.styleSheet?d.styleSheet.cssText=a:d.appendChild(document.createTextNode(a)), b}var _extends=Object.assign||function(a){for(var b,c=1;c<arguments.length;c++){ for(var d in b=arguments[c], b){ Object.prototype.hasOwnProperty.call(b,d)&&(a[d]=b[d]); } }return a}; var toConsumableArray=function(a){if(Array.isArray(a)){for(var b=0,c=Array(a.length);b<a.length;b++){ c[b]=a[b]; }return c}return Array.from(a)}; var SUPPORTED_FORMATS=['IMG']; var KEY_ESC=27; var KEY_Q=81; var CANCEL_KEYS=[KEY_ESC,KEY_Q]; var isSupported=function(a){return SUPPORTED_FORMATS.includes(a.tagName)}; var isScaled=function(a){return a.naturalWidth!==a.width}; var isListOrCollection=function(a){return NodeList.prototype.isPrototypeOf(a)||HTMLCollection.prototype.isPrototypeOf(a)}; var isNode=function(a){return a&&1===a.nodeType}; var mediumZoom=function(a){var b=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},c=b.margin,d=void 0===c?0:c,e=b.background,f=void 0===e?'#fff':e,g=b.scrollOffset,h=void 0===g?48:g,i=b.metaClick,j=b.container,k=b.template,l=function(a){var b=a.getBoundingClientRect(),c=b.top,d=b.left,e=b.width,f=b.height,g=a.cloneNode(),h=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,i=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0;return g.removeAttribute('id'), g.style.position='absolute', g.style.top=c+h+'px', g.style.left=d+i+'px', g.style.width=e+'px', g.style.height=f+'px', g.style.transform='', g},m=function(){if(y.original){if(y.original.dispatchEvent(new Event('show')), z=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0, A=!0, y.zoomed=l(y.original), document.body.appendChild(x), v.template){var a=isNode(v.template)?v.template:document.querySelector(v.template);y.template=document.createElement('div'), y.template.appendChild(a.content.cloneNode(!0)), document.body.appendChild(y.template);}if(document.body.appendChild(y.zoomed), requestAnimationFrame(function(){document.body.classList.add('medium-zoom--open');}), y.original.style.visibility='hidden', y.zoomed.classList.add('medium-zoom-image--open'), y.zoomed.addEventListener('click',n), y.zoomed.addEventListener('transitionend',q), y.original.getAttribute('data-zoom-target')){y.zoomedHd=y.zoomed.cloneNode(), y.zoomedHd.src=y.zoomed.getAttribute('data-zoom-target'), y.zoomedHd.onerror=function(){clearInterval(b), console.error('Unable to reach the zoom image target '+y.zoomedHd.src), y.zoomedHd=null, u();};var b=setInterval(function(){y.zoomedHd.naturalWidth&&(clearInterval(b), y.zoomedHd.classList.add('medium-zoom-image--open'), y.zoomedHd.addEventListener('click',n), document.body.appendChild(y.zoomedHd), u());},10);}else { u(); }}},n=function a(){var b=0<arguments.length&&void 0!==arguments[0]?arguments[0]:0,c=function(){A||!y.original||(y.original.dispatchEvent(new Event('hide')), A=!0, document.body.classList.remove('medium-zoom--open'), y.zoomed.style.transform='', y.zoomedHd&&(y.zoomedHd.style.transform='', y.zoomedHd.removeEventListener('click',a)), y.template&&(y.template.style.transition='opacity 150ms', y.template.style.opacity=0), y.zoomed.removeEventListener('click',a), y.zoomed.addEventListener('transitionend',r));};0<b?setTimeout(c,b):c();},o=function(a){a&&a.target?(y.original=a.target, m()):y.original?n():(y.original=w[0], m());},p=function(a){return(a.metaKey||a.ctrlKey)&&v.metaClick?window.open(a.target.getAttribute('data-original')||a.target.parentNode.href||a.target.src,'_blank'):void(a.preventDefault(), o(a))},q=function a(){A=!1, y.zoomed.removeEventListener('transitionend',a), y.original.dispatchEvent(new Event('shown'));},r=function a(){y.original&&(y.original.style.visibility='', document.body.removeChild(y.zoomed), y.zoomedHd&&document.body.removeChild(y.zoomedHd), document.body.removeChild(x), y.zoomed.classList.remove('medium-zoom-image--open'), y.template&&document.body.removeChild(y.template), A=!1, y.zoomed.removeEventListener('transitionend',a), y.original.dispatchEvent(new Event('hidden')), y.original=null, y.zoomed=null, y.zoomedHd=null, y.template=null);},s=function(){if(!A&&y.original){var a=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(z-a)>v.scrollOffset&&n(150);}},t=function(a){CANCEL_KEYS.includes(a.keyCode||a.which)&&n();},u=function(){var a=Math.min;if(y.original){var b,c,d={width:window.innerWidth,height:window.innerHeight,left:0,top:0,right:0,bottom:0};if(v.container){ if(v.container instanceof Object){ _extends(d,v.container), b=d.width-d.left-d.right-2*v.margin, c=d.height-d.top-d.bottom-2*v.margin; }else{var e=isNode(v.container)?v.container:document.querySelector(v.container),f=e.getBoundingClientRect(),g=f.width,h=f.height,i=f.left,j=f.top;_extends(d,{width:g,height:h,left:i,top:j});} }b=b||d.width-2*v.margin, c=c||d.height-2*v.margin;var k=y.zoomedHd||y.original,l=k.naturalWidth,m=void 0===l?b:l,n=k.naturalHeight,o=void 0===n?c:n,p=k.getBoundingClientRect(),q=p.top,r=p.left,s=p.width,t=p.height,u=a(m,b)/s,w=a(o,c)/t,x=a(u,w)||1,z=(-r+(b-s)/2+v.margin+d.left)/x,A=(-q+(c-t)/2+v.margin+d.top)/x,B='scale('+x+') translate3d('+z+'px, '+A+'px, 0)';y.zoomed.style.transform=B, y.zoomedHd&&(y.zoomedHd.style.transform=B);}},v={margin:d,background:f,scrollOffset:h,metaClick:void 0===i||i,container:j,template:k};a instanceof Object&&_extends(v,a);var w=function(a){try{return Array.isArray(a)?a.filter(isSupported):isListOrCollection(a)?[].concat(toConsumableArray(a)).filter(isSupported):isNode(a)?[a].filter(isSupported):'string'==typeof a?[].concat(toConsumableArray(document.querySelectorAll(a))).filter(isSupported):[].concat(toConsumableArray(document.querySelectorAll(SUPPORTED_FORMATS.map(function(a){return a.toLowerCase()}).join(',')))).filter(isScaled)}catch(a){throw new TypeError('The provided selector is invalid.\nExpects a CSS selector, a Node element, a NodeList, an HTMLCollection or an array.\nSee: https://github.com/francoischalifour/medium-zoom')}}(a),x=function(a){var b=document.createElement('div');return b.classList.add('medium-zoom-overlay'), b.style.backgroundColor=a, b}(v.background),y={original:null,zoomed:null,zoomedHd:null,template:null},z=0,A=!1;return w.forEach(function(a){a.classList.add('medium-zoom-image'), a.addEventListener('click',p);}), x.addEventListener('click',n), document.addEventListener('scroll',s), document.addEventListener('keyup',t), window.addEventListener('resize',n), {show:o,hide:n,toggle:o,update:function(){var a=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};return a.background&&(x.style.backgroundColor=a.background), a.container&&a.container instanceof Object&&(a.container=_extends({},v.container,a.container)), _extends(v,a)},addEventListeners:function(a,b){w.forEach(function(c){c.addEventListener(a,b);});},detach:function(){var a=function a(){var b=new Event('detach');w.forEach(function(a){a.classList.remove('medium-zoom-image'), a.removeEventListener('click',p), a.dispatchEvent(b);}), w.splice(0,w.length), x.removeEventListener('click',n), document.removeEventListener('scroll',s), document.removeEventListener('keyup',t), window.removeEventListener('resize',n), y.zoomed&&y.zoomed.removeEventListener('transitionend',a);};y.zoomed?(n(), y.zoomed.addEventListener('transitionend',requestAnimationFrame(a))):a();},images:w,options:v}}; var mediumZoom$2=Object.freeze({default:mediumZoom});__$styleInject('.medium-zoom-overlay{position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .3s;will-change:opacity}.medium-zoom--open .medium-zoom-overlay{cursor:pointer;cursor:zoom-out;opacity:1}.medium-zoom-image{cursor:pointer;cursor:zoom-in;transition:transform .3s}.medium-zoom-image--open{position:relative;cursor:pointer;cursor:zoom-out;will-change:transform}',void 0);var mediumZoom$4=mediumZoom$2&&mediumZoom||mediumZoom$2; var src=mediumZoom$4;
|
|
|
|
function install (hook) {
|
|
var zoom;
|
|
|
|
hook.doneEach(function (_) {
|
|
if (zoom) {
|
|
zoom.detach();
|
|
}
|
|
|
|
zoom = src('img:not(.emoji):not([data-no-zoom])');
|
|
});
|
|
}
|
|
|
|
$docsify.plugins = [].concat(install, $docsify.plugins);
|
|
|
|
}());
|