UNPKG

@clayui/css

Version:

Liferay's web implementation of the Lexicon Design Language

256 lines (191 loc) 6.41 kB
!(function (root, factory) { 'function' == typeof define && define.amd // AMD. Register as an anonymous module unless amdModuleId is set ? define([], function () { return (root.svg4everybody = factory()); }) : 'object' == typeof module && module.exports // Node. Does not work with strict CommonJS, but ? // only CommonJS-like environments that support module.exports, // like Node. (module.exports = factory()) : (root.svg4everybody = factory()); })(this, function () { /*! svg4everybody v2.1.9 | github.com/jonathantneal/svg4everybody */ function embed(parent, svg, target, use) { // if the target exists if (target) { // create a document fragment to hold the contents of the target var fragment = document.createDocumentFragment(), viewBox = !svg.hasAttribute('viewBox') && target.getAttribute('viewBox'); // conditionally set the viewBox on the svg viewBox && svg.setAttribute('viewBox', viewBox); // copy the contents of the clone into the fragment for ( // clone the target var clone = document.importNode ? document.importNode(target, !0) : target.cloneNode(!0), g = document.createElementNS( svg.namespaceURI || 'http://www.w3.org/2000/svg', 'g' ); clone.childNodes.length; ) { g.appendChild(clone.firstChild); } if (use) { for (var i = 0; use.attributes.length > i; i++) { var attr = use.attributes[i]; 'xlink:href' !== attr.name && 'href' !== attr.name && g.setAttribute(attr.name, attr.value); } } fragment.appendChild(g), // append the fragment into the svg parent.appendChild(fragment); } } function loadreadystatechange(xhr, use) { // listen to changes in the request (xhr.onreadystatechange = function () { // if the request is ready if (4 === xhr.readyState) { // get the cached html document var cachedDocument = xhr._cachedDocument; // ensure the cached html document based on the xhr response cachedDocument || ((cachedDocument = xhr._cachedDocument = document.implementation.createHTMLDocument('')), (cachedDocument.body.innerHTML = xhr.responseText), // ensure domains are the same, otherwise we'll have issues appending the // element in IE 11 cachedDocument.domain !== document.domain && (cachedDocument.domain = document.domain), (xhr._cachedTarget = {})), // clear the xhr embeds list and embed each item xhr._embeds.splice(0).map(function (item) { // get the cached target var target = xhr._cachedTarget[item.id]; // ensure the cached target target || (target = xhr._cachedTarget[item.id] = cachedDocument.getElementById(item.id)), // embed the target into the svg embed(item.parent, item.svg, target, use); }); } }), // test the ready state change immediately xhr.onreadystatechange(); } function svg4everybody(rawopts) { function oninterval() { // if all <use>s in the array are being bypassed, don't proceed. if ( numberOfSvgUseElementsToBypass && uses.length - numberOfSvgUseElementsToBypass <= 0 ) { return void requestAnimationFrame(oninterval, 67); } // if there are <use>s to process, proceed. // reset the bypass counter, since the counter will be incremented for every bypassed element, // even ones that were counted before. numberOfSvgUseElementsToBypass = 0; // while the index exists in the live <use> collection for ( // get the cached <use> index var index = 0; index < uses.length; ) { // get the current <use> var use = uses[index], parent = use.parentNode, svg = getSVGAncestor(parent), src = use.getAttribute('xlink:href') || use.getAttribute('href'); if ( (!src && opts.attributeName && (src = use.getAttribute(opts.attributeName)), svg && src) ) { if (polyfill) { if (!opts.validate || opts.validate(src, svg, use)) { // remove the <use> element parent.removeChild(use); // parse the src and get the url and id var srcSplit = src.split('#'), url = srcSplit.shift(), id = srcSplit.join('#'); // if the link is external if (url.length) { // get the cached xhr request var xhr = requests[url]; // ensure the xhr request exists xhr || ((xhr = requests[url] = new XMLHttpRequest()), xhr.open('GET', url), xhr.send(), (xhr._embeds = [])), // add the svg and id as an item to the xhr embeds list xhr._embeds.push({ parent: parent, svg: svg, id: id, }), // prepare the xhr ready state change event loadreadystatechange(xhr, use); } else { // embed the local id into the svg embed( parent, svg, document.getElementById(id), use ); } } else { // increase the index when the previous value was not "valid" ++index, ++numberOfSvgUseElementsToBypass; } } } else { // increase the index when the previous value was not "valid" ++index; } } // continue the interval requestAnimationFrame(oninterval, 67); } var polyfill, opts = Object(rawopts), newerIEUA = /\bTrident\/[567]\b|\bMSIE (?:9|10)\.0\b/, webkitUA = /\bAppleWebKit\/(\d+)\b/, olderEdgeUA = /\bEdge\/12\.(\d+)\b/, edgeUA = /\bEdge\/.(\d+)\b/, inIframe = window.top !== window.self; polyfill = 'polyfill' in opts ? opts.polyfill : newerIEUA.test(navigator.userAgent) || (navigator.userAgent.match(olderEdgeUA) || [])[1] < 10547 || (navigator.userAgent.match(webkitUA) || [])[1] < 537 || (edgeUA.test(navigator.userAgent) && inIframe); // create xhr requests object var requests = {}, requestAnimationFrame = window.requestAnimationFrame || setTimeout, uses = document.getElementsByTagName('use'), numberOfSvgUseElementsToBypass = 0; // conditionally start the interval if the polyfill is active polyfill && oninterval(); } function getSVGAncestor(node) { for ( var svg = node; 'svg' !== svg.nodeName.toLowerCase() && (svg = svg.parentNode); ) {} return svg; } return svg4everybody; });