1 line
11 KiB
JavaScript
1 line
11 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}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.makeFB2=void 0;function getElementText(el){return normalizeWhitespace(null==el?void 0:el.textContent)}var normalizeWhitespace=function(str){return str?str.replace(/[\t\n\f\r ]+/g," ").replace(/^[\t\n\f\r ]+/,"").replace(/[\t\n\f\r ]+$/,""):""},NS={XLINK:"http://www.w3.org/1999/xlink",EPUB:"http://www.idpf.org/2007/ops"},MIME={XML:"application/xml",XHTML:"application/xhtml+xml"},STYLE={strong:["strong","self"],emphasis:["em","self"],style:["span","self"],a:"anchor",strikethrough:["s","self"],sub:["sub","self"],sup:["sup","self"],code:["code","self"],image:"image"},POEM={epigraph:["blockquote"],subtitle:["h2",STYLE],"text-author":["p",STYLE],date:["p",STYLE],stanza:"stanza"},SECTION={title:["header",{p:["h1",STYLE],"empty-line":["br"]}],epigraph:["blockquote","self"],image:"image",annotation:["aside"],section:["section","self"],p:["p",STYLE],poem:["blockquote",POEM],subtitle:["h2",STYLE],cite:["blockquote","self"],"empty-line":["br"],table:["table",{tr:["tr",{th:["th",STYLE,["colspan","rowspan","align","valign"]],td:["td",STYLE,["colspan","rowspan","align","valign"]]},["align"]]}],"text-author":["p",STYLE]},BODY=(POEM.epigraph.push(SECTION),{image:"image",title:["section",{p:["h1",STYLE],"empty-line":["br"]}],epigraph:["section",SECTION],section:["section",SECTION]}),FB2Converter=function(){return babelHelpers.createClass(function FB2Converter(fb2){babelHelpers.classCallCheck(this,FB2Converter),this.fb2=fb2,this.doc=document.implementation.createDocument(NS.XHTML,"html"),this.bins=new Map(Array.from(this.fb2.getElementsByTagName("binary"),function(el){return[el.id,el]}))},[{key:"getImageSrc",value:function(el){var _href$split,el=el.getAttributeNS(NS.XLINK,"href");return el?(_href$split=el.split("#"),(_href$split=babelHelpers.slicedToArray(_href$split,2)[1])&&(_href$split=this.bins.get(_href$split))?"data:".concat(_href$split.getAttribute("content-type"),";base64,").concat(_href$split.textContent):el):"data:,"}},{key:"image",value:function(node){var el=this.doc.createElement("img");return el.alt=node.getAttribute("alt"),el.title=node.getAttribute("title"),el.setAttribute("src",this.getImageSrc(node)),el}},{key:"anchor",value:function(node){var el=this.convert(node,{a:["a",STYLE]});return el.setAttribute("href",node.getAttributeNS(NS.XLINK,"href")),"note"===node.getAttribute("type")&&el.setAttributeNS(NS.EPUB,"epub:type","noteref"),el}},{key:"stanza",value:function(node){var _step,el=this.convert(node,{stanza:["p",{title:["header",{p:["strong",STYLE],"empty-line":["br"]}],subtitle:["p",STYLE]}]}),_iterator=_createForOfIteratorHelper(node.children);try{for(_iterator.s();!(_step=_iterator.n()).done;){var child=_step.value;"v"===child.nodeName&&(el.append(this.doc.createTextNode(child.textContent)),el.append(this.doc.createElement("br")))}}catch(err){_iterator.e(err)}finally{_iterator.f()}return el}},{key:"convert",value:function(node,def){if(3===node.nodeType)return this.doc.createTextNode(node.textContent);if(4===node.nodeType)return this.doc.createCDATASection(node.textContent);if(8===node.nodeType)return this.doc.createComment(node.textContent);var d=null==def?void 0:def[node.nodeName];if(!d)return null;if("string"==typeof d)return this[d](node);var d=babelHelpers.slicedToArray(d,3),name=d[0],opts=d[1],d=d[2],el=this.doc.createElement(name);if(node.id&&(el.id=node.id),el.classList.add(node.nodeName),Array.isArray(d)){var _step2,_iterator2=_createForOfIteratorHelper(d);try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var attr=_step2.value,value=node.getAttribute(attr);value&&el.setAttribute(attr,value)}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}}for(var childDef="self"===opts?def:opts,child=node.firstChild;child;){var childEl=this.convert(child,childDef);childEl&&el.append(childEl),child=child.nextSibling}return el}}])}(),style=URL.createObjectURL(new Blob(['\n@namespace epub "http://www.idpf.org/2007/ops";\nbody > img, section > img {\n display: block;\n margin: auto;\n}\n.title h1 {\n text-align: center;\n}\nbody > section > .title, body.notesBodyType > .title {\n margin: 3em 0;\n}\nbody.notesBodyType > section .title h1 {\n text-align: start;\n}\nbody.notesBodyType > section .title {\n margin: 1em 0;\n}\np {\n text-indent: 1em;\n margin: 0;\n}\n:not(p) + p, p:first-child {\n text-indent: 0;\n}\n.poem p {\n text-indent: 0;\n margin: 1em 0;\n}\n.text-author, .date {\n text-align: end;\n}\n.text-author:before {\n content: "—";\n}\ntable {\n border-collapse: collapse;\n}\ntd, th {\n padding: .25em;\n}\na[epub|type~="noteref"] {\n font-size: .75em;\n vertical-align: super;\n}\nbody:not(.notesBodyType) > .title, body:not(.notesBodyType) > .epigraph {\n margin: 3em 0;\n}\n'],{type:"text/css"})),dataID="data-foliate-id";_exports.makeFB2=async function(blob){function $(x){return doc.querySelector(x)}function $$(x){return babelHelpers.toConsumableArray(doc.querySelectorAll(x))}function getPerson(el){var middle,nick=getElementText(el.querySelector("nickname"));return nick||{name:[nick=getElementText(el.querySelector("first-name")),middle=getElementText(el.querySelector("middle-name")),el=getElementText(el.querySelector("last-name"))].filter(function(x){return x}).join(" "),sortAs:el?[el,[nick,middle].filter(function(x){return x}).join(" ")].join(", "):null}}function getDate(el){var _el$getAttribute;return null!=(_el$getAttribute=null==el?void 0:el.getAttribute("value"))?_el$getAttribute:getElementText(el)}var src,book={},doc=await async function(blob){var blob=await blob.arrayBuffer(),str=new TextDecoder("utf-8").decode(blob),parser=new DOMParser,doc=parser.parseFromString(str,MIME.XML),str=doc.xmlEncoding||(null==(str=str.match(/^<\?xml\s+version\s*=\s*["']1.\d+"\s+encoding\s*=\s*["']([A-Za-z0-9._-]*)["']/))?void 0:str[1]);return str&&"utf-8"!==str.toLowerCase()?(str=new TextDecoder(str).decode(blob),parser.parseFromString(str,MIME.XML)):doc}(blob),converter=new FB2Converter(doc),blob=$("title-info annotation"),blob=(book.metadata={title:getElementText($("title-info book-title")),identifier:getElementText($("document-info id")),language:getElementText($("title-info lang")),author:$$("title-info author").map(getPerson),translator:$$("title-info translator").map(getPerson),contributor:$$("document-info author").map(getPerson).concat($$("document-info program-used").map(getElementText)).map(function(x){return Object.assign("string"==typeof x?{name:x}:x,{role:"bkp"})}),publisher:getElementText($("publish-info publisher")),published:getDate($("title-info date")),modified:getDate($("document-info date")),description:blob?converter.convert(blob,{annotation:["div",SECTION]}).innerHTML:null,subject:$$("title-info genre").map(getElementText)},$("coverpage image")?(src=converter.getImageSrc($("coverpage image")),book.getCover=function(){return fetch(src).then(function(res){return res.blob()})}):book.getCover=function(){return null},Array.from(doc.querySelectorAll("body"),function(body){body=converter.convert(body,{body:["body",BODY]});return[Array.from(body.children,function(el){var ids=[el].concat(babelHelpers.toConsumableArray(el.querySelectorAll("[id]"))).map(function(el){return el.id});return{el:el,ids:ids}}),body]})),urls=[],blob=blob[0][0].map(function(_ref){var el=_ref.el;return{ids:_ref.ids,titles:Array.from(el.querySelectorAll(":scope > section > .title"),function(el,index){return el.setAttribute(dataID,index),{title:getElementText(el),index:index}}),el:el}}).concat(blob.slice(1).map(function(_ref2){var _ref2=babelHelpers.slicedToArray(_ref2,2),sections=_ref2[0],_ref2=_ref2[1],sections=sections.map(function(s){return s.ids}).flat();return _ref2.classList.add("notesBodyType"),{ids:sections,el:_ref2,linear:"no"}})).map(function(_ref4){var ids=_ref4.ids,titles=_ref4.titles,el=_ref4.el,_ref4=_ref4.linear,str=(html=el.outerHTML,'<?xml version="1.0" encoding="utf-8"?>\n<html xmlns="http://www.w3.org/1999/xhtml">\n <head><link href="'.concat(style,'" rel="stylesheet" type="text/css"/></head>\n <body>').concat(html,"</body>\n</html>")),html=new Blob([str],{type:MIME.XHTML}),url=URL.createObjectURL(html);return urls.push(url),{ids:ids,title:normalizeWhitespace(null!=(ids=null==(ids=el.querySelector(".title, .subtitle, p"))?void 0:ids.textContent)?ids:el.classList.contains("title")?el.textContent:""),titles:titles,load:function(){return url},createDocument:function(){return(new DOMParser).parseFromString(str,MIME.XHTML)},size:html.size-Array.from(el.querySelectorAll("[src]"),function(el){return null!=(el=null==(el=el.getAttribute("src"))?void 0:el.length)?el:0}).reduce(function(a,b){return a+b},0),linear:_ref4}}),idMap=new Map;return book.sections=blob.map(function(section,index){var _step3,ids=section.ids,load=section.load,createDocument=section.createDocument,size=section.size,section=section.linear,_iterator3=_createForOfIteratorHelper(ids);try{for(_iterator3.s();!(_step3=_iterator3.n()).done;){var id=_step3.value;id&&idMap.set(id,index)}}catch(err){_iterator3.e(err)}finally{_iterator3.f()}return{id:index,load:load,createDocument:createDocument,size:size,linear:section}}),book.toc=blob.map(function(_ref5,index){var title=_ref5.title,_ref5=_ref5.titles,id=index.toString();return{label:title,href:id,subitems:null!=_ref5&&_ref5.length?_ref5.map(function(_ref6){var title=_ref6.title,_ref6=_ref6.index;return{label:title,href:"".concat(id,"#").concat(_ref6)}}):null}}).filter(function(item){return item}),book.resolveHref=function(href){var href=href.split("#"),href=babelHelpers.slicedToArray(href,2),a=href[0],b=href[1];return a?{index:Number(a),anchor:function(doc){return doc.querySelector("[".concat(dataID,'="').concat(b,'"]'))}}:{index:idMap.get(b),anchor:function(doc){return doc.getElementById(b)}}},book.splitTOCHref=function(href){return null!=(href=null==href||null==(href=href.split("#"))?void 0:href.map(function(x){return Number(x)}))?href:[]},book.getTOCFragment=function(doc,id){return doc.querySelector("[".concat(dataID,'="').concat(id,'"]'))},book.destroy=function(){for(var _i=0,_urls=urls;_i<_urls.length;_i++)URL.revokeObjectURL(_urls[_i])},book}}); |