5.0.210版本发布
							parent
							
								
									2c37775502
								
							
						
					
					
						commit
						5574747cde
					
				| 
						 | 
				
			
			@ -0,0 +1,14 @@
 | 
			
		|||
#(安全测评需要开启)
 | 
			
		||||
# enabled true 启用/false 不启用;
 | 
			
		||||
# includes:需要处理的url标志字符串 逗号隔开 ,默认为空则是全部要处理; 
 | 
			
		||||
# excludes:不需要处理的url标志字符串 逗号隔开 默认为空; 
 | 
			
		||||
# urlPatterns: 需要xss过滤器处理的url 逗号隔开 默认是 :/*
 | 
			
		||||
# excludeUrl: 某个url无需xss的过滤
 | 
			
		||||
#
 | 
			
		||||
security:
 | 
			
		||||
  xss:
 | 
			
		||||
#    enabled: true
 | 
			
		||||
    includes: 
 | 
			
		||||
    excludes: img
 | 
			
		||||
    urlPatterns: /*
 | 
			
		||||
    excludeUrl: /manager/coremodeldesign/modify,/manager/coredatasource/post,/manager/coredatasource/processModel
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,311 @@
 | 
			
		|||
 | 
			
		||||
layui.define(function (exports) {
 | 
			
		||||
	var $ = layui.$,
 | 
			
		||||
		layer = layui.layer,
 | 
			
		||||
		element = layui.element,
 | 
			
		||||
		setter = layui.setter,
 | 
			
		||||
		message = new Messenger('index', 'kdayunmanager');
 | 
			
		||||
	var common = {
 | 
			
		||||
		/**
 | 
			
		||||
		 * 抛出一个异常错误信息
 | 
			
		||||
		 * @param {String} msg
 | 
			
		||||
		 */
 | 
			
		||||
		throwError: function (msg) {
 | 
			
		||||
			throw new Error(msg);
 | 
			
		||||
			return;
 | 
			
		||||
		},
 | 
			
		||||
		/**
 | 
			
		||||
		 * 弹出一个错误提示
 | 
			
		||||
		 * @param {String} msg
 | 
			
		||||
		 */
 | 
			
		||||
		msgError: function (msg) {
 | 
			
		||||
			layer.msg(msg, {
 | 
			
		||||
				icon: 5
 | 
			
		||||
			});
 | 
			
		||||
			return;
 | 
			
		||||
		},
 | 
			
		||||
		/**
 | 
			
		||||
		 * 给url增加参数
 | 
			
		||||
		 * @param {*} url url
 | 
			
		||||
		 * @param {*} obj  参数对象
 | 
			
		||||
		 * @param {*} exclude  排除的属性名的正则表达式
 | 
			
		||||
		 * @returns 返回url
 | 
			
		||||
		 */
 | 
			
		||||
		setUrlParamObj: function (url, obj, exclude) {
 | 
			
		||||
			for (var pro in obj) {
 | 
			
		||||
				if (exclude) {
 | 
			
		||||
					if (!exclude.test(pro)) {
 | 
			
		||||
						url = common.setUrlParam(url, pro, obj[pro]);
 | 
			
		||||
					}
 | 
			
		||||
				} else {
 | 
			
		||||
					url = common.setUrlParam(url, pro, obj[pro]);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			return url;
 | 
			
		||||
		},
 | 
			
		||||
		/**
 | 
			
		||||
		 * 给url增加参数
 | 
			
		||||
		 * @param {*} url URL
 | 
			
		||||
		 * @param {*} name 参数名
 | 
			
		||||
		 * @param {*} value  参数值
 | 
			
		||||
		 * @returns 返回url
 | 
			
		||||
		 */
 | 
			
		||||
		setUrlParam: function (url, name, value) {
 | 
			
		||||
			var localUrl = url;
 | 
			
		||||
			if (value != null) {
 | 
			
		||||
				//增加或修改url参数
 | 
			
		||||
				//判断URL是否带有?号
 | 
			
		||||
				if (localUrl.indexOf("?") < 0) {
 | 
			
		||||
					//判断url是否有#
 | 
			
		||||
					var a = localUrl.indexOf("#");
 | 
			
		||||
					if (a < 0) {
 | 
			
		||||
						return localUrl + "?" + name + "=" + value;
 | 
			
		||||
					} else {
 | 
			
		||||
						return localUrl.substring(0, a) + "?" + name + "=" + value + localUrl.substring(a);
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
				} else {
 | 
			
		||||
					var regex = new RegExp("([\\?&]" + name + "=)[^&#]*");
 | 
			
		||||
					if (regex.test(localUrl)) {
 | 
			
		||||
						return localUrl.replace(regex, "$1" + value);
 | 
			
		||||
					}
 | 
			
		||||
					else {
 | 
			
		||||
						var a = localUrl.indexOf("#");
 | 
			
		||||
						if (a < 0) {
 | 
			
		||||
							return localUrl + "&" + name + "=" + value;
 | 
			
		||||
						} else {
 | 
			
		||||
							return localUrl.substring(0, a) + "&" + name + "=" + value + localUrl.substring(a);
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			} else {
 | 
			
		||||
				//删除url的参数
 | 
			
		||||
				var regex = new RegExp("([\\?&])" + name + "=[^&#]*(&?)");
 | 
			
		||||
				if (regex.test(localUrl)) {
 | 
			
		||||
					return localUrl.replace(regex, function (m, p1, p2) {
 | 
			
		||||
						if (p1 == "?") {
 | 
			
		||||
							return p2 == "&" ? "?" : "";
 | 
			
		||||
						} else {
 | 
			
		||||
							return p2;
 | 
			
		||||
						}
 | 
			
		||||
					});
 | 
			
		||||
				} else {
 | 
			
		||||
					return localUrl;
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		},
 | 
			
		||||
		tabsPage: {},
 | 
			
		||||
 | 
			
		||||
		setPrevAndNext: function () {
 | 
			
		||||
			var $li = $('.layui-tab-title').children('li')
 | 
			
		||||
				, sumwidth = 0
 | 
			
		||||
				, totalwidth = $('.layui-tab-title').width();
 | 
			
		||||
			for (var i = 0; i < $li.length; i++) {
 | 
			
		||||
				sumwidth = sumwidth + $li.eq(i).outerWidth();
 | 
			
		||||
			}
 | 
			
		||||
			if (sumwidth > totalwidth) {
 | 
			
		||||
				$('.layadmin-pagetabs').css({ "padding-left": "40px", "padding-right": "80px" });
 | 
			
		||||
				$('.layui-icon-prev').show();
 | 
			
		||||
				$('.layui-icon-next').show();
 | 
			
		||||
			} else {
 | 
			
		||||
				$('.layadmin-pagetabs').css({ "padding-left": "0px", "padding-right": "40px" });
 | 
			
		||||
				$('.layui-icon-prev').hide();
 | 
			
		||||
				$('.layui-icon-next').hide();
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		/**
 | 
			
		||||
		 * 打开tab标签页
 | 
			
		||||
		 * @param {*} url 页签的URL
 | 
			
		||||
		 * @param {*} text 页签的标题
 | 
			
		||||
		 * @param {*} resid 资源id
 | 
			
		||||
		 * @param {*} param 传递的参数
 | 
			
		||||
		 * @param {*} callback 完成回调
 | 
			
		||||
		 */
 | 
			
		||||
		openTabsPage: function (url, text, resid, param, callback) {
 | 
			
		||||
			//遍历页签选项卡
 | 
			
		||||
			var matchTo, tabs = $('#LAY_app_tabsheader>li'),
 | 
			
		||||
				path = url.replace(/(^http(s*):)|(\?[\s\S]*$)/g, ''),
 | 
			
		||||
				tempresid = resid ? resid : url;
 | 
			
		||||
			if (url.indexOf('isnewtab=1') > -1) {
 | 
			
		||||
				window.open(url, "_blank");
 | 
			
		||||
				callback && callback();
 | 
			
		||||
				return;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			url = common.setUrlParamObj(url, param, /tokenId/)
 | 
			
		||||
 | 
			
		||||
			tabs.each(function (index) {
 | 
			
		||||
				var li = $(this),
 | 
			
		||||
					layid = li.attr('lay-id');
 | 
			
		||||
				if (layid === tempresid) {
 | 
			
		||||
					matchTo = true;
 | 
			
		||||
					common.tabsPage.index = index;
 | 
			
		||||
				}
 | 
			
		||||
			});
 | 
			
		||||
			var APP_BODY = '#LAY_app_body',
 | 
			
		||||
				FILTER_TAB_TBAS = 'layadmin-layout-tabs',
 | 
			
		||||
				text = text || '新标签页';
 | 
			
		||||
			//如果未在选项卡中匹配到,则追加选项卡
 | 
			
		||||
			if (!matchTo) {
 | 
			
		||||
				$(APP_BODY).append([
 | 
			
		||||
					'<div class="layadmin-tabsbody-item layui-show">',
 | 
			
		||||
					'<iframe src="' + url + '" frameborder="0" menuid=' + resid + ' class="layadmin-iframe" name="layadmin-iframe"></iframe>',
 | 
			
		||||
					'</div>'
 | 
			
		||||
				].join(''));
 | 
			
		||||
				common.tabsPage.index = tabs.length;
 | 
			
		||||
				element.tabAdd(FILTER_TAB_TBAS, {
 | 
			
		||||
					title: '<span>' + text + '</span>',
 | 
			
		||||
					id: resid ? resid : url,
 | 
			
		||||
					attr: path
 | 
			
		||||
				});
 | 
			
		||||
				common.setPrevAndNext();
 | 
			
		||||
				$('.layadmin-tabsbody-shade').show();
 | 
			
		||||
			}
 | 
			
		||||
			var $iframe
 | 
			
		||||
			if (path.indexOf('/coremodelshow') != -1 && resid) {
 | 
			
		||||
				$iframe = $(APP_BODY).find('iframe[menuid="' + resid + '"]');
 | 
			
		||||
			}
 | 
			
		||||
			else {
 | 
			
		||||
				$iframe = $(APP_BODY).find('iframe[src="' + url + '"]');
 | 
			
		||||
			}
 | 
			
		||||
			$iframe && !$iframe.attr('loaded') && ($('.layadmin-tabsbody-shade').show()) && $iframe.load(function () {
 | 
			
		||||
				// $('.layadmin-tabsbody-shade').fadeOut('600');
 | 
			
		||||
				$iframe.attr('loaded', 'true')
 | 
			
		||||
			});
 | 
			
		||||
			callback && callback();
 | 
			
		||||
 | 
			
		||||
			//执行 {setter.MOD_NAME}.tabsPage 下的事件
 | 
			
		||||
			layui.event.call(this, setter.MOD_NAME, 'tabsPage({*})', {
 | 
			
		||||
				url: tempresid,
 | 
			
		||||
				text: text
 | 
			
		||||
			});
 | 
			
		||||
		},
 | 
			
		||||
		/**
 | 
			
		||||
		 * xss 转义
 | 
			
		||||
		 * @param {*} html 
 | 
			
		||||
		 */
 | 
			
		||||
		escape: function (html) {
 | 
			
		||||
			return String(html || '').replace(/&(?!#?[a-zA-Z0-9]+;)/g, '&')
 | 
			
		||||
				.replace(/</g, '<').replace(/>/g, '>')
 | 
			
		||||
				.replace(/'/g, ''').replace(/"/g, '"');
 | 
			
		||||
		},
 | 
			
		||||
		/**
 | 
			
		||||
		 * 打开Layer页
 | 
			
		||||
		 * @param {*} pageCoinfg 
 | 
			
		||||
		 * @param {*} params 
 | 
			
		||||
		 * @param {*} successCallback 页面完成打开回调
 | 
			
		||||
		 */
 | 
			
		||||
		openLayerPage: function (pageCoinfg, params, successCallback) {
 | 
			
		||||
			var pageId = params.__pageId;
 | 
			
		||||
			//页面创建加载完成
 | 
			
		||||
			pageId && common.onForm(pageId, 'onPageLoad', function (msg) {
 | 
			
		||||
				let iframes = top.window.document.getElementsByTagName("iframe");
 | 
			
		||||
				for (var i = 0; i < iframes.length; i++) {
 | 
			
		||||
					var iframe = iframes[i];
 | 
			
		||||
					if (iframe.contentWindow.location.href.indexOf('=' + pageId) != -1) {
 | 
			
		||||
						common.sendTo(pageId, 'onSuccess')
 | 
			
		||||
						break;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			})
 | 
			
		||||
			var p = $.extend(pageCoinfg, {
 | 
			
		||||
				type: 2,
 | 
			
		||||
				area: pageCoinfg.area || ['420px', '240px'],
 | 
			
		||||
				success: () => {
 | 
			
		||||
					successCallback && successCallback();
 | 
			
		||||
				}
 | 
			
		||||
				, yes: () => {
 | 
			
		||||
					pageId && common.sendTo(pageId, 'onYes')
 | 
			
		||||
				}
 | 
			
		||||
				, no: () => {
 | 
			
		||||
					pageId && common.sendTo(pageId, 'onCancel')
 | 
			
		||||
				}
 | 
			
		||||
				, end: () => {
 | 
			
		||||
					pageId && common.sendTo(pageId, 'onEnd')
 | 
			
		||||
				}
 | 
			
		||||
				, onCanClose: () => {
 | 
			
		||||
					return pageId && common.sendTo(pageId, 'onCanClose')
 | 
			
		||||
				}
 | 
			
		||||
				, onClosed: () => {
 | 
			
		||||
					pageId && common.sendTo(pageId, 'onClosed')
 | 
			
		||||
				}, full: () => {
 | 
			
		||||
					pageId && common.sendTo(pageId, 'onFull')
 | 
			
		||||
				}, min: () => {
 | 
			
		||||
					pageId && common.sendTo(pageId, 'onMin')
 | 
			
		||||
				}, resizing: () => {
 | 
			
		||||
					pageId && common.sendTo(pageId, 'onResizing')
 | 
			
		||||
				}, moveEnd: () => {
 | 
			
		||||
					pageId && common.sendTo(pageId, 'onMoveEnd')
 | 
			
		||||
				}, restore: () => {
 | 
			
		||||
					pageId && common.sendTo(pageId, 'onRestore')
 | 
			
		||||
				}
 | 
			
		||||
			});
 | 
			
		||||
			layer.open(p);
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		/**
 | 
			
		||||
		 * 监听消息(不管来源哪里)
 | 
			
		||||
		 * @param {*} msg  消息标识常量
 | 
			
		||||
		 * @param {*} callback  回调 callback(msg)
 | 
			
		||||
		 */
 | 
			
		||||
		on: function (msg, callback) {
 | 
			
		||||
			return message.on(msg, callback)
 | 
			
		||||
		},
 | 
			
		||||
		/**
 | 
			
		||||
		 * 监听消息(只管来源fromHandle 的消息)
 | 
			
		||||
		 * @param fromHandle 消息来源目标的句柄全局唯一
 | 
			
		||||
		 * @param {*} msg  消息标识常量
 | 
			
		||||
		 * @param {*} callback  回调 callback(msg)
 | 
			
		||||
		 */
 | 
			
		||||
		onForm: function (fromHandle, msg, callback) {
 | 
			
		||||
			if (!fromHandle) {
 | 
			
		||||
				throw new Error("fromHandle参数不允许为空")
 | 
			
		||||
			}
 | 
			
		||||
			return message.onFrom(fromHandle, msg, callback)
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
		/**
 | 
			
		||||
		 * 给具体的目标发送消息
 | 
			
		||||
		 * @param {*} toHandle  目标句柄全局唯一
 | 
			
		||||
		 * @param {*} msg  消息标识常量
 | 
			
		||||
		 * @param {*} params 附带的消息信息
 | 
			
		||||
		 */
 | 
			
		||||
		sendTo: function (toHandle, msg, params) {
 | 
			
		||||
			if (!toHandle) {
 | 
			
		||||
				throw new Error("toHandle参数不允许为空")
 | 
			
		||||
			}
 | 
			
		||||
			return message.sendTo(toHandle, msg, params);
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
		/**
 | 
			
		||||
		 * 本iframe内给所有的目标发送消息
 | 
			
		||||
		 * @param {*} msg  消息标识常量
 | 
			
		||||
		 * @param {*} params  附带的消息信息
 | 
			
		||||
		 */
 | 
			
		||||
		send: function (msg, params) {
 | 
			
		||||
			var msgobj = {
 | 
			
		||||
				msg: msg,
 | 
			
		||||
				params: params
 | 
			
		||||
			}
 | 
			
		||||
			return message.send(msgobj);
 | 
			
		||||
		},
 | 
			
		||||
		/**
 | 
			
		||||
		 * 跨iframe给所有的目标发送消息
 | 
			
		||||
		 * @param {*} msg  消息标识常量
 | 
			
		||||
		 * @param {*} params  附带的消息信息
 | 
			
		||||
		 */
 | 
			
		||||
		broadcast: function (msg, params) {
 | 
			
		||||
			var msgobj = {
 | 
			
		||||
				msg: msg,
 | 
			
		||||
				params: params
 | 
			
		||||
			}
 | 
			
		||||
			return message.broadcast(msgobj);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	//对外暴露的接口
 | 
			
		||||
	exports('common', common);
 | 
			
		||||
});
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| 
						 | 
				
			
			@ -0,0 +1,2 @@
 | 
			
		|||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1651567902828" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2067" width="32" height="32" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css">@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff2?t=1630033759944") format("woff2"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff?t=1630033759944") format("woff"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.ttf?t=1630033759944") format("truetype"); }
 | 
			
		||||
</style></defs><path d="M384 912h496c17.7 0 32-14.3 32-32V340H384v572zM880 112H384v164h528V144c0-17.7-14.3-32-32-32zM112 144v736c0 17.7 14.3 32 32 32h176V112H144c-17.7 0-32 14.3-32 32z" p-id="2068"></path></svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 877 B  | 
| 
						 | 
				
			
			@ -0,0 +1,2 @@
 | 
			
		|||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1651568047924" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6840" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32"><defs><style type="text/css">@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff2?t=1630033759944") format("woff2"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff?t=1630033759944") format("woff"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.ttf?t=1630033759944") format("truetype"); }
 | 
			
		||||
</style></defs><path d="M938.666667 426.666667v426.666666a42.666667 42.666667 0 0 1-42.666667 42.666667H128a42.666667 42.666667 0 0 1-42.666667-42.666667V426.666667h853.333334z m-42.666667-298.666667a42.666667 42.666667 0 0 1 42.666667 42.666667v170.666666H85.333333V170.666667a42.666667 42.666667 0 0 1 42.666667-42.666667h768z" p-id="6841"></path></svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 1021 B  | 
| 
						 | 
				
			
			@ -0,0 +1,18 @@
 | 
			
		|||
!function(t,n){"object"==typeof exports?module.exports=exports=n():"function"==typeof define&&define.amd?define([],n):t.CryptoJS=n()}(this,function(){var t=t||function(t,n){var i=Object.create||function(){function t(){}return function(n){var i;return t.prototype=n,i=new t,t.prototype=null,i}}(),e={},r=e.lib={},o=r.Base=function(){return{extend:function(t){var n=i(this);return t&&n.mixIn(t),n.hasOwnProperty("init")&&this.init!==n.init||(n.init=function(){n.$super.init.apply(this,arguments)}),n.init.prototype=n,n.$super=this,n},create:function(){var t=this.extend();return t.init.apply(t,arguments),t},init:function(){},mixIn:function(t){for(var n in t)t.hasOwnProperty(n)&&(this[n]=t[n]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function(){return this.init.prototype.extend(this)}}}(),s=r.WordArray=o.extend({init:function(t,i){t=this.words=t||[],i!=n?this.sigBytes=i:this.sigBytes=4*t.length},toString:function(t){return(t||c).stringify(this)},concat:function(t){var n=this.words,i=t.words,e=this.sigBytes,r=t.sigBytes;if(this.clamp(),e%4)for(var o=0;o<r;o++){var s=i[o>>>2]>>>24-o%4*8&255;n[e+o>>>2]|=s<<24-(e+o)%4*8}else for(var o=0;o<r;o+=4)n[e+o>>>2]=i[o>>>2];return this.sigBytes+=r,this},clamp:function(){var n=this.words,i=this.sigBytes;n[i>>>2]&=4294967295<<32-i%4*8,n.length=t.ceil(i/4)},clone:function(){var t=o.clone.call(this);return t.words=this.words.slice(0),t},random:function(n){for(var i,e=[],r=function(n){var n=n,i=987654321,e=4294967295;return function(){i=36969*(65535&i)+(i>>16)&e,n=18e3*(65535&n)+(n>>16)&e;var r=(i<<16)+n&e;return r/=4294967296,r+=.5,r*(t.random()>.5?1:-1)}},o=0;o<n;o+=4){var a=r(4294967296*(i||t.random()));i=987654071*a(),e.push(4294967296*a()|0)}return new s.init(e,n)}}),a=e.enc={},c=a.Hex={stringify:function(t){for(var n=t.words,i=t.sigBytes,e=[],r=0;r<i;r++){var o=n[r>>>2]>>>24-r%4*8&255;e.push((o>>>4).toString(16)),e.push((15&o).toString(16))}return e.join("")},parse:function(t){for(var n=t.length,i=[],e=0;e<n;e+=2)i[e>>>3]|=parseInt(t.substr(e,2),16)<<24-e%8*4;return new s.init(i,n/2)}},u=a.Latin1={stringify:function(t){for(var n=t.words,i=t.sigBytes,e=[],r=0;r<i;r++){var o=n[r>>>2]>>>24-r%4*8&255;e.push(String.fromCharCode(o))}return e.join("")},parse:function(t){for(var n=t.length,i=[],e=0;e<n;e++)i[e>>>2]|=(255&t.charCodeAt(e))<<24-e%4*8;return new s.init(i,n)}},f=a.Utf8={stringify:function(t){try{return decodeURIComponent(escape(u.stringify(t)))}catch(t){throw new Error("Malformed UTF-8 data")}},parse:function(t){return u.parse(unescape(encodeURIComponent(t)))}},h=r.BufferedBlockAlgorithm=o.extend({reset:function(){this._data=new s.init,this._nDataBytes=0},_append:function(t){"string"==typeof t&&(t=f.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(n){var i=this._data,e=i.words,r=i.sigBytes,o=this.blockSize,a=4*o,c=r/a;c=n?t.ceil(c):t.max((0|c)-this._minBufferSize,0);var u=c*o,f=t.min(4*u,r);if(u){for(var h=0;h<u;h+=o)this._doProcessBlock(e,h);var p=e.splice(0,u);i.sigBytes-=f}return new s.init(p,f)},clone:function(){var t=o.clone.call(this);return t._data=this._data.clone(),t},_minBufferSize:0}),p=(r.Hasher=h.extend({cfg:o.extend(),init:function(t){this.cfg=this.cfg.extend(t),this.reset()},reset:function(){h.reset.call(this),this._doReset()},update:function(t){return this._append(t),this._process(),this},finalize:function(t){t&&this._append(t);var n=this._doFinalize();return n},blockSize:16,_createHelper:function(t){return function(n,i){return new t.init(i).finalize(n)}},_createHmacHelper:function(t){return function(n,i){return new p.HMAC.init(t,i).finalize(n)}}}),e.algo={});return e}(Math);return t});
 | 
			
		||||
//# sourceMappingURL=core.min.js.map
 | 
			
		||||
!function(e,t,i){"object"==typeof exports?module.exports=exports=t(require("./core.min"),require("./sha1.min"),require("./hmac.min")):"function"==typeof define&&define.amd?define(["./core.min","./sha1.min","./hmac.min"],t):t(e.CryptoJS)}(this,function(e){return function(){var t=e,i=t.lib,r=i.Base,n=i.WordArray,o=t.algo,a=o.MD5,c=o.EvpKDF=r.extend({cfg:r.extend({keySize:4,hasher:a,iterations:1}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,t){for(var i=this.cfg,r=i.hasher.create(),o=n.create(),a=o.words,c=i.keySize,f=i.iterations;a.length<c;){s&&r.update(s);var s=r.update(e).finalize(t);r.reset();for(var u=1;u<f;u++)s=r.finalize(s),r.reset();o.concat(s)}return o.sigBytes=4*c,o}});t.EvpKDF=function(e,t,i){return c.create(i).compute(e,t)}}(),e.EvpKDF});
 | 
			
		||||
//# sourceMappingURL=evpkdf.min.js.map
 | 
			
		||||
!function(r,e){"object"==typeof exports?module.exports=exports=e(require("./core.min")):"function"==typeof define&&define.amd?define(["./core.min"],e):e(r.CryptoJS)}(this,function(r){return function(){function e(r,e,t){for(var n=[],i=0,o=0;o<e;o++)if(o%4){var f=t[r.charCodeAt(o-1)]<<o%4*2,c=t[r.charCodeAt(o)]>>>6-o%4*2;n[i>>>2]|=(f|c)<<24-i%4*8,i++}return a.create(n,i)}var t=r,n=t.lib,a=n.WordArray,i=t.enc;i.Base64={stringify:function(r){var e=r.words,t=r.sigBytes,n=this._map;r.clamp();for(var a=[],i=0;i<t;i+=3)for(var o=e[i>>>2]>>>24-i%4*8&255,f=e[i+1>>>2]>>>24-(i+1)%4*8&255,c=e[i+2>>>2]>>>24-(i+2)%4*8&255,s=o<<16|f<<8|c,h=0;h<4&&i+.75*h<t;h++)a.push(n.charAt(s>>>6*(3-h)&63));var p=n.charAt(64);if(p)for(;a.length%4;)a.push(p);return a.join("")},parse:function(r){var t=r.length,n=this._map,a=this._reverseMap;if(!a){a=this._reverseMap=[];for(var i=0;i<n.length;i++)a[n.charCodeAt(i)]=i}var o=n.charAt(64);if(o){var f=r.indexOf(o);f!==-1&&(t=f)}return e(r,t,a)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),r.enc.Base64});
 | 
			
		||||
//# sourceMappingURL=enc-base64.min.js.map
 | 
			
		||||
!function(e,t,r){"object"==typeof exports?module.exports=exports=t(require("./core.min"),require("./evpkdf.min")):"function"==typeof define&&define.amd?define(["./core.min","./evpkdf.min"],t):t(e.CryptoJS)}(this,function(e){e.lib.Cipher||function(t){var r=e,i=r.lib,n=i.Base,c=i.WordArray,o=i.BufferedBlockAlgorithm,s=r.enc,a=(s.Utf8,s.Base64),f=r.algo,p=f.EvpKDF,d=i.Cipher=o.extend({cfg:n.extend(),createEncryptor:function(e,t){return this.create(this._ENC_XFORM_MODE,e,t)},createDecryptor:function(e,t){return this.create(this._DEC_XFORM_MODE,e,t)},init:function(e,t,r){this.cfg=this.cfg.extend(r),this._xformMode=e,this._key=t,this.reset()},reset:function(){o.reset.call(this),this._doReset()},process:function(e){return this._append(e),this._process()},finalize:function(e){e&&this._append(e);var t=this._doFinalize();return t},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(){function e(e){return"string"==typeof e?B:x}return function(t){return{encrypt:function(r,i,n){return e(i).encrypt(t,r,i,n)},decrypt:function(r,i,n){return e(i).decrypt(t,r,i,n)}}}}()}),h=(i.StreamCipher=d.extend({_doFinalize:function(){var e=this._process(!0);return e},blockSize:1}),r.mode={}),u=i.BlockCipherMode=n.extend({createEncryptor:function(e,t){return this.Encryptor.create(e,t)},createDecryptor:function(e,t){return this.Decryptor.create(e,t)},init:function(e,t){this._cipher=e,this._iv=t}}),l=h.CBC=function(){function e(e,r,i){var n=this._iv;if(n){var c=n;this._iv=t}else var c=this._prevBlock;for(var o=0;o<i;o++)e[r+o]^=c[o]}var r=u.extend();return r.Encryptor=r.extend({processBlock:function(t,r){var i=this._cipher,n=i.blockSize;e.call(this,t,r,n),i.encryptBlock(t,r),this._prevBlock=t.slice(r,r+n)}}),r.Decryptor=r.extend({processBlock:function(t,r){var i=this._cipher,n=i.blockSize,c=t.slice(r,r+n);i.decryptBlock(t,r),e.call(this,t,r,n),this._prevBlock=c}}),r}(),_=r.pad={},v=_.Pkcs7={pad:function(e,t){for(var r=4*t,i=r-e.sigBytes%r,n=i<<24|i<<16|i<<8|i,o=[],s=0;s<i;s+=4)o.push(n);var a=c.create(o,i);e.concat(a)},unpad:function(e){var t=255&e.words[e.sigBytes-1>>>2];e.sigBytes-=t}},y=(i.BlockCipher=d.extend({cfg:d.cfg.extend({mode:l,padding:v}),reset:function(){d.reset.call(this);var e=this.cfg,t=e.iv,r=e.mode;if(this._xformMode==this._ENC_XFORM_MODE)var i=r.createEncryptor;else{var i=r.createDecryptor;this._minBufferSize=1}this._mode&&this._mode.__creator==i?this._mode.init(this,t&&t.words):(this._mode=i.call(r,this,t&&t.words),this._mode.__creator=i)},_doProcessBlock:function(e,t){this._mode.processBlock(e,t)},_doFinalize:function(){var e=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){e.pad(this._data,this.blockSize);var t=this._process(!0)}else{var t=this._process(!0);e.unpad(t)}return t},blockSize:4}),i.CipherParams=n.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}})),m=r.format={},k=m.OpenSSL={stringify:function(e){var t=e.ciphertext,r=e.salt;if(r)var i=c.create([1398893684,1701076831]).concat(r).concat(t);else var i=t;return i.toString(a)},parse:function(e){var t=a.parse(e),r=t.words;if(1398893684==r[0]&&1701076831==r[1]){var i=c.create(r.slice(2,4));r.splice(0,4),t.sigBytes-=16}return y.create({ciphertext:t,salt:i})}},x=i.SerializableCipher=n.extend({cfg:n.extend({format:k}),encrypt:function(e,t,r,i){i=this.cfg.extend(i);var n=e.createEncryptor(r,i),c=n.finalize(t),o=n.cfg;return y.create({ciphertext:c,key:r,iv:o.iv,algorithm:e,mode:o.mode,padding:o.padding,blockSize:e.blockSize,formatter:i.format})},decrypt:function(e,t,r,i){i=this.cfg.extend(i),t=this._parse(t,i.format);var n=e.createDecryptor(r,i).finalize(t.ciphertext);return n},_parse:function(e,t){return"string"==typeof e?t.parse(e,this):e}}),g=r.kdf={},S=g.OpenSSL={execute:function(e,t,r,i){i||(i=c.random(8));var n=p.create({keySize:t+r}).compute(e,i),o=c.create(n.words.slice(t),4*r);return n.sigBytes=4*t,y.create({key:n,iv:o,salt:i})}},B=i.PasswordBasedCipher=x.extend({cfg:x.cfg.extend({kdf:S}),encrypt:function(e,t,r,i){i=this.cfg.extend(i);var n=i.kdf.execute(r,e.keySize,e.ivSize);i.iv=n.iv;var c=x.encrypt.call(this,e,t,n.key,i);return c.mixIn(n),c},decrypt:function(e,t,r,i){i=this.cfg.extend(i),t=this._parse(t,i.format);var n=i.kdf.execute(r,e.keySize,e.ivSize,t.salt);i.iv=n.iv;var c=x.decrypt.call(this,e,t,n.key,i);return c}})}()});
 | 
			
		||||
//# sourceMappingURL=cipher-core.min.js.map
 | 
			
		||||
!function(e,i){"object"==typeof exports?module.exports=exports=i(require("./core.min")):"function"==typeof define&&define.amd?define(["./core.min"],i):i(e.CryptoJS)}(this,function(e){!function(){var i=e,t=i.lib,n=t.Base,s=i.enc,r=s.Utf8,o=i.algo;o.HMAC=n.extend({init:function(e,i){e=this._hasher=new e.init,"string"==typeof i&&(i=r.parse(i));var t=e.blockSize,n=4*t;i.sigBytes>n&&(i=e.finalize(i)),i.clamp();for(var s=this._oKey=i.clone(),o=this._iKey=i.clone(),a=s.words,f=o.words,c=0;c<t;c++)a[c]^=1549556828,f[c]^=909522486;s.sigBytes=o.sigBytes=n,this.reset()},reset:function(){var e=this._hasher;e.reset(),e.update(this._iKey)},update:function(e){return this._hasher.update(e),this},finalize:function(e){var i=this._hasher,t=i.finalize(e);i.reset();var n=i.finalize(this._oKey.clone().concat(t));return n}})}()});
 | 
			
		||||
//# sourceMappingURL=hmac.min.js.map
 | 
			
		||||
!function(e,o,r){"object"==typeof exports?module.exports=exports=o(require("./core.min"),require("./cipher-core.min")):"function"==typeof define&&define.amd?define(["./core.min","./cipher-core.min"],o):o(e.CryptoJS)}(this,function(e){return e.mode.ECB=function(){var o=e.lib.BlockCipherMode.extend();return o.Encryptor=o.extend({processBlock:function(e,o){this._cipher.encryptBlock(e,o)}}),o.Decryptor=o.extend({processBlock:function(e,o){this._cipher.decryptBlock(e,o)}}),o}(),e.mode.ECB});
 | 
			
		||||
//# sourceMappingURL=mode-ecb.min.js.map
 | 
			
		||||
!function(e,r,i){"object"==typeof exports?module.exports=exports=r(require("./core.min"),require("./cipher-core.min")):"function"==typeof define&&define.amd?define(["./core.min","./cipher-core.min"],r):r(e.CryptoJS)}(this,function(e){return e.pad.Pkcs7});
 | 
			
		||||
//# sourceMappingURL=pad-pkcs7.min.js.map
 | 
			
		||||
!function(e,r,i){"object"==typeof exports?module.exports=exports=r(require("./core.min"),require("./enc-base64.min"),require("./md5.min"),require("./evpkdf.min"),require("./cipher-core.min")):"function"==typeof define&&define.amd?define(["./core.min","./enc-base64.min","./md5.min","./evpkdf.min","./cipher-core.min"],r):r(e.CryptoJS)}(this,function(e){return function(){var r=e,i=r.lib,n=i.BlockCipher,o=r.algo,t=[],c=[],s=[],f=[],a=[],d=[],u=[],v=[],h=[],y=[];!function(){for(var e=[],r=0;r<256;r++)r<128?e[r]=r<<1:e[r]=r<<1^283;for(var i=0,n=0,r=0;r<256;r++){var o=n^n<<1^n<<2^n<<3^n<<4;o=o>>>8^255&o^99,t[i]=o,c[o]=i;var p=e[i],l=e[p],_=e[l],k=257*e[o]^16843008*o;s[i]=k<<24|k>>>8,f[i]=k<<16|k>>>16,a[i]=k<<8|k>>>24,d[i]=k;var k=16843009*_^65537*l^257*p^16843008*i;u[o]=k<<24|k>>>8,v[o]=k<<16|k>>>16,h[o]=k<<8|k>>>24,y[o]=k,i?(i=p^e[e[e[_^p]]],n^=e[e[n]]):i=n=1}}();var p=[0,1,2,4,8,16,32,64,128,27,54],l=o.AES=n.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var e=this._keyPriorReset=this._key,r=e.words,i=e.sigBytes/4,n=this._nRounds=i+6,o=4*(n+1),c=this._keySchedule=[],s=0;s<o;s++)if(s<i)c[s]=r[s];else{var f=c[s-1];s%i?i>6&&s%i==4&&(f=t[f>>>24]<<24|t[f>>>16&255]<<16|t[f>>>8&255]<<8|t[255&f]):(f=f<<8|f>>>24,f=t[f>>>24]<<24|t[f>>>16&255]<<16|t[f>>>8&255]<<8|t[255&f],f^=p[s/i|0]<<24),c[s]=c[s-i]^f}for(var a=this._invKeySchedule=[],d=0;d<o;d++){var s=o-d;if(d%4)var f=c[s];else var f=c[s-4];d<4||s<=4?a[d]=f:a[d]=u[t[f>>>24]]^v[t[f>>>16&255]]^h[t[f>>>8&255]]^y[t[255&f]]}}},encryptBlock:function(e,r){this._doCryptBlock(e,r,this._keySchedule,s,f,a,d,t)},decryptBlock:function(e,r){var i=e[r+1];e[r+1]=e[r+3],e[r+3]=i,this._doCryptBlock(e,r,this._invKeySchedule,u,v,h,y,c);var i=e[r+1];e[r+1]=e[r+3],e[r+3]=i},_doCryptBlock:function(e,r,i,n,o,t,c,s){for(var f=this._nRounds,a=e[r]^i[0],d=e[r+1]^i[1],u=e[r+2]^i[2],v=e[r+3]^i[3],h=4,y=1;y<f;y++){var p=n[a>>>24]^o[d>>>16&255]^t[u>>>8&255]^c[255&v]^i[h++],l=n[d>>>24]^o[u>>>16&255]^t[v>>>8&255]^c[255&a]^i[h++],_=n[u>>>24]^o[v>>>16&255]^t[a>>>8&255]^c[255&d]^i[h++],k=n[v>>>24]^o[a>>>16&255]^t[d>>>8&255]^c[255&u]^i[h++];a=p,d=l,u=_,v=k}var p=(s[a>>>24]<<24|s[d>>>16&255]<<16|s[u>>>8&255]<<8|s[255&v])^i[h++],l=(s[d>>>24]<<24|s[u>>>16&255]<<16|s[v>>>8&255]<<8|s[255&a])^i[h++],_=(s[u>>>24]<<24|s[v>>>16&255]<<16|s[a>>>8&255]<<8|s[255&d])^i[h++],k=(s[v>>>24]<<24|s[a>>>16&255]<<16|s[d>>>8&255]<<8|s[255&u])^i[h++];e[r]=p,e[r+1]=l,e[r+2]=_,e[r+3]=k},keySize:8});r.AES=n._createHelper(l)}(),e.AES});
 | 
			
		||||
//# sourceMappingURL=aes.min.js.map
 | 
			
		||||
!function(e,n){"object"==typeof exports?module.exports=exports=n(require("./core.min")):"function"==typeof define&&define.amd?define(["./core.min"],n):n(e.CryptoJS)}(this,function(e){return e.enc.Utf8});
 | 
			
		||||
//# sourceMappingURL=enc-utf8.min.js.map
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,697 @@
 | 
			
		|||
/**
 | 
			
		||||
 * SVGInject - Version 1.2.3
 | 
			
		||||
 * A tiny, intuitive, robust, caching solution for injecting SVG files inline into the DOM.
 | 
			
		||||
 *
 | 
			
		||||
 * https://github.com/iconfu/svg-inject
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (c) 2018 INCORS, the creators of iconfu.com
 | 
			
		||||
 * @license MIT License - https://github.com/iconfu/svg-inject/blob/master/LICENSE
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
(function(window, document) {
 | 
			
		||||
  // constants for better minification
 | 
			
		||||
  var _CREATE_ELEMENT_ = 'createElement';
 | 
			
		||||
  var _GET_ELEMENTS_BY_TAG_NAME_ = 'getElementsByTagName';
 | 
			
		||||
  var _LENGTH_ = 'length';
 | 
			
		||||
  var _STYLE_ = 'style';
 | 
			
		||||
  var _TITLE_ = 'title';
 | 
			
		||||
  var _UNDEFINED_ = 'undefined';
 | 
			
		||||
  var _SET_ATTRIBUTE_ = 'setAttribute';
 | 
			
		||||
  var _GET_ATTRIBUTE_ = 'getAttribute';
 | 
			
		||||
 | 
			
		||||
  var NULL = null;
 | 
			
		||||
 | 
			
		||||
  // constants
 | 
			
		||||
  var __SVGINJECT = '__svgInject';
 | 
			
		||||
  var ID_SUFFIX = '--inject-';
 | 
			
		||||
  var ID_SUFFIX_REGEX = new RegExp(ID_SUFFIX + '\\d+', "g");
 | 
			
		||||
  var LOAD_FAIL = 'LOAD_FAIL';
 | 
			
		||||
  var SVG_NOT_SUPPORTED = 'SVG_NOT_SUPPORTED';
 | 
			
		||||
  var SVG_INVALID = 'SVG_INVALID';
 | 
			
		||||
  var ATTRIBUTE_EXCLUSION_NAMES = ['src', 'alt', 'onload', 'onerror'];
 | 
			
		||||
  var A_ELEMENT = document[_CREATE_ELEMENT_]('a');
 | 
			
		||||
  var IS_SVG_SUPPORTED = typeof SVGRect != _UNDEFINED_;
 | 
			
		||||
  var DEFAULT_OPTIONS = {
 | 
			
		||||
    useCache: true,
 | 
			
		||||
    copyAttributes: true,
 | 
			
		||||
    makeIdsUnique: true
 | 
			
		||||
  };
 | 
			
		||||
  // Map of IRI referenceable tag names to properties that can reference them. This is defined in
 | 
			
		||||
  // https://www.w3.org/TR/SVG11/linking.html#processingIRI
 | 
			
		||||
  var IRI_TAG_PROPERTIES_MAP = {
 | 
			
		||||
    clipPath: ['clip-path'],
 | 
			
		||||
    'color-profile': NULL,
 | 
			
		||||
    cursor: NULL,
 | 
			
		||||
    filter: NULL,
 | 
			
		||||
    linearGradient: ['fill', 'stroke'],
 | 
			
		||||
    marker: ['marker', 'marker-end', 'marker-mid', 'marker-start'],
 | 
			
		||||
    mask: NULL,
 | 
			
		||||
    pattern: ['fill', 'stroke'],
 | 
			
		||||
    radialGradient: ['fill', 'stroke']
 | 
			
		||||
  };
 | 
			
		||||
  var INJECTED = 1;
 | 
			
		||||
  var FAIL = 2;
 | 
			
		||||
 | 
			
		||||
  var uniqueIdCounter = 1;
 | 
			
		||||
  var xmlSerializer;
 | 
			
		||||
  var domParser;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  // creates an SVG document from an SVG string
 | 
			
		||||
  function svgStringToSvgDoc(svgStr) {
 | 
			
		||||
    domParser = domParser || new DOMParser();
 | 
			
		||||
    return domParser.parseFromString(svgStr, 'text/xml');
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  // searializes an SVG element to an SVG string
 | 
			
		||||
  function svgElemToSvgString(svgElement) {
 | 
			
		||||
    xmlSerializer = xmlSerializer || new XMLSerializer();
 | 
			
		||||
    return xmlSerializer.serializeToString(svgElement);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  // Returns the absolute url for the specified url
 | 
			
		||||
  function getAbsoluteUrl(url) {
 | 
			
		||||
    A_ELEMENT.href = url;
 | 
			
		||||
    return A_ELEMENT.href;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  // Load svg with an XHR request
 | 
			
		||||
  function loadSvg(url, callback, errorCallback) {
 | 
			
		||||
    if (url) {
 | 
			
		||||
      var req = new XMLHttpRequest();
 | 
			
		||||
      req.onreadystatechange = function() {
 | 
			
		||||
        if (req.readyState == 4) {
 | 
			
		||||
          // readyState is DONE
 | 
			
		||||
          var status = req.status;
 | 
			
		||||
          if (status == 200) {
 | 
			
		||||
            // request status is OK
 | 
			
		||||
            callback(req.responseXML, req.responseText.trim());
 | 
			
		||||
          } else if (status >= 400) {
 | 
			
		||||
            // request status is error (4xx or 5xx)
 | 
			
		||||
            errorCallback();
 | 
			
		||||
          } else if (status == 0) {
 | 
			
		||||
            // request status 0 can indicate a failed cross-domain call
 | 
			
		||||
            errorCallback();
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      };
 | 
			
		||||
      req.open('GET', url, true);
 | 
			
		||||
      req.send();
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  // Copy attributes from img element to svg element
 | 
			
		||||
  function copyAttributes(imgElem, svgElem) {
 | 
			
		||||
    var attribute;
 | 
			
		||||
    var attributeName;
 | 
			
		||||
    var attributeValue;
 | 
			
		||||
    var attributes = imgElem.attributes;
 | 
			
		||||
    for (var i = 0; i < attributes[_LENGTH_]; i++) {
 | 
			
		||||
      attribute = attributes[i];
 | 
			
		||||
      attributeName = attribute.name;
 | 
			
		||||
      // Only copy attributes not explicitly excluded from copying
 | 
			
		||||
      if (ATTRIBUTE_EXCLUSION_NAMES.indexOf(attributeName) == -1) {
 | 
			
		||||
        attributeValue = attribute.value;
 | 
			
		||||
        // If img attribute is "title", insert a title element into SVG element
 | 
			
		||||
        if (attributeName == _TITLE_) {
 | 
			
		||||
          var titleElem;
 | 
			
		||||
          var firstElementChild = svgElem.firstElementChild;
 | 
			
		||||
          if (firstElementChild && firstElementChild.localName.toLowerCase() == _TITLE_) {
 | 
			
		||||
            // If the SVG element's first child is a title element, keep it as the title element
 | 
			
		||||
            titleElem = firstElementChild;
 | 
			
		||||
          } else {
 | 
			
		||||
            // If the SVG element's first child element is not a title element, create a new title
 | 
			
		||||
            // ele,emt and set it as the first child
 | 
			
		||||
            titleElem = document[_CREATE_ELEMENT_ + 'NS']('http://www.w3.org/2000/svg', _TITLE_);
 | 
			
		||||
            svgElem.insertBefore(titleElem, firstElementChild);
 | 
			
		||||
          }
 | 
			
		||||
          // Set new title content
 | 
			
		||||
          titleElem.textContent = attributeValue;
 | 
			
		||||
        } else {
 | 
			
		||||
          // Set img attribute to svg element
 | 
			
		||||
          svgElem[_SET_ATTRIBUTE_](attributeName, attributeValue);
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  // This function appends a suffix to IDs of referenced elements in the <defs> in order to  to avoid ID collision
 | 
			
		||||
  // between multiple injected SVGs. The suffix has the form "--inject-X", where X is a running number which is
 | 
			
		||||
  // incremented with each injection. References to the IDs are adjusted accordingly.
 | 
			
		||||
  // We assume tha all IDs within the injected SVG are unique, therefore the same suffix can be used for all IDs of one
 | 
			
		||||
  // injected SVG.
 | 
			
		||||
  // If the onlyReferenced argument is set to true, only those IDs will be made unique that are referenced from within the SVG
 | 
			
		||||
  function makeIdsUnique(svgElem, onlyReferenced) {
 | 
			
		||||
    var idSuffix = ID_SUFFIX + uniqueIdCounter++;
 | 
			
		||||
    // Regular expression for functional notations of an IRI references. This will find occurences in the form
 | 
			
		||||
    // url(#anyId) or url("#anyId") (for Internet Explorer) and capture the referenced ID
 | 
			
		||||
    var funcIriRegex = /url\("?#([a-zA-Z][\w:.-]*)"?\)/g;
 | 
			
		||||
    // Get all elements with an ID. The SVG spec recommends to put referenced elements inside <defs> elements, but
 | 
			
		||||
    // this is not a requirement, therefore we have to search for IDs in the whole SVG.
 | 
			
		||||
    var idElements = svgElem.querySelectorAll('[id]');
 | 
			
		||||
    var idElem;
 | 
			
		||||
    // An object containing referenced IDs  as keys is used if only referenced IDs should be uniquified.
 | 
			
		||||
    // If this object does not exist, all IDs will be uniquified.
 | 
			
		||||
    var referencedIds = onlyReferenced ? [] : NULL;
 | 
			
		||||
    var tagName;
 | 
			
		||||
    var iriTagNames = {};
 | 
			
		||||
    var iriProperties = [];
 | 
			
		||||
    var changed = false;
 | 
			
		||||
    var i, j;
 | 
			
		||||
 | 
			
		||||
    if (idElements[_LENGTH_]) {
 | 
			
		||||
      // Make all IDs unique by adding the ID suffix and collect all encountered tag names
 | 
			
		||||
      // that are IRI referenceable from properities.
 | 
			
		||||
      for (i = 0; i < idElements[_LENGTH_]; i++) {
 | 
			
		||||
        tagName = idElements[i].localName; // Use non-namespaced tag name
 | 
			
		||||
        // Make ID unique if tag name is IRI referenceable
 | 
			
		||||
        if (tagName in IRI_TAG_PROPERTIES_MAP) {
 | 
			
		||||
          iriTagNames[tagName] = 1;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      // Get all properties that are mapped to the found IRI referenceable tags
 | 
			
		||||
      for (tagName in iriTagNames) {
 | 
			
		||||
        (IRI_TAG_PROPERTIES_MAP[tagName] || [tagName]).forEach(function (mappedProperty) {
 | 
			
		||||
          // Add mapped properties to array of iri referencing properties.
 | 
			
		||||
          // Use linear search here because the number of possible entries is very small (maximum 11)
 | 
			
		||||
          if (iriProperties.indexOf(mappedProperty) < 0) {
 | 
			
		||||
            iriProperties.push(mappedProperty);
 | 
			
		||||
          }
 | 
			
		||||
        });
 | 
			
		||||
      }
 | 
			
		||||
      if (iriProperties[_LENGTH_]) {
 | 
			
		||||
        // Add "style" to properties, because it may contain references in the form 'style="fill:url(#myFill)"'
 | 
			
		||||
        iriProperties.push(_STYLE_);
 | 
			
		||||
      }
 | 
			
		||||
      // Run through all elements of the SVG and replace IDs in references.
 | 
			
		||||
      // To get all descending elements, getElementsByTagName('*') seems to perform faster than querySelectorAll('*').
 | 
			
		||||
      // Since svgElem.getElementsByTagName('*') does not return the svg element itself, we have to handle it separately.
 | 
			
		||||
      var descElements = svgElem[_GET_ELEMENTS_BY_TAG_NAME_]('*');
 | 
			
		||||
      var element = svgElem;
 | 
			
		||||
      var propertyName;
 | 
			
		||||
      var value;
 | 
			
		||||
      var newValue;
 | 
			
		||||
      for (i = -1; element != NULL;) {
 | 
			
		||||
        if (element.localName == _STYLE_) {
 | 
			
		||||
          // If element is a style element, replace IDs in all occurences of "url(#anyId)" in text content
 | 
			
		||||
          value = element.textContent;
 | 
			
		||||
          newValue = value && value.replace(funcIriRegex, function(match, id) {
 | 
			
		||||
            if (referencedIds) {
 | 
			
		||||
              referencedIds[id] = 1;
 | 
			
		||||
            }
 | 
			
		||||
            return 'url(#' + id + idSuffix + ')';
 | 
			
		||||
          });
 | 
			
		||||
          if (newValue !== value) {
 | 
			
		||||
            element.textContent = newValue;
 | 
			
		||||
          }
 | 
			
		||||
        } else if (element.hasAttributes()) {
 | 
			
		||||
          // Run through all property names for which IDs were found
 | 
			
		||||
          for (j = 0; j < iriProperties[_LENGTH_]; j++) {
 | 
			
		||||
            propertyName = iriProperties[j];
 | 
			
		||||
            value = element[_GET_ATTRIBUTE_](propertyName);
 | 
			
		||||
            newValue = value && value.replace(funcIriRegex, function(match, id) {
 | 
			
		||||
              if (referencedIds) {
 | 
			
		||||
                referencedIds[id] = 1;
 | 
			
		||||
              }
 | 
			
		||||
                return 'url(#' + id + idSuffix + ')';
 | 
			
		||||
            });
 | 
			
		||||
            if (newValue !== value) {
 | 
			
		||||
              element[_SET_ATTRIBUTE_](propertyName, newValue);
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
          // Replace IDs in xlink:ref and href attributes
 | 
			
		||||
          ['xlink:href', 'href'].forEach(function(refAttrName) {
 | 
			
		||||
            var iri = element[_GET_ATTRIBUTE_](refAttrName);
 | 
			
		||||
            if (/^\s*#/.test(iri)) { // Check if iri is non-null and internal reference
 | 
			
		||||
              iri = iri.trim();
 | 
			
		||||
              element[_SET_ATTRIBUTE_](refAttrName, iri + idSuffix);
 | 
			
		||||
              if (referencedIds) {
 | 
			
		||||
                // Add ID to referenced IDs
 | 
			
		||||
                referencedIds[iri.substring(1)] = 1;
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
          });
 | 
			
		||||
        }
 | 
			
		||||
        element = descElements[++i];
 | 
			
		||||
      }
 | 
			
		||||
      for (i = 0; i < idElements[_LENGTH_]; i++) {
 | 
			
		||||
        idElem = idElements[i];
 | 
			
		||||
        // If set of referenced IDs exists, make only referenced IDs unique,
 | 
			
		||||
        // otherwise make all IDs unique.
 | 
			
		||||
        if (!referencedIds || referencedIds[idElem.id]) {
 | 
			
		||||
          // Add suffix to element's ID
 | 
			
		||||
          idElem.id += idSuffix;
 | 
			
		||||
          changed = true;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    // return true if SVG element has changed
 | 
			
		||||
    return changed;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  // For cached SVGs the IDs are made unique by simply replacing the already inserted unique IDs with a
 | 
			
		||||
  // higher ID counter. This is much more performant than a call to makeIdsUnique().
 | 
			
		||||
  function makeIdsUniqueCached(svgString) {
 | 
			
		||||
    return svgString.replace(ID_SUFFIX_REGEX, ID_SUFFIX + uniqueIdCounter++);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  // Inject SVG by replacing the img element with the SVG element in the DOM
 | 
			
		||||
  function inject(imgElem, svgElem, absUrl, options) {
 | 
			
		||||
    if (svgElem) {
 | 
			
		||||
      svgElem[_SET_ATTRIBUTE_]('data-inject-url', absUrl);
 | 
			
		||||
      var parentNode = imgElem.parentNode;
 | 
			
		||||
      if (parentNode) {
 | 
			
		||||
        if (options.copyAttributes) {
 | 
			
		||||
          copyAttributes(imgElem, svgElem);
 | 
			
		||||
        }
 | 
			
		||||
        // Invoke beforeInject hook if set
 | 
			
		||||
        var beforeInject = options.beforeInject;
 | 
			
		||||
        var injectElem = (beforeInject && beforeInject(imgElem, svgElem)) || svgElem;
 | 
			
		||||
        // Replace img element with new element. This is the actual injection.
 | 
			
		||||
        parentNode.replaceChild(injectElem, imgElem);
 | 
			
		||||
        // Mark img element as injected
 | 
			
		||||
        imgElem[__SVGINJECT] = INJECTED;
 | 
			
		||||
        removeOnLoadAttribute(imgElem);
 | 
			
		||||
        // Invoke afterInject hook if set
 | 
			
		||||
        var afterInject = options.afterInject;
 | 
			
		||||
        if (afterInject) {
 | 
			
		||||
          afterInject(imgElem, injectElem);
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    } else {
 | 
			
		||||
      svgInvalid(imgElem, options);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  // Merges any number of options objects into a new object
 | 
			
		||||
  function mergeOptions() {
 | 
			
		||||
    var mergedOptions = {};
 | 
			
		||||
    var args = arguments;
 | 
			
		||||
    // Iterate over all specified options objects and add all properties to the new options object
 | 
			
		||||
    for (var i = 0; i < args[_LENGTH_]; i++) {
 | 
			
		||||
      var argument = args[i];
 | 
			
		||||
        for (var key in argument) {
 | 
			
		||||
          if (argument.hasOwnProperty(key)) {
 | 
			
		||||
            mergedOptions[key] = argument[key];
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    return mergedOptions;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  // Adds the specified CSS to the document's <head> element
 | 
			
		||||
  function addStyleToHead(css) {
 | 
			
		||||
    var head = document[_GET_ELEMENTS_BY_TAG_NAME_]('head')[0];
 | 
			
		||||
    if (head) {
 | 
			
		||||
      var style = document[_CREATE_ELEMENT_](_STYLE_);
 | 
			
		||||
      style.type = 'text/css';
 | 
			
		||||
      style.appendChild(document.createTextNode(css));
 | 
			
		||||
      head.appendChild(style);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  // Builds an SVG element from the specified SVG string
 | 
			
		||||
  function buildSvgElement(svgStr, verify) {
 | 
			
		||||
    if (verify) {
 | 
			
		||||
      var svgDoc;
 | 
			
		||||
      try {
 | 
			
		||||
        // Parse the SVG string with DOMParser
 | 
			
		||||
        svgDoc = svgStringToSvgDoc(svgStr);
 | 
			
		||||
      } catch(e) {
 | 
			
		||||
        return NULL;
 | 
			
		||||
      }
 | 
			
		||||
      if (svgDoc[_GET_ELEMENTS_BY_TAG_NAME_]('parsererror')[_LENGTH_]) {
 | 
			
		||||
        // DOMParser does not throw an exception, but instead puts parsererror tags in the document
 | 
			
		||||
        return NULL;
 | 
			
		||||
      }
 | 
			
		||||
      return svgDoc.documentElement;
 | 
			
		||||
    } else {
 | 
			
		||||
      var div = document.createElement('div');
 | 
			
		||||
      div.innerHTML = svgStr;
 | 
			
		||||
      return div.firstElementChild;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  function removeOnLoadAttribute(imgElem) {
 | 
			
		||||
    // Remove the onload attribute. Should only be used to remove the unstyled image flash protection and
 | 
			
		||||
    // make the element visible, not for removing the event listener.
 | 
			
		||||
    imgElem.removeAttribute('onload');
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  function errorMessage(msg) {
 | 
			
		||||
    console.error('SVGInject: ' + msg);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  function fail(imgElem, status, options) {
 | 
			
		||||
    imgElem[__SVGINJECT] = FAIL;
 | 
			
		||||
    if (options.onFail) {
 | 
			
		||||
      options.onFail(imgElem, status);
 | 
			
		||||
    } else {
 | 
			
		||||
      errorMessage(status);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  function svgInvalid(imgElem, options) {
 | 
			
		||||
    removeOnLoadAttribute(imgElem);
 | 
			
		||||
    fail(imgElem, SVG_INVALID, options);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  function svgNotSupported(imgElem, options) {
 | 
			
		||||
    removeOnLoadAttribute(imgElem);
 | 
			
		||||
    fail(imgElem, SVG_NOT_SUPPORTED, options);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  function loadFail(imgElem, options) {
 | 
			
		||||
    fail(imgElem, LOAD_FAIL, options);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  function removeEventListeners(imgElem) {
 | 
			
		||||
    imgElem.onload = NULL;
 | 
			
		||||
    imgElem.onerror = NULL;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  function imgNotSet(msg) {
 | 
			
		||||
    errorMessage('no img element');
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  function createSVGInject(globalName, options) {
 | 
			
		||||
    var defaultOptions = mergeOptions(DEFAULT_OPTIONS, options);
 | 
			
		||||
    var svgLoadCache = {};
 | 
			
		||||
 | 
			
		||||
    if (IS_SVG_SUPPORTED) {
 | 
			
		||||
      // If the browser supports SVG, add a small stylesheet that hides the <img> elements until
 | 
			
		||||
      // injection is finished. This avoids showing the unstyled SVGs before style is applied.
 | 
			
		||||
      addStyleToHead('img[onload^="' + globalName + '("]{visibility:hidden;}');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * SVGInject
 | 
			
		||||
     *
 | 
			
		||||
     * Injects the SVG specified in the `src` attribute of the specified `img` element or array of `img`
 | 
			
		||||
     * elements. Returns a Promise object which resolves if all passed in `img` elements have either been
 | 
			
		||||
     * injected or failed to inject (Only if a global Promise object is available like in all modern browsers
 | 
			
		||||
     * or through a polyfill).
 | 
			
		||||
     *
 | 
			
		||||
     * Options:
 | 
			
		||||
     * useCache: If set to `true` the SVG will be cached using the absolute URL. Default value is `true`.
 | 
			
		||||
     * copyAttributes: If set to `true` the attributes will be copied from `img` to `svg`. Dfault value
 | 
			
		||||
     *     is `true`.
 | 
			
		||||
     * makeIdsUnique: If set to `true` the ID of elements in the `<defs>` element that can be references by
 | 
			
		||||
     *     property values (for example 'clipPath') are made unique by appending "--inject-X", where X is a
 | 
			
		||||
     *     running number which increases with each injection. This is done to avoid duplicate IDs in the DOM.
 | 
			
		||||
     * beforeLoad: Hook before SVG is loaded. The `img` element is passed as a parameter. If the hook returns
 | 
			
		||||
     *     a string it is used as the URL instead of the `img` element's `src` attribute.
 | 
			
		||||
     * afterLoad: Hook after SVG is loaded. The loaded `svg` element and `svg` string are passed as a
 | 
			
		||||
     *     parameters. If caching is active this hook will only get called once for injected SVGs with the
 | 
			
		||||
     *     same absolute path. Changes to the `svg` element in this hook will be applied to all injected SVGs
 | 
			
		||||
     *     with the same absolute path. It's also possible to return an `svg` string or `svg` element which
 | 
			
		||||
     *     will then be used for the injection.
 | 
			
		||||
     * beforeInject: Hook before SVG is injected. The `img` and `svg` elements are passed as parameters. If
 | 
			
		||||
     *     any html element is returned it gets injected instead of applying the default SVG injection.
 | 
			
		||||
     * afterInject: Hook after SVG is injected. The `img` and `svg` elements are passed as parameters.
 | 
			
		||||
     * onAllFinish: Hook after all `img` elements passed to an SVGInject() call have either been injected or
 | 
			
		||||
     *     failed to inject.
 | 
			
		||||
     * onFail: Hook after injection fails. The `img` element and a `status` string are passed as an parameter.
 | 
			
		||||
     *     The `status` can be either `'SVG_NOT_SUPPORTED'` (the browser does not support SVG),
 | 
			
		||||
     *     `'SVG_INVALID'` (the SVG is not in a valid format) or `'LOAD_FAILED'` (loading of the SVG failed).
 | 
			
		||||
     *
 | 
			
		||||
     * @param {HTMLImageElement} img - an img element or an array of img elements
 | 
			
		||||
     * @param {Object} [options] - optional parameter with [options](#options) for this injection.
 | 
			
		||||
     */
 | 
			
		||||
    function SVGInject(img, options) {
 | 
			
		||||
      options = mergeOptions(defaultOptions, options);
 | 
			
		||||
 | 
			
		||||
      var run = function(resolve) {
 | 
			
		||||
        var allFinish = function() {
 | 
			
		||||
          var onAllFinish = options.onAllFinish;
 | 
			
		||||
          if (onAllFinish) {
 | 
			
		||||
            onAllFinish();
 | 
			
		||||
          }
 | 
			
		||||
          resolve && resolve();
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        if (img && typeof img[_LENGTH_] != _UNDEFINED_) {
 | 
			
		||||
          // an array like structure of img elements
 | 
			
		||||
          var injectIndex = 0;
 | 
			
		||||
          var injectCount = img[_LENGTH_];
 | 
			
		||||
 | 
			
		||||
          if (injectCount == 0) {
 | 
			
		||||
            allFinish();
 | 
			
		||||
          } else {
 | 
			
		||||
            var finish = function() {
 | 
			
		||||
              if (++injectIndex == injectCount) {
 | 
			
		||||
                allFinish();
 | 
			
		||||
              }
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            for (var i = 0; i < injectCount; i++) {
 | 
			
		||||
              SVGInjectElement(img[i], options, finish);
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        } else {
 | 
			
		||||
          // only one img element
 | 
			
		||||
          SVGInjectElement(img, options, allFinish);
 | 
			
		||||
        }
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      // return a Promise object if globally available
 | 
			
		||||
      return typeof Promise == _UNDEFINED_ ? run() : new Promise(run);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    // Injects a single svg element. Options must be already merged with the default options.
 | 
			
		||||
    function SVGInjectElement(imgElem, options, callback) {
 | 
			
		||||
      if (imgElem) {
 | 
			
		||||
        var svgInjectAttributeValue = imgElem[__SVGINJECT];
 | 
			
		||||
        if (!svgInjectAttributeValue) {
 | 
			
		||||
          removeEventListeners(imgElem);
 | 
			
		||||
 | 
			
		||||
          if (!IS_SVG_SUPPORTED) {
 | 
			
		||||
            svgNotSupported(imgElem, options);
 | 
			
		||||
            callback();
 | 
			
		||||
            return;
 | 
			
		||||
          }
 | 
			
		||||
          // Invoke beforeLoad hook if set. If the beforeLoad returns a value use it as the src for the load
 | 
			
		||||
          // URL path. Else use the imgElem's src attribute value.
 | 
			
		||||
          var beforeLoad = options.beforeLoad;
 | 
			
		||||
          var src = (beforeLoad && beforeLoad(imgElem)) || imgElem[_GET_ATTRIBUTE_]('src');
 | 
			
		||||
 | 
			
		||||
          if (!src) {
 | 
			
		||||
            // If no image src attribute is set do no injection. This can only be reached by using javascript
 | 
			
		||||
            // because if no src attribute is set the onload and onerror events do not get called
 | 
			
		||||
            if (src === '') {
 | 
			
		||||
              loadFail(imgElem, options);
 | 
			
		||||
            }
 | 
			
		||||
            callback();
 | 
			
		||||
            return;
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          // set array so later calls can register callbacks
 | 
			
		||||
          var onFinishCallbacks = [];
 | 
			
		||||
          imgElem[__SVGINJECT] = onFinishCallbacks;
 | 
			
		||||
 | 
			
		||||
          var onFinish = function() {
 | 
			
		||||
            callback();
 | 
			
		||||
            onFinishCallbacks.forEach(function(onFinishCallback) {
 | 
			
		||||
              onFinishCallback();
 | 
			
		||||
            });
 | 
			
		||||
          };
 | 
			
		||||
 | 
			
		||||
          var absUrl = getAbsoluteUrl(src);
 | 
			
		||||
          var useCacheOption = options.useCache;
 | 
			
		||||
          var makeIdsUniqueOption = options.makeIdsUnique;
 | 
			
		||||
          
 | 
			
		||||
          var setSvgLoadCacheValue = function(val) {
 | 
			
		||||
            if (useCacheOption) {
 | 
			
		||||
              svgLoadCache[absUrl].forEach(function(svgLoad) {
 | 
			
		||||
                svgLoad(val);
 | 
			
		||||
              });
 | 
			
		||||
              svgLoadCache[absUrl] = val;
 | 
			
		||||
            }
 | 
			
		||||
          };
 | 
			
		||||
 | 
			
		||||
          if (useCacheOption) {
 | 
			
		||||
            var svgLoad = svgLoadCache[absUrl];
 | 
			
		||||
 | 
			
		||||
            var handleLoadValue = function(loadValue) {
 | 
			
		||||
              if (loadValue === LOAD_FAIL) {
 | 
			
		||||
                loadFail(imgElem, options);
 | 
			
		||||
              } else if (loadValue === SVG_INVALID) {
 | 
			
		||||
                svgInvalid(imgElem, options);
 | 
			
		||||
              } else {
 | 
			
		||||
                var hasUniqueIds = loadValue[0];
 | 
			
		||||
                var svgString = loadValue[1];
 | 
			
		||||
                var uniqueIdsSvgString = loadValue[2];
 | 
			
		||||
                var svgElem;
 | 
			
		||||
 | 
			
		||||
                if (makeIdsUniqueOption) {
 | 
			
		||||
                  if (hasUniqueIds === NULL) {
 | 
			
		||||
                    // IDs for the SVG string have not been made unique before. This may happen if previous
 | 
			
		||||
                    // injection of a cached SVG have been run with the option makedIdsUnique set to false
 | 
			
		||||
                    svgElem = buildSvgElement(svgString, false);
 | 
			
		||||
                    hasUniqueIds = makeIdsUnique(svgElem, false);
 | 
			
		||||
 | 
			
		||||
                    loadValue[0] = hasUniqueIds;
 | 
			
		||||
                    loadValue[2] = hasUniqueIds && svgElemToSvgString(svgElem);
 | 
			
		||||
                  } else if (hasUniqueIds) {
 | 
			
		||||
                    // Make IDs unique for already cached SVGs with better performance
 | 
			
		||||
                    svgString = makeIdsUniqueCached(uniqueIdsSvgString);
 | 
			
		||||
                  }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                svgElem = svgElem || buildSvgElement(svgString, false);
 | 
			
		||||
 | 
			
		||||
                inject(imgElem, svgElem, absUrl, options);
 | 
			
		||||
              }
 | 
			
		||||
              onFinish();
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            if (typeof svgLoad != _UNDEFINED_) {
 | 
			
		||||
              // Value for url exists in cache
 | 
			
		||||
              if (svgLoad.isCallbackQueue) {
 | 
			
		||||
                // Same url has been cached, but value has not been loaded yet, so add to callbacks
 | 
			
		||||
                svgLoad.push(handleLoadValue);
 | 
			
		||||
              } else {
 | 
			
		||||
                handleLoadValue(svgLoad);
 | 
			
		||||
              }
 | 
			
		||||
              return;
 | 
			
		||||
            } else {
 | 
			
		||||
              var svgLoad = [];
 | 
			
		||||
              // set property isCallbackQueue to Array to differentiate from array with cached loaded values
 | 
			
		||||
              svgLoad.isCallbackQueue = true;
 | 
			
		||||
              svgLoadCache[absUrl] = svgLoad;
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          // Load the SVG because it is not cached or caching is disabled
 | 
			
		||||
          loadSvg(absUrl, function(svgXml, svgString) {
 | 
			
		||||
            // Use the XML from the XHR request if it is an instance of Document. Otherwise
 | 
			
		||||
            // (for example of IE9), create the svg document from the svg string.
 | 
			
		||||
            var svgElem = svgXml instanceof Document ? svgXml.documentElement : buildSvgElement(svgString, true);
 | 
			
		||||
 | 
			
		||||
            var afterLoad = options.afterLoad;
 | 
			
		||||
            if (afterLoad) {
 | 
			
		||||
              // Invoke afterLoad hook which may modify the SVG element. After load may also return a new
 | 
			
		||||
              // svg element or svg string
 | 
			
		||||
              var svgElemOrSvgString = afterLoad(svgElem, svgString) || svgElem;
 | 
			
		||||
              if (svgElemOrSvgString) {
 | 
			
		||||
                // Update svgElem and svgString because of modifications to the SVG element or SVG string in
 | 
			
		||||
                // the afterLoad hook, so the modified SVG is also used for all later cached injections
 | 
			
		||||
                var isString = typeof svgElemOrSvgString == 'string';
 | 
			
		||||
                svgString = isString ? svgElemOrSvgString : svgElemToSvgString(svgElem);
 | 
			
		||||
                svgElem = isString ? buildSvgElement(svgElemOrSvgString, true) : svgElemOrSvgString;
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (svgElem instanceof SVGElement) {
 | 
			
		||||
              var hasUniqueIds = NULL;
 | 
			
		||||
              if (makeIdsUniqueOption) {
 | 
			
		||||
                hasUniqueIds = makeIdsUnique(svgElem, false);
 | 
			
		||||
              }
 | 
			
		||||
 | 
			
		||||
              if (useCacheOption) {
 | 
			
		||||
                var uniqueIdsSvgString = hasUniqueIds && svgElemToSvgString(svgElem);
 | 
			
		||||
                // set an array with three entries to the load cache
 | 
			
		||||
                setSvgLoadCacheValue([hasUniqueIds, svgString, uniqueIdsSvgString]);
 | 
			
		||||
              }
 | 
			
		||||
 | 
			
		||||
              inject(imgElem, svgElem, absUrl, options);
 | 
			
		||||
            } else {
 | 
			
		||||
              svgInvalid(imgElem, options);
 | 
			
		||||
              setSvgLoadCacheValue(SVG_INVALID);
 | 
			
		||||
            }
 | 
			
		||||
            onFinish();
 | 
			
		||||
          }, function() {
 | 
			
		||||
            loadFail(imgElem, options);
 | 
			
		||||
            setSvgLoadCacheValue(LOAD_FAIL);
 | 
			
		||||
            onFinish();
 | 
			
		||||
          });
 | 
			
		||||
        } else {
 | 
			
		||||
          if (Array.isArray(svgInjectAttributeValue)) {
 | 
			
		||||
            // svgInjectAttributeValue is an array. Injection is not complete so register callback
 | 
			
		||||
            svgInjectAttributeValue.push(callback);
 | 
			
		||||
          } else {
 | 
			
		||||
            callback();
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      } else {
 | 
			
		||||
        imgNotSet();
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Sets the default [options](#options) for SVGInject.
 | 
			
		||||
     *
 | 
			
		||||
     * @param {Object} [options] - default [options](#options) for an injection.
 | 
			
		||||
     */
 | 
			
		||||
    SVGInject.setOptions = function(options) {
 | 
			
		||||
      defaultOptions = mergeOptions(defaultOptions, options);
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    // Create a new instance of SVGInject
 | 
			
		||||
    SVGInject.create = createSVGInject;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Used in onerror Event of an `<img>` element to handle cases when the loading the original src fails
 | 
			
		||||
     * (for example if file is not found or if the browser does not support SVG). This triggers a call to the
 | 
			
		||||
     * options onFail hook if available. The optional second parameter will be set as the new src attribute
 | 
			
		||||
     * for the img element.
 | 
			
		||||
     *
 | 
			
		||||
     * @param {HTMLImageElement} img - an img element
 | 
			
		||||
     * @param {String} [fallbackSrc] - optional parameter fallback src
 | 
			
		||||
     */
 | 
			
		||||
    SVGInject.err = function(img, fallbackSrc) {
 | 
			
		||||
      if (img) {
 | 
			
		||||
        if (img[__SVGINJECT] != FAIL) {
 | 
			
		||||
          removeEventListeners(img);
 | 
			
		||||
 | 
			
		||||
          if (!IS_SVG_SUPPORTED) {
 | 
			
		||||
            svgNotSupported(img, defaultOptions);
 | 
			
		||||
          } else {
 | 
			
		||||
            removeOnLoadAttribute(img);
 | 
			
		||||
            loadFail(img, defaultOptions);
 | 
			
		||||
          }
 | 
			
		||||
          if (fallbackSrc) {
 | 
			
		||||
            removeOnLoadAttribute(img);
 | 
			
		||||
            img.src = fallbackSrc;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      } else {
 | 
			
		||||
        imgNotSet();
 | 
			
		||||
      }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    window[globalName] = SVGInject;
 | 
			
		||||
 | 
			
		||||
    return SVGInject;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  var SVGInjectInstance = createSVGInject('SVGInject');
 | 
			
		||||
 | 
			
		||||
  if (typeof module == 'object' && typeof module.exports == 'object') {
 | 
			
		||||
    module.exports = SVGInjectInstance;
 | 
			
		||||
  }
 | 
			
		||||
})(window, document);
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,10 @@
 | 
			
		|||
!function(o,l){var r,a,s="createElement",g="getElementsByTagName",b="length",E="style",d="title",y="undefined",k="setAttribute",w="getAttribute",x=null,A="__svgInject",C="--inject-",S=new RegExp(C+"\\d+","g"),I="LOAD_FAIL",t="SVG_NOT_SUPPORTED",L="SVG_INVALID",v=["src","alt","onload","onerror"],j=l[s]("a"),G=typeof SVGRect!=y,f={useCache:!0,copyAttributes:!0,makeIdsUnique:!0},N={clipPath:["clip-path"],"color-profile":x,cursor:x,filter:x,linearGradient:["fill","stroke"],marker:["marker",
 | 
			
		||||
"marker-end","marker-mid","marker-start"],mask:x,pattern:["fill","stroke"],radialGradient:["fill","stroke"]},u=1,c=2,O=1;function T(e){return(r=r||new XMLSerializer).serializeToString(e)}function P(e,r){var t,n,i,o,a=C+O++,f=/url\("?#([a-zA-Z][\w:.-]*)"?\)/g,u=e.querySelectorAll("[id]"),c=r?[]:x,l={},s=[],d=!1;if(u[b]){for(i=0;i<u[b];i++)(n=u[i].localName)in N&&(l[n]=1);for(n in l)(N[n]||[n]).forEach(function(e){s.indexOf(e)<0&&s.push(e)});s[b]&&s.push(E);var v,p,m,h=e[g]("*"),y=e;for(i=-1;y!=x;
 | 
			
		||||
){if(y.localName==E)(m=(p=y.textContent)&&p.replace(f,function(e,r){return c&&(c[r]=1),"url(#"+r+a+")"}))!==p&&(y.textContent=m);else if(y.hasAttributes()){for(o=0;o<s[b];o++)v=s[o],(m=(p=y[w](v))&&p.replace(f,function(e,r){return c&&(c[r]=1),"url(#"+r+a+")"}))!==p&&y[k](v,m);["xlink:href","href"].forEach(function(e){var r=y[w](e);/^\s*#/.test(r)&&(r=r.trim(),y[k](e,r+a),c&&(c[r.substring(1)]=1))})}y=h[++i]}for(i=0;i<u[b];i++)t=u[i],c&&!c[t.id]||(t.id+=a,d=!0)}return d}function V(e,r,t,n){if(r){
 | 
			
		||||
r[k]("data-inject-url",t);var i=e.parentNode;if(i){n.copyAttributes&&function c(e,r){for(var t,n,i,o=e.attributes,a=0;a<o[b];a++)if(n=(t=o[a]).name,-1==v.indexOf(n))if(i=t.value,n==d){var f,u=r.firstElementChild;u&&u.localName.toLowerCase()==d?f=u:(f=l[s+"NS"]("http://www.w3.org/2000/svg",d),r.insertBefore(f,u)),f.textContent=i}else r[k](n,i)}(e,r);var o=n.beforeInject,a=o&&o(e,r)||r;i.replaceChild(a,e),e[A]=u,m(e);var f=n.afterInject;f&&f(e,a)}}else D(e,n)}function p(){for(var e={},r=arguments,
 | 
			
		||||
t=0;t<r[b];t++){var n=r[t];for(var i in n)n.hasOwnProperty(i)&&(e[i]=n[i])}return e}function _(e,r){if(r){var t;try{t=function i(e){return(a=a||new DOMParser).parseFromString(e,"text/xml")}(e)}catch(o){return x}return t[g]("parsererror")[b]?x:t.documentElement}var n=l.createElement("div");return n.innerHTML=e,n.firstElementChild}function m(e){e.removeAttribute("onload")}function n(e){console.error("SVGInject: "+e)}function i(e,r,t){e[A]=c,t.onFail?t.onFail(e,r):n(r)}function D(e,r){m(e),i(e,L,r)
 | 
			
		||||
}function F(e,r){m(e),i(e,t,r)}function M(e,r){i(e,I,r)}function q(e){e.onload=x,e.onerror=x}function R(e){n("no img element")}var e=function z(e,r){var t=p(f,r),h={};function n(a,f){f=p(t,f);var e=function(r){var e=function(){var e=f.onAllFinish;e&&e(),r&&r()};if(a&&typeof a[b]!=y){var t=0,n=a[b];if(0==n)e();else for(var i=function(){++t==n&&e()},o=0;o<n;o++)u(a[o],f,i)}else u(a,f,e)};return typeof Promise==y?e():new Promise(e)}function u(u,c,e){if(u){var r=u[A];if(r)Array.isArray(r)?r.push(e
 | 
			
		||||
):e();else{if(q(u),!G)return F(u,c),void e();var t=c.beforeLoad,n=t&&t(u)||u[w]("src");if(!n)return""===n&&M(u,c),void e();var i=[];u[A]=i;var l=function(){e(),i.forEach(function(e){e()})},s=function f(e){return j.href=e,j.href}(n),d=c.useCache,v=c.makeIdsUnique,p=function(r){d&&(h[s].forEach(function(e){e(r)}),h[s]=r)};if(d){var o,a=function(e){if(e===I)M(u,c);else if(e===L)D(u,c);else{var r,t=e[0],n=e[1],i=e[2];v&&(t===x?(t=P(r=_(n,!1),!1),e[0]=t,e[2]=t&&T(r)):t&&(n=function o(e){
 | 
			
		||||
return e.replace(S,C+O++)}(i))),r=r||_(n,!1),V(u,r,s,c)}l()};if(typeof(o=h[s])!=y)return void(o.isCallbackQueue?o.push(a):a(o));(o=[]).isCallbackQueue=!0,h[s]=o}!function m(e,r,t){if(e){var n=new XMLHttpRequest;n.onreadystatechange=function(){if(4==n.readyState){var e=n.status;200==e?r(n.responseXML,n.responseText.trim()):400<=e?t():0==e&&t()}},n.open("GET",e,!0),n.send()}}(s,function(e,r){var t=e instanceof Document?e.documentElement:_(r,!0),n=c.afterLoad;if(n){var i=n(t,r)||t;if(i){
 | 
			
		||||
var o="string"==typeof i;r=o?i:T(t),t=o?_(i,!0):i}}if(t instanceof SVGElement){var a=x;if(v&&(a=P(t,!1)),d){var f=a&&T(t);p([a,r,f])}V(u,t,s,c)}else D(u,c),p(L);l()},function(){M(u,c),p(I),l()})}}else R()}return G&&function i(e){var r=l[g]("head")[0];if(r){var t=l[s](E);t.type="text/css",t.appendChild(l.createTextNode(e)),r.appendChild(t)}}('img[onload^="'+e+'("]{visibility:hidden;}'),n.setOptions=function(e){t=p(t,e)},n.create=z,n.err=function(e,r){e?e[A]!=c&&(q(e),G?(m(e),M(e,t)):F(e,t),r&&(m(
 | 
			
		||||
e),e.src=r)):R()},o[e]=n}("SVGInject");"object"==typeof module&&"object"==typeof module.exports&&(module.exports=e)}(window,document);
 | 
			
		||||
		Loading…
	
		Reference in New Issue