From 344864a807e4ca117b5b65794ceac15f9ac713d3 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 24 Dec 2016 11:05:44 +0530 Subject: [PATCH] Handle the case of document stylesheets with null cssrules (caused by cross-origin security policies) --- resources/compiled_coffeescript.zip | Bin 101615 -> 101586 bytes src/calibre/ebooks/oeb/display/paged.coffee | 36 ++++++++++--------- src/calibre/ebooks/oeb/polish/preview.coffee | 3 +- 3 files changed, 20 insertions(+), 19 deletions(-) diff --git a/resources/compiled_coffeescript.zip b/resources/compiled_coffeescript.zip index b93b2a8de975ef66a685dbf63995553e6829f19c..05815284123d37105442d21f67aa3fed36baf553 100644 GIT binary patch delta 1822 zcmZ`)ZA?>V6z)N($Tvv&hF(~mPzv(dQY%ITr-rF)&MXlTZrj_^QhLk17sUuN6;S~* z-C1@Zo7t8n{#fQP^G9`?xcylcX^qik{&1NrO9X!`@?+VuESr08`It=iChzTg@B5r{ zp7WmPynQ^by)&-8{QLEk^E=0OgdQbjj&*4?>de9Vk@PG1liCEG$Hf)N9fF{gNj*M6 zF6NHJavWw)72%;TbhvlQi2YOfI6h^;TT?b%6>7lkp+f8kZNp0;J>CqN@Yhfi)`d%O zE<=mHa1~C3Q}I$b?aD;>apwQHf9IhAH&3m?#83*}ez=x}h{q=nlUbNtES|~6`kB4> z_Dnqs6^{>Q(pWeH>SlG3kXvUr;=pVJel@#^h1!I-@5fNP7FJ#{Kf1`LjlVXwBe6dB z$2&HSMxD7DjfT2MAeZ8spcUVk%%bB>5DvcbGR#7}B)CkRtQ__Uwpi>F4fy9^T#O_r zJ(8a*qNBUOkj@}nU0ofw&gBz&OYLIsIy1rliCh?B^k21uJnZo*P;j9f^!%Lxu#7>t>E3 z?=79d@0{=l;D!DKy6*xLPP4^dFF`h~cSACk9^FjG+^{FGSS7qbaUMtjFJ*gR06)FSs^x(-`JGF7RIn90x1}69Sq?Pkf%G+<^ZMu5 zh%^NQQjQml>1xpn=KEyv2pAN9Ni7I^yimMi^?D=g8#at|w+ou{jNBGc?Btpy;h;x2 z#5MDN!B@6`SWk_9rk-Pd$e{~%4#k(s|PfDX6&fBIHqOBLkNU-z)Ij#4#QiM7g3uQfgh#Jt;EjtZs=U{tp}SaBb|S~A zNM_H@yv0i>!FKvV0xO>TQb#2+xKf_+__U))pRB{5`U>+GCCTLVZ=sgl2X`uP7!sE| zqkBD2gF{yh*xnI~=I)H=Pzs(p2-Og?Xh`22f-TG>36sB%#sfnISlb=xQ3`E^)%fvX zau9o=HhNX0_Y{BdZa>rkr3^q$r1!QBz`ZE#yf?}{4p|uyAbYS5WY0?VGLYPYf=!mZ zXb(G>@@MkZV_kQ$N>#s<9P8iq4&6-SD&e z9zF>-Ab9o^3_`-Pe*nrq1N&A?mH@$NNTa!7h#@)y#+6U%K||L^m@cQ!Kz!lzE>m`& zE(~WA14ph_<1i#cfNaB%ja_^!eLV`L^x-I^WBz1}sc-{V=&Y%zuT*X({&eeaHQvC?)n~70I zmvL^OZ%1Gc=6n)MZNuz)-w5c8PBUNa5Nc|iW~akk?ksneR|%DtYP;3qbeZiH_Sy>G LURhmhFYNyZ?VfCE delta 1858 zcmZ`)YfKbZ6y|`uc155pAdg)~B+5%(i@Y*xA&0)qBV)5w zp&tdM*iYbO83+DQ9i^VQRf54bhX=9G@#`%i@<%}Gg-W}N7ODbo5*5t??x zd@{?b4|hWhvO>zC0AItfGC%AzkO`@r{B_irDf3EL7MThbSNB3Wuvpg%1$5}_1t%RM zRB6;qm==Z)@T16?!9?{R4?(f|Q!i{cG9f7}yZL}1QgDUyhNugHz5!m0JHv(n=p&ad ztjCK3P)ly7*>Qg-6k_o{xQ6%l!C^FRhg_@~gbbV>gby>vxWF^ZA?T;hqC>C_Se5$x zDA^R`WQF<&%2JS*6@jPn0gP}^wK3t?zvP@!uf$@8 zi3kUcRi42%>Wh$|P=;6odN_90WsHygf_YwKJh6T1soF z>{Wak`{hVNKAu-rM(?j=-q25uVe~c47*G14O1wfY)F<;}0)Mbu zRCuqeAOyJapCi;0g3a( z7g-64z<^nkP*|>OmPyEbP?8lk6buN;5)r&i4d}hX+Y*@ZgB{R>r9mjsG>#ywOHcU0 zND$1aaTgOos4iLQKOTT~Y4i>1%^=uel_+_5a=IlS=Q?Pa+`N#hU71|$l4+4-cf#KI z21w7xuViSUHS|P=MpV0K!hfEiTs$G@HfbP>;XMmNMtw1(;n7xTvS>?-l zW*7}aBc={1a0qf=fW%+IV850}u-X6)P2DAf|sU1^rH`yGg zB*}tT5V-)WaI%-zQlyWh^#bj+8#741BOkqQK~|h<;z0HIU*wrC3^NrK6)ZVEqIDbV z5!jJTeTI+0`c#d^R{UfL3e_ve;3lZjaX1E9&;2nFrr~vZ;rC6$&XmzMz(^0|;g)vD z+}zg#$)*%jlJ-2`tdo*Tb?vjyyRwe7(crus7OWE=N7*w%hC;tDU#n8n)SN z_*)cQ#Bw7;xAN4xws9_-)mm?_v)0kiHr~!z-43o{*xu-Av^8w?c(?|a8_!2+=e9&) OFB# diff --git a/src/calibre/ebooks/oeb/display/paged.coffee b/src/calibre/ebooks/oeb/display/paged.coffee index 2985179706..07d4ae33e8 100644 --- a/src/calibre/ebooks/oeb/display/paged.coffee +++ b/src/calibre/ebooks/oeb/display/paged.coffee @@ -85,15 +85,16 @@ class PagedDisplay tmp.style.position = 'absolute' document.body.appendChild(tmp) for sheet in document.styleSheets - for rule in sheet.rules - if rule.type == CSSRule.PAGE_RULE - for prop in ['left', 'top', 'bottom', 'right'] - val = rule.style.getPropertyValue('margin-'+prop) - if val - tmp.style.height = val - pxval = parseInt(window.getComputedStyle(tmp).height) - if not isNaN(pxval) - this.document_margins[prop] = pxval + if sheet.rules + for rule in sheet.rules + if rule.type == CSSRule.PAGE_RULE + for prop in ['left', 'top', 'bottom', 'right'] + val = rule.style.getPropertyValue('margin-'+prop) + if val + tmp.style.height = val + pxval = parseInt(window.getComputedStyle(tmp).height) + if not isNaN(pxval) + this.document_margins[prop] = pxval document.body.removeChild(tmp) if this.document_margins.left is null val = parseInt(window.getComputedStyle(document.body).marginLeft) @@ -232,14 +233,15 @@ class PagedDisplay # Convert page-breaks to column-breaks for sheet in document.styleSheets - for rule in sheet.rules - if rule.type == CSSRule.STYLE_RULE - for prop in ['page-break-before', 'page-break-after', 'page-break-inside'] - val = rule.style.getPropertyValue(prop) - if val - cprop = '-webkit-column-' + prop.substr(5) - priority = rule.style.getPropertyPriority(prop) - rule.style.setProperty(cprop, val, priority) + if sheet.rules + for rule in sheet.rules + if rule.type == CSSRule.STYLE_RULE + for prop in ['page-break-before', 'page-break-after', 'page-break-inside'] + val = rule.style.getPropertyValue(prop) + if val + cprop = '-webkit-column-' + prop.substr(5) + priority = rule.style.getPropertyPriority(prop) + rule.style.setProperty(cprop, val, priority) if first_layout # Because of a bug in webkit column mode, svg elements defined with diff --git a/src/calibre/ebooks/oeb/polish/preview.coffee b/src/calibre/ebooks/oeb/polish/preview.coffee index 7e0652cbc5..9abca8beb4 100644 --- a/src/calibre/ebooks/oeb/polish/preview.coffee +++ b/src/calibre/ebooks/oeb/polish/preview.coffee @@ -214,7 +214,7 @@ get_matched_css = (node, is_ancestor, all_properties) -> node_style = window.getComputedStyle(node) for sheet, sheet_index in document.styleSheets - if sheet.disabled + if sheet.disabled or not sheet.cssRules continue process_rules(node, sheet.cssRules, [], sheet, sheet_index, matching_selectors, all_properties, node_style, is_ancestor, ans) @@ -354,4 +354,3 @@ class PreviewIntegration window.calibre_preview_integration = new PreviewIntegration() window.onload = window.calibre_preview_integration.onload -