1 line
5.6 KiB
JavaScript
1 line
5.6 KiB
JavaScript
define(["exports"],function(_exports){function _createForOfIteratorHelper(r,e){var o,a,u,n,t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(t)return u=!(a=!0),{s:function(){t=t.call(r)},n:function(){var r=t.next();return a=r.done,r},e:function(r){u=!0,o=r},f:function(){try{a||null==t.return||t.return()}finally{if(u)throw o}}};if(Array.isArray(r)||(t=function(r,a){{var t;if(r)return"string"==typeof r?_arrayLikeToArray(r,a):"Map"===(t="Object"===(t={}.toString.call(r).slice(8,-1))&&r.constructor?r.constructor.name:t)||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}(r))||e&&r&&"number"==typeof r.length)return t&&(r=t),n=0,{s:e=function(){},n:function(){return n>=r.length?{done:!0}:{done:!1,value:r[n++]}},e:function(r){throw r},f:e};throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}async function getJpgDimensions(blob){var header=await blob.slice(0,2).arrayBuffer(),header=new DataView(header);if(65496===header.getUint16(0))for(var offset=2;offset<blob.size;){var buffer=await blob.slice(offset,offset+9).arrayBuffer();if(buffer.byteLength<4)return null;var height,buffer=new DataView(buffer),marker=buffer.getUint16(0),length=buffer.getUint16(2);if(65472===marker||65474===marker)return height=buffer.getUint16(5),{width:buffer.getUint16(7),height:height};if(65498===marker)return null;offset+=2+length}return null}function getUint24LittleEndian(dataView,offset){return dataView.getUint8(offset)|dataView.getUint8(offset+1)<<8|dataView.getUint8(offset+2)<<16}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.makeComicBook=void 0;var pageDimensions={jpg:getJpgDimensions,jpeg:getJpgDimensions,png:async function(blob){blob=await blob.slice(0,24).arrayBuffer(),blob=new DataView(blob);return 2303741511!==blob.getUint32(0)?null:{width:blob.getUint32(16),height:blob.getUint32(20)}},gif:async function(blob){var blob=await blob.slice(0,10).arrayBuffer(),view=new DataView(blob),blob=String.fromCharCode.apply(String,babelHelpers.toConsumableArray(new Uint8Array(blob.slice(0,6))));return/^GIF8[79]a$/.test(blob)?{width:view.getUint16(6,!0),height:view.getUint16(8,!0)}:null},webp:async function(blob){var b2,blob=await blob.slice(0,30).arrayBuffer(),view=new DataView(blob),riff=String.fromCharCode.apply(String,babelHelpers.toConsumableArray(new Uint8Array(blob.slice(0,4)))),webp=String.fromCharCode.apply(String,babelHelpers.toConsumableArray(new Uint8Array(blob.slice(8,12))));return"RIFF"!==riff||"WEBP"!==webp?null:"VP8 "===(riff=String.fromCharCode.apply(String,babelHelpers.toConsumableArray(new Uint8Array(blob.slice(12,16)))))?{width:16383&view.getUint16(26,!0),height:16383&view.getUint16(28,!0)}:"VP8L"===riff?(webp=view.getUint8(21),blob=view.getUint8(22),b2=view.getUint8(23),{width:1+((63&blob)<<8|webp),height:1+((15&view.getUint8(24))<<10|b2<<2|(192&blob)>>6)}):"VP8X"===riff?{width:1+getUint24LittleEndian(view,24),height:1+getUint24LittleEndian(view,27)}:null}};_exports.makeComicBook=async function(_ref,file,smartSpreads){var spreads,promises,book,entries=_ref.entries,loadBlob=_ref.loadBlob,getSize=_ref.getSize,cache=new Map,urls=new Map,exts=[".jpg",".jpeg",".png",".gif",".bmp",".webp",".svg",".jxl",".avif"],files=entries.map(function(entry){return entry.filename}).filter(function(name){return exts.some(function(ext){return name.endsWith(ext)})}).sort(function(a,b){return a.localeCompare(b,void 0,{numeric:!0})});if(files.length)return spreads={},smartSpreads&&(promises=[],files.forEach(function(name){var extension=name.slice(2+(name.lastIndexOf(".")-1>>>0));pageDimensions[extension]&&promises.push(new Promise(function(resolve,reject){loadBlob(name).then(function(blob){return pageDimensions[extension](blob)}).then(function(dimensions){dimensions.width>1.05*dimensions.height&&(spreads[name]="center"),resolve()}).catch(function(e){return reject(e)})}))}),await Promise.all(promises)),(book={getCover:function(){return loadBlob(files[0])}}).metadata={title:file.name},book.sections=files.map(function(name){return{id:name,load:function(){return async function(name){var src,page;return cache.has(name)?cache.get(name):(src=URL.createObjectURL(await loadBlob(name)),page=URL.createObjectURL(new Blob(['<!DOCTYPE html><html><head><meta charset="utf-8"></head><body style="margin: 0"><img src="'.concat(src,'"></body></html>')],{type:"text/html"})),urls.set(name,[src,page]),cache.set(name,page),page)}(name)},unload:function(){return function(name){var _urls$get;null!=(_urls$get=urls.get(name))&&null!=_urls$get.forEach&&_urls$get.forEach(function(url){return URL.revokeObjectURL(url)}),urls.delete(name),cache.delete(name)}(name)},size:getSize(name),pageSpread:spreads[name]}}),book.toc=files.map(function(name){return{label:name,href:name}}),book.rendition={layout:"pre-paginated"},book.resolveHref=function(href){return{index:book.sections.findIndex(function(s){return s.id===href})}},book.splitTOCHref=function(href){return[href,null]},book.getTOCFragment=function(doc){return doc.documentElement},book.destroy=function(){var _step,_iterator=_createForOfIteratorHelper(urls.values());try{for(_iterator.s();!(_step=_iterator.n()).done;){var _step2,_iterator2=_createForOfIteratorHelper(_step.value);try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var url=_step2.value;URL.revokeObjectURL(url)}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}}}catch(err){_iterator.e(err)}finally{_iterator.f()}},book;throw new Error("No supported image files in archive")}}); |