Skip to content

Instantly share code, notes, and snippets.

@mrazzari
Created June 1, 2012 20:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mrazzari/2855085 to your computer and use it in GitHub Desktop.
Save mrazzari/2855085 to your computer and use it in GitHub Desktop.
Workaround for html5shiv's issue 58

This is a minified html5shiv-printshiv.js including @keeganstreet's workaround for issue #58.

(function(j,c){function q(a,b){var e=a.createElement("p"),f=a.getElementsByTagName("head")[0]||a.documentElement;e.innerHTML="x<style>"+b+"</style>";return f.insertBefore(e.lastChild,f.firstChild)}function m(){var a=d.elements;return"string"==typeof a?a.split(" "):a}function n(a){var b=r[a[s]];b||(b={},o++,a[s]=o,r[o]=b);return b}function t(a,b,e){b||(b=c);if(k)return b.createElement(a);e=e||n(b);b=e.cache[a]?e.cache[a].cloneNode():x.test(a)?(e.cache[a]=e.createElem(a)).cloneNode():e.createElem(a);
return b.canHaveChildren&&!y.test(a)?e.frag.appendChild(b):b}function z(a,b){if(!b.cache)b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag();a.createElement=function(a){return!d.shivMethods?b.createElem(a):t(a)};a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/\w+/g,function(a){b.createElem(a);b.frag.createElement(a);return'c("'+a+'")'})+");return n}")(d,b.frag)}function u(a){a||
(a=c);var b=n(a);if(d.shivCSS&&!v&&!b.hasCSS)b.hasCSS=!!q(a,"article,aside,figcaption,figure,footer,header,hgroup,nav,section{display:block}mark{background:#FF0;color:#000}");k||z(a,b);return a}function A(a){for(var b,e=a.attributes,f=e.length,c=a.ownerDocument.createElement(l+":"+a.nodeName);f--;)b=e[f],b.specified&&c.setAttribute(b.nodeName,b.nodeValue);c.style.cssText=a.style.cssText;return c}function B(a){for(var b=a.length;b--;)a[b].removeNode()}function w(a){var b,e,c=a.namespaces,d=a.parentWindow;
if(!C||a.printShived)return a;"undefined"==typeof c[l]&&c.add(l);d.attachEvent("onbeforeprint",function(){var c,d,h;h=a.styleSheets;for(var i=[],g=h.length,f=Array(g);g--;)f[g]=h[g];for(;h=f.pop();)if(!h.disabled&&D.test(h.media)){try{c=h.imports,d=c.length}catch(k){d=0}for(g=0;g<d;g++)f.push(c[g]);try{i.push(h.cssText)}catch(j){}}c=i.reverse().join("").split("{");d=c.length;g=RegExp("(^|[\\s,>+~])("+m().join("|")+")(?=[[\\s,>+~#.:]|$)","gi");for(f="$1"+l+"\\:$2";d--;)i=c[d]=c[d].split("}"),i[i.length-
1]=i[i.length-1].replace(g,f),c[d]=i.join("}");i=c.join("{");d=a.getElementsByTagName("*");g=d.length;f=RegExp("^(?:"+m().join("|")+")$","i");for(h=[];g--;)c=d[g],f.test(c.nodeName)&&h.push(c.applyElement(A(c)));e=h;b=q(a,i)});d.attachEvent("onafterprint",function(){B(e);setTimeout(function(){b.removeNode(!0)},500)});a.printShived=!0;return a}var p=j.html5||{},y=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,x=/^<|^(?:a|b|button|code|div|fieldset|form|h1|h2|h3|h4|h5|h6|i|iframe|img|input|label|li|link|ol|option|p|param|q|script|select|span|strong|style|table|tbody|td|textarea|tfoot|th|thead|tr|ul)$/i,
v,s="_html5shiv",o=0,r={},k;(function(){var a=c.createElement("a");a.innerHTML="<xyz></xyz>";v="hidden"in a;if(!(a=1==a.childNodes.length))a:{try{c.createElement("a")}catch(b){a=!0;break a}a=c.createDocumentFragment();a="undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}k=a})();var d={elements:p.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",
shivCSS:!1!==p.shivCSS,supportsUnknownElements:k,shivMethods:!1!==p.shivMethods,type:"default",shivDocument:u,createElement:t,createDocumentFragment:function(a,b){a||(a=c);if(k)return a.createDocumentFragment();for(var b=b||n(a),d=b.frag.cloneNode(),f=0,j=m(),l=j.length;f<l;f++)d.createElement(j[f]);return d}};j.html5=d;u(c);var D=/^$|\b(?:all|print)\b/,l="html5shiv",C=!k&&function(){var a=c.documentElement;return!("undefined"==typeof c.namespaces||"undefined"==typeof c.parentWindow||"undefined"==
typeof a.applyElement||"undefined"==typeof a.removeNode||"undefined"==typeof j.attachEvent)}();d.type+=" print";d.shivPrint=w;w(c)})(this,document);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment