diff --git a/.idea/encodings.xml b/.idea/encodings.xml index e2d09724..65ac0a69 100644 --- a/.idea/encodings.xml +++ b/.idea/encodings.xml @@ -1,8 +1,8 @@ - + - + \ No newline at end of file diff --git a/pom.xml b/pom.xml index bf866382..3647c99c 100644 --- a/pom.xml +++ b/pom.xml @@ -195,9 +195,36 @@ 3.4.0 + + + org.springframework.mobile + spring-mobile-starter + 2.0.0.M2 + + + + org.dom4j + dom4j + 2.0.0 + + + + com.fasterxml.jackson.dataformat + jackson-dataformat-xml + 2.8.8 + + + + spring-milestones + Spring Milestones + https://repo.spring.io/milestone + + + + diff --git a/src/main/java/com/dreamchaser/depository_manage/config/JM_3DES.java b/src/main/java/com/dreamchaser/depository_manage/config/JM_3DES.java new file mode 100644 index 00000000..ba2734fb --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/config/JM_3DES.java @@ -0,0 +1,78 @@ +package com.dreamchaser.depository_manage.config; + +import org.apache.commons.codec.digest.DigestUtils; +import sun.misc.BASE64Decoder; +import sun.misc.BASE64Encoder; + +import javax.crypto.Cipher; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; + + +/** + * 用于3DES加密解密 + */ +public class JM_3DES { + + public static String JM_Key = "scanQrCode"; + /** + * 获取key + * @param key + * @return + */ + public static byte[] hex(String key){ + String f = DigestUtils.md5Hex(key); + byte[] bkeys = new String(f).getBytes(); + byte[] enk = new byte[24]; + for (int i=0;i<24;i++){ + enk[i] = bkeys[i]; + } + return enk; + } + + /** + * 3DES加密 + * @param key 密钥 + * @param srcStr 需要加密的字符串 + * @return + */ + public static String encode3Des(String key, String srcStr){ + byte[] keybyte = hex(key); + byte[] src = srcStr.getBytes(); + try { + //生成密钥 + SecretKey deskey = new SecretKeySpec(keybyte, "DESede"); + //加密 + Cipher c1 = Cipher.getInstance("DESede"); + c1.init(Cipher.ENCRYPT_MODE, deskey); + String pwd = (new BASE64Encoder()).encodeBuffer(c1.doFinal(src)); + return pwd; + }catch(Exception e){ + e.printStackTrace(); + } + return null; + } + + /** + * 3DES解密 + * @param key 加密密钥 + * @param desStr 需要解密的字符串 + * @return + */ + public static String decode3Des(String key, String desStr){ + byte[] keybyte = hex(key); + try { + byte[] src = (new BASE64Decoder()).decodeBuffer(desStr); + //生成密钥 + SecretKey deskey = new SecretKeySpec(keybyte, "DESede"); + //解密 + Cipher c1 = Cipher.getInstance("DESede"); + c1.init(Cipher.DECRYPT_MODE, deskey); + String pwd = new String(c1.doFinal(src)); + return pwd; + }catch(Exception e){ + e.printStackTrace(); + } + return null; + } +} diff --git a/src/main/java/com/dreamchaser/depository_manage/config/PortConfig.java b/src/main/java/com/dreamchaser/depository_manage/config/PortConfig.java index 0381259e..25c93712 100644 --- a/src/main/java/com/dreamchaser/depository_manage/config/PortConfig.java +++ b/src/main/java/com/dreamchaser/depository_manage/config/PortConfig.java @@ -1,5 +1,6 @@ package com.dreamchaser.depository_manage.config; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.dreamchaser.depository_manage.controller.PageController; @@ -10,6 +11,7 @@ import com.dreamchaser.depository_manage.utils.HttpUtils; import lombok.Data; import org.apache.http.protocol.HTTP; +import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; @@ -27,12 +29,13 @@ public class PortConfig { public static String external_url_6666 = "http://172.20.2.87:6666"; // public static String external_url_6666 = "http://127.0.0.1:6666"; + /** * 获取相应部门的部门负责人 * @param administration * @return */ - public static List findDepartmentHeadByUser(Administration administration){ + public static List findDepartmentHeadByUser(Administration administration, UserByPort userToken){ String url = PortConfig.external_url + "/org/positionlist"; Integer maindeparment = administration.getId(); Map map = new HashMap<>(); @@ -42,7 +45,7 @@ public class PortConfig { JSONObject paramObject = JSONObject.parseObject(jsonString); String post = null; try { - post = HttpUtils.send(url, paramObject, HTTP.UTF_8); + post = HttpUtils.send(url, paramObject, HTTP.UTF_8,userToken); } catch (IOException e) { e.printStackTrace(); } @@ -62,10 +65,48 @@ public class PortConfig { Map param = new HashMap<>(); Post userPost = userPostList.get(i); param.put("position",userPost.getId()); - List userByPorts = PageController.FindUserByMap(param); + List userByPorts = PageController.FindUserByMap(param,userToken); userByPortList.addAll(userByPorts); } return userByPortList; } + // 通过获取的企业微信UserId获取数据库中的用户以及对应key与token + public static Map findUserByQyWxUserId(String userId){ + String url = external_url +"/staff/wechat_give_uscont"; + Map result = new HashMap<>(); + Map map = new HashMap<>(); + map.put("openid",userId); + String jsonString = JSONObject.toJSONString(map); + JSONObject paramObject = JSONObject.parseObject(jsonString); + String post = null; + try { + post = HttpUtils.send(url,paramObject, HTTP.UTF_8,null); + } catch (IOException e) { + e.printStackTrace(); + } + JSONObject jsonObject = JSONObject.parseObject(post); + JSONObject data = (JSONObject) jsonObject.get("data"); + UserByPort userByPort = JSONObject.toJavaObject((JSONObject) data.get("userinfo"), UserByPort.class); + String userKey = data.getString("key"); + String userToken = data.getString("token"); + result.put("key",userKey); + result.put("token",userToken); + result.put("user",userByPort); + return result; + } + + + // 修改员工微信或企业微信UserId + public static void editUserWechatOpenid(Map map,UserByPort userByPort){ + String url = external_url+"/staff/edit_us_wechat_openid"; + String jsonString = JSONObject.toJSONString(map); + JSONObject paramObject = JSONObject.parseObject(jsonString); + String post = null; + try { + post = HttpUtils.send(url, paramObject, HTTP.UTF_8,userByPort); + } catch (IOException e) { + e.printStackTrace(); + } + } } diff --git a/src/main/java/com/dreamchaser/depository_manage/config/QyWxConfig.java b/src/main/java/com/dreamchaser/depository_manage/config/QyWxConfig.java new file mode 100644 index 00000000..53c9c266 --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/config/QyWxConfig.java @@ -0,0 +1,77 @@ +package com.dreamchaser.depository_manage.config; + + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.dreamchaser.depository_manage.config.QyWx_template_card.*; +import com.dreamchaser.depository_manage.utils.HttpUtils; +import com.dreamchaser.depository_manage.utils.ObjectFormatUtil; +import lombok.Data; + +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +// 用于实现企业微信相关功能 + +@Data +public class QyWxConfig { + public static String corpid = "ww02f310301953277a"; // 企业的CorpID + public static String secret = "GYwyoAGwMwumAVFrFn-RZIc2q11P3pm8NWY9pWDjLqw"; // 应用的凭证密钥 + public static int AgentId = 1000037; //应用agentid + public static String callBackUrl = "https://jy.hxgk.group/QyWxLogin"; + public static String token = ""; //access_token + public static String code = ""; //userCode + public static String sendMessage_url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN"; + + // 用于回调配置的token + public static String sToken = "sM4MFE44fAKdtqvq81HYygqmrdUn"; + // 用于回调配置的EncodingAESKey + public static String sEncodingAESKey = "10cruMoq3ixrQQngJcMN6CzOYrHWmHMpxp2Xn5iYrsk"; + + // 用于获取企业微信对应token + public static String GetQYWXToken(){ + String url = String.format(" https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s",QyWxConfig.corpid,QyWxConfig.secret); + String get = HttpUtils.doGet(url); + JSONObject jsonObject = JSONObject.parseObject(get); + Integer errcord = ObjectFormatUtil.toInteger(jsonObject.get("errcode")); + String accessToken = (String) jsonObject.get("access_token"); + String errmsg = (String) jsonObject.get("errmsg"); + if(errcord == 0){ + // 如果成功获取access_token + return accessToken; + }else{ + // 否则返回空值 + return "visitToFail:"+errmsg; + } + } + + + // 根据获取到的用户code以及token获取用户id + public static JSONObject GetQYWXUserId(){ + String url = String.format("https://qyapi.weixin.qq.com/cgi-bin/auth/getuserinfo?access_token=%s&code=%s",QyWxConfig.token,QyWxConfig.code); + String get = HttpUtils.doGet(url); + JSONObject jsonObject = JSONObject.parseObject(get); + return jsonObject; + + } + + // 用于拼接发送链接 + public static String getQYWXCodeUrl(){ + String encode = null; + try { + encode = URLEncoder.encode(QyWxConfig.callBackUrl, "utf-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + String url = String.format("https://open.weixin.qq.com/connect/oauth2/authorize?appid=%s&redirect_uri=%s&response_type=code&scope=snsapi_base&agentid=%s#wechat_redirect",QyWxConfig.corpid,encode,QyWxConfig.secret); + return url; + } + + + +} diff --git a/src/main/java/com/dreamchaser/depository_manage/config/QyWxJMJM/com/qq/weixin/mp/aes/AesException.java b/src/main/java/com/dreamchaser/depository_manage/config/QyWxJMJM/com/qq/weixin/mp/aes/AesException.java new file mode 100644 index 00000000..007bcfd3 --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/config/QyWxJMJM/com/qq/weixin/mp/aes/AesException.java @@ -0,0 +1,61 @@ +package com.dreamchaser.depository_manage.config.QyWxJMJM.com.qq.weixin.mp.aes; + + + +@SuppressWarnings("serial") +public class AesException extends Exception { + + public final static int OK = 0; + public final static int ValidateSignatureError = -40001; + public final static int ParseXmlError = -40002; + public final static int ComputeSignatureError = -40003; + public final static int IllegalAesKey = -40004; + public final static int ValidateCorpidError = -40005; + public final static int EncryptAESError = -40006; + public final static int DecryptAESError = -40007; + public final static int IllegalBuffer = -40008; + //public final static int EncodeBase64Error = -40009; + //public final static int DecodeBase64Error = -40010; + //public final static int GenReturnXmlError = -40011; + + private int code; + + private static String getMessage(int code) { + switch (code) { + case ValidateSignatureError: + return "签名验证错误"; + case ParseXmlError: + return "xml解析失败"; + case ComputeSignatureError: + return "sha加密生成签名失败"; + case IllegalAesKey: + return "SymmetricKey非法"; + case ValidateCorpidError: + return "corpid校验失败"; + case EncryptAESError: + return "aes加密失败"; + case DecryptAESError: + return "aes解密失败"; + case IllegalBuffer: + return "解密后得到的buffer非法"; +// case EncodeBase64Error: +// return "base64加密错误"; +// case DecodeBase64Error: +// return "base64解密错误"; +// case GenReturnXmlError: +// return "xml生成失败"; + default: + return null; // cannot be + } + } + + public int getCode() { + return code; + } + + AesException(int code) { + super(getMessage(code)); + this.code = code; + } + +} diff --git a/src/main/java/com/dreamchaser/depository_manage/config/QyWxJMJM/com/qq/weixin/mp/aes/ByteGroup.java b/src/main/java/com/dreamchaser/depository_manage/config/QyWxJMJM/com/qq/weixin/mp/aes/ByteGroup.java new file mode 100644 index 00000000..e4d806ad --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/config/QyWxJMJM/com/qq/weixin/mp/aes/ByteGroup.java @@ -0,0 +1,26 @@ +package com.dreamchaser.depository_manage.config.QyWxJMJM.com.qq.weixin.mp.aes; + +import java.util.ArrayList; + +class ByteGroup { + ArrayList byteContainer = new ArrayList(); + + public byte[] toBytes() { + byte[] bytes = new byte[byteContainer.size()]; + for (int i = 0; i < byteContainer.size(); i++) { + bytes[i] = byteContainer.get(i); + } + return bytes; + } + + public ByteGroup addBytes(byte[] bytes) { + for (byte b : bytes) { + byteContainer.add(b); + } + return this; + } + + public int size() { + return byteContainer.size(); + } +} diff --git a/src/main/java/com/dreamchaser/depository_manage/config/QyWxJMJM/com/qq/weixin/mp/aes/PKCS7Encoder.java b/src/main/java/com/dreamchaser/depository_manage/config/QyWxJMJM/com/qq/weixin/mp/aes/PKCS7Encoder.java new file mode 100644 index 00000000..a41facf4 --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/config/QyWxJMJM/com/qq/weixin/mp/aes/PKCS7Encoder.java @@ -0,0 +1,67 @@ +/** + * 对企业微信发送给企业后台的消息加解密示例代码. + * + * @copyright Copyright (c) 1998-2014 Tencent Inc. + */ + +// ------------------------------------------------------------------------ + +package com.dreamchaser.depository_manage.config.QyWxJMJM.com.qq.weixin.mp.aes; + +import java.nio.charset.Charset; +import java.util.Arrays; + +/** + * 提供基于PKCS7算法的加解密接口. + */ +class PKCS7Encoder { + static Charset CHARSET = Charset.forName("utf-8"); + static int BLOCK_SIZE = 32; + + /** + * 获得对明文进行补位填充的字节. + * + * @param count 需要进行填充补位操作的明文字节个数 + * @return 补齐用的字节数组 + */ + static byte[] encode(int count) { + // 计算需要填充的位数 + int amountToPad = BLOCK_SIZE - (count % BLOCK_SIZE); + if (amountToPad == 0) { + amountToPad = BLOCK_SIZE; + } + // 获得补位所用的字符 + char padChr = chr(amountToPad); + String tmp = new String(); + for (int index = 0; index < amountToPad; index++) { + tmp += padChr; + } + return tmp.getBytes(CHARSET); + } + + /** + * 删除解密后明文的补位字符 + * + * @param decrypted 解密后的明文 + * @return 删除补位字符后的明文 + */ + static byte[] decode(byte[] decrypted) { + int pad = (int) decrypted[decrypted.length - 1]; + if (pad < 1 || pad > 32) { + pad = 0; + } + return Arrays.copyOfRange(decrypted, 0, decrypted.length - pad); + } + + /** + * 将数字转化成ASCII码对应的字符,用于对明文进行补码 + * + * @param a 需要转化的数字 + * @return 转化得到的字符 + */ + static char chr(int a) { + byte target = (byte) (a & 0xFF); + return (char) target; + } + +} diff --git a/src/main/java/com/dreamchaser/depository_manage/config/QyWxJMJM/com/qq/weixin/mp/aes/SHA1.java b/src/main/java/com/dreamchaser/depository_manage/config/QyWxJMJM/com/qq/weixin/mp/aes/SHA1.java new file mode 100644 index 00000000..1750bd17 --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/config/QyWxJMJM/com/qq/weixin/mp/aes/SHA1.java @@ -0,0 +1,61 @@ +/** + * 对企业微信发送给企业后台的消息加解密示例代码. + * + * @copyright Copyright (c) 1998-2014 Tencent Inc. + */ + +// ------------------------------------------------------------------------ + +package com.dreamchaser.depository_manage.config.QyWxJMJM.com.qq.weixin.mp.aes; + +import java.security.MessageDigest; +import java.util.Arrays; + +/** + * SHA1 class + * + * 计算消息签名接口. + */ +class SHA1 { + + /** + * 用SHA1算法生成安全签名 + * @param token 票据 + * @param timestamp 时间戳 + * @param nonce 随机字符串 + * @param encrypt 密文 + * @return 安全签名 + * @throws AesException + */ + public static String getSHA1(String token, String timestamp, String nonce, String encrypt) throws AesException + { + try { + String[] array = new String[] { token, timestamp, nonce, encrypt }; + StringBuffer sb = new StringBuffer(); + // 字符串排序 + Arrays.sort(array); + for (int i = 0; i < 4; i++) { + sb.append(array[i]); + } + String str = sb.toString(); + // SHA1签名生成 + MessageDigest md = MessageDigest.getInstance("SHA-1"); + md.update(str.getBytes()); + byte[] digest = md.digest(); + + StringBuffer hexstr = new StringBuffer(); + String shaHex = ""; + for (int i = 0; i < digest.length; i++) { + shaHex = Integer.toHexString(digest[i] & 0xFF); + if (shaHex.length() < 2) { + hexstr.append(0); + } + hexstr.append(shaHex); + } + return hexstr.toString(); + } catch (Exception e) { + e.printStackTrace(); + throw new AesException(AesException.ComputeSignatureError); + } + } +} diff --git a/src/main/java/com/dreamchaser/depository_manage/config/QyWxJMJM/com/qq/weixin/mp/aes/WXBizMsgCrypt.java b/src/main/java/com/dreamchaser/depository_manage/config/QyWxJMJM/com/qq/weixin/mp/aes/WXBizMsgCrypt.java new file mode 100644 index 00000000..d65a9997 --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/config/QyWxJMJM/com/qq/weixin/mp/aes/WXBizMsgCrypt.java @@ -0,0 +1,289 @@ +/** + * 对企业微信发送给企业后台的消息加解密示例代码. + * + * @copyright Copyright (c) 1998-2014 Tencent Inc. + */ + +// ------------------------------------------------------------------------ + +/** + * 针对org.apache.commons.codec.binary.Base64, + * 需要导入架包commons-codec-1.9(或commons-codec-1.8等其他版本) + * 官方下载地址:http://commons.apache.org/proper/commons-codec/download_codec.cgi + */ +package com.dreamchaser.depository_manage.config.QyWxJMJM.com.qq.weixin.mp.aes; + +import java.nio.charset.Charset; +import java.util.Arrays; +import java.util.Random; + +import javax.crypto.Cipher; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; + +import org.apache.commons.codec.binary.Base64; + +/** + * 提供接收和推送给企业微信消息的加解密接口(UTF8编码的字符串). + *
    + *
  1. 第三方回复加密消息给企业微信
  2. + *
  3. 第三方收到企业微信发送的消息,验证消息的安全性,并对消息进行解密。
  4. + *
+ * 说明:异常java.security.InvalidKeyException:illegal Key Size的解决方案 + *
    + *
  1. 在官方网站下载JCE无限制权限策略文件(JDK7的下载地址: + * http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
  2. + *
  3. 下载后解压,可以看到local_policy.jar和US_export_policy.jar以及readme.txt
  4. + *
  5. 如果安装了JRE,将两个jar文件放到%JRE_HOME%\lib\security目录下覆盖原来的文件
  6. + *
  7. 如果安装了JDK,将两个jar文件放到%JDK_HOME%\jre\lib\security目录下覆盖原来文件
  8. + *
+ */ +public class WXBizMsgCrypt { + static Charset CHARSET = Charset.forName("utf-8"); + Base64 base64 = new Base64(); + byte[] aesKey; + String token; + String receiveid; + + /** + * 构造函数 + * @param token 企业微信后台,开发者设置的token + * @param encodingAesKey 企业微信后台,开发者设置的EncodingAESKey + * @param receiveid, 不同场景含义不同,详见文档 + * + * @throws AesException 执行失败,请查看该异常的错误码和具体的错误信息 + */ + public WXBizMsgCrypt(String token, String encodingAesKey, String receiveid) throws AesException { + if (encodingAesKey.length() != 43) { + throw new AesException(AesException.IllegalAesKey); + } + + this.token = token; + this.receiveid = receiveid; + aesKey = Base64.decodeBase64(encodingAesKey + "="); + } + + // 生成4个字节的网络字节序 + byte[] getNetworkBytesOrder(int sourceNumber) { + byte[] orderBytes = new byte[4]; + orderBytes[3] = (byte) (sourceNumber & 0xFF); + orderBytes[2] = (byte) (sourceNumber >> 8 & 0xFF); + orderBytes[1] = (byte) (sourceNumber >> 16 & 0xFF); + orderBytes[0] = (byte) (sourceNumber >> 24 & 0xFF); + return orderBytes; + } + + // 还原4个字节的网络字节序 + int recoverNetworkBytesOrder(byte[] orderBytes) { + int sourceNumber = 0; + for (int i = 0; i < 4; i++) { + sourceNumber <<= 8; + sourceNumber |= orderBytes[i] & 0xff; + } + return sourceNumber; + } + + // 随机生成16位字符串 + String getRandomStr() { + String base = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + Random random = new Random(); + StringBuffer sb = new StringBuffer(); + for (int i = 0; i < 16; i++) { + int number = random.nextInt(base.length()); + sb.append(base.charAt(number)); + } + return sb.toString(); + } + + /** + * 对明文进行加密. + * + * @param text 需要加密的明文 + * @return 加密后base64编码的字符串 + * @throws AesException aes加密失败 + */ + String encrypt(String randomStr, String text) throws AesException { + ByteGroup byteCollector = new ByteGroup(); + byte[] randomStrBytes = randomStr.getBytes(CHARSET); + byte[] textBytes = text.getBytes(CHARSET); + byte[] networkBytesOrder = getNetworkBytesOrder(textBytes.length); + byte[] receiveidBytes = receiveid.getBytes(CHARSET); + + // randomStr + networkBytesOrder + text + receiveid + byteCollector.addBytes(randomStrBytes); + byteCollector.addBytes(networkBytesOrder); + byteCollector.addBytes(textBytes); + byteCollector.addBytes(receiveidBytes); + + // ... + pad: 使用自定义的填充方式对明文进行补位填充 + byte[] padBytes = PKCS7Encoder.encode(byteCollector.size()); + byteCollector.addBytes(padBytes); + + // 获得最终的字节流, 未加密 + byte[] unencrypted = byteCollector.toBytes(); + + try { + // 设置加密模式为AES的CBC模式 + Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); + SecretKeySpec keySpec = new SecretKeySpec(aesKey, "AES"); + IvParameterSpec iv = new IvParameterSpec(aesKey, 0, 16); + cipher.init(Cipher.ENCRYPT_MODE, keySpec, iv); + + // 加密 + byte[] encrypted = cipher.doFinal(unencrypted); + + // 使用BASE64对加密后的字符串进行编码 + String base64Encrypted = base64.encodeToString(encrypted); + + return base64Encrypted; + } catch (Exception e) { + e.printStackTrace(); + throw new AesException(AesException.EncryptAESError); + } + } + + /** + * 对密文进行解密. + * + * @param text 需要解密的密文 + * @return 解密得到的明文 + * @throws AesException aes解密失败 + */ + String decrypt(String text) throws AesException { + byte[] original; + try { + // 设置解密模式为AES的CBC模式 + Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); + SecretKeySpec key_spec = new SecretKeySpec(aesKey, "AES"); + IvParameterSpec iv = new IvParameterSpec(Arrays.copyOfRange(aesKey, 0, 16)); + cipher.init(Cipher.DECRYPT_MODE, key_spec, iv); + + // 使用BASE64对密文进行解码 + byte[] encrypted = Base64.decodeBase64(text); + + // 解密 + original = cipher.doFinal(encrypted); + } catch (Exception e) { + e.printStackTrace(); + throw new AesException(AesException.DecryptAESError); + } + + String xmlContent, from_receiveid; + try { + // 去除补位字符 + byte[] bytes = PKCS7Encoder.decode(original); + + // 分离16位随机字符串,网络字节序和receiveid + byte[] networkOrder = Arrays.copyOfRange(bytes, 16, 20); + + int xmlLength = recoverNetworkBytesOrder(networkOrder); + + xmlContent = new String(Arrays.copyOfRange(bytes, 20, 20 + xmlLength), CHARSET); + from_receiveid = new String(Arrays.copyOfRange(bytes, 20 + xmlLength, bytes.length), + CHARSET); + } catch (Exception e) { + e.printStackTrace(); + throw new AesException(AesException.IllegalBuffer); + } + + // receiveid不相同的情况 + if (!from_receiveid.equals(receiveid)) { + throw new AesException(AesException.ValidateCorpidError); + } + return xmlContent; + + } + + /** + * 将企业微信回复用户的消息加密打包. + *
    + *
  1. 对要发送的消息进行AES-CBC加密
  2. + *
  3. 生成安全签名
  4. + *
  5. 将消息密文和安全签名打包成xml格式
  6. + *
+ * + * @param replyMsg 企业微信待回复用户的消息,xml格式的字符串 + * @param timeStamp 时间戳,可以自己生成,也可以用URL参数的timestamp + * @param nonce 随机串,可以自己生成,也可以用URL参数的nonce + * + * @return 加密后的可以直接回复用户的密文,包括msg_signature, timestamp, nonce, encrypt的xml格式的字符串 + * @throws AesException 执行失败,请查看该异常的错误码和具体的错误信息 + */ + public String EncryptMsg(String replyMsg, String timeStamp, String nonce) throws AesException { + // 加密 + String encrypt = encrypt(getRandomStr(), replyMsg); + + // 生成安全签名 + if (timeStamp == "") { + timeStamp = Long.toString(System.currentTimeMillis()); + } + + String signature = SHA1.getSHA1(token, timeStamp, nonce, encrypt); + + // System.out.println("发送给平台的签名是: " + signature[1].toString()); + // 生成发送的xml + String result = XMLParse.generate(encrypt, signature, timeStamp, nonce); + return result; + } + + /** + * 检验消息的真实性,并且获取解密后的明文. + *
    + *
  1. 利用收到的密文生成安全签名,进行签名验证
  2. + *
  3. 若验证通过,则提取xml中的加密消息
  4. + *
  5. 对消息进行解密
  6. + *
+ * + * @param msgSignature 签名串,对应URL参数的msg_signature + * @param timeStamp 时间戳,对应URL参数的timestamp + * @param nonce 随机串,对应URL参数的nonce + * @param postData 密文,对应POST请求的数据 + * + * @return 解密后的原文 + * @throws AesException 执行失败,请查看该异常的错误码和具体的错误信息 + */ + public String DecryptMsg(String msgSignature, String timeStamp, String nonce, String postData) + throws AesException { + + // 密钥,公众账号的app secret + // 提取密文 + Object[] encrypt = XMLParse.extract(postData); + + // 验证安全签名 + String signature = SHA1.getSHA1(token, timeStamp, nonce, encrypt[1].toString()); + + // 和URL中的签名比较是否相等 + // System.out.println("第三方收到URL中的签名:" + msg_sign); + // System.out.println("第三方校验签名:" + signature); + if (!signature.equals(msgSignature)) { + throw new AesException(AesException.ValidateSignatureError); + } + + // 解密 + String result = decrypt(encrypt[1].toString()); + return result; + } + + /** + * 验证URL + * @param msgSignature 签名串,对应URL参数的msg_signature + * @param timeStamp 时间戳,对应URL参数的timestamp + * @param nonce 随机串,对应URL参数的nonce + * @param echoStr 随机串,对应URL参数的echostr + * + * @return 解密之后的echostr + * @throws AesException 执行失败,请查看该异常的错误码和具体的错误信息 + */ + public String VerifyURL(String msgSignature, String timeStamp, String nonce, String echoStr) + throws AesException { + String signature = SHA1.getSHA1(token, timeStamp, nonce, echoStr); + + if (!signature.equals(msgSignature)) { + throw new AesException(AesException.ValidateSignatureError); + } + + String result = decrypt(echoStr); + return result; + } + +} \ No newline at end of file diff --git a/src/main/java/com/dreamchaser/depository_manage/config/QyWxJMJM/com/qq/weixin/mp/aes/XMLParse.java b/src/main/java/com/dreamchaser/depository_manage/config/QyWxJMJM/com/qq/weixin/mp/aes/XMLParse.java new file mode 100644 index 00000000..895915bf --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/config/QyWxJMJM/com/qq/weixin/mp/aes/XMLParse.java @@ -0,0 +1,104 @@ +/** + * 对企业微信发送给企业后台的消息加解密示例代码. + * + * @copyright Copyright (c) 1998-2014 Tencent Inc. + */ + +// ------------------------------------------------------------------------ + +package com.dreamchaser.depository_manage.config.QyWxJMJM.com.qq.weixin.mp.aes; + +import java.io.StringReader; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; +import org.xml.sax.InputSource; + +/** + * XMLParse class + * + * 提供提取消息格式中的密文及生成回复消息格式的接口. + */ +class XMLParse { + + /** + * 提取出xml数据包中的加密消息 + * @param xmltext 待提取的xml字符串 + * @return 提取出的加密消息字符串 + * @throws AesException + */ + public static Object[] extract(String xmltext) throws AesException { + Object[] result = new Object[3]; + try { + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + + String FEATURE = null; + // This is the PRIMARY defense. If DTDs (doctypes) are disallowed, almost all XML entity attacks are prevented + // Xerces 2 only - http://xerces.apache.org/xerces2-j/features.html#disallow-doctype-decl + FEATURE = "http://apache.org/xml/features/disallow-doctype-decl"; + dbf.setFeature(FEATURE, true); + + // If you can't completely disable DTDs, then at least do the following: + // Xerces 1 - http://xerces.apache.org/xerces-j/features.html#external-general-entities + // Xerces 2 - http://xerces.apache.org/xerces2-j/features.html#external-general-entities + // JDK7+ - http://xml.org/sax/features/external-general-entities + FEATURE = "http://xml.org/sax/features/external-general-entities"; + dbf.setFeature(FEATURE, false); + + // Xerces 1 - http://xerces.apache.org/xerces-j/features.html#external-parameter-entities + // Xerces 2 - http://xerces.apache.org/xerces2-j/features.html#external-parameter-entities + // JDK7+ - http://xml.org/sax/features/external-parameter-entities + FEATURE = "http://xml.org/sax/features/external-parameter-entities"; + dbf.setFeature(FEATURE, false); + + // Disable external DTDs as well + FEATURE = "http://apache.org/xml/features/nonvalidating/load-external-dtd"; + dbf.setFeature(FEATURE, false); + + // and these as well, per Timothy Morgan's 2014 paper: "XML Schema, DTD, and Entity Attacks" + dbf.setXIncludeAware(false); + dbf.setExpandEntityReferences(false); + + // And, per Timothy Morgan: "If for some reason support for inline DOCTYPEs are a requirement, then + // ensure the entity settings are disabled (as shown above) and beware that SSRF attacks + // (http://cwe.mitre.org/data/definitions/918.html) and denial + // of service attacks (such as billion laughs or decompression bombs via "jar:") are a risk." + + // remaining parser logic + DocumentBuilder db = dbf.newDocumentBuilder(); + StringReader sr = new StringReader(xmltext); + InputSource is = new InputSource(sr); + Document document = db.parse(is); + + Element root = document.getDocumentElement(); + NodeList nodelist1 = root.getElementsByTagName("Encrypt"); + result[0] = 0; + result[1] = nodelist1.item(0).getTextContent(); + return result; + } catch (Exception e) { + e.printStackTrace(); + throw new AesException(AesException.ParseXmlError); + } + } + + /** + * 生成xml消息 + * @param encrypt 加密后的消息密文 + * @param signature 安全签名 + * @param timestamp 时间戳 + * @param nonce 随机字符串 + * @return 生成的xml字符串 + */ + public static String generate(String encrypt, String signature, String timestamp, String nonce) { + + String format = "\n" + "\n" + + "\n" + + "%3$s\n" + "\n" + ""; + return String.format(format, encrypt, signature, timestamp, nonce); + + } +} diff --git a/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/BaseMessage.java b/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/BaseMessage.java new file mode 100644 index 00000000..5c07906e --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/BaseMessage.java @@ -0,0 +1,27 @@ +package com.dreamchaser.depository_manage.config.QyWx_template_card; + +import lombok.Data; + +/** + * 消息基类(企业号 -> 普通用户) + * + */ +@Data +public class BaseMessage { + // 否 成员ID列表(消息接收者,多个接收者用'|'分隔,最多支持1000个)。特殊情况:指定为@all,则向该企业应用的全部成员发送 + private String touser; + // 否 部门ID列表,多个接收者用'|'分隔,最多支持100个。当touser为@all时忽略本参数 + private String toparty; + // 否 标签ID列表,多个接收者用'|'分隔,最多支持100个。当touser为@all时忽略本参数 + private String totag; + // 是 消息类型 + private String msgtype; + // 是 企业应用的id,整型。可在应用的设置页面查看 + private int agentid; + // 否 表示是否开启id转译,0表示否,1表示是,默认0 + private int enable_id_trans; + // 否 表示是否开启重复消息检查,0表示否,1表示是,默认0 + private int enable_duplicate_check; + // 否 表示是否重复消息检查的时间间隔,默认1800s,最大不超过4小时 + private int duplicate_check_interval; +} \ No newline at end of file diff --git a/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/ButtonInteraction.java b/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/ButtonInteraction.java new file mode 100644 index 00000000..2103dc52 --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/ButtonInteraction.java @@ -0,0 +1,15 @@ +package com.dreamchaser.depository_manage.config.QyWx_template_card; + +import lombok.Data; + +/** + * 按钮交互性 + * + */ +@Data +public class ButtonInteraction extends BaseMessage { + // 模板卡片 + private TemplateCard_button_interaction template_card; + // 否 表示是否是保密消息,0表示否,1表示是,默认0 + private int safe; +} \ No newline at end of file diff --git a/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/MessageByMarkDown.java b/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/MessageByMarkDown.java new file mode 100644 index 00000000..d7327538 --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/MessageByMarkDown.java @@ -0,0 +1,8 @@ +package com.dreamchaser.depository_manage.config.QyWx_template_card; + +import lombok.Data; + +@Data +public class MessageByMarkDown extends BaseMessage { + private Object markdown; +} diff --git a/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_action.java b/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_action.java new file mode 100644 index 00000000..a065a793 --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_action.java @@ -0,0 +1,18 @@ +package com.dreamchaser.depository_manage.config.QyWx_template_card; + +import lombok.Data; + +/** + * 操作 + */ +@Data +public class TemplateCard_action { + /** + * 操作的描述文案 + */ + private String text; + /** + * 操作key值,用户点击后,会产生回调事件将本参数作为EventKey返回,回调事件会带上该key值,最长支持1024字节,不可重复 + */ + private String key; +} diff --git a/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_action_menu.java b/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_action_menu.java new file mode 100644 index 00000000..6bac8c58 --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_action_menu.java @@ -0,0 +1,25 @@ +package com.dreamchaser.depository_manage.config.QyWx_template_card; + +import lombok.Data; + +import javax.xml.bind.annotation.XmlRootElement; +import java.util.ArrayList; +import java.util.List; + +/** + * 卡片右上角更多操作按钮 + */ +@XmlRootElement +@Data +public class TemplateCard_action_menu { + /** + * 更多操作界面的描述 + */ + private String desc; + + /** + * 操作列表,列表长度取值范围为 [1, 3] + */ + private List action_list; + +} diff --git a/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_button.java b/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_button.java new file mode 100644 index 00000000..4328c2ec --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_button.java @@ -0,0 +1,33 @@ +package com.dreamchaser.depository_manage.config.QyWx_template_card; + +import lombok.Data; + +import javax.xml.bind.annotation.XmlRootElement; + +/** + * 按钮 + */ +@XmlRootElement +@Data +public class TemplateCard_button { + /** + * 按钮点击事件类型,0 或不填代表回调点击事件,1 代表跳转url + */ + private Integer type; + /** + * 按钮文案,建议不超过10个字 + */ + private String text; + /** + * 按钮样式,目前可填1~4,不填或错填默认1 + */ + private Integer style; + /** + * 按钮key值,用户点击后,会产生回调事件将本参数作为EventKey返回,回调事件会带上该key值,最长支持1024字节,不可重复,button_list.type是0时必填 + */ + private String key; + /** + * 跳转事件的url,button_list.type是1时必填 + */ + private String url; +} diff --git a/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_button_interaction.java b/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_button_interaction.java new file mode 100644 index 00000000..d183f3d2 --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_button_interaction.java @@ -0,0 +1,74 @@ +package com.dreamchaser.depository_manage.config.QyWx_template_card; + +import lombok.Data; + +import javax.xml.bind.annotation.XmlRootElement; +import java.util.List; + +/** + * 卡片模板--按钮交互型 + * + */ +@XmlRootElement +@Data +public class TemplateCard_button_interaction { + /** + * 模板卡片类型,投票选择型卡片填写"vote_interaction" + */ + + private String card_type; + /** + * 卡片来源样式信息,不需要来源样式可不填写 + */ + private TemplateCard_source source; + + /** + * 卡片右上角更多操作按钮 + */ + private TemplateCard_action_menu action_menu; + + /** + * 一级标题 + */ + private TemplateCard_main_title main_title; + + /** + * 引用文献样式 + */ + private Template_quote_area quote_area; + + /** + * 二级普通文本,建议不超过160个字,(支持id转译) + */ + private String sub_title_text; + + + /** + * 二级标题+文本列表,该字段可为空数组,但有数据的话需确认对应字段是否必填,列表长度不超过6 + */ + private List horizontal_content_list; + + + /** + * 整体卡片的点击跳转事件 + */ + private TemplateCard_card_action card_action; + + /** + * 任务id,同一个应用任务id不能重复,只能由数字、字母和“_-@”组成,最长128字节 + */ + private String task_id; + + + /** + * 下拉式的选择器 + */ + private TemplateCard_button_selection button_selection; + + /** + * 按钮列表,列表长度不超过6 + */ + private List button_list; + + +} \ No newline at end of file diff --git a/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_button_selection.java b/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_button_selection.java new file mode 100644 index 00000000..9ca0f2dc --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_button_selection.java @@ -0,0 +1,28 @@ +package com.dreamchaser.depository_manage.config.QyWx_template_card; + +import lombok.Data; + +import javax.xml.bind.annotation.XmlRootElement; +import java.util.List; + +/** + * 下拉式的选择器 + */ +@XmlRootElement +@Data +public class TemplateCard_button_selection { + /** + * 下拉式的选择器的key,用户提交选项后,会产生回调事件,回调事件会带上该key值表示该题,最长支持1024字节 + */ + private String question_key; + + /** + * 下拉式的选择器左边的标题 + */ + private String title; + + /** + * 选项列表,下拉选项不超过 10 个,最少1个 + */ + private List option_list; +} diff --git a/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_button_selection_option.java b/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_button_selection_option.java new file mode 100644 index 00000000..f70f1303 --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_button_selection_option.java @@ -0,0 +1,18 @@ +package com.dreamchaser.depository_manage.config.QyWx_template_card; + +import lombok.Data; + +/** + * 下拉选项 + */ +@Data +public class TemplateCard_button_selection_option { + /** + * 下拉式的选择器选项的id,用户提交后,会产生回调事件,回调事件会带上该id值表示该选项,最长支持128字节,不可重复 + */ + private String id; + /** + * 下拉式的选择器选项的文案,建议不超过16个字 + */ + private String text; +} diff --git a/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_card_action.java b/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_card_action.java new file mode 100644 index 00000000..df105c1b --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_card_action.java @@ -0,0 +1,33 @@ +package com.dreamchaser.depository_manage.config.QyWx_template_card; + +import lombok.Data; + +import javax.xml.bind.annotation.XmlRootElement; + + +/** + * 整体卡片的点击跳转事件 + */ +@XmlRootElement +@Data +public class TemplateCard_card_action { + /** + * 跳转事件类型,0或不填代表不是链接,1 代表跳转url,2 代表打开小程序 + */ + private Integer type; + + /** + * 跳转事件的url,card_action.type是1时必填 + */ + private String url; + + /** + * 跳转事件的小程序的appid,必须是与当前应用关联的小程序,card_action.type是2时必填 + */ + private Integer appid; + + /** + * 跳转事件的小程序的pagepath,card_action.type是2时选填 + */ + private String pagepath; +} diff --git a/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_emphasis_content.java b/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_emphasis_content.java new file mode 100644 index 00000000..519287f3 --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_emphasis_content.java @@ -0,0 +1,18 @@ +package com.dreamchaser.depository_manage.config.QyWx_template_card; + +import lombok.Data; + +/** + * 关键数据样式 + */ +@Data +public class TemplateCard_emphasis_content { + /** + * 关键数据样式的数据内容,建议不超过14个字 + */ + private String title; + /** + * 关键数据样式的数据描述内容,建议不超过22个字 + */ + private String desc; +} diff --git a/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_horizontal_content.java b/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_horizontal_content.java new file mode 100644 index 00000000..bd2593fb --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_horizontal_content.java @@ -0,0 +1,46 @@ +package com.dreamchaser.depository_manage.config.QyWx_template_card; + +import lombok.Data; + +import javax.xml.bind.annotation.XmlRootElement; + +/** + * 二级标题+文本列表 + */ +@XmlRootElement +@Data +public class TemplateCard_horizontal_content { + /** + * 链接类型,0或不填代表不是链接,1 代表跳转url,2 代表下载附件,3 代表点击跳转成员详情 + */ + private Integer type; + + /** + * 二级标题,建议不超过5个字 + */ + private String keyname; + + /** + * 二级文本,如果horizontal_content_list.type是2,该字段代表文件名称(要包含文件类型),建议不超过30个字,(支持id转译) + */ + private String value; + + /** + * 链接跳转的url,horizontal_content_list.type是1时必填 + */ + private String url; + + /** + * 附件的media_id,horizontal_content_list.type是2时必填 + */ + private Integer media_id; + + + /** + * 成员详情的userid,horizontal_content_list.type是3时必填 + */ + private String userid; + + + +} diff --git a/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_jump.java b/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_jump.java new file mode 100644 index 00000000..5f580d91 --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_jump.java @@ -0,0 +1,30 @@ +package com.dreamchaser.depository_manage.config.QyWx_template_card; + +import lombok.Data; + +/** + * 跳转指引样式 + */ +@Data +public class TemplateCard_jump { + /** + * 跳转链接样式的文案内容,建议不超过18个字 + */ + private String title; + /** + * 跳转链接类型,0或不填代表不是链接,1 代表跳转url,2 代表跳转小程序 + */ + private String type; + /** + * 跳转链接的url,jump_list.type是1时必填 + */ + private String url; + /** + * 跳转链接的小程序的appid,必须是与当前应用关联的小程序,jump_list.type是2时必填 + */ + private String appid; + /** + * 跳转链接的小程序的pagepath,jump_list.type是2时选填 + */ + private String pagepath; +} diff --git a/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_main_title.java b/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_main_title.java new file mode 100644 index 00000000..19ec6848 --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_main_title.java @@ -0,0 +1,24 @@ +package com.dreamchaser.depository_manage.config.QyWx_template_card; + +import lombok.Data; + +import javax.xml.bind.annotation.XmlRootElement; + + +/** + * 一级标题 + */ +@XmlRootElement +@Data +public class TemplateCard_main_title { + /** + * 一级标题,建议不超过36个字,(支持id转译) + */ + private String title; + /** + * 标题辅助信息,建议不超过44个字,(支持id转译) + */ + private String desc; + + +} diff --git a/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_source.java b/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_source.java new file mode 100644 index 00000000..f40e7fda --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_source.java @@ -0,0 +1,28 @@ +package com.dreamchaser.depository_manage.config.QyWx_template_card; + +import lombok.Data; + +import javax.xml.bind.annotation.XmlRootElement; + +/* +卡片来源样式信息 + */ +@XmlRootElement +@Data +public class TemplateCard_source { + /** + * 来源图片的url,来源图片的尺寸建议为72*72 + */ + private String icon_url; + + /** + * 来源图片的描述,建议不超过20个字,(支持id转译) + */ + private String desc; + + /** + * 来源文字的颜色,目前支持:0(默认) 灰色,1 黑色,2 红色,3 绿色 + */ + private Integer desc_color; + +} diff --git a/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_text_notice.java b/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_text_notice.java new file mode 100644 index 00000000..0bcc5ae8 --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_text_notice.java @@ -0,0 +1,74 @@ +package com.dreamchaser.depository_manage.config.QyWx_template_card; + + +import lombok.Data; + +import javax.xml.bind.annotation.XmlRootElement; +import java.util.List; + +/** + * 卡片模板--文本通知型 + */ +@XmlRootElement +@Data +public class TemplateCard_text_notice { + /** + * 模板卡片类型,投票选择型卡片填写"vote_interaction" + */ + + private String card_type; + /** + * 卡片来源样式信息,不需要来源样式可不填写 + */ + private TemplateCard_source source; + + /** + * 卡片右上角更多操作按钮 + */ + private TemplateCard_action_menu action_menu; + + /** + * 一级标题 + */ + private TemplateCard_main_title main_title; + + /** + * 引用文献样式 + */ + private Template_quote_area quote_area; + + /** + * 关键数据样式 + */ + private TemplateCard_emphasis_content emphasis_content; + + /** + * 二级普通文本,建议不超过160个字,(支持id转译) + */ + private String sub_title_text; + + + /** + * 二级标题+文本列表,该字段可为空数组,但有数据的话需确认对应字段是否必填,列表长度不超过6 + */ + private List horizontal_content_list; + + /** + * 跳转指引样式的列表,该字段可为空数组,但有数据的话需确认对应字段是否必填,列表长度不超过3 + */ + private List jump_list; + + + /** + * 整体卡片的点击跳转事件 + */ + private TemplateCard_card_action card_action; + + /** + * 任务id,同一个应用任务id不能重复,只能由数字、字母和“_-@”组成,最长128字节 + */ + private String task_id; + + + +} diff --git a/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/Template_quote_area.java b/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/Template_quote_area.java new file mode 100644 index 00000000..b5824abb --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/Template_quote_area.java @@ -0,0 +1,37 @@ +package com.dreamchaser.depository_manage.config.QyWx_template_card; + +import lombok.Data; + +import javax.xml.bind.annotation.XmlRootElement; + +/** + * 引用文献样式 + */ +@XmlRootElement +@Data +public class Template_quote_area { + /** + * 引用文献样式区域点击事件,0或不填代表没有点击事件,1 代表跳转url,2 代表跳转小程序 + */ + private Integer type; + /** + * 点击跳转的url,quote_area.type是1时必填 + */ + private String url; + /** + * 点击跳转的小程序的appid,必须是与当前应用关联的小程序,quote_area.type是2时必填 + */ + private Integer appid; + /** + * 点击跳转的小程序的pagepath,quote_area.type是2时选填 + */ + private String pagepath; + /** + * 引用文献样式的标题 + */ + private String title; + /** + * 引用文献样式的引用文案 + */ + private String quote_text; +} diff --git a/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TextNotice.java b/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TextNotice.java new file mode 100644 index 00000000..b0cdbac7 --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TextNotice.java @@ -0,0 +1,16 @@ +package com.dreamchaser.depository_manage.config.QyWx_template_card; + + +import lombok.Data; + +/** + * 文本通知型 + */ + +@Data +public class TextNotice extends BaseMessage{ + // 模板卡片 + private TemplateCard_text_notice template_card; + // 否 表示是否是保密消息,0表示否,1表示是,默认0 + private int safe; +} diff --git a/src/main/java/com/dreamchaser/depository_manage/config/WebMvcConfig.java b/src/main/java/com/dreamchaser/depository_manage/config/WebMvcConfig.java index a1f59091..e5b754e4 100644 --- a/src/main/java/com/dreamchaser/depository_manage/config/WebMvcConfig.java +++ b/src/main/java/com/dreamchaser/depository_manage/config/WebMvcConfig.java @@ -5,6 +5,9 @@ import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import java.util.Arrays; +import java.util.List; + @Configuration public class WebMvcConfig implements WebMvcConfigurer { @@ -12,11 +15,13 @@ public class WebMvcConfig implements WebMvcConfigurer { public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new UserInterceptor()) .addPathPatterns("/**") - .excludePathPatterns("/login", "/register", "/sendCode", "/error") + .excludePathPatterns("/login", "/register", "/sendCode", "/error","/QyWxLogin","/callback") .excludePathPatterns("/static/**"); } + + } diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/CompanyController.java b/src/main/java/com/dreamchaser/depository_manage/controller/CompanyController.java index 5efbcb3b..46dd18e4 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/CompanyController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/CompanyController.java @@ -18,6 +18,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; +import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; @@ -43,7 +44,8 @@ public class CompanyController { * @return */ @PostMapping("/allCompanyByParent") - public RestResponse findCompanyByNoParent(@RequestParam Mapmap){ + public RestResponse findCompanyByNoParent(@RequestParam Mapmap, HttpServletRequest request){ + UserByPort userToken = (UserByPort) request.getAttribute("userToken"); String url = PortConfig.external_url +"/org/govlist"; Object page = map.get("page"); Object pagesize = map.get("pagesize"); @@ -59,7 +61,7 @@ public class CompanyController { JSONObject paramObject = JSONObject.parseObject(jsonString); String post = null; try { - post = HttpUtils.send(url,paramObject, HTTP.UTF_8); + post = HttpUtils.send(url,paramObject, HTTP.UTF_8,userToken); } catch (IOException e) { e.printStackTrace(); } @@ -85,7 +87,8 @@ public class CompanyController { * @return */ @PostMapping("/companyByCondition") - public RestResponse findcompanyByCondition(@RequestParam Map map){ + public RestResponse findcompanyByCondition(@RequestParam Map map,HttpServletRequest request){ + UserByPort userByPort = (UserByPort)request.getAttribute("userToken"); String url = PortConfig.external_url + "/org/govlist"; if(map.containsKey("state")){ Object state = map.get("state"); @@ -99,7 +102,7 @@ public class CompanyController { JSONObject paramObject = JSONObject.parseObject(jsonString); String post = null; try { - post = HttpUtils.send(url,paramObject, HTTP.UTF_8); + post = HttpUtils.send(url,paramObject, HTTP.UTF_8,userByPort); } catch (IOException e) { e.printStackTrace(); } @@ -125,7 +128,8 @@ public class CompanyController { * @return */ @PostMapping("/allPostByOrganization") - public RestResponse allPostByParent(@RequestParam Map map) { + public RestResponse allPostByParent(@RequestParam Map map,HttpServletRequest request) { + UserByPort userByPort = (UserByPort)request.getAttribute("userToken"); String url = PortConfig.external_url + "/org/positionlist"; Object page = map.get("page"); Object pagesize = map.get("pagesize"); @@ -135,7 +139,7 @@ public class CompanyController { JSONObject paramObject = JSONObject.parseObject(jsonString); String post = null; try { - post = HttpUtils.send(url,paramObject, HTTP.UTF_8); + post = HttpUtils.send(url,paramObject, HTTP.UTF_8,userByPort); } catch (IOException e) { e.printStackTrace(); } @@ -178,10 +182,11 @@ public class CompanyController { } @PostMapping("/post_role") - public RestResponse addUser(@RequestBody Map map) { + public RestResponse addUser(@RequestBody Map map,HttpServletRequest request) { + UserByPort userToken = (UserByPort) request.getAttribute("userToken"); Map userParam = new HashMap<>(); userParam.put("position",ObjectFormatUtil.toInteger(map.get("userid"))); - List userByPortList = PageController.FindUserByMap(userParam); + List userByPortList = PageController.FindUserByMap(userParam,userToken); Integer success = 0; if(map.containsKey("depositoryId")) { for (int i = 0; i < userByPortList.size(); i++) { @@ -289,11 +294,12 @@ public class CompanyController { } @GetMapping("/findPostRole") - public RestResponse findPostRole(@RequestParam("postId") Integer postId){ + public RestResponse findPostRole(@RequestParam("postId") Integer postId,HttpServletRequest request){ + UserByPort userToken = (UserByPort) request.getAttribute("userToken"); Map userParam = new HashMap<>(); userParam.put("position",postId); - List userByPortList = PageController.FindUserByMap(userParam); - Post postById = PageController.findPostById(postId); + List userByPortList = PageController.FindUserByMap(userParam,userToken); + Post postById = PageController.findPostById(postId,userToken); List roleAndDepositoryByCondition = new ArrayList<>(); if(userByPortList.size() != 0){ Map param = new HashMap<>(); diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java b/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java index 57f37ecc..e3fcbac7 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java @@ -73,6 +73,7 @@ public class DepositoryController { return map; } + /** * 获取上周一到本周一的日期 * @@ -214,22 +215,6 @@ public class DepositoryController { Double warehouserCount1 = aDouble - depositoryRecordByDateByIn1 + depositoryRecordByDateByOut1; result.add(warehouserCount1); } - /* for (i = days.size() - 1; i > 0; i--) { - Calendar calendar = Calendar.getInstance(); - calendar.add(Calendar.DATE,1); - String format = formatter.format(calendar.getTime()) + " 00:00:00"; - if(Long.compare(days.get(i - 1),DateUtil.DateTimeToTimeStamp(format)) == 0){ - continue; - } - Integer val = (Integer) depositoryAllNameAndId.get(key); - // 获取一段时间内的入库额度 - //测试 - Double depositoryRecordByDateByIn1 = depositoryRecordService.findApplicationInRecordByDate(days.get(i - 1), days.get(i), val); - // 获取一段时间内的入库额度 - Double depositoryRecordByDateByOut1 = depositoryRecordService.findApplicationOutRecordByDate(days.get(i - 1), days.get(i), val); - Double warehouserCount1 = result.get(j++) - depositoryRecordByDateByIn1 + depositoryRecordByDateByOut1; - result.add(warehouserCount1); - }*/ Collections.reverse(result); map.put(key.toString(), ((ArrayList) result).clone()); result.clear(); @@ -245,8 +230,12 @@ public class DepositoryController { * @param depositoryRecordService * @return */ - public static List getBeforeInventoryByMonth(DepositoryService depositoryService, DepositoryRecordService depositoryRecordService) { - List depositoryAll = depositoryService.findDepositoryAll(); + public static List getBeforeInventoryByMonth(DepositoryService depositoryService, DepositoryRecordService depositoryRecordService,UserByPort userByPort) { +// List depositoryAll = depositoryService.findDepositoryAll(); + List depositoryAll = depositoryService.findDepositoryByAdminorgAndUser(userByPort); +// List depositoryAll = depositoryService.findDepositoryByAdminorg(userByPort.getMaindeparment().toString()); + // 获取该用户管理的仓库 + Map previousMonth = getPreviousMonth(); List months = (List) previousMonth.get("months"); List sourceList = (List) previousMonth.get("sourceList"); @@ -315,7 +304,7 @@ public class DepositoryController { * @param depositoryRecordService * @return */ - public static Map getBeforeInventoryOnMap(DepositoryService depositoryService, DepositoryRecordService depositoryRecordService) { + public static Map getBeforeInventoryOnMap(DepositoryService depositoryService, DepositoryRecordService depositoryRecordService,UserByPort userByPort) { // 中国地图数据 // ['product', '3月', '4月', '5月', '6月', '7月', '8月'], // ['电子产品类', 41.1, 30.4, 65.1, 53.3, 83.8, 98.7], @@ -325,7 +314,7 @@ public class DepositoryController { List months = (List) previousMonth.get("months"); List sourceList = (List) previousMonth.get("sourceList"); ArrayList title = new ArrayList<>(); - List depositoryAll = depositoryService.findDepositoryAll(); + List depositoryAll = depositoryService.findDepositoryByAdminorgAndUser(userByPort); title.add("depository"); for (int i = sourceList.size() - 1; i >= 0; i--) { title.add(((Map) sourceList.get(i)).get("month")); @@ -385,11 +374,12 @@ public class DepositoryController { * @return */ @GetMapping("/warehouseRecord") - public RestResponse findDepositoryRecordByCondition(@RequestParam Map map) { - List list = depositoryService.findDepositoryRecordPByCondition(map); + public RestResponse findDepositoryRecordByCondition(@RequestParam Map map,HttpServletRequest request) { + UserByPort userByPort = (UserByPort) request.getAttribute("userToken"); + List list = depositoryService.findDepositoryRecordPByCondition(map,userByPort); for (int i = 0; i < list.size(); i++) { Depository depository = list.get(i); - Administration company = PageController.getCompany(depository.getCid()); + Administration company = PageController.getCompany(depository.getCid(),userByPort); list.get(i).setCname(company.getName()); } return new RestResponse(list, depositoryService.findCountByCondition(map), 200); @@ -402,13 +392,14 @@ public class DepositoryController { * @return */ @GetMapping("/allWarehouseByParent") - public RestResponse findDepositoryByNoParent(@RequestParam Map map) { + public RestResponse findDepositoryByNoParent(@RequestParam Map map,HttpServletRequest request) { + UserByPort userByPort = (UserByPort) request.getAttribute("userToken"); if ("".equals(map.get("parentId")) || map.get("parentId") == null) { map.put("parentId", 0); } - List list = depositoryService.findDepositoryRecordPByCondition(map); + List list = depositoryService.findDepositoryRecordPByCondition(map,userByPort); // 获取所有行政单位 - Map administration = findAdministration(); + Map administration = findAdministration(userByPort); List administrationPList = (List) administration.get("administrationPList"); Integer total = (Integer) administration.get("total"); for (int i = 0; i < list.size(); i++) { @@ -428,7 +419,7 @@ public class DepositoryController { * * @return */ - public static Map findAdministration() { + public static Map findAdministration(UserByPort userByPort) { Map map = new HashMap<>(); String url = PortConfig.external_url + "/org/govlist"; String superior = "313"; @@ -438,7 +429,7 @@ public class DepositoryController { JSONObject paramObject = JSONObject.parseObject(jsonString); String post = null; try { - post = HttpUtils.send(url, paramObject, HTTP.UTF_8); + post = HttpUtils.send(url, paramObject, HTTP.UTF_8,userByPort); } catch (IOException e) { e.printStackTrace(); } @@ -468,13 +459,14 @@ public class DepositoryController { * @return */ @PostMapping("/realDeleteDepository") - public RestResponse realDeleteDepository(@RequestBody Map map) { + public RestResponse realDeleteDepository(@RequestBody Map map,HttpServletRequest request) { + UserByPort userToken = (UserByPort) request.getAttribute("userToken"); if (map.containsKey("id")) { Integer id = ObjectFormatUtil.toInteger(map.get("id")); new Thread(new Runnable() { @Override public void run() { - RealDeleteSonDepository(id.toString()); + RealDeleteSonDepository(id.toString(),userToken); } }).start(); return CrudUtil.deleteHandle(depositoryService.deleteDepositoryRecordById(id), 1); @@ -485,7 +477,7 @@ public class DepositoryController { new Thread(new Runnable() { @Override public void run() { - RealDeleteSonDepository(id); + RealDeleteSonDepository(id,userToken); } }).start(); } @@ -500,14 +492,14 @@ public class DepositoryController { * * @param parentId */ - public void RealDeleteSonDepository(String parentId) { + public void RealDeleteSonDepository(String parentId,UserByPort userByPort) { Map param = new HashMap<>(); param.put("parentId", parentId); // 获取当前仓库所有子仓库 - List depositoryRecordPByCondition = depositoryService.findDepositoryRecordPByCondition(param); + List depositoryRecordPByCondition = depositoryService.findDepositoryRecordPByCondition(param,userByPort); for (int i = 0; i < depositoryRecordPByCondition.size(); i++) { Integer id = depositoryRecordPByCondition.get(i).getId(); // 获取当前仓库id - RealDeleteSonDepository(id.toString()); // 递归查询仓库 + RealDeleteSonDepository(id.toString(),userByPort); // 递归查询仓库 depositoryService.deleteDepositoryRecordById(id); // 删除仓库 } } @@ -519,8 +511,9 @@ public class DepositoryController { * @return */ @PostMapping("/depository") - public RestResponse insertDepository(@RequestBody Map map) { - return CrudUtil.postHandle(depositoryService.insertDepository(map), 1); + public RestResponse insertDepository(@RequestBody Map map,HttpServletRequest request) { + UserByPort userToken = (UserByPort) request.getAttribute("userToken"); + return CrudUtil.postHandle(depositoryService.insertDepository(map,userToken), 1); } /** @@ -530,14 +523,15 @@ public class DepositoryController { * @return */ @PostMapping("/depository_del") - public RestResponse deleteDepository(@RequestBody Map map) { + public RestResponse deleteDepository(@RequestBody Map map,HttpServletRequest request) { + UserByPort userToken = (UserByPort) request.getAttribute("userToken"); if (map.containsKey("id")) { Integer id = ObjectFormatUtil.toInteger(map.get("id")); // UpdateSonState(id.toString(),3,true); 修改为删除状态 new Thread(new Runnable() { @Override public void run() { - UpdateSonState(id.toString(), 3, true); + UpdateSonState(id.toString(), 3, true,userToken); } }).start(); return CrudUtil.deleteHandle(depositoryService.changeStateToDeletedById(id), 1); @@ -549,7 +543,7 @@ public class DepositoryController { new Thread(new Runnable() { @Override public void run() { - UpdateSonState(id, 3, true); + UpdateSonState(id, 3, true,userToken); } }).start(); } @@ -582,7 +576,8 @@ public class DepositoryController { * @return */ @PostMapping("/EditDepositoryState") - public RestResponse EditDepositoryState(@RequestBody Map map) { + public RestResponse EditDepositoryState(@RequestBody Map map,HttpServletRequest request) { + UserByPort userToken = (UserByPort) request.getAttribute("userToken"); if (map.containsKey("state")) { map.put("state", 1); } else { @@ -596,7 +591,7 @@ public class DepositoryController { new Thread(new Runnable() { @Override public void run() { - UpdateSonState(id, state, true); + UpdateSonState(id, state, true,userToken); } }).start(); } else { @@ -604,7 +599,7 @@ public class DepositoryController { new Thread(new Runnable() { @Override public void run() { - UpdateSonState(id, state, false); + UpdateSonState(id, state, false,userToken); } }).start(); } @@ -624,11 +619,11 @@ public class DepositoryController { * * @param parentId */ - public void UpdateSonState(String parentId, Integer state, boolean envelop) { + public void UpdateSonState(String parentId, Integer state, boolean envelop,UserByPort userToken) { Map param = new HashMap<>(); param.put("parentId", parentId); // 获取当前仓库所有子仓库 - List depositoryRecordPByCondition = depositoryService.findDepositoryRecordPByCondition(param); + List depositoryRecordPByCondition = depositoryService.findDepositoryRecordPByCondition(param,userToken); if (envelop) { // 将当前仓库下的产品状态改为禁用 UpdateSonMaterialState(parentId, state); @@ -638,7 +633,7 @@ public class DepositoryController { int depositoryId = depository.getId(); Map newMap = new HashMap<>(); newMap.put("parentId", depositoryId); - UpdateSonState(String.valueOf(depositoryId), state, envelop); + UpdateSonState(String.valueOf(depositoryId), state, envelop,userToken); Map map = new HashMap<>(); map.put("id", depositoryId); map.put("state", state); @@ -1083,10 +1078,10 @@ public class DepositoryController { depository_data.put("todayInventory", todayInventory); depository_data.put("sourceList", sourceList); depository_data.put("mapData", mapData); - depository_data.put("sourceListByMonth", getBeforeInventoryByMonth(depositoryService, depositoryRecordService)); + depository_data.put("sourceListByMonth", getBeforeInventoryByMonth(depositoryService, depositoryRecordService,userByPort)); depository_data.put("BeforeInventory", getBeforeInventoryByDName(depositoryService, depositoryRecordService, userByPort)); depository_data.put("ThisWeekInventory", getThisWeekInventoryByDName(depositoryService, depositoryRecordService, userByPort)); - depository_data.put("MapInventory", getBeforeInventoryOnMap(depositoryService, depositoryRecordService)); + depository_data.put("MapInventory", getBeforeInventoryOnMap(depositoryService, depositoryRecordService,userByPort)); // 封装 最终数据 Map data = new LinkedHashMap(); data.put("depository_data", depository_data); @@ -1107,11 +1102,12 @@ public class DepositoryController { * @return */ @GetMapping("/find_depository") - public RestResponse FindDepositoryByMid(@RequestParam("mid") String mid) { + public RestResponse FindDepositoryByMid(@RequestParam("mid") String mid,HttpServletRequest request) { + UserByPort userToken = (UserByPort) request.getAttribute("userToken"); Material materialById = materialService.findMaterialById(Integer.parseInt(mid)); Map param = new HashMap<>(); param.put("depositoryId", materialById.getDepositoryId()); - List depositoryId = depositoryService.findDepositoryRecordPByCondition(param); + List depositoryId = depositoryService.findDepositoryRecordPByCondition(param,userToken); return new RestResponse(depositoryId.get(0), 1, 200); } @@ -1134,8 +1130,9 @@ public class DepositoryController { * @return */ @GetMapping("/findMaterialByDepository") - public RestResponse FindMaterialByDepository(@RequestParam("depositoryId") String depositoryId) { - Boolean allSonDepository = findAllSonDepository(depositoryId); + public RestResponse FindMaterialByDepository(@RequestParam("depositoryId") String depositoryId,HttpServletRequest request) { + UserByPort userToken = (UserByPort) request.getAttribute("userToken"); + Boolean allSonDepository = findAllSonDepository(depositoryId,userToken); return new RestResponse(allSonDepository); } @@ -1146,15 +1143,15 @@ public class DepositoryController { * @return */ @PostMapping("/findRelevancyByDepository") - public RestResponse FindRelevancyByDepository(@RequestBody Map map) { + public RestResponse FindRelevancyByDepository(@RequestBody Map map,HttpServletRequest request) { Boolean allSonDepositoryOfRelevancy = false; if (map.containsKey("id")) { Integer depositoryId = (Integer) map.get("id"); - allSonDepositoryOfRelevancy = findAllSonDepositoryOfRelevancy(depositoryId.toString()); + allSonDepositoryOfRelevancy = findAllSonDepositoryOfRelevancy(depositoryId.toString(),request); } else if (map.containsKey("ids")) { List ids = (List) map.get("ids"); for (int i = 0; i < ids.size(); i++) { - allSonDepositoryOfRelevancy |= findAllSonDepositoryOfRelevancy(ids.get(i).toString()); + allSonDepositoryOfRelevancy |= findAllSonDepositoryOfRelevancy(ids.get(i).toString(),request); if (allSonDepositoryOfRelevancy) { break; } @@ -1171,7 +1168,7 @@ public class DepositoryController { * @param parentid * @return */ - public Boolean findAllSonDepository(String parentid) { + public Boolean findAllSonDepository(String parentid,UserByPort userToken) { Map param = new HashMap<>(); param.put("parentId", parentid); param.put("state", 1); @@ -1179,10 +1176,10 @@ public class DepositoryController { if (materialByDepository) { return true; } - List depositoryRecordPByCondition = depositoryService.findDepositoryRecordPByCondition(param); + List depositoryRecordPByCondition = depositoryService.findDepositoryRecordPByCondition(param,userToken); for (int i = 0; i < depositoryRecordPByCondition.size(); i++) { if (!findMaterialByDepository(depositoryRecordPByCondition.get(i).getId().toString())) { - findAllSonDepository(depositoryRecordPByCondition.get(i).getId().toString()); + findAllSonDepository(depositoryRecordPByCondition.get(i).getId().toString(),userToken); } else { return true; } @@ -1196,20 +1193,21 @@ public class DepositoryController { * @param parentid * @return */ - public Boolean findAllSonDepositoryOfRelevancy(String parentid) { + public Boolean findAllSonDepositoryOfRelevancy(String parentid,HttpServletRequest request) { + UserByPort userToken = (UserByPort) request.getAttribute("userToken"); Map param = new HashMap<>(); param.put("parentId", parentid); param.put("state", 1); boolean materialByDepository = findMaterialByDepository(parentid); - Boolean depositoryRecord = findDepositoryRecord(parentid); + Boolean depositoryRecord = findDepositoryRecord(parentid,request); if (materialByDepository || depositoryRecord) { return true; } - List depositoryRecordPByCondition = depositoryService.findDepositoryRecordPByCondition(param); + List depositoryRecordPByCondition = depositoryService.findDepositoryRecordPByCondition(param,userToken); for (int i = 0; i < depositoryRecordPByCondition.size(); i++) { String depositoryId = depositoryRecordPByCondition.get(i).getId().toString(); - if (!findMaterialByDepository(depositoryId) && !findDepositoryRecord(depositoryId)) { - findAllSonDepositoryOfRelevancy(depositoryRecordPByCondition.get(i).getId().toString()); + if (!findMaterialByDepository(depositoryId) && !findDepositoryRecord(depositoryId,request)) { + findAllSonDepositoryOfRelevancy(depositoryRecordPByCondition.get(i).getId().toString(),request); } else { return true; } @@ -1240,10 +1238,10 @@ public class DepositoryController { * @param depositoryId * @return */ - public Boolean findDepositoryRecord(String depositoryId) { + public Boolean findDepositoryRecord(String depositoryId,HttpServletRequest request) { Map param = new HashMap<>(); param.put("depositoryId", depositoryId); - List recordPByCondition = depositoryRecordService.findDepositoryRecordPByCondition(param); + List recordPByCondition = depositoryRecordService.findDepositoryRecordPByCondition(param,request); if (recordPByCondition.size() > 0) { return true; } @@ -1257,19 +1255,21 @@ public class DepositoryController { * @return */ @GetMapping("/findDepositoryByParent") - public RestResponse FindDepositoryByParentId(@RequestParam("parentId") String parentId) { + public RestResponse FindDepositoryByParentId(@RequestParam("parentId") String parentId,HttpServletRequest request) { + UserByPort userToken = (UserByPort) request.getAttribute("userToken"); Map param = new HashMap<>(); param.put("parentId", parentId); - List depositoryRecordPByCondition = depositoryService.findDepositoryRecordPByCondition(param); + List depositoryRecordPByCondition = depositoryService.findDepositoryRecordPByCondition(param,userToken); return new RestResponse(depositoryRecordPByCondition, depositoryService.findCountByCondition(param), 200); } @GetMapping("/findManagerByDid") - public RestResponse FindManagerByDid(@RequestParam("did") Integer did) { + public RestResponse FindManagerByDid(@RequestParam("did") Integer did,HttpServletRequest request) { + UserByPort userToken = (UserByPort) request.getAttribute("userToken"); List userIdByDid = roleService.findUserIdByDid(did); List userByPortList = new ArrayList<>(); for (int i = 0; i < userIdByDid.size(); i++) { - UserByPort userByPort = PageController.FindUserById(userIdByDid.get(i)); + UserByPort userByPort = PageController.FindUserById(userIdByDid.get(i),userToken); userByPortList.add(userByPort); } return new RestResponse(userByPortList, userByPortList.size(), 200); @@ -1277,8 +1277,9 @@ public class DepositoryController { @GetMapping("/findPostByCompany") - public RestResponse findPostByCompany(@RequestParam("company") String company) { - List administrationPList = PageController.findCompanyBySuperior(company); + public RestResponse findPostByCompany(@RequestParam("company") String company,HttpServletRequest request) { + UserByPort userToken = (UserByPort) request.getAttribute("userToken"); + List administrationPList = PageController.findCompanyBySuperior(company,userToken); int size = administrationPList.size(); return new RestResponse(administrationPList, size, 200); } diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java b/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java index 5171732b..368e7ec8 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java @@ -8,6 +8,7 @@ import com.dreamchaser.depository_manage.exception.MyException; import com.dreamchaser.depository_manage.pojo.*; import com.dreamchaser.depository_manage.security.bean.UserToken; import com.dreamchaser.depository_manage.service.*; +import com.dreamchaser.depository_manage.service.impl.QyWxOperationService; import com.dreamchaser.depository_manage.utils.CrudUtil; import com.dreamchaser.depository_manage.utils.DateUtil; import com.dreamchaser.depository_manage.utils.HttpUtils; @@ -48,12 +49,15 @@ public class DepositoryRecordController { @Autowired private PlaceService placeService; + @Autowired + private QyWxOperationService qyWxOperationService; + @GetMapping("/depositoryRecord") - public RestResponse findDepositoryRecordByCondition(@RequestParam Map map){ - List list=depositoryRecordService.findDepositoryRecordPByCondition(map); + public RestResponse findDepositoryRecordByCondition(@RequestParam Map map,HttpServletRequest request){ + List list=depositoryRecordService.findDepositoryRecordPByCondition(map,request); for (int i = 0; i < list.size(); i++) { list.get(i).setPrice(list.get(i).getPrice() / 100); } @@ -64,14 +68,14 @@ public class DepositoryRecordController { public RestResponse findDepositoryInAndOutRecordPByCondition(@RequestParam Map map,HttpServletRequest request){ UserByPort userToken= (UserByPort) request.getAttribute("userToken"); map.put("applicantId",userToken.getId()); - List applicationInRecordPlist = depositoryRecordService.findApplicationInRecordPByCondition(map); + List applicationInRecordPlist = depositoryRecordService.findApplicationInRecordPByCondition(map,request); Integer InCount = depositoryRecordService.findApplicationInRecordPCountByCondition(map); for (int i = 0; i < applicationInRecordPlist.size(); i++) { if(applicationInRecordPlist.get(i).getPrice() != null) { applicationInRecordPlist.get(i).setPrice(applicationInRecordPlist.get(i).getPrice() / 100); } } - List applicationOutRecordPlist = depositoryRecordService.findApplicationOutRecordPByCondition(map); + List applicationOutRecordPlist = depositoryRecordService.findApplicationOutRecordPByCondition(map,request); Integer OutCount = depositoryRecordService.findApplicationOutRecordPCountByCondition(map); for (int i = 0; i < applicationOutRecordPlist.size(); i++) { if(applicationOutRecordPlist.get(i).getPrice() != null) { @@ -90,7 +94,7 @@ public class DepositoryRecordController { public RestResponse myTask(@RequestParam Map map,HttpServletRequest request){ UserByPort userToken= (UserByPort) request.getAttribute("userToken"); map.put("userId",userToken.getId()); - List myTask = depositoryRecordService.findMyTask(map); + List myTask = depositoryRecordService.findMyTask(map,request); return new RestResponse(myTask ,depositoryRecordService.findMyTaskOutCount(map),200); } @@ -285,26 +289,47 @@ public class DepositoryRecordController { public RestResponse insertApplicationOutRecord(@RequestBody Map map, HttpServletRequest request){ UserByPort userToken= (UserByPort) request.getAttribute("userToken"); map.put("applicantId",userToken.getId()); -// UserByPort departmentHeadByUser = findDepartmentHeadByUser(userToken); -// map.put("departmenthead",departmentHeadByUser.getId()); + // 获取当前部门负责人 + List departmentHeadByUsers = findDepartmentHeadByUser(userToken); + StringBuilder departmentHeadId = new StringBuilder(); + StringBuilder departMentHeadQyWxName = new StringBuilder(); + /* for (int i = 0; i < departmentHeadByUsers.size(); i++) { + departmentHeadId.append(departmentHeadByUsers.get(i).getId()).append(","); + departMentHeadQyWxName.append(departmentHeadByUsers.get(i).getWorkwechat()+","); + }*/ + departmentHeadId.append("78").append(","); + departMentHeadQyWxName.append("PangFuZhen").append(","); + map.put("departmenthead",departmentHeadId.toString()); List params = (List) map.get("params"); Integer integer = 0; if(params.size() < 1 && map.size() > 3){ Integer res = depositoryRecordService.insertApplicationOutRecord(map,userToken); // 插入主订单 + Object id = map.get("id"); // 获取主订单编号 if(res == 1){ // 如果插入成功 - Object id = map.get("id"); // 获取主订单编号 if(id != null){ map.remove("id"); map.put("parentId",id); } integer += depositoryRecordService.insertApplicationOutMin(map); } - + // 向企业微信中对应用户发送消息 + JSONObject jsonObject = qyWxOperationService.sendQyWxMessage(departMentHeadQyWxName.toString(), ObjectFormatUtil.toInteger(id), true); + // 将当前返回结果保存到redis中 + Map QyWxMessageMap = new HashMap<>(); + QyWxMessageMap.put("MsgId",jsonObject.getString("msgid")); + QyWxMessageMap.put("responseCode",jsonObject.getString("response_code")); + // key user:300450:QyWxOut:1 + // 申请人number + redisTemplateForHash.opsForHash().putAll("user:"+userToken.getNumber()+":QyWxOutId:"+id,QyWxMessageMap); + // 设置过期时间为三天 + redisTemplateForHash.expire("user:"+userToken.getNumber()+":QyWxOutId:"+id,72,TimeUnit.HOURS); }else{ // 插入主订单 -// map.put("departmenthead",departmentHeadByUser.getId()); + map.put("departmenthead",departmentHeadId.toString()); Integer res = depositoryRecordService.insertApplicationOutRecord(map,userToken); if(res == 1) { + // 获取主订单编号 + Object id = map.get("id"); for (int i = 0; i < params.size(); i++) { Integer temp = params.get(i); Map insert = new HashMap<>(); @@ -315,15 +340,25 @@ public class DepositoryRecordController { insert.put("code", map.get("code")); insert.put("placeId", map.get("placeId")); // 获取主订单编号 - insert.put("parentId", map.get("id")); + insert.put("parentId",id); // 插入子订单 integer += depositoryRecordService.insertApplicationOutMin(insert); } // 插入子订单 - map.put("parentId", map.get("id")); + map.put("parentId", id); map.remove("id"); // 插入子订单 integer += depositoryRecordService.insertApplicationOutMin(map); + JSONObject jsonObject = qyWxOperationService.sendQyWxMessage(departMentHeadQyWxName.toString(), ObjectFormatUtil.toInteger(id), true); + // 将当前返回结果保存到redis中 + Map QyWxMessageMap = new HashMap<>(); + QyWxMessageMap.put("MsgId",jsonObject.getString("msgid")); + QyWxMessageMap.put("responseCode",jsonObject.getString("response_code")); + // key user:300450:QyWxOut:1 + redisTemplateForHash.opsForHash().putAll("user:"+userToken.getNumber()+":QyWxOutId:"+id,QyWxMessageMap); + // 设置过期时间为三天 + // 申请人number + redisTemplateForHash.expire("user:"+userToken.getNumber()+":QyWxOutId:"+id,72,TimeUnit.HOURS); } } if(integer != 0 && params.size() < 1){ @@ -338,8 +373,8 @@ public class DepositoryRecordController { // 查看入库申请 @GetMapping("/applicationInView") - public RestResponse findApplicationInRecordByCondition(@RequestParam Map map){ - List list = depositoryRecordService.findApplicationInRecordPByCondition(map); + public RestResponse findApplicationInRecordByCondition(@RequestParam Map map,HttpServletRequest request){ + List list = depositoryRecordService.findApplicationInRecordPByCondition(map,request); for (int i = 0; i < list.size(); i++) { list.get(i).setPrice(list.get(i).getPrice() / 100); } @@ -400,7 +435,7 @@ public class DepositoryRecordController { ApplicationOutRecordP applicationOutRecordPById = depositoryRecordService.findApplicationOutRecordPById(applicationOutMinById.getParentId()); // 获取申请人 - UserByPort userByPort = PageController.FindUserById(applicationOutRecordPById.getApplicantId()); + UserByPort userByPort = PageController.FindUserById(applicationOutRecordPById.getApplicantId(),userToken); // 创建展示对象 SimpleApplicationOutMinRecordP simpleApplicationOutMinRecordP = new SimpleApplicationOutMinRecordP(applicationOutMinById); // 获取申请的物料信息 @@ -412,7 +447,7 @@ public class DepositoryRecordController { if(checkId != null){ // 如果该订单已经处理 // 获取处理人 - UserByPort checker = PageController.FindUserById(checkId); + UserByPort checker = PageController.FindUserById(checkId,userToken); simpleApplicationOutMinRecordP.setCheckerName(checker.getName()); } @@ -437,9 +472,9 @@ public class DepositoryRecordController { // 查看出库申请 @GetMapping("/applicationOutView") - public RestResponse findApplicationOutRecordByCondition(@RequestParam Map map){ + public RestResponse findApplicationOutRecordByCondition(@RequestParam Map map,HttpServletRequest request){ // 获取对应主订单 - List list = depositoryRecordService.findApplicationOutRecordPByCondition(map); + List list = depositoryRecordService.findApplicationOutRecordPByCondition(map,request); for (int i = 0; i < list.size(); i++) { ApplicationOutRecordP outRecordP = list.get(i); // 根据主订单获取所有子订单 @@ -460,7 +495,7 @@ public class DepositoryRecordController { mcode.append(materialById.getCode()).append(","); depositoryName.append(depository.getDname()).append(","); sumQuantity += applicationOutRecordMin.getQuantity(); - sumPrice += (materialById.getPrice() / 100); + sumPrice += (materialById.getPrice()); } list.get(i).setMcode(mcode.toString()); list.get(i).setMname(mname.toString()); @@ -525,12 +560,16 @@ public class DepositoryRecordController { UserByPort userToken= (UserByPort) request.getAttribute("userToken"); List mids = (List) map.get("mids"); List depositoryIds = (List) map.get("depositoryIds"); + List placeCodes = (List) map.get("placeCodes"); for (int i = 0; i < mids.size(); i++) { redisTemplate.opsForList().remove("mids"+userToken.getId(),1,mids.get(i)); } for (int i = 0; i < depositoryIds.size(); i++) { redisTemplate.opsForList().remove("depositoryIds"+userToken.getId(),1,depositoryIds.get(i)); } + for (int i = 0; i < placeCodes.size(); i++) { + redisTemplate.opsForList().remove("placeCodes"+userToken.getId(),1,placeCodes.get(i)); + } return CrudUtil.postHandle(1,1); } @@ -538,7 +577,7 @@ public class DepositoryRecordController { @PutMapping("/review") public RestResponse review(@RequestBody Map map, HttpServletRequest request){ UserByPort userToken= (UserByPort) request.getAttribute("userToken"); - Integer review = depositoryRecordService.review(map, userToken.getId()); + Integer review = depositoryRecordService.review(map, userToken.getId(),userToken); if(review != -1) { return CrudUtil.postHandle(review, 1); }else{ @@ -550,9 +589,18 @@ public class DepositoryRecordController { @PutMapping("/transfer") public RestResponse transfer(@RequestBody Map map, HttpServletRequest request){ UserByPort userToken= (UserByPort) request.getAttribute("userToken"); -// UserByPort departmentHeadByUser = findDepartmentHeadByUser(userToken); + List departmentHeadByUsers = findDepartmentHeadByUser(userToken); + StringBuilder departmentHeadId = new StringBuilder(); + StringBuilder departMentHeadQyWxName = new StringBuilder(); + /* for (int i = 0; i < departmentHeadByUsers.size(); i++) { + departmentHeadId.append(departmentHeadByUsers.get(i).getId()).append(","); + departMentHeadQyWxName.append(departmentHeadByUsers.get(i).getWorkwechat()+","); + }*/ + departmentHeadId.append("78").append(","); + departMentHeadQyWxName.append("PangFuZhen").append(","); + map.put("departmenthead",departmentHeadId.toString()); + map.put("departMentHeadQyWxName",departMentHeadQyWxName.toString()); List params = (List) map.get("params"); -// map.put("departmenthead",departmentHeadByUser.getId()); map.put("applicantId",userToken.getId()); map.put("toId",map.get("depositoryId")); map.remove("depositoryId"); @@ -563,7 +611,7 @@ public class DepositoryRecordController { for (int i = 0; i < params.size(); i++) { Integer temp = params.get(i); Map insert = new HashMap<>(); -// insert.put("departmenthead",departmentHeadByUser.getId()); + insert.put("departmenthead",departmentHeadId.toString()); insert.put("applicantId",userToken.getId()); insert.put("toId",map.get("depositoryId"+temp)); insert.put("mid",map.get("mid"+temp)); @@ -676,8 +724,16 @@ public class DepositoryRecordController { success += depositoryRecordService.applicationInPlace(map); }else if("out".equals(type)){ // 获取部门负责人 -// UserByPort departmentHeadByUser = findDepartmentHeadByUser(userToken); -// map.put("departmenthead",departmentHeadByUser.getId()); + List departmentHeadByUsers = findDepartmentHeadByUser(userToken); + StringBuilder departmentHeadId = new StringBuilder(); + StringBuilder departMentHeadQyWxName = new StringBuilder(); + /* for (int i = 0; i < departmentHeadByUsers.size(); i++) { + departmentHeadId.append(departmentHeadByUsers.get(i).getId()).append(","); + departMentHeadQyWxName.append(departmentHeadByUsers.get(i).getWorkwechat()+","); + }*/ + departmentHeadId.append("78").append(","); + departMentHeadQyWxName.append("PangFuZhen").append(","); + map.put("departmenthead",departmentHeadId.toString()); Integer res = depositoryRecordService.insertApplicationOutRecord(map,userToken); // 插入主订单 if(res == 1){ // 如果插入成功 Object id = map.get("id"); // 获取主订单编号 @@ -686,6 +742,16 @@ public class DepositoryRecordController { map.put("parentId",id); } success += depositoryRecordService.insertApplicationOutMin(map); + // 向企业微信中对应用户发送消息 + JSONObject jsonObject = qyWxOperationService.sendQyWxMessage(departMentHeadQyWxName.toString(), ObjectFormatUtil.toInteger(id), true); + // 将当前返回结果保存到redis中 + Map QyWxMessageMap = new HashMap<>(); + QyWxMessageMap.put("MsgId",jsonObject.getString("msgid")); + QyWxMessageMap.put("responseCode",jsonObject.getString("response_code")); + // key user:300450:QyWxOut:1 + redisTemplateForHash.opsForHash().putAll("user:"+userToken.getNumber()+":QyWxOutId:"+id,QyWxMessageMap); + // 设置过期时间为三天 + redisTemplateForHash.expire("user:"+userToken.getNumber()+":QyWxOutId:"+id,72,TimeUnit.HOURS); } } @@ -765,11 +831,19 @@ public class DepositoryRecordController { sumQuantity += integer; } // 获取部门负责人 -// UserByPort departmentHeadByUser = findDepartmentHeadByUser(userToken); + List departmentHeadByUsers = findDepartmentHeadByUser(userToken); + StringBuilder departmentHeadId = new StringBuilder(); + StringBuilder departMentHeadQyWxName = new StringBuilder(); + /* for (int i = 0; i < departmentHeadByUsers.size(); i++) { + departmentHeadId.append(departmentHeadByUsers.get(i).getId()).append(","); + departMentHeadQyWxName.append(departmentHeadByUsers.get(i).getWorkwechat()+","); + }*/ + departmentHeadId.append("78").append(","); + departMentHeadQyWxName.append("PangFuZhen").append(","); mainRecord.put("applicantId",userToken.getId()); mainRecord.put("applyRemark",""); mainRecord.put("quantity",sumQuantity.toString()); -// mainRecord.put("departmenthead",departmentHeadByUser.getId()); + mainRecord.put("departmenthead",departmentHeadId.toString()); // 插入主表 depositoryRecordService.insertApplicationOutRecord(mainRecord,userToken); id = ObjectFormatUtil.toInteger(mainRecord.get("id")); @@ -834,6 +908,16 @@ public class DepositoryRecordController { errMsg += materialById.getMname() + "在"+depositoryRecordById.getDname()+"出库数量为"+quantity +"失败,数量不足;"; } } + // 向企业微信中对应用户发送消息 + JSONObject jsonObject = qyWxOperationService.sendQyWxMessage(departMentHeadQyWxName.toString(), ObjectFormatUtil.toInteger(id), true); + // 将当前返回结果保存到redis中 + Map QyWxMessageMap = new HashMap<>(); + QyWxMessageMap.put("MsgId",jsonObject.getString("msgid")); + QyWxMessageMap.put("responseCode",jsonObject.getString("response_code")); + // key user:300450:QyWxOut:1 + redisTemplateForHash.opsForHash().putAll("user:"+userToken.getNumber()+":QyWxOutId:"+id,QyWxMessageMap); + // 设置过期时间为三天 + redisTemplateForHash.expire("user:"+userToken.getNumber()+":QyWxOutId:"+id,72,TimeUnit.HOURS); } if(success == 0){ depositoryRecordService.deleteApplicationOutRecordById(1); @@ -866,17 +950,16 @@ public class DepositoryRecordController { * @param user * @return */ - public static UserByPort findDepartmentHeadByUser(UserByPort user){ - String url = PortConfig.external_url + "/org/positionlist"; + public static List findDepartmentHeadByUser(UserByPort user){ + String url = PortConfig.external_url + "/staff/archiveslist"; Integer maindeparment = user.getMaindeparment(); Map map = new HashMap<>(); - map.put("organization",maindeparment.toString()); - map.put("incharge",1); + map.put("adminorg",maindeparment); String jsonString = JSONObject.toJSONString(map); JSONObject paramObject = JSONObject.parseObject(jsonString); String post = null; try { - post = HttpUtils.send(url, paramObject, HTTP.UTF_8); + post = HttpUtils.send(url, paramObject, HTTP.UTF_8,user); } catch (IOException e) { e.printStackTrace(); } @@ -886,11 +969,14 @@ public class DepositoryRecordController { if(list == null){ list = new JSONArray(); } - Post userPost = JSONObject.toJavaObject((JSONObject) list.get(0), Post.class); - Map param = new HashMap<>(); - param.put("position",userPost.getId()); - UserByPort userByPort = PageController.FindUserByMap(param).get(0); - return userByPort; + List DepartmentHeads = new ArrayList<>(); + for (int i = 0; i < list.size(); i++) { + UserByPort userByPort = JSONObject.toJavaObject((JSONObject) list.get(i), UserByPort.class); + if(userByPort.getPersonincharge() == 1){ + DepartmentHeads.add(userByPort); + } + } + return DepartmentHeads; } diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java b/src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java index 598ee1ec..bcfbf0e8 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java @@ -2,6 +2,7 @@ package com.dreamchaser.depository_manage.controller; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.dreamchaser.depository_manage.config.JM_3DES; import com.dreamchaser.depository_manage.entity.*; import com.dreamchaser.depository_manage.exception.MyException; import com.dreamchaser.depository_manage.pojo.*; @@ -271,6 +272,12 @@ public class MaterialController { return new RestResponse(materialPByCondition, materialService.findCountByCondition(map), 200); } + @PostMapping("/findInventoryByCondition") + public RestResponse findInventoryByCondition(@RequestBody Map map) { + List materialPByCondition = materialService.findInventory(map); + return new RestResponse(materialPByCondition, materialService.findInventoryCount(map), 200); + } + // 构造物料二维码 @GetMapping("/createQrCode") @@ -388,4 +395,17 @@ public class MaterialController { return new RestResponse(flag); } + + /** + * 用于将扫描的结果进行解密操作 + * @param map + * @return + */ + @PostMapping("/decode3Des") + public RestResponse decode3Des(@RequestBody Map map){ + String result = (String) map.get("result"); + String s = JM_3DES.decode3Des(JM_3DES.JM_Key, result); + return new RestResponse(s); + } + } diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/PageController.java b/src/main/java/com/dreamchaser/depository_manage/controller/PageController.java index 9258bcc0..dc4dfb92 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/PageController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/PageController.java @@ -3,28 +3,37 @@ package com.dreamchaser.depository_manage.controller; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.dreamchaser.depository_manage.config.JM_3DES; import com.dreamchaser.depository_manage.config.PortConfig; +import com.dreamchaser.depository_manage.config.QyWxConfig; import com.dreamchaser.depository_manage.entity.*; import com.dreamchaser.depository_manage.exception.MyException; import com.dreamchaser.depository_manage.pojo.*; import com.dreamchaser.depository_manage.security.bean.UserToken; import com.dreamchaser.depository_manage.security.pool.AuthenticationTokenPool; +import com.dreamchaser.depository_manage.security.pool.UserKeyAndTokenPool; import com.dreamchaser.depository_manage.service.*; import com.dreamchaser.depository_manage.utils.*; import com.sun.org.apache.xpath.internal.operations.Mod; import javafx.geometry.Pos; import org.apache.http.protocol.HTTP; +import org.apache.ibatis.annotations.Param; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.mobile.device.Device; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; +import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; +import java.math.BigDecimal; import java.text.SimpleDateFormat; +import java.time.Instant; import java.util.*; import java.util.concurrent.TimeUnit; @@ -72,12 +81,13 @@ public class PageController { - public static JSONObject Captcha(){ + public static JSONObject Captcha(HttpServletRequest request){ + UserByPort userByPort = (UserByPort) request.getAttribute("userToken"); String url = PortConfig.external_url_6666 + "/base/captcha"; JSONObject param = new JSONObject(); String post = null; try { - post = HttpUtils.send(url, param, HTTP.UTF_8); + post = HttpUtils.send(url, param, HTTP.UTF_8,userByPort); } catch (IOException e) { e.printStackTrace(); } @@ -97,21 +107,34 @@ public class PageController { } + + /** + * 用于正常登录 + * @param request + * @return + */ @GetMapping("/login") - public ModelAndView login() { + public ModelAndView login(HttpServletRequest request) { ModelAndView mv = new ModelAndView(); - JSONObject captcha = Captcha(); - String picPath = (String) captcha.get("picPath"); - String captchaid = (String) captcha.get("captchaid"); - mv.addObject("picPath", picPath); - mv.addObject("captchaid", captchaid); - mv.setViewName("pages/user/login"); - return mv; + QyWxConfig.token = QyWxConfig.GetQYWXToken(); + JSONObject captcha = Captcha(request); + String picPath = (String) captcha.get("picPath"); + String captchaid = (String) captcha.get("captchaid"); + mv.addObject("picPath", picPath); + mv.addObject("captchaid", captchaid); + mv.addObject("userWxId",""); + mv.setViewName("pages/user/login"); + return mv; } + + + + + @GetMapping("/index") public ModelAndView index(HttpServletRequest request) { ModelAndView mv = new ModelAndView(); @@ -129,7 +152,10 @@ public class PageController { */ @RequestMapping(value = "/index/menus", method = RequestMethod.GET) @ResponseBody - public Map index_menus(@RequestParam("uid") String uid) { + public Map index_menus(@RequestParam("uid") String uid, + HttpServletRequest request, + HttpServletResponse response) { + UserByPort userToken = (UserByPort) request.getAttribute("userToken"); //定义链接地址 String url = PortConfig.external_url_6666 + "/system_authorizing/obtain_authorization"; Map param = new HashMap<>(); @@ -138,7 +164,7 @@ public class PageController { JSONObject paramObject = JSONObject.parseObject(jsonString); String post = null; try { - post = HttpUtils.send(url, paramObject, HTTP.UTF_8); + post = HttpUtils.send(url, paramObject, HTTP.UTF_8,userToken); } catch (IOException e) { e.printStackTrace(); } @@ -168,7 +194,7 @@ public class PageController { Map logo = new HashMap<>(); Map logoInfo = new HashMap<>(); logoInfo.put("title", ""); - logoInfo.put("image", "static/images/logo_back.png"); + logoInfo.put("image", "/static/images/logo_back.ico"); logoInfo.put("href", ""); logo.put("logoInfo", logoInfo); //定义菜单 @@ -284,31 +310,29 @@ public class PageController { } @GetMapping("/depository_add") - public ModelAndView depository_add() { + public ModelAndView depository_add(HttpServletRequest request) { + UserByPort userByPort = (UserByPort) request.getAttribute("userToken"); ModelAndView mv = new ModelAndView(); mv.setViewName("pages/warehouse/depository_add"); - List depositoryAll = depositoryService.findDepositoryAll(); - Map administration = DepositoryController.findAdministration(); + Map administration = DepositoryController.findAdministration(userByPort); List administrationPList = (List) administration.get("administrationPList"); - mv.addObject("depositories", depositoryAll); mv.addObject("administrationPList", administrationPList); return mv; } @GetMapping("depository-out") public ModelAndView depository_out(HttpServletRequest request) { + UserByPort userToken = (UserByPort) request.getAttribute("userToken"); ModelAndView mv = new ModelAndView(); mv.setViewName("pages/warehouse/depository-out"); Map map = new HashMap<>(); map.put("parentId", 0); - List depositoryAll = depositoryService.findDepositoryRecordPByCondition(map); - UserByPort userToken = (UserByPort) request.getAttribute("userToken"); -// Integer role = roleService.findRoleByUid(userToken.getId().toString()); - Integer role = userToken.getRole(); + List depositoryAll = depositoryService.findDepositoryRecordPByCondition(map,userToken); + Integer role = userToken.getIsadmin(); if(role == null){ - role = 0; + role = 1; } - if (role == 1) { + if (role == 4) { mv.addObject("display", "inline-block"); } else { mv.addObject("display", "none"); @@ -322,19 +346,16 @@ public class PageController { public ModelAndView material_out(HttpServletRequest request) { ModelAndView mv = new ModelAndView(); mv.setViewName("pages/material/material-out"); - List materialAll = materialService.findMaterialAll(); - List depositoryAll = depositoryService.findDepositoryAll(); - List materialTypeAll = materialTypeService.findMaterialTypeAll(); UserByPort userToken = (UserByPort) request.getAttribute("userToken"); - Integer role = 1; - if (role == 1) { + Integer isadmin = userToken.getIsadmin(); + if(isadmin == null){ + isadmin = 1; + } + if (isadmin == 4) { mv.addObject("display", "inline-block"); } else { mv.addObject("display", "none"); } - mv.addObject("materialTypes", materialTypeAll); - mv.addObject("depositories", depositoryAll); - mv.addObject("materials", materialAll); return mv; } @@ -342,10 +363,6 @@ public class PageController { public ModelAndView material_add() { ModelAndView mv = new ModelAndView(); mv.setViewName("pages/material/material-add"); - List depositoryAll = depositoryService.findDepositoryAll(); - List materialTypeAll = materialTypeService.findMaterialTypeAll(); - mv.addObject("materialTypes", materialTypeAll); - mv.addObject("depositories", depositoryAll); return mv; } @@ -420,6 +437,8 @@ public class PageController { params.put("code",material.getCode()); params.put("version",material.getVersion()); String context = JSONObject.toJSONString(params); + // 将待展示数据进行加密操作 + context = JM_3DES.encode3Des(JM_3DES.JM_Key,context); String qrCode = ""; try { qrCode = CreateQrCodeUtil.createQrCode(context, 200, 200); @@ -451,14 +470,13 @@ public class PageController { Map map = new HashMap<>(); map.put("parentId", 0); UserByPort userToken = (UserByPort) request.getAttribute("userToken"); -// Integer role = roleService.findRoleByUid(userToken.getId().toString()); - Integer role = userToken.getRole(); + Integer role = userToken.getIsadmin(); if(role == null){ - role = 0; + role = 1; } List materialTypeAll = materialTypeService.findMaterialTypeByCondition(map); mv.addObject("materialTypes", materialTypeAll); - if (role == 1) { + if (role == 4) { mv.addObject("display", "inline-block"); } else { mv.addObject("display", "none"); @@ -513,13 +531,13 @@ public class PageController { } @GetMapping("/application_out_back") - public ModelAndView application_out_back(Integer code,String depositoryCode) { + public ModelAndView application_out_back(Integer code,String depositoryId) { ModelAndView mv = new ModelAndView(); mv.setViewName("pages/application/application-out_back"); MaterialP materialById = new MaterialP(); if(code != null) { Map map = new HashMap<>(); - Depository depositoryByCode = depositoryService.findDepositoryByCode(depositoryCode); + Depository depositoryByCode = depositoryService.findDepositoryRecordById(ObjectFormatUtil.toInteger(depositoryId)); map.put("depositoryId",depositoryByCode.getId()); map.put("code",code); List inventory = materialService.findInventory(map); @@ -555,10 +573,11 @@ public class PageController { } @GetMapping("/table_user") - public ModelAndView table_user() { + public ModelAndView table_user(HttpServletRequest request) { + UserByPort userToken = (UserByPort) request.getAttribute("userToken"); ModelAndView mv = new ModelAndView(); mv.setViewName("pages/user/table-user"); - List administrationPList = findAllCompany(); + List administrationPList = findAllCompany(userToken); mv.addObject("administrationPList", administrationPList); mv.addObject("users", userService.findUserPsByCondition(new HashMap<>())); return mv; @@ -568,7 +587,6 @@ public class PageController { public ModelAndView table_stock() { ModelAndView mv = new ModelAndView(); mv.setViewName("pages/depository/table-stock"); - mv.addObject("depositories", depositoryService.findDepositoryAll()); return mv; } @@ -630,9 +648,6 @@ public class PageController { public ModelAndView chart_out_back() { ModelAndView mv = new ModelAndView(); mv.setViewName("pages/chart/chart-out_back"); - mv.addObject("depositories", depositoryService.findDepositoryAll()); - mv.addObject("reviewers", userService.findReviewers()); - mv.addObject("materials", materialService.findMaterialAll()); // 转出物料数量 mv.addObject("InCount", depositoryRecordService.CalculateAllApplicationOutCount("已出库")); // 转出物料金额 @@ -663,13 +678,13 @@ public class PageController { * @param map * @return */ - public static List FindUserByMap(Map map) { + public static List FindUserByMap(Map map,UserByPort userToken) { String url = PortConfig.external_url + "/staff/archiveslist"; String jsonString = JSONObject.toJSONString(map); JSONObject paramObject = JSONObject.parseObject(jsonString); String post = null; try { - post = HttpUtils.send(url, paramObject, HTTP.UTF_8); + post = HttpUtils.send(url, paramObject, HTTP.UTF_8,userToken); } catch (IOException e) { e.printStackTrace(); } @@ -687,7 +702,7 @@ public class PageController { return result; } - public static UserByPort FindUserById(Integer id) { + public static UserByPort FindUserById(Integer id,UserByPort userToken) { String url = PortConfig.external_url + "/staff/archivescont"; Map map = new HashMap<>(); map.put("id", id); @@ -695,7 +710,8 @@ public class PageController { JSONObject paramObject = JSONObject.parseObject(jsonString); String post = null; try { - post = HttpUtils.send(url, paramObject, HTTP.UTF_8); + post = HttpUtils.send(url, paramObject, HTTP.UTF_8,userToken); + } catch (IOException e) { e.printStackTrace(); } @@ -707,10 +723,11 @@ public class PageController { @GetMapping("/user_add") - public ModelAndView user_add(Integer userId) { + public ModelAndView user_add(Integer userId,HttpServletRequest request) { + UserByPort userToken = (UserByPort) request.getAttribute("userToken"); ModelAndView mv = new ModelAndView(); mv.setViewName("pages/user/user-add"); - UserByPort userByPort = FindUserById(userId); + UserByPort userByPort = FindUserById(userId,userToken); UserByPortP userByPortP = new UserByPortP(userByPort); mv.addObject("userByPort", userByPortP); mv.addObject("roles", roleService.findAllRole()); @@ -719,13 +736,14 @@ public class PageController { } @GetMapping("/user_role_edit") - public ModelAndView user_role_edit(Integer id) { + public ModelAndView user_role_edit(Integer id,HttpServletRequest request) { + UserByPort userToken = (UserByPort) request.getAttribute("userToken"); ModelAndView mv = new ModelAndView(); mv.setViewName("pages/user/user-role-edit"); RoleAndDepository roleAndDepositoryById = roleService.findRoleAndDepositoryById(id); UserByPortP userByPortP = null; if (roleAndDepositoryById != null) { - UserByPort userByPort = FindUserById(roleAndDepositoryById.getUserId()); + UserByPort userByPort = FindUserById(roleAndDepositoryById.getUserId(),userToken); userByPortP = new UserByPortP(userByPort); userByPortP.setRolename(roleAndDepositoryById.getRoleName()); userByPortP.setDepositoryName(roleAndDepositoryById.getDepositoryName()); @@ -739,13 +757,14 @@ public class PageController { } @GetMapping("/post_role_edit") - public ModelAndView post_role_edit(Integer id,Integer depositoryId) { + public ModelAndView post_role_edit(Integer id,Integer depositoryId,HttpServletRequest request) { + UserByPort userToken= (UserByPort) request.getAttribute("userToken"); ModelAndView mv = new ModelAndView(); mv.setViewName("pages/post/postRole_edit"); Map userParam = new HashMap<>(); userParam.put("position",id); - List userByPortList = PageController.FindUserByMap(userParam); - Post postById = findPostById(id); + List userByPortList = PageController.FindUserByMap(userParam,userToken); + Post postById = findPostById(id,userToken); PostP pp = new PostP(postById); Map param = new HashMap<>(); param.put("depositoryId",depositoryId); @@ -761,20 +780,22 @@ public class PageController { } @GetMapping("/user_detail") - public ModelAndView user_edit(Integer id) { + public ModelAndView user_edit(Integer id,HttpServletRequest request) { + UserByPort userToken= (UserByPort) request.getAttribute("userToken"); ModelAndView mv = new ModelAndView(); mv.setViewName("pages/user/user-edit"); mv.addObject("depositories", depositoryService.findDepositoryAll()); Map map = new HashMap<>(); map.put("number",id.toString()); - UserByPort userByPort = FindUserByMap(map).get(0); + UserByPort userByPort = FindUserByMap(map,userToken).get(0); mv.addObject("user", userByPort); return mv; } @GetMapping("/warehouse_view") - public ModelAndView warehouse_view(Integer id) { + public ModelAndView warehouse_view(Integer id,HttpServletRequest request) { + UserByPort userToken= (UserByPort) request.getAttribute("userToken"); ModelAndView mv = new ModelAndView(); mv.setViewName("pages/warehouse/warehouse_view"); if (id != null) { @@ -786,6 +807,8 @@ public class PageController { param.put("dname",depositoryRecordById.getDname()); param.put("introduce",depositoryRecordById.getIntroduce()); String context = JSONObject.toJSONString(param); + // 将待展示数据进行加密操作 + context = JM_3DES.encode3Des(JM_3DES.JM_Key,context); String qrCode = ""; try { qrCode = CreateQrCodeUtil.createQrCode(context,200,200); @@ -795,8 +818,8 @@ public class PageController { mv.addObject("qrCode",qrCode); mv.addObject("record", depositoryRecordById); Integer cid = depositoryRecordById.getCid(); - List postList = findCompanyBySuperior(cid.toString()); - List administrationPList = findAllCompany(); + List postList = findCompanyBySuperior(cid.toString(),userToken); + List administrationPList = findAllCompany(userToken); // 部门列表 mv.addObject("postList", postList); // 公司列表 @@ -809,14 +832,15 @@ public class PageController { } @GetMapping("/warehouseByParentId") - public ModelAndView warehouseByParentId(Integer parentId) { + public ModelAndView warehouseByParentId(Integer parentId,HttpServletRequest request) { + UserByPort userToken = (UserByPort) request.getAttribute("userToken"); ModelAndView mv = new ModelAndView(); mv.setViewName("pages/warehouse/warehouseByParentId"); if (parentId != null) { Map param = new HashMap<>(); param.put("parentId", parentId); mv.addObject("parentId", parentId); - mv.addObject("depositories", depositoryService.findDepositoryRecordPByCondition(param)); + mv.addObject("depositories", depositoryService.findDepositoryRecordPByCondition(param,userToken)); } else { throw new MyException("缺少必要参数!"); } @@ -851,6 +875,8 @@ public class PageController { param.put("midList",midList.toString()); param.put("mcodeList",mcodeList.toString()); String context = JSONObject.toJSONString(param); + // 将待展示数据进行加密操作 + context = JM_3DES.encode3Des(JM_3DES.JM_Key,context); String qrCode = ""; try { qrCode = CreateQrCodeUtil.createQrCode(context,200,200); @@ -890,13 +916,23 @@ public class PageController { } @GetMapping("findWareHouseByParentId") - public ModelAndView findWareHouseByParentId(Integer parentId) { + public ModelAndView findWareHouseByParentId(Integer parentId,HttpServletRequest request) { + UserByPort userByPort = (UserByPort)request.getAttribute("userToken"); ModelAndView mv = new ModelAndView(); if (parentId != null) { Map param = new HashMap<>(); param.put("parentId", parentId); mv.addObject("parentId", parentId); - List depositoryRecordPByCondition = depositoryService.findDepositoryRecordPByCondition(param); + List depositoryRecordPByCondition = depositoryService.findDepositoryRecordPByCondition(param,userByPort); + Integer role = userByPort.getIsadmin(); + if(role == null){ + role = 1; + } + if (role == 4) { + mv.addObject("display", "inline-block"); + } else { + mv.addObject("display", "none"); + } if (depositoryRecordPByCondition.size() > 0) { mv.addObject("depositories", depositoryRecordPByCondition); mv.setViewName("pages/warehouse/depository-out"); @@ -905,6 +941,7 @@ public class PageController { mv.addObject("placeList",placeByDid); mv.setViewName("pages/warehouse/warehouseByParentId"); } + } else { throw new MyException("缺少必要参数!"); } @@ -944,13 +981,23 @@ public class PageController { } @GetMapping("findMaterialTypeByParentId") - public ModelAndView findMaterialTypeByParentId(Integer parentId) { + public ModelAndView findMaterialTypeByParentId(Integer parentId,HttpServletRequest request) { + UserByPort userByPort = (UserByPort) request.getAttribute("userToken"); ModelAndView mv = new ModelAndView(); if (parentId != null) { Map param = new HashMap<>(); param.put("parentId", parentId); mv.addObject("parentId", parentId); List materialTypeByCondition = materialTypeService.findMaterialTypeByCondition(param); + Integer role = userByPort.getIsadmin(); + if(role == null){ + role = 1; + } + if (role == 4) { + mv.addObject("display", "inline-block"); + } else { + mv.addObject("display", "none"); + } if (materialTypeByCondition.size() > 0) { mv.addObject("materialTypes", materialTypeByCondition); mv.setViewName("pages/materialtype/materialType_view"); @@ -978,7 +1025,8 @@ public class PageController { } @GetMapping("/application_review") - public ModelAndView application_review(Integer id) { + public ModelAndView application_review(Integer id,HttpServletRequest request) { + UserByPort userToken = (UserByPort) request.getAttribute("userToken"); ModelAndView mv = new ModelAndView(); mv.setViewName("pages/application/application-review"); // 获取主订单信息 @@ -1015,12 +1063,19 @@ public class PageController { mcode.append(materialById.getCode()).append(","); depositoryName.append(depository.getDname()).append(","); sumQuantity += applicationOutRecordMin.getQuantity(); - sumPrice += (materialById.getPrice() / 100); + sumPrice += (materialById.getPrice()); } // 申请人 - UserByPort userByPort = FindUserById(recordP.getApplicantId()); + UserByPort userByPort = FindUserById(recordP.getApplicantId(),userToken); // 部门负责人 - UserByPort departmenthead = FindUserById(recordP.getDepartmenthead()); + String departmentheads = recordP.getDepartmenthead(); + String[] split = departmentheads.split(","); + StringBuilder departmentHeadName = new StringBuilder(); + for (int i = 0; i < split.length; i++) { + UserByPort departmenthead = FindUserById(ObjectFormatUtil.toInteger(split[i]),userToken); + departmentHeadName.append(departmenthead.getName()).append(","); + } + // 仓储中心负责人 String manager = recordP.getDepositoryManager(); String[] depositoryManagerId = new String[0]; @@ -1031,7 +1086,7 @@ public class PageController { String depositoryManagerNames = ""; for (int i = 0; i < depositoryManagerId.length; i++) { Integer managerid = ObjectFormatUtil.toInteger(depositoryManagerId[i]); - UserByPort user = FindUserById(managerid); + UserByPort user = FindUserById(managerid,userToken); depositoryManager.add(user); depositoryManagerNames += user.getName() +","; } @@ -1043,26 +1098,24 @@ public class PageController { recordP.setDepartmentheadTime(DateUtil.TimeStampToDateTime(Long.valueOf(recordP.getDepartmentheadTime()))); recordP.setDepositoryManagerName(depositoryManagerNames); recordP.setApplicantName(userByPort.getName()); - recordP.setDepartmentheadName(departmenthead.getName()); + recordP.setDepartmentheadName(departmentHeadName.toString()); recordP.setMcode(mcode.toString()); recordP.setMname(mname.toString()); recordP.setDepositoryName(depositoryName.toString()); recordP.setQuantity(sumQuantity); recordP.setPrice(sumPrice); - if(recordP.getPrice()!=null) { - recordP.setPrice(recordP.getPrice() / 100); - } mv.addObject("record", recordP); return mv; } @GetMapping("/form_step_look") - public ModelAndView form_step_look(Integer id) { + public ModelAndView form_step_look(Integer id,HttpServletRequest request) { + UserByPort userToken = (UserByPort) request.getAttribute("userToken"); ModelAndView mv = new ModelAndView(); mv.setViewName("pages/application/form-step-look"); if (id != null) { ApplicationInRecordP applicationInRecordPById = depositoryRecordService.findApplicationInRecordPById(id); - UserByPort userByPort = FindUserById(applicationInRecordPById.getApplicantId()); + UserByPort userByPort = FindUserById(applicationInRecordPById.getApplicantId(),userToken); applicationInRecordPById.setApplicantName(userByPort.getName()); applicationInRecordPById.setApplicantTime(DateUtil.TimeStampToDateTime(Long.valueOf(applicationInRecordPById.getApplicantTime()))); applicationInRecordPById.setPrice(applicationInRecordPById.getPrice() / 100); @@ -1074,10 +1127,45 @@ public class PageController { return mv; } + @GetMapping("/form_step_lookByminRecordOut") + public ModelAndView form_step_lookByminRecordOut(Integer id,HttpServletRequest request){ + UserByPort userToken = (UserByPort) request.getAttribute("userToken"); + ModelAndView mv = new ModelAndView(); + mv.setViewName("pages/application/form-step-look_minRecordOut"); + if(id != null){ + // 获取当前子订单 + ApplicationOutRecordMin recordMin = depositoryRecordService.findApplicationOutMinById(id); + ApplicationOutRecordMinP recordMinP = new ApplicationOutRecordMinP(recordMin); + // 获取出库物料信息 + Material materialById = materialService.findMaterialById(recordMin.getMid()); + // 获取出库物料仓库信息 + Depository depository = depositoryService.findDepositoryRecordById(recordMin.getDepositoryId()); + // 获取出库库位 + Place placeById = placeService.findPlaceById(recordMin.getPlaceId()); + // 获取处理人 + UserByPort userByPort = FindUserById(recordMin.getCheckId(), userToken); + // 设置处理人姓名 + recordMinP.setCheckerName(userByPort.getName()); + recordMinP.setDepositoryName(depository.getDname()); + recordMinP.setMname(materialById.getMname()); + recordMinP.setMcode(materialById.getCode()); + recordMinP.setPlaceCode(placeById.getCode()); + Double price = (materialById.getPrice() / 100) * recordMinP.getQuantity(); + BigDecimal bg = new BigDecimal(price); + price = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + recordMinP.setPrice(price); + mv.addObject("recordMinP",recordMinP); + } else { + throw new MyException("缺少必要参数!"); + } + return mv; + } + // 跳转到出库详情 @GetMapping("/ApplicationOutView") - public ModelAndView ApplicationOutView(Integer id) { + public ModelAndView ApplicationOutView(Integer id,HttpServletRequest request) { + UserByPort userToken = (UserByPort) request.getAttribute("userToken"); ModelAndView mv = new ModelAndView(); mv.setViewName("pages/application/form-step-look_back"); if (id != null) { @@ -1093,14 +1181,22 @@ public class PageController { StringBuilder depositoryName = new StringBuilder(); // 展示出库的库位编码 StringBuilder placeCode = new StringBuilder(); - + // 展示当前子订单的处理人 + StringBuilder outDisposer = new StringBuilder(); // 当前订单总数 Integer sumQuantity = 0; + // 每个物料数量 + StringBuilder quantityByMaterial = new StringBuilder(); + + List recordMinPList = new ArrayList<>(); // 当前总额 Double sumPrice = 0.0; for (int i = 0; i < applicationOutRecordMinByParent.size(); i++) { // 获取子订单信息 ApplicationOutRecordMin applicationOutRecordMin = applicationOutRecordMinByParent.get(i); + // 获取输出子订单信息 + ApplicationOutRecordMinP recordMinP = new ApplicationOutRecordMinP(applicationOutRecordMin); + // 获取出库物料信息 Material materialById = materialService.findMaterialById(applicationOutRecordMin.getMid()); // 获取出库物料仓库信息 @@ -1110,16 +1206,42 @@ public class PageController { if(placeById != null) { placeCode.append(placeById.getCode()).append(","); } + recordMinP.setMname(materialById.getMname()); + recordMinP.setDepositoryName(depository.getDname()); + recordMinP.setPlaceCode(placeById.getCode()); + Integer checkId = applicationOutRecordMin.getCheckId(); + if(checkId != null){ + // 如果当前子订单已经处理 + // 获取当前处理人 + UserByPort disposer = FindUserById(checkId, userToken); + outDisposer.append(disposer.getName()+","); + recordMinP.setCheckerName(disposer.getName()); + }else{ + outDisposer.append("暂未处理,"); + recordMinP.setCheckerName("暂未处理"); + } mname.append(materialById.getMname()).append(","); mcode.append(materialById.getCode()).append(","); depositoryName.append(depository.getDname()).append(","); + quantityByMaterial.append(applicationOutRecordMin.getQuantity()+","); sumQuantity += applicationOutRecordMin.getQuantity(); - sumPrice += (materialById.getPrice() / 100); + sumPrice += (materialById.getPrice()); + recordMinPList.add(recordMinP); } // 申请人 - UserByPort userByPort = FindUserById(applicationOutRecordPById.getApplicantId()); + UserByPort userByPort = FindUserById(applicationOutRecordPById.getApplicantId(),userToken); // 部门负责人 - UserByPort departmenthead = FindUserById(applicationOutRecordPById.getDepartmenthead()); + String departmentHead = applicationOutRecordPById.getDepartmenthead(); + String[] split = departmentHead.split(","); + if("".equals(departmentHead)||departmentHead.isEmpty()){ + // 如果当前没有部门负责人 + split = new String[0]; + } + StringBuilder departmentHeadName = new StringBuilder(); + for (int i = 0; i < split.length; i++) { + UserByPort departmenthead = FindUserById(ObjectFormatUtil.toInteger(split[i]),userToken); + departmentHeadName.append(departmenthead.getName()).append(","); + } // 仓储中心负责人 String manager = applicationOutRecordPById.getDepositoryManager(); String[] depositoryManagerId = new String[0]; @@ -1130,12 +1252,12 @@ public class PageController { String depositoryManagerNames = ""; for (int i = 0; i < depositoryManagerId.length; i++) { Integer managerid = ObjectFormatUtil.toInteger(depositoryManagerId[i]); - UserByPort user = FindUserById(managerid); + UserByPort user = FindUserById(managerid,userToken); depositoryManager.add(user); depositoryManagerNames += user.getName(); } applicationOutRecordPById.setApplicantName(userByPort.getName()); - applicationOutRecordPById.setDepartmentheadName(departmenthead.getName()); + applicationOutRecordPById.setDepartmentheadName(departmentHeadName.toString()); applicationOutRecordPById.setDepositoryManagerName(depositoryManagerNames); applicationOutRecordPById.setApplicantTime(DateUtil.TimeStampToDateTime(Long.valueOf(applicationOutRecordPById.getApplicantTime()))); applicationOutRecordPById.setDepartmentheadTime(DateUtil.TimeStampToDateTime(Long.valueOf(applicationOutRecordPById.getDepartmentheadTime()))); @@ -1147,6 +1269,8 @@ public class PageController { applicationOutRecordPById.setDepositoryName(depositoryName.toString()); applicationOutRecordPById.setPCode(placeCode.toString()); mv.addObject("record", applicationOutRecordPById); + mv.addObject("outDisposer",outDisposer.toString()); + mv.addObject("recordMinList",recordMinPList); } else { throw new MyException("缺少必要参数!"); } @@ -1191,7 +1315,7 @@ public class PageController { } - public List findAllCompany() { + public List findAllCompany(UserByPort userByPort) { String url = PortConfig.external_url + "/org/govlist"; Map map = new HashMap<>(); map.put("superior", "313"); @@ -1199,7 +1323,7 @@ public class PageController { JSONObject paramObject = JSONObject.parseObject(jsonString); String post = null; try { - post = HttpUtils.send(url, paramObject, HTTP.UTF_8); + post = HttpUtils.send(url, paramObject, HTTP.UTF_8,userByPort); } catch (IOException e) { e.printStackTrace(); } @@ -1221,9 +1345,10 @@ public class PageController { @GetMapping("/company_out") public ModelAndView Company_Out(HttpServletRequest request) { + UserByPort userToken= (UserByPort) request.getAttribute("userToken"); ModelAndView mv = new ModelAndView(); mv.setViewName("pages/company/company-out"); - List administrationPList = findAllCompany(); + List administrationPList = findAllCompany(userToken); mv.addObject("administrationPList", administrationPList); mv.addObject("parentId", "313"); return mv; @@ -1240,7 +1365,7 @@ public class PageController { @GetMapping("/company_detail") - public ModelAndView company_detail(Integer id) { + public ModelAndView company_detail(Integer id,UserByPort userByPort) { String url = PortConfig.external_url + "/org/getgovcont"; Map map = new HashMap<>(); ModelAndView mv = new ModelAndView(); @@ -1252,14 +1377,14 @@ public class PageController { JSONObject paramObject = JSONObject.parseObject(jsonString); String post = null; try { - post = HttpUtils.send(url, paramObject, HTTP.UTF_8); + post = HttpUtils.send(url, paramObject, HTTP.UTF_8,userByPort); } catch (IOException e) { e.printStackTrace(); } JSONObject jsonObject = JSONObject.parseObject(post); JSONObject data = (JSONObject) jsonObject.get("data"); Administration administration = JSONObject.toJavaObject(data, Administration.class); - String SuperiorName = getCompany(administration.getSuperior()).getName(); + String SuperiorName = getCompany(administration.getSuperior(),userByPort).getName(); mv.addObject("record", administration); mv.addObject("SuperiorName", SuperiorName); } else { @@ -1268,7 +1393,7 @@ public class PageController { return mv; } - public static Administration getCompany(Integer id) { + public static Administration getCompany(Integer id,UserByPort userByPort) { String url = PortConfig.external_url + "/org/getgovcont"; Map map = new HashMap<>(); map.put("id", id); @@ -1277,7 +1402,7 @@ public class PageController { JSONObject paramObject = JSONObject.parseObject(jsonString); String post = null; try { - post = HttpUtils.send(url, paramObject, HTTP.UTF_8); + post = HttpUtils.send(url, paramObject, HTTP.UTF_8,userByPort); } catch (IOException e) { e.printStackTrace(); } @@ -1289,7 +1414,7 @@ public class PageController { - public static List findCompanyBySuperior(String superior) { + public static List findCompanyBySuperior(String superior,UserByPort userByPort) { String url = PortConfig.external_url + "/org/govlist"; Map map = new HashMap<>(); map.put("superior", superior); @@ -1297,7 +1422,7 @@ public class PageController { JSONObject paramObject = JSONObject.parseObject(jsonString); String post = null; try { - post = HttpUtils.send(url, paramObject, HTTP.UTF_8); + post = HttpUtils.send(url, paramObject, HTTP.UTF_8,userByPort); } catch (IOException e) { e.printStackTrace(); } @@ -1318,11 +1443,12 @@ public class PageController { } @GetMapping("/findCompanyByParentId") - public ModelAndView findCompanyByParentId(Integer parentId) { + public ModelAndView findCompanyByParentId(Integer parentId,HttpServletRequest request) { + UserByPort userToken= (UserByPort) request.getAttribute("userToken"); ModelAndView mv = new ModelAndView(); if (parentId != null) { mv.addObject("parentId", parentId); - List administrationPList = findCompanyBySuperior(parentId.toString()); + List administrationPList = findCompanyBySuperior(parentId.toString(),userToken); if (administrationPList.size() > 0) { mv.addObject("administrationPList", administrationPList); mv.setViewName("pages/company/company-out"); @@ -1336,7 +1462,8 @@ public class PageController { } @GetMapping("/findPostByOrganization") - public ModelAndView findPostByOrganization(Integer organization) { + public ModelAndView findPostByOrganization(Integer organization,HttpServletRequest request) { + UserByPort userToken= (UserByPort) request.getAttribute("userToken"); String url = PortConfig.external_url + "/org/positionlist"; ModelAndView mv = new ModelAndView(); mv.setViewName("pages/post/post-out"); @@ -1348,7 +1475,7 @@ public class PageController { JSONObject paramObject = JSONObject.parseObject(jsonString); String post = null; try { - post = HttpUtils.send(url, paramObject, HTTP.UTF_8); + post = HttpUtils.send(url, paramObject, HTTP.UTF_8,userToken); } catch (IOException e) { e.printStackTrace(); } @@ -1373,11 +1500,12 @@ public class PageController { } @GetMapping("/post_detail") - public ModelAndView post_detail(Integer id) { + public ModelAndView post_detail(Integer id,HttpServletRequest request) { + UserByPort userToken= (UserByPort) request.getAttribute("userToken"); ModelAndView mv = new ModelAndView(); mv.setViewName("pages/post/post-view"); if (id != null) { - Post object = findPostById(id); + Post object = findPostById(id,userToken); mv.addObject("record", object); } else { throw new MyException("缺少必要参数!"); @@ -1385,7 +1513,7 @@ public class PageController { return mv; } - public static Post findPostById(Integer id) { + public static Post findPostById(Integer id,UserByPort userByPort) { String url = PortConfig.external_url + "/org/getpositioncont"; Map map = new HashMap<>(); map.put("id", id); @@ -1394,7 +1522,7 @@ public class PageController { JSONObject paramObject = JSONObject.parseObject(jsonString); String post = null; try { - post = HttpUtils.send(url, paramObject, HTTP.UTF_8); + post = HttpUtils.send(url, paramObject, HTTP.UTF_8,userByPort); } catch (IOException e) { e.printStackTrace(); } @@ -1406,7 +1534,8 @@ public class PageController { @GetMapping("/findPostByParentId") - public ModelAndView findPostByParentId(Integer parentId) { + public ModelAndView findPostByParentId(Integer parentId,HttpServletRequest request) { + UserByPort userToken= (UserByPort) request.getAttribute("userToken"); String url = PortConfig.external_url + "/org/positionlist"; ModelAndView mv = new ModelAndView(); if (parentId != null) { @@ -1417,7 +1546,7 @@ public class PageController { JSONObject paramObject = JSONObject.parseObject(jsonString); String post = null; try { - post = HttpUtils.send(url, paramObject, HTTP.UTF_8); + post = HttpUtils.send(url, paramObject, HTTP.UTF_8,userToken); } catch (IOException e) { e.printStackTrace(); } @@ -1448,10 +1577,11 @@ public class PageController { // 跳转到添加权限界面 @GetMapping("/postRoleAdd") - public ModelAndView PostRoleAdd(Integer id) { + public ModelAndView PostRoleAdd(Integer id,HttpServletRequest request) { + UserByPort userToken= (UserByPort) request.getAttribute("userToken"); ModelAndView mv = new ModelAndView(); mv.setViewName("pages/post/postRole_add"); - Post postById = findPostById(id); + Post postById = findPostById(id,userToken); mv.addObject("post", postById); mv.addObject("roles", roleService.findAllRole()); mv.addObject("depositories", depositoryService.findDepositoryAll()); @@ -1552,7 +1682,7 @@ public class PageController { return mv; } - // 当前仓库中该用户的子订单详情 + // 当前仓库中该用户的子订单详情,用于pc端 @GetMapping("/ApplicationOutMinByDid") public ModelAndView ApplicationOutMinByDid(Integer depositoryId,Integer state,HttpServletRequest request){ ModelAndView mv = new ModelAndView(); @@ -1561,4 +1691,17 @@ public class PageController { mv.setViewName("pages/application/application-out_min"); return mv; } + + // 当前仓库中该用户的子订单详情,用于移动端 + @GetMapping("/ApplicationOutMinByDidForMobile") + public ModelAndView ApplicationOutMinByDidForMobile(Integer depositoryId,Integer state,HttpServletRequest request){ + ModelAndView mv = new ModelAndView(); + Depository depository = depositoryService.findDepositoryRecordById(depositoryId); + mv.addObject("depositoryId",depositoryId); + mv.addObject("state",state); + mv.addObject("depository",depository); + mv.setViewName("pages/application/application-out_min-mobile"); + return mv; + } + } diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/QyWxOperationController.java b/src/main/java/com/dreamchaser/depository_manage/controller/QyWxOperationController.java new file mode 100644 index 00000000..ccf13f57 --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/controller/QyWxOperationController.java @@ -0,0 +1,276 @@ +package com.dreamchaser.depository_manage.controller; + +import cn.hutool.http.HttpUtil; +import com.alibaba.fastjson.JSONObject; +import com.dreamchaser.depository_manage.config.PortConfig; +import com.dreamchaser.depository_manage.config.QyWxConfig; +import com.dreamchaser.depository_manage.config.QyWxJMJM.com.qq.weixin.mp.aes.AesException; +import com.dreamchaser.depository_manage.config.QyWxJMJM.com.qq.weixin.mp.aes.WXBizMsgCrypt; +import com.dreamchaser.depository_manage.entity.CallBackLog; +import com.dreamchaser.depository_manage.entity.UserByPort; +import com.dreamchaser.depository_manage.pojo.callBackXml.CallBackBaseXml; +import com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard.TemplateCard; +import com.dreamchaser.depository_manage.security.pool.AuthenticationTokenPool; +import com.dreamchaser.depository_manage.security.pool.UserKeyAndTokenPool; +import com.dreamchaser.depository_manage.service.CallBackLogService; +import com.dreamchaser.depository_manage.service.DepositoryRecordService; +import com.dreamchaser.depository_manage.service.DepositoryService; +import com.dreamchaser.depository_manage.service.impl.QyWxOperationService; +import com.dreamchaser.depository_manage.utils.ObjectFormatUtil; +import com.dreamchaser.depository_manage.utils.QyWxXMLUtils; +import io.micrometer.core.instrument.util.IOUtils; +import org.joda.time.format.FormatUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.io.IOException; +import java.io.InputStream; +import java.io.PrintWriter; +import java.time.Instant; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Map; + + +/** + * 用于企业微信相关操作的控制器 + */ +@Controller +public class QyWxOperationController { + + + @Autowired + CallBackLogService callBackLogService; + + + @Autowired + QyWxOperationService qyWxOperationService; + + + @Autowired + DepositoryRecordService depositoryRecordService; + + + /** + * 用于接收企业微信的回调,get方式 + */ + @GetMapping("/callback") + public void callBackForGet(@RequestParam Map map, HttpServletResponse response){ + try { + // 构造解密对象 + WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(QyWxConfig.sToken,QyWxConfig.sEncodingAESKey,QyWxConfig.corpid); + // 企业微信加密签名 + String sVerifyMsgSig = (String) map.get("msg_signature"); + // 时间戳 + Integer sVerifyTimeStamp = ObjectFormatUtil.toInteger(map.get("timestamp")); + // 随机数 + String sVerifyNonce = (String) map.get("nonce"); + // 加密的字符串 + String sVerifyEchoStr = (String) map.get("echostr"); + String sEchoStr; //需要返回的明文 + sEchoStr = wxcpt.VerifyURL(sVerifyMsgSig, sVerifyTimeStamp.toString(), + sVerifyNonce, sVerifyEchoStr); + + // 添加日志 + CallBackLog callBackLog = new CallBackLog(); + callBackLog.setTimestamp(sVerifyTimeStamp); + callBackLog.setNonce(sVerifyNonce); + callBackLog.setEchostr(sVerifyEchoStr); + callBackLogService.addCallBackLog(callBackLog); + + //返回明文 + PrintWriter writer = response.getWriter(); + writer.println(sEchoStr); + + System.out.println(sEchoStr); + } catch (AesException | IOException e) { + e.printStackTrace(); + } + } + + /** + * 用于接收企业微信的回调,post方式 + */ + @PostMapping("/callback") + public void callBackForPost(@RequestParam Map param, + @RequestBody(required = false) Map map, + HttpServletRequest request,HttpServletResponse response){ + try { + + + // 构造解密对象 + WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(QyWxConfig.sToken,QyWxConfig.sEncodingAESKey,QyWxConfig.corpid); + // 企业微信加密签名 + String sVerifyMsgSig = (String) param.get("msg_signature"); + // 时间戳 + Integer sVerifyTimeStamp = ObjectFormatUtil.toInteger(param.get("timestamp")); + // 随机数 + String sVerifyNonce = (String) param.get("nonce"); + // 加密的字符串 + String sVerifyEchoStr = (String) param.get("echostr"); + + + if(sVerifyEchoStr != null) { + // 如果是验证url + + String sEchoStr; //需要返回的明文 + sEchoStr = wxcpt.VerifyURL(sVerifyMsgSig, sVerifyTimeStamp.toString(), + sVerifyNonce, sVerifyEchoStr); + + // 添加日志 + CallBackLog callBackLog = new CallBackLog(); + callBackLog.setTimestamp(sVerifyTimeStamp); + callBackLog.setNonce(sVerifyNonce); + callBackLog.setEchostr(sVerifyEchoStr); + callBackLogService.addCallBackLog(callBackLog); + + //返回明文 + PrintWriter writer = response.getWriter(); + writer.println(sEchoStr); + writer.close(); + }else{ + // 如果是响应事件 + + String ToUserName = (String) map.get("ToUserName"); + String Encrypt = (String) map.get("Encrypt"); + String AgentID = (String) map.get("AgentID"); + + // 需要解密的xml + String sReqData = String.format("" + + "" + + "",ToUserName,Encrypt,AgentID); + // 解析后的数据 + String sMsg = wxcpt.DecryptMsg(sVerifyMsgSig, sVerifyTimeStamp.toString(), sVerifyNonce, sReqData); + // 将数据转为java对象 + TemplateCard templateCard = (TemplateCard) QyWxXMLUtils.convertXmlStrToObject(TemplateCard.class, sMsg); + // 点击用户 + String fromUserName = templateCard.getFromUserName(); + // 根据userId获取处理人 + Map portInfo = PortConfig.findUserByQyWxUserId(fromUserName); + UserByPort userByPort = (UserByPort) portInfo.get("user"); + + // 获取点击的按钮 + String clickKey = templateCard.getEventKey().split("_")[1]; + String result = ""; + if("pass".equals(clickKey)){ + result = "通过"; + }else{ + result = "驳回"; + } + // 开启线程处理审批 + new Thread(new Runnable() { + @Override + public void run() { + depositoryRecordService.reviewByQyWx(templateCard); + } + }).start(); + + // 开启线程更改其他用户卡片模板样式 + String finalResult = result; + new Thread(new Runnable() { + @Override + public void run() { + qyWxOperationService.updateTemplateCard(templateCard.getResponseCode(),userByPort.getName(), finalResult); + } + }).start(); + + + // 待加密模板 + String sRespData = String.format("" + + "" + + "%s"+ + ""+ + "" + + "",ToUserName,QyWxConfig.corpid,templateCard.getCreateTime(),"已"+result); + // 加密 + String sEncryptMsg = wxcpt.EncryptMsg(sRespData, sVerifyTimeStamp.toString(), sVerifyNonce); + //3.响应消息 + PrintWriter out = response.getWriter(); + out.print(sEncryptMsg); + out.close(); + } + } catch (AesException | IOException e) { + e.printStackTrace(); + } + } + + + /** + * 用于企业微信登录 + * @param code + * @param action + * @param state + * @param request + * @return + */ + @GetMapping("/QyWxLogin") + public ModelAndView QyWxLogin(@RequestParam(required = false)String code, + @RequestParam(required = false)String action, + @RequestParam(required = false)String state, + HttpServletRequest request) + { + ModelAndView mv = new ModelAndView(); + mv.addObject("userWxId",""); + mv.setViewName("pages/user/login"); + if(code != null) { + QyWxConfig.code = code; + JSONObject jsonObject = QyWxConfig.GetQYWXUserId(); + Integer errCode = jsonObject.getInteger("errcode"); + String userId = jsonObject.getString("userid"); + if (errCode == 0) { + // 如果成功获取userid + Map portInfo = PortConfig.findUserByQyWxUserId(userId); + UserByPort userByPort =(UserByPort) portInfo.get("user"); + String key = (String) portInfo.get("key"); + String token = (String) portInfo.get("token"); + if (userByPort != null) { + // 如果数据库中存在该用户 + String keyAndToken = key + "&" +token; + // 将key与token暂存至池中保存 + UserKeyAndTokenPool.addKeyAndToken(userByPort.getNumber(),keyAndToken); + // 设置放入时间 + userByPort.setInstant(Instant.now()); + AuthenticationTokenPool.addToken(token, userByPort); + HttpSession session = request.getSession(); + session.setAttribute("token"+userByPort.getId(), token); + session.setAttribute("userToken",userByPort); + session.setMaxInactiveInterval(1800); + mv.addObject("user",userByPort); + mv.setViewName("index"); + }else{ + JSONObject captcha = PageController.Captcha(request); + String picPath = (String) captcha.get("picPath"); + String captchaid = (String) captcha.get("captchaid"); + mv.addObject("picPath", picPath); + mv.addObject("captchaid", captchaid); + mv.addObject("userWxId",userId); + } + }else{ + JSONObject captcha = PageController.Captcha(request); + String picPath = (String) captcha.get("picPath"); + String captchaid = (String) captcha.get("captchaid"); + mv.addObject("picPath", picPath); + mv.addObject("captchaid", captchaid); + } + }else{ + JSONObject captcha = PageController.Captcha(request); + String picPath = (String) captcha.get("picPath"); + String captchaid = (String) captcha.get("captchaid"); + mv.addObject("picPath", picPath); + mv.addObject("captchaid", captchaid); + } + return mv; + } + + + + + +} diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/UserController.java b/src/main/java/com/dreamchaser/depository_manage/controller/UserController.java index 31d175bd..06410fd4 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/UserController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/UserController.java @@ -17,6 +17,7 @@ import com.dreamchaser.depository_manage.security.bean.LoginType; import com.dreamchaser.depository_manage.security.bean.UserToken; import com.dreamchaser.depository_manage.security.bean.VerificationCode; import com.dreamchaser.depository_manage.security.pool.AuthenticationTokenPool; +import com.dreamchaser.depository_manage.security.pool.UserKeyAndTokenPool; import com.dreamchaser.depository_manage.security.pool.VerificationCodePool; import com.dreamchaser.depository_manage.service.DepositoryService; import com.dreamchaser.depository_manage.service.RoleService; @@ -33,6 +34,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.data.repository.query.ReactiveQueryByExampleExecutor; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.mobile.device.Device; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; @@ -145,12 +147,19 @@ public class UserController { */ @PostMapping("/login") public RestResponse login(@RequestBody Map map, HttpServletRequest request) { + String userWxId = map.get("userWxId"); + // 用于标识当前登录是否为企业微信跳转登录 + boolean flag = true; + if(!"".equals(userWxId)){ + // 如果是企业微信跳转 + flag = false; + } String url = PortConfig.external_url_6666 +"/base/login"; String jsonString = JSONObject.toJSONString(map); JSONObject paramObject = JSONObject.parseObject(jsonString); String post = null; try { - post = HttpUtils.send(url,paramObject, HTTP.UTF_8); + post = HttpUtils.send(url,paramObject, HTTP.UTF_8,null); } catch (IOException e) { e.printStackTrace(); } @@ -159,15 +168,28 @@ public class UserController { String userkey = (String) data.get("key"); if(userkey != null) { String usertoken = (String) data.get("token"); - HttpUtils.setUserKey(userkey); - HttpUtils.setUserToken(usertoken); + + String keyAndToken = userkey + "&" +usertoken; UserByPort userinfo = JSONObject.toJavaObject((JSONObject) data.get("userinfo"), UserByPort.class); + + // 将key与token暂存至池中保存 + UserKeyAndTokenPool.addKeyAndToken(userinfo.getNumber(),keyAndToken); + AuthenticationTokenPool.addToken(usertoken,userinfo); HttpSession session = request.getSession(); - session.setAttribute("token",usertoken); + session.setAttribute("token"+userinfo.getId(),usertoken); + session.setAttribute("userToken",userinfo); session.setMaxInactiveInterval(1800); + if(!flag){ + // 如果是企业微信跳转 + Map param = new HashMap<>(); + param.put("id",userinfo.getId().toString()); + param.put("workwechatid",userWxId); + // 将openid写回 + PortConfig.editUserWechatOpenid(map,userinfo); + } // 设置放入时间 -// userinfo.setInstant(Instant.now()); + userinfo.setInstant(Instant.now()); return new RestResponse(usertoken); }else{ return CrudUtil.NOT_EXIST_USER_OR_ERROR_PWD_RESPONSE; @@ -193,10 +215,10 @@ public class UserController { @GetMapping("/loginOut") public RestResponse loginOut(HttpServletRequest request){ HttpSession session = request.getSession(); - String token = (String) session.getAttribute("token"); session.invalidate(); request.removeAttribute("userToken"); - AuthenticationTokenPool.removeToken(token); +// session.removeAttribute("token"); +// AuthenticationTokenPool.removeToken(token); return new RestResponse("",200,new StatusInfo("退出成功","退出成功")); } @@ -206,10 +228,10 @@ public class UserController { * * @return RESPONSE200 */ - @GetMapping("/logout") + /* @GetMapping("/loginOut") public RestResponse logout() { - return CrudUtil.RESPONSE200; - } + return new RestResponse("",200,new StatusInfo("退出成功","退出成功")); + }*/ @GetMapping("/sys/users") public RestResponse findUsers(@RequestParam Map map) { @@ -222,7 +244,8 @@ public class UserController { * @return */ @PostMapping("/sys/findUsers") - public RestResponse findUsersByPort(@RequestParam Map map) { + public RestResponse findUsersByPort(@RequestParam Map map,HttpServletRequest request) { + UserByPort userToken = (UserByPort) request.getAttribute("userToken"); String url = PortConfig.external_url + "/staff/archiveslist"; if(map.containsKey("company")){ map.put("company",ObjectFormatUtil.toInteger(map.get("company"))); @@ -238,7 +261,7 @@ public class UserController { JSONObject paramObject = JSONObject.parseObject(jsonString); String post = null; try { - post = HttpUtils.send(url,paramObject, HTTP.UTF_8); + post = HttpUtils.send(url,paramObject, HTTP.UTF_8,userToken); } catch (IOException e) { e.printStackTrace(); } @@ -464,20 +487,21 @@ public class UserController { * @return */ @GetMapping("/getCaptchaid") - public JSONObject getCaptchaid(){ - JSONObject captcha = PageController.Captcha(); + public JSONObject getCaptchaid(HttpServletRequest httpServletRequest){ + JSONObject captcha = PageController.Captcha(httpServletRequest); return captcha; } @GetMapping("/findUserRole") - public RestResponse findUserRole(@RequestParam("userId") Integer userId){ + public RestResponse findUserRole(@RequestParam("userId") Integer userId,HttpServletRequest request){ Map param = new HashMap<>(); + UserByPort userToken = (UserByPort) request.getAttribute("userToken"); param.put("classes",1); param.put("userId",userId); List userByPortPList = new ArrayList<>(); List roleAndDepositoryByCondition = roleService.findRoleAndDepositoryByCondition(param); for (int i = 0; i < roleAndDepositoryByCondition.size(); i++) { - UserByPort userByPort = PageController.FindUserById(roleAndDepositoryByCondition.get(i).getUserId()); + UserByPort userByPort = PageController.FindUserById(roleAndDepositoryByCondition.get(i).getUserId(),userToken); UserByPortP up = new UserByPortP(userByPort); up.setId(roleAndDepositoryByCondition.get(i).getId()); up.setDepositoryName(roleAndDepositoryByCondition.get(i).getDepositoryName()); diff --git a/src/main/java/com/dreamchaser/depository_manage/entity/ApplicationOutRecord.java b/src/main/java/com/dreamchaser/depository_manage/entity/ApplicationOutRecord.java index 00f5a699..b8fcd898 100644 --- a/src/main/java/com/dreamchaser/depository_manage/entity/ApplicationOutRecord.java +++ b/src/main/java/com/dreamchaser/depository_manage/entity/ApplicationOutRecord.java @@ -53,7 +53,7 @@ public class ApplicationOutRecord { /** * 部门负责人 */ - private Integer departmenthead; + private String departmenthead; /** * 部门负责人意见(1通过2退回) diff --git a/src/main/java/com/dreamchaser/depository_manage/entity/CallBackLog.java b/src/main/java/com/dreamchaser/depository_manage/entity/CallBackLog.java new file mode 100644 index 00000000..931bc2c3 --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/entity/CallBackLog.java @@ -0,0 +1,17 @@ +package com.dreamchaser.depository_manage.entity; + +import lombok.Data; + +@Data +public class CallBackLog { + public Integer id; + public String msg_signature; + public Integer timestamp; + public String nonce; + public String echostr; + public String xmlstr; + public String jsonstr; + public String reqdata; + public Integer addtime; + +} diff --git a/src/main/java/com/dreamchaser/depository_manage/entity/UserByPort.java b/src/main/java/com/dreamchaser/depository_manage/entity/UserByPort.java index 40e2c710..d6f17b2c 100644 --- a/src/main/java/com/dreamchaser/depository_manage/entity/UserByPort.java +++ b/src/main/java/com/dreamchaser/depository_manage/entity/UserByPort.java @@ -6,8 +6,8 @@ import java.time.Instant; @Data public class UserByPort { - - private static Integer term = 1800; // 登录有效时间 +// 登录令牌,默认有效期为两小时 + final long DEFAULT_TERM=60*60*3; /** @@ -282,6 +282,11 @@ public class UserByPort { */ private String positionname; + /** + * 是否为本部门负责人(1:是;2:否) + */ + private Integer personincharge; + /** * 身份认证 */ @@ -292,13 +297,18 @@ public class UserByPort { */ private Instant instant; + /** + * 有效期(单位:秒) + */ + private long term = DEFAULT_TERM; + /** * 根据时间判断是否有效 * @return 有效则返回true,否则返回false */ - /* public boolean isValid(){ + public boolean isValid(){ return Instant.now().getEpochSecond()-instant.getEpochSecond()<=term; - }*/ + } diff --git a/src/main/java/com/dreamchaser/depository_manage/intercepter/UserInterceptor.java b/src/main/java/com/dreamchaser/depository_manage/intercepter/UserInterceptor.java index 0c0c4755..23d73a64 100644 --- a/src/main/java/com/dreamchaser/depository_manage/intercepter/UserInterceptor.java +++ b/src/main/java/com/dreamchaser/depository_manage/intercepter/UserInterceptor.java @@ -1,8 +1,12 @@ package com.dreamchaser.depository_manage.intercepter; +import com.dreamchaser.depository_manage.config.QyWxConfig; +import com.dreamchaser.depository_manage.entity.UserByPort; import com.dreamchaser.depository_manage.exception.MyException; import com.dreamchaser.depository_manage.security.pool.AuthenticationTokenPool; +import com.dreamchaser.depository_manage.utils.HttpUtils; import lombok.extern.slf4j.Slf4j; +import org.springframework.mobile.device.Device; import org.springframework.stereotype.Component; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; @@ -11,6 +15,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; +import java.util.Enumeration; /** * 认证拦截器,如果请求头中有相应凭证则放行,否则拦截返回认证失效错误 @@ -23,13 +28,15 @@ public class UserInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws MyException { - - //拿到requset中的head + String header = request.getHeader("user-agent"); String token =null; HttpSession session = request.getSession(); - token = (String) session.getAttribute("token"); + UserByPort userByPort = (UserByPort) session.getAttribute("userToken"); + if(userByPort!=null){ + token = (String) session.getAttribute("token"+userByPort.getId()); + } //如果是访问logout则删除对应的令牌 - if ("/logout".equals(request.getServletPath())){ + if ("/loginOut".equals(request.getServletPath())){ AuthenticationTokenPool.removeToken(token); session.invalidate(); return true; @@ -37,16 +44,52 @@ public class UserInterceptor extends HandlerInterceptorAdapter { if("/getCaptchaid".equals(request.getServletPath())){ return true; } - if (token!=null&&AuthenticationTokenPool.getToken(token)!=null){ + if("/QyWxLogin".equals(request.getServletPath())){ + return true; + } + if (!"".equals(token) &&token!=null&&AuthenticationTokenPool.getToken(token)!=null){ request.setAttribute("userToken",AuthenticationTokenPool.getToken(token)); return true; }else { try { - response.sendRedirect("/login"); + if(isMobileDevice(request)){ + if(header.contains("wxwork")) { + // 如果是企业微信跳转 + QyWxConfig.token = QyWxConfig.GetQYWXToken(); + response.sendRedirect(QyWxConfig.getQYWXCodeUrl()); + }else{ + + response.sendRedirect("/login"); + } + }else { + response.sendRedirect("/login"); + } } catch (IOException e) { e.printStackTrace(); } return false; } } + + + + public boolean isMobileDevice(HttpServletRequest request) { + String requestHeader = request.getHeader("user-agent").toLowerCase(); + String[] deviceArray = new String[]{"android", "iphone", "ios", "windows phone"}; + if (requestHeader == null) { + return false; + } + requestHeader = requestHeader.toLowerCase(); + for (int i = 0; i < deviceArray.length; i++) { + if (requestHeader.indexOf(deviceArray[i]) > 0) { + return true; + } + } + return false; + } + + + + + } diff --git a/src/main/java/com/dreamchaser/depository_manage/mapper/CallBackLogMapper.java b/src/main/java/com/dreamchaser/depository_manage/mapper/CallBackLogMapper.java new file mode 100644 index 00000000..3d65816d --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/mapper/CallBackLogMapper.java @@ -0,0 +1,28 @@ +package com.dreamchaser.depository_manage.mapper; + + +import com.dreamchaser.depository_manage.entity.CallBackLog; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; + +import java.util.Map; + +@Mapper +@Repository +public interface CallBackLogMapper { + + /** + * 添加回调日志 + * @param map + * @return + */ + Integer addCallBackLog(Map map); + + + /** + * 添加回调日志 + * @param callBackLog + * @return + */ + Integer addCallBackLog(CallBackLog callBackLog); +} diff --git a/src/main/java/com/dreamchaser/depository_manage/mapper/CallBackLogMapper.xml b/src/main/java/com/dreamchaser/depository_manage/mapper/CallBackLogMapper.xml new file mode 100644 index 00000000..7899d337 --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/mapper/CallBackLogMapper.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + INSERT INTO callback_log ( + id, msg_signature, timestamp,nonce,echostr,xmlstr,jsonstr,reqdata,addtime + ) VALUES ( + #{id}, + #{msg_signature}, + #{timestamp}, + #{nonce}, + #{echostr}, + #{xmlstr}, + #{jsonstr}, + #{reqdata}, + #{addtime} + ) + + + \ No newline at end of file diff --git a/src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryRecordMapper.xml b/src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryRecordMapper.xml index 7b61908b..711448f1 100644 --- a/src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryRecordMapper.xml +++ b/src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryRecordMapper.xml @@ -77,7 +77,7 @@ - + @@ -170,11 +170,11 @@ count(*) FROM applicationOutRecordInfo WHERE 1=1 - and (departmentHeadTime = 0 and departmenthead=#{userId} and DepartmentheadPass != 2) + and (departmentHeadTime = 0 and FIND_IN_SET(#{userId},departmenthead) != 0 and DepartmentheadPass != 2) or (depositoryManagerTime = 0 and FIND_IN_SET(#{userId},depositoryManager) != 0 and DepartmentheadPass != 2) - and (departmentHeadTime != 0 and departmenthead=#{userId}) + and (departmentHeadTime != 0 and FIND_IN_SET(#{userId},departmenthead) != 0) or (depositoryManagerTime != 0 and FIND_IN_SET(#{userId},depositoryManager) != 0) @@ -276,11 +276,11 @@ FROM applicationOutRecordInfo WHERE 1=1 - and (departmentHeadTime = 0 and departmenthead=#{userId} and DepartmentheadPass = 3) + and (departmentHeadTime = 0 and FIND_IN_SET(#{userId},departmenthead) != 0 and DepartmentheadPass = 3) or (depositoryManagerTime = 0 and FIND_IN_SET(#{userId},depositoryManager) != 0 and depositoryManagerPass = 3) - and (departmentHeadTime != 0 and departmenthead=#{userId} and DepartmentheadPass != 3) + and (departmentHeadTime != 0 and FIND_IN_SET(#{userId},departmenthead) != 0 and DepartmentheadPass != 3) or (depositoryManagerTime != 0 and FIND_IN_SET(#{userId},depositoryManager) != 0 and depositoryManagerPass != 3) group by aorid diff --git a/src/main/java/com/dreamchaser/depository_manage/pojo/ApplicationOutRecordMinP.java b/src/main/java/com/dreamchaser/depository_manage/pojo/ApplicationOutRecordMinP.java new file mode 100644 index 00000000..4e20b5bb --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/pojo/ApplicationOutRecordMinP.java @@ -0,0 +1,102 @@ +package com.dreamchaser.depository_manage.pojo; + +import com.dreamchaser.depository_manage.entity.ApplicationOutRecordMin; +import lombok.Data; + +import java.math.BigInteger; + +@Data +public class ApplicationOutRecordMinP { + /** + * id + */ + private Integer id; + + /** + * 物料id + */ + private Integer mid; + + /** + * 物料名称 + */ + private String mname; + + /** + * 物料编码 + */ + private BigInteger mcode; + /** + * 仓库id + */ + private Integer depositoryId; + + + /** + * 仓库名称 + */ + private String depositoryName; + + /** + * 对应库位id + */ + private Integer placeId; + + + /** + * 库位编码 + */ + private String placeCode; + /** + * 数量 + */ + private Integer quantity; + /** + * 出库单号 + */ + private String code; + + /** + * 审核人编号 + */ + private Integer checkId; + + + /** + * 审核人姓名 + */ + private String checkerName; + + /** + * 申请人姓名 + */ + private String applicantName; + /** + * 主订单编号 + */ + private Integer parentId; + + + /** + * 当前申请金额 + */ + private Double price; + + /** + * 子订单状态(1未完成,2完成) + */ + private Integer state; + + + public ApplicationOutRecordMinP(ApplicationOutRecordMin recordMin) { + this.id = recordMin.getId(); + this.mid = recordMin.getMid(); + this.depositoryId = recordMin.getDepositoryId(); + this.checkId = recordMin.getCheckId(); + this.code = recordMin.getCode(); + this.quantity = recordMin.getQuantity(); + this.state = recordMin.getState(); + this.parentId = recordMin.getParentId(); + this.placeId = recordMin.getPlaceId(); + } +} diff --git a/src/main/java/com/dreamchaser/depository_manage/pojo/ApplicationOutRecordP.java b/src/main/java/com/dreamchaser/depository_manage/pojo/ApplicationOutRecordP.java index 788e2c9b..245a1bd7 100644 --- a/src/main/java/com/dreamchaser/depository_manage/pojo/ApplicationOutRecordP.java +++ b/src/main/java/com/dreamchaser/depository_manage/pojo/ApplicationOutRecordP.java @@ -68,7 +68,7 @@ public class ApplicationOutRecordP { /** * 部门负责人编号 */ - private Integer departmenthead; + private String departmenthead; /** * 部门负责人姓名 diff --git a/src/main/java/com/dreamchaser/depository_manage/pojo/UserByPortP.java b/src/main/java/com/dreamchaser/depository_manage/pojo/UserByPortP.java index ebbda934..9304783f 100644 --- a/src/main/java/com/dreamchaser/depository_manage/pojo/UserByPortP.java +++ b/src/main/java/com/dreamchaser/depository_manage/pojo/UserByPortP.java @@ -74,7 +74,10 @@ public class UserByPortP { */ private String depositoryName; - + /** + * 是否为本部门负责人(1:是;2:否) + */ + private Integer personincharge; public UserByPortP(UserByPort userByPort) { @@ -90,6 +93,7 @@ public class UserByPortP { this.sunmaindeparmentname = userByPort.getSunmaindeparmentname(); this.workpostname = userByPort.getWorkpostname(); this.positionname = userByPort.getPositionname(); + this.personincharge = userByPort.getPersonincharge(); } public UserByPortP(String number, String name, Integer state, Integer gender, Integer health, String mobilephone, String companyname, String maindeparmentname, String sunmaindeparmentname, String workpostname, String positionname) { diff --git a/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/CallBackBaseXml.java b/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/CallBackBaseXml.java new file mode 100644 index 00000000..5303ad84 --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/CallBackBaseXml.java @@ -0,0 +1,29 @@ +package com.dreamchaser.depository_manage.pojo.callBackXml; + + +import lombok.Data; +import org.apache.commons.math3.util.Precision; + +import javax.xml.bind.annotation.*; + + +/** + * 基础xml + */ +@Data +//@XmlRootElement(name = "xml") +@XmlAccessorType(XmlAccessType.FIELD) +public class CallBackBaseXml { + + + private String ToUserName; //企业微信CorpID + private String FromUserName; //成员UserID + private String CreateTime; //消息创建时间(整型) + private String MsgType; //消息类型,此时固定为:event + private String AgentID; //企业应用的id,整型。可在应用的设置页面查看 + + + + + +} diff --git a/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/CallBackXMl_DLWZ.java b/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/CallBackXMl_DLWZ.java new file mode 100644 index 00000000..4b8a4e68 --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/CallBackXMl_DLWZ.java @@ -0,0 +1,22 @@ +package com.dreamchaser.depository_manage.pojo.callBackXml; + + +import lombok.Data; + +import javax.xml.bind.annotation.XmlRootElement; + +@Data +@XmlRootElement(name = "xml") +public class CallBackXMl_DLWZ extends CallBackBaseXml { + + /** + * 用于上报地理位置时的回调xml + */ + + private String Event; // 事件类型,subscribe(关注)、unsubscribe(取消关注) + private String EventKey; // 事件KEY值,此事件该值为空 + private String Latitude; //地理位置纬度 + private String Longitude; //地理位置经度 + private String Precision; // 地理位置精度 + private String AppType; // app类型,在企业微信固定返回wxwork,在微信不返回该字段 +} diff --git a/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/CallBackXml_button.java b/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/CallBackXml_button.java new file mode 100644 index 00000000..28230227 --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/CallBackXml_button.java @@ -0,0 +1,15 @@ +package com.dreamchaser.depository_manage.pojo.callBackXml; + +import com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard.TemplateCard; +import lombok.Data; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; + + +@XmlAccessorType(XmlAccessType.FIELD) +@Data +public class CallBackXml_button extends CallBackBaseXml { + private TemplateCard TemplateCard; +} diff --git a/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/ButtonInteraction.java b/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/ButtonInteraction.java new file mode 100644 index 00000000..e06daf4e --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/ButtonInteraction.java @@ -0,0 +1,16 @@ +package com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard; + +import com.dreamchaser.depository_manage.config.QyWx_template_card.BaseMessage; +import lombok.Data; + +/** + * 文本消息 + * + */ +@Data +public class ButtonInteraction extends BaseMessage { + // 模板卡片 + private TemplateCard template_card; + // 否 表示是否是保密消息,0表示否,1表示是,默认0 + private int safe; +} \ No newline at end of file diff --git a/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard.java b/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard.java new file mode 100644 index 00000000..f3d163ff --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard.java @@ -0,0 +1,73 @@ +package com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard; + +import com.dreamchaser.depository_manage.pojo.callBackXml.CallBackBaseXml; +import lombok.Data; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; +import java.util.List; + +/** + * 卡片模板 + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@Data +@XmlRootElement(name="xml")//根节点 +public class TemplateCard { + + private String ToUserName; //企业微信CorpID + private String FromUserName; //成员UserID + private String CreateTime; //消息创建时间(整型) + private String MsgType; //消息类型,此时固定为:event + private String AgentID; //企业应用的id,整型。可在应用的设置页面查看 + /** + * 模板卡片类型,投票选择型卡片填写"vote_interaction" + */ + + private String CardType; + + /** + * 二级普通文本,建议不超过160个字,(支持id转译) + */ + private String SubTitleText; + + + /** + * 响应事件key + */ + private String EventKey; + + /** + * 任务id,同一个应用任务id不能重复,只能由数字、字母和“_-@”组成,最长128字节 + */ + private String TaskId; + + /** + * 响应的事件类型 + */ + private String Event; + + + /** + * 下拉式的选择器 + */ + + private TemplateCard_SelectedItems SelectedItems; + + + /** + * 按钮替换文案,填写本字段后会展现灰色不可点击按钮 + */ + private String ReplaceText; + + /** + * ResponseCode + */ + private String ResponseCode; + + + + +} \ No newline at end of file diff --git a/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_SelectedItems.java b/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_SelectedItems.java new file mode 100644 index 00000000..a66d3434 --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_SelectedItems.java @@ -0,0 +1,16 @@ +package com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard; + + +import lombok.Data; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; +import java.util.List; + +@XmlAccessorType(XmlAccessType.FIELD) +@Data +//@XmlRootElement(name="SelectedItems")//根节点 +public class TemplateCard_SelectedItems { + TemplateCard_button_selection SelectedItem; +} diff --git a/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_action.java b/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_action.java new file mode 100644 index 00000000..d79887a8 --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_action.java @@ -0,0 +1,18 @@ +package com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard; + +import lombok.Data; + +/** + * 操作 + */ +@Data +public class TemplateCard_action { + /** + * 操作的描述文案 + */ + private String Text; + /** + * 操作key值,用户点击后,会产生回调事件将本参数作为EventKey返回,回调事件会带上该key值,最长支持1024字节,不可重复 + */ + private String Key; +} diff --git a/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_action_menu.java b/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_action_menu.java new file mode 100644 index 00000000..3dfa2c0a --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_action_menu.java @@ -0,0 +1,27 @@ +package com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard; + +import lombok.Data; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; +import java.util.List; + +/** + * 卡片右上角更多操作按钮 + */ +@XmlAccessorType(XmlAccessType.FIELD) +@Data +@XmlRootElement(name = "ActionMenu") +public class TemplateCard_action_menu { + /** + * 更多操作界面的描述 + */ + private String Desc; + + /** + * 操作列表,列表长度取值范围为 [1, 3] + */ + private List ActionList; + +} diff --git a/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_button.java b/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_button.java new file mode 100644 index 00000000..8e46ac97 --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_button.java @@ -0,0 +1,34 @@ +package com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard; + +import lombok.Data; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; + +/** + * 按钮 + */ +@XmlAccessorType(XmlAccessType.FIELD) +@Data +public class TemplateCard_button { + /** + * 按钮点击事件类型,0 或不填代表回调点击事件,1 代表跳转url + */ + private Integer Yype; + /** + * 按钮文案,建议不超过10个字 + */ + private String Text; + /** + * 按钮样式,目前可填1~4,不填或错填默认1 + */ + private Integer Style; + /** + * 按钮key值,用户点击后,会产生回调事件将本参数作为EventKey返回,回调事件会带上该key值,最长支持1024字节,不可重复,button_list.type是0时必填 + */ + private String Key; + /** + * 跳转事件的url,button_list.type是1时必填 + */ + private String Url; +} diff --git a/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_button_selection.java b/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_button_selection.java new file mode 100644 index 00000000..621af4a2 --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_button_selection.java @@ -0,0 +1,40 @@ +package com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard; + +import lombok.Data; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; +import java.util.List; + +/** + * 下拉式的选择器 + */ +@XmlAccessorType(XmlAccessType.FIELD) +@Data +public class TemplateCard_button_selection { + /** + * 下拉式的选择器的key,用户提交选项后,会产生回调事件,回调事件会带上该key值表示该题,最长支持1024字节 + */ + private String QuestionKey; + + /** + * 下拉式的选择器左边的标题 + */ + private String Title; + + /** + * 选项列表,下拉选项不超过 10 个,最少1个 + */ + private TemplateCard_button_selection_option OptionIds; + + /** + * 下拉式的选择器默认选定的选项 + */ + private String SelectedId; + + /** + * 是否可以选择状态 + */ + private Boolean Disable; +} diff --git a/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_button_selection_option.java b/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_button_selection_option.java new file mode 100644 index 00000000..307bb7f4 --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_button_selection_option.java @@ -0,0 +1,23 @@ +package com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard; + +import lombok.Data; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; + +/** + * 下拉选项 + */ +@Data +@XmlAccessorType(XmlAccessType.FIELD) +public class TemplateCard_button_selection_option { + /** + * 下拉式的选择器选项的id,用户提交后,会产生回调事件,回调事件会带上该id值表示该选项,最长支持128字节,不可重复 + */ + private String OptionId; + /** + * 下拉式的选择器选项的文案,建议不超过16个字 + */ + private String Text; +} diff --git a/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_card_action.java b/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_card_action.java new file mode 100644 index 00000000..ea7ad1e2 --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_card_action.java @@ -0,0 +1,34 @@ +package com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard; + +import lombok.Data; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; + + +/** + * 整体卡片的点击跳转事件 + */ +@XmlAccessorType(XmlAccessType.FIELD) +@Data +public class TemplateCard_card_action { + /** + * 跳转事件类型,0或不填代表不是链接,1 代表跳转url,2 代表打开小程序 + */ + private Integer Type; + + /** + * 跳转事件的url,card_action.type是1时必填 + */ + private String Url; + + /** + * 跳转事件的小程序的appid,必须是与当前应用关联的小程序,card_action.type是2时必填 + */ + private Integer AppId; + + /** + * 跳转事件的小程序的pagepath,card_action.type是2时选填 + */ + private String PagePath; +} diff --git a/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_horizontal_content.java b/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_horizontal_content.java new file mode 100644 index 00000000..06811f9c --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_horizontal_content.java @@ -0,0 +1,47 @@ +package com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard; + +import lombok.Data; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; + +/** + * 二级标题+文本列表 + */ +@XmlAccessorType(XmlAccessType.FIELD) +@Data +public class TemplateCard_horizontal_content { + /** + * 链接类型,0或不填代表不是链接,1 代表跳转url,2 代表下载附件,3 代表点击跳转成员详情 + */ + private Integer Type; + + /** + * 二级标题,建议不超过5个字 + */ + private String KeyName; + + /** + * 二级文本,如果horizontal_content_list.type是2,该字段代表文件名称(要包含文件类型),建议不超过30个字,(支持id转译) + */ + private String Value; + + /** + * 链接跳转的url,horizontal_content_list.type是1时必填 + */ + private String Url; + + /** + * 附件的media_id,horizontal_content_list.type是2时必填 + */ + private Integer MediaId; + + + /** + * 成员详情的userid,horizontal_content_list.type是3时必填 + */ + private String UserId; + + + +} diff --git a/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_main_title.java b/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_main_title.java new file mode 100644 index 00000000..0c49b2ff --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_main_title.java @@ -0,0 +1,27 @@ +package com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard; + +import lombok.Data; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; + + +/** + * 一级标题 + */ +@XmlAccessorType(XmlAccessType.FIELD) +@Data +@XmlRootElement(name = "MainTitle") +public class TemplateCard_main_title { + /** + * 一级标题,建议不超过36个字,(支持id转译) + */ + private String Title; + /** + * 标题辅助信息,建议不超过44个字,(支持id转译) + */ + private String Desc; + + +} diff --git a/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_source.java b/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_source.java new file mode 100644 index 00000000..5c794991 --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_source.java @@ -0,0 +1,31 @@ +package com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard; + +import lombok.Data; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; + +/* +卡片来源样式信息 + */ +@XmlAccessorType(XmlAccessType.FIELD) +@Data +@XmlRootElement(name = "Source") +public class TemplateCard_source { + /** + * 来源图片的url,来源图片的尺寸建议为72*72 + */ + private String IconUrl; + + /** + * 来源图片的描述,建议不超过20个字,(支持id转译) + */ + private String Desc; + + /** + * 来源文字的颜色,目前支持:0(默认) 灰色,1 黑色,2 红色,3 绿色 + */ + private Integer DescColor; + +} diff --git a/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/Template_quote_area.java b/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/Template_quote_area.java new file mode 100644 index 00000000..1bdcde53 --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/Template_quote_area.java @@ -0,0 +1,38 @@ +package com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard; + +import lombok.Data; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; + +/** + * 引用文献样式 + */ +@XmlAccessorType(XmlAccessType.FIELD) +@Data +public class Template_quote_area { + /** + * 引用文献样式区域点击事件,0或不填代表没有点击事件,1 代表跳转url,2 代表跳转小程序 + */ + private Integer Type; + /** + * 点击跳转的url,quote_area.type是1时必填 + */ + private String Url; + /** + * 点击跳转的小程序的appid,必须是与当前应用关联的小程序,quote_area.type是2时必填 + */ + private Integer Appid; + /** + * 点击跳转的小程序的pagepath,quote_area.type是2时选填 + */ + private String PagePath; + /** + * 引用文献样式的标题 + */ + private String Title; + /** + * 引用文献样式的引用文案 + */ + private String QuoteText; +} diff --git a/src/main/java/com/dreamchaser/depository_manage/security/pool/AuthenticationTokenPool.java b/src/main/java/com/dreamchaser/depository_manage/security/pool/AuthenticationTokenPool.java index 37ae4271..a44313d5 100644 --- a/src/main/java/com/dreamchaser/depository_manage/security/pool/AuthenticationTokenPool.java +++ b/src/main/java/com/dreamchaser/depository_manage/security/pool/AuthenticationTokenPool.java @@ -38,7 +38,7 @@ public class AuthenticationTokenPool { } //判断令牌是否过期 - if (userToken != null){ + if (userToken.isValid()){ return userToken; }else{ //清除过期令牌 diff --git a/src/main/java/com/dreamchaser/depository_manage/security/pool/UserKeyAndTokenPool.java b/src/main/java/com/dreamchaser/depository_manage/security/pool/UserKeyAndTokenPool.java new file mode 100644 index 00000000..7331bfed --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/security/pool/UserKeyAndTokenPool.java @@ -0,0 +1,33 @@ +package com.dreamchaser.depository_manage.security.pool; + + +import com.dreamchaser.depository_manage.entity.UserByPort; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 用户登录后的key与token池 + */ +public class UserKeyAndTokenPool { + private static Map pool = new ConcurrentHashMap<>(200); + + + /** + * 用于暂存当前用户的key和token + * @param key 用户工号 + * @param keyAndToken key+token => key & token + */ + public static void addKeyAndToken(String key, String keyAndToken){ + pool.put(key, keyAndToken); + } + + public static String getKeyAndToken(String key){ + String keyAndToken = pool.get(key); + return keyAndToken; + } + + public static void removeKeyAndToken(String key){ + pool.remove(key); + } +} diff --git a/src/main/java/com/dreamchaser/depository_manage/service/CallBackLogService.java b/src/main/java/com/dreamchaser/depository_manage/service/CallBackLogService.java new file mode 100644 index 00000000..43847542 --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/service/CallBackLogService.java @@ -0,0 +1,21 @@ +package com.dreamchaser.depository_manage.service; + +import com.dreamchaser.depository_manage.entity.CallBackLog; + +import java.util.Map; + +public interface CallBackLogService { + + /** + * 添加回调日志 + * @param map + * @return + */ + Integer addCallBackLog(Map map); + /** + * 添加回调日志 + * @param callBackLog + * @return + */ + Integer addCallBackLog(CallBackLog callBackLog); +} diff --git a/src/main/java/com/dreamchaser/depository_manage/service/DepositoryRecordService.java b/src/main/java/com/dreamchaser/depository_manage/service/DepositoryRecordService.java index 88314155..cd31947c 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/DepositoryRecordService.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/DepositoryRecordService.java @@ -2,7 +2,9 @@ package com.dreamchaser.depository_manage.service; import com.dreamchaser.depository_manage.entity.*; import com.dreamchaser.depository_manage.pojo.*; +import com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard.TemplateCard; +import javax.servlet.http.HttpServletRequest; import java.util.List; import java.util.Map; @@ -38,7 +40,16 @@ public interface DepositoryRecordService { * @param map 仓库调度信息 * @return 受影响的行数 */ - Integer review(Map map,Integer userId); + Integer review(Map map,Integer userId,UserByPort userToken); + + + /** + * 用于企业微信的审核申请处理 + * @param templateCard + * @return + */ + Integer reviewByQyWx(TemplateCard templateCard); + /** * 根据id修改仓库调度记录 @@ -52,7 +63,7 @@ public interface DepositoryRecordService { * @param id id * @return 该id的数据记录 */ - DepositoryRecordP findDepositoryRecordById(Integer id); + DepositoryRecordP findDepositoryRecordById(Integer id, HttpServletRequest request); /** * 查找所有仓库调度记录 @@ -65,7 +76,7 @@ public interface DepositoryRecordService { * @param map 查询参数 * @return 符合条件的仓库调度记录集合 */ - List findDepositoryRecordPByCondition(Map map); + List findDepositoryRecordPByCondition(Map map,HttpServletRequest request); /** @@ -73,14 +84,14 @@ public interface DepositoryRecordService { * @param map * @return */ - List findApplicationInRecordPByCondition(Map map); + List findApplicationInRecordPByCondition(Map map,HttpServletRequest request); /** * 根据条件查询出库记录,同时支持分页查询 * @param map * @return */ - List findApplicationOutRecordPByCondition(Map map); + List findApplicationOutRecordPByCondition(Map map,HttpServletRequest request); /** @@ -108,7 +119,7 @@ public interface DepositoryRecordService { * @param map 查询参数 * @return 我的任务 */ - List findMyTask(Map map); + List findMyTask(Map map,HttpServletRequest request); /** * 根据id删除仓库记录 diff --git a/src/main/java/com/dreamchaser/depository_manage/service/DepositoryService.java b/src/main/java/com/dreamchaser/depository_manage/service/DepositoryService.java index ab2721ac..0e204589 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/DepositoryService.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/DepositoryService.java @@ -17,13 +17,13 @@ public interface DepositoryService { * @param map 参数map * @return 受影响的行数 */ - Integer insertDepository(Map map); + Integer insertDepository(Map map,UserByPort userByPort); /** * 查询所有仓库 * @return 仓库集合 */ - List findDepositoryRecordPByCondition(Map map); + List findDepositoryRecordPByCondition(Map map,UserByPort userByPort); /** * 根据条件查询对应的总条数 @@ -154,4 +154,11 @@ public interface DepositoryService { */ Depository findDepositoryByCode(String code); + /** + * 获取当前用户与其部门所管理的仓库 + * @param userByPort + * @return + */ + List findDepositoryByAdminorgAndUser(UserByPort userByPort); + } diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/CallBackLogServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/CallBackLogServiceImpl.java new file mode 100644 index 00000000..cfab7a4c --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/service/impl/CallBackLogServiceImpl.java @@ -0,0 +1,35 @@ +package com.dreamchaser.depository_manage.service.impl; + +import com.dreamchaser.depository_manage.entity.CallBackLog; +import com.dreamchaser.depository_manage.mapper.CallBackLogMapper; +import com.dreamchaser.depository_manage.service.CallBackLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Map; + +@Service +public class CallBackLogServiceImpl implements CallBackLogService { + /** + * 添加回调日志 + * @param map + * @return + */ + @Autowired + CallBackLogMapper callBackLogMapper; + + @Override + public Integer addCallBackLog(Map map) { + return callBackLogMapper.addCallBackLog(map); + } + + + /** + * 添加回调日志 + * @param callBackLog + * @return + */ + public Integer addCallBackLog(CallBackLog callBackLog){ + return callBackLogMapper.addCallBackLog(callBackLog); + } +} diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java index 3b242e75..3660cd94 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java @@ -1,6 +1,7 @@ package com.dreamchaser.depository_manage.service.impl; import cn.hutool.core.util.IdUtil; +import cn.hutool.db.Page; import cn.hutool.log.Log; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; @@ -11,10 +12,13 @@ import com.dreamchaser.depository_manage.entity.*; import com.dreamchaser.depository_manage.exception.MyException; import com.dreamchaser.depository_manage.mapper.*; import com.dreamchaser.depository_manage.pojo.*; +import com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard.TemplateCard; +import com.dreamchaser.depository_manage.security.bean.UserToken; import com.dreamchaser.depository_manage.service.DepositoryRecordService; import com.dreamchaser.depository_manage.service.RoleService; import com.dreamchaser.depository_manage.utils.*; import org.apache.http.protocol.HTTP; +import org.apache.poi.ss.formula.functions.T; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.springframework.beans.Mergeable; @@ -27,6 +31,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import cn.hutool.core.lang.Snowflake; +import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.math.BigDecimal; import java.nio.charset.StandardCharsets; @@ -60,6 +65,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { @Autowired private RedissonClient redissonClient; + @Autowired + private QyWxOperationService qyWxOperationService; + /** * 提交申请,插入一条仓库调度记录 @@ -185,7 +193,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { dname = depositoryRecordById.getDname(); } - Administration company = PageController.getCompany(userToken.getMaindeparment()); + Administration company = PageController.getCompany(userToken.getMaindeparment(), userToken); String code = createCode(dname, "outOrderNumber", "out", company.getName()); map.put("code", code); map.put("pass", 3); @@ -238,8 +246,8 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { for (int j = 0; j < applicationOutRecordPAll.size(); j++) { ApplicationOutRecordP applicationOutRecordP = applicationOutRecordPAll.get(j); // 获取所有子物料 - Map map = new HashMap<>(); - map.put("parentId",applicationOutRecordP.getId()); + Map map = new HashMap<>(); + map.put("parentId", applicationOutRecordP.getId()); List minByCondition = depositoryRecordMapper.findApplicationOutMinByCondition(map); for (int k = 0; k < minByCondition.size(); k++) { ApplicationOutRecordMin applicationOutRecordMin = minByCondition.get(k); @@ -409,13 +417,14 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { /** * 根据主订单获取子订单 + * * @param parentId * @return */ @Override public List findApplicationOutMinByParentId(Integer parentId) { - Map map = new HashMap<>(); - map.put("parentId",parentId); + Map map = new HashMap<>(); + map.put("parentId", parentId); return depositoryRecordMapper.findApplicationOutMinByCondition(map); } @@ -427,7 +436,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { * @return */ @Override - public RestResponse completeApplicationOutMinRecord(Map param, UserByPort userByPort) { + public RestResponse completeApplicationOutMinRecord(Map param, UserByPort userByPort) { // 最终返回值 RestResponse restResponse = new RestResponse(); @@ -440,7 +449,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { // 设置标志位 boolean flag = true; // 设置最终返回值 - int result = 0; + int result = 0; // 获取库存转移标志位 Integer istransfer = record.getIstransfer(); // 获取出库库位 @@ -479,42 +488,67 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { // 当前出库金额 Double sum = material.getPrice() * record.getQuantity(); material.setAmounts(material.getAmounts() - sum); - material.setQuantity(material.getQuantity() - record.getQuantity()); - material.setNumberOfTemporary(material.getNumberOfTemporary() - record.getQuantity()); + material.setQuantity(material.getQuantity() - applicationOutMinById.getQuantity()); + material.setNumberOfTemporary(material.getNumberOfTemporary() - applicationOutMinById.getQuantity()); // 修改物料信息 materialMapper.updateMaterial(material); if (placeAndMaterialByMidAndPid != null) { //如果库位不为空 // 修改当前库位存放物料的数量 - placeAndMaterialByMidAndPid.setQuantity(placeAndMaterialByMidAndPid.getQuantity() - record.getQuantity()); + placeAndMaterialByMidAndPid.setQuantity(placeAndMaterialByMidAndPid.getQuantity() - applicationOutMinById.getQuantity()); placeMapper.updateMaterialAndPlace(placeAndMaterialByMidAndPid); } // 修改库位数量 Place placeById = placeMapper.findPlaceById(placeId); - placeById.setQuantity(placeById.getQuantity() - record.getQuantity()); + placeById.setQuantity(placeById.getQuantity() - applicationOutMinById.getQuantity()); placeMapper.UpdatePlace(placeById); - String redisMinRecordKey = "minRecord:"+id; // 设置redis中子订单键值 + String redisMinRecordKey = "minRecord:" + id; // 设置redis中子订单键值 // 修改redis中本子订单状态 // redisTemplate.opsForHash().put(redisMinRecordKey,"state","2"); // 修改redis中本子订单完成人 // redisTemplate.opsForHash().put(redisMinRecordKey,"manager",userByPort.getId().toString()); + // 获取当前订单中所有管理员 + String manager = (String) redisTemplate.opsForHash().get(redisMinRecordKey, "manager"); + // 获取其他管理员 + String[] managerSplit = manager.replace(userByPort.getId() + ",", "").split(","); + if (managerSplit.length == 0) { + managerSplit = new String[0]; + } + for (int i = 0; i < managerSplit.length; i++) { + // 删除其他管理员的订单记录 + String otherManager = "user:" + managerSplit[i]; + String minRecord = (String) redisTemplate.opsForHash().get(otherManager, "minRecord"); + // 删除其他管理员中当前已完成的订单 + if (minRecord == null) { + continue; + } + minRecord = minRecord.replace(redisMinRecordKey + ",", ""); + if (minRecord.length() == 2) { + // [] + // 如果当前用户已经没有剩余订单,则删除 + redisTemplate.delete(otherManager); + } else { + redisTemplate.opsForHash().put(otherManager, "minRecord", minRecord); + } + } // 删除已完成的订单 redisTemplate.delete(redisMinRecordKey); // 获取该用户在redis中的订单记录 - String key = "user:"+userByPort.getId().toString(); + String key = "user:" + userByPort.getId().toString(); // 获取当前用户所有订单 String minRecord = (String) redisTemplate.opsForHash().get(key, "minRecord"); // 删除用户中当前已完成的订单 - minRecord = minRecord.replace(redisMinRecordKey+",",""); - redisTemplate.opsForHash().put(key,"minRecord",minRecord); - if(minRecord.length() == 2){ + minRecord = minRecord.replace(redisMinRecordKey + ",", ""); + if (minRecord.length() == 2) { // [] // 如果当前用户已经没有剩余订单,则删除 - redisTemplate.delete("user:"+userByPort.getId()); + redisTemplate.delete("user:" + userByPort.getId()); + } else { + redisTemplate.opsForHash().put(key, "minRecord", minRecord); } // 获取出库仓库信息 @@ -523,9 +557,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { // 获取主订单单号 StringBuilder code = new StringBuilder(record.getCode()); // 获取申请用户信息 - UserByPort applicantUser = PageController.FindUserById(record.getApplicantId()); + UserByPort applicantUser = PageController.FindUserById(record.getApplicantId(), userByPort); // 获取申请用户行政组织 - Administration company = PageController.getCompany(applicantUser.getMaindeparment()); + Administration company = PageController.getCompany(applicantUser.getMaindeparment(), userByPort); // 获取部门名称简写 String conpanyName = WordUtil.getPinYinHeadChar(company.getName()); // 获取仓库名称简写 @@ -533,7 +567,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { // 获取部门名称在单号的起始位置 int index = code.indexOf(conpanyName); // 生产新子订单编号 - String newCode = code.replace(index,index+conpanyName.length(),depositoryName).toString(); + String newCode = code.replace(index, index + conpanyName.length(), depositoryName).toString(); // 设置完成人 applicationOutMinById.setCheckId(userByPort.getId()); // 设置新编码 @@ -544,7 +578,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { result += depositoryRecordMapper.updateApplicationOutRecordMin(applicationOutMinById); - String redisMainRecordKey = "record:"+record.getId(); // 设置redis中主订单键值 + String redisMainRecordKey = "record:" + record.getId(); // 设置redis中主订单键值 // 获取redis中主订单的所有子订单 String minRecordList = (String) redisTemplate.opsForHash().get(redisMainRecordKey, "minRecord"); // 获取所有子订单键值 @@ -553,39 +587,51 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { for (int i = 0; i < split.length; i++) { // 获取所有子订单状态 String state = (String) redisTemplate.opsForHash().get(split[i], "state"); - if("1".equals(state)){ + if ("1".equals(state)) { // 如果有子订单未完成 pass = 3; // 设置主订单状态为处理中 break; } } - if(pass == 1){ // 如果最终状态为完成 - Map map = new HashMap<>(); - map.put("pass",pass); - map.put("id",record.getId()); + if (pass == 1) { // 如果最终状态为完成 + Map map = new HashMap<>(); + map.put("pass", pass); + map.put("id", record.getId()); // 修改状态为完成 depositoryRecordMapper.updateApplicationOutRecord(map); + + // 将最终完成的订单抄送给仓储负责人 + String depositoryManagerIds = record.getDepositoryManager(); + String[] depositoryManagers = depositoryManagerIds.split(","); + StringBuilder depositoryManagerByQyWx = new StringBuilder(); +// for (int i = 0; i < depositoryManagers.length; i++) { +// Integer uid = ObjectFormatUtil.toInteger(depositoryManagers[i]); +// UserByPort depositoryManager = PageController.FindUserById(uid, userByPort); +// depositoryManagerByQyWx.append(depositoryManager.getWorkwechat()+","); +// } + depositoryManagerByQyWx.append("PangFuZhen,"); + JSONObject jsonObject = qyWxOperationService.sendCcMessageToUsers(depositoryManagerByQyWx.toString(), record.getId()); + // 删除redis中本订单 - redisTemplate.delete("record:"+record.getId()); + redisTemplate.delete("record:" + record.getId()); } // 如果是库存转移订单 - Map map = new HashMap<>(); + Map map = new HashMap<>(); if (record.getIstransfer() == 1) { map.put("quantity", record.getQuantity().toString()); map.put("applicantId", record.getApplicantId()); map.put("transferId", record.getTransferId()); - map.put("recordId",record.getId()); // 出库订单编号 + map.put("recordId", record.getId()); // 出库订单编号 transferMaterial(map); } restResponse.setStatus(200); restResponse.setData(""); - restResponse.setStatusInfo(new StatusInfo("出库成功","出库成功")); - } - else{ + restResponse.setStatusInfo(new StatusInfo("出库成功", "出库成功")); + } else { restResponse.setStatus(508); restResponse.setData(""); - restResponse.setStatusInfo(new StatusInfo("出库失败","出库失败,库存不足")); + restResponse.setStatusInfo(new StatusInfo("出库失败", "出库失败,库存不足")); } return restResponse; } @@ -628,10 +674,10 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { map.put("transferId", transferId); // 获取当前转移物料仓库 Depository depositoryRecordById = depositoryMapper.findDepositoryRecordById(material.getDepositoryId()); - Administration company = PageController.getCompany(userByPort.getMaindeparment()); + Administration company = PageController.getCompany(userByPort.getMaindeparment(), userByPort); // 生成出库订单 map.put("code", createCode(depositoryRecordById.getDname(), "outOrderNumber", "out", company.getName())); - String placeId = map.get("fromPlaceId").toString(); + String placeId = map.get("fromPlaceId").toString(); if ("".equals(placeId) || "0".equals(placeId)) { map.put("placeId", 0); } @@ -640,7 +686,18 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { Object id = map.get("id"); // 清除主键 map.remove("id"); - map.put("parentId",id); + map.put("parentId", id); + + String departMentHeadQyWxName = (String) map.get("departMentHeadQyWxName"); + JSONObject jsonObject = qyWxOperationService.sendQyWxMessage(departMentHeadQyWxName, ObjectFormatUtil.toInteger(id), true); + // 将当前返回结果保存到redis中 + Map QyWxMessageMap = new HashMap<>(); + QyWxMessageMap.put("MsgId",jsonObject.getString("msgid")); + QyWxMessageMap.put("responseCode",jsonObject.getString("response_code")); + // key user:300450:QyWxOut:1 + redisTemplate.opsForHash().putAll("user:"+userByPort.getNumber()+":QyWxOutId:"+id,QyWxMessageMap); + // 设置过期时间为三天 + redisTemplate.expire("user:"+userByPort.getNumber()+":QyWxOutId:"+id,72,TimeUnit.HOURS); return depositoryRecordMapper.insertApplicationOutRecordMin(map); } @@ -652,30 +709,68 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { */ @Override @Transactional - public Integer review(Map map, Integer userid) { + public Integer review(Map map, Integer userid, UserByPort userToken) { ApplicationOutRecordP record = depositoryRecordMapper.findApplicationOutRecordPById(ObjectFormatUtil.toInteger(map.get("id"))); Object id = map.get("id"); // 主订单编号 map.remove("id"); if (map.containsKey("departmentheadPass")) { + String result = ""; String simpleTime = DateUtil.getSimpleTime(new Date()); map.put("departmentheadTime", DateUtil.DateTimeToTimeStamp(simpleTime)); map.put("departmenthead", userid); Integer departmentheadPass = (Integer) map.get("departmentheadPass"); if (departmentheadPass == 1) { + result = "通过"; map.put("state", "待仓储中心负责人审核"); // 获取仓储中心详情 - Administration company = PageController.getCompany(361); + Administration company = PageController.getCompany(361, userToken); // 获取仓储中心负责人 - List departmentHeadByUser = PortConfig.findDepartmentHeadByUser(company); + List departmentHeadByUser = PortConfig.findDepartmentHeadByUser(company, userToken); StringBuilder depositoryManager = new StringBuilder(); + StringBuilder QyWxUid = new StringBuilder(); for (int i = 0; i < departmentHeadByUser.size(); i++) { depositoryManager.append(departmentHeadByUser.get(i).getId() + ","); +// QyWxUid.append(departmentHeadByUser.get(i).getWorkwechat() + ","); } + QyWxUid.append("PangFuZhen,"); map.put("depositoryManager", depositoryManager.toString()); + // 向仓储中心负责人发送新的消息 + new Thread(new Runnable() { + @Override + public void run() { + JSONObject jsonObject = qyWxOperationService.sendQyWxMessage(QyWxUid.toString(), ObjectFormatUtil.toInteger(id), false); + // 将当前返回结果保存到redis中 + Map QyWxMessageMap = new HashMap<>(); + QyWxMessageMap.put("MsgId",jsonObject.getString("msgid")); + QyWxMessageMap.put("responseCode",jsonObject.getString("response_code")); + // key user:300450:QyWxOut:1 + // 部门负责人number + redisTemplate.opsForHash().putAll("user:"+userToken.getNumber()+":QyWxOutId:"+id,QyWxMessageMap); + // 设置过期时间为三天 + redisTemplate.expire("user:"+userToken.getNumber()+":QyWxOutId:"+id,72,TimeUnit.HOURS); + } + }).start(); } else { + result = "驳回"; map.put("state", "部门负责人审核未通过"); } + + // 开启线程更改其他用户卡片模板样式 + String finalResult = result; + new Thread(new Runnable() { + @Override + public void run() { + // 获取responseCode(key为申请人number) + //获取申请人信息 + UserByPort applicantUser = PageController.FindUserById(record.getApplicantId(), userToken); + String key = "user:"+applicantUser.getNumber()+":QyWxOutId:"+id; + String responseCode = (String) redisTemplate.opsForHash().get(key, "responseCode"); + qyWxOperationService.updateTemplateCard(responseCode,userToken.getName(), finalResult); + } + }).start(); } else { + String result = ""; + // 开启线程更改其他用户卡片模板样式 String simpleTime = DateUtil.getSimpleTime(new Date()); map.put("depositoryManagerTime", DateUtil.DateTimeToTimeStamp(simpleTime)); map.put("depositoryManager", userid); @@ -685,7 +780,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { Integer depositoryManagerPass = (Integer) map.get("depositoryManagerPass"); if (depositoryManagerPass == 1) { // 如果审核通过 - + result = "通过"; // 获取主单下的所有子单 StringBuilder minRecordByMain = new StringBuilder("[]"); List applicationOutRecordMinByParent = depositoryRecordMapper.findApplicationOutRecordMinByParent(record.getId()); @@ -708,13 +803,18 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { // 获取该物料所处仓库的仓库管理员 List userIdByDid = new ArrayList<>(); userIdByDid = roleService.findUserIdByDid(materialById.getDepositoryId()); + // 用于保存仓库管理员的企业微信openid + StringBuilder QyWxUid = new StringBuilder(); for (int j = 0; j < userIdByDid.size(); j++) { + + // 获取当前用户信息 + UserByPort userByPort = PageController.FindUserById(userIdByDid.get(j), userToken); // 仓库管理员订单信息 Map userRecord = new HashMap<>(); // 用户当前子订单 String userMinRecord = (String) redisTemplate.opsForHash().get("user:" + userIdByDid.get(j), "minRecord"); if (userMinRecord == null) { // 如果当前用户没有子订单 - userRecord.put("minRecord", "[" + minRecordKey+"," + "]"); // 插入一条子订单 + userRecord.put("minRecord", "[" + minRecordKey + "," + "]"); // 插入一条子订单 } else { // 如果当前用户已经有子订单 StringBuilder minRecordList = new StringBuilder(userMinRecord); // 转为stringbuilder类型 minRecordList.insert(1, minRecordKey + ",");// 将当前子订单插入头部 @@ -723,24 +823,195 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { // 更新redis中用户记录 redisTemplate.opsForHash().putAll("user:" + userIdByDid.get(j), userRecord); minRecordManage.append(userIdByDid.get(j)).append(","); +// QyWxUid.append(userByPort.getWorkwechat() + ","); } + QyWxUid.append("PangFuZhen,"); minRecord.put("manager", minRecordManage.toString()); // 添加子订单到redis中 redisTemplate.opsForHash().putAll(minRecordKey, minRecord); + // 开启线程向仓库管理员发送消息 + new Thread(new Runnable() { + @Override + public void run() { + JSONObject jsonObject = qyWxOperationService.sendNotificationToDepositoryManager(QyWxUid.toString(), applicationOutRecordMin.getId()); + } + }).start(); } // 将主订单插入到redis中 redisTemplate.opsForHash().put("record:" + record.getId(), "minRecord", minRecordByMain.toString()); map.put("state", "仓储中心负责人审核通过"); } else { + result = "驳回"; map.put("pass", 2); map.put("state", "仓储中心负责人审核未通过"); } + // 开启线程更改其他用户卡片模板样式 + String finalResult = result; + new Thread(new Runnable() { + @Override + public void run() { + // 获取responseCode(key为申请人number) + //获取部门负责人信息 + UserByPort departHead = PageController.FindUserById(ObjectFormatUtil.toInteger(record.getDepartmenthead()), userToken); + String key = "user:"+departHead.getNumber()+":QyWxOutId:"+id; + String responseCode = (String) redisTemplate.opsForHash().get(key, "responseCode"); + qyWxOperationService.updateTemplateCard(responseCode,userToken.getName(), finalResult); + } + }).start(); } map.put("id", id); return depositoryRecordMapper.updateApplicationOutRecord(map); } + /** + * 用于企业微信的审核申请处理 + * + * @param templateCard + * @return + */ + @Override + public Integer reviewByQyWx(TemplateCard templateCard ) { + // 用于更新订单 + Map map = new HashMap<>(); + // 点击用户 + String fromUserName = templateCard.getFromUserName(); + // 根据userId获取处理人 + Map portInfo = PortConfig.findUserByQyWxUserId(fromUserName); + UserByPort userByPort = (UserByPort) portInfo.get("user"); + // 获取点击的按钮 + String eventKey = templateCard.getEventKey(); + // 将其进行分割 + String[] clickKeys = eventKey.split("_"); + // 获取审核订单 + Integer outId = ObjectFormatUtil.toInteger(clickKeys[2].split("outId")[1]); + // 获取对应的出库订单 + ApplicationOutRecordP recordP = depositoryRecordMapper.findApplicationOutRecordPById(outId); + // 获取当前用户的身份 + String optionId = templateCard.getSelectedItems().getSelectedItem().getOptionIds().getOptionId(); + String[] optionsKey = optionId.split("_"); + // 当前用户身份 + String status = optionsKey[2]; + if ("departManagerHead".equals(status)) { + // 如果是部门负责人 + String simpleTime = DateUtil.getSimpleTime(new Date()); + map.put("departmentheadTime", DateUtil.DateTimeToTimeStamp(simpleTime)); + map.put("departmenthead", userByPort.getId()); + // 获取点击的按钮类型 + String clickKey = templateCard.getEventKey().split("_")[1]; + if ("pass".equals(clickKey)) { + // 如果点击的是通过 + map.put("departmentheadPass", 1); + map.put("state", "待仓储中心负责人审核"); + // 获取仓储中心详情 + Administration company = PageController.getCompany(361, null); + // 获取仓储中心负责人 + List departmentHeadByUser = PortConfig.findDepartmentHeadByUser(company, null); + StringBuilder depositoryManager = new StringBuilder(); + StringBuilder QyWxUid = new StringBuilder(); +// for (int i = 0; i < departmentHeadByUser.size(); i++) { +// depositoryManager.append(departmentHeadByUser.get(i).getId() + ","); +// QyWxUid.append(departmentHeadByUser.get(i).getWorkwechat()+","); +// } + QyWxUid.append("PangFuZhen"+","); + map.put("depositoryManager", depositoryManager.toString()); + // 向仓储中心负责人发送新的消息 + JSONObject jsonObject = qyWxOperationService.sendQyWxMessage(QyWxUid.toString(), ObjectFormatUtil.toInteger(outId), false); + // 将当前返回结果保存到redis中 + Map QyWxMessageMap = new HashMap<>(); + QyWxMessageMap.put("MsgId",jsonObject.getString("msgid")); + QyWxMessageMap.put("responseCode",jsonObject.getString("response_code")); + // key user:300450:QyWxOut:1 + redisTemplate.opsForHash().putAll("user:"+userByPort.getNumber()+":QyWxOutId:"+outId,QyWxMessageMap); + // 设置过期时间为三天 + redisTemplate.expire("user:"+userByPort.getNumber()+":QyWxOutId:"+outId,72,TimeUnit.HOURS); + } else { + // 如果点击的是驳回 + map.put("departmentheadPass", 2); + map.put("state", "部门负责人审核未通过"); + + } + } + else{ + // 如果是仓储中心负责人 + // 获取点击的按钮类型 + String clickKey = templateCard.getEventKey().split("_")[1]; + // 如果点击的是通过 + String simpleTime = DateUtil.getSimpleTime(new Date()); + map.put("depositoryManagerTime", DateUtil.DateTimeToTimeStamp(simpleTime)); + map.put("depositoryManager", userByPort.getId()); + map.put("depositoryId", recordP.getDepositoryId()); + if("pass".equals(clickKey)){ + // 如果点击的是通过 + map.put("depositoryManagerPass",1); + StringBuilder minRecordByMain = new StringBuilder("[]"); + List applicationOutRecordMinByParent = depositoryRecordMapper.findApplicationOutRecordMinByParent(recordP.getId()); + for (int i = 0; i < applicationOutRecordMinByParent.size(); i++) { + // 获取子单信息 + ApplicationOutRecordMin applicationOutRecordMin = applicationOutRecordMinByParent.get(i); + //设置子订单在redis中的主键 + String minRecordKey = "minRecord:" + applicationOutRecordMin.getId(); + minRecordByMain.insert(1, minRecordKey + ","); // 将子订单主键插入到主订单的子订单列表 + // 设置当前子订单对应仓库管理员记录 + StringBuilder minRecordManage = new StringBuilder(); + // 将要存储到redis中的子订单信息 + Map minRecord = new HashMap<>(); + minRecord.put("parentId", recordP.getId().toString()); // 当前子订单主订单 + minRecord.put("state", "1"); // 当前子订单状态 1待处理2处理 + // 获取对应的物料编号 + Integer mid = applicationOutRecordMin.getMid(); + // 获取物料信息 + Material materialById = materialMapper.findMaterialById(mid); + // 获取该物料所处仓库的仓库管理员 + List userIdByDid = new ArrayList<>(); + userIdByDid = roleService.findUserIdByDid(materialById.getDepositoryId()); + StringBuilder QyWxUid = new StringBuilder(); + for (int j = 0; j < userIdByDid.size(); j++) { + // 获取仓库管理员信息 + UserByPort manager = PageController.FindUserById(userIdByDid.get(j), userByPort); + // 仓库管理员订单信息 + Map userRecord = new HashMap<>(); + // 用户当前子订单 + String userMinRecord = (String) redisTemplate.opsForHash().get("user:" + userIdByDid.get(j), "minRecord"); + if (userMinRecord == null) { // 如果当前用户没有子订单 + userRecord.put("minRecord", "[" + minRecordKey + "," + "]"); // 插入一条子订单 + } else { // 如果当前用户已经有子订单 + StringBuilder minRecordList = new StringBuilder(userMinRecord); // 转为stringbuilder类型 + minRecordList.insert(1, minRecordKey + ",");// 将当前子订单插入头部 + userRecord.put("minRecord", minRecordList.toString()); + } + // 更新redis中用户记录 + redisTemplate.opsForHash().putAll("user:" + userIdByDid.get(j), userRecord); + minRecordManage.append(userIdByDid.get(j)).append(","); +// QyWxUid.append(manager.getWorkwechat()+","); + } + QyWxUid.append("PangFuZhen,"); + minRecord.put("manager", minRecordManage.toString()); + // 添加子订单到redis中 + redisTemplate.opsForHash().putAll(minRecordKey, minRecord); + // 开启线程向仓库管理员发送消息 + new Thread(new Runnable() { + @Override + public void run() { + JSONObject jsonObject = qyWxOperationService.sendNotificationToDepositoryManager(QyWxUid.toString(), applicationOutRecordMin.getId()); + } + }).start(); + } + + // 将主订单插入到redis中 + redisTemplate.opsForHash().put("record:" + recordP.getId(), "minRecord", minRecordByMain.toString()); + map.put("state", "仓储中心负责人审核通过"); + }else{ + // 如果是不通过 + map.put("depositoryManagerPass",2); + map.put("pass", 2); + map.put("state", "仓储中心负责人审核未通过"); + } + } + map.put("id", outId); + return depositoryRecordMapper.updateApplicationOutRecord(map); + } + /** * 转移物品 * @@ -761,7 +1032,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { map.put("price", material.getPrice().toString()); map.put("depositoryId", transferRecor.getToId()); map.put("placeId", transferRecor.getToPlaceId()); - map.put("mid",mid); + map.put("mid", mid); applicationInPlace(map); } else { // 如果不在该仓库,插入一条新记录 @@ -835,9 +1106,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { * @return 该id的数据记录 */ @Override - public DepositoryRecordP findDepositoryRecordById(Integer id) { + public DepositoryRecordP findDepositoryRecordById(Integer id, HttpServletRequest request) { DepositoryRecord depositoryRecordById = depositoryRecordMapper.findDepositoryRecordById(id); - return singlePack(depositoryRecordById); + return singlePack(depositoryRecordById, request); } public Integer checkPass() { @@ -861,7 +1132,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { * @return 符合条件的仓库调度记录集合 */ @Override - public List findDepositoryRecordPByCondition(Map map) { + public List findDepositoryRecordPByCondition(Map map, HttpServletRequest request) { Integer size = 8, page = 1; if (map.containsKey("size")) { size = ObjectFormatUtil.toInteger(map.get("size")); @@ -872,7 +1143,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { map.put("begin", (page - 1) * size); } List depositoryRecordByCondition = depositoryRecordMapper.findDepositoryRecordByCondition(map); - return pack(depositoryRecordByCondition); + return pack(depositoryRecordByCondition, request); } /** @@ -882,7 +1153,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { * @return */ @Override - public List findApplicationInRecordPByCondition(Map map) { + public List findApplicationInRecordPByCondition(Map map, HttpServletRequest request) { Integer size = 10, page = 1; if (map.containsKey("size")) { size = ObjectFormatUtil.toInteger(map.get("size")); @@ -898,7 +1169,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { } List list = depositoryRecordMapper.findApplicationInRecordPByCondition(map); for (int i = 0; i < list.size(); i++) { - UserByPort userByPortById = findUserByPortById(list.get(i).getApplicantId()); + UserByPort userByPortById = findUserByPortById(list.get(i).getApplicantId(), request); String time = DateUtil.TimeStampToDateTime(Long.valueOf(list.get(i).getApplicantTime())); list.get(i).setApplicantName(userByPortById.getName()); list.get(i).setApplicantTime(time); @@ -914,7 +1185,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { * @return */ @Override - public List findApplicationOutRecordPByCondition(Map map) { + public List findApplicationOutRecordPByCondition(Map map, HttpServletRequest request) { Integer size = 10, page = 1; if (map.containsKey("size")) { size = ObjectFormatUtil.toInteger(map.get("size")); @@ -930,7 +1201,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { } List list = depositoryRecordMapper.findApplicationOutRecordPByCondition(map); for (int i = 0; i < list.size(); i++) { - UserByPort userByPortById = findUserByPortById(list.get(i).getApplicantId()); + UserByPort userByPortById = findUserByPortById(list.get(i).getApplicantId(), request); String time = DateUtil.TimeStampToDateTime(Long.valueOf(list.get(i).getApplicantTime())); list.get(i).setApplicantName(userByPortById.getName()); list.get(i).setApplicantTime(time); @@ -979,7 +1250,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { * @return 我的任务 */ @Override - public List findMyTask(Map map) { + public List findMyTask(Map map, HttpServletRequest request) { Integer size = 10, page = 1; if (map.containsKey("size")) { size = ObjectFormatUtil.toInteger(map.get("size")); @@ -990,7 +1261,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { map.put("begin", (page - 1) * size); } // return simplePack(depositoryRecordMapper.findMyTask(map)); - return simplePackOut(depositoryRecordMapper.findMyTaskOut(map)); + return simplePackOut(depositoryRecordMapper.findMyTaskOut(map), request); } /** @@ -1143,8 +1414,8 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { for (int i = 0; i < applicationOutRecordPAll.size(); i++) { ApplicationOutRecordP applicationOutRecordP = applicationOutRecordPAll.get(i); // 获取所有子物料 - Map map = new HashMap<>(); - map.put("parentId",applicationOutRecordP.getId()); + Map map = new HashMap<>(); + map.put("parentId", applicationOutRecordP.getId()); List minByCondition = depositoryRecordMapper.findApplicationOutMinByCondition(map); for (int k = 0; k < minByCondition.size(); k++) { ApplicationOutRecordMin applicationOutRecordMin = minByCondition.get(k); @@ -1159,8 +1430,8 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { if (state.equals(applicationOutRecordPAll.get(i).getState())) { ApplicationOutRecordP applicationOutRecordP = applicationOutRecordPAll.get(i); // 获取所有子物料 - Map map = new HashMap<>(); - map.put("parentId",applicationOutRecordP.getId()); + Map map = new HashMap<>(); + map.put("parentId", applicationOutRecordP.getId()); List minByCondition = depositoryRecordMapper.findApplicationOutMinByCondition(map); for (int k = 0; k < minByCondition.size(); k++) { ApplicationOutRecordMin applicationOutRecordMin = minByCondition.get(k); @@ -1356,11 +1627,11 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { * @param list SimpleDepositoryRecord集合 * @return 包装好的集合 */ - private List simplePackOut(List list) { + private List simplePackOut(List list, HttpServletRequest request) { List result = new ArrayList<>(list.size()); for (SimpleApplicationOutRecord record : list) { SimpleApplicationOutRecordP d = new SimpleApplicationOutRecordP(record); - UserByPort userByPort = findUserByPortById(record.getApplicantId()); + UserByPort userByPort = findUserByPortById(record.getApplicantId(), request); d.setApplyRemark(d.getApplyRemark() == null ? "" : d.getApplyRemark()); d.setApplicantName(userByPort.getName()); result.add(d); @@ -1374,25 +1645,25 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { * @param list DepositoryRecord集合 * @return 包装好的集合 */ - private List pack(List list) { + private List pack(List list, HttpServletRequest request) { List result = new ArrayList<>(list.size()); for (DepositoryRecord record : list) { - result.add(singlePack(record)); + result.add(singlePack(record, request)); } return result; } - private DepositoryRecordP singlePack(DepositoryRecord record) { + private DepositoryRecordP singlePack(DepositoryRecord record, HttpServletRequest request) { DepositoryRecordP d = new DepositoryRecordP(record); - UserByPort getApplicantUser = findUserByPortById(record.getApplicantId()); + UserByPort getApplicantUser = findUserByPortById(record.getApplicantId(), request); d.setApplicantName(getApplicantUser.getName()); d.setDepositoryName(depositoryMapper.findDepositoryNameById(record.getDepositoryId())); if (record.getReviewerId() != null) { - UserByPort reviewerUser = findUserByPortById(record.getReviewerId()); + UserByPort reviewerUser = findUserByPortById(record.getReviewerId(), request); d.setReviewerName(reviewerUser.getName()); } if (record.getCheckerId() != null) { - UserByPort checkerUser = findUserByPortById(record.getCheckerId()); + UserByPort checkerUser = findUserByPortById(record.getCheckerId(), request); d.setCheckerName(checkerUser.getName()); } return d; @@ -1404,7 +1675,8 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { * @param id * @return */ - private UserByPort findUserByPortById(Integer id) { + private UserByPort findUserByPortById(Integer id, HttpServletRequest request) { + UserByPort userToken = (UserByPort) request.getAttribute("userToken"); String url = PortConfig.external_url + "/staff/archivescont"; Map map = new HashMap<>(); map.put("id", id); @@ -1412,7 +1684,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { JSONObject paramObject = JSONObject.parseObject(jsonString); String post = null; try { - post = HttpUtils.send(url, paramObject, StandardCharsets.UTF_8.toString()); + post = HttpUtils.send(url, paramObject, StandardCharsets.UTF_8.toString(), userToken); } catch (IOException e) { e.printStackTrace(); } diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryServiceImpl.java index 73c57946..9eec610e 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryServiceImpl.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryServiceImpl.java @@ -35,7 +35,7 @@ public class DepositoryServiceImpl implements DepositoryService { * @return 影响条数 */ @Override - public Integer insertDepository(Map map) { + public Integer insertDepository(Map map,UserByPort userByPort) { // 获取当前仓库拼音首字母 String dname = (String) map.get("dname"); String dnamePinYin = WordUtil.getPinYinHeadChar(dname); @@ -49,12 +49,12 @@ public class DepositoryServiceImpl implements DepositoryService { List condition = depositoryMapper.findDepositoryRecordPByCondition(temp); // 公司编号 Integer cid = ObjectFormatUtil.toInteger(map.get("cid")); - String companyName = PageController.getCompany(cid).getName(); + String companyName = PageController.getCompany(cid,userByPort).getName(); String adminorgName = ""; // 部门编号 if(!"".equals(map.get("adminorg"))){ Integer adminorg = ObjectFormatUtil.toInteger(map.get("adminorg")); - adminorgName = PageController.getCompany(adminorg).getName(); + adminorgName = PageController.getCompany(adminorg,userByPort).getName(); } // 公司简称 companyName = WordUtil.getPinYinHeadChar(companyName); @@ -86,7 +86,7 @@ public class DepositoryServiceImpl implements DepositoryService { // 部门编号 if(!"".equals(map.get("adminorg"))){ Integer adminorg = ObjectFormatUtil.toInteger(map.get("adminorg")); - adminorgName = PageController.getCompany(adminorg).getName(); + adminorgName = PageController.getCompany(adminorg,userByPort).getName(); adminorgName = WordUtil.getPinYinHeadChar(adminorgName).substring(0,2); } // 获取父仓库编码 @@ -113,7 +113,7 @@ public class DepositoryServiceImpl implements DepositoryService { * @return 影响条数 */ @Override - public List findDepositoryRecordPByCondition(Map map) { + public List findDepositoryRecordPByCondition(Map map,UserByPort userByPort) { Integer size = 10, page = 1; if (map.containsKey("size")) { size = ObjectFormatUtil.toInteger(map.get("size")); @@ -127,7 +127,7 @@ public class DepositoryServiceImpl implements DepositoryService { for (int i = 0; i < list.size(); i++) { Depository depository = list.get(i); if(!depository.getAdminorg().isEmpty()){ - Administration company = PageController.getCompany(ObjectFormatUtil.toInteger(depository.getAdminorg())); + Administration company = PageController.getCompany(ObjectFormatUtil.toInteger(depository.getAdminorg()),userByPort); depository.setAdminorgName(company.getName()); } } @@ -246,7 +246,7 @@ public class DepositoryServiceImpl implements DepositoryService { @Override public Map findDepositoryAllNameAndId(UserByPort user) { // 获取当前用户所在部门管理的仓库 - List depositoryByAdminorg = depositoryMapper.findDepositoryByAdminorg(user.getMaindeparmentname()); + List depositoryByAdminorg = depositoryMapper.findDepositoryByAdminorg(user.getMaindeparment().toString()); // 仓库id列表 List depositoryListId = new ArrayList<>(); @@ -276,6 +276,8 @@ public class DepositoryServiceImpl implements DepositoryService { return map; } + + /** * 根据仓库名称获取当前仓库库存容量 * @param dname @@ -380,6 +382,38 @@ public class DepositoryServiceImpl implements DepositoryService { return depositoryMapper.findDepositoryByCode(code); } + /** + * 获取当前用户与其部门所管理的仓库 + * @param userByPort + * @return + */ + @Override + public List findDepositoryByAdminorgAndUser(UserByPort userByPort) { + // 获取当前用户所在部门管理的仓库 + List depositoryByAdminorg = depositoryMapper.findDepositoryByAdminorg(userByPort.getMaindeparment().toString()); + + // 仓库id列表 + List depositoryList = new ArrayList<>(); + // 添加到id列表 + for (Depository depository : depositoryByAdminorg) { + depositoryList.add(depository); + } + + // 获取当前用户管理的仓库 + List depositoryAndRole = roleMapper.findDepositoryAndRole(userByPort.getId()); + + for (int i = 0; i < depositoryAndRole.size(); i++) { + RoleAndDepository roleAndDepository = depositoryAndRole.get(i); + // 如果重复则跳过 + if(depositoryList.get(i).getId().compareTo(roleAndDepository.getDepositoryId()) == 0){ + continue; + } + Depository depositoryRecordById = depositoryMapper.findDepositoryRecordById(roleAndDepository.getDepositoryId()); + depositoryList.add(depositoryRecordById); + } + return depositoryList; + } + //判断是否有子类 public boolean isChildForDepository(Integer parentId){ boolean flag = false; diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java index 90c55b28..3b005987 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java @@ -347,23 +347,6 @@ public class MaterialServiceImpl implements MaterialService { return result; } - private UserByPort findUserByPortById(Integer id) { - String url = PortConfig.external_url + "/staff/archivescont"; - Map map = new HashMap<>(); - map.put("id", id); - String jsonString = JSONObject.toJSONString(map); - JSONObject paramObject = JSONObject.parseObject(jsonString); - String post = null; - try { - post = HttpUtils.send(url, paramObject, HTTP.UTF_8); - } catch (IOException e) { - e.printStackTrace(); - } - JSONObject jsonObject = JSONObject.parseObject(post); - JSONObject data = (JSONObject) jsonObject.get("data"); - UserByPort userByPort = JSONObject.toJavaObject( data, UserByPort.class); - return userByPort; - } /** @@ -383,7 +366,21 @@ public class MaterialServiceImpl implements MaterialService { size= ObjectFormatUtil.toInteger(map.get("size")); map.put("size", size); } + Integer depositoryId = ObjectFormatUtil.toInteger(map.get("depositoryId")); + Depository depositoryRecordById = depositoryMapper.findDepositoryRecordById(depositoryId); List materialByDepository = materialMapper.findMaterialByDepository(map); + for (int i = 0; i < materialByDepository.size(); i++) { + materialByDepository.get(i).setDepositoryCode(depositoryRecordById.getCode()); + // 获取当前物料所处库位 + Integer mid = materialByDepository.get(i).getId(); + List placeByMidAndDid = placeService.findPlaceByMidAndDid(mid, depositoryId); + StringBuilder placeCode = new StringBuilder(); + for (int j = 0; j < placeByMidAndDid.size(); j++) { + placeCode.append(placeByMidAndDid.get(j).getCode()).append(" "); + } + materialByDepository.get(i).setPlaceCode(placeCode.toString()); + } + return pack(materialByDepository); } diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/QyWxOperationService.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/QyWxOperationService.java new file mode 100644 index 00000000..19c70e50 --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/service/impl/QyWxOperationService.java @@ -0,0 +1,497 @@ +package com.dreamchaser.depository_manage.service.impl; + +import cn.hutool.core.lang.Snowflake; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.dreamchaser.depository_manage.config.QyWxConfig; +import com.dreamchaser.depository_manage.config.QyWx_template_card.*; +import com.dreamchaser.depository_manage.controller.PageController; +import com.dreamchaser.depository_manage.entity.*; +import com.dreamchaser.depository_manage.mapper.DepositoryMapper; +import com.dreamchaser.depository_manage.mapper.DepositoryRecordMapper; +import com.dreamchaser.depository_manage.mapper.MaterialMapper; +import com.dreamchaser.depository_manage.pojo.ApplicationOutRecordP; +import com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard.TemplateCard; +import com.dreamchaser.depository_manage.utils.DateUtil; +import com.dreamchaser.depository_manage.utils.HttpUtils; +import org.apache.poi.ss.formula.functions.T; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Service +public class QyWxOperationService { + + + @Autowired + DepositoryRecordMapper depositoryRecordMapper; + + @Autowired + MaterialMapper materialMapper; + + @Autowired + DepositoryMapper depositoryMapper; + + @Autowired + RedisTemplate redisTemplate; + + /** + * 用于向企业微信发送消息 + * @param uid 接收人 + * @param outId 申请出库编号 + * @param flag 用于判断发送类型是部门负责人还是仓储负责人(true为部门,false为仓储) + * @return + */ + public JSONObject sendQyWxMessage(String uid, Integer outId, Boolean flag) { + + // 获取将要发送申请的订单记录 + ApplicationOutRecordP applicationOutRecordPById = depositoryRecordMapper.findApplicationOutRecordPById(outId); + // 申请人id + Integer applicantId = applicationOutRecordPById.getApplicantId(); + // 申请人 + UserByPort applicant = PageController.FindUserById(applicantId, null); + + // 获取所有子订单 + List applicationOutRecordMinByParent = depositoryRecordMapper.findApplicationOutRecordMinByParent(outId); + StringBuilder mname = new StringBuilder(); + StringBuilder depositoryName = new StringBuilder(); + StringBuilder sumQuantity = new StringBuilder(); + for (int i = 0; i < applicationOutRecordMinByParent.size(); i++) { + // 获取子订单信息 + ApplicationOutRecordMin applicationOutRecordMin = applicationOutRecordMinByParent.get(i); + // 获取当前申请物料 + Material materialById = materialMapper.findMaterialById(applicationOutRecordMin.getMid()); + // 获取当前物料所在仓库 + Depository depositoryRecordById = depositoryMapper.findDepositoryRecordById(materialById.getDepositoryId()); + sumQuantity.append(applicationOutRecordMin.getQuantity()).append(","); + mname.append(materialById.getMname()).append(","); + depositoryName.append(depositoryRecordById.getDname()).append(","); + } + + // 1.获取access_token:根据企业id和应用密钥获取access_token,并拼接请求url + String accessToken = "".equals(QyWxConfig.token)?QyWxConfig.GetQYWXToken():QyWxConfig.token; + // 2.获取发送对象,并转成json + ButtonInteraction buttonInteraction = new ButtonInteraction(); + // 1.1非必需 + //设置消息接收者 + String[] split = uid.split(","); + StringBuilder toUserName = new StringBuilder(); + for (int i = 0; i < split.length - 1; i++) { + toUserName.append(split[i]).append("|"); + } + toUserName.append(split[split.length - 1]); + buttonInteraction.setTouser(toUserName.toString()); // 不区分大小写 + + // 1.2必需 + // 消息类型 + buttonInteraction.setMsgtype("template_card"); + // 企业应用的id,整型 + buttonInteraction.setAgentid(QyWxConfig.AgentId); + // 卡片模板 + TemplateCard_button_interaction templateCard_button_interaction = new TemplateCard_button_interaction(); + // 模板卡片类型,按钮交互型卡片填写"button_interaction" + templateCard_button_interaction.setCard_type("button_interaction"); + // 卡片右上角更多操作按钮 + TemplateCard_action_menu action_menu = new TemplateCard_action_menu(); + action_menu.setDesc("卡片副交互辅助文本说明"); + + // 卡片右上角操作按钮 + TemplateCard_action action1 = new TemplateCard_action(); + action1.setKey("AcceptThePush"); + action1.setText("接受推送"); + TemplateCard_action action2 = new TemplateCard_action(); + action2.setKey("NoPush"); + action2.setText("不再推送"); + List actionList = new ArrayList<>(); + actionList.add(action1); + actionList.add(action2); + action_menu.setAction_list(actionList); + // 设置操作按钮 + templateCard_button_interaction.setAction_menu(action_menu); + + // 一级标题 + TemplateCard_main_title main_title = new TemplateCard_main_title(); +// main_title.setTitle(applicant+"的出库申请"); + main_title.setTitle(applicant.getName()+"的出库申请"); + main_title.setDesc("申请时间:"+ DateUtil.TimeStampToDateTime(Long.valueOf(applicationOutRecordPById.getApplicantTime()))); + + // 设置一级标题 + templateCard_button_interaction.setMain_title(main_title); + + // 二级标题+文本列表,用于设置物料名称 + TemplateCard_horizontal_content horizontal_content_mname = new TemplateCard_horizontal_content(); + // 链接类型 0代表不是链接 + horizontal_content_mname.setType(0); + // 二级标题 + horizontal_content_mname.setKeyname("申请物料:"); + horizontal_content_mname.setValue(mname.toString()); + + // 二级标题+文本列表,用于设置物料数量 + TemplateCard_horizontal_content horizontal_content_quantity = new TemplateCard_horizontal_content(); + // 链接类型 0代表不是链接 + horizontal_content_quantity.setType(0); + // 二级标题 + horizontal_content_quantity.setKeyname("数量"); + horizontal_content_quantity.setValue(sumQuantity.toString()); + + // 二级标题+文本列表,用于设置物料对应仓库 + TemplateCard_horizontal_content horizontal_content_depositoryName = new TemplateCard_horizontal_content(); + // 链接类型 0代表不是链接 + horizontal_content_depositoryName.setType(0); + // 二级标题 + horizontal_content_depositoryName.setKeyname("仓库名称"); + horizontal_content_depositoryName.setValue(depositoryName.toString()); + + + // 二级标题+文本列表,用于设置申请查看明细 + TemplateCard_horizontal_content horizontal_content_detail = new TemplateCard_horizontal_content(); + // 链接类型 0代表不是链接 + horizontal_content_detail.setType(1); + // 二级标题 + horizontal_content_detail.setKeyname("申请明细"); + horizontal_content_detail.setValue("查看明细"); + horizontal_content_detail.setUrl("https://jy.hxgk.group/ApplicationOutView?id="+outId); + + + List horizontal_contentList = new ArrayList<>(); + horizontal_contentList.add(horizontal_content_mname); + horizontal_contentList.add(horizontal_content_quantity); + horizontal_contentList.add(horizontal_content_depositoryName); + horizontal_contentList.add(horizontal_content_detail); + + // 设置二级标题 + templateCard_button_interaction.setHorizontal_content_list(horizontal_contentList); + + + // 任务id,同一个应用任务id不能重复,只能由数字、字母和“_-@”组成,最长128字节 + // 通过雪花算法获取taskId + Snowflake snowflake = new Snowflake(10,10,true); + templateCard_button_interaction.setTask_id(snowflake.nextIdStr()); + + // 下拉式的选择器 + TemplateCard_button_selection button_selection = new TemplateCard_button_selection(); + // 下拉式的选择器的key + button_selection.setQuestion_key("btn_status"); + button_selection.setTitle("您的身份"); + + List optionList = new ArrayList<>(); + // 选项 + TemplateCard_button_selection_option button_selection_option = new TemplateCard_button_selection_option(); + button_selection_option.setText("部门负责人"); + if(flag) { + // 如果是发送给部门负责人 + button_selection_option.setId("btn_status_departManagerHead"); + }else{ + // 如果是发送给仓储负责人 + button_selection_option.setId("btn_status_depositoryManager"); + } + optionList.add(button_selection_option); + + button_selection.setOption_list(optionList); + + templateCard_button_interaction.setButton_selection(button_selection); + + // 按钮列表,列表长度不超过6 + List buttonList = new ArrayList<>(); + + TemplateCard_button button1 = new TemplateCard_button(); + button1.setKey("wms_pass_outId"+outId); + button1.setStyle(1); + button1.setText("通过"); + + TemplateCard_button button2 = new TemplateCard_button(); + button2.setKey("wms_reject_outId"+outId); + button2.setStyle(2); + button2.setText("驳回"); + + buttonList.add(button1); + buttonList.add(button2); + + templateCard_button_interaction.setButton_list(buttonList); + + buttonInteraction.setTemplate_card(templateCard_button_interaction); + + String s = JSONObject.toJSONString(buttonInteraction); + + // 3.获取请求的url + String url = QyWxConfig.sendMessage_url.replace("ACCESS_TOKEN", accessToken); + + // 4.调用接口,发送消息 + String s1 = HttpUtils.doPost(url, s); + + // 将返回结果转为json对象 + JSONObject jsonObject = JSON.parseObject(s1); + + // 返回 + return jsonObject; + } + + + /** + * 将最终完成的订单抄送给仓储负责人 + * @param uid 仓储负责人编号 + * @param outId 订单编号 + * @return + */ + public JSONObject sendCcMessageToUsers(String uid,Integer outId){ + // 获取已经完成的订单 + ApplicationOutRecordP recordP = depositoryRecordMapper.findApplicationOutRecordPById(outId); + // 申请人id + Integer applicantId = recordP.getApplicantId(); + // 申请人 + UserByPort applicant = PageController.FindUserById(applicantId, null); + // 获取所有子订单 + List applicationOutRecordMinByParent = depositoryRecordMapper.findApplicationOutRecordMinByParent(outId); + + MessageByMarkDown markDown = new MessageByMarkDown(); + //设置消息接收者 + String[] split = uid.split(","); + StringBuilder toUserName = new StringBuilder(); + for (int i = 0; i < split.length - 1; i++) { + toUserName.append(split[i]).append("|"); + } + toUserName.append(split[split.length - 1]); + markDown.setTouser(toUserName.toString()); // 不区分大小写 + + + + // 设置agentId + markDown.setAgentid(QyWxConfig.AgentId); + markDown.setMsgtype("markdown"); + + + // 设置content + Map markdown = new HashMap<>(); + StringBuilder content = new StringBuilder("## `抄送信息:`%n"); + content.append(">### **"+applicant.getName()+"的出库申请** %n申请时间:2022-10-23 14:30:18 %n"); + content.append("%n---%n"); + for (ApplicationOutRecordMin recordMin : applicationOutRecordMinByParent) { + // 获取子订单信息 + // 获取申请物料信息 + Material materialById = materialMapper.findMaterialById(recordMin.getMid()); + // 获取仓库信息 + Depository depositoryRecordById = depositoryMapper.findDepositoryRecordById(recordMin.getDepositoryId()); + // 获取处理人信息 + UserByPort userByPort = PageController.FindUserById(recordMin.getCheckId(), null); + content.append(">- 物料名称:").append(materialById.getMname()).append("%n"); + content.append(">- 申请数量:").append(recordMin.getQuantity()).append("%n"); + content.append(">- 所处仓库:").append(depositoryRecordById.getDname()).append("%n"); + content.append(">- 出库人员:").append(userByPort.getName()).append("%n"); + content.append("%n---%n"); + } + content.append(">## '''%n" + + ">如需要查看详细信息,请点击:[查看信息](https://jy.hxgk.group/ApplicationOutView?id="+recordP.getId()+")"); + markdown.put("content",content.toString()); + markDown.setMarkdown(markdown); + String jsonString = JSONObject.toJSONString(markDown); + jsonString = String.format(jsonString); + System.out.println(jsonString); + // 3.获取请求的url + // 获取access_token:根据企业id和应用密钥获取access_token,并拼接请求url + String accessToken = "".equals(QyWxConfig.token)?QyWxConfig.GetQYWXToken():QyWxConfig.token; + String url = QyWxConfig.sendMessage_url.replace("ACCESS_TOKEN", accessToken); + + // 4.调用接口,发送消息 + String s1 = HttpUtils.doPost(url, jsonString); + + // 将返回结果转为json对象 + JSONObject jsonObject = JSON.parseObject(s1); + + // 返回 + return jsonObject; + } + + + /** + * 给仓库管理员发送出库通知 + * @param uid + * @param outMinId + * @return + */ + public JSONObject sendNotificationToDepositoryManager(String uid,Integer outMinId){ + // 需要出库的子订单 + ApplicationOutRecordMin recordMin = depositoryRecordMapper.findApplicationOutMinById(outMinId); + // 获取其主订单 + ApplicationOutRecordP outRecordP = depositoryRecordMapper.findApplicationOutRecordPById(recordMin.getParentId()); + // 申请人id + Integer applicantId = outRecordP.getApplicantId(); + // 申请人 + UserByPort applicant = PageController.FindUserById(applicantId, null); + // 定义文本通知型卡片 + TextNotice textNotice = new TextNotice(); + + //设置消息接收者 + String[] split = uid.split(","); + StringBuilder toUserName = new StringBuilder(); + for (int i = 0; i < split.length - 1; i++) { + toUserName.append(split[i]).append("|"); + } + toUserName.append(split[split.length - 1]); + textNotice.setTouser(toUserName.toString()); // 不区分大小写 + + + // 设置agentId + textNotice.setAgentid(QyWxConfig.AgentId); + + // 定义卡片模板 + TemplateCard_text_notice text_notice = new TemplateCard_text_notice(); + text_notice.setCard_type("text_notice"); + + // 任务id,同一个应用任务id不能重复,只能由数字、字母和“_-@”组成,最长128字节 + // 通过雪花算法获取taskId + Snowflake snowflake = new Snowflake(10,10,true); + text_notice.setTask_id(snowflake.nextIdStr()); + + textNotice.setMsgtype("template_card"); + + // 设置主标题 + TemplateCard_main_title main_title = new TemplateCard_main_title(); + main_title.setTitle(applicant.getName()+"的出库请求"); + main_title.setDesc("申请时间:"+ DateUtil.TimeStampToDateTime(Long.valueOf(outRecordP.getApplicantTime()))); + + text_notice.setMain_title(main_title); + // 卡片右上角更多操作按钮 + TemplateCard_action_menu action_menu = new TemplateCard_action_menu(); + action_menu.setDesc("卡片副交互辅助文本说明"); + + // 卡片右上角操作按钮 + TemplateCard_action action1 = new TemplateCard_action(); + action1.setKey("AcceptThePush"); + action1.setText("接受推送"); + TemplateCard_action action2 = new TemplateCard_action(); + action2.setKey("NoPush"); + action2.setText("不再推送"); + List actionList = new ArrayList<>(); + actionList.add(action1); + actionList.add(action2); + action_menu.setAction_list(actionList); + text_notice.setAction_menu(action_menu); + + + + List horizontalContentList = new ArrayList<>(); + + // 获取申请物料信息 + Material materialById = materialMapper.findMaterialById(recordMin.getMid()); + // 获取仓库信息 + Depository depositoryRecordById = depositoryMapper.findDepositoryRecordById(recordMin.getDepositoryId()); + // 设至二级标题 + // 物料名称 + TemplateCard_horizontal_content horizontal_content_mname = new TemplateCard_horizontal_content(); + horizontal_content_mname.setType(0); + horizontal_content_mname.setKeyname("物料名称:"); + horizontal_content_mname.setValue(materialById.getMname()); + // 物料编码 + TemplateCard_horizontal_content horizontal_content_mcode = new TemplateCard_horizontal_content(); + horizontal_content_mcode.setType(0); + horizontal_content_mcode.setKeyname("物料编码:"); + horizontal_content_mcode.setValue(materialById.getCode().toString()); + // 申请数量 + TemplateCard_horizontal_content horizontal_content_quantity = new TemplateCard_horizontal_content(); + horizontal_content_quantity.setType(0); + horizontal_content_quantity.setKeyname("申请数量:"); + horizontal_content_quantity.setValue(recordMin.getQuantity().toString()); + // 所在仓库 + TemplateCard_horizontal_content horizontal_content_depository = new TemplateCard_horizontal_content(); + horizontal_content_depository.setType(0); + horizontal_content_depository.setKeyname("所在仓库:"); + horizontal_content_depository.setValue(depositoryRecordById.getDname()); + + // 申请备注 + TemplateCard_horizontal_content horizontal_content_applyRemark = new TemplateCard_horizontal_content(); + horizontal_content_applyRemark.setType(0); + horizontal_content_applyRemark.setKeyname("申请备注:"); + horizontal_content_applyRemark.setValue(outRecordP.getApplyRemark()); + + horizontalContentList.add(horizontal_content_mname); + horizontalContentList.add(horizontal_content_mcode); + horizontalContentList.add(horizontal_content_quantity); + horizontalContentList.add(horizontal_content_depository); + horizontalContentList.add(horizontal_content_applyRemark); + + text_notice.setHorizontal_content_list(horizontalContentList); + + // 卡片整体点击事件 + TemplateCard_card_action card_action = new TemplateCard_card_action(); + card_action.setType(1); + card_action.setUrl("https://jy.hxgk.group/ApplicationOutMinByDidForMobile?depositoryId="+depositoryRecordById.getId()+"&state=0"); + text_notice.setCard_action(card_action); + + //跳转指引样式的列表 + List jumpList = new ArrayList<>(); + TemplateCard_jump jump = new TemplateCard_jump(); + jump.setType("1"); + jump.setUrl("https://jy.hxgk.group"); + jump.setTitle("进入系统"); + jumpList.add(jump); + + text_notice.setJump_list(jumpList); + + textNotice.setTemplate_card(text_notice); + String s = JSONObject.toJSONString(textNotice); + + // 3.获取请求的url + // 获取access_token:根据企业id和应用密钥获取access_token,并拼接请求url + String accessToken = "".equals(QyWxConfig.token)?QyWxConfig.GetQYWXToken():QyWxConfig.token; + String url = QyWxConfig.sendMessage_url.replace("ACCESS_TOKEN", accessToken); + + // 4.调用接口,发送消息 + String s1 = HttpUtils.doPost(url, s); + + // 将返回结果转为json对象 + JSONObject jsonObject = JSON.parseObject(s1); + + // 返回 + return jsonObject; + } + /** + * 用于撤回发送给企业微信的消息 + * @param msgid 待撤回消息的id + * @return + */ + public String withdrawQyWxMessage(String msgid){ + String url = String.format("https://qyapi.weixin.qq.com/cgi-bin/message/recall?access_token=%s", QyWxConfig.token); + Map param = new HashMap<>(); + param.put("msgid",msgid); + String jsonString = JSONObject.toJSONString(param); + String post = HttpUtils.doPost(url, jsonString); + JSONObject jsonObject = JSON.parseObject(post); + String errmsg = jsonObject.getString("errmsg"); + Integer errcode = jsonObject.getInteger("errcode"); + if(errcode == 0){ + // 如果撤回成功 + return errmsg; + }else{ + return errmsg; + } + } + + + /** + * 用于更新卡片中的按钮为不可点击状态 + * @param response_code + * @return + */ + public JSONObject updateTemplateCard(String response_code,String userName,String state){ + String url = String.format("https://qyapi.weixin.qq.com/cgi-bin/message/update_template_card?access_token="+QyWxConfig.token+"&debug=1"); + Map map = new HashMap<>(); + map.put("atall",1); + map.put("agentid",QyWxConfig.AgentId); + map.put("response_code",response_code); + Map button = new HashMap<>(); + button.put("replace_name",userName+"已"+state); + map.put("button",button); + String jsonString = JSONObject.toJSONString(map); + String s1 = HttpUtils.doPost(url, jsonString); + JSONObject jsonObject = JSON.parseObject(s1); + return jsonObject; + } + + +} diff --git a/src/main/java/com/dreamchaser/depository_manage/utils/HttpUtils.java b/src/main/java/com/dreamchaser/depository_manage/utils/HttpUtils.java index 022e7c21..56fd2952 100644 --- a/src/main/java/com/dreamchaser/depository_manage/utils/HttpUtils.java +++ b/src/main/java/com/dreamchaser/depository_manage/utils/HttpUtils.java @@ -1,6 +1,8 @@ package com.dreamchaser.depository_manage.utils; import com.alibaba.fastjson.JSONObject; +import com.dreamchaser.depository_manage.entity.UserByPort; +import com.dreamchaser.depository_manage.security.pool.UserKeyAndTokenPool; import lombok.Data; import lombok.extern.log4j.Log4j2; import org.apache.http.HttpResponse; @@ -33,16 +35,6 @@ import java.net.URL; @Log4j2 public class HttpUtils { - public static String userKey = ""; - public static String userToken = ""; - - public static void setUserKey(String userKey) { - HttpUtils.userKey = userKey; - } - - public static void setUserToken(String userToken) { - HttpUtils.userToken = userToken; - } public static String doGet(String httpurl) { HttpURLConnection connection = null; @@ -224,7 +216,7 @@ public class HttpUtils { * @throws ParseException * @throws IOException */ - public static String send(String url, JSONObject jsonObject,String encoding) throws ParseException, IOException{ + public static String send(String url, JSONObject jsonObject, String encoding, UserByPort userByPort) throws ParseException, IOException{ String body = ""; //创建httpclient对象 CloseableHttpClient client = HttpClients.createDefault(); @@ -236,15 +228,25 @@ public class HttpUtils { "application/json")); //设置参数到请求对象中 httpPost.setEntity(s); - System.out.println("请求地址:"+url); + // System.out.println("请求参数:"+nvps.toString()); //设置header信息 //指定报文头【Content-type】、【User-Agent】 httpPost.setHeader("Content-type", "application/json"); httpPost.setHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)"); - httpPost.setHeader("user-token",userToken); - httpPost.setHeader("user-key",userKey); + String keyAndToken = " & "; + if(userByPort!=null) + { + keyAndToken = UserKeyAndTokenPool.getKeyAndToken(userByPort.getNumber()); + } + String[] split = keyAndToken.split("&"); + + httpPost.setHeader("user-token",split[1]); + httpPost.setHeader("user-key",split[0]); + System.out.println("请求地址:"+url); + System.out.println("请求Key:"+split[0]); + System.out.println("请求token:"+split[1]); //执行请求操作,并拿到结果(同步阻塞) CloseableHttpResponse response = client.execute(httpPost); //获取结果实体 diff --git a/src/main/java/com/dreamchaser/depository_manage/utils/QyWxXMLUtils.java b/src/main/java/com/dreamchaser/depository_manage/utils/QyWxXMLUtils.java index 713189c3..3e93f609 100644 --- a/src/main/java/com/dreamchaser/depository_manage/utils/QyWxXMLUtils.java +++ b/src/main/java/com/dreamchaser/depository_manage/utils/QyWxXMLUtils.java @@ -1,4 +1,121 @@ package com.dreamchaser.depository_manage.utils; +import com.dreamchaser.depository_manage.config.QyWxConfig; +import org.apache.commons.lang.StringEscapeUtils; +import org.dom4j.Document; +import org.dom4j.DocumentHelper; +import org.dom4j.Element; +import org.dom4j.io.OutputFormat; + +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Marshaller; +import javax.xml.bind.Unmarshaller; +import java.io.FileOutputStream; +import java.io.StringReader; +import java.io.StringWriter; + +/** + * 用于企业微信xml的工具类 + */ + + + public class QyWxXMLUtils { + + /** + * 用于拼接回调post请求时的xml + * @param Encrypt + * @return + */ + public static String formatDataToXml(String Encrypt){ + // 创建document对象 + Document document = DocumentHelper.createDocument(); + // 创建根节点xml + Element root = document.addElement("xml"); + // 4、生成子节点及子节点内容 + Element ToUserName = root.addElement("ToUserName"); + ToUserName.setText(""); + + Element agentID = root.addElement("AgentID"); + agentID.setText(""); + + Element encrypt = root.addElement("Encrypt"); + encrypt.setText(""); + // 5、设置生成xml的格式 + OutputFormat format = OutputFormat.createPrettyPrint(); + // 设置编码格式 + format.setEncoding("UTF-8"); + String xml = document.asXML(); + xml = QyWxXMLUtils.dealxmlHeader(xml); + xml = StringEscapeUtils.unescapeXml(xml); + return xml; + } + + + /** + * 用于删除企业微信中的头标识 + * @param xmlText + * @return + */ + public static String dealxmlHeader(String xmlText) + { + StringBuilder sb=new StringBuilder(xmlText); + StringBuilder newsb=new StringBuilder(""); + String startstring=sb.substring(0,xmlText.indexOf("") + 2,xmlText.length()); + newsb.append(startstring+endstring); + xmlText=new String(newsb.toString()); + return xmlText; + + } + + + /** + * 将String类型的xml转换成对象 + * @param clazz + * @param xmlStr + * @return + */ + public static Object convertXmlStrToObject(Class clazz, String xmlStr) { + Object xmlObject = null; + try { + JAXBContext context = JAXBContext.newInstance(clazz); + // 进行将Xml转成对象的核心接口 + Unmarshaller unmarshaller = context.createUnmarshaller(); + StringReader sr = new StringReader(xmlStr); + xmlObject = unmarshaller.unmarshal(sr); + } catch (JAXBException e) { + e.printStackTrace(); + } + return xmlObject; + } + + + /** + * 将对象直接转换成String类型的 XML输出 + * + * @param obj + * @return + */ + public static String convertToXml(Object obj) { + // 创建输出流 + StringWriter sw = new StringWriter(); + try { + // 利用jdk中自带的转换类实现 + JAXBContext context = JAXBContext.newInstance(obj.getClass()); + + Marshaller marshaller = context.createMarshaller(); + // 格式化xml输出的格式 + marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, + Boolean.TRUE); + // 将对象转换成输出流形式的xml + marshaller.marshal(obj, sw); + } catch (JAXBException e) { + e.printStackTrace(); + } + return sw.toString(); + } + + } diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml index 5c9b68de..18c56b83 100644 --- a/src/main/resources/application-test.yml +++ b/src/main/resources/application-test.yml @@ -5,6 +5,10 @@ management: exposure: include: beans,health spring: + mobile: + sitepreference: + enabled:true + servlet: multipart: enabled: true @@ -68,9 +72,6 @@ spring: - -# resources: -# static-locations: classpath:/static/ server: mybatis: type-aliases-package: com.dreamchaser.depository_manage.entity diff --git a/src/main/resources/static/api/init.json b/src/main/resources/static/api/init.json index 8bb8c045..57e91427 100644 --- a/src/main/resources/static/api/init.json +++ b/src/main/resources/static/api/init.json @@ -180,7 +180,6 @@ "target": "_self", "href": "/my_task" }, - { "title": "我的申请", "href": "/my_apply", diff --git a/src/main/resources/static/api/init_checker.json b/src/main/resources/static/api/init_checker.json index 876d1b98..ac9e44f5 100644 --- a/src/main/resources/static/api/init_checker.json +++ b/src/main/resources/static/api/init_checker.json @@ -180,7 +180,6 @@ "target": "_self", "href": "/my_task" }, - { "title": "我的申请", "href": "/my_apply", diff --git a/src/main/resources/static/api/init_reviewer.json b/src/main/resources/static/api/init_reviewer.json index 4a6ebd1d..b0085bd9 100644 --- a/src/main/resources/static/api/init_reviewer.json +++ b/src/main/resources/static/api/init_reviewer.json @@ -180,7 +180,6 @@ "target": "_self", "href": "/my_task" }, - { "title": "我的申请", "href": "/my_apply", diff --git a/src/main/resources/static/api/init_user.json b/src/main/resources/static/api/init_user.json index d112120b..2f29afce 100644 --- a/src/main/resources/static/api/init_user.json +++ b/src/main/resources/static/api/init_user.json @@ -60,7 +60,6 @@ "target": "_self", "href": "/my_task" }, - { "title": "我的申请", "href": "/my_apply", diff --git a/src/main/resources/static/api/table-in.json b/src/main/resources/static/api/table-in.json index 7bc51fc2..833e7269 100644 --- a/src/main/resources/static/api/table-in.json +++ b/src/main/resources/static/api/table-in.json @@ -35,10 +35,11 @@ "reviewTime": "2021-10-07 11:12", "depositoryId": 57, "applyRemarks": "老板要求今天这批货得进库,请尽快批准", - "checkerName":"李四", + "checkerName": "李四", "checkRemarks": "验收无误,入库!", "checkTime": "2021-10-8 15:23" - },{ + }, + { "id": 10002, "applicationId": 409, "materialName": "骁龙888芯片", @@ -53,7 +54,8 @@ "reviewTime": "2020-10-07 11:12", "depositoryId": 57, "applyRemarks": "老板要求今天这批货得进库,请尽快批准" - },{ + }, + { "id": 10000, "applicationId": 123, "materialName": "骁龙888芯片", @@ -68,7 +70,8 @@ "reviewTime": "2020-10-07 11:12", "depositoryId": 57, "applyRemarks": "老板要求今天这批货得进库,请尽快批准" - },{ + }, + { "id": 10000, "applicationId": 321, "materialName": "骁龙888芯片", @@ -83,7 +86,8 @@ "reviewTime": "2020-10-07 11:12", "depositoryId": 57, "applyRemarks": "老板要求今天这批货得进库,请尽快批准" - },{ + }, + { "id": 10000, "applicationId": 456, "materialName": "骁龙888芯片", @@ -98,7 +102,8 @@ "reviewTime": "2020-10-07 11:12", "depositoryId": 57, "applyRemarks": "老板要求今天这批货得进库,请尽快批准" - },{ + }, + { "id": 10000, "applicationId": 456, "materialName": "骁龙888芯片", @@ -113,7 +118,8 @@ "reviewTime": "2020-10-07 11:12", "depositoryId": 57, "applyRemarks": "老板要求今天这批货得进库,请尽快批准" - },{ + }, + { "id": 10000, "applicationId": 123, "materialName": "骁龙888芯片", diff --git a/src/main/resources/static/api/table-out.json b/src/main/resources/static/api/table-out.json index 631f46d7..4b96f77a 100644 --- a/src/main/resources/static/api/table-out.json +++ b/src/main/resources/static/api/table-out.json @@ -35,7 +35,8 @@ "reviewTime": "2021-10-07 11:12", "depositoryId": 57, "applyRemarks": "老板要求今天这批货得进库,请尽快批准" - },{ + }, + { "id": 10002, "applicationId": 409, "materialName": "骁龙888芯片", @@ -50,7 +51,8 @@ "reviewTime": "2020-10-07 11:12", "depositoryId": 57, "applyRemarks": "老板要求今天这批货得进库,请尽快批准" - },{ + }, + { "id": 10000, "applicationId": 123, "materialName": "骁龙888芯片", @@ -65,7 +67,8 @@ "reviewTime": "2020-10-07 11:12", "depositoryId": 57, "applyRemarks": "老板要求今天这批货得进库,请尽快批准" - },{ + }, + { "id": 10000, "applicationId": 321, "materialName": "骁龙888芯片", @@ -80,7 +83,8 @@ "reviewTime": "2020-10-07 11:12", "depositoryId": 57, "applyRemarks": "老板要求今天这批货得进库,请尽快批准" - },{ + }, + { "id": 10000, "applicationId": 456, "materialName": "骁龙888芯片", @@ -95,7 +99,8 @@ "reviewTime": "2020-10-07 11:12", "depositoryId": 57, "applyRemarks": "老板要求今天这批货得进库,请尽快批准" - },{ + }, + { "id": 10000, "applicationId": 456, "materialName": "骁龙888芯片", @@ -110,7 +115,8 @@ "reviewTime": "2020-10-07 11:12", "depositoryId": 57, "applyRemarks": "老板要求今天这批货得进库,请尽快批准" - },{ + }, + { "id": 10000, "applicationId": 123, "materialName": "骁龙888芯片", diff --git a/src/main/resources/static/api/tableSelect.json b/src/main/resources/static/api/tableSelect.json index 37fb0ed8..a1af70d3 100644 --- a/src/main/resources/static/api/tableSelect.json +++ b/src/main/resources/static/api/tableSelect.json @@ -1,23 +1,87 @@ { - "code": 0, - "msg": "", - "count": 16, - "data": [ - { "id":"001", "username":"张玉林", "sex":"女" }, - { "id":"002", "username":"刘晓军", "sex":"男" }, - { "id":"003", "username":"张恒", "sex":"男" }, - { "id":"004", "username":"朱一", "sex":"男" }, - { "id":"005", "username":"刘佳能", "sex":"女" }, - { "id":"006", "username":"晓梅", "sex":"女" }, - { "id":"007", "username":"马冬梅", "sex":"女" }, - { "id":"008", "username":"刘晓庆", "sex":"女" }, - { "id":"009", "username":"刘晓庆", "sex":"女" }, - { "id":"010", "username":"刘晓庆", "sex":"女" }, - { "id":"011", "username":"刘晓庆", "sex":"女" }, - { "id":"012", "username":"刘晓庆", "sex":"女" }, - { "id":"013", "username":"刘晓庆", "sex":"女" }, - { "id":"014", "username":"刘晓庆", "sex":"女" }, - { "id":"015", "username":"刘晓庆", "sex":"女" }, - { "id":"016", "username":"刘晓庆", "sex":"女" } - ] + "code": 0, + "msg": "", + "count": 16, + "data": [ + { + "id": "001", + "username": "张玉林", + "sex": "女" + }, + { + "id": "002", + "username": "刘晓军", + "sex": "男" + }, + { + "id": "003", + "username": "张恒", + "sex": "男" + }, + { + "id": "004", + "username": "朱一", + "sex": "男" + }, + { + "id": "005", + "username": "刘佳能", + "sex": "女" + }, + { + "id": "006", + "username": "晓梅", + "sex": "女" + }, + { + "id": "007", + "username": "马冬梅", + "sex": "女" + }, + { + "id": "008", + "username": "刘晓庆", + "sex": "女" + }, + { + "id": "009", + "username": "刘晓庆", + "sex": "女" + }, + { + "id": "010", + "username": "刘晓庆", + "sex": "女" + }, + { + "id": "011", + "username": "刘晓庆", + "sex": "女" + }, + { + "id": "012", + "username": "刘晓庆", + "sex": "女" + }, + { + "id": "013", + "username": "刘晓庆", + "sex": "女" + }, + { + "id": "014", + "username": "刘晓庆", + "sex": "女" + }, + { + "id": "015", + "username": "刘晓庆", + "sex": "女" + }, + { + "id": "016", + "username": "刘晓庆", + "sex": "女" + } + ] } \ No newline at end of file diff --git a/src/main/resources/static/api/test.json b/src/main/resources/static/api/test.json index e1cd3d68..384d419c 100644 --- a/src/main/resources/static/api/test.json +++ b/src/main/resources/static/api/test.json @@ -1,4 +1,3 @@ - { "homeInfo": { "title": "首页", diff --git a/src/main/resources/static/css/layuimini.css b/src/main/resources/static/css/layuimini.css index 09428a5b..8017badc 100644 --- a/src/main/resources/static/css/layuimini.css +++ b/src/main/resources/static/css/layuimini.css @@ -645,12 +645,12 @@ color: #484545; } -.layuimini-tab-make{ +.layuimini-tab-make { position: absolute; top: 36px; bottom: 0px; width: 100%; - background: rgb(255, 255, 255,0); + background: rgb(255, 255, 255, 0); padding: 0px; overflow: hidden; } @@ -658,13 +658,15 @@ /** 菜单缩放 */ -.popup-tips .layui-layer-TipsG{ +.popup-tips .layui-layer-TipsG { display: none; } -.popup-tips.layui-layer-tips .layui-layer-content{ + +.popup-tips.layui-layer-tips .layui-layer-content { padding: 0; } -.popup-tips .layui-nav-tree{ + +.popup-tips .layui-nav-tree { width: 150px; border-radius: 10px; } @@ -675,13 +677,13 @@ } /**头部菜单字体间距*/ -.layui-layout-admin .layui-header .layuimini-header-menu.layuimini-pc-show,.layui-layout-admin .layui-header .layuimini-header-menu.layuimini-mobile-show { +.layui-layout-admin .layui-header .layuimini-header-menu.layuimini-pc-show, .layui-layout-admin .layui-header .layuimini-header-menu.layuimini-mobile-show { letter-spacing: 1px; } /**左侧菜单更多下拉样式*/ -.layuimini-menu-left .layui-nav-more,.layuimini-menu-left-zoom .layui-nav-more { +.layuimini-menu-left .layui-nav-more, .layuimini-menu-left-zoom .layui-nav-more { font-family: layui-icon !important; font-size: 12px; font-style: normal; @@ -700,18 +702,19 @@ margin-top: -6px !important; } -.layuimini-menu-left .layui-nav .layui-nav-mored,.layuimini-menu-left .layui-nav-itemed>a .layui-nav-more{ - margin-top: -9px!important; +.layuimini-menu-left .layui-nav .layui-nav-mored, .layuimini-menu-left .layui-nav-itemed > a .layui-nav-more { + margin-top: -9px !important; } -.layuimini-menu-left-zoom.layui-nav .layui-nav-mored,.layuimini-menu-left-zoom.layui-nav-itemed>a .layui-nav-more{ - margin-top: -9px!important; +.layuimini-menu-left-zoom.layui-nav .layui-nav-mored, .layuimini-menu-left-zoom.layui-nav-itemed > a .layui-nav-more { + margin-top: -9px !important; } -.layuimini-menu-left .layui-nav-more:before,.layuimini-menu-left-zoom .layui-nav-more:before { +.layuimini-menu-left .layui-nav-more:before, .layuimini-menu-left-zoom .layui-nav-more:before { content: "\e61a"; } -.layuimini-menu-left .layui-nav-itemed > a > .layui-nav-more,.layuimini-menu-left-zoom .layui-nav-itemed > a > .layui-nav-more { + +.layuimini-menu-left .layui-nav-itemed > a > .layui-nav-more, .layuimini-menu-left-zoom .layui-nav-itemed > a > .layui-nav-more { transform: rotate(180deg); -ms-transform: rotate(180deg); -moz-transform: rotate(180deg); @@ -719,10 +722,10 @@ -o-transform: rotate(180deg); width: 12px; text-align: center; - border-style:none; + border-style: none; } -.layuimini-menu-left .layui-nav-itemed > a > .layui-nav-more:before,.layuimini-menu-left-zoom .layui-nav-itemed > a > .layui-nav-more:before { +.layuimini-menu-left .layui-nav-itemed > a > .layui-nav-more:before, .layuimini-menu-left-zoom .layui-nav-itemed > a > .layui-nav-more:before { content: '\e61a'; background-color: transparent; display: inline-block; @@ -730,7 +733,7 @@ } /**修复左侧菜单字体不对齐的问题*/ -.layuimini-menu-left .layui-nav-item a .fa,.layuimini-menu-left .layui-nav-item a .layui-icon{ +.layuimini-menu-left .layui-nav-item a .fa, .layuimini-menu-left .layui-nav-item a .layui-icon { width: 20px; } @@ -786,16 +789,18 @@ left: 95px !important; } - .layuimini-pc-show{ + .layuimini-pc-show { display: block; } - .layuimini-mobile-show{ + + .layuimini-mobile-show { display: none; } /**菜单缩放*/ - .layuimini-mini .layuimini-menu-left .layui-nav-more,.layuimini-mini .layuimini-menu-left .layui-nav-child{ - display: none;!important; + .layuimini-mini .layuimini-menu-left .layui-nav-more, .layuimini-mini .layuimini-menu-left .layui-nav-child { + display: none; + !important; } } @@ -819,12 +824,14 @@ width: 100%; } - .layuimini-pc-show{ + .layuimini-pc-show { display: none; } - .layuimini-mobile-show{ + + .layuimini-mobile-show { display: block; } + .layuimini-header-content { left: 0; } @@ -867,7 +874,7 @@ } .layuimini-mini .layui-layout-admin .layui-body { - left: 0!important; + left: 0 !important; transition: left .2s; top: 0; z-index: 998; @@ -918,7 +925,7 @@ } } -@media screen and (max-width: 550px){ +@media screen and (max-width: 550px) { /**头部右侧数据*/ .layuimini-multi-module.layuimini-mini .layuimini-header-content .layui-layout-right { diff --git a/src/main/resources/static/css/public.css b/src/main/resources/static/css/public.css index 86788353..468b6a1f 100644 --- a/src/main/resources/static/css/public.css +++ b/src/main/resources/static/css/public.css @@ -73,7 +73,7 @@ body { box-shadow: 2px 0 4px rgba(0, 21, 41, .35); } -.my-card{ +.my-card { cursor: pointer; width: 100%; display: inline-block; @@ -81,11 +81,19 @@ body { border-top-right-radius: 4px; } -.my-time{ +.my-card-context{ + margin-left: 15px; + font-size: 18px; + margin-top: 5px; + font-weight:normal; +} + +.my-time { margin-top: 40px; margin-bottom: 20px; } -body{ + +body { font-family: 华文楷体; font-weight: bold; } \ No newline at end of file diff --git a/src/main/resources/static/images/logo_back.ico b/src/main/resources/static/images/logo_back.ico new file mode 100644 index 00000000..fb86f6f6 Binary files /dev/null and b/src/main/resources/static/images/logo_back.ico differ diff --git a/src/main/resources/static/js/ZXing.js b/src/main/resources/static/js/ZXing.js index 0e99c409..cf25f34d 100644 --- a/src/main/resources/static/js/ZXing.js +++ b/src/main/resources/static/js/ZXing.js @@ -1,4 +1,7 @@ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).ZXing={})}(this,(function(t){"use strict"; +!function (t, e) { + "object" == typeof exports && "undefined" != typeof module ? e(exports) : "function" == typeof define && define.amd ? define(["exports"], e) : e((t = "undefined" != typeof globalThis ? globalThis : t || self).ZXing = {}) +}(this, (function (t) { + "use strict"; /*! ***************************************************************************** Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use @@ -12,4 +15,10024 @@ See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. - ***************************************************************************** */var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])};var r,n=function(t){function r(e){var r,n,i,s=this.constructor,o=t.call(this,e)||this;return Object.defineProperty(o,"name",{value:s.name,enumerable:!1}),r=o,n=s.prototype,(i=Object.setPrototypeOf)?i(r,n):r.__proto__=n,function(t,e){void 0===e&&(e=t.constructor);var r=Error.captureStackTrace;r&&r(t,e)}(o),o}return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}(r,t),r}(Error);class i extends n{constructor(t){super(t),this.message=t}getKind(){return this.constructor.kind}}i.kind="Exception";class s extends i{}s.kind="ArgumentException";class o extends i{}o.kind="IllegalArgumentException";class a{constructor(t){if(this.binarizer=t,null===t)throw new o("Binarizer must be non-null.")}getWidth(){return this.binarizer.getWidth()}getHeight(){return this.binarizer.getHeight()}getBlackRow(t,e){return this.binarizer.getBlackRow(t,e)}getBlackMatrix(){return null!==this.matrix&&void 0!==this.matrix||(this.matrix=this.binarizer.getBlackMatrix()),this.matrix}isCropSupported(){return this.binarizer.getLuminanceSource().isCropSupported()}crop(t,e,r,n){const i=this.binarizer.getLuminanceSource().crop(t,e,r,n);return new a(this.binarizer.createBinarizer(i))}isRotateSupported(){return this.binarizer.getLuminanceSource().isRotateSupported()}rotateCounterClockwise(){const t=this.binarizer.getLuminanceSource().rotateCounterClockwise();return new a(this.binarizer.createBinarizer(t))}rotateCounterClockwise45(){const t=this.binarizer.getLuminanceSource().rotateCounterClockwise45();return new a(this.binarizer.createBinarizer(t))}toString(){try{return this.getBlackMatrix().toString()}catch(t){return""}}}class l extends i{static getChecksumInstance(){return new l}}l.kind="ChecksumException";class h{constructor(t){this.source=t}getLuminanceSource(){return this.source}getWidth(){return this.source.getWidth()}getHeight(){return this.source.getHeight()}}class c{static arraycopy(t,e,r,n,i){for(;i--;)r[n++]=t[e++]}static currentTimeMillis(){return Date.now()}}class u extends i{}u.kind="IndexOutOfBoundsException";class d extends u{constructor(t,e){super(e),this.index=t,this.message=e}}d.kind="ArrayIndexOutOfBoundsException";class g{static fill(t,e){for(let r=0,n=t.length;rr)throw new o("fromIndex("+e+") > toIndex("+r+")");if(e<0)throw new d(e);if(r>t)throw new d(r)}static asList(...t){return t}static create(t,e,r){return Array.from({length:t}).map((t=>Array.from({length:e}).fill(r)))}static createInt32Array(t,e,r){return Array.from({length:t}).map((t=>Int32Array.from({length:e}).fill(r)))}static equals(t,e){if(!t)return!1;if(!e)return!1;if(!t.length)return!1;if(!e.length)return!1;if(t.length!==e.length)return!1;for(let r=0,n=t.length;r>1,o=r(e,t[s]);if(o>0)n=s+1;else{if(!(o<0))return s;i=s-1}}return-n-1}static numberComparator(t,e){return t-e}}class f{static numberOfTrailingZeros(t){let e;if(0===t)return 32;let r=31;return e=t<<16,0!==e&&(r-=16,t=e),e=t<<8,0!==e&&(r-=8,t=e),e=t<<4,0!==e&&(r-=4,t=e),e=t<<2,0!==e&&(r-=2,t=e),r-(t<<1>>>31)}static numberOfLeadingZeros(t){if(0===t)return 32;let e=1;return t>>>16==0&&(e+=16,t<<=16),t>>>24==0&&(e+=8,t<<=8),t>>>28==0&&(e+=4,t<<=4),t>>>30==0&&(e+=2,t<<=2),e-=t>>>31,e}static toHexString(t){return t.toString(16)}static toBinaryString(t){return String(parseInt(String(t),2))}static bitCount(t){return t=(t=(858993459&(t-=t>>>1&1431655765))+(t>>>2&858993459))+(t>>>4)&252645135,t+=t>>>8,63&(t+=t>>>16)}static truncDivision(t,e){return Math.trunc(t/e)}static parseInt(t,e){return parseInt(t,e)}}f.MIN_VALUE_32_BITS=-2147483648,f.MAX_VALUE=Number.MAX_SAFE_INTEGER;class w{constructor(t,e){void 0===t?(this.size=0,this.bits=new Int32Array(1)):(this.size=t,this.bits=null==e?w.makeArray(t):e)}getSize(){return this.size}getSizeInBytes(){return Math.floor((this.size+7)/8)}ensureCapacity(t){if(t>32*this.bits.length){const e=w.makeArray(t);c.arraycopy(this.bits,0,e,0,this.bits.length),this.bits=e}}get(t){return 0!=(this.bits[Math.floor(t/32)]&1<<(31&t))}set(t){this.bits[Math.floor(t/32)]|=1<<(31&t)}flip(t){this.bits[Math.floor(t/32)]^=1<<(31&t)}getNextSet(t){const e=this.size;if(t>=e)return e;const r=this.bits;let n=Math.floor(t/32),i=r[n];i&=~((1<<(31&t))-1);const s=r.length;for(;0===i;){if(++n===s)return e;i=r[n]}const o=32*n+f.numberOfTrailingZeros(i);return o>e?e:o}getNextUnset(t){const e=this.size;if(t>=e)return e;const r=this.bits;let n=Math.floor(t/32),i=~r[n];i&=~((1<<(31&t))-1);const s=r.length;for(;0===i;){if(++n===s)return e;i=~r[n]}const o=32*n+f.numberOfTrailingZeros(i);return o>e?e:o}setBulk(t,e){this.bits[Math.floor(t/32)]=e}setRange(t,e){if(ethis.size)throw new o;if(e===t)return;e--;const r=Math.floor(t/32),n=Math.floor(e/32),i=this.bits;for(let s=r;s<=n;s++){const o=(2<<(sr?0:31&t));i[s]|=o}}clear(){const t=this.bits.length,e=this.bits;for(let r=0;rthis.size)throw new o;if(e===t)return!0;e--;const n=Math.floor(t/32),i=Math.floor(e/32),s=this.bits;for(let o=n;o<=i;o++){const a=(2<<(on?0:31&t))&4294967295;if((s[o]&a)!==(r?a:0))return!1}return!0}appendBit(t){this.ensureCapacity(this.size+1),t&&(this.bits[Math.floor(this.size/32)]|=1<<(31&this.size)),this.size++}appendBits(t,e){if(e<0||e>32)throw new o("Num bits must be between 0 and 32");this.ensureCapacity(this.size+e);for(let r=e;r>0;r--)this.appendBit(1==(t>>r-1&1))}appendBitArray(t){const e=t.size;this.ensureCapacity(this.size+e);for(let r=0;r>1&1431655765|(1431655765&r)<<1,r=r>>2&858993459|(858993459&r)<<2,r=r>>4&252645135|(252645135&r)<<4,r=r>>8&16711935|(16711935&r)<<8,r=r>>16&65535|(65535&r)<<16,t[e-i]=r}if(this.size!==32*r){const e=32*r-this.size;let n=t[0]>>>e;for(let i=1;i>>e}t[r-1]=n}this.bits=t}static makeArray(t){return new Int32Array(Math.floor((t+31)/32))}equals(t){if(!(t instanceof w))return!1;const e=t;return this.size===e.size&&g.equals(this.bits,e.bits)}hashCode(){return 31*this.size+g.hashCode(this.bits)}toString(){let t="";for(let e=0,r=this.size;e=900)throw new E("incorect value");const e=m.VALUES_TO_ECI.get(t);if(void 0===e)throw new E("incorect value");return e}static getCharacterSetECIByName(t){const e=m.NAME_TO_ECI.get(t);if(void 0===e)throw new E("incorect value");return e}equals(t){if(!(t instanceof m))return!1;const e=t;return this.getName()===e.getName()}}m.VALUE_IDENTIFIER_TO_ECI=new Map,m.VALUES_TO_ECI=new Map,m.NAME_TO_ECI=new Map,m.Cp437=new m(A.Cp437,Int32Array.from([0,2]),"Cp437"),m.ISO8859_1=new m(A.ISO8859_1,Int32Array.from([1,3]),"ISO-8859-1","ISO88591","ISO8859_1"),m.ISO8859_2=new m(A.ISO8859_2,4,"ISO-8859-2","ISO88592","ISO8859_2"),m.ISO8859_3=new m(A.ISO8859_3,5,"ISO-8859-3","ISO88593","ISO8859_3"),m.ISO8859_4=new m(A.ISO8859_4,6,"ISO-8859-4","ISO88594","ISO8859_4"),m.ISO8859_5=new m(A.ISO8859_5,7,"ISO-8859-5","ISO88595","ISO8859_5"),m.ISO8859_6=new m(A.ISO8859_6,8,"ISO-8859-6","ISO88596","ISO8859_6"),m.ISO8859_7=new m(A.ISO8859_7,9,"ISO-8859-7","ISO88597","ISO8859_7"),m.ISO8859_8=new m(A.ISO8859_8,10,"ISO-8859-8","ISO88598","ISO8859_8"),m.ISO8859_9=new m(A.ISO8859_9,11,"ISO-8859-9","ISO88599","ISO8859_9"),m.ISO8859_10=new m(A.ISO8859_10,12,"ISO-8859-10","ISO885910","ISO8859_10"),m.ISO8859_11=new m(A.ISO8859_11,13,"ISO-8859-11","ISO885911","ISO8859_11"),m.ISO8859_13=new m(A.ISO8859_13,15,"ISO-8859-13","ISO885913","ISO8859_13"),m.ISO8859_14=new m(A.ISO8859_14,16,"ISO-8859-14","ISO885914","ISO8859_14"),m.ISO8859_15=new m(A.ISO8859_15,17,"ISO-8859-15","ISO885915","ISO8859_15"),m.ISO8859_16=new m(A.ISO8859_16,18,"ISO-8859-16","ISO885916","ISO8859_16"),m.SJIS=new m(A.SJIS,20,"SJIS","Shift_JIS"),m.Cp1250=new m(A.Cp1250,21,"Cp1250","windows-1250"),m.Cp1251=new m(A.Cp1251,22,"Cp1251","windows-1251"),m.Cp1252=new m(A.Cp1252,23,"Cp1252","windows-1252"),m.Cp1256=new m(A.Cp1256,24,"Cp1256","windows-1256"),m.UnicodeBigUnmarked=new m(A.UnicodeBigUnmarked,25,"UnicodeBigUnmarked","UTF-16BE","UnicodeBig"),m.UTF8=new m(A.UTF8,26,"UTF8","UTF-8"),m.ASCII=new m(A.ASCII,Int32Array.from([27,170]),"ASCII","US-ASCII"),m.Big5=new m(A.Big5,28,"Big5"),m.GB18030=new m(A.GB18030,29,"GB18030","GB2312","EUC_CN","GBK"),m.EUC_KR=new m(A.EUC_KR,30,"EUC_KR","EUC-KR");class _ extends i{}_.kind="UnsupportedOperationException";class I{static decode(t,e){const r=this.encodingName(e);return this.customDecoder?this.customDecoder(t,r):"undefined"==typeof TextDecoder||this.shouldDecodeOnFallback(r)?this.decodeFallback(t,r):new TextDecoder(r).decode(t)}static shouldDecodeOnFallback(t){return!I.isBrowser()&&"ISO-8859-1"===t}static encode(t,e){const r=this.encodingName(e);return this.customEncoder?this.customEncoder(t,r):"undefined"==typeof TextEncoder?this.encodeFallback(t):(new TextEncoder).encode(t)}static isBrowser(){return"undefined"!=typeof window&&"[object Window]"==={}.toString.call(window)}static encodingName(t){return"string"==typeof t?t:t.getName()}static encodingCharacterSet(t){return t instanceof m?t:m.getCharacterSetECIByName(t)}static decodeFallback(t,e){const r=this.encodingCharacterSet(e);if(I.isDecodeFallbackSupported(r)){let e="";for(let r=0,n=t.length;r3&&239===t[0]&&187===t[1]&&191===t[2];for(let e=0;e0?0==(128&r)?s=!1:o--:0!=(128&r)&&(0==(64&r)?s=!1:(o++,0==(32&r)?a++:(o++,0==(16&r)?l++:(o++,0==(8&r)?h++:s=!1))))),n&&(r>127&&r<160?n=!1:r>159&&(r<192||215===r||247===r)&&A++),i&&(c>0?r<64||127===r||r>252?i=!1:c--:128===r||160===r||r>239?i=!1:r>160&&r<224?(u++,g=0,d++,d>f&&(f=d)):r>127?(c++,d=0,g++,g>w&&(w=g)):(d=0,g=0))}return s&&o>0&&(s=!1),i&&c>0&&(i=!1),s&&(E||a+l+h>0)?S.UTF8:i&&(S.ASSUME_SHIFT_JIS||f>=3||w>=3)?S.SHIFT_JIS:n&&i?2===f&&2===u||10*A>=r?S.SHIFT_JIS:S.ISO88591:n?S.ISO88591:i?S.SHIFT_JIS:s?S.UTF8:S.PLATFORM_DEFAULT_ENCODING}static format(t,...e){let r=-1;return t.replace(/%(-)?(0?[0-9]+)?([.][0-9]+)?([#][0-9]+)?([scfpexd%])/g,(function(t,n,i,s,o,a){if("%%"===t)return"%";if(void 0===e[++r])return;t=s?parseInt(s.substr(1)):void 0;let l,h=o?parseInt(o.substr(1)):void 0;switch(a){case"s":l=e[r];break;case"c":l=e[r][0];break;case"f":l=parseFloat(e[r]).toFixed(t);break;case"p":l=parseFloat(e[r]).toPrecision(t);break;case"e":l=parseFloat(e[r]).toExponential(t);break;case"x":l=parseInt(e[r]).toString(h||16);break;case"d":l=parseFloat(parseInt(e[r],h||10).toPrecision(t)).toFixed(0)}l="object"==typeof l?JSON.stringify(l):(+l).toString(h);let c=parseInt(i),u=i&&i[0]+""=="0"?"0":" ";for(;l.lengths){if(-1===a)a=i-s;else if(i-s!==a)throw new o("row lengths do not match");s=i,l++}h++}else if(t.substring(h,h+e.length)===e)h+=e.length,n[i]=!0,i++;else{if(t.substring(h,h+r.length)!==r)throw new o("illegal character encountered: "+t.substring(h));h+=r.length,n[i]=!1,i++}if(i>s){if(-1===a)a=i-s;else if(i-s!==a)throw new o("row lengths do not match");l++}const c=new T(a,l);for(let t=0;t>>(31&t)&1)}set(t,e){const r=e*this.rowSize+Math.floor(t/32);this.bits[r]|=1<<(31&t)&4294967295}unset(t,e){const r=e*this.rowSize+Math.floor(t/32);this.bits[r]&=~(1<<(31&t)&4294967295)}flip(t,e){const r=e*this.rowSize+Math.floor(t/32);this.bits[r]^=1<<(31&t)&4294967295}xor(t){if(this.width!==t.getWidth()||this.height!==t.getHeight()||this.rowSize!==t.getRowSize())throw new o("input matrix dimensions do not match");const e=new w(Math.floor(this.width/32)+1),r=this.rowSize,n=this.bits;for(let i=0,s=this.height;ithis.height||i>this.width)throw new o("The region must fit inside the matrix");const a=this.rowSize,l=this.bits;for(let r=e;ra&&(a=t),32*eo){let t=31;for(;l>>>t==0;)t--;32*e+t>o&&(o=32*e+t)}}}return o=0&&0===e[r];)r--;if(r<0)return null;const n=Math.floor(r/t);let i=32*Math.floor(r%t);const s=e[r];let o=31;for(;s>>>o==0;)o--;return i+=o,Int32Array.from([i,n])}getWidth(){return this.width}getHeight(){return this.height}getRowSize(){return this.rowSize}equals(t){if(!(t instanceof T))return!1;const e=t;return this.width===e.width&&this.height===e.height&&this.rowSize===e.rowSize&&g.equals(this.bits,e.bits)}hashCode(){let t=this.width;return t=31*t+this.width,t=31*t+this.height,t=31*t+this.rowSize,t=31*t+g.hashCode(this.bits),t}toString(t="X ",e=" ",r="\n"){return this.buildToString(t,e,r)}buildToString(t,e,r){let n=new p;for(let i=0,s=this.height;i>N.LUMINANCE_SHIFT]++;const o=N.estimateBlackPoint(s);if(n<3)for(let t=0;t>N.LUMINANCE_SHIFT]++}}const s=N.estimateBlackPoint(i),o=t.getMatrix();for(let t=0;ti&&(n=s,i=t[s]),t[s]>r&&(r=t[s]);let s=0,o=0;for(let r=0;ro&&(s=r,o=i)}if(n>s){const t=n;n=s,s=t}if(s-n<=e/16)throw new R;let a=s-1,l=-1;for(let e=s-1;e>n;e--){const i=e-n,o=i*i*(s-e)*(r-t[e]);o>l&&(a=e,l=o)}return a<=D.MINIMUM_DIMENSION&&r>=D.MINIMUM_DIMENSION){const n=t.getMatrix();let i=e>>D.BLOCK_SIZE_POWER;0!=(e&D.BLOCK_SIZE_MASK)&&i++;let s=r>>D.BLOCK_SIZE_POWER;0!=(r&D.BLOCK_SIZE_MASK)&&s++;const o=D.calculateBlackPoints(n,i,s,e,r),a=new T(e,r);D.calculateThresholdForBlock(n,i,s,e,r,o,a),this.matrix=a}else this.matrix=super.getBlackMatrix();return this.matrix}createBinarizer(t){return new D(t)}static calculateThresholdForBlock(t,e,r,n,i,s,o){const a=i-D.BLOCK_SIZE,l=n-D.BLOCK_SIZE;for(let i=0;ia&&(h=a);const c=D.cap(i,2,r-3);for(let r=0;rl&&(i=l);const a=D.cap(r,2,e-3);let u=0;for(let t=-2;t<=2;t++){const e=s[c+t];u+=e[a-2]+e[a-1]+e[a]+e[a+1]+e[a+2]}const d=u/25;D.thresholdBlock(t,i,h,d,n,o)}}}static cap(t,e,r){return tr?r:t}static thresholdBlock(t,e,r,n,i,s){for(let o=0,a=r*i+e;os&&(r=s);for(let s=0;so&&(e=o);let l=0,h=255,c=0;for(let i=0,s=r*n+e;ic&&(c=r)}if(c-h>D.MIN_DYNAMIC_RANGE)for(i++,s+=n;i>2*D.BLOCK_SIZE_POWER;if(c-h<=D.MIN_DYNAMIC_RANGE&&(u=h/2,i>0&&s>0)){const t=(a[i-1][s]+2*a[i][s-1]+a[i-1][s-1])/4;h>10}n[r]=i}return n}getRow(t,e){if(t<0||t>=this.getHeight())throw new o("Requested row is outside the image: "+t);const r=this.getWidth(),n=t*r;return null===e?e=this.buffer.slice(n,n+r):(e.lengthnew B(t.deviceId,t.label)))}))}findDeviceById(t){return P(this,void 0,void 0,(function*(){const e=yield this.listVideoInputDevices();return e?e.find((e=>e.deviceId===t)):null}))}decodeFromInputVideoDevice(t,e){return P(this,void 0,void 0,(function*(){return yield this.decodeOnceFromVideoDevice(t,e)}))}decodeOnceFromVideoDevice(t,e){return P(this,void 0,void 0,(function*(){let r;this.reset(),r=t?{deviceId:{exact:t}}:{facingMode:"environment"};const n={video:r};return yield this.decodeOnceFromConstraints(n,e)}))}decodeOnceFromConstraints(t,e){return P(this,void 0,void 0,(function*(){const r=yield navigator.mediaDevices.getUserMedia(t);return yield this.decodeOnceFromStream(r,e)}))}decodeOnceFromStream(t,e){return P(this,void 0,void 0,(function*(){this.reset();const r=yield this.attachStreamToVideo(t,e);return yield this.decodeOnce(r)}))}decodeFromInputVideoDeviceContinuously(t,e,r){return P(this,void 0,void 0,(function*(){return yield this.decodeFromVideoDevice(t,e,r)}))}decodeFromVideoDevice(t,e,r){return P(this,void 0,void 0,(function*(){let n;n=t?{deviceId:{exact:t}}:{facingMode:"environment"};const i={video:n};return yield this.decodeFromConstraints(i,e,r)}))}decodeFromConstraints(t,e,r){return P(this,void 0,void 0,(function*(){const n=yield navigator.mediaDevices.getUserMedia(t);return yield this.decodeFromStream(n,e,r)}))}decodeFromStream(t,e,r){return P(this,void 0,void 0,(function*(){this.reset();const n=yield this.attachStreamToVideo(t,e);return yield this.decodeContinuously(n,r)}))}stopAsyncDecode(){this._stopAsyncDecode=!0}stopContinuousDecode(){this._stopContinuousDecode=!0}attachStreamToVideo(t,e){return P(this,void 0,void 0,(function*(){const r=this.prepareVideoElement(e);return this.addVideoSource(r,t),this.videoElement=r,this.stream=t,yield this.playVideoOnLoadAsync(r),r}))}playVideoOnLoadAsync(t){return new Promise(((e,r)=>this.playVideoOnLoad(t,(()=>e()))))}playVideoOnLoad(t,e){this.videoEndedListener=()=>this.stopStreams(),this.videoCanPlayListener=()=>this.tryPlayVideo(t),t.addEventListener("ended",this.videoEndedListener),t.addEventListener("canplay",this.videoCanPlayListener),t.addEventListener("playing",e),this.tryPlayVideo(t)}isVideoPlaying(t){return t.currentTime>0&&!t.paused&&!t.ended&&t.readyState>2}tryPlayVideo(t){return P(this,void 0,void 0,(function*(){if(this.isVideoPlaying(t))console.warn("Trying to play video that is already playing.");else try{yield t.play()}catch(t){console.warn("It was not possible to play the video.")}}))}getMediaElement(t,e){const r=document.getElementById(t);if(!r)throw new s(`element with id '${t}' not found`);if(r.nodeName.toLowerCase()!==e.toLowerCase())throw new s(`element with id '${t}' must be an ${e} element`);return r}decodeFromImage(t,e){if(!t&&!e)throw new s("either imageElement with a src set or an url must be provided");return e&&!t?this.decodeFromImageUrl(e):this.decodeFromImageElement(t)}decodeFromVideo(t,e){if(!t&&!e)throw new s("Either an element with a src set or an URL must be provided");return e&&!t?this.decodeFromVideoUrl(e):this.decodeFromVideoElement(t)}decodeFromVideoContinuously(t,e,r){if(void 0===t&&void 0===e)throw new s("Either an element with a src set or an URL must be provided");return e&&!t?this.decodeFromVideoUrlContinuously(e,r):this.decodeFromVideoElementContinuously(t,r)}decodeFromImageElement(t){if(!t)throw new s("An image element must be provided.");this.reset();const e=this.prepareImageElement(t);let r;return this.imageElement=e,r=this.isImageLoaded(e)?this.decodeOnce(e,!1,!0):this._decodeOnLoadImage(e),r}decodeFromVideoElement(t){const e=this._decodeFromVideoElementSetup(t);return this._decodeOnLoadVideo(e)}decodeFromVideoElementContinuously(t,e){const r=this._decodeFromVideoElementSetup(t);return this._decodeOnLoadVideoContinuously(r,e)}_decodeFromVideoElementSetup(t){if(!t)throw new s("A video element must be provided.");this.reset();const e=this.prepareVideoElement(t);return this.videoElement=e,e}decodeFromImageUrl(t){if(!t)throw new s("An URL must be provided.");this.reset();const e=this.prepareImageElement();this.imageElement=e;const r=this._decodeOnLoadImage(e);return e.src=t,r}decodeFromVideoUrl(t){if(!t)throw new s("An URL must be provided.");this.reset();const e=this.prepareVideoElement(),r=this.decodeFromVideoElement(e);return e.src=t,r}decodeFromVideoUrlContinuously(t,e){if(!t)throw new s("An URL must be provided.");this.reset();const r=this.prepareVideoElement(),n=this.decodeFromVideoElementContinuously(r,e);return r.src=t,n}_decodeOnLoadImage(t){return new Promise(((e,r)=>{this.imageLoadedListener=()=>this.decodeOnce(t,!1,!0).then(e,r),t.addEventListener("load",this.imageLoadedListener)}))}_decodeOnLoadVideo(t){return P(this,void 0,void 0,(function*(){return yield this.playVideoOnLoadAsync(t),yield this.decodeOnce(t)}))}_decodeOnLoadVideoContinuously(t,e){return P(this,void 0,void 0,(function*(){yield this.playVideoOnLoadAsync(t),this.decodeContinuously(t,e)}))}isImageLoaded(t){return!!t.complete&&0!==t.naturalWidth}prepareImageElement(t){let e;return void 0===t&&(e=document.createElement("img"),e.width=200,e.height=200),"string"==typeof t&&(e=this.getMediaElement(t,"img")),t instanceof HTMLImageElement&&(e=t),e}prepareVideoElement(t){let e;return t||"undefined"==typeof document||(e=document.createElement("video"),e.width=200,e.height=200),"string"==typeof t&&(e=this.getMediaElement(t,"video")),t instanceof HTMLVideoElement&&(e=t),e.setAttribute("autoplay","true"),e.setAttribute("muted","true"),e.setAttribute("playsinline","true"),e}decodeOnce(t,e=!0,r=!0){this._stopAsyncDecode=!1;const n=(i,s)=>{if(this._stopAsyncDecode)return s(new R("Video stream has ended before any code could be detected.")),void(this._stopAsyncDecode=void 0);try{i(this.decode(t))}catch(t){const o=(t instanceof l||t instanceof E)&&r;if(e&&t instanceof R||o)return setTimeout(n,this._timeBetweenDecodingAttempts,i,s);s(t)}};return new Promise(((t,e)=>n(t,e)))}decodeContinuously(t,e){this._stopContinuousDecode=!1;const r=()=>{if(this._stopContinuousDecode)this._stopContinuousDecode=void 0;else try{const n=this.decode(t);e(n,null),setTimeout(r,this.timeBetweenScansMillis)}catch(t){e(null,t);const n=t instanceof R;(t instanceof l||t instanceof E||n)&&setTimeout(r,this._timeBetweenDecodingAttempts)}};r()}decode(t){const e=this.createBinaryBitmap(t);return this.decodeBitmap(e)}createBinaryBitmap(t){const e=this.getCaptureCanvasContext(t);this.drawImageOnCanvas(e,t);const r=this.getCaptureCanvas(t),n=new M(r),i=new D(n);return new a(i)}getCaptureCanvasContext(t){if(!this.captureCanvasContext){const e=this.getCaptureCanvas(t).getContext("2d");this.captureCanvasContext=e}return this.captureCanvasContext}getCaptureCanvas(t){if(!this.captureCanvas){const e=this.createCaptureCanvas(t);this.captureCanvas=e}return this.captureCanvas}drawImageOnCanvas(t,e){t.drawImage(e,0,0)}decodeBitmap(t){return this.reader.decode(t,this._hints)}createCaptureCanvas(t){if("undefined"==typeof document)return this._destroyCaptureCanvas(),null;const e=document.createElement("canvas");let r,n;return void 0!==t&&(t instanceof HTMLVideoElement?(r=t.videoWidth,n=t.videoHeight):t instanceof HTMLImageElement&&(r=t.naturalWidth||t.width,n=t.naturalHeight||t.height)),e.style.width=r+"px",e.style.height=n+"px",e.width=r,e.height=n,e}stopStreams(){this.stream&&(this.stream.getVideoTracks().forEach((t=>t.stop())),this.stream=void 0),!1===this._stopAsyncDecode&&this.stopAsyncDecode(),!1===this._stopContinuousDecode&&this.stopContinuousDecode()}reset(){this.stopStreams(),this._destroyVideoElement(),this._destroyImageElement(),this._destroyCaptureCanvas()}_destroyVideoElement(){this.videoElement&&(void 0!==this.videoEndedListener&&this.videoElement.removeEventListener("ended",this.videoEndedListener),void 0!==this.videoPlayingEventListener&&this.videoElement.removeEventListener("playing",this.videoPlayingEventListener),void 0!==this.videoCanPlayListener&&this.videoElement.removeEventListener("loadedmetadata",this.videoCanPlayListener),this.cleanVideoSource(this.videoElement),this.videoElement=void 0)}_destroyImageElement(){this.imageElement&&(void 0!==this.imageLoadedListener&&this.imageElement.removeEventListener("load",this.imageLoadedListener),this.imageElement.src=void 0,this.imageElement.removeAttribute("src"),this.imageElement=void 0)}_destroyCaptureCanvas(){this.captureCanvasContext=void 0,this.captureCanvas=void 0}addVideoSource(t,e){try{t.srcObject=e}catch(r){t.src=URL.createObjectURL(e)}}cleanVideoSource(t){try{t.srcObject=null}catch(e){t.src=""}this.videoElement.removeAttribute("src")}}class F{constructor(t,e,r=(null==e?0:8*e.length),n,i,s=c.currentTimeMillis()){this.text=t,this.rawBytes=e,this.numBits=r,this.resultPoints=n,this.format=i,this.timestamp=s,this.text=t,this.rawBytes=e,this.numBits=null==r?null==e?0:8*e.length:r,this.resultPoints=n,this.format=i,this.resultMetadata=null,this.timestamp=null==s?c.currentTimeMillis():s}getText(){return this.text}getRawBytes(){return this.rawBytes}getNumBits(){return this.numBits}getResultPoints(){return this.resultPoints}getBarcodeFormat(){return this.format}getResultMetadata(){return this.resultMetadata}putMetadata(t,e){null===this.resultMetadata&&(this.resultMetadata=new Map),this.resultMetadata.set(t,e)}putAllMetadata(t){null!==t&&(null===this.resultMetadata?this.resultMetadata=t:this.resultMetadata=new Map(t))}addResultPoints(t){const e=this.resultPoints;if(null===e)this.resultPoints=t;else if(null!==t&&t.length>0){const r=new Array(e.length+t.length);c.arraycopy(e,0,r,0,e.length),c.arraycopy(t,0,r,e.length,t.length),this.resultPoints=r}}getTimestamp(){return this.timestamp}toString(){return this.text}}!function(t){t[t.AZTEC=0]="AZTEC",t[t.CODABAR=1]="CODABAR",t[t.CODE_39=2]="CODE_39",t[t.CODE_93=3]="CODE_93",t[t.CODE_128=4]="CODE_128",t[t.DATA_MATRIX=5]="DATA_MATRIX",t[t.EAN_8=6]="EAN_8",t[t.EAN_13=7]="EAN_13",t[t.ITF=8]="ITF",t[t.MAXICODE=9]="MAXICODE",t[t.PDF_417=10]="PDF_417",t[t.QR_CODE=11]="QR_CODE",t[t.RSS_14=12]="RSS_14",t[t.RSS_EXPANDED=13]="RSS_EXPANDED",t[t.UPC_A=14]="UPC_A",t[t.UPC_E=15]="UPC_E",t[t.UPC_EAN_EXTENSION=16]="UPC_EAN_EXTENSION"}(b||(b={}));var k,v=b;!function(t){t[t.OTHER=0]="OTHER",t[t.ORIENTATION=1]="ORIENTATION",t[t.BYTE_SEGMENTS=2]="BYTE_SEGMENTS",t[t.ERROR_CORRECTION_LEVEL=3]="ERROR_CORRECTION_LEVEL",t[t.ISSUE_NUMBER=4]="ISSUE_NUMBER",t[t.SUGGESTED_PRICE=5]="SUGGESTED_PRICE",t[t.POSSIBLE_COUNTRY=6]="POSSIBLE_COUNTRY",t[t.UPC_EAN_EXTENSION=7]="UPC_EAN_EXTENSION",t[t.PDF417_EXTRA_METADATA=8]="PDF417_EXTRA_METADATA",t[t.STRUCTURED_APPEND_SEQUENCE=9]="STRUCTURED_APPEND_SEQUENCE",t[t.STRUCTURED_APPEND_PARITY=10]="STRUCTURED_APPEND_PARITY"}(k||(k={}));var x,V,U,H,G,X,W=k;class z{constructor(t,e,r,n,i=-1,s=-1){this.rawBytes=t,this.text=e,this.byteSegments=r,this.ecLevel=n,this.structuredAppendSequenceNumber=i,this.structuredAppendParity=s,this.numBits=null==t?0:8*t.length}getRawBytes(){return this.rawBytes}getNumBits(){return this.numBits}setNumBits(t){this.numBits=t}getText(){return this.text}getByteSegments(){return this.byteSegments}getECLevel(){return this.ecLevel}getErrorsCorrected(){return this.errorsCorrected}setErrorsCorrected(t){this.errorsCorrected=t}getErasures(){return this.erasures}setErasures(t){this.erasures=t}getOther(){return this.other}setOther(t){this.other=t}hasStructuredAppend(){return this.structuredAppendParity>=0&&this.structuredAppendSequenceNumber>=0}getStructuredAppendParity(){return this.structuredAppendParity}getStructuredAppendSequenceNumber(){return this.structuredAppendSequenceNumber}}class Y{exp(t){return this.expTable[t]}log(t){if(0===t)throw new o;return this.logTable[t]}static addOrSubtract(t,e){return t^e}}class Z{constructor(t,e){if(0===e.length)throw new o;this.field=t;const r=e.length;if(r>1&&0===e[0]){let t=1;for(;tr.length){const t=e;e=r,r=t}let n=new Int32Array(r.length);const i=r.length-e.length;c.arraycopy(r,0,n,0,i);for(let t=i;t=t.getDegree()&&!n.isZero();){const i=n.getDegree()-t.getDegree(),o=e.multiply(n.getCoefficient(n.getDegree()),s),a=t.multiplyByMonomial(i,o),l=e.buildMonomial(i,o);r=r.addOrSubtract(l),n=n.addOrSubtract(a)}return[r,n]}toString(){let t="";for(let e=this.getDegree();e>=0;e--){let r=this.getCoefficient(e);if(0!==r){if(r<0?(t+=" - ",r=-r):t.length>0&&(t+=" + "),0===e||1!==r){const e=this.field.log(r);0===e?t+="1":1===e?t+="a":(t+="a^",t+=e)}0!==e&&(1===e?t+="x":(t+="x^",t+=e))}}return t}}class K extends i{}K.kind="ArithmeticException";class q extends Y{constructor(t,e,r){super(),this.primitive=t,this.size=e,this.generatorBase=r;const n=new Int32Array(e);let i=1;for(let r=0;r=e&&(i^=t,i&=e-1);this.expTable=n;const s=new Int32Array(e);for(let t=0;t=(r/2|0);){let t=i,e=o;if(i=s,o=a,i.isZero())throw new Q("r_{i-1} was zero");s=t;let r=n.getZero();const l=i.getCoefficient(i.getDegree()),h=n.inverse(l);for(;s.getDegree()>=i.getDegree()&&!s.isZero();){const t=s.getDegree()-i.getDegree(),e=n.multiply(s.getCoefficient(s.getDegree()),h);r=r.addOrSubtract(n.buildMonomial(t,e)),s=s.addOrSubtract(i.multiplyByMonomial(t,e))}if(a=r.multiply(o).addOrSubtract(e),s.getDegree()>=i.getDegree())throw new j("Division algorithm failed to reduce polynomial?")}const l=a.getCoefficient(0);if(0===l)throw new Q("sigmaTilde(0) was zero");const h=n.inverse(l);return[a.multiplyScalar(h),s.multiplyScalar(h)]}findErrorLocations(t){const e=t.getDegree();if(1===e)return Int32Array.from([t.getCoefficient(1)]);const r=new Int32Array(e);let n=0;const i=this.field;for(let s=1;s1,c,c+r-1),c+=r-1;else for(let t=r-1;t>=0;--t)h[c++]=0!=(e&1<=8?$.readCode(t,e,8):$.readCode(t,e,r)<<8-r}static convertBoolArrayToByteArray(t){let e=new Uint8Array((t.length+7)/8);for(let r=0;r","?","[","]","{","}","CTRL_UL"],$.DIGIT_TABLE=["CTRL_PS"," ","0","1","2","3","4","5","6","7","8","9",",",".","CTRL_UL","CTRL_US"];class tt{constructor(){}static round(t){return NaN===t?0:t<=Number.MIN_SAFE_INTEGER?Number.MIN_SAFE_INTEGER:t>=Number.MAX_SAFE_INTEGER?Number.MAX_SAFE_INTEGER:t+(t<0?-.5:.5)|0}static distance(t,e,r,n){const i=t-r,s=e-n;return Math.sqrt(i*i+s*s)}static sum(t){let e=0;for(let r=0,n=t.length;r!==n;r++){e+=t[r]}return e}}class et{static floatToIntBits(t){return t}}et.MAX_VALUE=Number.MAX_SAFE_INTEGER;class rt{constructor(t,e){this.x=t,this.y=e}getX(){return this.x}getY(){return this.y}equals(t){if(t instanceof rt){const e=t;return this.x===e.x&&this.y===e.y}return!1}hashCode(){return 31*et.floatToIntBits(this.x)+et.floatToIntBits(this.y)}toString(){return"("+this.x+","+this.y+")"}static orderBestPatterns(t){const e=this.distance(t[0],t[1]),r=this.distance(t[1],t[2]),n=this.distance(t[0],t[2]);let i,s,o;if(r>=e&&r>=n?(s=t[0],i=t[1],o=t[2]):n>=r&&n>=e?(s=t[1],i=t[0],o=t[2]):(s=t[2],i=t[0],o=t[1]),this.crossProductZ(i,s,o)<0){const t=i;i=o,o=t}t[0]=i,t[1]=s,t[2]=o}static distance(t,e){return tt.distance(t.x,t.y,e.x,e.y)}static crossProductZ(t,e,r){const n=e.x,i=e.y;return(r.x-n)*(t.y-i)-(r.y-i)*(t.x-n)}}class nt{constructor(t,e){this.bits=t,this.points=e}getBits(){return this.bits}getPoints(){return this.points}}class it extends nt{constructor(t,e,r,n,i){super(t,e),this.compact=r,this.nbDatablocks=n,this.nbLayers=i}getNbLayers(){return this.nbLayers}getNbDatablocks(){return this.nbDatablocks}isCompact(){return this.compact}}class st{constructor(t,e,r,n){this.image=t,this.height=t.getHeight(),this.width=t.getWidth(),null==e&&(e=st.INIT_SIZE),null==r&&(r=t.getWidth()/2|0),null==n&&(n=t.getHeight()/2|0);const i=e/2|0;if(this.leftInit=r-i,this.rightInit=r+i,this.upInit=n-i,this.downInit=n+i,this.upInit<0||this.leftInit<0||this.downInit>=this.height||this.rightInit>=this.width)throw new R}detect(){let t=this.leftInit,e=this.rightInit,r=this.upInit,n=this.downInit,i=!1,s=!0,o=!1,a=!1,l=!1,h=!1,c=!1;const u=this.width,d=this.height;for(;s;){s=!1;let g=!0;for(;(g||!a)&&e=u){i=!0;break}let f=!0;for(;(f||!l)&&n=d){i=!0;break}let w=!0;for(;(w||!h)&&t>=0;)w=this.containsBlackPoint(r,n,t,!1),w?(t--,s=!0,h=!0):h||t--;if(t<0){i=!0;break}let A=!0;for(;(A||!c)&&r>=0;)A=this.containsBlackPoint(t,e,r,!0),A?(r--,s=!0,c=!0):c||r--;if(r<0){i=!0;break}s&&(o=!0)}if(!i&&o){const i=e-t;let s=null;for(let e=1;null===s&&er||o<-1||o>n)throw new R;i=!1,-1===s?(e[t]=0,i=!0):s===r&&(e[t]=r-1,i=!0),-1===o?(e[t+1]=0,i=!0):o===n&&(e[t+1]=n-1,i=!0)}i=!0;for(let t=e.length-2;t>=0&&i;t-=2){const s=Math.floor(e[t]),o=Math.floor(e[t+1]);if(s<-1||s>r||o<-1||o>n)throw new R;i=!1,-1===s?(e[t]=0,i=!0):s===r&&(e[t]=r-1,i=!0),-1===o?(e[t+1]=0,i=!0):o===n&&(e[t+1]=n-1,i=!0)}}}class at{constructor(t,e,r,n,i,s,o,a,l){this.a11=t,this.a21=e,this.a31=r,this.a12=n,this.a22=i,this.a32=s,this.a13=o,this.a23=a,this.a33=l}static quadrilateralToQuadrilateral(t,e,r,n,i,s,o,a,l,h,c,u,d,g,f,w){const A=at.quadrilateralToSquare(t,e,r,n,i,s,o,a);return at.squareToQuadrilateral(l,h,c,u,d,g,f,w).times(A)}transformPoints(t){const e=t.length,r=this.a11,n=this.a12,i=this.a13,s=this.a21,o=this.a22,a=this.a23,l=this.a31,h=this.a32,c=this.a33;for(let u=0;u>1&127):(n<<=10,n+=(e>>2&992)+(e>>1&31))}let i=this.getCorrectedParameterData(n,this.compact);this.compact?(this.nbLayers=1+(i>>6),this.nbDataBlocks=1+(63&i)):(this.nbLayers=1+(i>>11),this.nbDataBlocks=1+(2047&i))}getRotation(t,e){let r=0;t.forEach(((t,n,i)=>{r=(r<<3)+((t>>e-2<<1)+(1&t))})),r=((1&r)<<11)+(r>>1);for(let t=0;t<4;t++)if(f.bitCount(r^this.EXPECTED_CORNER_BITS[t])<=2)return t;throw new R}getCorrectedParameterData(t,e){let r,n;e?(r=7,n=2):(r=10,n=4);let i=r-n,s=new Int32Array(r);for(let e=r-1;e>=0;--e)s[e]=15&t,t>>=4;try{new J(q.AZTEC_PARAM).decode(s,i)}catch(t){throw new R}let o=0;for(let t=0;t2){let r=this.distancePoint(l,t)*this.nbCenterLayers/(this.distancePoint(i,e)*(this.nbCenterLayers+2));if(r<.75||r>1.25||!this.isWhiteOrBlackRectangle(t,o,a,l))break}e=t,r=o,n=a,i=l,s=!s}if(5!==this.nbCenterLayers&&7!==this.nbCenterLayers)throw new R;this.compact=5===this.nbCenterLayers;let o=new rt(e.getX()+.5,e.getY()-.5),a=new rt(r.getX()+.5,r.getY()+.5),l=new rt(n.getX()-.5,n.getY()+.5),h=new rt(i.getX()-.5,i.getY()-.5);return this.expandSquare([o,a,l,h],2*this.nbCenterLayers-3,2*this.nbCenterLayers)}getMatrixCenter(){let t,e,r,n;try{let i=new st(this.image).detect();t=i[0],e=i[1],r=i[2],n=i[3]}catch(i){let s=this.image.getWidth()/2,o=this.image.getHeight()/2;t=this.getFirstDifferent(new ct(s+7,o-7),!1,1,-1).toResultPoint(),e=this.getFirstDifferent(new ct(s+7,o+7),!1,1,1).toResultPoint(),r=this.getFirstDifferent(new ct(s-7,o+7),!1,-1,1).toResultPoint(),n=this.getFirstDifferent(new ct(s-7,o-7),!1,-1,-1).toResultPoint()}let i=tt.round((t.getX()+n.getX()+e.getX()+r.getX())/4),s=tt.round((t.getY()+n.getY()+e.getY()+r.getY())/4);try{let o=new st(this.image,15,i,s).detect();t=o[0],e=o[1],r=o[2],n=o[3]}catch(o){t=this.getFirstDifferent(new ct(i+7,s-7),!1,1,-1).toResultPoint(),e=this.getFirstDifferent(new ct(i+7,s+7),!1,1,1).toResultPoint(),r=this.getFirstDifferent(new ct(i-7,s+7),!1,-1,1).toResultPoint(),n=this.getFirstDifferent(new ct(i-7,s-7),!1,-1,-1).toResultPoint()}return i=tt.round((t.getX()+n.getX()+e.getX()+r.getX())/4),s=tt.round((t.getY()+n.getY()+e.getY()+r.getY())/4),new ct(i,s)}getMatrixCornerPoints(t){return this.expandSquare(t,2*this.nbCenterLayers,this.getDimension())}sampleGrid(t,e,r,n,i){let s=ht.getInstance(),o=this.getDimension(),a=o/2-this.nbCenterLayers,l=o/2+this.nbCenterLayers;return s.sampleGrid(t,o,o,a,a,l,a,l,l,a,l,e.getX(),e.getY(),r.getX(),r.getY(),n.getX(),n.getY(),i.getX(),i.getY())}sampleLine(t,e,r){let n=0,i=this.distanceResultPoint(t,e),s=i/r,o=t.getX(),a=t.getY(),l=s*(e.getX()-t.getX())/i,h=s*(e.getY()-t.getY())/i;for(let t=0;t.1&&c<.9?0:c<=.1===l?1:-1}getFirstDifferent(t,e,r,n){let i=t.getX()+r,s=t.getY()+n;for(;this.isValid(i,s)&&this.image.get(i,s)===e;)i+=r,s+=n;for(i-=r,s-=n;this.isValid(i,s)&&this.image.get(i,s)===e;)i+=r;for(i-=r;this.isValid(i,s)&&this.image.get(i,s)===e;)s+=n;return s-=n,new ct(i,s)}expandSquare(t,e,r){let n=r/(2*e),i=t[0].getX()-t[2].getX(),s=t[0].getY()-t[2].getY(),o=(t[0].getX()+t[2].getX())/2,a=(t[0].getY()+t[2].getY())/2,l=new rt(o+n*i,a+n*s),h=new rt(o-n*i,a-n*s);return i=t[1].getX()-t[3].getX(),s=t[1].getY()-t[3].getY(),o=(t[1].getX()+t[3].getX())/2,a=(t[1].getY()+t[3].getY())/2,[l,new rt(o+n*i,a+n*s),h,new rt(o-n*i,a-n*s)]}isValid(t,e){return t>=0&&t0&&e{r.foundPossibleResultPoint(t)}))}}reset(){}}class gt{decode(t,e){try{return this.doDecode(t,e)}catch(r){if(e&&!0===e.get(C.TRY_HARDER)&&t.isRotateSupported()){const r=t.rotateCounterClockwise(),n=this.doDecode(r,e),i=n.getResultMetadata();let s=270;null!==i&&!0===i.get(W.ORIENTATION)&&(s+=i.get(W.ORIENTATION)%360),n.putMetadata(W.ORIENTATION,s);const o=n.getResultPoints();if(null!==o){const t=r.getHeight();for(let e=0;e>(s?8:5));let a;a=s?n:15;const l=Math.trunc(n/2);for(let s=0;s=n)break;try{i=t.getBlackRow(h,i)}catch(t){continue}for(let t=0;t<2;t++){if(1===t&&(i.reverse(),e&&!0===e.get(C.NEED_RESULT_POINT_CALLBACK))){const t=new Map;e.forEach(((e,r)=>t.set(r,e))),t.delete(C.NEED_RESULT_POINT_CALLBACK),e=t}try{const n=this.decodeRow(h,i,e);if(1===t){n.putMetadata(W.ORIENTATION,180);const t=n.getResultPoints();null!==t&&(t[0]=new rt(r-t[0].getX()-1,t[0].getY()),t[1]=new rt(r-t[1].getX()-1,t[1].getY()))}return n}catch(t){}}}throw new R}static recordPattern(t,e,r){const n=r.length;for(let t=0;t=i)throw new R;let s=!t.get(e),o=0,a=e;for(;a0&&n>=0;)t.get(--e)!==i&&(n--,i=!i);if(n>=0)throw new R;gt.recordPattern(t,e+1,r)}static patternMatchVariance(t,e,r){const n=t.length;let i=0,s=0;for(let r=0;rs?n-s:s-n;if(l>r)return Number.POSITIVE_INFINITY;a+=l}return a/i}}class ft extends gt{static findStartPattern(t){const e=t.getSize(),r=t.getNextSet(0);let n=0,i=Int32Array.from([0,0,0,0,0,0]),s=r,o=!1;for(let a=r;a=0&&t.isRange(Math.max(0,s-(a-s)/2),s,!1))return Int32Array.from([s,a,r]);s+=i[0]+i[1],i=i.slice(2,i.length-1),i[n-1]=0,i[n]=0,n--}else n++;i[n]=1,o=!o}throw new R}static decodeCode(t,e,r){gt.recordPattern(t,r,e);let n=ft.MAX_AVG_VARIANCE,i=-1;for(let t=0;t=0)return i;throw new R}decodeRow(t,e,r){const n=r&&!0===r.get(C.ASSUME_GS1),i=ft.findStartPattern(e),s=i[2];let o=0;const a=new Uint8Array(20);let h;switch(a[o++]=s,s){case ft.CODE_START_A:h=ft.CODE_CODE_A;break;case ft.CODE_START_B:h=ft.CODE_CODE_B;break;case ft.CODE_START_C:h=ft.CODE_CODE_C;break;default:throw new E}let c=!1,u=!1,d="",g=i[0],f=i[1];const w=Int32Array.from([0,0,0,0,0,0]);let A=0,m=0,_=s,I=0,S=!0,p=!1,T=!1;for(;!c;){const t=u;switch(u=!1,A=m,m=ft.decodeCode(e,w,f),a[o++]=m,m!==ft.CODE_STOP&&(S=!0),m!==ft.CODE_STOP&&(I++,_+=I*m),g=f,f+=w.reduce(((t,e)=>t+e),0),m){case ft.CODE_START_A:case ft.CODE_START_B:case ft.CODE_START_C:throw new E}switch(h){case ft.CODE_CODE_A:if(m<64)d+=T===p?String.fromCharCode(" ".charCodeAt(0)+m):String.fromCharCode(" ".charCodeAt(0)+m+128),T=!1;else if(m<96)d+=T===p?String.fromCharCode(m-64):String.fromCharCode(m+64),T=!1;else switch(m!==ft.CODE_STOP&&(S=!1),m){case ft.CODE_FNC_1:n&&(0===d.length?d+="]C1":d+=String.fromCharCode(29));break;case ft.CODE_FNC_2:case ft.CODE_FNC_3:break;case ft.CODE_FNC_4_A:!p&&T?(p=!0,T=!1):p&&T?(p=!1,T=!1):T=!0;break;case ft.CODE_SHIFT:u=!0,h=ft.CODE_CODE_B;break;case ft.CODE_CODE_B:h=ft.CODE_CODE_B;break;case ft.CODE_CODE_C:h=ft.CODE_CODE_C;break;case ft.CODE_STOP:c=!0}break;case ft.CODE_CODE_B:if(m<96)d+=T===p?String.fromCharCode(" ".charCodeAt(0)+m):String.fromCharCode(" ".charCodeAt(0)+m+128),T=!1;else switch(m!==ft.CODE_STOP&&(S=!1),m){case ft.CODE_FNC_1:n&&(0===d.length?d+="]C1":d+=String.fromCharCode(29));break;case ft.CODE_FNC_2:case ft.CODE_FNC_3:break;case ft.CODE_FNC_4_B:!p&&T?(p=!0,T=!1):p&&T?(p=!1,T=!1):T=!0;break;case ft.CODE_SHIFT:u=!0,h=ft.CODE_CODE_A;break;case ft.CODE_CODE_A:h=ft.CODE_CODE_A;break;case ft.CODE_CODE_C:h=ft.CODE_CODE_C;break;case ft.CODE_STOP:c=!0}break;case ft.CODE_CODE_C:if(m<100)m<10&&(d+="0"),d+=m;else switch(m!==ft.CODE_STOP&&(S=!1),m){case ft.CODE_FNC_1:n&&(0===d.length?d+="]C1":d+=String.fromCharCode(29));break;case ft.CODE_CODE_A:h=ft.CODE_CODE_A;break;case ft.CODE_CODE_B:h=ft.CODE_CODE_B;break;case ft.CODE_STOP:c=!0}}t&&(h=h===ft.CODE_CODE_A?ft.CODE_CODE_B:ft.CODE_CODE_A)}const N=f-g;if(f=e.getNextUnset(f),!e.isRange(f,Math.min(e.getSize(),f+(f-g)/2),!1))throw new R;if(_-=I*A,_%103!==A)throw new l;const D=d.length;if(0===D)throw new R;D>0&&S&&(d=h===ft.CODE_CODE_C?d.substring(0,D-2):d.substring(0,D-1));const y=(i[1]+i[0])/2,O=g+N/2,M=a.length,B=new Uint8Array(M);for(let t=0;tn&&(i=e);n=i,e=0;let s=0,o=0;for(let i=0;in&&(o|=1<0;i++){let r=t[i];if(r>n&&(e--,2*r>=s))return-1}return o}}while(e>3);return-1}static patternToChar(t){for(let e=0;e="A"&&i<="Z"))throw new E;s=String.fromCharCode(i.charCodeAt(0)+32);break;case"$":if(!(i>="A"&&i<="Z"))throw new E;s=String.fromCharCode(i.charCodeAt(0)-64);break;case"%":if(i>="A"&&i<="E")s=String.fromCharCode(i.charCodeAt(0)-38);else if(i>="F"&&i<="J")s=String.fromCharCode(i.charCodeAt(0)-11);else if(i>="K"&&i<="O")s=String.fromCharCode(i.charCodeAt(0)+16);else if(i>="P"&&i<="T")s=String.fromCharCode(i.charCodeAt(0)+43);else if("U"===i)s="\0";else if("V"===i)s="@";else if("W"===i)s="`";else{if("X"!==i&&"Y"!==i&&"Z"!==i)throw new E;s=""}break;case"/":if(i>="A"&&i<="O")s=String.fromCharCode(i.charCodeAt(0)-32);else{if("Z"!==i)throw new E;s=":"}}r+=s,n++}else r+=e}return r}}wt.ALPHABET_STRING="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%",wt.CHARACTER_ENCODINGS=[52,289,97,352,49,304,112,37,292,100,265,73,328,25,280,88,13,268,76,28,259,67,322,19,274,82,7,262,70,22,385,193,448,145,400,208,133,388,196,168,162,138,42],wt.ASTERISK_ENCODING=148;class At extends gt{constructor(){super(...arguments),this.narrowLineWidth=-1}decodeRow(t,e,r){let n=this.decodeStart(e),i=this.decodeEnd(e),s=new p;At.decodeMiddle(e,n[1],i[0],s);let o=s.toString(),a=null;null!=r&&(a=r.get(C.ALLOWED_LENGTHS)),null==a&&(a=At.DEFAULT_ALLOWED_LENGTHS);let l=o.length,h=!1,c=0;for(let t of a){if(l===t){h=!0;break}t>c&&(c=t)}if(!h&&l>c&&(h=!0),!h)throw new E;const u=[new rt(n[1],t),new rt(i[0],t)];return new F(o,null,0,u,v.ITF,(new Date).getTime())}static decodeMiddle(t,e,r,n){let i=new Int32Array(10),s=new Int32Array(5),o=new Int32Array(5);for(i.fill(0),s.fill(0),o.fill(0);e0&&n>=0&&!t.get(n);n--)r--;if(0!==r)throw new R}static skipWhiteSpace(t){const e=t.getSize(),r=t.getNextSet(0);if(r===e)throw new R;return r}decodeEnd(t){t.reverse();try{let e,r=At.skipWhiteSpace(t);try{e=At.findGuardPattern(t,r,At.END_PATTERN_REVERSED[0])}catch(n){n instanceof R&&(e=At.findGuardPattern(t,r,At.END_PATTERN_REVERSED[1]))}this.validateQuietZone(t,e[0]);let n=e[0];return e[0]=t.getSize()-e[1],e[1]=t.getSize()-n,e}finally{t.reverse()}}static findGuardPattern(t,e,r){let n=r.length,i=new Int32Array(n),s=t.getSize(),o=!1,a=0,l=e;i.fill(0);for(let h=e;h=0)return r%10;throw new R}}At.PATTERNS=[Int32Array.from([1,1,2,2,1]),Int32Array.from([2,1,1,1,2]),Int32Array.from([1,2,1,1,2]),Int32Array.from([2,2,1,1,1]),Int32Array.from([1,1,2,1,2]),Int32Array.from([2,1,2,1,1]),Int32Array.from([1,2,2,1,1]),Int32Array.from([1,1,1,2,2]),Int32Array.from([2,1,1,2,1]),Int32Array.from([1,2,1,2,1]),Int32Array.from([1,1,3,3,1]),Int32Array.from([3,1,1,1,3]),Int32Array.from([1,3,1,1,3]),Int32Array.from([3,3,1,1,1]),Int32Array.from([1,1,3,1,3]),Int32Array.from([3,1,3,1,1]),Int32Array.from([1,3,3,1,1]),Int32Array.from([1,1,1,3,3]),Int32Array.from([3,1,1,3,1]),Int32Array.from([1,3,1,3,1])],At.MAX_AVG_VARIANCE=.38,At.MAX_INDIVIDUAL_VARIANCE=.5,At.DEFAULT_ALLOWED_LENGTHS=[6,8,10,12,14],At.START_PATTERN=Int32Array.from([1,1,1,1]),At.END_PATTERN_REVERSED=[Int32Array.from([1,1,2]),Int32Array.from([1,1,3])];class Ct extends gt{constructor(){super(...arguments),this.decodeRowStringBuffer=""}static findStartGuardPattern(t){let e,r=!1,n=0,i=Int32Array.from([0,0,0]);for(;!r;){i=Int32Array.from([0,0,0]),e=Ct.findGuardPattern(t,n,!1,this.START_END_PATTERN,i);let s=e[0];n=e[1];let o=s-(n-s);o>=0&&(r=t.isRange(o,s,!1))}return e}static checkChecksum(t){return Ct.checkStandardUPCEANChecksum(t)}static checkStandardUPCEANChecksum(t){let e=t.length;if(0===e)return!1;let r=parseInt(t.charAt(e-1),10);return Ct.getStandardUPCEANChecksum(t.substring(0,e-1))===r}static getStandardUPCEANChecksum(t){let e=t.length,r=0;for(let n=e-1;n>=0;n-=2){let e=t.charAt(n).charCodeAt(0)-"0".charCodeAt(0);if(e<0||e>9)throw new E;r+=e}r*=3;for(let n=e-2;n>=0;n-=2){let e=t.charAt(n).charCodeAt(0)-"0".charCodeAt(0);if(e<0||e>9)throw new E;r+=e}return(1e3-r)%10}static decodeEnd(t,e){return Ct.findGuardPattern(t,e,!1,Ct.START_END_PATTERN,new Int32Array(Ct.START_END_PATTERN.length).fill(0))}static findGuardPatternWithoutCounters(t,e,r,n){return this.findGuardPattern(t,e,r,n,new Int32Array(n.length))}static findGuardPattern(t,e,r,n,i){let s=t.getSize(),o=0,a=e=r?t.getNextUnset(e):t.getNextSet(e),l=n.length,h=r;for(let r=e;r=0)return s;throw new R}}Ct.MAX_AVG_VARIANCE=.48,Ct.MAX_INDIVIDUAL_VARIANCE=.7,Ct.START_END_PATTERN=Int32Array.from([1,1,1]),Ct.MIDDLE_PATTERN=Int32Array.from([1,1,1,1,1]),Ct.END_PATTERN=Int32Array.from([1,1,1,1,1,1]),Ct.L_PATTERNS=[Int32Array.from([3,2,1,1]),Int32Array.from([2,2,2,1]),Int32Array.from([2,1,2,2]),Int32Array.from([1,4,1,1]),Int32Array.from([1,1,3,2]),Int32Array.from([1,2,3,1]),Int32Array.from([1,1,1,4]),Int32Array.from([1,3,1,2]),Int32Array.from([1,2,1,3]),Int32Array.from([3,1,1,2])];class Et{constructor(){this.CHECK_DIGIT_ENCODINGS=[24,20,18,17,12,6,3,10,9,5],this.decodeMiddleCounters=Int32Array.from([0,0,0,0]),this.decodeRowStringBuffer=""}decodeRow(t,e,r){let n=this.decodeRowStringBuffer,i=this.decodeMiddle(e,r,n),s=n.toString(),o=Et.parseExtensionString(s),a=[new rt((r[0]+r[1])/2,t),new rt(i,t)],l=new F(s,null,0,a,v.UPC_EAN_EXTENSION,(new Date).getTime());return null!=o&&l.putAllMetadata(o),l}decodeMiddle(t,e,r){let n=this.decodeMiddleCounters;n[0]=0,n[1]=0,n[2]=0,n[3]=0;let i=t.getSize(),s=e[1],o=0;for(let e=0;e<5&&s=10&&(o|=1<<4-e),4!==e&&(s=t.getNextSet(s),s=t.getNextUnset(s))}if(5!==r.length)throw new R;let a=this.determineCheckDigit(o);if(Et.extensionChecksum(r.toString())!==a)throw new R;return s}static extensionChecksum(t){let e=t.length,r=0;for(let n=e-2;n>=0;n-=2)r+=t.charAt(n).charCodeAt(0)-"0".charCodeAt(0);r*=3;for(let n=e-1;n>=0;n-=2)r+=t.charAt(n).charCodeAt(0)-"0".charCodeAt(0);return r*=3,r%10}determineCheckDigit(t){for(let e=0;e<10;e++)if(t===this.CHECK_DIGIT_ENCODINGS[e])return e;throw new R}static parseExtensionString(t){if(5!==t.length)return null;let e=Et.parseExtension5String(t);return null==e?null:new Map([[W.SUGGESTED_PRICE,e]])}static parseExtension5String(t){let e;switch(t.charAt(0)){case"0":e="拢";break;case"5":e="$";break;case"9":switch(t){case"90000":return null;case"99991":return"0.00";case"99990":return"Used"}e="";break;default:e=""}let r=parseInt(t.substring(1)),n=r%100;return e+(r/100).toString()+"."+(n<10?"0"+n:n.toString())}}class mt{constructor(){this.decodeMiddleCounters=Int32Array.from([0,0,0,0]),this.decodeRowStringBuffer=""}decodeRow(t,e,r){let n=this.decodeRowStringBuffer,i=this.decodeMiddle(e,r,n),s=n.toString(),o=mt.parseExtensionString(s),a=[new rt((r[0]+r[1])/2,t),new rt(i,t)],l=new F(s,null,0,a,v.UPC_EAN_EXTENSION,(new Date).getTime());return null!=o&&l.putAllMetadata(o),l}decodeMiddle(t,e,r){let n=this.decodeMiddleCounters;n[0]=0,n[1]=0,n[2]=0,n[3]=0;let i=t.getSize(),s=e[1],o=0;for(let e=0;e<2&&s=10&&(o|=1<<1-e),1!==e&&(s=t.getNextSet(s),s=t.getNextUnset(s))}if(2!==r.length)throw new R;if(parseInt(r.toString())%4!==o)throw new R;return s}static parseExtensionString(t){return 2!==t.length?null:new Map([[W.ISSUE_NUMBER,parseInt(t)]])}}class _t{static decodeRow(t,e,r){let n=Ct.findGuardPattern(e,r,!1,this.EXTENSION_START_PATTERN,new Int32Array(this.EXTENSION_START_PATTERN.length).fill(0));try{return(new Et).decodeRow(t,e,n)}catch(r){return(new mt).decodeRow(t,e,n)}}}_t.EXTENSION_START_PATTERN=Int32Array.from([1,1,2]);class It extends Ct{constructor(){super(),this.decodeRowStringBuffer="",It.L_AND_G_PATTERNS=It.L_PATTERNS.map((t=>Int32Array.from(t)));for(let t=10;t<20;t++){let e=It.L_PATTERNS[t-10],r=new Int32Array(e.length);for(let t=0;t=e.getSize()||!e.isRange(c,u,!1))throw new R;let d=a.toString();if(d.length<8)throw new E;if(!It.checkChecksum(d))throw new l;let g=(n[1]+n[0])/2,f=(h[1]+h[0])/2,w=this.getBarcodeFormat(),A=[new rt(g,t),new rt(f,t)],m=new F(d,null,0,A,w,(new Date).getTime()),_=0;try{let r=_t.decodeRow(t,e,h[1]);m.putMetadata(W.UPC_EAN_EXTENSION,r.getText()),m.putAllMetadata(r.getResultMetadata()),m.addResultPoints(r.getResultPoints()),_=r.getText().length}catch(t){}let I=null==r?null:r.get(C.ALLOWED_EAN_EXTENSIONS);if(null!=I){let t=!1;for(let e in I)if(_.toString()===e){t=!0;break}if(!t)throw new R}return w===v.EAN_13||v.UPC_A,m}static checkChecksum(t){return It.checkStandardUPCEANChecksum(t)}static checkStandardUPCEANChecksum(t){let e=t.length;if(0===e)return!1;let r=parseInt(t.charAt(e-1),10);return It.getStandardUPCEANChecksum(t.substring(0,e-1))===r}static getStandardUPCEANChecksum(t){let e=t.length,r=0;for(let n=e-1;n>=0;n-=2){let e=t.charAt(n).charCodeAt(0)-"0".charCodeAt(0);if(e<0||e>9)throw new E;r+=e}r*=3;for(let n=e-2;n>=0;n-=2){let e=t.charAt(n).charCodeAt(0)-"0".charCodeAt(0);if(e<0||e>9)throw new E;r+=e}return(1e3-r)%10}static decodeEnd(t,e){return It.findGuardPattern(t,e,!1,It.START_END_PATTERN,new Int32Array(It.START_END_PATTERN.length).fill(0))}}class St extends It{constructor(){super(),this.decodeMiddleCounters=Int32Array.from([0,0,0,0])}decodeMiddle(t,e,r){let n=this.decodeMiddleCounters;n[0]=0,n[1]=0,n[2]=0,n[3]=0;let i=t.getSize(),s=e[1],o=0;for(let e=0;e<6&&s=10&&(o|=1<<5-e)}r=St.determineFirstDigit(r,o),s=It.findGuardPattern(t,s,!0,It.MIDDLE_PATTERN,new Int32Array(It.MIDDLE_PATTERN.length).fill(0))[1];for(let e=0;e<6&&st));n[0]=0,n[1]=0,n[2]=0,n[3]=0;const i=t.getSize();let s=e[1],o=0;for(let e=0;e<6&&s=10&&(o|=1<<5-e)}return Rt.determineNumSysAndCheckDigit(new p(r),o),s}decodeEnd(t,e){return Rt.findGuardPatternWithoutCounters(t,e,!0,Rt.MIDDLE_END_PATTERN)}checkChecksum(t){return It.checkChecksum(Rt.convertUPCEtoUPCA(t))}static determineNumSysAndCheckDigit(t,e){for(let r=0;r<=1;r++)for(let n=0;n<10;n++)if(e===this.NUMSYS_AND_CHECK_DIGIT_PATTERNS[r][n])return t.insert(0,"0"+r),void t.append("0"+n);throw R.getNotFoundInstance()}getBarcodeFormat(){return v.UPC_E}static convertUPCEtoUPCA(t){const e=t.slice(1,7).split("").map((t=>t.charCodeAt(0))),r=new p;r.append(t.charAt(0));let n=e[5];switch(n){case 0:case 1:case 2:r.appendChars(e,0,2),r.append(n),r.append("0000"),r.appendChars(e,2,3);break;case 3:r.appendChars(e,0,3),r.append("00000"),r.appendChars(e,3,2);break;case 4:r.appendChars(e,0,4),r.append("00000"),r.append(e[4]);break;default:r.appendChars(e,0,5),r.append("0000"),r.append(n)}return t.length>=8&&r.append(t.charAt(7)),r.toString()}}Rt.MIDDLE_END_PATTERN=Int32Array.from([1,1,1,1,1,1]),Rt.NUMSYS_AND_CHECK_DIGIT_PATTERNS=[Int32Array.from([56,52,50,49,44,38,35,42,41,37]),Int32Array.from([7,11,13,14,19,25,28,21,22,1])];class Nt extends gt{constructor(t){super();let e=null==t?null:t.get(C.POSSIBLE_FORMATS),r=[];null!=e&&(e.indexOf(v.EAN_13)>-1?r.push(new St):e.indexOf(v.UPC_A)>-1&&r.push(new Tt),e.indexOf(v.EAN_8)>-1&&r.push(new pt),e.indexOf(v.UPC_E)>-1&&r.push(new Rt)),0===r.length&&(r.push(new St),r.push(new pt),r.push(new Rt)),this.readers=r}decodeRow(t,e,r){for(let n of this.readers)try{const i=n.decodeRow(t,e,r),s=i.getBarcodeFormat()===v.EAN_13&&"0"===i.getText().charAt(0),o=null==r?null:r.get(C.POSSIBLE_FORMATS),a=null==o||o.includes(v.UPC_A);if(s&&a){const t=i.getRawBytes(),e=new F(i.getText().substring(1),t,t.length,i.getResultPoints(),v.UPC_A);return e.putAllMetadata(i.getResultMetadata()),e}return i}catch(t){}throw new R}reset(){for(let t of this.readers)t.reset()}}class Dt extends gt{constructor(){super(),this.decodeFinderCounters=new Int32Array(4),this.dataCharacterCounters=new Int32Array(8),this.oddRoundingErrors=new Array(4),this.evenRoundingErrors=new Array(4),this.oddCounts=new Array(this.dataCharacterCounters.length/2),this.evenCounts=new Array(this.dataCharacterCounters.length/2)}getDecodeFinderCounters(){return this.decodeFinderCounters}getDataCharacterCounters(){return this.dataCharacterCounters}getOddRoundingErrors(){return this.oddRoundingErrors}getEvenRoundingErrors(){return this.evenRoundingErrors}getOddCounts(){return this.oddCounts}getEvenCounts(){return this.evenCounts}parseFinderValue(t,e){for(let r=0;rn&&(n=e[i],r=i);t[r]++}static decrement(t,e){let r=0,n=e[0];for(let i=1;i=Dt.MIN_FINDER_PATTERN_RATIO&&r<=Dt.MAX_FINDER_PATTERN_RATIO){let e=Number.MAX_SAFE_INTEGER,r=Number.MIN_SAFE_INTEGER;for(let n of t)n>r&&(r=n),n=o-a-1&&(t-=Mt.combins(n-l-(o-a),o-a-2)),o-a-1>1){let r=0;for(let t=n-l-(o-a-2);t>e;t--)r+=Mt.combins(n-l-t-1,o-a-3);t-=r*(o-1-a)}else n-l>e&&t--;i+=t}n-=l}return i}static combins(t,e){let r,n;t-e>e?(n=e,r=t-e):(n=t-e,r=e);let i=1,s=1;for(let e=t;e>r;e--)i*=e,s<=n&&(i/=s,s++);for(;s<=n;)i/=s,s++;return i}}class Bt{constructor(t,e){e?this.decodedInformation=null:(this.finished=t,this.decodedInformation=e)}getDecodedInformation(){return this.decodedInformation}isFinished(){return this.finished}}class bt{constructor(t){this.newPosition=t}getNewPosition(){return this.newPosition}}class Pt extends bt{constructor(t,e){super(t),this.value=e}getValue(){return this.value}isFNC1(){return this.value===Pt.FNC1}}Pt.FNC1="$";class Lt extends bt{constructor(t,e,r){super(t),r?(this.remaining=!0,this.remainingValue=this.remainingValue):(this.remaining=!1,this.remainingValue=0),this.newString=e}getNewString(){return this.newString}isRemaining(){return this.remaining}getRemainingValue(){return this.remainingValue}}class Ft extends bt{constructor(t,e,r){if(super(t),e<0||e>10||r<0||r>10)throw new E;this.firstDigit=e,this.secondDigit=r}getFirstDigit(){return this.firstDigit}getSecondDigit(){return this.secondDigit}getValue(){return 10*this.firstDigit+this.secondDigit}isFirstDigitFNC1(){return this.firstDigit===Ft.FNC1}isSecondDigitFNC1(){return this.secondDigit===Ft.FNC1}isAnyFNC1(){return this.firstDigit===Ft.FNC1||this.secondDigit===Ft.FNC1}}Ft.FNC1=10;class kt{constructor(){}static parseFieldsInGeneralPurpose(t){if(!t)return null;if(t.length<2)throw new R;let e=t.substring(0,2);for(let r of kt.TWO_DIGIT_DATA_LENGTH)if(r[0]===e)return r[1]===kt.VARIABLE_LENGTH?kt.processVariableAI(2,r[2],t):kt.processFixedAI(2,r[1],t);if(t.length<3)throw new R;let r=t.substring(0,3);for(let e of kt.THREE_DIGIT_DATA_LENGTH)if(e[0]===r)return e[1]===kt.VARIABLE_LENGTH?kt.processVariableAI(3,e[2],t):kt.processFixedAI(3,e[1],t);for(let e of kt.THREE_DIGIT_PLUS_DIGIT_DATA_LENGTH)if(e[0]===r)return e[1]===kt.VARIABLE_LENGTH?kt.processVariableAI(4,e[2],t):kt.processFixedAI(4,e[1],t);if(t.length<4)throw new R;let n=t.substring(0,4);for(let e of kt.FOUR_DIGIT_DATA_LENGTH)if(e[0]===n)return e[1]===kt.VARIABLE_LENGTH?kt.processVariableAI(4,e[2],t):kt.processFixedAI(4,e[1],t);throw new R}static processFixedAI(t,e,r){if(r.lengththis.information.getSize())return t+4<=this.information.getSize();for(let e=t;ethis.information.getSize()){let e=this.extractNumericValueFromBitArray(t,4);return new Ft(this.information.getSize(),0===e?Ft.FNC1:e-1,Ft.FNC1)}let e=this.extractNumericValueFromBitArray(t,7);return new Ft(t+7,(e-8)/11,(e-8)%11)}extractNumericValueFromBitArray(t,e){return vt.extractNumericValueFromBitArray(this.information,t,e)}static extractNumericValueFromBitArray(t,e,r){let n=0;for(let i=0;ithis.information.getSize())return!1;let e=this.extractNumericValueFromBitArray(t,5);if(e>=5&&e<16)return!0;if(t+7>this.information.getSize())return!1;let r=this.extractNumericValueFromBitArray(t,7);if(r>=64&&r<116)return!0;if(t+8>this.information.getSize())return!1;let n=this.extractNumericValueFromBitArray(t,8);return n>=232&&n<253}decodeIsoIec646(t){let e=this.extractNumericValueFromBitArray(t,5);if(15===e)return new Pt(t+5,Pt.FNC1);if(e>=5&&e<15)return new Pt(t+5,"0"+(e-5));let r,n=this.extractNumericValueFromBitArray(t,7);if(n>=64&&n<90)return new Pt(t+7,""+(n+1));if(n>=90&&n<116)return new Pt(t+7,""+(n+7));switch(this.extractNumericValueFromBitArray(t,8)){case 232:r="!";break;case 233:r='"';break;case 234:r="%";break;case 235:r="&";break;case 236:r="'";break;case 237:r="(";break;case 238:r=")";break;case 239:r="*";break;case 240:r="+";break;case 241:r=",";break;case 242:r="-";break;case 243:r=".";break;case 244:r="/";break;case 245:r=":";break;case 246:r=";";break;case 247:r="<";break;case 248:r="=";break;case 249:r=">";break;case 250:r="?";break;case 251:r="_";break;case 252:r=" ";break;default:throw new E}return new Pt(t+8,r)}isStillAlpha(t){if(t+5>this.information.getSize())return!1;let e=this.extractNumericValueFromBitArray(t,5);if(e>=5&&e<16)return!0;if(t+6>this.information.getSize())return!1;let r=this.extractNumericValueFromBitArray(t,6);return r>=16&&r<63}decodeAlphanumeric(t){let e=this.extractNumericValueFromBitArray(t,5);if(15===e)return new Pt(t+5,Pt.FNC1);if(e>=5&&e<15)return new Pt(t+5,"0"+(e-5));let r,n=this.extractNumericValueFromBitArray(t,6);if(n>=32&&n<58)return new Pt(t+6,""+(n+33));switch(n){case 58:r="*";break;case 59:r=",";break;case 60:r="-";break;case 61:r=".";break;case 62:r="/";break;default:throw new j("Decoding invalid alphanumeric value: "+n)}return new Pt(t+6,r)}isAlphaTo646ToAlphaLatch(t){if(t+1>this.information.getSize())return!1;for(let e=0;e<5&&e+tthis.information.getSize())return!1;for(let e=t;ethis.information.getSize())return!1;for(let e=0;e<4&&e+t{e.forEach((e=>{t.getLeftChar().getValue()===e.getLeftChar().getValue()&&t.getRightChar().getValue()===e.getRightChar().getValue()&&t.getFinderPatter().getValue()===e.getFinderPatter().getValue()&&(r=!0)}))})),r}}class Jt extends Dt{constructor(){super(...arguments),this.pairs=new Array(Jt.MAX_PAIRS),this.rows=new Array,this.startEnd=[2]}decodeRow(t,e,r){this.pairs.length=0,this.startFromEven=!1;try{return Jt.constructResult(this.decodeRow2pairs(t,e))}catch(t){}return this.pairs.length=0,this.startFromEven=!0,Jt.constructResult(this.decodeRow2pairs(t,e))}reset(){this.pairs.length=0,this.rows.length=0}decodeRow2pairs(t,e){let r,n=!1;for(;!n;)try{this.pairs.push(this.retrieveNextPair(e,this.pairs,t))}catch(t){if(t instanceof R){if(!this.pairs.length)throw new R;n=!0}}if(this.checkChecksum())return this.pairs;if(r=!!this.rows.length,this.storeRow(t,!1),r){let t=this.checkRowsBoolean(!1);if(null!=t)return t;if(t=this.checkRowsBoolean(!0),null!=t)return t}throw new R}checkRowsBoolean(t){if(this.rows.length>25)return this.rows.length=0,null;this.pairs.length=0,t&&(this.rows=this.rows.reverse());let e=null;try{e=this.checkRows(new Array,0)}catch(t){console.log(t)}return t&&(this.rows=this.rows.reverse()),e}checkRows(t,e){for(let r=e;re.length)continue;let r=!0;for(let n=0;nt){i=e.isEquivalent(this.pairs);break}n=e.isEquivalent(this.pairs),r++}i||n||Jt.isPartialRow(this.pairs,this.rows)||(this.rows.push(r,new jt(this.pairs,t,e)),this.removePartialRows(this.pairs,this.rows))}removePartialRows(t,e){for(let r of e)if(r.getPairs().length!==t.length)for(let e of r.getPairs())for(let r of t)if(Qt.equals(e,r))break}static isPartialRow(t,e){for(let r of e){let e=!0;for(let n of t){let t=!1;for(let e of r.getPairs())if(n.equals(e)){t=!0;break}if(!t){e=!1;break}}if(e)return!0}return!1}getRows(){return this.rows}static constructResult(t){let e=qt(class{static buildBitArray(t){let e=2*t.length-1;null==t[t.length-1].getRightChar()&&(e-=1);let r=new w(12*e),n=0,i=t[0].getRightChar().getValue();for(let t=11;t>=0;--t)0!=(i&1<=0;--t)0!=(s&1<=0;--e)0!=(t&1<=0)i=r;else if(this.isEmptyPair(e))i=0;else{i=e[e.length-1].getFinderPattern().getStartEnd()[1]}let o=e.length%2!=0;this.startFromEven&&(o=!o);let a=!1;for(;i=0&&!t.get(e);)e--;e++,n=this.startEnd[0]-e,i=e,s=this.startEnd[1]}else i=this.startEnd[0],s=t.getNextUnset(this.startEnd[1]+1),n=s-this.startEnd[1];let o,a=this.getDecodeFinderCounters();c.arraycopy(a,0,a,1,a.length-1),a[0]=n;try{o=this.parseFinderValue(a,Jt.FINDER_PATTERNS)}catch(t){return null}return new Ot(o,[i,s],i,s,e)}decodeDataCharacter(t,e,r,n){let i=this.getDataCharacterCounters();for(let t=0;t.3)throw new R;let a=this.getOddCounts(),l=this.getEvenCounts(),h=this.getOddRoundingErrors(),c=this.getEvenRoundingErrors();for(let t=0;t8){if(e>8.7)throw new R;r=8}let n=t/2;0==(1&t)?(a[n]=r,h[n]=e-r):(l[n]=r,c[n]=e-r)}this.adjustOddEvenCounts(17);let u=4*e.getValue()+(r?0:2)+(n?0:1)-1,d=0,g=0;for(let t=a.length-1;t>=0;t--){if(Jt.isNotA1left(e,r,n)){let e=Jt.WEIGHTS[u][2*t];g+=a[t]*e}d+=a[t]}let f=0;for(let t=l.length-1;t>=0;t--)if(Jt.isNotA1left(e,r,n)){let e=Jt.WEIGHTS[u][2*t+1];f+=l[t]*e}let w=g+f;if(0!=(1&d)||d>13||d<4)throw new R;let A=(13-d)/2,C=Jt.SYMBOL_WIDEST[A],E=9-C,m=Mt.getRSSvalue(a,C,!0),_=Mt.getRSSvalue(l,E,!1),I=Jt.EVEN_TOTAL_SUBSET[A],S=Jt.GSUM[A];return new yt(m*I+_+S,w)}static isNotA1left(t,e,r){return!(0==t.getValue()&&e&&r)}adjustOddEvenCounts(t){let e=tt.sum(new Int32Array(this.getOddCounts())),r=tt.sum(new Int32Array(this.getEvenCounts())),n=!1,i=!1;e>13?i=!0:e<4&&(n=!0);let s=!1,o=!1;r>13?o=!0:r<4&&(s=!0);let a=e+r-t,l=1==(1&e),h=0==(1&r);if(1==a)if(l){if(h)throw new R;i=!0}else{if(!h)throw new R;o=!0}else if(-1==a)if(l){if(h)throw new R;n=!0}else{if(!h)throw new R;s=!0}else{if(0!=a)throw new R;if(l){if(!h)throw new R;e1)for(let e of this.possibleRightPairs)if(e.getCount()>1&&te.checkChecksum(t,e))return te.constructResult(t,e);throw new R}static addOrTally(t,e){if(null==e)return;let r=!1;for(let n of t)if(n.getValue()===e.getValue()){n.incrementCount(),r=!0;break}r||t.push(e)}reset(){this.possibleLeftPairs.length=0,this.possibleRightPairs.length=0}static constructResult(t,e){let r=4537077*t.getValue()+e.getValue(),n=new String(r).toString(),i=new p;for(let t=13-n.length;t>0;t--)i.append("0");i.append(n);let s=0;for(let t=0;t<13;t++){let e=i.charAt(t).charCodeAt(0)-"0".charCodeAt(0);s+=0==(1&t)?3*e:e}s=10-s%10,10===s&&(s=0),i.append(s.toString());let o=t.getFinderPattern().getResultPoints(),a=e.getFinderPattern().getResultPoints();return new F(i.toString(),null,0,[o[0],o[1],a[0],a[1]],v.RSS_14,(new Date).getTime())}static checkChecksum(t,e){let r=(t.getChecksumPortion()+16*e.getChecksumPortion())%79,n=9*t.getFinderPattern().getValue()+e.getFinderPattern().getValue();return n>72&&n--,n>8&&n--,r===n}decodePair(t,e,r,n){try{let i=this.findFinderPattern(t,e),s=this.parseFoundFinderPattern(t,r,e,i),o=null==n?null:n.get(C.NEED_RESULT_POINT_CALLBACK);if(null!=o){let n=(i[0]+i[1])/2;e&&(n=t.getSize()-1-n),o.foundPossibleResultPoint(new rt(n,r))}let a=this.decodeDataCharacter(t,s,!0),l=this.decodeDataCharacter(t,s,!1);return new $t(1597*a.getValue()+l.getValue(),a.getChecksumPortion()+4*l.getChecksumPortion(),s)}catch(t){return null}}decodeDataCharacter(t,e,r){let n=this.getDataCharacterCounters();for(let t=0;t8&&(r=8);let i=Math.floor(t/2);0==(1&t)?(o[i]=r,l[i]=e-r):(a[i]=r,h[i]=e-r)}this.adjustOddEvenCounts(r,i);let c=0,u=0;for(let t=o.length-1;t>=0;t--)u*=9,u+=o[t],c+=o[t];let d=0,g=0;for(let t=a.length-1;t>=0;t--)d*=9,d+=a[t],g+=a[t];let f=u+3*d;if(r){if(0!=(1&c)||c>12||c<4)throw new R;let t=(12-c)/2,e=te.OUTSIDE_ODD_WIDEST[t],r=9-e,n=Mt.getRSSvalue(o,e,!1),i=Mt.getRSSvalue(a,r,!0),s=te.OUTSIDE_EVEN_TOTAL_SUBSET[t],l=te.OUTSIDE_GSUM[t];return new yt(n*s+i+l,f)}{if(0!=(1&g)||g>10||g<4)throw new R;let t=(10-g)/2,e=te.INSIDE_ODD_WIDEST[t],r=9-e,n=Mt.getRSSvalue(o,e,!0),i=Mt.getRSSvalue(a,r,!1),s=te.INSIDE_ODD_TOTAL_SUBSET[t],l=te.INSIDE_GSUM[t];return new yt(i*s+n+l,f)}}findFinderPattern(t,e){let r=this.getDecodeFinderCounters();r[0]=0,r[1]=0,r[2]=0,r[3]=0;let n=t.getSize(),i=!1,s=0;for(;s=0&&i!==t.get(s);)s--;s++;const o=n[0]-s,a=this.getDecodeFinderCounters(),l=new Int32Array(a.length);c.arraycopy(a,0,l,1,a.length-1),l[0]=o;const h=this.parseFinderValue(l,te.FINDER_PATTERNS);let u=s,d=n[1];return r&&(u=t.getSize()-1-u,d=t.getSize()-1-d),new Ot(h,[s,n[1]],u,d,e)}adjustOddEvenCounts(t,e){let r=tt.sum(new Int32Array(this.getOddCounts())),n=tt.sum(new Int32Array(this.getEvenCounts())),i=!1,s=!1,o=!1,a=!1;t?(r>12?s=!0:r<4&&(i=!0),n>12?a=!0:n<4&&(o=!0)):(r>11?s=!0:r<5&&(i=!0),n>10?a=!0:n<4&&(o=!0));let l=r+n-e,h=(1&r)==(t?1:0),c=1==(1&n);if(1===l)if(h){if(c)throw new R;s=!0}else{if(!c)throw new R;a=!0}else if(-1===l)if(h){if(c)throw new R;i=!0}else{if(!c)throw new R;o=!0}else{if(0!==l)throw new R;if(h){if(!c)throw new R;rt.reset()))}}class re{constructor(t,e,r){this.ecCodewords=t,this.ecBlocks=[e],r&&this.ecBlocks.push(r)}getECCodewords(){return this.ecCodewords}getECBlocks(){return this.ecBlocks}}class ne{constructor(t,e){this.count=t,this.dataCodewords=e}getCount(){return this.count}getDataCodewords(){return this.dataCodewords}}class ie{constructor(t,e,r,n,i,s){this.versionNumber=t,this.symbolSizeRows=e,this.symbolSizeColumns=r,this.dataRegionSizeRows=n,this.dataRegionSizeColumns=i,this.ecBlocks=s;let o=0;const a=s.getECCodewords(),l=s.getECBlocks();for(let t of l)o+=t.getCount()*(t.getDataCodewords()+a);this.totalCodewords=o}getVersionNumber(){return this.versionNumber}getSymbolSizeRows(){return this.symbolSizeRows}getSymbolSizeColumns(){return this.symbolSizeColumns}getDataRegionSizeRows(){return this.dataRegionSizeRows}getDataRegionSizeColumns(){return this.dataRegionSizeColumns}getTotalCodewords(){return this.totalCodewords}getECBlocks(){return this.ecBlocks}static getVersionForDimensions(t,e){if(0!=(1&t)||0!=(1&e))throw new E;for(let r of ie.VERSIONS)if(r.symbolSizeRows===t&&r.symbolSizeColumns===e)return r;throw new E}toString(){return""+this.versionNumber}static buildVersions(){return[new ie(1,10,10,8,8,new re(5,new ne(1,3))),new ie(2,12,12,10,10,new re(7,new ne(1,5))),new ie(3,14,14,12,12,new re(10,new ne(1,8))),new ie(4,16,16,14,14,new re(12,new ne(1,12))),new ie(5,18,18,16,16,new re(14,new ne(1,18))),new ie(6,20,20,18,18,new re(18,new ne(1,22))),new ie(7,22,22,20,20,new re(20,new ne(1,30))),new ie(8,24,24,22,22,new re(24,new ne(1,36))),new ie(9,26,26,24,24,new re(28,new ne(1,44))),new ie(10,32,32,14,14,new re(36,new ne(1,62))),new ie(11,36,36,16,16,new re(42,new ne(1,86))),new ie(12,40,40,18,18,new re(48,new ne(1,114))),new ie(13,44,44,20,20,new re(56,new ne(1,144))),new ie(14,48,48,22,22,new re(68,new ne(1,174))),new ie(15,52,52,24,24,new re(42,new ne(2,102))),new ie(16,64,64,14,14,new re(56,new ne(2,140))),new ie(17,72,72,16,16,new re(36,new ne(4,92))),new ie(18,80,80,18,18,new re(48,new ne(4,114))),new ie(19,88,88,20,20,new re(56,new ne(4,144))),new ie(20,96,96,22,22,new re(68,new ne(4,174))),new ie(21,104,104,24,24,new re(56,new ne(6,136))),new ie(22,120,120,18,18,new re(68,new ne(6,175))),new ie(23,132,132,20,20,new re(62,new ne(8,163))),new ie(24,144,144,22,22,new re(62,new ne(8,156),new ne(2,155))),new ie(25,8,18,6,16,new re(7,new ne(1,5))),new ie(26,8,32,6,14,new re(11,new ne(1,10))),new ie(27,12,26,10,24,new re(14,new ne(1,16))),new ie(28,12,36,10,16,new re(18,new ne(1,22))),new ie(29,16,36,14,16,new re(24,new ne(1,32))),new ie(30,16,48,14,22,new re(28,new ne(1,49)))]}}ie.VERSIONS=ie.buildVersions();class se{constructor(t){const e=t.getHeight();if(e<8||e>144||0!=(1&e))throw new E;this.version=se.readVersion(t),this.mappingBitMatrix=this.extractDataRegion(t),this.readMappingMatrix=new T(this.mappingBitMatrix.getWidth(),this.mappingBitMatrix.getHeight())}getVersion(){return this.version}static readVersion(t){const e=t.getHeight(),r=t.getWidth();return ie.getVersionForDimensions(e,r)}readCodewords(){const t=new Int8Array(this.version.getTotalCodewords());let e=0,r=4,n=0;const i=this.mappingBitMatrix.getHeight(),s=this.mappingBitMatrix.getWidth();let o=!1,a=!1,l=!1,h=!1;do{if(r!==i||0!==n||o)if(r!==i-2||0!==n||0==(3&s)||a)if(r!==i+4||2!==n||0!=(7&s)||l)if(r!==i-2||0!==n||4!=(7&s)||h){do{r=0&&!this.readMappingMatrix.get(n,r)&&(t[e++]=255&this.readUtah(r,n,i,s)),r-=2,n+=2}while(r>=0&&n=0&&n=0);r+=3,n+=1}else t[e++]=255&this.readCorner4(i,s),r-=2,n+=2,h=!0;else t[e++]=255&this.readCorner3(i,s),r-=2,n+=2,l=!0;else t[e++]=255&this.readCorner2(i,s),r-=2,n+=2,a=!0;else t[e++]=255&this.readCorner1(i,s),r-=2,n+=2,o=!0}while(r7?e-1:e;s[n].codewords[i]=t[c++]}if(c!==t.length)throw new o;return s}getNumDataCodewords(){return this.numDataCodewords}getCodewords(){return this.codewords}}class ae{constructor(t){this.bytes=t,this.byteOffset=0,this.bitOffset=0}getBitOffset(){return this.bitOffset}getByteOffset(){return this.byteOffset}readBits(t){if(t<1||t>32||t>this.available())throw new o(""+t);let e=0,r=this.bitOffset,n=this.byteOffset;const i=this.bytes;if(r>0){const s=8-r,o=t>8-o<>a,t-=o,r+=o,8===r&&(r=0,n++)}if(t>0){for(;t>=8;)e=e<<8|255&i[n],n++,t-=8;if(t>0){const s=8-t,o=255>>s<>s,r+=t}}return this.bitOffset=r,this.byteOffset=n,e}available(){return 8*(this.bytes.length-this.byteOffset)-this.bitOffset}}!function(t){t[t.PAD_ENCODE=0]="PAD_ENCODE",t[t.ASCII_ENCODE=1]="ASCII_ENCODE",t[t.C40_ENCODE=2]="C40_ENCODE",t[t.TEXT_ENCODE=3]="TEXT_ENCODE",t[t.ANSIX12_ENCODE=4]="ANSIX12_ENCODE",t[t.EDIFACT_ENCODE=5]="EDIFACT_ENCODE",t[t.BASE256_ENCODE=6]="BASE256_ENCODE"}(V||(V={}));class le{static decode(t){const e=new ae(t),r=new p,n=new p,i=new Array;let s=V.ASCII_ENCODE;do{if(s===V.ASCII_ENCODE)s=this.decodeAsciiSegment(e,r,n);else{switch(s){case V.C40_ENCODE:this.decodeC40Segment(e,r);break;case V.TEXT_ENCODE:this.decodeTextSegment(e,r);break;case V.ANSIX12_ENCODE:this.decodeAnsiX12Segment(e,r);break;case V.EDIFACT_ENCODE:this.decodeEdifactSegment(e,r);break;case V.BASE256_ENCODE:this.decodeBase256Segment(e,r,i);break;default:throw new E}s=V.ASCII_ENCODE}}while(s!==V.PAD_ENCODE&&e.available()>0);return n.length()>0&&r.append(n.toString()),new z(t,r.toString(),0===i.length?null:i,null)}static decodeAsciiSegment(t,e,r){let n=!1;do{let i=t.readBits(8);if(0===i)throw new E;if(i<=128)return n&&(i+=128),e.append(String.fromCharCode(i-1)),V.ASCII_ENCODE;if(129===i)return V.PAD_ENCODE;if(i<=229){const t=i-130;t<10&&e.append("0"),e.append(""+t)}else switch(i){case 230:return V.C40_ENCODE;case 231:return V.BASE256_ENCODE;case 232:e.append(String.fromCharCode(29));break;case 233:case 234:break;case 235:n=!0;break;case 236:e.append("[)>05"),r.insert(0,"");break;case 237:e.append("[)>06"),r.insert(0,"");break;case 238:return V.ANSIX12_ENCODE;case 239:return V.TEXT_ENCODE;case 240:return V.EDIFACT_ENCODE;case 241:break;default:if(254!==i||0!==t.available())throw new E}}while(t.available()>0);return V.ASCII_ENCODE}static decodeC40Segment(t,e){let r=!1;const n=[];let i=0;do{if(8===t.available())return;const s=t.readBits(8);if(254===s)return;this.parseTwoBytes(s,t.readBits(8),n);for(let t=0;t<3;t++){const s=n[t];switch(i){case 0:if(s<3)i=s+1;else{if(!(s0)}static decodeTextSegment(t,e){let r=!1,n=[],i=0;do{if(8===t.available())return;const s=t.readBits(8);if(254===s)return;this.parseTwoBytes(s,t.readBits(8),n);for(let t=0;t<3;t++){const s=n[t];switch(i){case 0:if(s<3)i=s+1;else{if(!(s0)}static decodeAnsiX12Segment(t,e){const r=[];do{if(8===t.available())return;const n=t.readBits(8);if(254===n)return;this.parseTwoBytes(n,t.readBits(8),r);for(let t=0;t<3;t++){const n=r[t];switch(n){case 0:e.append("\r");break;case 1:e.append("*");break;case 2:e.append(">");break;case 3:e.append(" ");break;default:if(n<14)e.append(String.fromCharCode(n+44));else{if(!(n<40))throw new E;e.append(String.fromCharCode(n+51))}}}}while(t.available()>0)}static parseTwoBytes(t,e,r){let n=(t<<8)+e-1,i=Math.floor(n/1600);r[0]=i,n-=1600*i,i=Math.floor(n/40),r[1]=i,r[2]=n-40*i}static decodeEdifactSegment(t,e){do{if(t.available()<=16)return;for(let r=0;r<4;r++){let r=t.readBits(6);if(31===r){const e=8-t.getBitOffset();return void(8!==e&&t.readBits(e))}0==(32&r)&&(r|=64),e.append(String.fromCharCode(r))}}while(t.available()>0)}static decodeBase256Segment(t,e,r){let n=1+t.getByteOffset();const i=this.unrandomize255State(t.readBits(8),n++);let s;if(s=0===i?t.available()/8|0:i<250?i:250*(i-249)+this.unrandomize255State(t.readBits(8),n++),s<0)throw new E;const o=new Uint8Array(s);for(let e=0;e=0?r:r+256}}le.C40_BASIC_SET_CHARS=["*","*","*"," ","0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"],le.C40_SHIFT2_SET_CHARS=["!",'"',"#","$","%","&","'","(",")","*","+",",","-",".","/",":",";","<","=",">","?","@","[","\\","]","^","_"],le.TEXT_BASIC_SET_CHARS=["*","*","*"," ","0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"],le.TEXT_SHIFT2_SET_CHARS=le.C40_SHIFT2_SET_CHARS,le.TEXT_SHIFT3_SET_CHARS=["`","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","{","|","}","~",String.fromCharCode(127)];class he{constructor(){this.rsDecoder=new J(q.DATA_MATRIX_FIELD_256)}decode(t){const e=new se(t),r=e.getVersion(),n=e.readCodewords(),i=oe.getDataBlocks(n,r);let s=0;for(let t of i)s+=t.getNumDataCodewords();const o=new Uint8Array(s),a=i.length;for(let t=0;to&&(h=o,c[0]=e,c[1]=r,c[2]=n,c[3]=i),h>a&&(h=a,c[0]=r,c[1]=n,c[2]=i,c[3]=e),h>l&&(c[0]=n,c[1]=i,c[2]=e,c[3]=r),c}detectSolid2(t){let e=t[0],r=t[1],n=t[2],i=t[3],s=this.transitionsBetween(e,i),o=ce.shiftPoint(r,n,4*(s+1)),a=ce.shiftPoint(n,r,4*(s+1));return this.transitionsBetween(o,e)this.transitionsBetween(a,c)+this.transitionsBetween(l,c)?h:c:h:this.isValid(c)?c:null}shiftToModuleCenter(t){let e=t[0],r=t[1],n=t[2],i=t[3],s=this.transitionsBetween(e,i)+1,o=this.transitionsBetween(n,i)+1,a=ce.shiftPoint(e,r,4*o),l=ce.shiftPoint(n,r,4*s);s=this.transitionsBetween(a,i)+1,o=this.transitionsBetween(l,i)+1,1==(1&s)&&(s+=1),1==(1&o)&&(o+=1);let h,c,u=(e.getX()+r.getX()+n.getX()+i.getX())/4,d=(e.getY()+r.getY()+n.getY()+i.getY())/4;return e=ce.moveAway(e,u,d),r=ce.moveAway(r,u,d),n=ce.moveAway(n,u,d),i=ce.moveAway(i,u,d),a=ce.shiftPoint(e,r,4*o),a=ce.shiftPoint(a,i,4*s),h=ce.shiftPoint(r,e,4*o),h=ce.shiftPoint(h,n,4*s),l=ce.shiftPoint(n,i,4*o),l=ce.shiftPoint(l,r,4*s),c=ce.shiftPoint(i,n,4*o),c=ce.shiftPoint(c,e,4*s),[a,h,l,c]}isValid(t){return t.getX()>=0&&t.getX()0&&t.getY()Math.abs(i-r);if(o){let t=r;r=n,n=t,t=i,i=s,s=t}let a=Math.abs(i-r),l=Math.abs(s-n),h=-a/2,c=n0){if(e===s)break;e+=c,h-=a}}return d}}class ue{constructor(){this.decoder=new he}decode(t,e=null){let r,n;if(null!=e&&e.has(C.PURE_BARCODE)){const e=ue.extractPureBits(t.getBlackMatrix());r=this.decoder.decode(e),n=ue.NO_POINTS}else{const e=new ce(t.getBlackMatrix()).detect();r=this.decoder.decode(e.getBits()),n=e.getPoints()}const i=r.getRawBytes(),s=new F(r.getText(),i,8*i.length,n,v.DATA_MATRIX,c.currentTimeMillis()),o=r.getByteSegments();null!=o&&s.putMetadata(W.BYTE_SEGMENTS,o);const a=r.getECLevel();return null!=a&&s.putMetadata(W.ERROR_CORRECTION_LEVEL,a),s}reset(){}static extractPureBits(t){const e=t.getTopLeftOnBit(),r=t.getBottomRightOnBit();if(null==e||null==r)throw new R;const n=this.moduleSize(e,t);let i=e[1];const s=r[1];let o=e[0];const a=(r[0]-o+1)/n,l=(s-i+1)/n;if(a<=0||l<=0)throw new R;const h=n/2;i+=h,o+=h;const c=new T(a,l);for(let e=0;e=de.FOR_BITS.size)throw new o;return de.FOR_BITS.get(t)}}de.FOR_BITS=new Map,de.FOR_VALUE=new Map,de.L=new de(U.L,"L",1),de.M=new de(U.M,"M",0),de.Q=new de(U.Q,"Q",3),de.H=new de(U.H,"H",2);class ge{constructor(t){this.errorCorrectionLevel=de.forBits(t>>3&3),this.dataMask=7&t}static numBitsDiffering(t,e){return f.bitCount(t^e)}static decodeFormatInformation(t,e){const r=ge.doDecodeFormatInformation(t,e);return null!==r?r:ge.doDecodeFormatInformation(t^ge.FORMAT_INFO_MASK_QR,e^ge.FORMAT_INFO_MASK_QR)}static doDecodeFormatInformation(t,e){let r=Number.MAX_SAFE_INTEGER,n=0;for(const i of ge.FORMAT_INFO_DECODE_LOOKUP){const s=i[0];if(s===t||s===e)return new ge(i[1]);let o=ge.numBitsDiffering(t,s);o40)throw new o;return Ae.VERSIONS[t-1]}static decodeVersionInformation(t){let e=Number.MAX_SAFE_INTEGER,r=0;for(let n=0;n6&&(e.setRegion(t-11,0,3,6),e.setRegion(0,t-11,6,3)),e}toString(){return""+this.versionNumber}}Ae.VERSION_DECODE_INFO=Int32Array.from([31892,34236,39577,42195,48118,51042,55367,58893,63784,68472,70749,76311,79154,84390,87683,92361,96236,102084,102881,110507,110734,117786,119615,126325,127568,133589,136944,141498,145311,150283,152622,158308,161089,167017]),Ae.VERSIONS=[new Ae(1,new Int32Array(0),new fe(7,new we(1,19)),new fe(10,new we(1,16)),new fe(13,new we(1,13)),new fe(17,new we(1,9))),new Ae(2,Int32Array.from([6,18]),new fe(10,new we(1,34)),new fe(16,new we(1,28)),new fe(22,new we(1,22)),new fe(28,new we(1,16))),new Ae(3,Int32Array.from([6,22]),new fe(15,new we(1,55)),new fe(26,new we(1,44)),new fe(18,new we(2,17)),new fe(22,new we(2,13))),new Ae(4,Int32Array.from([6,26]),new fe(20,new we(1,80)),new fe(18,new we(2,32)),new fe(26,new we(2,24)),new fe(16,new we(4,9))),new Ae(5,Int32Array.from([6,30]),new fe(26,new we(1,108)),new fe(24,new we(2,43)),new fe(18,new we(2,15),new we(2,16)),new fe(22,new we(2,11),new we(2,12))),new Ae(6,Int32Array.from([6,34]),new fe(18,new we(2,68)),new fe(16,new we(4,27)),new fe(24,new we(4,19)),new fe(28,new we(4,15))),new Ae(7,Int32Array.from([6,22,38]),new fe(20,new we(2,78)),new fe(18,new we(4,31)),new fe(18,new we(2,14),new we(4,15)),new fe(26,new we(4,13),new we(1,14))),new Ae(8,Int32Array.from([6,24,42]),new fe(24,new we(2,97)),new fe(22,new we(2,38),new we(2,39)),new fe(22,new we(4,18),new we(2,19)),new fe(26,new we(4,14),new we(2,15))),new Ae(9,Int32Array.from([6,26,46]),new fe(30,new we(2,116)),new fe(22,new we(3,36),new we(2,37)),new fe(20,new we(4,16),new we(4,17)),new fe(24,new we(4,12),new we(4,13))),new Ae(10,Int32Array.from([6,28,50]),new fe(18,new we(2,68),new we(2,69)),new fe(26,new we(4,43),new we(1,44)),new fe(24,new we(6,19),new we(2,20)),new fe(28,new we(6,15),new we(2,16))),new Ae(11,Int32Array.from([6,30,54]),new fe(20,new we(4,81)),new fe(30,new we(1,50),new we(4,51)),new fe(28,new we(4,22),new we(4,23)),new fe(24,new we(3,12),new we(8,13))),new Ae(12,Int32Array.from([6,32,58]),new fe(24,new we(2,92),new we(2,93)),new fe(22,new we(6,36),new we(2,37)),new fe(26,new we(4,20),new we(6,21)),new fe(28,new we(7,14),new we(4,15))),new Ae(13,Int32Array.from([6,34,62]),new fe(26,new we(4,107)),new fe(22,new we(8,37),new we(1,38)),new fe(24,new we(8,20),new we(4,21)),new fe(22,new we(12,11),new we(4,12))),new Ae(14,Int32Array.from([6,26,46,66]),new fe(30,new we(3,115),new we(1,116)),new fe(24,new we(4,40),new we(5,41)),new fe(20,new we(11,16),new we(5,17)),new fe(24,new we(11,12),new we(5,13))),new Ae(15,Int32Array.from([6,26,48,70]),new fe(22,new we(5,87),new we(1,88)),new fe(24,new we(5,41),new we(5,42)),new fe(30,new we(5,24),new we(7,25)),new fe(24,new we(11,12),new we(7,13))),new Ae(16,Int32Array.from([6,26,50,74]),new fe(24,new we(5,98),new we(1,99)),new fe(28,new we(7,45),new we(3,46)),new fe(24,new we(15,19),new we(2,20)),new fe(30,new we(3,15),new we(13,16))),new Ae(17,Int32Array.from([6,30,54,78]),new fe(28,new we(1,107),new we(5,108)),new fe(28,new we(10,46),new we(1,47)),new fe(28,new we(1,22),new we(15,23)),new fe(28,new we(2,14),new we(17,15))),new Ae(18,Int32Array.from([6,30,56,82]),new fe(30,new we(5,120),new we(1,121)),new fe(26,new we(9,43),new we(4,44)),new fe(28,new we(17,22),new we(1,23)),new fe(28,new we(2,14),new we(19,15))),new Ae(19,Int32Array.from([6,30,58,86]),new fe(28,new we(3,113),new we(4,114)),new fe(26,new we(3,44),new we(11,45)),new fe(26,new we(17,21),new we(4,22)),new fe(26,new we(9,13),new we(16,14))),new Ae(20,Int32Array.from([6,34,62,90]),new fe(28,new we(3,107),new we(5,108)),new fe(26,new we(3,41),new we(13,42)),new fe(30,new we(15,24),new we(5,25)),new fe(28,new we(15,15),new we(10,16))),new Ae(21,Int32Array.from([6,28,50,72,94]),new fe(28,new we(4,116),new we(4,117)),new fe(26,new we(17,42)),new fe(28,new we(17,22),new we(6,23)),new fe(30,new we(19,16),new we(6,17))),new Ae(22,Int32Array.from([6,26,50,74,98]),new fe(28,new we(2,111),new we(7,112)),new fe(28,new we(17,46)),new fe(30,new we(7,24),new we(16,25)),new fe(24,new we(34,13))),new Ae(23,Int32Array.from([6,30,54,78,102]),new fe(30,new we(4,121),new we(5,122)),new fe(28,new we(4,47),new we(14,48)),new fe(30,new we(11,24),new we(14,25)),new fe(30,new we(16,15),new we(14,16))),new Ae(24,Int32Array.from([6,28,54,80,106]),new fe(30,new we(6,117),new we(4,118)),new fe(28,new we(6,45),new we(14,46)),new fe(30,new we(11,24),new we(16,25)),new fe(30,new we(30,16),new we(2,17))),new Ae(25,Int32Array.from([6,32,58,84,110]),new fe(26,new we(8,106),new we(4,107)),new fe(28,new we(8,47),new we(13,48)),new fe(30,new we(7,24),new we(22,25)),new fe(30,new we(22,15),new we(13,16))),new Ae(26,Int32Array.from([6,30,58,86,114]),new fe(28,new we(10,114),new we(2,115)),new fe(28,new we(19,46),new we(4,47)),new fe(28,new we(28,22),new we(6,23)),new fe(30,new we(33,16),new we(4,17))),new Ae(27,Int32Array.from([6,34,62,90,118]),new fe(30,new we(8,122),new we(4,123)),new fe(28,new we(22,45),new we(3,46)),new fe(30,new we(8,23),new we(26,24)),new fe(30,new we(12,15),new we(28,16))),new Ae(28,Int32Array.from([6,26,50,74,98,122]),new fe(30,new we(3,117),new we(10,118)),new fe(28,new we(3,45),new we(23,46)),new fe(30,new we(4,24),new we(31,25)),new fe(30,new we(11,15),new we(31,16))),new Ae(29,Int32Array.from([6,30,54,78,102,126]),new fe(30,new we(7,116),new we(7,117)),new fe(28,new we(21,45),new we(7,46)),new fe(30,new we(1,23),new we(37,24)),new fe(30,new we(19,15),new we(26,16))),new Ae(30,Int32Array.from([6,26,52,78,104,130]),new fe(30,new we(5,115),new we(10,116)),new fe(28,new we(19,47),new we(10,48)),new fe(30,new we(15,24),new we(25,25)),new fe(30,new we(23,15),new we(25,16))),new Ae(31,Int32Array.from([6,30,56,82,108,134]),new fe(30,new we(13,115),new we(3,116)),new fe(28,new we(2,46),new we(29,47)),new fe(30,new we(42,24),new we(1,25)),new fe(30,new we(23,15),new we(28,16))),new Ae(32,Int32Array.from([6,34,60,86,112,138]),new fe(30,new we(17,115)),new fe(28,new we(10,46),new we(23,47)),new fe(30,new we(10,24),new we(35,25)),new fe(30,new we(19,15),new we(35,16))),new Ae(33,Int32Array.from([6,30,58,86,114,142]),new fe(30,new we(17,115),new we(1,116)),new fe(28,new we(14,46),new we(21,47)),new fe(30,new we(29,24),new we(19,25)),new fe(30,new we(11,15),new we(46,16))),new Ae(34,Int32Array.from([6,34,62,90,118,146]),new fe(30,new we(13,115),new we(6,116)),new fe(28,new we(14,46),new we(23,47)),new fe(30,new we(44,24),new we(7,25)),new fe(30,new we(59,16),new we(1,17))),new Ae(35,Int32Array.from([6,30,54,78,102,126,150]),new fe(30,new we(12,121),new we(7,122)),new fe(28,new we(12,47),new we(26,48)),new fe(30,new we(39,24),new we(14,25)),new fe(30,new we(22,15),new we(41,16))),new Ae(36,Int32Array.from([6,24,50,76,102,128,154]),new fe(30,new we(6,121),new we(14,122)),new fe(28,new we(6,47),new we(34,48)),new fe(30,new we(46,24),new we(10,25)),new fe(30,new we(2,15),new we(64,16))),new Ae(37,Int32Array.from([6,28,54,80,106,132,158]),new fe(30,new we(17,122),new we(4,123)),new fe(28,new we(29,46),new we(14,47)),new fe(30,new we(49,24),new we(10,25)),new fe(30,new we(24,15),new we(46,16))),new Ae(38,Int32Array.from([6,32,58,84,110,136,162]),new fe(30,new we(4,122),new we(18,123)),new fe(28,new we(13,46),new we(32,47)),new fe(30,new we(48,24),new we(14,25)),new fe(30,new we(42,15),new we(32,16))),new Ae(39,Int32Array.from([6,26,54,82,110,138,166]),new fe(30,new we(20,117),new we(4,118)),new fe(28,new we(40,47),new we(7,48)),new fe(30,new we(43,24),new we(22,25)),new fe(30,new we(10,15),new we(67,16))),new Ae(40,Int32Array.from([6,30,58,86,114,142,170]),new fe(30,new we(19,118),new we(6,119)),new fe(28,new we(18,47),new we(31,48)),new fe(30,new we(34,24),new we(34,25)),new fe(30,new we(20,15),new we(61,16)))],function(t){t[t.DATA_MASK_000=0]="DATA_MASK_000",t[t.DATA_MASK_001=1]="DATA_MASK_001",t[t.DATA_MASK_010=2]="DATA_MASK_010",t[t.DATA_MASK_011=3]="DATA_MASK_011",t[t.DATA_MASK_100=4]="DATA_MASK_100",t[t.DATA_MASK_101=5]="DATA_MASK_101",t[t.DATA_MASK_110=6]="DATA_MASK_110",t[t.DATA_MASK_111=7]="DATA_MASK_111"}(H||(H={}));class Ce{constructor(t,e){this.value=t,this.isMasked=e}unmaskBitMatrix(t,e){for(let r=0;r0==(t+e&1)))],[H.DATA_MASK_001,new Ce(H.DATA_MASK_001,((t,e)=>0==(1&t)))],[H.DATA_MASK_010,new Ce(H.DATA_MASK_010,((t,e)=>e%3==0))],[H.DATA_MASK_011,new Ce(H.DATA_MASK_011,((t,e)=>(t+e)%3==0))],[H.DATA_MASK_100,new Ce(H.DATA_MASK_100,((t,e)=>0==(Math.floor(t/2)+Math.floor(e/3)&1)))],[H.DATA_MASK_101,new Ce(H.DATA_MASK_101,((t,e)=>t*e%6==0))],[H.DATA_MASK_110,new Ce(H.DATA_MASK_110,((t,e)=>t*e%6<3))],[H.DATA_MASK_111,new Ce(H.DATA_MASK_111,((t,e)=>0==(t+e+t*e%3&1)))]]);class Ee{constructor(t){const e=t.getHeight();if(e<21||1!=(3&e))throw new E;this.bitMatrix=t}readFormatInformation(){if(null!==this.parsedFormatInfo&&void 0!==this.parsedFormatInfo)return this.parsedFormatInfo;let t=0;for(let e=0;e<6;e++)t=this.copyBit(e,8,t);t=this.copyBit(7,8,t),t=this.copyBit(8,8,t),t=this.copyBit(8,7,t);for(let e=5;e>=0;e--)t=this.copyBit(8,e,t);const e=this.bitMatrix.getHeight();let r=0;const n=e-7;for(let t=e-1;t>=n;t--)r=this.copyBit(8,t,r);for(let t=e-8;t=0;e--)for(let i=t-9;i>=n;i--)r=this.copyBit(i,e,r);let i=Ae.decodeVersionInformation(r);if(null!==i&&i.getDimensionForVersion()===t)return this.parsedVersion=i,i;r=0;for(let e=5;e>=0;e--)for(let i=t-9;i>=n;i--)r=this.copyBit(e,i,r);if(i=Ae.decodeVersionInformation(r),null!==i&&i.getDimensionForVersion()===t)return this.parsedVersion=i,i;throw new E}copyBit(t,e,r){return(this.isMirror?this.bitMatrix.get(e,t):this.bitMatrix.get(t,e))?r<<1|1:r<<1}readCodewords(){const t=this.readFormatInformation(),e=this.readVersion(),r=Ce.values.get(t.getDataMask()),n=this.bitMatrix.getHeight();r.unmaskBitMatrix(this.bitMatrix,n);const i=e.buildFunctionPattern();let s=!0;const o=new Uint8Array(e.getTotalCodewords());let a=0,l=0,h=0;for(let t=n-1;t>0;t-=2){6===t&&t--;for(let e=0;e=0;){if(a[c].codewords.length===h)break;c--}c++;const u=h-n.getECCodewordsPerBlock();let d=0;for(let e=0;et.available())throw new E;const n=new Uint8Array(2*r);let i=0;for(;r>0;){const e=t.readBits(13);let s=e/96<<8&4294967295|e%96;s+=s<959?41377:42657,n[i]=s>>8&255,n[i+1]=255&s,i+=2,r--}try{e.append(I.decode(n,S.GB2312))}catch(t){throw new E(t)}}static decodeKanjiSegment(t,e,r){if(13*r>t.available())throw new E;const n=new Uint8Array(2*r);let i=0;for(;r>0;){const e=t.readBits(13);let s=e/192<<8&4294967295|e%192;s+=s<7936?33088:49472,n[i]=s>>8,n[i+1]=s,i+=2,r--}try{e.append(I.decode(n,S.SHIFT_JIS))}catch(t){throw new E(t)}}static decodeByteSegment(t,e,r,n,i,s){if(8*r>t.available())throw new E;const o=new Uint8Array(r);for(let e=0;e=Ie.ALPHANUMERIC_CHARS.length)throw new E;return Ie.ALPHANUMERIC_CHARS[t]}static decodeAlphanumericSegment(t,e,r,n){const i=e.length();for(;r>1;){if(t.available()<11)throw new E;const n=t.readBits(11);e.append(Ie.toAlphaNumericChar(Math.floor(n/45))),e.append(Ie.toAlphaNumericChar(n%45)),r-=2}if(1===r){if(t.available()<6)throw new E;e.append(Ie.toAlphaNumericChar(t.readBits(6)))}if(n)for(let t=i;t=3;){if(t.available()<10)throw new E;const n=t.readBits(10);if(n>=1e3)throw new E;e.append(Ie.toAlphaNumericChar(Math.floor(n/100))),e.append(Ie.toAlphaNumericChar(Math.floor(n/10)%10)),e.append(Ie.toAlphaNumericChar(n%10)),r-=3}if(2===r){if(t.available()<7)throw new E;const r=t.readBits(7);if(r>=100)throw new E;e.append(Ie.toAlphaNumericChar(Math.floor(r/10))),e.append(Ie.toAlphaNumericChar(r%10))}else if(1===r){if(t.available()<4)throw new E;const r=t.readBits(4);if(r>=10)throw new E;e.append(Ie.toAlphaNumericChar(r))}}static parseECIValue(t){const e=t.readBits(8);if(0==(128&e))return 127&e;if(128==(192&e)){return(63&e)<<8&4294967295|t.readBits(8)}if(192==(224&e)){return(31&e)<<16&4294967295|t.readBits(16)}throw new E}}Ie.ALPHANUMERIC_CHARS="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:",Ie.GB2312_SUBSET=1;class Se{constructor(t){this.mirrored=t}isMirrored(){return this.mirrored}applyMirroredCorrection(t){if(!this.mirrored||null===t||t.length<3)return;const e=t[0];t[0]=t[2],t[2]=e}}class pe{constructor(){this.rsDecoder=new J(q.QR_CODE_FIELD_256)}decodeBooleanArray(t,e){return this.decodeBitMatrix(T.parseFromBooleanArray(t),e)}decodeBitMatrix(t,e){const r=new Ee(t);let n=null;try{return this.decodeBitMatrixParser(r,e)}catch(t){n=t}try{r.remask(),r.setMirror(!0),r.readVersion(),r.readFormatInformation(),r.mirror();const t=this.decodeBitMatrixParser(r,e);return t.setOther(new Se(!0)),t}catch(t){if(null!==n)throw n;throw t}}decodeBitMatrixParser(t,e){const r=t.readVersion(),n=t.readFormatInformation().getErrorCorrectionLevel(),i=t.readCodewords(),s=me.getDataBlocks(i,r,n);let o=0;for(const t of s)o+=t.getNumDataCodewords();const a=new Uint8Array(o);let l=0;for(const t of s){const e=t.getCodewords(),r=t.getNumDataCodewords();this.correctErrors(e,r);for(let t=0;t=r)return!1;return!0}crossCheckVertical(t,e,r,n){const i=this.image,s=i.getHeight(),o=this.crossCheckStateCount;o[0]=0,o[1]=0,o[2]=0;let a=t;for(;a>=0&&i.get(e,a)&&o[1]<=r;)o[1]++,a--;if(a<0||o[1]>r)return NaN;for(;a>=0&&!i.get(e,a)&&o[0]<=r;)o[0]++,a--;if(o[0]>r)return NaN;for(a=t+1;ar)return NaN;for(;ar)return NaN;const l=o[0]+o[1]+o[2];return 5*Math.abs(l-n)>=2*n?NaN:this.foundPatternCross(o)?Re.centerFromEnd(o,a):NaN}handlePossibleCenter(t,e,r){const n=t[0]+t[1]+t[2],i=Re.centerFromEnd(t,r),s=this.crossCheckVertical(e,i,2*t[1],n);if(!isNaN(s)){const e=(t[0]+t[1]+t[2])/3;for(const t of this.possibleCenters)if(t.aboutEquals(e,s,i))return t.combineEstimate(s,i,e);const r=new Te(i,s,e);this.possibleCenters.push(r),null!==this.resultPointCallback&&void 0!==this.resultPointCallback&&this.resultPointCallback.foundPossibleResultPoint(r)}return null}}class Ne extends rt{constructor(t,e,r,n){super(t,e),this.estimatedModuleSize=r,this.count=n,void 0===n&&(this.count=1)}getEstimatedModuleSize(){return this.estimatedModuleSize}getCount(){return this.count}aboutEquals(t,e,r){if(Math.abs(e-this.getY())<=t&&Math.abs(r-this.getX())<=t){const e=Math.abs(t-this.estimatedModuleSize);return e<=1||e<=this.estimatedModuleSize}return!1}combineEstimate(t,e,r){const n=this.count+1,i=(this.count*this.getX()+e)/n,s=(this.count*this.getY()+t)/n,o=(this.count*this.estimatedModuleSize+r)/n;return new Ne(i,s,o,n)}}class De{constructor(t){this.bottomLeft=t[0],this.topLeft=t[1],this.topRight=t[2]}getBottomLeft(){return this.bottomLeft}getTopLeft(){return this.topLeft}getTopRight(){return this.topRight}}class ye{constructor(t,e){this.image=t,this.resultPointCallback=e,this.possibleCenters=[],this.crossCheckStateCount=new Int32Array(5),this.resultPointCallback=e}getImage(){return this.image}getPossibleCenters(){return this.possibleCenters}find(t){const e=null!=t&&void 0!==t.get(C.TRY_HARDER),r=null!=t&&void 0!==t.get(C.PURE_BARCODE),n=this.image,i=n.getHeight(),s=n.getWidth();let o=Math.floor(3*i/(4*ye.MAX_MODULES));(ol[2]&&(t+=e-l[2]-o,i=s-1)}e=0,l[0]=0,l[1]=0,l[2]=0,l[3]=0,l[4]=0}else l[0]=l[2],l[1]=l[3],l[2]=l[4],l[3]=1,l[4]=0,e=3;else l[++e]++;else l[e]++;if(ye.foundPatternCross(l)){!0===this.handlePossibleCenter(l,t,s,r)&&(o=l[0],this.hasSkipped&&(a=this.haveMultiplyConfirmedCenters()))}}const h=this.selectBestPatterns();return rt.orderBestPatterns(h),new De(h)}static centerFromEnd(t,e){return e-t[4]-t[3]-t[2]/2}static foundPatternCross(t){let e=0;for(let r=0;r<5;r++){const n=t[r];if(0===n)return!1;e+=n}if(e<7)return!1;const r=e/7,n=r/2;return Math.abs(r-t[0])=s&&e>=s&&o.get(e-s,t-s);)i[2]++,s++;if(t=s&&e>=s&&!o.get(e-s,t-s)&&i[1]<=r;)i[1]++,s++;if(tr)return!1;for(;t>=s&&e>=s&&o.get(e-s,t-s)&&i[0]<=r;)i[0]++,s++;if(i[0]>r)return!1;const a=o.getHeight(),l=o.getWidth();for(s=1;t+s=a||e+s>=l)return!1;for(;t+s=a||e+s>=l||i[3]>=r)return!1;for(;t+s=r)return!1;const h=i[0]+i[1]+i[2]+i[3]+i[4];return Math.abs(h-n)<2*n&&ye.foundPatternCross(i)}crossCheckVertical(t,e,r,n){const i=this.image,s=i.getHeight(),o=this.getCrossCheckStateCount();let a=t;for(;a>=0&&i.get(e,a);)o[2]++,a--;if(a<0)return NaN;for(;a>=0&&!i.get(e,a)&&o[1]<=r;)o[1]++,a--;if(a<0||o[1]>r)return NaN;for(;a>=0&&i.get(e,a)&&o[0]<=r;)o[0]++,a--;if(o[0]>r)return NaN;for(a=t+1;a=r)return NaN;for(;a=r)return NaN;const l=o[0]+o[1]+o[2]+o[3]+o[4];return 5*Math.abs(l-n)>=2*n?NaN:ye.foundPatternCross(o)?ye.centerFromEnd(o,a):NaN}crossCheckHorizontal(t,e,r,n){const i=this.image,s=i.getWidth(),o=this.getCrossCheckStateCount();let a=t;for(;a>=0&&i.get(a,e);)o[2]++,a--;if(a<0)return NaN;for(;a>=0&&!i.get(a,e)&&o[1]<=r;)o[1]++,a--;if(a<0||o[1]>r)return NaN;for(;a>=0&&i.get(a,e)&&o[0]<=r;)o[0]++,a--;if(o[0]>r)return NaN;for(a=t+1;a=r)return NaN;for(;a=r)return NaN;const l=o[0]+o[1]+o[2]+o[3]+o[4];return 5*Math.abs(l-n)>=n?NaN:ye.foundPatternCross(o)?ye.centerFromEnd(o,a):NaN}handlePossibleCenter(t,e,r,n){const i=t[0]+t[1]+t[2]+t[3]+t[4];let s=ye.centerFromEnd(t,r),o=this.crossCheckVertical(e,Math.floor(s),t[2],i);if(!isNaN(o)&&(s=this.crossCheckHorizontal(Math.floor(s),Math.floor(o),t[2],i),!isNaN(s)&&(!n||this.crossCheckDiagonal(Math.floor(o),Math.floor(s),t[2],i)))){const t=i/7;let e=!1;const r=this.possibleCenters;for(let n=0,i=r.length;n=ye.CENTER_QUORUM){if(null!=t)return this.hasSkipped=!0,Math.floor((Math.abs(t.getX()-e.getX())-Math.abs(t.getY()-e.getY()))/2);t=e}return 0}haveMultiplyConfirmedCenters(){let t=0,e=0;const r=this.possibleCenters.length;for(const r of this.possibleCenters)r.getCount()>=ye.CENTER_QUORUM&&(t++,e+=r.getEstimatedModuleSize());if(t<3)return!1;const n=e/r;let i=0;for(const t of this.possibleCenters)i+=Math.abs(t.getEstimatedModuleSize()-n);return i<=.05*e}selectBestPatterns(){const t=this.possibleCenters.length;if(t<3)throw new R;const e=this.possibleCenters;let r;if(t>3){let n=0,i=0;for(const t of this.possibleCenters){const e=t.getEstimatedModuleSize();n+=e,i+=e*e}r=n/t;let s=Math.sqrt(i/t-r*r);e.sort(((t,e)=>{const n=Math.abs(e.getEstimatedModuleSize()-r),i=Math.abs(t.getEstimatedModuleSize()-r);return ni?1:0}));const o=Math.max(.2*r,s);for(let t=0;t3;t++){const n=e[t];Math.abs(n.getEstimatedModuleSize()-r)>o&&(e.splice(t,1),t--)}}if(e.length>3){let t=0;for(const r of e)t+=r.getEstimatedModuleSize();r=t/e.length,e.sort(((t,e)=>{if(e.getCount()===t.getCount()){const n=Math.abs(e.getEstimatedModuleSize()-r),i=Math.abs(t.getEstimatedModuleSize()-r);return ni?-1:0}return e.getCount()-t.getCount()})),e.splice(3)}return[e[0],e[1],e[2]]}}ye.CENTER_QUORUM=2,ye.MIN_SKIP=3,ye.MAX_MODULES=57;class Oe{constructor(t){this.image=t}getImage(){return this.image}getResultPointCallback(){return this.resultPointCallback}detect(t){this.resultPointCallback=null==t?null:t.get(C.NEED_RESULT_POINT_CALLBACK);const e=new ye(this.image,this.resultPointCallback).find(t);return this.processFinderPatternInfo(e)}processFinderPatternInfo(t){const e=t.getTopLeft(),r=t.getTopRight(),n=t.getBottomLeft(),i=this.calculateModuleSize(e,r,n);if(i<1)throw new R("No pattern found in proccess finder.");const s=Oe.computeDimension(e,r,n,i),o=Ae.getProvisionalVersionForDimension(s),a=o.getDimensionForVersion()-7;let l=null;if(o.getAlignmentPatternCenters().length>0){const t=r.getX()-e.getX()+n.getX(),s=r.getY()-e.getY()+n.getY(),o=1-3/a,h=Math.floor(e.getX()+o*(t-e.getX())),c=Math.floor(e.getY()+o*(s-e.getY()));for(let t=4;t<=16;t<<=1)try{l=this.findAlignmentInRegion(i,h,c,t);break}catch(t){if(!(t instanceof R))throw t}}const h=Oe.createTransform(e,r,n,l,s),c=Oe.sampleGrid(this.image,h,s);let u;return u=null===l?[n,e,r]:[n,e,r,l],new nt(c,u)}static createTransform(t,e,r,n,i){const s=i-3.5;let o,a,l,h;return null!==n?(o=n.getX(),a=n.getY(),l=s-3,h=l):(o=e.getX()-t.getX()+r.getX(),a=e.getY()-t.getY()+r.getY(),l=s,h=s),at.quadrilateralToQuadrilateral(3.5,3.5,s,3.5,l,h,3.5,s,t.getX(),t.getY(),e.getX(),e.getY(),o,a,r.getX(),r.getY())}static sampleGrid(t,e,r){return ht.getInstance().sampleGridWithTransform(t,r,r,e)}static computeDimension(t,e,r,n){const i=tt.round(rt.distance(t,e)/n),s=tt.round(rt.distance(t,r)/n);let o=Math.floor((i+s)/2)+7;switch(3&o){case 0:o++;break;case 2:o--;break;case 3:throw new R("Dimensions could be not found.")}return o}calculateModuleSize(t,e,r){return(this.calculateModuleSizeOneWay(t,e)+this.calculateModuleSizeOneWay(t,r))/2}calculateModuleSizeOneWay(t,e){const r=this.sizeOfBlackWhiteBlackRunBothWays(Math.floor(t.getX()),Math.floor(t.getY()),Math.floor(e.getX()),Math.floor(e.getY())),n=this.sizeOfBlackWhiteBlackRunBothWays(Math.floor(e.getX()),Math.floor(e.getY()),Math.floor(t.getX()),Math.floor(t.getY()));return isNaN(r)?n/7:isNaN(n)?r/7:(r+n)/14}sizeOfBlackWhiteBlackRunBothWays(t,e,r,n){let i=this.sizeOfBlackWhiteBlackRun(t,e,r,n),s=1,o=t-(r-t);o<0?(s=t/(t-o),o=0):o>=this.image.getWidth()&&(s=(this.image.getWidth()-1-t)/(o-t),o=this.image.getWidth()-1);let a=Math.floor(e-(n-e)*s);return s=1,a<0?(s=e/(e-a),a=0):a>=this.image.getHeight()&&(s=(this.image.getHeight()-1-e)/(a-e),a=this.image.getHeight()-1),o=Math.floor(t+(o-t)*s),i+=this.sizeOfBlackWhiteBlackRun(t,e,o,a),i-1}sizeOfBlackWhiteBlackRun(t,e,r,n){const i=Math.abs(n-e)>Math.abs(r-t);if(i){let i=t;t=e,e=i,i=r,r=n,n=i}const s=Math.abs(r-t),o=Math.abs(n-e);let a=-s/2;const l=t0){if(d===n)break;d+=h,a-=s}}return 2===c?tt.distance(r+l,n,t,e):NaN}findAlignmentInRegion(t,e,r,n){const i=Math.floor(n*t),s=Math.max(0,e-i),o=Math.min(this.image.getWidth()-1,e+i);if(o-s<3*t)throw new R("Alignment top exceeds estimated module size.");const a=Math.max(0,r-i),l=Math.min(this.image.getHeight()-1,r+i);if(l-a<3*t)throw new R("Alignment bottom exceeds estimated module size.");return new Re(this.image,s,a,o-s,l-a,t,this.resultPointCallback).find()}}class Me{constructor(){this.decoder=new pe}getDecoder(){return this.decoder}decode(t,e){let r,n;if(null!=e&&void 0!==e.get(C.PURE_BARCODE)){const i=Me.extractPureBits(t.getBlackMatrix());r=this.decoder.decodeBitMatrix(i,e),n=Me.NO_POINTS}else{const i=new Oe(t.getBlackMatrix()).detect(e);r=this.decoder.decodeBitMatrix(i.getBits(),e),n=i.getPoints()}r.getOther()instanceof Se&&r.getOther().applyMirroredCorrection(n);const i=new F(r.getText(),r.getRawBytes(),void 0,n,v.QR_CODE,void 0),s=r.getByteSegments();null!==s&&i.putMetadata(W.BYTE_SEGMENTS,s);const o=r.getECLevel();return null!==o&&i.putMetadata(W.ERROR_CORRECTION_LEVEL,o),r.hasStructuredAppend()&&(i.putMetadata(W.STRUCTURED_APPEND_SEQUENCE,r.getStructuredAppendSequenceNumber()),i.putMetadata(W.STRUCTURED_APPEND_PARITY,r.getStructuredAppendParity())),i}reset(){}static extractPureBits(t){const e=t.getTopLeftOnBit(),r=t.getBottomRightOnBit();if(null===e||null===r)throw new R;const n=this.moduleSize(e,t);let i=e[1],s=r[1],o=e[0],a=r[0];if(o>=a||i>=s)throw new R;if(s-i!=a-o&&(a=o+(s-i),a>=t.getWidth()))throw new R;const l=Math.round((a-o+1)/n),h=Math.round((s-i+1)/n);if(l<=0||h<=0)throw new R;if(h!==l)throw new R;const c=Math.floor(n/2);i+=c,o+=c;const u=o+Math.floor((l-1)*n)-a;if(u>0){if(u>c)throw new R;o-=u}const d=i+Math.floor((h-1)*n)-s;if(d>0){if(d>c)throw new R;i-=d}const g=new T(l,h);for(let e=0;e0;){const o=Pe.findGuardPattern(t,i,--n,r,!1,s,l);if(null==o){n++;break}e=o}o[0]=new rt(e[0],n),o[1]=new rt(e[1],n),a=!0;break}}let h=n+1;if(a){let n=0,i=Int32Array.from([Math.trunc(o[0].getX()),Math.trunc(o[1].getX())]);for(;hPe.SKIPPED_ROW_COUNT_MAX)break;n++}}h-=n+1,o[2]=new rt(i[0],h),o[3]=new rt(i[1],h)}return h-n0&&l++s?n-s:s-n;if(l>r)return 1/0;a+=l}return a/i}}Pe.INDEXES_START_PATTERN=Int32Array.from([0,4,1,5]),Pe.INDEXES_STOP_PATTERN=Int32Array.from([6,2,7,3]),Pe.MAX_AVG_VARIANCE=.42,Pe.MAX_INDIVIDUAL_VARIANCE=.8,Pe.START_PATTERN=Int32Array.from([8,1,1,1,1,1,1,3]),Pe.STOP_PATTERN=Int32Array.from([7,1,1,3,1,1,1,2,1]),Pe.MAX_PIXEL_DRIFT=3,Pe.MAX_PATTERN_DRIFT=5,Pe.SKIPPED_ROW_COUNT_MAX=25,Pe.ROW_STEP=5,Pe.BARCODE_MIN_HEIGHT=10;class Le{constructor(t,e){if(0===e.length)throw new o;this.field=t;let r=e.length;if(r>1&&0===e[0]){let t=1;for(;tr.length){let t=e;e=r,r=t}let n=new Int32Array(r.length),i=r.length-e.length;c.arraycopy(r,0,n,0,i);for(let t=i;t=0;e--){let r=this.getCoefficient(e);0!==r&&(r<0?(t.append(" - "),r=-r):t.length()>0&&t.append(" + "),0!==e&&1===r||t.append(r),0!==e&&(1===e?t.append("x"):(t.append("x^"),t.append(e))))}return t.toString()}}class Fe extends class{add(t,e){return(t+e)%this.modulus}subtract(t,e){return(this.modulus+t-e)%this.modulus}exp(t){return this.expTable[t]}log(t){if(0===t)throw new o;return this.logTable[t]}inverse(t){if(0===t)throw new K;return this.expTable[this.modulus-this.logTable[t]-1]}multiply(t,e){return 0===t||0===e?0:this.expTable[(this.logTable[t]+this.logTable[e])%(this.modulus-1)]}getSize(){return this.modulus}equals(t){return t===this}}{constructor(t,e){super(),this.modulus=t,this.expTable=new Int32Array(t),this.logTable=new Int32Array(t);let r=1;for(let n=0;n0;t--){let r=n.evaluateAt(this.field.exp(t));i[e-t]=r,0!==r&&(s=!0)}if(!s)return 0;let o=this.field.getOne();if(null!=r)for(const e of r){let r=this.field.exp(t.length-1-e),n=new Le(this.field,new Int32Array([this.field.subtract(0,r),1]));o=o.multiply(n)}let a=new Le(this.field,i),h=this.runEuclideanAlgorithm(this.field.buildMonomial(e,1),a,e),c=h[0],u=h[1],d=this.findErrorLocations(c),g=this.findErrorMagnitudes(u,c,d);for(let e=0;e=Math.round(r/2);){let t=n,e=s;if(n=i,s=o,n.isZero())throw l.getChecksumInstance();i=t;let r=this.field.getZero(),a=n.getCoefficient(n.getDegree()),h=this.field.inverse(a);for(;i.getDegree()>=n.getDegree()&&!i.isZero();){let t=i.getDegree()-n.getDegree(),e=this.field.multiply(i.getCoefficient(i.getDegree()),h);r=r.add(this.field.buildMonomial(t,e)),i=i.subtract(n.multiplyByMonomial(t,e))}o=r.multiply(s).subtract(e).negative()}let a=o.getCoefficient(0);if(0===a)throw l.getChecksumInstance();let h=this.field.inverse(a);return[o.multiply(h),i.multiply(h)]}findErrorLocations(t){let e=t.getDegree(),r=new Int32Array(e),n=0;for(let i=1;i0){let e=r?this.topLeft:this.topRight,i=Math.trunc(e.getY()-t);i<0&&(i=0);let o=new rt(e.getX(),i);r?n=o:s=o}if(e>0){let t=r?this.bottomLeft:this.bottomRight,n=Math.trunc(t.getY()+e);n>=this.image.getHeight()&&(n=this.image.getHeight()-1);let s=new rt(t.getX(),n);r?i=s:o=s}return new ve(this.image,n,i,s,o)}getMinX(){return this.minX}getMaxX(){return this.maxX}getMinY(){return this.minY}getMaxY(){return this.maxY}getTopLeft(){return this.topLeft}getTopRight(){return this.topRight}getBottomLeft(){return this.bottomLeft}getBottomRight(){return this.bottomRight}}class xe{constructor(t,e,r,n){this.columnCount=t,this.errorCorrectionLevel=n,this.rowCountUpperPart=e,this.rowCountLowerPart=r,this.rowCount=e+r}getColumnCount(){return this.columnCount}getErrorCorrectionLevel(){return this.errorCorrectionLevel}getRowCount(){return this.rowCount}getRowCountUpperPart(){return this.rowCountUpperPart}getRowCountLowerPart(){return this.rowCountLowerPart}}class Ve{constructor(){this.buffer=""}static form(t,e){let r=-1;return t.replace(/%(-)?(0?[0-9]+)?([.][0-9]+)?([#][0-9]+)?([scfpexd%])/g,(function(t,n,i,s,o,a){if("%%"===t)return"%";if(void 0===e[++r])return;t=s?parseInt(s.substr(1)):void 0;let l,h=o?parseInt(o.substr(1)):void 0;switch(a){case"s":l=e[r];break;case"c":l=e[r][0];break;case"f":l=parseFloat(e[r]).toFixed(t);break;case"p":l=parseFloat(e[r]).toPrecision(t);break;case"e":l=parseFloat(e[r]).toExponential(t);break;case"x":l=parseInt(e[r]).toString(h||16);break;case"d":l=parseFloat(parseInt(e[r],h||10).toPrecision(t)).toFixed(0)}l="object"==typeof l?JSON.stringify(l):(+l).toString(h);let c=parseInt(i),u=i&&i[0]+""=="0"?"0":" ";for(;l.length=0&&(e=this.codewords[n],null!=e))return e;if(n=this.imageRowToCodewordIndex(t)+r,nr,getValue:()=>n};i.getValue()>t?(t=i.getValue(),e=[],e.push(i.getKey())):i.getValue()===t&&e.push(i.getKey())}return Be.toIntArray(e)}getConfidence(t){return this.values.get(t)}}class Ge extends Ue{constructor(t,e){super(t),this._isLeft=e}setRowNumbers(){for(let t of this.getCodewords())null!=t&&t.setRowNumberAsRowIndicatorColumn()}adjustCompleteIndicatorColumnRowNumbers(t){let e=this.getCodewords();this.setRowNumbers(),this.removeIncorrectCodewords(e,t);let r=this.getBoundingBox(),n=this._isLeft?r.getTopLeft():r.getTopRight(),i=this._isLeft?r.getBottomLeft():r.getBottomRight(),s=this.imageRowToCodewordIndex(Math.trunc(n.getY())),o=this.imageRowToCodewordIndex(Math.trunc(i.getY())),a=-1,l=1,h=0;for(let r=s;r=t.getRowCount()||i>r)e[r]=null;else{let t;t=l>2?(l-2)*i:i;let s=t>=r;for(let n=1;n<=t&&!s;n++)s=null!=e[r-n];s?e[r]=null:(a=n.getRowNumber(),h=1)}}}getRowHeights(){let t=this.getBarcodeMetadata();if(null==t)return null;this.adjustIncompleteIndicatorColumnRowNumbers(t);let e=new Int32Array(t.getRowCount());for(let t of this.getCodewords())if(null!=t){let r=t.getRowNumber();if(r>=e.length)continue;e[r]++}return e}adjustIncompleteIndicatorColumnRowNumbers(t){let e=this.getBoundingBox(),r=this._isLeft?e.getTopLeft():e.getTopRight(),n=this._isLeft?e.getBottomLeft():e.getBottomRight(),i=this.imageRowToCodewordIndex(Math.trunc(r.getY())),s=this.imageRowToCodewordIndex(Math.trunc(n.getY())),o=this.getCodewords(),a=-1;for(let e=i;e=t.getRowCount()?o[e]=null:a=r.getRowNumber())}}getBarcodeMetadata(){let t=this.getCodewords(),e=new He,r=new He,n=new He,i=new He;for(let s of t){if(null==s)continue;s.setRowNumberAsRowIndicatorColumn();let t=s.getValue()%30,o=s.getRowNumber();switch(this._isLeft||(o+=2),o%3){case 0:r.setValue(3*t+1);break;case 1:i.setValue(t/3),n.setValue(t%3);break;case 2:e.setValue(t+1)}}if(0===e.getValue().length||0===r.getValue().length||0===n.getValue().length||0===i.getValue().length||e.getValue()[0]<1||r.getValue()[0]+n.getValue()[0]Be.MAX_ROWS_IN_BARCODE)return null;let s=new xe(e.getValue()[0],r.getValue()[0],n.getValue()[0],i.getValue()[0]);return this.removeIncorrectCodewords(t,s),s}removeIncorrectCodewords(t,e){for(let r=0;re.getRowCount())t[r]=null;else switch(this._isLeft||(s+=2),s%3){case 0:3*i+1!==e.getRowCountUpperPart()&&(t[r]=null);break;case 1:Math.trunc(i/3)===e.getErrorCorrectionLevel()&&i%3===e.getRowCountLowerPart()||(t[r]=null);break;case 2:i+1!==e.getColumnCount()&&(t[r]=null)}}}isLeft(){return this._isLeft}toString(){return"IsLeft: "+this._isLeft+"\n"+super.toString()}}class Xe{constructor(t,e){this.ADJUST_ROW_NUMBER_SKIP=2,this.barcodeMetadata=t,this.barcodeColumnCount=t.getColumnCount(),this.boundingBox=e,this.detectionResultColumns=new Array(this.barcodeColumnCount+2)}getDetectionResultColumns(){this.adjustIndicatorColumnRowNumbers(this.detectionResultColumns[0]),this.adjustIndicatorColumnRowNumbers(this.detectionResultColumns[this.barcodeColumnCount+1]);let t,e=Be.MAX_CODEWORDS_IN_BARCODE;do{t=e,e=this.adjustRowNumbersAndGetCount()}while(e>0&&e0&&i0&&(o[0]=r[e-1],o[4]=i[e-1],o[5]=s[e-1]),e>1&&(o[8]=r[e-2],o[10]=i[e-2],o[11]=s[e-2]),e>=1;r=1&e,ze.RATIOS_TABLE[t]||(ze.RATIOS_TABLE[t]=new Array(Be.BARS_IN_MODULE)),ze.RATIOS_TABLE[t][Be.BARS_IN_MODULE-n-1]=Math.fround(i/Be.MODULES_IN_CODEWORD)}}this.bSymbolTableReady=!0}static getDecodedValue(t){let e=ze.getDecodedCodewordValue(ze.sampleBitCounts(t));return-1!==e?e:ze.getClosestDecodedValue(t)}static sampleBitCounts(t){let e=tt.sum(t),r=new Int32Array(Be.BARS_IN_MODULE),n=0,i=0;for(let s=0;s1)for(let n=0;n=n)break}enew Array(Be.BARS_IN_MODULE)));class Ye{constructor(){this.segmentCount=-1,this.fileSize=-1,this.timestamp=-1,this.checksum=-1}getSegmentIndex(){return this.segmentIndex}setSegmentIndex(t){this.segmentIndex=t}getFileId(){return this.fileId}setFileId(t){this.fileId=t}getOptionalData(){return this.optionalData}setOptionalData(t){this.optionalData=t}isLastSegment(){return this.lastSegment}setLastSegment(t){this.lastSegment=t}getSegmentCount(){return this.segmentCount}setSegmentCount(t){this.segmentCount=t}getSender(){return this.sender||null}setSender(t){this.sender=t}getAddressee(){return this.addressee||null}setAddressee(t){this.addressee=t}getFileName(){return this.fileName}setFileName(t){this.fileName=t}getFileSize(){return this.fileSize}setFileSize(t){this.fileSize=t}getChecksum(){return this.checksum}setChecksum(t){this.checksum=t}getTimestamp(){return this.timestamp}setTimestamp(t){this.timestamp=t}}class Ze{static parseLong(t,e){return parseInt(t,e)}}class Ke extends i{}Ke.kind="NullPointerException";class qe extends i{}class Qe extends class{writeBytes(t){this.writeBytesOffset(t,0,t.length)}writeBytesOffset(t,e,r){if(null==t)throw new Ke;if(e<0||e>t.length||r<0||e+r>t.length||e+r<0)throw new u;if(0!==r)for(let n=0;n0&&this.grow(t)}grow(t){let e=this.buf.length<<1;if(e-t<0&&(e=t),e<0){if(t<0)throw new qe;e=f.MAX_VALUE}this.buf=g.copyOfUint8Array(this.buf,e)}write(t){this.ensureCapacity(this.count+1),this.buf[this.count]=t,this.count+=1}writeBytesOffset(t,e,r){if(e<0||e>t.length||r<0||e+r-t.length>0)throw new u;this.ensureCapacity(this.count+r),c.arraycopy(t,e,this.buf,this.count,r),this.count+=r}writeTo(t){t.writeBytesOffset(this.buf,0,this.count)}reset(){this.count=0}toByteArray(){return g.copyOfUint8Array(this.buf,this.count)}size(){return this.count}toString(t){return t?"string"==typeof t?this.toString_string(t):this.toString_number(t):this.toString_void()}toString_void(){return new String(this.buf).toString()}toString_string(t){return new String(this.buf).toString()}toString_number(t){return new String(this.buf).toString()}close(){}}function je(){if("undefined"!=typeof window)return window.BigInt||null;if("undefined"!=typeof global)return global.BigInt||null;if("undefined"!=typeof self)return self.BigInt||null;throw new Error("Can't search globals for BigInt!")}let Je;function $e(t){if(void 0===Je&&(Je=je()),null===Je)throw new Error("BigInt is not supported!");return Je(t)}!function(t){t[t.ALPHA=0]="ALPHA",t[t.LOWER=1]="LOWER",t[t.MIXED=2]="MIXED",t[t.PUNCT=3]="PUNCT",t[t.ALPHA_SHIFT=4]="ALPHA_SHIFT",t[t.PUNCT_SHIFT=5]="PUNCT_SHIFT"}(X||(X={}));class tr{static decode(t,e){let r=new p(""),n=m.ISO8859_1;r.enableDecoding(n);let i=1,s=t[i++],o=new Ye;for(;it[0])throw E.getFormatInstance();let n=new Int32Array(tr.NUMBER_OF_SEQUENCE_CODEWORDS);for(let r=0;r0){for(let t=0;t<6;++t)s.write(Number($e(a)>>$e(8*(5-t))));a=0,o=0}}n===e[0]&&r0){for(let t=0;t<6;++t)s.write(Number($e(a)>>$e(8*(5-t))));a=0,o=0}}}return i.append(I.decode(s.toByteArray(),r)),n}static numericCompaction(t,e,r){let n=0,i=!1,s=new Int32Array(tr.MAX_NUMERIC_CODEWORDS);for(;e0&&(r.append(tr.decodeBase900toBase10(s,n)),n=0)}return e}static decodeBase900toBase10(t,e){let r=$e(0);for(let n=0;n@[\\]_`~!\r\t,:\n-.$/\"|*()?{}'",tr.MIXED_CHARS="0123456789&\r\t,:#-.$/+%*=^",tr.EXP900=je()?function(){let t=[];t[0]=$e(1);let e=$e(900);t[1]=e;for(let r=2;r<16;r++)t[r]=t[r-1]*e;return t}():[],tr.NUMBER_OF_SEQUENCE_CODEWORDS=2;class er{constructor(){}static decode(t,e,r,n,i,s,o){let a,l=new ve(t,e,r,n,i),h=null,c=null;for(let r=!0;;r=!1){if(null!=e&&(h=er.getRowIndicatorColumn(t,l,e,!0,s,o)),null!=n&&(c=er.getRowIndicatorColumn(t,l,n,!1,s,o)),a=er.merge(h,c),null==a)throw R.getNotFoundInstance();let i=a.getBoundingBox();if(!r||null==i||!(i.getMinY()l.getMaxY()))break;l=i}a.setBoundingBox(l);let u=a.getBarcodeColumnCount()+1;a.setDetectionResultColumn(0,h),a.setDetectionResultColumn(u,c);let d=null!=h;for(let e=1;e<=u;e++){let r,n=d?e:u-e;if(void 0!==a.getDetectionResultColumn(n))continue;r=0===n||n===u?new Ge(l,0===n):new Ue(l),a.setDetectionResultColumn(n,r);let i=-1,h=i;for(let e=l.getMinY();e<=l.getMaxY();e++){if(i=er.getStartColumn(a,n,e,d),i<0||i>l.getMaxX()){if(-1===h)continue;i=h}let c=er.detectCodeword(t,l.getMinX(),l.getMaxX(),d,i,e,s,o);null!=c&&(r.setCodeword(e,c),h=i,s=Math.min(s,c.getWidth()),o=Math.max(o,c.getWidth()))}}return er.createDecoderResult(a)}static merge(t,e){if(null==t&&null==e)return null;let r=er.getBarcodeMetadata(t,e);if(null==r)return null;let n=ve.merge(er.adjustBoundingBox(t),er.adjustBoundingBox(e));return new Xe(r,n)}static adjustBoundingBox(t){if(null==t)return null;let e=t.getRowHeights();if(null==e)return null;let r=er.getMax(e),n=0;for(let t of e)if(n+=r-t,t>0)break;let i=t.getCodewords();for(let t=0;n>0&&null==i[t];t++)n--;let s=0;for(let t=e.length-1;t>=0&&(s+=r-e[t],!(e[t]>0));t--);for(let t=i.length-1;s>0&&null==i[t];t--)s--;return t.getBoundingBox().addMissingRows(n,s,t.isLeft())}static getMax(t){let e=-1;for(let r of t)e=Math.max(e,r);return e}static getBarcodeMetadata(t,e){let r,n;return null==t||null==(r=t.getBarcodeMetadata())?null==e?null:e.getBarcodeMetadata():null==e||null==(n=e.getBarcodeMetadata())?r:r.getColumnCount()!==n.getColumnCount()&&r.getErrorCorrectionLevel()!==n.getErrorCorrectionLevel()&&r.getRowCount()!==n.getRowCount()?null:r}static getRowIndicatorColumn(t,e,r,n,i,s){let o=new Ge(e,n);for(let a=0;a<2;a++){let l=0===a?1:-1,h=Math.trunc(Math.trunc(r.getX()));for(let a=Math.trunc(Math.trunc(r.getY()));a<=e.getMaxY()&&a>=e.getMinY();a+=l){let e=er.detectCodeword(t,0,t.getWidth(),n,h,a,i,s);null!=e&&(o.setCodeword(a,e),h=n?e.getStartX():e.getEndX())}}return o}static adjustCodewordCount(t,e){let r=e[0][1],n=r.getValue(),i=t.getBarcodeColumnCount()*t.getBarcodeRowCount()-er.getNumberOfECCodeWords(t.getBarcodeECLevel());if(0===n.length){if(i<1||i>Be.MAX_CODEWORDS_IN_BARCODE)throw R.getNotFoundInstance();r.setValue(i)}else n[0]!==i&&r.setValue(i)}static createDecoderResult(t){let e=er.createBarcodeMatrix(t);er.adjustCodewordCount(t,e);let r=new Array,n=new Int32Array(t.getBarcodeRowCount()*t.getBarcodeColumnCount()),i=[],s=new Array;for(let o=0;o0;){for(let t=0;tnew Array(t.getBarcodeColumnCount()+2)));for(let t=0;t=0){if(n>=e.length)continue;e[n][r].setValue(t.getValue())}}r++}return e}static isValidBarcodeColumn(t,e){return e>=0&&e<=t.getBarcodeColumnCount()+1}static getStartColumn(t,e,r,n){let i=n?1:-1,s=null;if(er.isValidBarcodeColumn(t,e-i)&&(s=t.getDetectionResultColumn(e-i).getCodeword(r)),null!=s)return n?s.getEndX():s.getStartX();if(s=t.getDetectionResultColumn(e).getCodewordNearby(r),null!=s)return n?s.getStartX():s.getEndX();if(er.isValidBarcodeColumn(t,e-i)&&(s=t.getDetectionResultColumn(e-i).getCodewordNearby(r)),null!=s)return n?s.getEndX():s.getStartX();let o=0;for(;er.isValidBarcodeColumn(t,e-i);){e-=i;for(let r of t.getDetectionResultColumn(e).getCodewords())if(null!=r)return(n?r.getEndX():r.getStartX())+i*o*(r.getEndX()-r.getStartX());o++}return n?t.getBoundingBox().getMinX():t.getBoundingBox().getMaxX()}static detectCodeword(t,e,r,n,i,s,o,a){i=er.adjustCodewordStartColumn(t,e,r,n,i,s);let l,h=er.getModuleBitCount(t,e,r,n,i,s);if(null==h)return null;let c=tt.sum(h);if(n)l=i+c;else{for(let t=0;t=e)&&l=e:oer.CODEWORD_SKEW_SIZE)return i;o+=a}a=-a,n=!n}return o}static checkCodewordSkew(t,e,r){return e-er.CODEWORD_SKEW_SIZE<=t&&t<=r+er.CODEWORD_SKEW_SIZE}static decodeCodewords(t,e,r){if(0===t.length)throw E.getFormatInstance();let n=1<r/2+er.MAX_ERRORS||r<0||r>er.MAX_EC_CODEWORDS)throw l.getChecksumInstance();return er.errorCorrection.decode(t,r,e)}static verifyCodewordCount(t,e){if(t.length<4)throw E.getFormatInstance();let r=t[0];if(r>t.length)throw E.getFormatInstance();if(0===r){if(!(e>=1;return e}static getCodewordBucketNumber(t){return t instanceof Int32Array?this.getCodewordBucketNumber_Int32Array(t):this.getCodewordBucketNumber_number(t)}static getCodewordBucketNumber_number(t){return er.getCodewordBucketNumber(er.getBitCountForCodeword(t))}static getCodewordBucketNumber_Int32Array(t){return(t[0]-t[2]+t[4]-t[6]+9)%9}static toString(t){let e=new Ve;for(let r=0;rt))}static getMaxWidth(t,e){return null==t||null==e?0:Math.trunc(Math.abs(t.getX()-e.getX()))}static getMinWidth(t,e){return null==t||null==e?f.MAX_VALUE:Math.trunc(Math.abs(t.getX()-e.getX()))}static getMaxCodewordWidth(t){return Math.floor(Math.max(Math.max(rr.getMaxWidth(t[0],t[4]),rr.getMaxWidth(t[6],t[2])*Be.MODULES_IN_CODEWORD/Be.MODULES_IN_STOP_PATTERN),Math.max(rr.getMaxWidth(t[1],t[5]),rr.getMaxWidth(t[7],t[3])*Be.MODULES_IN_CODEWORD/Be.MODULES_IN_STOP_PATTERN)))}static getMinCodewordWidth(t){return Math.floor(Math.min(Math.min(rr.getMinWidth(t[0],t[4]),rr.getMinWidth(t[6],t[2])*Be.MODULES_IN_CODEWORD/Be.MODULES_IN_STOP_PATTERN),Math.min(rr.getMinWidth(t[1],t[5]),rr.getMinWidth(t[7],t[3])*Be.MODULES_IN_CODEWORD/Be.MODULES_IN_STOP_PATTERN)))}reset(){}}class nr extends i{}nr.kind="ReaderException";class ir{decode(t,e){return this.setHints(e),this.decodeInternal(t)}decodeWithState(t){return null!==this.readers&&void 0!==this.readers||this.setHints(null),this.decodeInternal(t)}setHints(t){this.hints=t;const e=null!=t&&void 0!==t.get(C.TRY_HARDER),r=null==t?null:t.get(C.POSSIBLE_FORMATS),n=new Array;if(null!=r){const i=r.some((t=>t===v.UPC_A||t===v.UPC_E||t===v.EAN_13||t===v.EAN_8||t===v.CODABAR||t===v.CODE_39||t===v.CODE_93||t===v.CODE_128||t===v.ITF||t===v.RSS_14||t===v.RSS_EXPANDED));i&&!e&&n.push(new ee(t)),r.includes(v.QR_CODE)&&n.push(new Me),r.includes(v.DATA_MATRIX)&&n.push(new ue),r.includes(v.AZTEC)&&n.push(new dt),r.includes(v.PDF_417)&&n.push(new rr),i&&e&&n.push(new ee(t))}0===n.length&&(e||n.push(new ee(t)),n.push(new Me),n.push(new ue),n.push(new dt),n.push(new rr),e&&n.push(new ee(t))),this.readers=n}reset(){if(null!==this.readers)for(const t of this.readers)t.reset()}decodeInternal(t){if(null===this.readers)throw new nr("No readers where selected, nothing can be read.");for(const e of this.readers)try{return e.decode(t,this.hints)}catch(t){if(t instanceof nr)continue}throw new R("No MultiFormat Readers were able to detect the code.")}}var sr;!function(t){t[t.ERROR_CORRECTION=0]="ERROR_CORRECTION",t[t.CHARACTER_SET=1]="CHARACTER_SET",t[t.DATA_MATRIX_SHAPE=2]="DATA_MATRIX_SHAPE",t[t.MIN_SIZE=3]="MIN_SIZE",t[t.MAX_SIZE=4]="MAX_SIZE",t[t.MARGIN=5]="MARGIN",t[t.PDF417_COMPACT=6]="PDF417_COMPACT",t[t.PDF417_COMPACTION=7]="PDF417_COMPACTION",t[t.PDF417_DIMENSIONS=8]="PDF417_DIMENSIONS",t[t.AZTEC_LAYERS=9]="AZTEC_LAYERS",t[t.QR_VERSION=10]="QR_VERSION"}(sr||(sr={}));var or=sr;class ar{constructor(t){this.field=t,this.cachedGenerators=[],this.cachedGenerators.push(new Z(t,Int32Array.from([1])))}buildGenerator(t){const e=this.cachedGenerators;if(t>=e.length){let r=e[e.length-1];const n=this.field;for(let i=e.length;i<=t;i++){const t=r.multiply(new Z(n,Int32Array.from([1,n.exp(i-1+n.getGeneratorBase())])));e.push(t),r=t}}return e[t]}encode(t,e){if(0===e)throw new o("No error correction bytes");const r=t.length-e;if(r<=0)throw new o("No data bytes provided");const n=this.buildGenerator(e),i=new Int32Array(r);c.arraycopy(t,0,i,0,r);let s=new Z(this.field,i);s=s.multiplyByMonomial(e,1);const a=s.divide(n)[1].getCoefficients(),l=e-a.length;for(let e=0;e=5&&(r+=lr.N1+(n-5)),n=1,o=i)}n>=5&&(r+=lr.N1+(n-5))}return r}}lr.N1=3,lr.N2=3,lr.N3=40,lr.N4=10;class hr{constructor(t,e){this.width=t,this.height=e;const r=new Array(e);for(let n=0;n!==e;n++)r[n]=new Uint8Array(t);this.bytes=r}getHeight(){return this.height}getWidth(){return this.width}get(t,e){return this.bytes[e][t]}getArray(){return this.bytes}setNumber(t,e,r){this.bytes[e][t]=r}setBoolean(t,e,r){this.bytes[e][t]=r?1:0}clear(t){for(const e of this.bytes)g.fill(e,t)}equals(t){if(!(t instanceof hr))return!1;const e=t;if(this.width!==e.width)return!1;if(this.height!==e.height)return!1;for(let t=0,r=this.height;t>\n"),t.toString()}setMode(t){this.mode=t}setECLevel(t){this.ecLevel=t}setVersion(t){this.version=t}setMaskPattern(t){this.maskPattern=t}setMatrix(t){this.matrix=t}static isValidMaskPattern(t){return t>=0&&t0;){for(6===s&&(s-=1);o>=0&&o=r;)t^=e<=0)for(let t=0;t!==r;t++){const r=n[t];r>=0&&dr.isEmpty(e.get(r,i))&&dr.embedPositionAdjustmentPattern(r-2,i-2,e)}}}}dr.POSITION_DETECTION_PATTERN=Array.from([Int32Array.from([1,1,1,1,1,1,1]),Int32Array.from([1,0,0,0,0,0,1]),Int32Array.from([1,0,1,1,1,0,1]),Int32Array.from([1,0,1,1,1,0,1]),Int32Array.from([1,0,1,1,1,0,1]),Int32Array.from([1,0,0,0,0,0,1]),Int32Array.from([1,1,1,1,1,1,1])]),dr.POSITION_ADJUSTMENT_PATTERN=Array.from([Int32Array.from([1,1,1,1,1]),Int32Array.from([1,0,0,0,1]),Int32Array.from([1,0,1,0,1]),Int32Array.from([1,0,0,0,1]),Int32Array.from([1,1,1,1,1])]),dr.POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE=Array.from([Int32Array.from([-1,-1,-1,-1,-1,-1,-1]),Int32Array.from([6,18,-1,-1,-1,-1,-1]),Int32Array.from([6,22,-1,-1,-1,-1,-1]),Int32Array.from([6,26,-1,-1,-1,-1,-1]),Int32Array.from([6,30,-1,-1,-1,-1,-1]),Int32Array.from([6,34,-1,-1,-1,-1,-1]),Int32Array.from([6,22,38,-1,-1,-1,-1]),Int32Array.from([6,24,42,-1,-1,-1,-1]),Int32Array.from([6,26,46,-1,-1,-1,-1]),Int32Array.from([6,28,50,-1,-1,-1,-1]),Int32Array.from([6,30,54,-1,-1,-1,-1]),Int32Array.from([6,32,58,-1,-1,-1,-1]),Int32Array.from([6,34,62,-1,-1,-1,-1]),Int32Array.from([6,26,46,66,-1,-1,-1]),Int32Array.from([6,26,48,70,-1,-1,-1]),Int32Array.from([6,26,50,74,-1,-1,-1]),Int32Array.from([6,30,54,78,-1,-1,-1]),Int32Array.from([6,30,56,82,-1,-1,-1]),Int32Array.from([6,30,58,86,-1,-1,-1]),Int32Array.from([6,34,62,90,-1,-1,-1]),Int32Array.from([6,28,50,72,94,-1,-1]),Int32Array.from([6,26,50,74,98,-1,-1]),Int32Array.from([6,30,54,78,102,-1,-1]),Int32Array.from([6,28,54,80,106,-1,-1]),Int32Array.from([6,32,58,84,110,-1,-1]),Int32Array.from([6,30,58,86,114,-1,-1]),Int32Array.from([6,34,62,90,118,-1,-1]),Int32Array.from([6,26,50,74,98,122,-1]),Int32Array.from([6,30,54,78,102,126,-1]),Int32Array.from([6,26,52,78,104,130,-1]),Int32Array.from([6,30,56,82,108,134,-1]),Int32Array.from([6,34,60,86,112,138,-1]),Int32Array.from([6,30,58,86,114,142,-1]),Int32Array.from([6,34,62,90,118,146,-1]),Int32Array.from([6,30,54,78,102,126,150]),Int32Array.from([6,24,50,76,102,128,154]),Int32Array.from([6,28,54,80,106,132,158]),Int32Array.from([6,32,58,84,110,136,162]),Int32Array.from([6,26,54,82,110,138,166]),Int32Array.from([6,30,58,86,114,142,170])]),dr.TYPE_INFO_COORDINATES=Array.from([Int32Array.from([8,0]),Int32Array.from([8,1]),Int32Array.from([8,2]),Int32Array.from([8,3]),Int32Array.from([8,4]),Int32Array.from([8,5]),Int32Array.from([8,7]),Int32Array.from([8,8]),Int32Array.from([7,8]),Int32Array.from([5,8]),Int32Array.from([4,8]),Int32Array.from([3,8]),Int32Array.from([2,8]),Int32Array.from([1,8]),Int32Array.from([0,8])]),dr.VERSION_INFO_POLY=7973,dr.TYPE_INFO_POLY=1335,dr.TYPE_INFO_MASK_PATTERN=21522;class gr{constructor(t,e){this.dataBytes=t,this.errorCorrectionBytes=e}getDataBytes(){return this.dataBytes}getErrorCorrectionBytes(){return this.errorCorrectionBytes}}class fr{constructor(){}static calculateMaskPenalty(t){return lr.applyMaskPenaltyRule1(t)+lr.applyMaskPenaltyRule2(t)+lr.applyMaskPenaltyRule3(t)+lr.applyMaskPenaltyRule4(t)}static encode(t,e,r=null){let n=fr.DEFAULT_BYTE_MODE_ENCODING;const i=null!==r&&void 0!==r.get(or.CHARACTER_SET);i&&(n=r.get(or.CHARACTER_SET).toString());const s=this.chooseMode(t,n),o=new w;if(s===_e.BYTE&&(i||fr.DEFAULT_BYTE_MODE_ENCODING!==n)){const t=m.getCharacterSetECIByName(n);void 0!==t&&this.appendECI(t,o)}this.appendModeInfo(s,o);const a=new w;let l;if(this.appendBytes(t,s,a,n),null!==r&&void 0!==r.get(or.QR_VERSION)){const t=Number.parseInt(r.get(or.QR_VERSION).toString(),10);l=Ae.getVersionForNumber(t);const n=this.calculateBitsNeeded(s,o,a,l);if(!this.willFit(n,l,e))throw new ur("Data too big for requested version")}else l=this.recommendVersion(e,s,o,a);const h=new w;h.appendBitArray(o);const c=s===_e.BYTE?a.getSizeInBytes():t.length;this.appendLengthInfo(c,l,s,h),h.appendBitArray(a);const u=l.getECBlocksForLevel(e),d=l.getTotalCodewords()-u.getTotalECCodewords();this.terminateBits(d,h);const g=this.interleaveWithECBytes(h,l.getTotalCodewords(),d,u.getNumBlocks()),f=new cr;f.setECLevel(e),f.setMode(s),f.setVersion(l);const A=l.getDimensionForVersion(),C=new hr(A,A),E=this.chooseMaskPattern(g,e,l,C);return f.setMaskPattern(E),dr.buildMatrix(g,e,l,E,C),f.setMatrix(C),f}static recommendVersion(t,e,r,n){const i=this.calculateBitsNeeded(e,r,n,Ae.getVersionForNumber(1)),s=this.chooseVersion(i,t),o=this.calculateBitsNeeded(e,r,n,s);return this.chooseVersion(o,t)}static calculateBitsNeeded(t,e,r,n){return e.getSize()+t.getCharacterCountBits(n)+r.getSize()}static getAlphanumericCode(t){return t159)&&(r<224||r>235))return!1}return!0}static chooseMaskPattern(t,e,r,n){let i=Number.MAX_SAFE_INTEGER,s=-1;for(let o=0;o=(t+7)/8}static terminateBits(t,e){const r=8*t;if(e.getSize()>r)throw new ur("data bits cannot fit in the QR Code"+e.getSize()+" > "+r);for(let t=0;t<4&&e.getSize()0)for(let t=n;t<8;t++)e.appendBit(!1);const i=t-e.getSizeInBytes();for(let t=0;t=r)throw new ur("Block ID too large");const o=t%r,a=r-o,l=Math.floor(t/r),h=l+1,c=Math.floor(e/r),u=c+1,d=l-c,g=h-u;if(d!==g)throw new ur("EC bytes mismatch");if(r!==a+o)throw new ur("RS blocks mismatch");if(t!==(c+d)*a+(u+g)*o)throw new ur("Total bytes mismatch");n=1<=0&&e<=9}static appendNumericBytes(t,e){const r=t.length;let n=0;for(;n=33088&&n<=40956?i=n-33088:n>=57408&&n<=60351&&(i=n-49472),-1===i)throw new ur("Invalid byte sequence");const s=192*(i>>8)+(255&i);e.appendBits(s,13)}}static appendECI(t,e){e.appendBits(_e.ECI.getBits(),4),e.appendBits(t.getValue(),8)}}fr.ALPHANUMERIC_TABLE=Int32Array.from([-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,36,-1,-1,-1,37,38,-1,-1,-1,-1,39,40,-1,41,42,43,0,1,2,3,4,5,6,7,8,9,44,-1,-1,-1,-1,-1,-1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,-1,-1,-1,-1,-1]),fr.DEFAULT_BYTE_MODE_ENCODING=m.UTF8.getName();class wr{write(t,e,r,n=null){if(0===t.length)throw new o("Found empty contents");if(e<0||r<0)throw new o("Requested dimensions are too small: "+e+"x"+r);let i=de.L,s=wr.QUIET_ZONE_SIZE;null!==n&&(void 0!==n.get(or.ERROR_CORRECTION)&&(i=de.fromString(n.get(or.ERROR_CORRECTION).toString())),void 0!==n.get(or.MARGIN)&&(s=Number.parseInt(n.get(or.MARGIN).toString(),10)));const a=fr.encode(t,i,n);return this.renderResult(a,e,r,s)}writeToDom(t,e,r,n,i=null){"string"==typeof t&&(t=document.querySelector(t));const s=this.write(e,r,n,i);t&&t.appendChild(s)}renderResult(t,e,r,n){const i=t.getMatrix();if(null===i)throw new j;const s=i.getWidth(),o=i.getHeight(),a=s+2*n,l=o+2*n,h=Math.max(e,a),c=Math.max(r,l),u=Math.min(Math.floor(h/a),Math.floor(c/l)),d=Math.floor((h-s*u)/2),g=Math.floor((c-o*u)/2),f=this.createSVGElement(h,c);for(let t=0,e=g;te||i+a>r)throw new o("Crop rectangle does not fit within image data.");l&&this.reverseHorizontal(s,a)}getRow(t,e){if(t<0||t>=this.getHeight())throw new o("Requested row is outside the image: "+t);const r=this.getWidth();(null==e||e.length>16&255,s=r>>7&510,o=255&r;i[e]=(n+s+o)/4&255}this.luminances=i}else this.luminances=t;if(void 0===n&&(this.dataWidth=e),void 0===i&&(this.dataHeight=r),void 0===s&&(this.left=0),void 0===a&&(this.top=0),this.left+e>this.dataWidth||this.top+r>this.dataHeight)throw new o("Crop rectangle does not fit within image data.")}getRow(t,e){if(t<0||t>=this.getHeight())throw new o("Requested row is outside the image: "+t);const r=this.getWidth();(null==e||e.length"}}class Tr extends pr{constructor(t,e,r){super(t,0,0),this.binaryShiftStart=e,this.binaryShiftByteCount=r}appendTo(t,e){for(let r=0;r62?t.appendBits(this.binaryShiftByteCount-31,16):0===r?t.appendBits(Math.min(this.binaryShiftByteCount,31),5):t.appendBits(this.binaryShiftByteCount-31,5)),t.appendBits(e[this.binaryShiftStart+r],8)}addBinaryShift(t,e){return new Tr(this,t,e)}toString(){return"<"+this.binaryShiftStart+"::"+(this.binaryShiftStart+this.binaryShiftByteCount-1)+">"}}function Rr(t,e,r){return new pr(t,e,r)}const Nr=["UPPER","LOWER","DIGIT","MIXED","PUNCT"],Dr=new pr(null,0,0),yr=[Int32Array.from([0,327708,327710,327709,656318]),Int32Array.from([590318,0,327710,327709,656318]),Int32Array.from([262158,590300,0,590301,932798]),Int32Array.from([327709,327708,656318,0,327710]),Int32Array.from([327711,656380,656382,656381,0])];const Or=function(t){for(let e of t)g.fill(e,-1);return t[0][4]=0,t[1][4]=0,t[1][0]=28,t[3][4]=0,t[2][4]=0,t[2][0]=15,t}(g.createInt32Array(6,6));class Mr{constructor(t,e,r,n){this.token=t,this.mode=e,this.binaryShiftByteCount=r,this.bitCount=n}getMode(){return this.mode}getToken(){return this.token}getBinaryShiftByteCount(){return this.binaryShiftByteCount}getBitCount(){return this.bitCount}latchAndAppend(t,e){let r=this.bitCount,n=this.token;if(t!==this.mode){let e=yr[this.mode][t];n=Rr(n,65535&e,e>>16),r+=e>>16}let i=2===t?4:5;return n=Rr(n,e,i),new Mr(n,t,0,r+i)}shiftAndAppend(t,e){let r=this.token,n=2===this.mode?4:5;return r=Rr(r,Or[this.mode][t],n),r=Rr(r,e,5),new Mr(r,this.mode,0,this.bitCount+n+5)}addBinaryShiftChar(t){let e=this.token,r=this.mode,n=this.bitCount;if(4===this.mode||2===this.mode){let t=yr[r][0];e=Rr(e,65535&t,t>>16),n+=t>>16,r=0}let i=0===this.binaryShiftByteCount||31===this.binaryShiftByteCount?18:62===this.binaryShiftByteCount?9:8,s=new Mr(e,r,this.binaryShiftByteCount+1,n+i);return 2078===s.binaryShiftByteCount&&(s=s.endBinaryShift(t+1)),s}endBinaryShift(t){if(0===this.binaryShiftByteCount)return this;let e=this.token;return e=function(t,e,r){return new Tr(t,e,r)}(e,t-this.binaryShiftByteCount,this.binaryShiftByteCount),new Mr(e,this.mode,0,this.bitCount)}isBetterThanOrEqualTo(t){let e=this.bitCount+(yr[this.mode][t.mode]>>16);return this.binaryShiftByteCountt.binaryShiftByteCount&&t.binaryShiftByteCount>0&&(e+=10),e<=t.bitCount}toBitArray(t){let e=[];for(let r=this.endBinaryShift(t.length).token;null!==r;r=r.getPrevious())e.unshift(r);let r=new w;for(const n of e)n.appendTo(r,t);return r}toString(){return S.format("%s bits=%d bytes=%d",Nr[this.mode],this.bitCount,this.binaryShiftByteCount)}static calculateBinaryShiftCost(t){return t.binaryShiftByteCount>62?21:t.binaryShiftByteCount>31?20:t.binaryShiftByteCount>0?10:0}}Mr.INITIAL_STATE=new Mr(Dr,0,0,0);const Br=function(t){const e=S.getCharCode(" "),r=S.getCharCode("."),n=S.getCharCode(",");t[0][e]=1;const i=S.getCharCode("Z"),s=S.getCharCode("A");for(let e=s;e<=i;e++)t[0][e]=e-s+2;t[1][e]=1;const o=S.getCharCode("z"),a=S.getCharCode("a");for(let e=a;e<=o;e++)t[1][e]=e-a+2;t[2][e]=1;const l=S.getCharCode("9"),h=S.getCharCode("0");for(let e=h;e<=l;e++)t[2][e]=e-h+2;t[2][n]=12,t[2][r]=13;const c=["\0"," ","","","","","","","","\b","\t","\n","\v","\f","\r","","","","","","@","\\","^","_","`","|","~",""];for(let e=0;e","?","[","]","{","}"];for(let e=0;e0&&(t[4][S.getCharCode(u[e])]=e);return t}(g.createInt32Array(5,256));class br{constructor(t){this.text=t}encode(){const t=S.getCharCode(" "),e=S.getCharCode("\n");let r=Sr.singletonList(Mr.INITIAL_STATE);for(let n=0;n0?(r=br.updateStateListForPair(r,n,i),n++):r=this.updateStateListForChar(r,n)}return Sr.min(r,((t,e)=>t.getBitCount()-e.getBitCount())).toBitArray(this.text)}updateStateListForChar(t,e){const r=[];for(let n of t)this.updateStateForChar(n,e,r);return br.simplifyStates(r)}updateStateForChar(t,e,r){let n=255&this.text[e],i=Br[t.getMode()][n]>0,s=null;for(let o=0;o<=4;o++){let a=Br[o][n];if(a>0){if(null==s&&(s=t.endBinaryShift(e)),!i||o===t.getMode()||2===o){const t=s.latchAndAppend(o,a);r.push(t)}if(!i&&Or[t.getMode()][o]>=0){const t=s.shiftAndAppend(o,a);r.push(t)}}}if(t.getBinaryShiftByteCount()>0||0===Br[t.getMode()][n]){let n=t.addBinaryShiftChar(e);r.push(n)}}static updateStateListForPair(t,e,r){const n=[];for(let i of t)this.updateStateForPair(i,e,r,n);return this.simplifyStates(n)}static updateStateForPair(t,e,r,n){let i=t.endBinaryShift(e);if(n.push(i.latchAndAppend(4,r)),4!==t.getMode()&&n.push(i.shiftAndAppend(4,r)),3===r||4===r){let t=i.latchAndAppend(2,16-r).latchAndAppend(2,1);n.push(t)}if(t.getBinaryShiftByteCount()>0){let r=t.addBinaryShiftChar(e).addBinaryShiftChar(e+1);n.push(r)}}static simplifyStates(t){let e=[];for(const r of t){let t=!0;for(const n of e){if(n.isBetterThanOrEqualTo(r)){t=!1;break}r.isBetterThanOrEqualTo(n)&&(e=e.filter((t=>t!==n)))}t&&e.push(r)}return e}}class Pr{constructor(){}static encodeBytes(t){return Pr.encode(t,Pr.DEFAULT_EC_PERCENT,Pr.DEFAULT_AZTEC_LAYERS)}static encode(t,e,r){let n,i,s,a,l,h=new br(t).encode(),c=f.truncDivision(h.getSize()*e,100)+11,u=h.getSize()+c;if(r!==Pr.DEFAULT_AZTEC_LAYERS){if(n=r<0,i=Math.abs(r),i>(n?Pr.MAX_NB_BITS_COMPACT:Pr.MAX_NB_BITS))throw new o(S.format("Illegal value %s for layers",r));s=Pr.totalBitsInLayer(i,n),a=Pr.WORD_SIZE[i];let t=s-s%a;if(l=Pr.stuffBits(h,a),l.getSize()+c>t)throw new o("Data to large for user specified layer");if(n&&l.getSize()>64*a)throw new o("Data to large for user specified layer")}else{a=0,l=null;for(let t=0;;t++){if(t>Pr.MAX_NB_BITS)throw new o("Data too large for an Aztec code");if(n=t<=3,i=n?t+1:t,s=Pr.totalBitsInLayer(i,n),u>s)continue;null!=l&&a===Pr.WORD_SIZE[i]||(a=Pr.WORD_SIZE[i],l=Pr.stuffBits(h,a));let e=s-s%a;if(!(n&&l.getSize()>64*a)&&l.getSize()+c<=e)break}}let d,g=Pr.generateCheckWords(l,s,a),w=l.getSize()/a,A=Pr.generateModeMessage(n,i,w),C=(n?11:14)+4*i,E=new Int32Array(C);if(n){d=C;for(let t=0;t=n||t.get(s+r))&&(o|=1< r) throw new o("fromIndex(" + e + ") > toIndex(" + r + ")"); + if (e < 0) throw new d(e); + if (r > t) throw new d(r) + } + + static asList(...t) { + return t + } + + static create(t, e, r) { + return Array.from({length: t}).map((t => Array.from({length: e}).fill(r))) + } + + static createInt32Array(t, e, r) { + return Array.from({length: t}).map((t => Int32Array.from({length: e}).fill(r))) + } + + static equals(t, e) { + if (!t) return !1; + if (!e) return !1; + if (!t.length) return !1; + if (!e.length) return !1; + if (t.length !== e.length) return !1; + for (let r = 0, n = t.length; r < n; r++) if (t[r] !== e[r]) return !1; + return !0 + } + + static hashCode(t) { + if (null === t) return 0; + let e = 1; + for (const r of t) e = 31 * e + r; + return e + } + + static fillUint8Array(t, e) { + for (let r = 0; r !== t.length; r++) t[r] = e + } + + static copyOf(t, e) { + return t.slice(0, e) + } + + static copyOfUint8Array(t, e) { + if (t.length <= e) { + const r = new Uint8Array(e); + return r.set(t), r + } + return t.slice(0, e) + } + + static copyOfRange(t, e, r) { + const n = r - e, i = new Int32Array(n); + return c.arraycopy(t, e, i, 0, n), i + } + + static binarySearch(t, e, r) { + void 0 === r && (r = g.numberComparator); + let n = 0, i = t.length - 1; + for (; n <= i;) { + const s = i + n >> 1, o = r(e, t[s]); + if (o > 0) n = s + 1; else { + if (!(o < 0)) return s; + i = s - 1 + } + } + return -n - 1 + } + + static numberComparator(t, e) { + return t - e + } + } + + class f { + static numberOfTrailingZeros(t) { + let e; + if (0 === t) return 32; + let r = 31; + return e = t << 16, 0 !== e && (r -= 16, t = e), e = t << 8, 0 !== e && (r -= 8, t = e), e = t << 4, 0 !== e && (r -= 4, t = e), e = t << 2, 0 !== e && (r -= 2, t = e), r - (t << 1 >>> 31) + } + + static numberOfLeadingZeros(t) { + if (0 === t) return 32; + let e = 1; + return t >>> 16 == 0 && (e += 16, t <<= 16), t >>> 24 == 0 && (e += 8, t <<= 8), t >>> 28 == 0 && (e += 4, t <<= 4), t >>> 30 == 0 && (e += 2, t <<= 2), e -= t >>> 31, e + } + + static toHexString(t) { + return t.toString(16) + } + + static toBinaryString(t) { + return String(parseInt(String(t), 2)) + } + + static bitCount(t) { + return t = (t = (858993459 & (t -= t >>> 1 & 1431655765)) + (t >>> 2 & 858993459)) + (t >>> 4) & 252645135, t += t >>> 8, 63 & (t += t >>> 16) + } + + static truncDivision(t, e) { + return Math.trunc(t / e) + } + + static parseInt(t, e) { + return parseInt(t, e) + } + } + + f.MIN_VALUE_32_BITS = -2147483648, f.MAX_VALUE = Number.MAX_SAFE_INTEGER; + + class w { + constructor(t, e) { + void 0 === t ? (this.size = 0, this.bits = new Int32Array(1)) : (this.size = t, this.bits = null == e ? w.makeArray(t) : e) + } + + getSize() { + return this.size + } + + getSizeInBytes() { + return Math.floor((this.size + 7) / 8) + } + + ensureCapacity(t) { + if (t > 32 * this.bits.length) { + const e = w.makeArray(t); + c.arraycopy(this.bits, 0, e, 0, this.bits.length), this.bits = e + } + } + + get(t) { + return 0 != (this.bits[Math.floor(t / 32)] & 1 << (31 & t)) + } + + set(t) { + this.bits[Math.floor(t / 32)] |= 1 << (31 & t) + } + + flip(t) { + this.bits[Math.floor(t / 32)] ^= 1 << (31 & t) + } + + getNextSet(t) { + const e = this.size; + if (t >= e) return e; + const r = this.bits; + let n = Math.floor(t / 32), i = r[n]; + i &= ~((1 << (31 & t)) - 1); + const s = r.length; + for (; 0 === i;) { + if (++n === s) return e; + i = r[n] + } + const o = 32 * n + f.numberOfTrailingZeros(i); + return o > e ? e : o + } + + getNextUnset(t) { + const e = this.size; + if (t >= e) return e; + const r = this.bits; + let n = Math.floor(t / 32), i = ~r[n]; + i &= ~((1 << (31 & t)) - 1); + const s = r.length; + for (; 0 === i;) { + if (++n === s) return e; + i = ~r[n] + } + const o = 32 * n + f.numberOfTrailingZeros(i); + return o > e ? e : o + } + + setBulk(t, e) { + this.bits[Math.floor(t / 32)] = e + } + + setRange(t, e) { + if (e < t || t < 0 || e > this.size) throw new o; + if (e === t) return; + e--; + const r = Math.floor(t / 32), n = Math.floor(e / 32), i = this.bits; + for (let s = r; s <= n; s++) { + const o = (2 << (s < n ? 31 : 31 & e)) - (1 << (s > r ? 0 : 31 & t)); + i[s] |= o + } + } + + clear() { + const t = this.bits.length, e = this.bits; + for (let r = 0; r < t; r++) e[r] = 0 + } + + isRange(t, e, r) { + if (e < t || t < 0 || e > this.size) throw new o; + if (e === t) return !0; + e--; + const n = Math.floor(t / 32), i = Math.floor(e / 32), s = this.bits; + for (let o = n; o <= i; o++) { + const a = (2 << (o < i ? 31 : 31 & e)) - (1 << (o > n ? 0 : 31 & t)) & 4294967295; + if ((s[o] & a) !== (r ? a : 0)) return !1 + } + return !0 + } + + appendBit(t) { + this.ensureCapacity(this.size + 1), t && (this.bits[Math.floor(this.size / 32)] |= 1 << (31 & this.size)), this.size++ + } + + appendBits(t, e) { + if (e < 0 || e > 32) throw new o("Num bits must be between 0 and 32"); + this.ensureCapacity(this.size + e); + for (let r = e; r > 0; r--) this.appendBit(1 == (t >> r - 1 & 1)) + } + + appendBitArray(t) { + const e = t.size; + this.ensureCapacity(this.size + e); + for (let r = 0; r < e; r++) this.appendBit(t.get(r)) + } + + xor(t) { + if (this.size !== t.size) throw new o("Sizes don't match"); + const e = this.bits; + for (let r = 0, n = e.length; r < n; r++) e[r] ^= t.bits[r] + } + + toBytes(t, e, r, n) { + for (let i = 0; i < n; i++) { + let n = 0; + for (let e = 0; e < 8; e++) this.get(t) && (n |= 1 << 7 - e), t++; + e[r + i] = n + } + } + + getBitArray() { + return this.bits + } + + reverse() { + const t = new Int32Array(this.bits.length), e = Math.floor((this.size - 1) / 32), r = e + 1, n = this.bits; + for (let i = 0; i < r; i++) { + let r = n[i]; + r = r >> 1 & 1431655765 | (1431655765 & r) << 1, r = r >> 2 & 858993459 | (858993459 & r) << 2, r = r >> 4 & 252645135 | (252645135 & r) << 4, r = r >> 8 & 16711935 | (16711935 & r) << 8, r = r >> 16 & 65535 | (65535 & r) << 16, t[e - i] = r + } + if (this.size !== 32 * r) { + const e = 32 * r - this.size; + let n = t[0] >>> e; + for (let i = 1; i < r; i++) { + const r = t[i]; + n |= r << 32 - e, t[i - 1] = n, n = r >>> e + } + t[r - 1] = n + } + this.bits = t + } + + static makeArray(t) { + return new Int32Array(Math.floor((t + 31) / 32)) + } + + equals(t) { + if (!(t instanceof w)) return !1; + const e = t; + return this.size === e.size && g.equals(this.bits, e.bits) + } + + hashCode() { + return 31 * this.size + g.hashCode(this.bits) + } + + toString() { + let t = ""; + for (let e = 0, r = this.size; e < r; e++) 0 == (7 & e) && (t += " "), t += this.get(e) ? "X" : "."; + return t + } + + clone() { + return new w(this.size, this.bits.slice()) + } + } + + !function (t) { + t[t.OTHER = 0] = "OTHER", t[t.PURE_BARCODE = 1] = "PURE_BARCODE", t[t.POSSIBLE_FORMATS = 2] = "POSSIBLE_FORMATS", t[t.TRY_HARDER = 3] = "TRY_HARDER", t[t.CHARACTER_SET = 4] = "CHARACTER_SET", t[t.ALLOWED_LENGTHS = 5] = "ALLOWED_LENGTHS", t[t.ASSUME_CODE_39_CHECK_DIGIT = 6] = "ASSUME_CODE_39_CHECK_DIGIT", t[t.ASSUME_GS1 = 7] = "ASSUME_GS1", t[t.RETURN_CODABAR_START_END = 8] = "RETURN_CODABAR_START_END", t[t.NEED_RESULT_POINT_CALLBACK = 9] = "NEED_RESULT_POINT_CALLBACK", t[t.ALLOWED_EAN_EXTENSIONS = 10] = "ALLOWED_EAN_EXTENSIONS" + }(r || (r = {})); + var A, C = r; + + class E extends i { + static getFormatInstance() { + return new E + } + } + + E.kind = "FormatException", function (t) { + t[t.Cp437 = 0] = "Cp437", t[t.ISO8859_1 = 1] = "ISO8859_1", t[t.ISO8859_2 = 2] = "ISO8859_2", t[t.ISO8859_3 = 3] = "ISO8859_3", t[t.ISO8859_4 = 4] = "ISO8859_4", t[t.ISO8859_5 = 5] = "ISO8859_5", t[t.ISO8859_6 = 6] = "ISO8859_6", t[t.ISO8859_7 = 7] = "ISO8859_7", t[t.ISO8859_8 = 8] = "ISO8859_8", t[t.ISO8859_9 = 9] = "ISO8859_9", t[t.ISO8859_10 = 10] = "ISO8859_10", t[t.ISO8859_11 = 11] = "ISO8859_11", t[t.ISO8859_13 = 12] = "ISO8859_13", t[t.ISO8859_14 = 13] = "ISO8859_14", t[t.ISO8859_15 = 14] = "ISO8859_15", t[t.ISO8859_16 = 15] = "ISO8859_16", t[t.SJIS = 16] = "SJIS", t[t.Cp1250 = 17] = "Cp1250", t[t.Cp1251 = 18] = "Cp1251", t[t.Cp1252 = 19] = "Cp1252", t[t.Cp1256 = 20] = "Cp1256", t[t.UnicodeBigUnmarked = 21] = "UnicodeBigUnmarked", t[t.UTF8 = 22] = "UTF8", t[t.ASCII = 23] = "ASCII", t[t.Big5 = 24] = "Big5", t[t.GB18030 = 25] = "GB18030", t[t.EUC_KR = 26] = "EUC_KR" + }(A || (A = {})); + + class m { + constructor(t, e, r, ...n) { + this.valueIdentifier = t, this.name = r, this.values = "number" == typeof e ? Int32Array.from([e]) : e, this.otherEncodingNames = n, m.VALUE_IDENTIFIER_TO_ECI.set(t, this), m.NAME_TO_ECI.set(r, this); + const i = this.values; + for (let t = 0, e = i.length; t !== e; t++) { + const e = i[t]; + m.VALUES_TO_ECI.set(e, this) + } + for (const t of n) m.NAME_TO_ECI.set(t, this) + } + + getValueIdentifier() { + return this.valueIdentifier + } + + getName() { + return this.name + } + + getValue() { + return this.values[0] + } + + static getCharacterSetECIByValue(t) { + if (t < 0 || t >= 900) throw new E("incorect value"); + const e = m.VALUES_TO_ECI.get(t); + if (void 0 === e) throw new E("incorect value"); + return e + } + + static getCharacterSetECIByName(t) { + const e = m.NAME_TO_ECI.get(t); + if (void 0 === e) throw new E("incorect value"); + return e + } + + equals(t) { + if (!(t instanceof m)) return !1; + const e = t; + return this.getName() === e.getName() + } + } + + m.VALUE_IDENTIFIER_TO_ECI = new Map, m.VALUES_TO_ECI = new Map, m.NAME_TO_ECI = new Map, m.Cp437 = new m(A.Cp437, Int32Array.from([0, 2]), "Cp437"), m.ISO8859_1 = new m(A.ISO8859_1, Int32Array.from([1, 3]), "ISO-8859-1", "ISO88591", "ISO8859_1"), m.ISO8859_2 = new m(A.ISO8859_2, 4, "ISO-8859-2", "ISO88592", "ISO8859_2"), m.ISO8859_3 = new m(A.ISO8859_3, 5, "ISO-8859-3", "ISO88593", "ISO8859_3"), m.ISO8859_4 = new m(A.ISO8859_4, 6, "ISO-8859-4", "ISO88594", "ISO8859_4"), m.ISO8859_5 = new m(A.ISO8859_5, 7, "ISO-8859-5", "ISO88595", "ISO8859_5"), m.ISO8859_6 = new m(A.ISO8859_6, 8, "ISO-8859-6", "ISO88596", "ISO8859_6"), m.ISO8859_7 = new m(A.ISO8859_7, 9, "ISO-8859-7", "ISO88597", "ISO8859_7"), m.ISO8859_8 = new m(A.ISO8859_8, 10, "ISO-8859-8", "ISO88598", "ISO8859_8"), m.ISO8859_9 = new m(A.ISO8859_9, 11, "ISO-8859-9", "ISO88599", "ISO8859_9"), m.ISO8859_10 = new m(A.ISO8859_10, 12, "ISO-8859-10", "ISO885910", "ISO8859_10"), m.ISO8859_11 = new m(A.ISO8859_11, 13, "ISO-8859-11", "ISO885911", "ISO8859_11"), m.ISO8859_13 = new m(A.ISO8859_13, 15, "ISO-8859-13", "ISO885913", "ISO8859_13"), m.ISO8859_14 = new m(A.ISO8859_14, 16, "ISO-8859-14", "ISO885914", "ISO8859_14"), m.ISO8859_15 = new m(A.ISO8859_15, 17, "ISO-8859-15", "ISO885915", "ISO8859_15"), m.ISO8859_16 = new m(A.ISO8859_16, 18, "ISO-8859-16", "ISO885916", "ISO8859_16"), m.SJIS = new m(A.SJIS, 20, "SJIS", "Shift_JIS"), m.Cp1250 = new m(A.Cp1250, 21, "Cp1250", "windows-1250"), m.Cp1251 = new m(A.Cp1251, 22, "Cp1251", "windows-1251"), m.Cp1252 = new m(A.Cp1252, 23, "Cp1252", "windows-1252"), m.Cp1256 = new m(A.Cp1256, 24, "Cp1256", "windows-1256"), m.UnicodeBigUnmarked = new m(A.UnicodeBigUnmarked, 25, "UnicodeBigUnmarked", "UTF-16BE", "UnicodeBig"), m.UTF8 = new m(A.UTF8, 26, "UTF8", "UTF-8"), m.ASCII = new m(A.ASCII, Int32Array.from([27, 170]), "ASCII", "US-ASCII"), m.Big5 = new m(A.Big5, 28, "Big5"), m.GB18030 = new m(A.GB18030, 29, "GB18030", "GB2312", "EUC_CN", "GBK"), m.EUC_KR = new m(A.EUC_KR, 30, "EUC_KR", "EUC-KR"); + + class _ extends i { + } + + _.kind = "UnsupportedOperationException"; + + class I { + static decode(t, e) { + const r = this.encodingName(e); + return this.customDecoder ? this.customDecoder(t, r) : "undefined" == typeof TextDecoder || this.shouldDecodeOnFallback(r) ? this.decodeFallback(t, r) : new TextDecoder(r).decode(t) + } + + static shouldDecodeOnFallback(t) { + return !I.isBrowser() && "ISO-8859-1" === t + } + + static encode(t, e) { + const r = this.encodingName(e); + return this.customEncoder ? this.customEncoder(t, r) : "undefined" == typeof TextEncoder ? this.encodeFallback(t) : (new TextEncoder).encode(t) + } + + static isBrowser() { + return "undefined" != typeof window && "[object Window]" === {}.toString.call(window) + } + + static encodingName(t) { + return "string" == typeof t ? t : t.getName() + } + + static encodingCharacterSet(t) { + return t instanceof m ? t : m.getCharacterSetECIByName(t) + } + + static decodeFallback(t, e) { + const r = this.encodingCharacterSet(e); + if (I.isDecodeFallbackSupported(r)) { + let e = ""; + for (let r = 0, n = t.length; r < n; r++) { + let n = t[r].toString(16); + n.length < 2 && (n = "0" + n), e += "%" + n + } + return decodeURIComponent(e) + } + if (r.equals(m.UnicodeBigUnmarked)) return String.fromCharCode.apply(null, new Uint16Array(t.buffer)); + throw new _(`Encoding ${this.encodingName(e)} not supported by fallback.`) + } + + static isDecodeFallbackSupported(t) { + return t.equals(m.UTF8) || t.equals(m.ISO8859_1) || t.equals(m.ASCII) + } + + static encodeFallback(t) { + const e = btoa(unescape(encodeURIComponent(t))).split(""), r = []; + for (let t = 0; t < e.length; t++) r.push(e[t].charCodeAt(0)); + return new Uint8Array(r) + } + } + + class S { + static castAsNonUtf8Char(t, e = null) { + const r = e ? e.getName() : this.ISO88591; + return I.decode(new Uint8Array([t]), r) + } + + static guessEncoding(t, e) { + if (null != e && void 0 !== e.get(C.CHARACTER_SET)) return e.get(C.CHARACTER_SET).toString(); + const r = t.length; + let n = !0, i = !0, s = !0, o = 0, a = 0, l = 0, h = 0, c = 0, u = 0, d = 0, g = 0, f = 0, w = 0, A = 0; + const E = t.length > 3 && 239 === t[0] && 187 === t[1] && 191 === t[2]; + for (let e = 0; e < r && (n || i || s); e++) { + const r = 255 & t[e]; + s && (o > 0 ? 0 == (128 & r) ? s = !1 : o-- : 0 != (128 & r) && (0 == (64 & r) ? s = !1 : (o++, 0 == (32 & r) ? a++ : (o++, 0 == (16 & r) ? l++ : (o++, 0 == (8 & r) ? h++ : s = !1))))), n && (r > 127 && r < 160 ? n = !1 : r > 159 && (r < 192 || 215 === r || 247 === r) && A++), i && (c > 0 ? r < 64 || 127 === r || r > 252 ? i = !1 : c-- : 128 === r || 160 === r || r > 239 ? i = !1 : r > 160 && r < 224 ? (u++, g = 0, d++, d > f && (f = d)) : r > 127 ? (c++, d = 0, g++, g > w && (w = g)) : (d = 0, g = 0)) + } + return s && o > 0 && (s = !1), i && c > 0 && (i = !1), s && (E || a + l + h > 0) ? S.UTF8 : i && (S.ASSUME_SHIFT_JIS || f >= 3 || w >= 3) ? S.SHIFT_JIS : n && i ? 2 === f && 2 === u || 10 * A >= r ? S.SHIFT_JIS : S.ISO88591 : n ? S.ISO88591 : i ? S.SHIFT_JIS : s ? S.UTF8 : S.PLATFORM_DEFAULT_ENCODING + } + + static format(t, ...e) { + let r = -1; + return t.replace(/%(-)?(0?[0-9]+)?([.][0-9]+)?([#][0-9]+)?([scfpexd%])/g, (function (t, n, i, s, o, a) { + if ("%%" === t) return "%"; + if (void 0 === e[++r]) return; + t = s ? parseInt(s.substr(1)) : void 0; + let l, h = o ? parseInt(o.substr(1)) : void 0; + switch (a) { + case"s": + l = e[r]; + break; + case"c": + l = e[r][0]; + break; + case"f": + l = parseFloat(e[r]).toFixed(t); + break; + case"p": + l = parseFloat(e[r]).toPrecision(t); + break; + case"e": + l = parseFloat(e[r]).toExponential(t); + break; + case"x": + l = parseInt(e[r]).toString(h || 16); + break; + case"d": + l = parseFloat(parseInt(e[r], h || 10).toPrecision(t)).toFixed(0) + } + l = "object" == typeof l ? JSON.stringify(l) : (+l).toString(h); + let c = parseInt(i), u = i && i[0] + "" == "0" ? "0" : " "; + for (; l.length < c;) l = void 0 !== n ? l + u : u + l; + return l + })) + } + + static getBytes(t, e) { + return I.encode(t, e) + } + + static getCharCode(t, e = 0) { + return t.charCodeAt(e) + } + + static getCharAt(t) { + return String.fromCharCode(t) + } + } + + S.SHIFT_JIS = m.SJIS.getName(), S.GB2312 = "GB2312", S.ISO88591 = m.ISO8859_1.getName(), S.EUC_JP = "EUC_JP", S.UTF8 = m.UTF8.getName(), S.PLATFORM_DEFAULT_ENCODING = S.UTF8, S.ASSUME_SHIFT_JIS = !1; + + class p { + constructor(t = "") { + this.value = t + } + + enableDecoding(t) { + return this.encoding = t, this + } + + append(t) { + return "string" == typeof t ? this.value += t.toString() : this.encoding ? this.value += S.castAsNonUtf8Char(t, this.encoding) : this.value += String.fromCharCode(t), this + } + + appendChars(t, e, r) { + for (let n = e; e < e + r; n++) this.append(t[n]); + return this + } + + length() { + return this.value.length + } + + charAt(t) { + return this.value.charAt(t) + } + + deleteCharAt(t) { + this.value = this.value.substr(0, t) + this.value.substring(t + 1) + } + + setCharAt(t, e) { + this.value = this.value.substr(0, t) + e + this.value.substr(t + 1) + } + + substring(t, e) { + return this.value.substring(t, e) + } + + setLengthToZero() { + this.value = "" + } + + toString() { + return this.value + } + + insert(t, e) { + this.value = this.value.substr(0, t) + e + this.value.substr(t + e.length) + } + } + + class T { + constructor(t, e, r, n) { + if (this.width = t, this.height = e, this.rowSize = r, this.bits = n, null == e && (e = t), this.height = e, t < 1 || e < 1) throw new o("Both dimensions must be greater than 0"); + null == r && (r = Math.floor((t + 31) / 32)), this.rowSize = r, null == n && (this.bits = new Int32Array(this.rowSize * this.height)) + } + + static parseFromBooleanArray(t) { + const e = t.length, r = t[0].length, n = new T(r, e); + for (let i = 0; i < e; i++) { + const e = t[i]; + for (let t = 0; t < r; t++) e[t] && n.set(t, i) + } + return n + } + + static parseFromString(t, e, r) { + if (null === t) throw new o("stringRepresentation cannot be null"); + const n = new Array(t.length); + let i = 0, s = 0, a = -1, l = 0, h = 0; + for (; h < t.length;) if ("\n" === t.charAt(h) || "\r" === t.charAt(h)) { + if (i > s) { + if (-1 === a) a = i - s; else if (i - s !== a) throw new o("row lengths do not match"); + s = i, l++ + } + h++ + } else if (t.substring(h, h + e.length) === e) h += e.length, n[i] = !0, i++; else { + if (t.substring(h, h + r.length) !== r) throw new o("illegal character encountered: " + t.substring(h)); + h += r.length, n[i] = !1, i++ + } + if (i > s) { + if (-1 === a) a = i - s; else if (i - s !== a) throw new o("row lengths do not match"); + l++ + } + const c = new T(a, l); + for (let t = 0; t < i; t++) n[t] && c.set(Math.floor(t % a), Math.floor(t / a)); + return c + } + + get(t, e) { + const r = e * this.rowSize + Math.floor(t / 32); + return 0 != (this.bits[r] >>> (31 & t) & 1) + } + + set(t, e) { + const r = e * this.rowSize + Math.floor(t / 32); + this.bits[r] |= 1 << (31 & t) & 4294967295 + } + + unset(t, e) { + const r = e * this.rowSize + Math.floor(t / 32); + this.bits[r] &= ~(1 << (31 & t) & 4294967295) + } + + flip(t, e) { + const r = e * this.rowSize + Math.floor(t / 32); + this.bits[r] ^= 1 << (31 & t) & 4294967295 + } + + xor(t) { + if (this.width !== t.getWidth() || this.height !== t.getHeight() || this.rowSize !== t.getRowSize()) throw new o("input matrix dimensions do not match"); + const e = new w(Math.floor(this.width / 32) + 1), r = this.rowSize, n = this.bits; + for (let i = 0, s = this.height; i < s; i++) { + const s = i * r, o = t.getRow(i, e).getBitArray(); + for (let t = 0; t < r; t++) n[s + t] ^= o[t] + } + } + + clear() { + const t = this.bits, e = t.length; + for (let r = 0; r < e; r++) t[r] = 0 + } + + setRegion(t, e, r, n) { + if (e < 0 || t < 0) throw new o("Left and top must be nonnegative"); + if (n < 1 || r < 1) throw new o("Height and width must be at least 1"); + const i = t + r, s = e + n; + if (s > this.height || i > this.width) throw new o("The region must fit inside the matrix"); + const a = this.rowSize, l = this.bits; + for (let r = e; r < s; r++) { + const e = r * a; + for (let r = t; r < i; r++) l[e + Math.floor(r / 32)] |= 1 << (31 & r) & 4294967295 + } + } + + getRow(t, e) { + null == e || e.getSize() < this.width ? e = new w(this.width) : e.clear(); + const r = this.rowSize, n = this.bits, i = t * r; + for (let t = 0; t < r; t++) e.setBulk(32 * t, n[i + t]); + return e + } + + setRow(t, e) { + c.arraycopy(e.getBitArray(), 0, this.bits, t * this.rowSize, this.rowSize) + } + + rotate180() { + const t = this.getWidth(), e = this.getHeight(); + let r = new w(t), n = new w(t); + for (let t = 0, i = Math.floor((e + 1) / 2); t < i; t++) r = this.getRow(t, r), n = this.getRow(e - 1 - t, n), r.reverse(), n.reverse(), this.setRow(t, n), this.setRow(e - 1 - t, r) + } + + getEnclosingRectangle() { + const t = this.width, e = this.height, r = this.rowSize, n = this.bits; + let i = t, s = e, o = -1, a = -1; + for (let t = 0; t < e; t++) for (let e = 0; e < r; e++) { + const l = n[t * r + e]; + if (0 !== l) { + if (t < s && (s = t), t > a && (a = t), 32 * e < i) { + let t = 0; + for (; 0 == (l << 31 - t & 4294967295);) t++; + 32 * e + t < i && (i = 32 * e + t) + } + if (32 * e + 31 > o) { + let t = 31; + for (; l >>> t == 0;) t--; + 32 * e + t > o && (o = 32 * e + t) + } + } + } + return o < i || a < s ? null : Int32Array.from([i, s, o - i + 1, a - s + 1]) + } + + getTopLeftOnBit() { + const t = this.rowSize, e = this.bits; + let r = 0; + for (; r < e.length && 0 === e[r];) r++; + if (r === e.length) return null; + const n = r / t; + let i = r % t * 32; + const s = e[r]; + let o = 0; + for (; 0 == (s << 31 - o & 4294967295);) o++; + return i += o, Int32Array.from([i, n]) + } + + getBottomRightOnBit() { + const t = this.rowSize, e = this.bits; + let r = e.length - 1; + for (; r >= 0 && 0 === e[r];) r--; + if (r < 0) return null; + const n = Math.floor(r / t); + let i = 32 * Math.floor(r % t); + const s = e[r]; + let o = 31; + for (; s >>> o == 0;) o--; + return i += o, Int32Array.from([i, n]) + } + + getWidth() { + return this.width + } + + getHeight() { + return this.height + } + + getRowSize() { + return this.rowSize + } + + equals(t) { + if (!(t instanceof T)) return !1; + const e = t; + return this.width === e.width && this.height === e.height && this.rowSize === e.rowSize && g.equals(this.bits, e.bits) + } + + hashCode() { + let t = this.width; + return t = 31 * t + this.width, t = 31 * t + this.height, t = 31 * t + this.rowSize, t = 31 * t + g.hashCode(this.bits), t + } + + toString(t = "X ", e = " ", r = "\n") { + return this.buildToString(t, e, r) + } + + buildToString(t, e, r) { + let n = new p; + for (let i = 0, s = this.height; i < s; i++) { + for (let r = 0, s = this.width; r < s; r++) n.append(this.get(r, i) ? t : e); + n.append(r) + } + return n.toString() + } + + clone() { + return new T(this.width, this.height, this.rowSize, this.bits.slice()) + } + } + + class R extends i { + static getNotFoundInstance() { + return new R + } + } + + R.kind = "NotFoundException"; + + class N extends h { + constructor(t) { + super(t), this.luminances = N.EMPTY, this.buckets = new Int32Array(N.LUMINANCE_BUCKETS) + } + + getBlackRow(t, e) { + const r = this.getLuminanceSource(), n = r.getWidth(); + null == e || e.getSize() < n ? e = new w(n) : e.clear(), this.initArrays(n); + const i = r.getRow(t, this.luminances), s = this.buckets; + for (let t = 0; t < n; t++) s[(255 & i[t]) >> N.LUMINANCE_SHIFT]++; + const o = N.estimateBlackPoint(s); + if (n < 3) for (let t = 0; t < n; t++) (255 & i[t]) < o && e.set(t); else { + let t = 255 & i[0], r = 255 & i[1]; + for (let s = 1; s < n - 1; s++) { + const n = 255 & i[s + 1]; + (4 * r - t - n) / 2 < o && e.set(s), t = r, r = n + } + } + return e + } + + getBlackMatrix() { + const t = this.getLuminanceSource(), e = t.getWidth(), r = t.getHeight(), n = new T(e, r); + this.initArrays(e); + const i = this.buckets; + for (let n = 1; n < 5; n++) { + const s = Math.floor(r * n / 5), o = t.getRow(s, this.luminances), a = Math.floor(4 * e / 5); + for (let t = Math.floor(e / 5); t < a; t++) { + i[(255 & o[t]) >> N.LUMINANCE_SHIFT]++ + } + } + const s = N.estimateBlackPoint(i), o = t.getMatrix(); + for (let t = 0; t < r; t++) { + const r = t * e; + for (let i = 0; i < e; i++) { + (255 & o[r + i]) < s && n.set(i, t) + } + } + return n + } + + createBinarizer(t) { + return new N(t) + } + + initArrays(t) { + this.luminances.length < t && (this.luminances = new Uint8ClampedArray(t)); + const e = this.buckets; + for (let t = 0; t < N.LUMINANCE_BUCKETS; t++) e[t] = 0 + } + + static estimateBlackPoint(t) { + const e = t.length; + let r = 0, n = 0, i = 0; + for (let s = 0; s < e; s++) t[s] > i && (n = s, i = t[s]), t[s] > r && (r = t[s]); + let s = 0, o = 0; + for (let r = 0; r < e; r++) { + const e = r - n, i = t[r] * e * e; + i > o && (s = r, o = i) + } + if (n > s) { + const t = n; + n = s, s = t + } + if (s - n <= e / 16) throw new R; + let a = s - 1, l = -1; + for (let e = s - 1; e > n; e--) { + const i = e - n, o = i * i * (s - e) * (r - t[e]); + o > l && (a = e, l = o) + } + return a << N.LUMINANCE_SHIFT + } + } + + N.LUMINANCE_BITS = 5, N.LUMINANCE_SHIFT = 8 - N.LUMINANCE_BITS, N.LUMINANCE_BUCKETS = 1 << N.LUMINANCE_BITS, N.EMPTY = Uint8ClampedArray.from([0]); + + class D extends N { + constructor(t) { + super(t), this.matrix = null + } + + getBlackMatrix() { + if (null !== this.matrix) return this.matrix; + const t = this.getLuminanceSource(), e = t.getWidth(), r = t.getHeight(); + if (e >= D.MINIMUM_DIMENSION && r >= D.MINIMUM_DIMENSION) { + const n = t.getMatrix(); + let i = e >> D.BLOCK_SIZE_POWER; + 0 != (e & D.BLOCK_SIZE_MASK) && i++; + let s = r >> D.BLOCK_SIZE_POWER; + 0 != (r & D.BLOCK_SIZE_MASK) && s++; + const o = D.calculateBlackPoints(n, i, s, e, r), a = new T(e, r); + D.calculateThresholdForBlock(n, i, s, e, r, o, a), this.matrix = a + } else this.matrix = super.getBlackMatrix(); + return this.matrix + } + + createBinarizer(t) { + return new D(t) + } + + static calculateThresholdForBlock(t, e, r, n, i, s, o) { + const a = i - D.BLOCK_SIZE, l = n - D.BLOCK_SIZE; + for (let i = 0; i < r; i++) { + let h = i << D.BLOCK_SIZE_POWER; + h > a && (h = a); + const c = D.cap(i, 2, r - 3); + for (let r = 0; r < e; r++) { + let i = r << D.BLOCK_SIZE_POWER; + i > l && (i = l); + const a = D.cap(r, 2, e - 3); + let u = 0; + for (let t = -2; t <= 2; t++) { + const e = s[c + t]; + u += e[a - 2] + e[a - 1] + e[a] + e[a + 1] + e[a + 2] + } + const d = u / 25; + D.thresholdBlock(t, i, h, d, n, o) + } + } + } + + static cap(t, e, r) { + return t < e ? e : t > r ? r : t + } + + static thresholdBlock(t, e, r, n, i, s) { + for (let o = 0, a = r * i + e; o < D.BLOCK_SIZE; o++, a += i) for (let i = 0; i < D.BLOCK_SIZE; i++) (255 & t[a + i]) <= n && s.set(e + i, r + o) + } + + static calculateBlackPoints(t, e, r, n, i) { + const s = i - D.BLOCK_SIZE, o = n - D.BLOCK_SIZE, a = new Array(r); + for (let i = 0; i < r; i++) { + a[i] = new Int32Array(e); + let r = i << D.BLOCK_SIZE_POWER; + r > s && (r = s); + for (let s = 0; s < e; s++) { + let e = s << D.BLOCK_SIZE_POWER; + e > o && (e = o); + let l = 0, h = 255, c = 0; + for (let i = 0, s = r * n + e; i < D.BLOCK_SIZE; i++, s += n) { + for (let e = 0; e < D.BLOCK_SIZE; e++) { + const r = 255 & t[s + e]; + l += r, r < h && (h = r), r > c && (c = r) + } + if (c - h > D.MIN_DYNAMIC_RANGE) for (i++, s += n; i < D.BLOCK_SIZE; i++, s += n) for (let e = 0; e < D.BLOCK_SIZE; e++) l += 255 & t[s + e] + } + let u = l >> 2 * D.BLOCK_SIZE_POWER; + if (c - h <= D.MIN_DYNAMIC_RANGE && (u = h / 2, i > 0 && s > 0)) { + const t = (a[i - 1][s] + 2 * a[i][s - 1] + a[i - 1][s - 1]) / 4; + h < t && (u = t) + } + a[i][s] = u + } + } + return a + } + } + + D.BLOCK_SIZE_POWER = 3, D.BLOCK_SIZE = 1 << D.BLOCK_SIZE_POWER, D.BLOCK_SIZE_MASK = D.BLOCK_SIZE - 1, D.MINIMUM_DIMENSION = 5 * D.BLOCK_SIZE, D.MIN_DYNAMIC_RANGE = 24; + + class y { + constructor(t, e) { + this.width = t, this.height = e + } + + getWidth() { + return this.width + } + + getHeight() { + return this.height + } + + isCropSupported() { + return !1 + } + + crop(t, e, r, n) { + throw new _("This luminance source does not support cropping.") + } + + isRotateSupported() { + return !1 + } + + rotateCounterClockwise() { + throw new _("This luminance source does not support rotation by 90 degrees.") + } + + rotateCounterClockwise45() { + throw new _("This luminance source does not support rotation by 45 degrees.") + } + + toString() { + const t = new Uint8ClampedArray(this.width); + let e = new p; + for (let r = 0; r < this.height; r++) { + const n = this.getRow(r, t); + for (let t = 0; t < this.width; t++) { + const r = 255 & n[t]; + let i; + i = r < 64 ? "#" : r < 128 ? "+" : r < 192 ? "." : " ", e.append(i) + } + e.append("\n") + } + return e.toString() + } + } + + class O extends y { + constructor(t) { + super(t.getWidth(), t.getHeight()), this.delegate = t + } + + getRow(t, e) { + const r = this.delegate.getRow(t, e), n = this.getWidth(); + for (let t = 0; t < n; t++) r[t] = 255 - (255 & r[t]); + return r + } + + getMatrix() { + const t = this.delegate.getMatrix(), e = this.getWidth() * this.getHeight(), r = new Uint8ClampedArray(e); + for (let n = 0; n < e; n++) r[n] = 255 - (255 & t[n]); + return r + } + + isCropSupported() { + return this.delegate.isCropSupported() + } + + crop(t, e, r, n) { + return new O(this.delegate.crop(t, e, r, n)) + } + + isRotateSupported() { + return this.delegate.isRotateSupported() + } + + invert() { + return this.delegate + } + + rotateCounterClockwise() { + return new O(this.delegate.rotateCounterClockwise()) + } + + rotateCounterClockwise45() { + return new O(this.delegate.rotateCounterClockwise45()) + } + } + + class M extends y { + constructor(t) { + super(t.width, t.height), this.canvas = t, this.tempCanvasElement = null, this.buffer = M.makeBufferFromCanvasImageData(t) + } + + static makeBufferFromCanvasImageData(t) { + const e = t.getContext("2d").getImageData(0, 0, t.width, t.height); + return M.toGrayscaleBuffer(e.data, t.width, t.height) + } + + static toGrayscaleBuffer(t, e, r) { + const n = new Uint8ClampedArray(e * r); + for (let e = 0, r = 0, i = t.length; e < i; e += 4, r++) { + let i; + if (0 === t[e + 3]) i = 255; else { + i = 306 * t[e] + 601 * t[e + 1] + 117 * t[e + 2] + 512 >> 10 + } + n[r] = i + } + return n + } + + getRow(t, e) { + if (t < 0 || t >= this.getHeight()) throw new o("Requested row is outside the image: " + t); + const r = this.getWidth(), n = t * r; + return null === e ? e = this.buffer.slice(n, n + r) : (e.length < r && (e = new Uint8ClampedArray(r)), e.set(this.buffer.slice(n, n + r))), e + } + + getMatrix() { + return this.buffer + } + + isCropSupported() { + return !0 + } + + crop(t, e, r, n) { + return super.crop(t, e, r, n), this + } + + isRotateSupported() { + return !0 + } + + rotateCounterClockwise() { + return this.rotate(-90), this + } + + rotateCounterClockwise45() { + return this.rotate(-45), this + } + + getTempCanvasElement() { + if (null === this.tempCanvasElement) { + const t = this.canvas.ownerDocument.createElement("canvas"); + t.width = this.canvas.width, t.height = this.canvas.height, this.tempCanvasElement = t + } + return this.tempCanvasElement + } + + rotate(t) { + const e = this.getTempCanvasElement(), r = e.getContext("2d"), n = t * M.DEGREE_TO_RADIANS, + i = this.canvas.width, s = this.canvas.height, + o = Math.ceil(Math.abs(Math.cos(n)) * i + Math.abs(Math.sin(n)) * s), + a = Math.ceil(Math.abs(Math.sin(n)) * i + Math.abs(Math.cos(n)) * s); + return e.width = o, e.height = a, r.translate(o / 2, a / 2), r.rotate(n), r.drawImage(this.canvas, i / -2, s / -2), this.buffer = M.makeBufferFromCanvasImageData(e), this + } + + invert() { + return new O(this) + } + } + + M.DEGREE_TO_RADIANS = Math.PI / 180; + + class B { + constructor(t, e, r) { + this.deviceId = t, this.label = e, this.kind = "videoinput", this.groupId = r || void 0 + } + + toJSON() { + return {kind: this.kind, groupId: this.groupId, deviceId: this.deviceId, label: this.label} + } + } + + var b, + P = (globalThis || global || self || window ? (globalThis || global || self || window || void 0).__awaiter : void 0) || function (t, e, r, n) { + return new (r || (r = Promise))((function (i, s) { + function o(t) { + try { + l(n.next(t)) + } catch (t) { + s(t) + } + } + + function a(t) { + try { + l(n.throw(t)) + } catch (t) { + s(t) + } + } + + function l(t) { + var e; + t.done ? i(t.value) : (e = t.value, e instanceof r ? e : new r((function (t) { + t(e) + }))).then(o, a) + } + + l((n = n.apply(t, e || [])).next()) + })) + }; + + class L { + constructor(t, e = 500, r) { + this.reader = t, this.timeBetweenScansMillis = e, this._hints = r, this._stopContinuousDecode = !1, this._stopAsyncDecode = !1, this._timeBetweenDecodingAttempts = 0 + } + + get hasNavigator() { + return "undefined" != typeof navigator + } + + get isMediaDevicesSuported() { + return this.hasNavigator && !!navigator.mediaDevices + } + + get canEnumerateDevices() { + return !(!this.isMediaDevicesSuported || !navigator.mediaDevices.enumerateDevices) + } + + get timeBetweenDecodingAttempts() { + return this._timeBetweenDecodingAttempts + } + + set timeBetweenDecodingAttempts(t) { + this._timeBetweenDecodingAttempts = t < 0 ? 0 : t + } + + set hints(t) { + this._hints = t || null + } + + get hints() { + return this._hints + } + + listVideoInputDevices() { + return P(this, void 0, void 0, (function* () { + if (!this.hasNavigator) throw new Error("Can't enumerate devices, navigator is not present."); + if (!this.canEnumerateDevices) throw new Error("Can't enumerate devices, method not supported."); + const t = yield navigator.mediaDevices.enumerateDevices(), e = []; + for (const r of t) { + const t = "video" === r.kind ? "videoinput" : r.kind; + if ("videoinput" !== t) continue; + const n = { + deviceId: r.deviceId || r.id, + label: r.label || "Video device " + (e.length + 1), + kind: t, + groupId: r.groupId + }; + e.push(n) + } + return e + })) + } + + getVideoInputDevices() { + return P(this, void 0, void 0, (function* () { + return (yield this.listVideoInputDevices()).map((t => new B(t.deviceId, t.label))) + })) + } + + findDeviceById(t) { + return P(this, void 0, void 0, (function* () { + const e = yield this.listVideoInputDevices(); + return e ? e.find((e => e.deviceId === t)) : null + })) + } + + decodeFromInputVideoDevice(t, e) { + return P(this, void 0, void 0, (function* () { + return yield this.decodeOnceFromVideoDevice(t, e) + })) + } + + decodeOnceFromVideoDevice(t, e) { + return P(this, void 0, void 0, (function* () { + let r; + this.reset(), r = t ? {deviceId: {exact: t}} : {facingMode: "environment"}; + const n = {video: r}; + return yield this.decodeOnceFromConstraints(n, e) + })) + } + + decodeOnceFromConstraints(t, e) { + return P(this, void 0, void 0, (function* () { + const r = yield navigator.mediaDevices.getUserMedia(t); + return yield this.decodeOnceFromStream(r, e) + })) + } + + decodeOnceFromStream(t, e) { + return P(this, void 0, void 0, (function* () { + this.reset(); + const r = yield this.attachStreamToVideo(t, e); + return yield this.decodeOnce(r) + })) + } + + decodeFromInputVideoDeviceContinuously(t, e, r) { + return P(this, void 0, void 0, (function* () { + return yield this.decodeFromVideoDevice(t, e, r) + })) + } + + decodeFromVideoDevice(t, e, r) { + return P(this, void 0, void 0, (function* () { + let n; + n = t ? {deviceId: {exact: t}} : {facingMode: "environment"}; + const i = {video: n}; + return yield this.decodeFromConstraints(i, e, r) + })) + } + + decodeFromConstraints(t, e, r) { + return P(this, void 0, void 0, (function* () { + const n = yield navigator.mediaDevices.getUserMedia(t); + return yield this.decodeFromStream(n, e, r) + })) + } + + decodeFromStream(t, e, r) { + return P(this, void 0, void 0, (function* () { + this.reset(); + const n = yield this.attachStreamToVideo(t, e); + return yield this.decodeContinuously(n, r) + })) + } + + stopAsyncDecode() { + this._stopAsyncDecode = !0 + } + + stopContinuousDecode() { + this._stopContinuousDecode = !0 + } + + attachStreamToVideo(t, e) { + return P(this, void 0, void 0, (function* () { + const r = this.prepareVideoElement(e); + return this.addVideoSource(r, t), this.videoElement = r, this.stream = t, yield this.playVideoOnLoadAsync(r), r + })) + } + + playVideoOnLoadAsync(t) { + return new Promise(((e, r) => this.playVideoOnLoad(t, (() => e())))) + } + + playVideoOnLoad(t, e) { + this.videoEndedListener = () => this.stopStreams(), this.videoCanPlayListener = () => this.tryPlayVideo(t), t.addEventListener("ended", this.videoEndedListener), t.addEventListener("canplay", this.videoCanPlayListener), t.addEventListener("playing", e), this.tryPlayVideo(t) + } + + isVideoPlaying(t) { + return t.currentTime > 0 && !t.paused && !t.ended && t.readyState > 2 + } + + tryPlayVideo(t) { + return P(this, void 0, void 0, (function* () { + if (this.isVideoPlaying(t)) console.warn("Trying to play video that is already playing."); else try { + yield t.play() + } catch (t) { + console.warn("It was not possible to play the video.") + } + })) + } + + getMediaElement(t, e) { + const r = document.getElementById(t); + if (!r) throw new s(`element with id '${t}' not found`); + if (r.nodeName.toLowerCase() !== e.toLowerCase()) throw new s(`element with id '${t}' must be an ${e} element`); + return r + } + + decodeFromImage(t, e) { + if (!t && !e) throw new s("either imageElement with a src set or an url must be provided"); + return e && !t ? this.decodeFromImageUrl(e) : this.decodeFromImageElement(t) + } + + decodeFromVideo(t, e) { + if (!t && !e) throw new s("Either an element with a src set or an URL must be provided"); + return e && !t ? this.decodeFromVideoUrl(e) : this.decodeFromVideoElement(t) + } + + decodeFromVideoContinuously(t, e, r) { + if (void 0 === t && void 0 === e) throw new s("Either an element with a src set or an URL must be provided"); + return e && !t ? this.decodeFromVideoUrlContinuously(e, r) : this.decodeFromVideoElementContinuously(t, r) + } + + decodeFromImageElement(t) { + if (!t) throw new s("An image element must be provided."); + this.reset(); + const e = this.prepareImageElement(t); + let r; + return this.imageElement = e, r = this.isImageLoaded(e) ? this.decodeOnce(e, !1, !0) : this._decodeOnLoadImage(e), r + } + + decodeFromVideoElement(t) { + const e = this._decodeFromVideoElementSetup(t); + return this._decodeOnLoadVideo(e) + } + + decodeFromVideoElementContinuously(t, e) { + const r = this._decodeFromVideoElementSetup(t); + return this._decodeOnLoadVideoContinuously(r, e) + } + + _decodeFromVideoElementSetup(t) { + if (!t) throw new s("A video element must be provided."); + this.reset(); + const e = this.prepareVideoElement(t); + return this.videoElement = e, e + } + + decodeFromImageUrl(t) { + if (!t) throw new s("An URL must be provided."); + this.reset(); + const e = this.prepareImageElement(); + this.imageElement = e; + const r = this._decodeOnLoadImage(e); + return e.src = t, r + } + + decodeFromVideoUrl(t) { + if (!t) throw new s("An URL must be provided."); + this.reset(); + const e = this.prepareVideoElement(), r = this.decodeFromVideoElement(e); + return e.src = t, r + } + + decodeFromVideoUrlContinuously(t, e) { + if (!t) throw new s("An URL must be provided."); + this.reset(); + const r = this.prepareVideoElement(), n = this.decodeFromVideoElementContinuously(r, e); + return r.src = t, n + } + + _decodeOnLoadImage(t) { + return new Promise(((e, r) => { + this.imageLoadedListener = () => this.decodeOnce(t, !1, !0).then(e, r), t.addEventListener("load", this.imageLoadedListener) + })) + } + + _decodeOnLoadVideo(t) { + return P(this, void 0, void 0, (function* () { + return yield this.playVideoOnLoadAsync(t), yield this.decodeOnce(t) + })) + } + + _decodeOnLoadVideoContinuously(t, e) { + return P(this, void 0, void 0, (function* () { + yield this.playVideoOnLoadAsync(t), this.decodeContinuously(t, e) + })) + } + + isImageLoaded(t) { + return !!t.complete && 0 !== t.naturalWidth + } + + prepareImageElement(t) { + let e; + return void 0 === t && (e = document.createElement("img"), e.width = 200, e.height = 200), "string" == typeof t && (e = this.getMediaElement(t, "img")), t instanceof HTMLImageElement && (e = t), e + } + + prepareVideoElement(t) { + let e; + return t || "undefined" == typeof document || (e = document.createElement("video"), e.width = 200, e.height = 200), "string" == typeof t && (e = this.getMediaElement(t, "video")), t instanceof HTMLVideoElement && (e = t), e.setAttribute("autoplay", "true"), e.setAttribute("muted", "true"), e.setAttribute("playsinline", "true"), e + } + + decodeOnce(t, e = !0, r = !0) { + this._stopAsyncDecode = !1; + const n = (i, s) => { + if (this._stopAsyncDecode) return s(new R("Video stream has ended before any code could be detected.")), void (this._stopAsyncDecode = void 0); + try { + i(this.decode(t)) + } catch (t) { + const o = (t instanceof l || t instanceof E) && r; + if (e && t instanceof R || o) return setTimeout(n, this._timeBetweenDecodingAttempts, i, s); + s(t) + } + }; + return new Promise(((t, e) => n(t, e))) + } + + decodeContinuously(t, e) { + this._stopContinuousDecode = !1; + const r = () => { + if (this._stopContinuousDecode) this._stopContinuousDecode = void 0; else try { + const n = this.decode(t); + e(n, null), setTimeout(r, this.timeBetweenScansMillis) + } catch (t) { + e(null, t); + const n = t instanceof R; + (t instanceof l || t instanceof E || n) && setTimeout(r, this._timeBetweenDecodingAttempts) + } + }; + r() + } + + decode(t) { + const e = this.createBinaryBitmap(t); + return this.decodeBitmap(e) + } + + createBinaryBitmap(t) { + const e = this.getCaptureCanvasContext(t); + this.drawImageOnCanvas(e, t); + const r = this.getCaptureCanvas(t), n = new M(r), i = new D(n); + return new a(i) + } + + getCaptureCanvasContext(t) { + if (!this.captureCanvasContext) { + const e = this.getCaptureCanvas(t).getContext("2d"); + this.captureCanvasContext = e + } + return this.captureCanvasContext + } + + getCaptureCanvas(t) { + if (!this.captureCanvas) { + const e = this.createCaptureCanvas(t); + this.captureCanvas = e + } + return this.captureCanvas + } + + drawImageOnCanvas(t, e) { + t.drawImage(e, 0, 0) + } + + decodeBitmap(t) { + return this.reader.decode(t, this._hints) + } + + createCaptureCanvas(t) { + if ("undefined" == typeof document) return this._destroyCaptureCanvas(), null; + const e = document.createElement("canvas"); + let r, n; + return void 0 !== t && (t instanceof HTMLVideoElement ? (r = t.videoWidth, n = t.videoHeight) : t instanceof HTMLImageElement && (r = t.naturalWidth || t.width, n = t.naturalHeight || t.height)), e.style.width = r + "px", e.style.height = n + "px", e.width = r, e.height = n, e + } + + stopStreams() { + this.stream && (this.stream.getVideoTracks().forEach((t => t.stop())), this.stream = void 0), !1 === this._stopAsyncDecode && this.stopAsyncDecode(), !1 === this._stopContinuousDecode && this.stopContinuousDecode() + } + + reset() { + this.stopStreams(), this._destroyVideoElement(), this._destroyImageElement(), this._destroyCaptureCanvas() + } + + _destroyVideoElement() { + this.videoElement && (void 0 !== this.videoEndedListener && this.videoElement.removeEventListener("ended", this.videoEndedListener), void 0 !== this.videoPlayingEventListener && this.videoElement.removeEventListener("playing", this.videoPlayingEventListener), void 0 !== this.videoCanPlayListener && this.videoElement.removeEventListener("loadedmetadata", this.videoCanPlayListener), this.cleanVideoSource(this.videoElement), this.videoElement = void 0) + } + + _destroyImageElement() { + this.imageElement && (void 0 !== this.imageLoadedListener && this.imageElement.removeEventListener("load", this.imageLoadedListener), this.imageElement.src = void 0, this.imageElement.removeAttribute("src"), this.imageElement = void 0) + } + + _destroyCaptureCanvas() { + this.captureCanvasContext = void 0, this.captureCanvas = void 0 + } + + addVideoSource(t, e) { + try { + t.srcObject = e + } catch (r) { + t.src = URL.createObjectURL(e) + } + } + + cleanVideoSource(t) { + try { + t.srcObject = null + } catch (e) { + t.src = "" + } + this.videoElement.removeAttribute("src") + } + } + + class F { + constructor(t, e, r = (null == e ? 0 : 8 * e.length), n, i, s = c.currentTimeMillis()) { + this.text = t, this.rawBytes = e, this.numBits = r, this.resultPoints = n, this.format = i, this.timestamp = s, this.text = t, this.rawBytes = e, this.numBits = null == r ? null == e ? 0 : 8 * e.length : r, this.resultPoints = n, this.format = i, this.resultMetadata = null, this.timestamp = null == s ? c.currentTimeMillis() : s + } + + getText() { + return this.text + } + + getRawBytes() { + return this.rawBytes + } + + getNumBits() { + return this.numBits + } + + getResultPoints() { + return this.resultPoints + } + + getBarcodeFormat() { + return this.format + } + + getResultMetadata() { + return this.resultMetadata + } + + putMetadata(t, e) { + null === this.resultMetadata && (this.resultMetadata = new Map), this.resultMetadata.set(t, e) + } + + putAllMetadata(t) { + null !== t && (null === this.resultMetadata ? this.resultMetadata = t : this.resultMetadata = new Map(t)) + } + + addResultPoints(t) { + const e = this.resultPoints; + if (null === e) this.resultPoints = t; else if (null !== t && t.length > 0) { + const r = new Array(e.length + t.length); + c.arraycopy(e, 0, r, 0, e.length), c.arraycopy(t, 0, r, e.length, t.length), this.resultPoints = r + } + } + + getTimestamp() { + return this.timestamp + } + + toString() { + return this.text + } + } + + !function (t) { + t[t.AZTEC = 0] = "AZTEC", t[t.CODABAR = 1] = "CODABAR", t[t.CODE_39 = 2] = "CODE_39", t[t.CODE_93 = 3] = "CODE_93", t[t.CODE_128 = 4] = "CODE_128", t[t.DATA_MATRIX = 5] = "DATA_MATRIX", t[t.EAN_8 = 6] = "EAN_8", t[t.EAN_13 = 7] = "EAN_13", t[t.ITF = 8] = "ITF", t[t.MAXICODE = 9] = "MAXICODE", t[t.PDF_417 = 10] = "PDF_417", t[t.QR_CODE = 11] = "QR_CODE", t[t.RSS_14 = 12] = "RSS_14", t[t.RSS_EXPANDED = 13] = "RSS_EXPANDED", t[t.UPC_A = 14] = "UPC_A", t[t.UPC_E = 15] = "UPC_E", t[t.UPC_EAN_EXTENSION = 16] = "UPC_EAN_EXTENSION" + }(b || (b = {})); + var k, v = b; + !function (t) { + t[t.OTHER = 0] = "OTHER", t[t.ORIENTATION = 1] = "ORIENTATION", t[t.BYTE_SEGMENTS = 2] = "BYTE_SEGMENTS", t[t.ERROR_CORRECTION_LEVEL = 3] = "ERROR_CORRECTION_LEVEL", t[t.ISSUE_NUMBER = 4] = "ISSUE_NUMBER", t[t.SUGGESTED_PRICE = 5] = "SUGGESTED_PRICE", t[t.POSSIBLE_COUNTRY = 6] = "POSSIBLE_COUNTRY", t[t.UPC_EAN_EXTENSION = 7] = "UPC_EAN_EXTENSION", t[t.PDF417_EXTRA_METADATA = 8] = "PDF417_EXTRA_METADATA", t[t.STRUCTURED_APPEND_SEQUENCE = 9] = "STRUCTURED_APPEND_SEQUENCE", t[t.STRUCTURED_APPEND_PARITY = 10] = "STRUCTURED_APPEND_PARITY" + }(k || (k = {})); + var x, V, U, H, G, X, W = k; + + class z { + constructor(t, e, r, n, i = -1, s = -1) { + this.rawBytes = t, this.text = e, this.byteSegments = r, this.ecLevel = n, this.structuredAppendSequenceNumber = i, this.structuredAppendParity = s, this.numBits = null == t ? 0 : 8 * t.length + } + + getRawBytes() { + return this.rawBytes + } + + getNumBits() { + return this.numBits + } + + setNumBits(t) { + this.numBits = t + } + + getText() { + return this.text + } + + getByteSegments() { + return this.byteSegments + } + + getECLevel() { + return this.ecLevel + } + + getErrorsCorrected() { + return this.errorsCorrected + } + + setErrorsCorrected(t) { + this.errorsCorrected = t + } + + getErasures() { + return this.erasures + } + + setErasures(t) { + this.erasures = t + } + + getOther() { + return this.other + } + + setOther(t) { + this.other = t + } + + hasStructuredAppend() { + return this.structuredAppendParity >= 0 && this.structuredAppendSequenceNumber >= 0 + } + + getStructuredAppendParity() { + return this.structuredAppendParity + } + + getStructuredAppendSequenceNumber() { + return this.structuredAppendSequenceNumber + } + } + + class Y { + exp(t) { + return this.expTable[t] + } + + log(t) { + if (0 === t) throw new o; + return this.logTable[t] + } + + static addOrSubtract(t, e) { + return t ^ e + } + } + + class Z { + constructor(t, e) { + if (0 === e.length) throw new o; + this.field = t; + const r = e.length; + if (r > 1 && 0 === e[0]) { + let t = 1; + for (; t < r && 0 === e[t];) t++; + t === r ? this.coefficients = Int32Array.from([0]) : (this.coefficients = new Int32Array(r - t), c.arraycopy(e, t, this.coefficients, 0, this.coefficients.length)) + } else this.coefficients = e + } + + getCoefficients() { + return this.coefficients + } + + getDegree() { + return this.coefficients.length - 1 + } + + isZero() { + return 0 === this.coefficients[0] + } + + getCoefficient(t) { + return this.coefficients[this.coefficients.length - 1 - t] + } + + evaluateAt(t) { + if (0 === t) return this.getCoefficient(0); + const e = this.coefficients; + let r; + if (1 === t) { + r = 0; + for (let t = 0, n = e.length; t !== n; t++) { + const n = e[t]; + r = Y.addOrSubtract(r, n) + } + return r + } + r = e[0]; + const n = e.length, i = this.field; + for (let s = 1; s < n; s++) r = Y.addOrSubtract(i.multiply(t, r), e[s]); + return r + } + + addOrSubtract(t) { + if (!this.field.equals(t.field)) throw new o("GenericGFPolys do not have same GenericGF field"); + if (this.isZero()) return t; + if (t.isZero()) return this; + let e = this.coefficients, r = t.coefficients; + if (e.length > r.length) { + const t = e; + e = r, r = t + } + let n = new Int32Array(r.length); + const i = r.length - e.length; + c.arraycopy(r, 0, n, 0, i); + for (let t = i; t < r.length; t++) n[t] = Y.addOrSubtract(e[t - i], r[t]); + return new Z(this.field, n) + } + + multiply(t) { + if (!this.field.equals(t.field)) throw new o("GenericGFPolys do not have same GenericGF field"); + if (this.isZero() || t.isZero()) return this.field.getZero(); + const e = this.coefficients, r = e.length, n = t.coefficients, i = n.length, s = new Int32Array(r + i - 1), + a = this.field; + for (let t = 0; t < r; t++) { + const r = e[t]; + for (let e = 0; e < i; e++) s[t + e] = Y.addOrSubtract(s[t + e], a.multiply(r, n[e])) + } + return new Z(a, s) + } + + multiplyScalar(t) { + if (0 === t) return this.field.getZero(); + if (1 === t) return this; + const e = this.coefficients.length, r = this.field, n = new Int32Array(e), i = this.coefficients; + for (let s = 0; s < e; s++) n[s] = r.multiply(i[s], t); + return new Z(r, n) + } + + multiplyByMonomial(t, e) { + if (t < 0) throw new o; + if (0 === e) return this.field.getZero(); + const r = this.coefficients, n = r.length, i = new Int32Array(n + t), s = this.field; + for (let t = 0; t < n; t++) i[t] = s.multiply(r[t], e); + return new Z(s, i) + } + + divide(t) { + if (!this.field.equals(t.field)) throw new o("GenericGFPolys do not have same GenericGF field"); + if (t.isZero()) throw new o("Divide by 0"); + const e = this.field; + let r = e.getZero(), n = this; + const i = t.getCoefficient(t.getDegree()), s = e.inverse(i); + for (; n.getDegree() >= t.getDegree() && !n.isZero();) { + const i = n.getDegree() - t.getDegree(), o = e.multiply(n.getCoefficient(n.getDegree()), s), + a = t.multiplyByMonomial(i, o), l = e.buildMonomial(i, o); + r = r.addOrSubtract(l), n = n.addOrSubtract(a) + } + return [r, n] + } + + toString() { + let t = ""; + for (let e = this.getDegree(); e >= 0; e--) { + let r = this.getCoefficient(e); + if (0 !== r) { + if (r < 0 ? (t += " - ", r = -r) : t.length > 0 && (t += " + "), 0 === e || 1 !== r) { + const e = this.field.log(r); + 0 === e ? t += "1" : 1 === e ? t += "a" : (t += "a^", t += e) + } + 0 !== e && (1 === e ? t += "x" : (t += "x^", t += e)) + } + } + return t + } + } + + class K extends i { + } + + K.kind = "ArithmeticException"; + + class q extends Y { + constructor(t, e, r) { + super(), this.primitive = t, this.size = e, this.generatorBase = r; + const n = new Int32Array(e); + let i = 1; + for (let r = 0; r < e; r++) n[r] = i, i *= 2, i >= e && (i ^= t, i &= e - 1); + this.expTable = n; + const s = new Int32Array(e); + for (let t = 0; t < e - 1; t++) s[n[t]] = t; + this.logTable = s, this.zero = new Z(this, Int32Array.from([0])), this.one = new Z(this, Int32Array.from([1])) + } + + getZero() { + return this.zero + } + + getOne() { + return this.one + } + + buildMonomial(t, e) { + if (t < 0) throw new o; + if (0 === e) return this.zero; + const r = new Int32Array(t + 1); + return r[0] = e, new Z(this, r) + } + + inverse(t) { + if (0 === t) throw new K; + return this.expTable[this.size - this.logTable[t] - 1] + } + + multiply(t, e) { + return 0 === t || 0 === e ? 0 : this.expTable[(this.logTable[t] + this.logTable[e]) % (this.size - 1)] + } + + getSize() { + return this.size + } + + getGeneratorBase() { + return this.generatorBase + } + + toString() { + return "GF(0x" + f.toHexString(this.primitive) + "," + this.size + ")" + } + + equals(t) { + return t === this + } + } + + q.AZTEC_DATA_12 = new q(4201, 4096, 1), q.AZTEC_DATA_10 = new q(1033, 1024, 1), q.AZTEC_DATA_6 = new q(67, 64, 1), q.AZTEC_PARAM = new q(19, 16, 1), q.QR_CODE_FIELD_256 = new q(285, 256, 0), q.DATA_MATRIX_FIELD_256 = new q(301, 256, 1), q.AZTEC_DATA_8 = q.DATA_MATRIX_FIELD_256, q.MAXICODE_FIELD_64 = q.AZTEC_DATA_6; + + class Q extends i { + } + + Q.kind = "ReedSolomonException"; + + class j extends i { + } + + j.kind = "IllegalStateException"; + + class J { + constructor(t) { + this.field = t + } + + decode(t, e) { + const r = this.field, n = new Z(r, t), i = new Int32Array(e); + let s = !0; + for (let t = 0; t < e; t++) { + const e = n.evaluateAt(r.exp(t + r.getGeneratorBase())); + i[i.length - 1 - t] = e, 0 !== e && (s = !1) + } + if (s) return; + const o = new Z(r, i), a = this.runEuclideanAlgorithm(r.buildMonomial(e, 1), o, e), l = a[0], h = a[1], + c = this.findErrorLocations(l), u = this.findErrorMagnitudes(h, c); + for (let e = 0; e < c.length; e++) { + const n = t.length - 1 - r.log(c[e]); + if (n < 0) throw new Q("Bad error location"); + t[n] = q.addOrSubtract(t[n], u[e]) + } + } + + runEuclideanAlgorithm(t, e, r) { + if (t.getDegree() < e.getDegree()) { + const r = t; + t = e, e = r + } + const n = this.field; + let i = t, s = e, o = n.getZero(), a = n.getOne(); + for (; s.getDegree() >= (r / 2 | 0);) { + let t = i, e = o; + if (i = s, o = a, i.isZero()) throw new Q("r_{i-1} was zero"); + s = t; + let r = n.getZero(); + const l = i.getCoefficient(i.getDegree()), h = n.inverse(l); + for (; s.getDegree() >= i.getDegree() && !s.isZero();) { + const t = s.getDegree() - i.getDegree(), e = n.multiply(s.getCoefficient(s.getDegree()), h); + r = r.addOrSubtract(n.buildMonomial(t, e)), s = s.addOrSubtract(i.multiplyByMonomial(t, e)) + } + if (a = r.multiply(o).addOrSubtract(e), s.getDegree() >= i.getDegree()) throw new j("Division algorithm failed to reduce polynomial?") + } + const l = a.getCoefficient(0); + if (0 === l) throw new Q("sigmaTilde(0) was zero"); + const h = n.inverse(l); + return [a.multiplyScalar(h), s.multiplyScalar(h)] + } + + findErrorLocations(t) { + const e = t.getDegree(); + if (1 === e) return Int32Array.from([t.getCoefficient(1)]); + const r = new Int32Array(e); + let n = 0; + const i = this.field; + for (let s = 1; s < i.getSize() && n < e; s++) 0 === t.evaluateAt(s) && (r[n] = i.inverse(s), n++); + if (n !== e) throw new Q("Error locator degree does not match number of roots"); + return r + } + + findErrorMagnitudes(t, e) { + const r = e.length, n = new Int32Array(r), i = this.field; + for (let s = 0; s < r; s++) { + const o = i.inverse(e[s]); + let a = 1; + for (let t = 0; t < r; t++) if (s !== t) { + const r = i.multiply(e[t], o), n = 0 == (1 & r) ? 1 | r : -2 & r; + a = i.multiply(a, n) + } + n[s] = i.multiply(t.evaluateAt(o), i.inverse(a)), 0 !== i.getGeneratorBase() && (n[s] = i.multiply(n[s], o)) + } + return n + } + } + + !function (t) { + t[t.UPPER = 0] = "UPPER", t[t.LOWER = 1] = "LOWER", t[t.MIXED = 2] = "MIXED", t[t.DIGIT = 3] = "DIGIT", t[t.PUNCT = 4] = "PUNCT", t[t.BINARY = 5] = "BINARY" + }(x || (x = {})); + + class ${decode(t){this.ddata=t;let e=t.getBits(),r=this.extractBits(e),n=this.correctBits(r),i=$.convertBoolArrayToByteArray(n),s=$.getEncodedData(n),o=new z(i,s,null,null);return o.setNumBits(n.length),o} + static + + highLevelDecode(t) + { + return this.getEncodedData(t) + } + static + getEncodedData(t) + { + let e = t.length, r = x.UPPER, n = x.UPPER, i = "", s = 0; + for (; s < e;) if (n === x.BINARY) { + if (e - s < 5) break; + let o = $.readCode(t, s, 5); + if (s += 5, 0 === o) { + if (e - s < 11) break; + o = $.readCode(t, s, 11) + 31, s += 11 + } + for (let r = 0; r < o; r++) { + if (e - s < 8) { + s = e; + break + } + const r = $.readCode(t, s, 8); + i += S.castAsNonUtf8Char(r), s += 8 + } + n = r + } else { + let o = n === x.DIGIT ? 4 : 5; + if (e - s < o) break; + let a = $.readCode(t, s, o); + s += o; + let l = $.getCharacter(n, a); + l.startsWith("CTRL_") ? (r = n, n = $.getTable(l.charAt(5)), "L" === l.charAt(6) && (r = n)) : (i += l, n = r) + } + return i + } + static + getTable(t) + { + switch (t) { + case"L": + return x.LOWER; + case"P": + return x.PUNCT; + case"M": + return x.MIXED; + case"D": + return x.DIGIT; + case"B": + return x.BINARY; + case"U": + default: + return x.UPPER + } + } + static + getCharacter(t, e) + { + switch (t) { + case x.UPPER: + return $.UPPER_TABLE[e]; + case x.LOWER: + return $.LOWER_TABLE[e]; + case x.MIXED: + return $.MIXED_TABLE[e]; + case x.PUNCT: + return $.PUNCT_TABLE[e]; + case x.DIGIT: + return $.DIGIT_TABLE[e]; + default: + throw new j("Bad table") + } + } + correctBits(t) + { + let e, r; + this.ddata.getNbLayers() <= 2 ? (r = 6, e = q.AZTEC_DATA_6) : this.ddata.getNbLayers() <= 8 ? (r = 8, e = q.AZTEC_DATA_8) : this.ddata.getNbLayers() <= 22 ? (r = 10, e = q.AZTEC_DATA_10) : (r = 12, e = q.AZTEC_DATA_12); + let n = this.ddata.getNbDatablocks(), i = t.length / r; + if (i < n) throw new E; + let s = t.length % r, o = new Int32Array(i); + for (let e = 0; e < i; e++, s += r) o[e] = $.readCode(t, s, r); + try { + new J(e).decode(o, i - n) + } catch (t) { + throw new E(t) + } + let a = (1 << r) - 1, l = 0; + for (let t = 0; t < n; t++) { + let e = o[t]; + if (0 === e || e === a) throw new E; + 1 !== e && e !== a - 1 || l++ + } + let h = new Array(n * r - l), c = 0; + for (let t = 0; t < n; t++) { + let e = o[t]; + if (1 === e || e === a - 1) h.fill(e > 1, c, c + r - 1), c += r - 1; else for (let t = r - 1; t >= 0; --t) h[c++] = 0 != (e & 1 << t) + } + return h + } + extractBits(t) + { + let e = this.ddata.isCompact(), r = this.ddata.getNbLayers(), n = (e ? 11 : 14) + 4 * r, i = new Int32Array(n), + s = new Array(this.totalBitsInLayer(r, e)); + if (e) for (let t = 0; t < i.length; t++) i[t] = t; else { + let t = n + 1 + 2 * f.truncDivision(f.truncDivision(n, 2) - 1, 15), e = n / 2, r = f.truncDivision(t, 2); + for (let t = 0; t < e; t++) { + let n = t + f.truncDivision(t, 15); + i[e - t - 1] = r - n - 1, i[e + t] = r + n + 1 + } + } + for (let o = 0, a = 0; o < r; o++) { + let l = 4 * (r - o) + (e ? 9 : 12), h = 2 * o, c = n - 1 - h; + for (let e = 0; e < l; e++) { + let r = 2 * e; + for (let n = 0; n < 2; n++) s[a + r + n] = t.get(i[h + n], i[h + e]), s[a + 2 * l + r + n] = t.get(i[h + e], i[c - n]), s[a + 4 * l + r + n] = t.get(i[c - n], i[c - e]), s[a + 6 * l + r + n] = t.get(i[c - e], i[h + n]) + } + a += 8 * l + } + return s + } + static + readCode(t, e, r) + { + let n = 0; + for (let i = e; i < e + r; i++) n <<= 1, t[i] && (n |= 1); + return n + } + static + readByte(t, e) + { + let r = t.length - e; + return r >= 8 ? $.readCode(t, e, 8) : $.readCode(t, e, r) << 8 - r + } + static + convertBoolArrayToByteArray(t) + { + let e = new Uint8Array((t.length + 7) / 8); + for (let r = 0; r < e.length; r++) e[r] = $.readByte(t, 8 * r); + return e + } + totalBitsInLayer(t, e) + { + return ((e ? 88 : 112) + 16 * t) * t + } +} +$.UPPER_TABLE = ["CTRL_PS", " ", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "CTRL_LL", "CTRL_ML", "CTRL_DL", "CTRL_BS"], $.LOWER_TABLE = ["CTRL_PS", " ", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "CTRL_US", "CTRL_ML", "CTRL_DL", "CTRL_BS"], $.MIXED_TABLE = ["CTRL_PS", " ", "\\1", "\\2", "\\3", "\\4", "\\5", "\\6", "\\7", "\b", "\t", "\n", "\\13", "\f", "\r", "\\33", "\\34", "\\35", "\\36", "\\37", "@", "\\", "^", "_", "`", "|", "~", "\\177", "CTRL_LL", "CTRL_UL", "CTRL_PL", "CTRL_BS"], $.PUNCT_TABLE = ["", "\r", "\r\n", ". ", ", ", ": ", "!", '"', "#", "$", "%", "&", "'", "(", ")", "*", "+", ",", "-", ".", "/", ":", ";", "<", "=", ">", "?", "[", "]", "{", "}", "CTRL_UL"], $.DIGIT_TABLE = ["CTRL_PS", " ", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ",", ".", "CTRL_UL", "CTRL_US"]; + +class tt { + constructor() { + } + + static round(t) { + return NaN === t ? 0 : t <= Number.MIN_SAFE_INTEGER ? Number.MIN_SAFE_INTEGER : t >= Number.MAX_SAFE_INTEGER ? Number.MAX_SAFE_INTEGER : t + (t < 0 ? -.5 : .5) | 0 + } + + static distance(t, e, r, n) { + const i = t - r, s = e - n; + return Math.sqrt(i * i + s * s) + } + + static sum(t) { + let e = 0; + for (let r = 0, n = t.length; r !== n; r++) { + e += t[r] + } + return e + } +} + +class et { + static floatToIntBits(t) { + return t + } +} + +et.MAX_VALUE = Number.MAX_SAFE_INTEGER; + +class rt { + constructor(t, e) { + this.x = t, this.y = e + } + + getX() { + return this.x + } + + getY() { + return this.y + } + + equals(t) { + if (t instanceof rt) { + const e = t; + return this.x === e.x && this.y === e.y + } + return !1 + } + + hashCode() { + return 31 * et.floatToIntBits(this.x) + et.floatToIntBits(this.y) + } + + toString() { + return "(" + this.x + "," + this.y + ")" + } + + static orderBestPatterns(t) { + const e = this.distance(t[0], t[1]), r = this.distance(t[1], t[2]), n = this.distance(t[0], t[2]); + let i, s, o; + if (r >= e && r >= n ? (s = t[0], i = t[1], o = t[2]) : n >= r && n >= e ? (s = t[1], i = t[0], o = t[2]) : (s = t[2], i = t[0], o = t[1]), this.crossProductZ(i, s, o) < 0) { + const t = i; + i = o, o = t + } + t[0] = i, t[1] = s, t[2] = o + } + + static distance(t, e) { + return tt.distance(t.x, t.y, e.x, e.y) + } + + static crossProductZ(t, e, r) { + const n = e.x, i = e.y; + return (r.x - n) * (t.y - i) - (r.y - i) * (t.x - n) + } +} + +class nt { + constructor(t, e) { + this.bits = t, this.points = e + } + + getBits() { + return this.bits + } + + getPoints() { + return this.points + } +} + +class it extends nt { + constructor(t, e, r, n, i) { + super(t, e), this.compact = r, this.nbDatablocks = n, this.nbLayers = i + } + + getNbLayers() { + return this.nbLayers + } + + getNbDatablocks() { + return this.nbDatablocks + } + + isCompact() { + return this.compact + } +} + +class st { + constructor(t, e, r, n) { + this.image = t, this.height = t.getHeight(), this.width = t.getWidth(), null == e && (e = st.INIT_SIZE), null == r && (r = t.getWidth() / 2 | 0), null == n && (n = t.getHeight() / 2 | 0); + const i = e / 2 | 0; + if (this.leftInit = r - i, this.rightInit = r + i, this.upInit = n - i, this.downInit = n + i, this.upInit < 0 || this.leftInit < 0 || this.downInit >= this.height || this.rightInit >= this.width) throw new R + } + + detect() { + let t = this.leftInit, e = this.rightInit, r = this.upInit, n = this.downInit, i = !1, s = !0, o = !1, a = !1, + l = !1, h = !1, c = !1; + const u = this.width, d = this.height; + for (; s;) { + s = !1; + let g = !0; + for (; (g || !a) && e < u;) g = this.containsBlackPoint(r, n, e, !1), g ? (e++, s = !0, a = !0) : a || e++; + if (e >= u) { + i = !0; + break + } + let f = !0; + for (; (f || !l) && n < d;) f = this.containsBlackPoint(t, e, n, !0), f ? (n++, s = !0, l = !0) : l || n++; + if (n >= d) { + i = !0; + break + } + let w = !0; + for (; (w || !h) && t >= 0;) w = this.containsBlackPoint(r, n, t, !1), w ? (t--, s = !0, h = !0) : h || t--; + if (t < 0) { + i = !0; + break + } + let A = !0; + for (; (A || !c) && r >= 0;) A = this.containsBlackPoint(t, e, r, !0), A ? (r--, s = !0, c = !0) : c || r--; + if (r < 0) { + i = !0; + break + } + s && (o = !0) + } + if (!i && o) { + const i = e - t; + let s = null; + for (let e = 1; null === s && e < i; e++) s = this.getBlackPointOnSegment(t, n - e, t + e, n); + if (null == s) throw new R; + let o = null; + for (let e = 1; null === o && e < i; e++) o = this.getBlackPointOnSegment(t, r + e, t + e, r); + if (null == o) throw new R; + let a = null; + for (let t = 1; null === a && t < i; t++) a = this.getBlackPointOnSegment(e, r + t, e - t, r); + if (null == a) throw new R; + let l = null; + for (let t = 1; null === l && t < i; t++) l = this.getBlackPointOnSegment(e, n - t, e - t, n); + if (null == l) throw new R; + return this.centerEdges(l, s, a, o) + } + throw new R + } + + getBlackPointOnSegment(t, e, r, n) { + const i = tt.round(tt.distance(t, e, r, n)), s = (r - t) / i, o = (n - e) / i, a = this.image; + for (let r = 0; r < i; r++) { + const n = tt.round(t + r * s), i = tt.round(e + r * o); + if (a.get(n, i)) return new rt(n, i) + } + return null + } + + centerEdges(t, e, r, n) { + const i = t.getX(), s = t.getY(), o = e.getX(), a = e.getY(), l = r.getX(), h = r.getY(), c = n.getX(), + u = n.getY(), d = st.CORR; + return i < this.width / 2 ? [new rt(c - d, u + d), new rt(o + d, a + d), new rt(l - d, h - d), new rt(i + d, s - d)] : [new rt(c + d, u + d), new rt(o + d, a - d), new rt(l - d, h + d), new rt(i - d, s - d)] + } + + containsBlackPoint(t, e, r, n) { + const i = this.image; + if (n) { + for (let n = t; n <= e; n++) if (i.get(n, r)) return !0 + } else for (let n = t; n <= e; n++) if (i.get(r, n)) return !0; + return !1 + } +} + +st.INIT_SIZE = 10, st.CORR = 1; + +class ot { + static checkAndNudgePoints(t, e) { + const r = t.getWidth(), n = t.getHeight(); + let i = !0; + for (let t = 0; t < e.length && i; t += 2) { + const s = Math.floor(e[t]), o = Math.floor(e[t + 1]); + if (s < -1 || s > r || o < -1 || o > n) throw new R; + i = !1, -1 === s ? (e[t] = 0, i = !0) : s === r && (e[t] = r - 1, i = !0), -1 === o ? (e[t + 1] = 0, i = !0) : o === n && (e[t + 1] = n - 1, i = !0) + } + i = !0; + for (let t = e.length - 2; t >= 0 && i; t -= 2) { + const s = Math.floor(e[t]), o = Math.floor(e[t + 1]); + if (s < -1 || s > r || o < -1 || o > n) throw new R; + i = !1, -1 === s ? (e[t] = 0, i = !0) : s === r && (e[t] = r - 1, i = !0), -1 === o ? (e[t + 1] = 0, i = !0) : o === n && (e[t + 1] = n - 1, i = !0) + } + } +} + +class at { + constructor(t, e, r, n, i, s, o, a, l) { + this.a11 = t, this.a21 = e, this.a31 = r, this.a12 = n, this.a22 = i, this.a32 = s, this.a13 = o, this.a23 = a, this.a33 = l + } + + static quadrilateralToQuadrilateral(t, e, r, n, i, s, o, a, l, h, c, u, d, g, f, w) { + const A = at.quadrilateralToSquare(t, e, r, n, i, s, o, a); + return at.squareToQuadrilateral(l, h, c, u, d, g, f, w).times(A) + } + + transformPoints(t) { + const e = t.length, r = this.a11, n = this.a12, i = this.a13, s = this.a21, o = this.a22, a = this.a23, + l = this.a31, h = this.a32, c = this.a33; + for (let u = 0; u < e; u += 2) { + const e = t[u], d = t[u + 1], g = i * e + a * d + c; + t[u] = (r * e + s * d + l) / g, t[u + 1] = (n * e + o * d + h) / g + } + } + + transformPointsWithValues(t, e) { + const r = this.a11, n = this.a12, i = this.a13, s = this.a21, o = this.a22, a = this.a23, l = this.a31, + h = this.a32, c = this.a33, u = t.length; + for (let d = 0; d < u; d++) { + const u = t[d], g = e[d], f = i * u + a * g + c; + t[d] = (r * u + s * g + l) / f, e[d] = (n * u + o * g + h) / f + } + } + + static squareToQuadrilateral(t, e, r, n, i, s, o, a) { + const l = t - r + i - o, h = e - n + s - a; + if (0 === l && 0 === h) return new at(r - t, i - r, t, n - e, s - n, e, 0, 0, 1); + { + const c = r - i, u = o - i, d = n - s, g = a - s, f = c * g - u * d, w = (l * g - u * h) / f, + A = (c * h - l * d) / f; + return new at(r - t + w * r, o - t + A * o, t, n - e + w * n, a - e + A * a, e, w, A, 1) + } + } + + static quadrilateralToSquare(t, e, r, n, i, s, o, a) { + return at.squareToQuadrilateral(t, e, r, n, i, s, o, a).buildAdjoint() + } + + buildAdjoint() { + return new at(this.a22 * this.a33 - this.a23 * this.a32, this.a23 * this.a31 - this.a21 * this.a33, this.a21 * this.a32 - this.a22 * this.a31, this.a13 * this.a32 - this.a12 * this.a33, this.a11 * this.a33 - this.a13 * this.a31, this.a12 * this.a31 - this.a11 * this.a32, this.a12 * this.a23 - this.a13 * this.a22, this.a13 * this.a21 - this.a11 * this.a23, this.a11 * this.a22 - this.a12 * this.a21) + } + + times(t) { + return new at(this.a11 * t.a11 + this.a21 * t.a12 + this.a31 * t.a13, this.a11 * t.a21 + this.a21 * t.a22 + this.a31 * t.a23, this.a11 * t.a31 + this.a21 * t.a32 + this.a31 * t.a33, this.a12 * t.a11 + this.a22 * t.a12 + this.a32 * t.a13, this.a12 * t.a21 + this.a22 * t.a22 + this.a32 * t.a23, this.a12 * t.a31 + this.a22 * t.a32 + this.a32 * t.a33, this.a13 * t.a11 + this.a23 * t.a12 + this.a33 * t.a13, this.a13 * t.a21 + this.a23 * t.a22 + this.a33 * t.a23, this.a13 * t.a31 + this.a23 * t.a32 + this.a33 * t.a33) + } +} + +class lt extends ot { + sampleGrid(t, e, r, n, i, s, o, a, l, h, c, u, d, g, f, w, A, C, E) { + const m = at.quadrilateralToQuadrilateral(n, i, s, o, a, l, h, c, u, d, g, f, w, A, C, E); + return this.sampleGridWithTransform(t, e, r, m) + } + + sampleGridWithTransform(t, e, r, n) { + if (e <= 0 || r <= 0) throw new R; + const i = new T(e, r), s = new Float32Array(2 * e); + for (let e = 0; e < r; e++) { + const r = s.length, o = e + .5; + for (let t = 0; t < r; t += 2) s[t] = t / 2 + .5, s[t + 1] = o; + n.transformPoints(s), ot.checkAndNudgePoints(t, s); + try { + for (let n = 0; n < r; n += 2) t.get(Math.floor(s[n]), Math.floor(s[n + 1])) && i.set(n / 2, e) + } catch (t) { + throw new R + } + } + return i + } +} + +class ht { + static setGridSampler(t) { + ht.gridSampler = t + } + + static getInstance() { + return ht.gridSampler + } +} + +ht.gridSampler = new lt; + +class ct { + constructor(t, e) { + this.x = t, this.y = e + } + + toResultPoint() { + return new rt(this.getX(), this.getY()) + } + + getX() { + return this.x + } + + getY() { + return this.y + } +} + +class ut { + constructor(t) { + this.EXPECTED_CORNER_BITS = new Int32Array([3808, 476, 2107, 1799]), this.image = t + } + + detect() { + return this.detectMirror(!1) + } + + detectMirror(t) { + let e = this.getMatrixCenter(), r = this.getBullsEyeCorners(e); + if (t) { + let t = r[0]; + r[0] = r[2], r[2] = t + } + this.extractParameters(r); + let n = this.sampleGrid(this.image, r[this.shift % 4], r[(this.shift + 1) % 4], r[(this.shift + 2) % 4], r[(this.shift + 3) % 4]), + i = this.getMatrixCornerPoints(r); + return new it(n, i, this.compact, this.nbDataBlocks, this.nbLayers) + } + + extractParameters(t) { + if (!(this.isValidPoint(t[0]) && this.isValidPoint(t[1]) && this.isValidPoint(t[2]) && this.isValidPoint(t[3]))) throw new R; + let e = 2 * this.nbCenterLayers, + r = new Int32Array([this.sampleLine(t[0], t[1], e), this.sampleLine(t[1], t[2], e), this.sampleLine(t[2], t[3], e), this.sampleLine(t[3], t[0], e)]); + this.shift = this.getRotation(r, e); + let n = 0; + for (let t = 0; t < 4; t++) { + let e = r[(this.shift + t) % 4]; + this.compact ? (n <<= 7, n += e >> 1 & 127) : (n <<= 10, n += (e >> 2 & 992) + (e >> 1 & 31)) + } + let i = this.getCorrectedParameterData(n, this.compact); + this.compact ? (this.nbLayers = 1 + (i >> 6), this.nbDataBlocks = 1 + (63 & i)) : (this.nbLayers = 1 + (i >> 11), this.nbDataBlocks = 1 + (2047 & i)) + } + + getRotation(t, e) { + let r = 0; + t.forEach(((t, n, i) => { + r = (r << 3) + ((t >> e - 2 << 1) + (1 & t)) + })), r = ((1 & r) << 11) + (r >> 1); + for (let t = 0; t < 4; t++) if (f.bitCount(r ^ this.EXPECTED_CORNER_BITS[t]) <= 2) return t; + throw new R + } + + getCorrectedParameterData(t, e) { + let r, n; + e ? (r = 7, n = 2) : (r = 10, n = 4); + let i = r - n, s = new Int32Array(r); + for (let e = r - 1; e >= 0; --e) s[e] = 15 & t, t >>= 4; + try { + new J(q.AZTEC_PARAM).decode(s, i) + } catch (t) { + throw new R + } + let o = 0; + for (let t = 0; t < n; t++) o = (o << 4) + s[t]; + return o + } + + getBullsEyeCorners(t) { + let e = t, r = t, n = t, i = t, s = !0; + for (this.nbCenterLayers = 1; this.nbCenterLayers < 9; this.nbCenterLayers++) { + let t = this.getFirstDifferent(e, s, 1, -1), o = this.getFirstDifferent(r, s, 1, 1), + a = this.getFirstDifferent(n, s, -1, 1), l = this.getFirstDifferent(i, s, -1, -1); + if (this.nbCenterLayers > 2) { + let r = this.distancePoint(l, t) * this.nbCenterLayers / (this.distancePoint(i, e) * (this.nbCenterLayers + 2)); + if (r < .75 || r > 1.25 || !this.isWhiteOrBlackRectangle(t, o, a, l)) break + } + e = t, r = o, n = a, i = l, s = !s + } + if (5 !== this.nbCenterLayers && 7 !== this.nbCenterLayers) throw new R; + this.compact = 5 === this.nbCenterLayers; + let o = new rt(e.getX() + .5, e.getY() - .5), a = new rt(r.getX() + .5, r.getY() + .5), + l = new rt(n.getX() - .5, n.getY() + .5), h = new rt(i.getX() - .5, i.getY() - .5); + return this.expandSquare([o, a, l, h], 2 * this.nbCenterLayers - 3, 2 * this.nbCenterLayers) + } + + getMatrixCenter() { + let t, e, r, n; + try { + let i = new st(this.image).detect(); + t = i[0], e = i[1], r = i[2], n = i[3] + } catch (i) { + let s = this.image.getWidth() / 2, o = this.image.getHeight() / 2; + t = this.getFirstDifferent(new ct(s + 7, o - 7), !1, 1, -1).toResultPoint(), e = this.getFirstDifferent(new ct(s + 7, o + 7), !1, 1, 1).toResultPoint(), r = this.getFirstDifferent(new ct(s - 7, o + 7), !1, -1, 1).toResultPoint(), n = this.getFirstDifferent(new ct(s - 7, o - 7), !1, -1, -1).toResultPoint() + } + let i = tt.round((t.getX() + n.getX() + e.getX() + r.getX()) / 4), + s = tt.round((t.getY() + n.getY() + e.getY() + r.getY()) / 4); + try { + let o = new st(this.image, 15, i, s).detect(); + t = o[0], e = o[1], r = o[2], n = o[3] + } catch (o) { + t = this.getFirstDifferent(new ct(i + 7, s - 7), !1, 1, -1).toResultPoint(), e = this.getFirstDifferent(new ct(i + 7, s + 7), !1, 1, 1).toResultPoint(), r = this.getFirstDifferent(new ct(i - 7, s + 7), !1, -1, 1).toResultPoint(), n = this.getFirstDifferent(new ct(i - 7, s - 7), !1, -1, -1).toResultPoint() + } + return i = tt.round((t.getX() + n.getX() + e.getX() + r.getX()) / 4), s = tt.round((t.getY() + n.getY() + e.getY() + r.getY()) / 4), new ct(i, s) + } + + getMatrixCornerPoints(t) { + return this.expandSquare(t, 2 * this.nbCenterLayers, this.getDimension()) + } + + sampleGrid(t, e, r, n, i) { + let s = ht.getInstance(), o = this.getDimension(), a = o / 2 - this.nbCenterLayers, + l = o / 2 + this.nbCenterLayers; + return s.sampleGrid(t, o, o, a, a, l, a, l, l, a, l, e.getX(), e.getY(), r.getX(), r.getY(), n.getX(), n.getY(), i.getX(), i.getY()) + } + + sampleLine(t, e, r) { + let n = 0, i = this.distanceResultPoint(t, e), s = i / r, o = t.getX(), a = t.getY(), + l = s * (e.getX() - t.getX()) / i, h = s * (e.getY() - t.getY()) / i; + for (let t = 0; t < r; t++) this.image.get(tt.round(o + t * l), tt.round(a + t * h)) && (n |= 1 << r - t - 1); + return n + } + + isWhiteOrBlackRectangle(t, e, r, n) { + t = new ct(t.getX() - 3, t.getY() + 3), e = new ct(e.getX() - 3, e.getY() - 3), r = new ct(r.getX() + 3, r.getY() - 3), n = new ct(n.getX() + 3, n.getY() + 3); + let i = this.getColor(n, t); + if (0 === i) return !1; + let s = this.getColor(t, e); + return s === i && (s = this.getColor(e, r), s === i && (s = this.getColor(r, n), s === i)) + } + + getColor(t, e) { + let r = this.distancePoint(t, e), n = (e.getX() - t.getX()) / r, i = (e.getY() - t.getY()) / r, s = 0, + o = t.getX(), a = t.getY(), l = this.image.get(t.getX(), t.getY()), h = Math.ceil(r); + for (let t = 0; t < h; t++) o += n, a += i, this.image.get(tt.round(o), tt.round(a)) !== l && s++; + let c = s / r; + return c > .1 && c < .9 ? 0 : c <= .1 === l ? 1 : -1 + } + + getFirstDifferent(t, e, r, n) { + let i = t.getX() + r, s = t.getY() + n; + for (; this.isValid(i, s) && this.image.get(i, s) === e;) i += r, s += n; + for (i -= r, s -= n; this.isValid(i, s) && this.image.get(i, s) === e;) i += r; + for (i -= r; this.isValid(i, s) && this.image.get(i, s) === e;) s += n; + return s -= n, new ct(i, s) + } + + expandSquare(t, e, r) { + let n = r / (2 * e), i = t[0].getX() - t[2].getX(), s = t[0].getY() - t[2].getY(), + o = (t[0].getX() + t[2].getX()) / 2, a = (t[0].getY() + t[2].getY()) / 2, l = new rt(o + n * i, a + n * s), + h = new rt(o - n * i, a - n * s); + return i = t[1].getX() - t[3].getX(), s = t[1].getY() - t[3].getY(), o = (t[1].getX() + t[3].getX()) / 2, a = (t[1].getY() + t[3].getY()) / 2, [l, new rt(o + n * i, a + n * s), h, new rt(o - n * i, a - n * s)] + } + + isValid(t, e) { + return t >= 0 && t < this.image.getWidth() && e > 0 && e < this.image.getHeight() + } + + isValidPoint(t) { + let e = tt.round(t.getX()), r = tt.round(t.getY()); + return this.isValid(e, r) + } + + distancePoint(t, e) { + return tt.distance(t.getX(), t.getY(), e.getX(), e.getY()) + } + + distanceResultPoint(t, e) { + return tt.distance(t.getX(), t.getY(), e.getX(), e.getY()) + } + + getDimension() { + return this.compact ? 4 * this.nbLayers + 11 : this.nbLayers <= 4 ? 4 * this.nbLayers + 15 : 4 * this.nbLayers + 2 * (f.truncDivision(this.nbLayers - 4, 8) + 1) + 15 + } +} + +class dt { + decode(t, e = null) { + let r = null, n = new ut(t.getBlackMatrix()), i = null, s = null; + try { + let t = n.detectMirror(!1); + i = t.getPoints(), this.reportFoundResultPoints(e, i), s = (new $).decode(t) + } catch (t) { + r = t + } + if (null == s) try { + let t = n.detectMirror(!0); + i = t.getPoints(), this.reportFoundResultPoints(e, i), s = (new $).decode(t) + } catch (t) { + if (null != r) throw r; + throw t + } + let o = new F(s.getText(), s.getRawBytes(), s.getNumBits(), i, v.AZTEC, c.currentTimeMillis()), + a = s.getByteSegments(); + null != a && o.putMetadata(W.BYTE_SEGMENTS, a); + let l = s.getECLevel(); + return null != l && o.putMetadata(W.ERROR_CORRECTION_LEVEL, l), o + } + + reportFoundResultPoints(t, e) { + if (null != t) { + let r = t.get(C.NEED_RESULT_POINT_CALLBACK); + null != r && e.forEach(((t, e, n) => { + r.foundPossibleResultPoint(t) + })) + } + } + + reset() { + } +} + +class gt { + decode(t, e) { + try { + return this.doDecode(t, e) + } catch (r) { + if (e && !0 === e.get(C.TRY_HARDER) && t.isRotateSupported()) { + const r = t.rotateCounterClockwise(), n = this.doDecode(r, e), i = n.getResultMetadata(); + let s = 270; + null !== i && !0 === i.get(W.ORIENTATION) && (s += i.get(W.ORIENTATION) % 360), n.putMetadata(W.ORIENTATION, s); + const o = n.getResultPoints(); + if (null !== o) { + const t = r.getHeight(); + for (let e = 0; e < o.length; e++) o[e] = new rt(t - o[e].getY() - 1, o[e].getX()) + } + return n + } + throw new R + } + } + + reset() { + } + + doDecode(t, e) { + const r = t.getWidth(), n = t.getHeight(); + let i = new w(r); + const s = e && !0 === e.get(C.TRY_HARDER), o = Math.max(1, n >> (s ? 8 : 5)); + let a; + a = s ? n : 15; + const l = Math.trunc(n / 2); + for (let s = 0; s < a; s++) { + const a = Math.trunc((s + 1) / 2), h = l + o * (0 == (1 & s) ? a : -a); + if (h < 0 || h >= n) break; + try { + i = t.getBlackRow(h, i) + } catch (t) { + continue + } + for (let t = 0; t < 2; t++) { + if (1 === t && (i.reverse(), e && !0 === e.get(C.NEED_RESULT_POINT_CALLBACK))) { + const t = new Map; + e.forEach(((e, r) => t.set(r, e))), t.delete(C.NEED_RESULT_POINT_CALLBACK), e = t + } + try { + const n = this.decodeRow(h, i, e); + if (1 === t) { + n.putMetadata(W.ORIENTATION, 180); + const t = n.getResultPoints(); + null !== t && (t[0] = new rt(r - t[0].getX() - 1, t[0].getY()), t[1] = new rt(r - t[1].getX() - 1, t[1].getY())) + } + return n + } catch (t) { + } + } + } + throw new R + } + + static recordPattern(t, e, r) { + const n = r.length; + for (let t = 0; t < n; t++) r[t] = 0; + const i = t.getSize(); + if (e >= i) throw new R; + let s = !t.get(e), o = 0, a = e; + for (; a < i;) { + if (t.get(a) !== s) r[o]++; else { + if (++o === n) break; + r[o] = 1, s = !s + } + a++ + } + if (o !== n && (o !== n - 1 || a !== i)) throw new R + } + + static recordPatternInReverse(t, e, r) { + let n = r.length, i = t.get(e); + for (; e > 0 && n >= 0;) t.get(--e) !== i && (n--, i = !i); + if (n >= 0) throw new R; + gt.recordPattern(t, e + 1, r) + } + + static patternMatchVariance(t, e, r) { + const n = t.length; + let i = 0, s = 0; + for (let r = 0; r < n; r++) i += t[r], s += e[r]; + if (i < s) return Number.POSITIVE_INFINITY; + const o = i / s; + r *= o; + let a = 0; + for (let i = 0; i < n; i++) { + const n = t[i], s = e[i] * o, l = n > s ? n - s : s - n; + if (l > r) return Number.POSITIVE_INFINITY; + a += l + } + return a / i + } +} + +class ft extends gt { + static findStartPattern(t) { + const e = t.getSize(), r = t.getNextSet(0); + let n = 0, i = Int32Array.from([0, 0, 0, 0, 0, 0]), s = r, o = !1; + for (let a = r; a < e; a++) if (t.get(a) !== o) i[n]++; else { + if (5 === n) { + let e = ft.MAX_AVG_VARIANCE, r = -1; + for (let t = ft.CODE_START_A; t <= ft.CODE_START_C; t++) { + const n = gt.patternMatchVariance(i, ft.CODE_PATTERNS[t], ft.MAX_INDIVIDUAL_VARIANCE); + n < e && (e = n, r = t) + } + if (r >= 0 && t.isRange(Math.max(0, s - (a - s) / 2), s, !1)) return Int32Array.from([s, a, r]); + s += i[0] + i[1], i = i.slice(2, i.length - 1), i[n - 1] = 0, i[n] = 0, n-- + } else n++; + i[n] = 1, o = !o + } + throw new R + } + + static decodeCode(t, e, r) { + gt.recordPattern(t, r, e); + let n = ft.MAX_AVG_VARIANCE, i = -1; + for (let t = 0; t < ft.CODE_PATTERNS.length; t++) { + const r = ft.CODE_PATTERNS[t], s = this.patternMatchVariance(e, r, ft.MAX_INDIVIDUAL_VARIANCE); + s < n && (n = s, i = t) + } + if (i >= 0) return i; + throw new R + } + + decodeRow(t, e, r) { + const n = r && !0 === r.get(C.ASSUME_GS1), i = ft.findStartPattern(e), s = i[2]; + let o = 0; + const a = new Uint8Array(20); + let h; + switch (a[o++] = s, s) { + case ft.CODE_START_A: + h = ft.CODE_CODE_A; + break; + case ft.CODE_START_B: + h = ft.CODE_CODE_B; + break; + case ft.CODE_START_C: + h = ft.CODE_CODE_C; + break; + default: + throw new E + } + let c = !1, u = !1, d = "", g = i[0], f = i[1]; + const w = Int32Array.from([0, 0, 0, 0, 0, 0]); + let A = 0, m = 0, _ = s, I = 0, S = !0, p = !1, T = !1; + for (; !c;) { + const t = u; + switch (u = !1, A = m, m = ft.decodeCode(e, w, f), a[o++] = m, m !== ft.CODE_STOP && (S = !0), m !== ft.CODE_STOP && (I++, _ += I * m), g = f, f += w.reduce(((t, e) => t + e), 0), m) { + case ft.CODE_START_A: + case ft.CODE_START_B: + case ft.CODE_START_C: + throw new E + } + switch (h) { + case ft.CODE_CODE_A: + if (m < 64) d += T === p ? String.fromCharCode(" ".charCodeAt(0) + m) : String.fromCharCode(" ".charCodeAt(0) + m + 128), T = !1; else if (m < 96) d += T === p ? String.fromCharCode(m - 64) : String.fromCharCode(m + 64), T = !1; else switch (m !== ft.CODE_STOP && (S = !1), m) { + case ft.CODE_FNC_1: + n && (0 === d.length ? d += "]C1" : d += String.fromCharCode(29)); + break; + case ft.CODE_FNC_2: + case ft.CODE_FNC_3: + break; + case ft.CODE_FNC_4_A: + !p && T ? (p = !0, T = !1) : p && T ? (p = !1, T = !1) : T = !0; + break; + case ft.CODE_SHIFT: + u = !0, h = ft.CODE_CODE_B; + break; + case ft.CODE_CODE_B: + h = ft.CODE_CODE_B; + break; + case ft.CODE_CODE_C: + h = ft.CODE_CODE_C; + break; + case ft.CODE_STOP: + c = !0 + } + break; + case ft.CODE_CODE_B: + if (m < 96) d += T === p ? String.fromCharCode(" ".charCodeAt(0) + m) : String.fromCharCode(" ".charCodeAt(0) + m + 128), T = !1; else switch (m !== ft.CODE_STOP && (S = !1), m) { + case ft.CODE_FNC_1: + n && (0 === d.length ? d += "]C1" : d += String.fromCharCode(29)); + break; + case ft.CODE_FNC_2: + case ft.CODE_FNC_3: + break; + case ft.CODE_FNC_4_B: + !p && T ? (p = !0, T = !1) : p && T ? (p = !1, T = !1) : T = !0; + break; + case ft.CODE_SHIFT: + u = !0, h = ft.CODE_CODE_A; + break; + case ft.CODE_CODE_A: + h = ft.CODE_CODE_A; + break; + case ft.CODE_CODE_C: + h = ft.CODE_CODE_C; + break; + case ft.CODE_STOP: + c = !0 + } + break; + case ft.CODE_CODE_C: + if (m < 100) m < 10 && (d += "0"), d += m; else switch (m !== ft.CODE_STOP && (S = !1), m) { + case ft.CODE_FNC_1: + n && (0 === d.length ? d += "]C1" : d += String.fromCharCode(29)); + break; + case ft.CODE_CODE_A: + h = ft.CODE_CODE_A; + break; + case ft.CODE_CODE_B: + h = ft.CODE_CODE_B; + break; + case ft.CODE_STOP: + c = !0 + } + } + t && (h = h === ft.CODE_CODE_A ? ft.CODE_CODE_B : ft.CODE_CODE_A) + } + const N = f - g; + if (f = e.getNextUnset(f), !e.isRange(f, Math.min(e.getSize(), f + (f - g) / 2), !1)) throw new R; + if (_ -= I * A, _ % 103 !== A) throw new l; + const D = d.length; + if (0 === D) throw new R; + D > 0 && S && (d = h === ft.CODE_CODE_C ? d.substring(0, D - 2) : d.substring(0, D - 1)); + const y = (i[1] + i[0]) / 2, O = g + N / 2, M = a.length, B = new Uint8Array(M); + for (let t = 0; t < M; t++) B[t] = a[t]; + const b = [new rt(y, t), new rt(O, t)]; + return new F(d, B, 0, b, v.CODE_128, (new Date).getTime()) + } +} + +ft.CODE_PATTERNS = [Int32Array.from([2, 1, 2, 2, 2, 2]), Int32Array.from([2, 2, 2, 1, 2, 2]), Int32Array.from([2, 2, 2, 2, 2, 1]), Int32Array.from([1, 2, 1, 2, 2, 3]), Int32Array.from([1, 2, 1, 3, 2, 2]), Int32Array.from([1, 3, 1, 2, 2, 2]), Int32Array.from([1, 2, 2, 2, 1, 3]), Int32Array.from([1, 2, 2, 3, 1, 2]), Int32Array.from([1, 3, 2, 2, 1, 2]), Int32Array.from([2, 2, 1, 2, 1, 3]), Int32Array.from([2, 2, 1, 3, 1, 2]), Int32Array.from([2, 3, 1, 2, 1, 2]), Int32Array.from([1, 1, 2, 2, 3, 2]), Int32Array.from([1, 2, 2, 1, 3, 2]), Int32Array.from([1, 2, 2, 2, 3, 1]), Int32Array.from([1, 1, 3, 2, 2, 2]), Int32Array.from([1, 2, 3, 1, 2, 2]), Int32Array.from([1, 2, 3, 2, 2, 1]), Int32Array.from([2, 2, 3, 2, 1, 1]), Int32Array.from([2, 2, 1, 1, 3, 2]), Int32Array.from([2, 2, 1, 2, 3, 1]), Int32Array.from([2, 1, 3, 2, 1, 2]), Int32Array.from([2, 2, 3, 1, 1, 2]), Int32Array.from([3, 1, 2, 1, 3, 1]), Int32Array.from([3, 1, 1, 2, 2, 2]), Int32Array.from([3, 2, 1, 1, 2, 2]), Int32Array.from([3, 2, 1, 2, 2, 1]), Int32Array.from([3, 1, 2, 2, 1, 2]), Int32Array.from([3, 2, 2, 1, 1, 2]), Int32Array.from([3, 2, 2, 2, 1, 1]), Int32Array.from([2, 1, 2, 1, 2, 3]), Int32Array.from([2, 1, 2, 3, 2, 1]), Int32Array.from([2, 3, 2, 1, 2, 1]), Int32Array.from([1, 1, 1, 3, 2, 3]), Int32Array.from([1, 3, 1, 1, 2, 3]), Int32Array.from([1, 3, 1, 3, 2, 1]), Int32Array.from([1, 1, 2, 3, 1, 3]), Int32Array.from([1, 3, 2, 1, 1, 3]), Int32Array.from([1, 3, 2, 3, 1, 1]), Int32Array.from([2, 1, 1, 3, 1, 3]), Int32Array.from([2, 3, 1, 1, 1, 3]), Int32Array.from([2, 3, 1, 3, 1, 1]), Int32Array.from([1, 1, 2, 1, 3, 3]), Int32Array.from([1, 1, 2, 3, 3, 1]), Int32Array.from([1, 3, 2, 1, 3, 1]), Int32Array.from([1, 1, 3, 1, 2, 3]), Int32Array.from([1, 1, 3, 3, 2, 1]), Int32Array.from([1, 3, 3, 1, 2, 1]), Int32Array.from([3, 1, 3, 1, 2, 1]), Int32Array.from([2, 1, 1, 3, 3, 1]), Int32Array.from([2, 3, 1, 1, 3, 1]), Int32Array.from([2, 1, 3, 1, 1, 3]), Int32Array.from([2, 1, 3, 3, 1, 1]), Int32Array.from([2, 1, 3, 1, 3, 1]), Int32Array.from([3, 1, 1, 1, 2, 3]), Int32Array.from([3, 1, 1, 3, 2, 1]), Int32Array.from([3, 3, 1, 1, 2, 1]), Int32Array.from([3, 1, 2, 1, 1, 3]), Int32Array.from([3, 1, 2, 3, 1, 1]), Int32Array.from([3, 3, 2, 1, 1, 1]), Int32Array.from([3, 1, 4, 1, 1, 1]), Int32Array.from([2, 2, 1, 4, 1, 1]), Int32Array.from([4, 3, 1, 1, 1, 1]), Int32Array.from([1, 1, 1, 2, 2, 4]), Int32Array.from([1, 1, 1, 4, 2, 2]), Int32Array.from([1, 2, 1, 1, 2, 4]), Int32Array.from([1, 2, 1, 4, 2, 1]), Int32Array.from([1, 4, 1, 1, 2, 2]), Int32Array.from([1, 4, 1, 2, 2, 1]), Int32Array.from([1, 1, 2, 2, 1, 4]), Int32Array.from([1, 1, 2, 4, 1, 2]), Int32Array.from([1, 2, 2, 1, 1, 4]), Int32Array.from([1, 2, 2, 4, 1, 1]), Int32Array.from([1, 4, 2, 1, 1, 2]), Int32Array.from([1, 4, 2, 2, 1, 1]), Int32Array.from([2, 4, 1, 2, 1, 1]), Int32Array.from([2, 2, 1, 1, 1, 4]), Int32Array.from([4, 1, 3, 1, 1, 1]), Int32Array.from([2, 4, 1, 1, 1, 2]), Int32Array.from([1, 3, 4, 1, 1, 1]), Int32Array.from([1, 1, 1, 2, 4, 2]), Int32Array.from([1, 2, 1, 1, 4, 2]), Int32Array.from([1, 2, 1, 2, 4, 1]), Int32Array.from([1, 1, 4, 2, 1, 2]), Int32Array.from([1, 2, 4, 1, 1, 2]), Int32Array.from([1, 2, 4, 2, 1, 1]), Int32Array.from([4, 1, 1, 2, 1, 2]), Int32Array.from([4, 2, 1, 1, 1, 2]), Int32Array.from([4, 2, 1, 2, 1, 1]), Int32Array.from([2, 1, 2, 1, 4, 1]), Int32Array.from([2, 1, 4, 1, 2, 1]), Int32Array.from([4, 1, 2, 1, 2, 1]), Int32Array.from([1, 1, 1, 1, 4, 3]), Int32Array.from([1, 1, 1, 3, 4, 1]), Int32Array.from([1, 3, 1, 1, 4, 1]), Int32Array.from([1, 1, 4, 1, 1, 3]), Int32Array.from([1, 1, 4, 3, 1, 1]), Int32Array.from([4, 1, 1, 1, 1, 3]), Int32Array.from([4, 1, 1, 3, 1, 1]), Int32Array.from([1, 1, 3, 1, 4, 1]), Int32Array.from([1, 1, 4, 1, 3, 1]), Int32Array.from([3, 1, 1, 1, 4, 1]), Int32Array.from([4, 1, 1, 1, 3, 1]), Int32Array.from([2, 1, 1, 4, 1, 2]), Int32Array.from([2, 1, 1, 2, 1, 4]), Int32Array.from([2, 1, 1, 2, 3, 2]), Int32Array.from([2, 3, 3, 1, 1, 1, 2])], ft.MAX_AVG_VARIANCE = .25, ft.MAX_INDIVIDUAL_VARIANCE = .7, ft.CODE_SHIFT = 98, ft.CODE_CODE_C = 99, ft.CODE_CODE_B = 100, ft.CODE_CODE_A = 101, ft.CODE_FNC_1 = 102, ft.CODE_FNC_2 = 97, ft.CODE_FNC_3 = 96, ft.CODE_FNC_4_A = 101, ft.CODE_FNC_4_B = 100, ft.CODE_START_A = 103, ft.CODE_START_B = 104, ft.CODE_START_C = 105, ft.CODE_STOP = 106; + +class wt extends gt { + constructor(t = !1, e = !1) { + super(), this.usingCheckDigit = t, this.extendedMode = e, this.decodeRowResult = "", this.counters = new Int32Array(9) + } + + decodeRow(t, e, r) { + let n = this.counters; + n.fill(0), this.decodeRowResult = ""; + let i, s, o = wt.findAsteriskPattern(e, n), a = e.getNextSet(o[1]), h = e.getSize(); + do { + wt.recordPattern(e, a, n); + let t = wt.toNarrowWidePattern(n); + if (t < 0) throw new R; + i = wt.patternToChar(t), this.decodeRowResult += i, s = a; + for (let t of n) a += t; + a = e.getNextSet(a) + } while ("*" !== i); + this.decodeRowResult = this.decodeRowResult.substring(0, this.decodeRowResult.length - 1); + let c, u = 0; + for (let t of n) u += t; + if (a !== h && 2 * (a - s - u) < u) throw new R; + if (this.usingCheckDigit) { + let t = this.decodeRowResult.length - 1, e = 0; + for (let r = 0; r < t; r++) e += wt.ALPHABET_STRING.indexOf(this.decodeRowResult.charAt(r)); + if (this.decodeRowResult.charAt(t) !== wt.ALPHABET_STRING.charAt(e % 43)) throw new l; + this.decodeRowResult = this.decodeRowResult.substring(0, t) + } + if (0 === this.decodeRowResult.length) throw new R; + c = this.extendedMode ? wt.decodeExtended(this.decodeRowResult) : this.decodeRowResult; + let d = (o[1] + o[0]) / 2, g = s + u / 2; + return new F(c, null, 0, [new rt(d, t), new rt(g, t)], v.CODE_39, (new Date).getTime()) + } + + static findAsteriskPattern(t, e) { + let r = t.getSize(), n = t.getNextSet(0), i = 0, s = n, o = !1, a = e.length; + for (let l = n; l < r; l++) if (t.get(l) !== o) e[i]++; else { + if (i === a - 1) { + if (this.toNarrowWidePattern(e) === wt.ASTERISK_ENCODING && t.isRange(Math.max(0, s - Math.floor((l - s) / 2)), s, !1)) return [s, l]; + s += e[0] + e[1], e.copyWithin(0, 2, 2 + i - 1), e[i - 1] = 0, e[i] = 0, i-- + } else i++; + e[i] = 1, o = !o + } + throw new R + } + + static toNarrowWidePattern(t) { + let e, r = t.length, n = 0; + do { + let i = 2147483647; + for (let e of t) e < i && e > n && (i = e); + n = i, e = 0; + let s = 0, o = 0; + for (let i = 0; i < r; i++) { + let a = t[i]; + a > n && (o |= 1 << r - 1 - i, e++, s += a) + } + if (3 === e) { + for (let i = 0; i < r && e > 0; i++) { + let r = t[i]; + if (r > n && (e--, 2 * r >= s)) return -1 + } + return o + } + } while (e > 3); + return -1 + } + + static patternToChar(t) { + for (let e = 0; e < wt.CHARACTER_ENCODINGS.length; e++) if (wt.CHARACTER_ENCODINGS[e] === t) return wt.ALPHABET_STRING.charAt(e); + if (t === wt.ASTERISK_ENCODING) return "*"; + throw new R + } + + static decodeExtended(t) { + let e = t.length, r = ""; + for (let n = 0; n < e; n++) { + let e = t.charAt(n); + if ("+" === e || "$" === e || "%" === e || "/" === e) { + let i = t.charAt(n + 1), s = "\0"; + switch (e) { + case"+": + if (!(i >= "A" && i <= "Z")) throw new E; + s = String.fromCharCode(i.charCodeAt(0) + 32); + break; + case"$": + if (!(i >= "A" && i <= "Z")) throw new E; + s = String.fromCharCode(i.charCodeAt(0) - 64); + break; + case"%": + if (i >= "A" && i <= "E") s = String.fromCharCode(i.charCodeAt(0) - 38); else if (i >= "F" && i <= "J") s = String.fromCharCode(i.charCodeAt(0) - 11); else if (i >= "K" && i <= "O") s = String.fromCharCode(i.charCodeAt(0) + 16); else if (i >= "P" && i <= "T") s = String.fromCharCode(i.charCodeAt(0) + 43); else if ("U" === i) s = "\0"; else if ("V" === i) s = "@"; else if ("W" === i) s = "`"; else { + if ("X" !== i && "Y" !== i && "Z" !== i) throw new E; + s = "" + } + break; + case"/": + if (i >= "A" && i <= "O") s = String.fromCharCode(i.charCodeAt(0) - 32); else { + if ("Z" !== i) throw new E; + s = ":" + } + } + r += s, n++ + } else r += e + } + return r + } +} + +wt.ALPHABET_STRING = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%", wt.CHARACTER_ENCODINGS = [52, 289, 97, 352, 49, 304, 112, 37, 292, 100, 265, 73, 328, 25, 280, 88, 13, 268, 76, 28, 259, 67, 322, 19, 274, 82, 7, 262, 70, 22, 385, 193, 448, 145, 400, 208, 133, 388, 196, 168, 162, 138, 42], wt.ASTERISK_ENCODING = 148; + +class At extends gt { + constructor() { + super(...arguments), this.narrowLineWidth = -1 + } + + decodeRow(t, e, r) { + let n = this.decodeStart(e), i = this.decodeEnd(e), s = new p; + At.decodeMiddle(e, n[1], i[0], s); + let o = s.toString(), a = null; + null != r && (a = r.get(C.ALLOWED_LENGTHS)), null == a && (a = At.DEFAULT_ALLOWED_LENGTHS); + let l = o.length, h = !1, c = 0; + for (let t of a) { + if (l === t) { + h = !0; + break + } + t > c && (c = t) + } + if (!h && l > c && (h = !0), !h) throw new E; + const u = [new rt(n[1], t), new rt(i[0], t)]; + return new F(o, null, 0, u, v.ITF, (new Date).getTime()) + } + + static decodeMiddle(t, e, r, n) { + let i = new Int32Array(10), s = new Int32Array(5), o = new Int32Array(5); + for (i.fill(0), s.fill(0), o.fill(0); e < r;) { + gt.recordPattern(t, e, i); + for (let t = 0; t < 5; t++) { + let e = 2 * t; + s[t] = i[e], o[t] = i[e + 1] + } + let r = At.decodeDigit(s); + n.append(r.toString()), r = this.decodeDigit(o), n.append(r.toString()), i.forEach((function (t) { + e += t + })) + } + } + + decodeStart(t) { + let e = At.skipWhiteSpace(t), r = At.findGuardPattern(t, e, At.START_PATTERN); + return this.narrowLineWidth = (r[1] - r[0]) / 4, this.validateQuietZone(t, r[0]), r + } + + validateQuietZone(t, e) { + let r = 10 * this.narrowLineWidth; + r = r < e ? r : e; + for (let n = e - 1; r > 0 && n >= 0 && !t.get(n); n--) r--; + if (0 !== r) throw new R + } + + static skipWhiteSpace(t) { + const e = t.getSize(), r = t.getNextSet(0); + if (r === e) throw new R; + return r + } + + decodeEnd(t) { + t.reverse(); + try { + let e, r = At.skipWhiteSpace(t); + try { + e = At.findGuardPattern(t, r, At.END_PATTERN_REVERSED[0]) + } catch (n) { + n instanceof R && (e = At.findGuardPattern(t, r, At.END_PATTERN_REVERSED[1])) + } + this.validateQuietZone(t, e[0]); + let n = e[0]; + return e[0] = t.getSize() - e[1], e[1] = t.getSize() - n, e + } finally { + t.reverse() + } + } + + static findGuardPattern(t, e, r) { + let n = r.length, i = new Int32Array(n), s = t.getSize(), o = !1, a = 0, l = e; + i.fill(0); + for (let h = e; h < s; h++) if (t.get(h) !== o) i[a]++; else { + if (a === n - 1) { + if (gt.patternMatchVariance(i, r, At.MAX_INDIVIDUAL_VARIANCE) < At.MAX_AVG_VARIANCE) return [l, h]; + l += i[0] + i[1], c.arraycopy(i, 2, i, 0, a - 1), i[a - 1] = 0, i[a] = 0, a-- + } else a++; + i[a] = 1, o = !o + } + throw new R + } + + static decodeDigit(t) { + let e = At.MAX_AVG_VARIANCE, r = -1, n = At.PATTERNS.length; + for (let i = 0; i < n; i++) { + let n = At.PATTERNS[i], s = gt.patternMatchVariance(t, n, At.MAX_INDIVIDUAL_VARIANCE); + s < e ? (e = s, r = i) : s === e && (r = -1) + } + if (r >= 0) return r % 10; + throw new R + } +} + +At.PATTERNS = [Int32Array.from([1, 1, 2, 2, 1]), Int32Array.from([2, 1, 1, 1, 2]), Int32Array.from([1, 2, 1, 1, 2]), Int32Array.from([2, 2, 1, 1, 1]), Int32Array.from([1, 1, 2, 1, 2]), Int32Array.from([2, 1, 2, 1, 1]), Int32Array.from([1, 2, 2, 1, 1]), Int32Array.from([1, 1, 1, 2, 2]), Int32Array.from([2, 1, 1, 2, 1]), Int32Array.from([1, 2, 1, 2, 1]), Int32Array.from([1, 1, 3, 3, 1]), Int32Array.from([3, 1, 1, 1, 3]), Int32Array.from([1, 3, 1, 1, 3]), Int32Array.from([3, 3, 1, 1, 1]), Int32Array.from([1, 1, 3, 1, 3]), Int32Array.from([3, 1, 3, 1, 1]), Int32Array.from([1, 3, 3, 1, 1]), Int32Array.from([1, 1, 1, 3, 3]), Int32Array.from([3, 1, 1, 3, 1]), Int32Array.from([1, 3, 1, 3, 1])], At.MAX_AVG_VARIANCE = .38, At.MAX_INDIVIDUAL_VARIANCE = .5, At.DEFAULT_ALLOWED_LENGTHS = [6, 8, 10, 12, 14], At.START_PATTERN = Int32Array.from([1, 1, 1, 1]), At.END_PATTERN_REVERSED = [Int32Array.from([1, 1, 2]), Int32Array.from([1, 1, 3])]; + +class Ct extends gt { + constructor() { + super(...arguments), this.decodeRowStringBuffer = "" + } + + static findStartGuardPattern(t) { + let e, r = !1, n = 0, i = Int32Array.from([0, 0, 0]); + for (; !r;) { + i = Int32Array.from([0, 0, 0]), e = Ct.findGuardPattern(t, n, !1, this.START_END_PATTERN, i); + let s = e[0]; + n = e[1]; + let o = s - (n - s); + o >= 0 && (r = t.isRange(o, s, !1)) + } + return e + } + + static checkChecksum(t) { + return Ct.checkStandardUPCEANChecksum(t) + } + + static checkStandardUPCEANChecksum(t) { + let e = t.length; + if (0 === e) return !1; + let r = parseInt(t.charAt(e - 1), 10); + return Ct.getStandardUPCEANChecksum(t.substring(0, e - 1)) === r + } + + static getStandardUPCEANChecksum(t) { + let e = t.length, r = 0; + for (let n = e - 1; n >= 0; n -= 2) { + let e = t.charAt(n).charCodeAt(0) - "0".charCodeAt(0); + if (e < 0 || e > 9) throw new E; + r += e + } + r *= 3; + for (let n = e - 2; n >= 0; n -= 2) { + let e = t.charAt(n).charCodeAt(0) - "0".charCodeAt(0); + if (e < 0 || e > 9) throw new E; + r += e + } + return (1e3 - r) % 10 + } + + static decodeEnd(t, e) { + return Ct.findGuardPattern(t, e, !1, Ct.START_END_PATTERN, new Int32Array(Ct.START_END_PATTERN.length).fill(0)) + } + + static findGuardPatternWithoutCounters(t, e, r, n) { + return this.findGuardPattern(t, e, r, n, new Int32Array(n.length)) + } + + static findGuardPattern(t, e, r, n, i) { + let s = t.getSize(), o = 0, a = e = r ? t.getNextUnset(e) : t.getNextSet(e), l = n.length, h = r; + for (let r = e; r < s; r++) if (t.get(r) !== h) i[o]++; else { + if (o === l - 1) { + if (gt.patternMatchVariance(i, n, Ct.MAX_INDIVIDUAL_VARIANCE) < Ct.MAX_AVG_VARIANCE) return Int32Array.from([a, r]); + a += i[0] + i[1]; + let t = i.slice(2, i.length - 1); + for (let e = 0; e < o - 1; e++) i[e] = t[e]; + i[o - 1] = 0, i[o] = 0, o-- + } else o++; + i[o] = 1, h = !h + } + throw new R + } + + static decodeDigit(t, e, r, n) { + this.recordPattern(t, r, e); + let i = this.MAX_AVG_VARIANCE, s = -1, o = n.length; + for (let t = 0; t < o; t++) { + let r = n[t], o = gt.patternMatchVariance(e, r, Ct.MAX_INDIVIDUAL_VARIANCE); + o < i && (i = o, s = t) + } + if (s >= 0) return s; + throw new R + } +} + +Ct.MAX_AVG_VARIANCE = .48, Ct.MAX_INDIVIDUAL_VARIANCE = .7, Ct.START_END_PATTERN = Int32Array.from([1, 1, 1]), Ct.MIDDLE_PATTERN = Int32Array.from([1, 1, 1, 1, 1]), Ct.END_PATTERN = Int32Array.from([1, 1, 1, 1, 1, 1]), Ct.L_PATTERNS = [Int32Array.from([3, 2, 1, 1]), Int32Array.from([2, 2, 2, 1]), Int32Array.from([2, 1, 2, 2]), Int32Array.from([1, 4, 1, 1]), Int32Array.from([1, 1, 3, 2]), Int32Array.from([1, 2, 3, 1]), Int32Array.from([1, 1, 1, 4]), Int32Array.from([1, 3, 1, 2]), Int32Array.from([1, 2, 1, 3]), Int32Array.from([3, 1, 1, 2])]; + +class Et { + constructor() { + this.CHECK_DIGIT_ENCODINGS = [24, 20, 18, 17, 12, 6, 3, 10, 9, 5], this.decodeMiddleCounters = Int32Array.from([0, 0, 0, 0]), this.decodeRowStringBuffer = "" + } + + decodeRow(t, e, r) { + let n = this.decodeRowStringBuffer, i = this.decodeMiddle(e, r, n), s = n.toString(), + o = Et.parseExtensionString(s), a = [new rt((r[0] + r[1]) / 2, t), new rt(i, t)], + l = new F(s, null, 0, a, v.UPC_EAN_EXTENSION, (new Date).getTime()); + return null != o && l.putAllMetadata(o), l + } + + decodeMiddle(t, e, r) { + let n = this.decodeMiddleCounters; + n[0] = 0, n[1] = 0, n[2] = 0, n[3] = 0; + let i = t.getSize(), s = e[1], o = 0; + for (let e = 0; e < 5 && s < i; e++) { + let i = Ct.decodeDigit(t, n, s, Ct.L_AND_G_PATTERNS); + r += String.fromCharCode("0".charCodeAt(0) + i % 10); + for (let t of n) s += t; + i >= 10 && (o |= 1 << 4 - e), 4 !== e && (s = t.getNextSet(s), s = t.getNextUnset(s)) + } + if (5 !== r.length) throw new R; + let a = this.determineCheckDigit(o); + if (Et.extensionChecksum(r.toString()) !== a) throw new R; + return s + } + + static extensionChecksum(t) { + let e = t.length, r = 0; + for (let n = e - 2; n >= 0; n -= 2) r += t.charAt(n).charCodeAt(0) - "0".charCodeAt(0); + r *= 3; + for (let n = e - 1; n >= 0; n -= 2) r += t.charAt(n).charCodeAt(0) - "0".charCodeAt(0); + return r *= 3, r % 10 + } + + determineCheckDigit(t) { + for (let e = 0; e < 10; e++) if (t === this.CHECK_DIGIT_ENCODINGS[e]) return e; + throw new R + } + + static parseExtensionString(t) { + if (5 !== t.length) return null; + let e = Et.parseExtension5String(t); + return null == e ? null : new Map([[W.SUGGESTED_PRICE, e]]) + } + + static parseExtension5String(t) { + let e; + switch (t.charAt(0)) { + case"0": + e = "拢"; + break; + case"5": + e = "$"; + break; + case"9": + switch (t) { + case"90000": + return null; + case"99991": + return "0.00"; + case"99990": + return "Used" + } + e = ""; + break; + default: + e = "" + } + let r = parseInt(t.substring(1)), n = r % 100; + return e + (r / 100).toString() + "." + (n < 10 ? "0" + n : n.toString()) + } +} + +class mt { + constructor() { + this.decodeMiddleCounters = Int32Array.from([0, 0, 0, 0]), this.decodeRowStringBuffer = "" + } + + decodeRow(t, e, r) { + let n = this.decodeRowStringBuffer, i = this.decodeMiddle(e, r, n), s = n.toString(), + o = mt.parseExtensionString(s), a = [new rt((r[0] + r[1]) / 2, t), new rt(i, t)], + l = new F(s, null, 0, a, v.UPC_EAN_EXTENSION, (new Date).getTime()); + return null != o && l.putAllMetadata(o), l + } + + decodeMiddle(t, e, r) { + let n = this.decodeMiddleCounters; + n[0] = 0, n[1] = 0, n[2] = 0, n[3] = 0; + let i = t.getSize(), s = e[1], o = 0; + for (let e = 0; e < 2 && s < i; e++) { + let i = Ct.decodeDigit(t, n, s, Ct.L_AND_G_PATTERNS); + r += String.fromCharCode("0".charCodeAt(0) + i % 10); + for (let t of n) s += t; + i >= 10 && (o |= 1 << 1 - e), 1 !== e && (s = t.getNextSet(s), s = t.getNextUnset(s)) + } + if (2 !== r.length) throw new R; + if (parseInt(r.toString()) % 4 !== o) throw new R; + return s + } + + static parseExtensionString(t) { + return 2 !== t.length ? null : new Map([[W.ISSUE_NUMBER, parseInt(t)]]) + } +} + +class _t { + static decodeRow(t, e, r) { + let n = Ct.findGuardPattern(e, r, !1, this.EXTENSION_START_PATTERN, new Int32Array(this.EXTENSION_START_PATTERN.length).fill(0)); + try { + return (new Et).decodeRow(t, e, n) + } catch (r) { + return (new mt).decodeRow(t, e, n) + } + } +} + +_t.EXTENSION_START_PATTERN = Int32Array.from([1, 1, 2]); + +class It extends Ct { + constructor() { + super(), this.decodeRowStringBuffer = "", It.L_AND_G_PATTERNS = It.L_PATTERNS.map((t => Int32Array.from(t))); + for (let t = 10; t < 20; t++) { + let e = It.L_PATTERNS[t - 10], r = new Int32Array(e.length); + for (let t = 0; t < e.length; t++) r[t] = e[e.length - t - 1]; + It.L_AND_G_PATTERNS[t] = r + } + } + + decodeRow(t, e, r) { + let n = It.findStartGuardPattern(e), i = null == r ? null : r.get(C.NEED_RESULT_POINT_CALLBACK); + if (null != i) { + const e = new rt((n[0] + n[1]) / 2, t); + i.foundPossibleResultPoint(e) + } + let s = this.decodeMiddle(e, n, this.decodeRowStringBuffer), o = s.rowOffset, a = s.resultString; + if (null != i) { + const e = new rt(o, t); + i.foundPossibleResultPoint(e) + } + let h = It.decodeEnd(e, o); + if (null != i) { + const e = new rt((h[0] + h[1]) / 2, t); + i.foundPossibleResultPoint(e) + } + let c = h[1], u = c + (c - h[0]); + if (u >= e.getSize() || !e.isRange(c, u, !1)) throw new R; + let d = a.toString(); + if (d.length < 8) throw new E; + if (!It.checkChecksum(d)) throw new l; + let g = (n[1] + n[0]) / 2, f = (h[1] + h[0]) / 2, w = this.getBarcodeFormat(), A = [new rt(g, t), new rt(f, t)], + m = new F(d, null, 0, A, w, (new Date).getTime()), _ = 0; + try { + let r = _t.decodeRow(t, e, h[1]); + m.putMetadata(W.UPC_EAN_EXTENSION, r.getText()), m.putAllMetadata(r.getResultMetadata()), m.addResultPoints(r.getResultPoints()), _ = r.getText().length + } catch (t) { + } + let I = null == r ? null : r.get(C.ALLOWED_EAN_EXTENSIONS); + if (null != I) { + let t = !1; + for (let e in I) if (_.toString() === e) { + t = !0; + break + } + if (!t) throw new R + } + return w === v.EAN_13 || v.UPC_A, m + } + + static checkChecksum(t) { + return It.checkStandardUPCEANChecksum(t) + } + + static checkStandardUPCEANChecksum(t) { + let e = t.length; + if (0 === e) return !1; + let r = parseInt(t.charAt(e - 1), 10); + return It.getStandardUPCEANChecksum(t.substring(0, e - 1)) === r + } + + static getStandardUPCEANChecksum(t) { + let e = t.length, r = 0; + for (let n = e - 1; n >= 0; n -= 2) { + let e = t.charAt(n).charCodeAt(0) - "0".charCodeAt(0); + if (e < 0 || e > 9) throw new E; + r += e + } + r *= 3; + for (let n = e - 2; n >= 0; n -= 2) { + let e = t.charAt(n).charCodeAt(0) - "0".charCodeAt(0); + if (e < 0 || e > 9) throw new E; + r += e + } + return (1e3 - r) % 10 + } + + static decodeEnd(t, e) { + return It.findGuardPattern(t, e, !1, It.START_END_PATTERN, new Int32Array(It.START_END_PATTERN.length).fill(0)) + } +} + +class St extends It { + constructor() { + super(), this.decodeMiddleCounters = Int32Array.from([0, 0, 0, 0]) + } + + decodeMiddle(t, e, r) { + let n = this.decodeMiddleCounters; + n[0] = 0, n[1] = 0, n[2] = 0, n[3] = 0; + let i = t.getSize(), s = e[1], o = 0; + for (let e = 0; e < 6 && s < i; e++) { + let i = It.decodeDigit(t, n, s, It.L_AND_G_PATTERNS); + r += String.fromCharCode("0".charCodeAt(0) + i % 10); + for (let t of n) s += t; + i >= 10 && (o |= 1 << 5 - e) + } + r = St.determineFirstDigit(r, o), s = It.findGuardPattern(t, s, !0, It.MIDDLE_PATTERN, new Int32Array(It.MIDDLE_PATTERN.length).fill(0))[1]; + for (let e = 0; e < 6 && s < i; e++) { + let e = It.decodeDigit(t, n, s, It.L_PATTERNS); + r += String.fromCharCode("0".charCodeAt(0) + e); + for (let t of n) s += t + } + return {rowOffset: s, resultString: r} + } + + getBarcodeFormat() { + return v.EAN_13 + } + + static determineFirstDigit(t, e) { + for (let r = 0; r < 10; r++) if (e === this.FIRST_DIGIT_ENCODINGS[r]) return t = String.fromCharCode("0".charCodeAt(0) + r) + t; + throw new R + } +} + +St.FIRST_DIGIT_ENCODINGS = [0, 11, 13, 14, 19, 25, 28, 21, 22, 26]; + +class pt extends It { + constructor() { + super(), this.decodeMiddleCounters = Int32Array.from([0, 0, 0, 0]) + } + + decodeMiddle(t, e, r) { + const n = this.decodeMiddleCounters; + n[0] = 0, n[1] = 0, n[2] = 0, n[3] = 0; + let i = t.getSize(), s = e[1]; + for (let e = 0; e < 4 && s < i; e++) { + let e = It.decodeDigit(t, n, s, It.L_PATTERNS); + r += String.fromCharCode("0".charCodeAt(0) + e); + for (let t of n) s += t + } + s = It.findGuardPattern(t, s, !0, It.MIDDLE_PATTERN, new Int32Array(It.MIDDLE_PATTERN.length).fill(0))[1]; + for (let e = 0; e < 4 && s < i; e++) { + let e = It.decodeDigit(t, n, s, It.L_PATTERNS); + r += String.fromCharCode("0".charCodeAt(0) + e); + for (let t of n) s += t + } + return {rowOffset: s, resultString: r} + } + + getBarcodeFormat() { + return v.EAN_8 + } +} + +class Tt extends It { + constructor() { + super(...arguments), this.ean13Reader = new St + } + + getBarcodeFormat() { + return v.UPC_A + } + + decode(t, e) { + return this.maybeReturnResult(this.ean13Reader.decode(t)) + } + + decodeRow(t, e, r) { + return this.maybeReturnResult(this.ean13Reader.decodeRow(t, e, r)) + } + + decodeMiddle(t, e, r) { + return this.ean13Reader.decodeMiddle(t, e, r) + } + + maybeReturnResult(t) { + let e = t.getText(); + if ("0" === e.charAt(0)) { + let r = new F(e.substring(1), null, null, t.getResultPoints(), v.UPC_A); + return null != t.getResultMetadata() && r.putAllMetadata(t.getResultMetadata()), r + } + throw new R + } + + reset() { + this.ean13Reader.reset() + } +} + +class Rt extends It { + constructor() { + super(), this.decodeMiddleCounters = new Int32Array(4) + } + + decodeMiddle(t, e, r) { + const n = this.decodeMiddleCounters.map((t => t)); + n[0] = 0, n[1] = 0, n[2] = 0, n[3] = 0; + const i = t.getSize(); + let s = e[1], o = 0; + for (let e = 0; e < 6 && s < i; e++) { + const i = Rt.decodeDigit(t, n, s, Rt.L_AND_G_PATTERNS); + r += String.fromCharCode("0".charCodeAt(0) + i % 10); + for (let t of n) s += t; + i >= 10 && (o |= 1 << 5 - e) + } + return Rt.determineNumSysAndCheckDigit(new p(r), o), s + } + + decodeEnd(t, e) { + return Rt.findGuardPatternWithoutCounters(t, e, !0, Rt.MIDDLE_END_PATTERN) + } + + checkChecksum(t) { + return It.checkChecksum(Rt.convertUPCEtoUPCA(t)) + } + + static determineNumSysAndCheckDigit(t, e) { + for (let r = 0; r <= 1; r++) for (let n = 0; n < 10; n++) if (e === this.NUMSYS_AND_CHECK_DIGIT_PATTERNS[r][n]) return t.insert(0, "0" + r), void t.append("0" + n); + throw R.getNotFoundInstance() + } + + getBarcodeFormat() { + return v.UPC_E + } + + static convertUPCEtoUPCA(t) { + const e = t.slice(1, 7).split("").map((t => t.charCodeAt(0))), r = new p; + r.append(t.charAt(0)); + let n = e[5]; + switch (n) { + case 0: + case 1: + case 2: + r.appendChars(e, 0, 2), r.append(n), r.append("0000"), r.appendChars(e, 2, 3); + break; + case 3: + r.appendChars(e, 0, 3), r.append("00000"), r.appendChars(e, 3, 2); + break; + case 4: + r.appendChars(e, 0, 4), r.append("00000"), r.append(e[4]); + break; + default: + r.appendChars(e, 0, 5), r.append("0000"), r.append(n) + } + return t.length >= 8 && r.append(t.charAt(7)), r.toString() + } +} + +Rt.MIDDLE_END_PATTERN = Int32Array.from([1, 1, 1, 1, 1, 1]), Rt.NUMSYS_AND_CHECK_DIGIT_PATTERNS = [Int32Array.from([56, 52, 50, 49, 44, 38, 35, 42, 41, 37]), Int32Array.from([7, 11, 13, 14, 19, 25, 28, 21, 22, 1])]; + +class Nt extends gt { + constructor(t) { + super(); + let e = null == t ? null : t.get(C.POSSIBLE_FORMATS), r = []; + null != e && (e.indexOf(v.EAN_13) > -1 ? r.push(new St) : e.indexOf(v.UPC_A) > -1 && r.push(new Tt), e.indexOf(v.EAN_8) > -1 && r.push(new pt), e.indexOf(v.UPC_E) > -1 && r.push(new Rt)), 0 === r.length && (r.push(new St), r.push(new pt), r.push(new Rt)), this.readers = r + } + + decodeRow(t, e, r) { + for (let n of this.readers) try { + const i = n.decodeRow(t, e, r), s = i.getBarcodeFormat() === v.EAN_13 && "0" === i.getText().charAt(0), + o = null == r ? null : r.get(C.POSSIBLE_FORMATS), a = null == o || o.includes(v.UPC_A); + if (s && a) { + const t = i.getRawBytes(), + e = new F(i.getText().substring(1), t, t.length, i.getResultPoints(), v.UPC_A); + return e.putAllMetadata(i.getResultMetadata()), e + } + return i + } catch (t) { + } + throw new R + } + + reset() { + for (let t of this.readers) t.reset() + } +} + +class Dt extends gt { + constructor() { + super(), this.decodeFinderCounters = new Int32Array(4), this.dataCharacterCounters = new Int32Array(8), this.oddRoundingErrors = new Array(4), this.evenRoundingErrors = new Array(4), this.oddCounts = new Array(this.dataCharacterCounters.length / 2), this.evenCounts = new Array(this.dataCharacterCounters.length / 2) + } + + getDecodeFinderCounters() { + return this.decodeFinderCounters + } + + getDataCharacterCounters() { + return this.dataCharacterCounters + } + + getOddRoundingErrors() { + return this.oddRoundingErrors + } + + getEvenRoundingErrors() { + return this.evenRoundingErrors + } + + getOddCounts() { + return this.oddCounts + } + + getEvenCounts() { + return this.evenCounts + } + + parseFinderValue(t, e) { + for (let r = 0; r < e.length; r++) if (gt.patternMatchVariance(t, e[r], Dt.MAX_INDIVIDUAL_VARIANCE) < Dt.MAX_AVG_VARIANCE) return r; + throw new R + } + + static count(t) { + return tt.sum(new Int32Array(t)) + } + + static increment(t, e) { + let r = 0, n = e[0]; + for (let i = 1; i < t.length; i++) e[i] > n && (n = e[i], r = i); + t[r]++ + } + + static decrement(t, e) { + let r = 0, n = e[0]; + for (let i = 1; i < t.length; i++) e[i] < n && (n = e[i], r = i); + t[r]-- + } + + static isFinderPattern(t) { + let e = t[0] + t[1], r = e / (e + t[2] + t[3]); + if (r >= Dt.MIN_FINDER_PATTERN_RATIO && r <= Dt.MAX_FINDER_PATTERN_RATIO) { + let e = Number.MAX_SAFE_INTEGER, r = Number.MIN_SAFE_INTEGER; + for (let n of t) n > r && (r = n), n < e && (e = n); + return r < 10 * e + } + return !1 + } +} + +Dt.MAX_AVG_VARIANCE = .2, Dt.MAX_INDIVIDUAL_VARIANCE = .45, Dt.MIN_FINDER_PATTERN_RATIO = 9.5 / 12, Dt.MAX_FINDER_PATTERN_RATIO = 12.5 / 14; + +class yt { + constructor(t, e) { + this.value = t, this.checksumPortion = e + } + + getValue() { + return this.value + } + + getChecksumPortion() { + return this.checksumPortion + } + + toString() { + return this.value + "(" + this.checksumPortion + ")" + } + + equals(t) { + if (!(t instanceof yt)) return !1; + const e = t; + return this.value === e.value && this.checksumPortion === e.checksumPortion + } + + hashCode() { + return this.value ^ this.checksumPortion + } +} + +class Ot { + constructor(t, e, r, n, i) { + this.value = t, this.startEnd = e, this.value = t, this.startEnd = e, this.resultPoints = new Array, this.resultPoints.push(new rt(r, i)), this.resultPoints.push(new rt(n, i)) + } + + getValue() { + return this.value + } + + getStartEnd() { + return this.startEnd + } + + getResultPoints() { + return this.resultPoints + } + + equals(t) { + if (!(t instanceof Ot)) return !1; + const e = t; + return this.value === e.value + } + + hashCode() { + return this.value + } +} + +class Mt { + constructor() { + } + + static getRSSvalue(t, e, r) { + let n = 0; + for (let e of t) n += e; + let i = 0, s = 0, o = t.length; + for (let a = 0; a < o - 1; a++) { + let l; + for (l = 1, s |= 1 << a; l < t[a]; l++, s &= ~(1 << a)) { + let t = Mt.combins(n - l - 1, o - a - 2); + if (r && 0 === s && n - l - (o - a - 1) >= o - a - 1 && (t -= Mt.combins(n - l - (o - a), o - a - 2)), o - a - 1 > 1) { + let r = 0; + for (let t = n - l - (o - a - 2); t > e; t--) r += Mt.combins(n - l - t - 1, o - a - 3); + t -= r * (o - 1 - a) + } else n - l > e && t--; + i += t + } + n -= l + } + return i + } + + static combins(t, e) { + let r, n; + t - e > e ? (n = e, r = t - e) : (n = t - e, r = e); + let i = 1, s = 1; + for (let e = t; e > r; e--) i *= e, s <= n && (i /= s, s++); + for (; s <= n;) i /= s, s++; + return i + } +} + +class Bt { + constructor(t, e) { + e ? this.decodedInformation = null : (this.finished = t, this.decodedInformation = e) + } + + getDecodedInformation() { + return this.decodedInformation + } + + isFinished() { + return this.finished + } +} + +class bt { + constructor(t) { + this.newPosition = t + } + + getNewPosition() { + return this.newPosition + } +} + +class Pt extends bt { + constructor(t, e) { + super(t), this.value = e + } + + getValue() { + return this.value + } + + isFNC1() { + return this.value === Pt.FNC1 + } +} + +Pt.FNC1 = "$"; + +class Lt extends bt { + constructor(t, e, r) { + super(t), r ? (this.remaining = !0, this.remainingValue = this.remainingValue) : (this.remaining = !1, this.remainingValue = 0), this.newString = e + } + + getNewString() { + return this.newString + } + + isRemaining() { + return this.remaining + } + + getRemainingValue() { + return this.remainingValue + } +} + +class Ft extends bt { + constructor(t, e, r) { + if (super(t), e < 0 || e > 10 || r < 0 || r > 10) throw new E; + this.firstDigit = e, this.secondDigit = r + } + + getFirstDigit() { + return this.firstDigit + } + + getSecondDigit() { + return this.secondDigit + } + + getValue() { + return 10 * this.firstDigit + this.secondDigit + } + + isFirstDigitFNC1() { + return this.firstDigit === Ft.FNC1 + } + + isSecondDigitFNC1() { + return this.secondDigit === Ft.FNC1 + } + + isAnyFNC1() { + return this.firstDigit === Ft.FNC1 || this.secondDigit === Ft.FNC1 + } +} + +Ft.FNC1 = 10; + +class kt { + constructor() { + } + + static parseFieldsInGeneralPurpose(t) { + if (!t) return null; + if (t.length < 2) throw new R; + let e = t.substring(0, 2); + for (let r of kt.TWO_DIGIT_DATA_LENGTH) if (r[0] === e) return r[1] === kt.VARIABLE_LENGTH ? kt.processVariableAI(2, r[2], t) : kt.processFixedAI(2, r[1], t); + if (t.length < 3) throw new R; + let r = t.substring(0, 3); + for (let e of kt.THREE_DIGIT_DATA_LENGTH) if (e[0] === r) return e[1] === kt.VARIABLE_LENGTH ? kt.processVariableAI(3, e[2], t) : kt.processFixedAI(3, e[1], t); + for (let e of kt.THREE_DIGIT_PLUS_DIGIT_DATA_LENGTH) if (e[0] === r) return e[1] === kt.VARIABLE_LENGTH ? kt.processVariableAI(4, e[2], t) : kt.processFixedAI(4, e[1], t); + if (t.length < 4) throw new R; + let n = t.substring(0, 4); + for (let e of kt.FOUR_DIGIT_DATA_LENGTH) if (e[0] === n) return e[1] === kt.VARIABLE_LENGTH ? kt.processVariableAI(4, e[2], t) : kt.processFixedAI(4, e[1], t); + throw new R + } + + static processFixedAI(t, e, r) { + if (r.length < t) throw new R; + let n = r.substring(0, t); + if (r.length < t + e) throw new R; + let i = r.substring(t, t + e), s = r.substring(t + e), o = "(" + n + ")" + i, + a = kt.parseFieldsInGeneralPurpose(s); + return null == a ? o : o + a + } + + static processVariableAI(t, e, r) { + let n, i = r.substring(0, t); + n = r.length < t + e ? r.length : t + e; + let s = r.substring(t, n), o = r.substring(n), a = "(" + i + ")" + s, l = kt.parseFieldsInGeneralPurpose(o); + return null == l ? a : a + l + } +} + +kt.VARIABLE_LENGTH = [], kt.TWO_DIGIT_DATA_LENGTH = [["00", 18], ["01", 14], ["02", 14], ["10", kt.VARIABLE_LENGTH, 20], ["11", 6], ["12", 6], ["13", 6], ["15", 6], ["17", 6], ["20", 2], ["21", kt.VARIABLE_LENGTH, 20], ["22", kt.VARIABLE_LENGTH, 29], ["30", kt.VARIABLE_LENGTH, 8], ["37", kt.VARIABLE_LENGTH, 8], ["90", kt.VARIABLE_LENGTH, 30], ["91", kt.VARIABLE_LENGTH, 30], ["92", kt.VARIABLE_LENGTH, 30], ["93", kt.VARIABLE_LENGTH, 30], ["94", kt.VARIABLE_LENGTH, 30], ["95", kt.VARIABLE_LENGTH, 30], ["96", kt.VARIABLE_LENGTH, 30], ["97", kt.VARIABLE_LENGTH, 3], ["98", kt.VARIABLE_LENGTH, 30], ["99", kt.VARIABLE_LENGTH, 30]], kt.THREE_DIGIT_DATA_LENGTH = [["240", kt.VARIABLE_LENGTH, 30], ["241", kt.VARIABLE_LENGTH, 30], ["242", kt.VARIABLE_LENGTH, 6], ["250", kt.VARIABLE_LENGTH, 30], ["251", kt.VARIABLE_LENGTH, 30], ["253", kt.VARIABLE_LENGTH, 17], ["254", kt.VARIABLE_LENGTH, 20], ["400", kt.VARIABLE_LENGTH, 30], ["401", kt.VARIABLE_LENGTH, 30], ["402", 17], ["403", kt.VARIABLE_LENGTH, 30], ["410", 13], ["411", 13], ["412", 13], ["413", 13], ["414", 13], ["420", kt.VARIABLE_LENGTH, 20], ["421", kt.VARIABLE_LENGTH, 15], ["422", 3], ["423", kt.VARIABLE_LENGTH, 15], ["424", 3], ["425", 3], ["426", 3]], kt.THREE_DIGIT_PLUS_DIGIT_DATA_LENGTH = [["310", 6], ["311", 6], ["312", 6], ["313", 6], ["314", 6], ["315", 6], ["316", 6], ["320", 6], ["321", 6], ["322", 6], ["323", 6], ["324", 6], ["325", 6], ["326", 6], ["327", 6], ["328", 6], ["329", 6], ["330", 6], ["331", 6], ["332", 6], ["333", 6], ["334", 6], ["335", 6], ["336", 6], ["340", 6], ["341", 6], ["342", 6], ["343", 6], ["344", 6], ["345", 6], ["346", 6], ["347", 6], ["348", 6], ["349", 6], ["350", 6], ["351", 6], ["352", 6], ["353", 6], ["354", 6], ["355", 6], ["356", 6], ["357", 6], ["360", 6], ["361", 6], ["362", 6], ["363", 6], ["364", 6], ["365", 6], ["366", 6], ["367", 6], ["368", 6], ["369", 6], ["390", kt.VARIABLE_LENGTH, 15], ["391", kt.VARIABLE_LENGTH, 18], ["392", kt.VARIABLE_LENGTH, 15], ["393", kt.VARIABLE_LENGTH, 18], ["703", kt.VARIABLE_LENGTH, 30]], kt.FOUR_DIGIT_DATA_LENGTH = [["7001", 13], ["7002", kt.VARIABLE_LENGTH, 30], ["7003", 10], ["8001", 14], ["8002", kt.VARIABLE_LENGTH, 20], ["8003", kt.VARIABLE_LENGTH, 30], ["8004", kt.VARIABLE_LENGTH, 30], ["8005", 6], ["8006", 18], ["8007", kt.VARIABLE_LENGTH, 30], ["8008", kt.VARIABLE_LENGTH, 12], ["8018", 18], ["8020", kt.VARIABLE_LENGTH, 25], ["8100", 6], ["8101", 10], ["8102", 2], ["8110", kt.VARIABLE_LENGTH, 70], ["8200", kt.VARIABLE_LENGTH, 70]]; + +class vt { + constructor(t) { + this.buffer = new p, this.information = t + } + + decodeAllCodes(t, e) { + let r = e, n = null; + for (; ;) { + let e = this.decodeGeneralPurposeField(r, n), i = kt.parseFieldsInGeneralPurpose(e.getNewString()); + if (null != i && t.append(i), n = e.isRemaining() ? "" + e.getRemainingValue() : null, r === e.getNewPosition()) break; + r = e.getNewPosition() + } + return t.toString() + } + + isStillNumeric(t) { + if (t + 7 > this.information.getSize()) return t + 4 <= this.information.getSize(); + for (let e = t; e < t + 3; ++e) if (this.information.get(e)) return !0; + return this.information.get(t + 3) + } + + decodeNumeric(t) { + if (t + 7 > this.information.getSize()) { + let e = this.extractNumericValueFromBitArray(t, 4); + return new Ft(this.information.getSize(), 0 === e ? Ft.FNC1 : e - 1, Ft.FNC1) + } + let e = this.extractNumericValueFromBitArray(t, 7); + return new Ft(t + 7, (e - 8) / 11, (e - 8) % 11) + } + + extractNumericValueFromBitArray(t, e) { + return vt.extractNumericValueFromBitArray(this.information, t, e) + } + + static extractNumericValueFromBitArray(t, e, r) { + let n = 0; + for (let i = 0; i < r; ++i) t.get(e + i) && (n |= 1 << r - i - 1); + return n + } + + decodeGeneralPurposeField(t, e) { + this.buffer.setLengthToZero(), null != e && this.buffer.append(e), this.current.setPosition(t); + let r = this.parseBlocks(); + return null != r && r.isRemaining() ? new Lt(this.current.getPosition(), this.buffer.toString(), r.getRemainingValue()) : new Lt(this.current.getPosition(), this.buffer.toString()) + } + + parseBlocks() { + let t, e; + do { + let r = this.current.getPosition(); + if (this.current.isAlpha() ? (e = this.parseAlphaBlock(), t = e.isFinished()) : this.current.isIsoIec646() ? (e = this.parseIsoIec646Block(), t = e.isFinished()) : (e = this.parseNumericBlock(), t = e.isFinished()), !(r !== this.current.getPosition()) && !t) break + } while (!t); + return e.getDecodedInformation() + } + + parseNumericBlock() { + for (; this.isStillNumeric(this.current.getPosition());) { + let t = this.decodeNumeric(this.current.getPosition()); + if (this.current.setPosition(t.getNewPosition()), t.isFirstDigitFNC1()) { + let e; + return e = t.isSecondDigitFNC1() ? new Lt(this.current.getPosition(), this.buffer.toString()) : new Lt(this.current.getPosition(), this.buffer.toString(), t.getSecondDigit()), new Bt(!0, e) + } + if (this.buffer.append(t.getFirstDigit()), t.isSecondDigitFNC1()) { + let t = new Lt(this.current.getPosition(), this.buffer.toString()); + return new Bt(!0, t) + } + this.buffer.append(t.getSecondDigit()) + } + return this.isNumericToAlphaNumericLatch(this.current.getPosition()) && (this.current.setAlpha(), this.current.incrementPosition(4)), new Bt(!1) + } + + parseIsoIec646Block() { + for (; this.isStillIsoIec646(this.current.getPosition());) { + let t = this.decodeIsoIec646(this.current.getPosition()); + if (this.current.setPosition(t.getNewPosition()), t.isFNC1()) { + let t = new Lt(this.current.getPosition(), this.buffer.toString()); + return new Bt(!0, t) + } + this.buffer.append(t.getValue()) + } + return this.isAlphaOr646ToNumericLatch(this.current.getPosition()) ? (this.current.incrementPosition(3), this.current.setNumeric()) : this.isAlphaTo646ToAlphaLatch(this.current.getPosition()) && (this.current.getPosition() + 5 < this.information.getSize() ? this.current.incrementPosition(5) : this.current.setPosition(this.information.getSize()), this.current.setAlpha()), new Bt(!1) + } + + parseAlphaBlock() { + for (; this.isStillAlpha(this.current.getPosition());) { + let t = this.decodeAlphanumeric(this.current.getPosition()); + if (this.current.setPosition(t.getNewPosition()), t.isFNC1()) { + let t = new Lt(this.current.getPosition(), this.buffer.toString()); + return new Bt(!0, t) + } + this.buffer.append(t.getValue()) + } + return this.isAlphaOr646ToNumericLatch(this.current.getPosition()) ? (this.current.incrementPosition(3), this.current.setNumeric()) : this.isAlphaTo646ToAlphaLatch(this.current.getPosition()) && (this.current.getPosition() + 5 < this.information.getSize() ? this.current.incrementPosition(5) : this.current.setPosition(this.information.getSize()), this.current.setIsoIec646()), new Bt(!1) + } + + isStillIsoIec646(t) { + if (t + 5 > this.information.getSize()) return !1; + let e = this.extractNumericValueFromBitArray(t, 5); + if (e >= 5 && e < 16) return !0; + if (t + 7 > this.information.getSize()) return !1; + let r = this.extractNumericValueFromBitArray(t, 7); + if (r >= 64 && r < 116) return !0; + if (t + 8 > this.information.getSize()) return !1; + let n = this.extractNumericValueFromBitArray(t, 8); + return n >= 232 && n < 253 + } + + decodeIsoIec646(t) { + let e = this.extractNumericValueFromBitArray(t, 5); + if (15 === e) return new Pt(t + 5, Pt.FNC1); + if (e >= 5 && e < 15) return new Pt(t + 5, "0" + (e - 5)); + let r, n = this.extractNumericValueFromBitArray(t, 7); + if (n >= 64 && n < 90) return new Pt(t + 7, "" + (n + 1)); + if (n >= 90 && n < 116) return new Pt(t + 7, "" + (n + 7)); + switch (this.extractNumericValueFromBitArray(t, 8)) { + case 232: + r = "!"; + break; + case 233: + r = '"'; + break; + case 234: + r = "%"; + break; + case 235: + r = "&"; + break; + case 236: + r = "'"; + break; + case 237: + r = "("; + break; + case 238: + r = ")"; + break; + case 239: + r = "*"; + break; + case 240: + r = "+"; + break; + case 241: + r = ","; + break; + case 242: + r = "-"; + break; + case 243: + r = "."; + break; + case 244: + r = "/"; + break; + case 245: + r = ":"; + break; + case 246: + r = ";"; + break; + case 247: + r = "<"; + break; + case 248: + r = "="; + break; + case 249: + r = ">"; + break; + case 250: + r = "?"; + break; + case 251: + r = "_"; + break; + case 252: + r = " "; + break; + default: + throw new E + } + return new Pt(t + 8, r) + } + + isStillAlpha(t) { + if (t + 5 > this.information.getSize()) return !1; + let e = this.extractNumericValueFromBitArray(t, 5); + if (e >= 5 && e < 16) return !0; + if (t + 6 > this.information.getSize()) return !1; + let r = this.extractNumericValueFromBitArray(t, 6); + return r >= 16 && r < 63 + } + + decodeAlphanumeric(t) { + let e = this.extractNumericValueFromBitArray(t, 5); + if (15 === e) return new Pt(t + 5, Pt.FNC1); + if (e >= 5 && e < 15) return new Pt(t + 5, "0" + (e - 5)); + let r, n = this.extractNumericValueFromBitArray(t, 6); + if (n >= 32 && n < 58) return new Pt(t + 6, "" + (n + 33)); + switch (n) { + case 58: + r = "*"; + break; + case 59: + r = ","; + break; + case 60: + r = "-"; + break; + case 61: + r = "."; + break; + case 62: + r = "/"; + break; + default: + throw new j("Decoding invalid alphanumeric value: " + n) + } + return new Pt(t + 6, r) + } + + isAlphaTo646ToAlphaLatch(t) { + if (t + 1 > this.information.getSize()) return !1; + for (let e = 0; e < 5 && e + t < this.information.getSize(); ++e) if (2 === e) { + if (!this.information.get(t + 2)) return !1 + } else if (this.information.get(t + e)) return !1; + return !0 + } + + isAlphaOr646ToNumericLatch(t) { + if (t + 3 > this.information.getSize()) return !1; + for (let e = t; e < t + 3; ++e) if (this.information.get(e)) return !1; + return !0 + } + + isNumericToAlphaNumericLatch(t) { + if (t + 1 > this.information.getSize()) return !1; + for (let e = 0; e < 4 && e + t < this.information.getSize(); ++e) if (this.information.get(t + e)) return !1; + return !0 + } +} + +class xt { + constructor(t) { + this.information = t, this.generalDecoder = new vt(t) + } + + getInformation() { + return this.information + } + + getGeneralDecoder() { + return this.generalDecoder + } +} + +class Vt extends xt { + constructor(t) { + super(t) + } + + encodeCompressedGtin(t, e) { + t.append("(01)"); + let r = t.length(); + t.append("9"), this.encodeCompressedGtinWithoutAI(t, e, r) + } + + encodeCompressedGtinWithoutAI(t, e, r) { + for (let r = 0; r < 4; ++r) { + let n = this.getGeneralDecoder().extractNumericValueFromBitArray(e + 10 * r, 10); + n / 100 == 0 && t.append("0"), n / 10 == 0 && t.append("0"), t.append(n) + } + Vt.appendCheckDigit(t, r) + } + + static appendCheckDigit(t, e) { + let r = 0; + for (let n = 0; n < 13; n++) { + let i = t.charAt(n + e).charCodeAt(0) - "0".charCodeAt(0); + r += 0 == (1 & n) ? 3 * i : i + } + r = 10 - r % 10, 10 === r && (r = 0), t.append(r) + } +} + +Vt.GTIN_SIZE = 40; + +class Ut extends Vt { + constructor(t) { + super(t) + } + + parseInformation() { + let t = new p; + t.append("(01)"); + let e = t.length(), r = this.getGeneralDecoder().extractNumericValueFromBitArray(Ut.HEADER_SIZE, 4); + return t.append(r), this.encodeCompressedGtinWithoutAI(t, Ut.HEADER_SIZE + 4, e), this.getGeneralDecoder().decodeAllCodes(t, Ut.HEADER_SIZE + 44) + } +} + +Ut.HEADER_SIZE = 4; + +class Ht extends xt { + constructor(t) { + super(t) + } + + parseInformation() { + let t = new p; + return this.getGeneralDecoder().decodeAllCodes(t, Ht.HEADER_SIZE) + } +} + +Ht.HEADER_SIZE = 5; + +class Gt extends Vt { + constructor(t) { + super(t) + } + + encodeCompressedWeight(t, e, r) { + let n = this.getGeneralDecoder().extractNumericValueFromBitArray(e, r); + this.addWeightCode(t, n); + let i = this.checkWeight(n), s = 1e5; + for (let e = 0; e < 5; ++e) i / s == 0 && t.append("0"), s /= 10; + t.append(i) + } +} + +class Xt extends Gt { + constructor(t) { + super(t) + } + + parseInformation() { + if (this.getInformation().getSize() != Xt.HEADER_SIZE + Gt.GTIN_SIZE + Xt.WEIGHT_SIZE) throw new R; + let t = new p; + return this.encodeCompressedGtin(t, Xt.HEADER_SIZE), this.encodeCompressedWeight(t, Xt.HEADER_SIZE + Gt.GTIN_SIZE, Xt.WEIGHT_SIZE), t.toString() + } +} + +Xt.HEADER_SIZE = 5, Xt.WEIGHT_SIZE = 15; + +class Wt extends Xt { + constructor(t) { + super(t) + } + + addWeightCode(t, e) { + t.append("(3103)") + } + + checkWeight(t) { + return t + } +} + +class zt extends Xt { + constructor(t) { + super(t) + } + + addWeightCode(t, e) { + e < 1e4 ? t.append("(3202)") : t.append("(3203)") + } + + checkWeight(t) { + return t < 1e4 ? t : t - 1e4 + } +} + +class Yt extends Vt { + constructor(t) { + super(t) + } + + parseInformation() { + if (this.getInformation().getSize() < Yt.HEADER_SIZE + Vt.GTIN_SIZE) throw new R; + let t = new p; + this.encodeCompressedGtin(t, Yt.HEADER_SIZE); + let e = this.getGeneralDecoder().extractNumericValueFromBitArray(Yt.HEADER_SIZE + Vt.GTIN_SIZE, Yt.LAST_DIGIT_SIZE); + t.append("(392"), t.append(e), t.append(")"); + let r = this.getGeneralDecoder().decodeGeneralPurposeField(Yt.HEADER_SIZE + Vt.GTIN_SIZE + Yt.LAST_DIGIT_SIZE, null); + return t.append(r.getNewString()), t.toString() + } +} + +Yt.HEADER_SIZE = 8, Yt.LAST_DIGIT_SIZE = 2; + +class Zt extends Vt { + constructor(t) { + super(t) + } + + parseInformation() { + if (this.getInformation().getSize() < Zt.HEADER_SIZE + Vt.GTIN_SIZE) throw new R; + let t = new p; + this.encodeCompressedGtin(t, Zt.HEADER_SIZE); + let e = this.getGeneralDecoder().extractNumericValueFromBitArray(Zt.HEADER_SIZE + Vt.GTIN_SIZE, Zt.LAST_DIGIT_SIZE); + t.append("(393"), t.append(e), t.append(")"); + let r = this.getGeneralDecoder().extractNumericValueFromBitArray(Zt.HEADER_SIZE + Vt.GTIN_SIZE + Zt.LAST_DIGIT_SIZE, Zt.FIRST_THREE_DIGITS_SIZE); + r / 100 == 0 && t.append("0"), r / 10 == 0 && t.append("0"), t.append(r); + let n = this.getGeneralDecoder().decodeGeneralPurposeField(Zt.HEADER_SIZE + Vt.GTIN_SIZE + Zt.LAST_DIGIT_SIZE + Zt.FIRST_THREE_DIGITS_SIZE, null); + return t.append(n.getNewString()), t.toString() + } +} + +Zt.HEADER_SIZE = 8, Zt.LAST_DIGIT_SIZE = 2, Zt.FIRST_THREE_DIGITS_SIZE = 10; + +class Kt extends Gt { + constructor(t, e, r) { + super(t), this.dateCode = r, this.firstAIdigits = e + } + + parseInformation() { + if (this.getInformation().getSize() != Kt.HEADER_SIZE + Kt.GTIN_SIZE + Kt.WEIGHT_SIZE + Kt.DATE_SIZE) throw new R; + let t = new p; + return this.encodeCompressedGtin(t, Kt.HEADER_SIZE), this.encodeCompressedWeight(t, Kt.HEADER_SIZE + Kt.GTIN_SIZE, Kt.WEIGHT_SIZE), this.encodeCompressedDate(t, Kt.HEADER_SIZE + Kt.GTIN_SIZE + Kt.WEIGHT_SIZE), t.toString() + } + + encodeCompressedDate(t, e) { + let r = this.getGeneralDecoder().extractNumericValueFromBitArray(e, Kt.DATE_SIZE); + if (38400 == r) return; + t.append("("), t.append(this.dateCode), t.append(")"); + let n = r % 32; + r /= 32; + let i = r % 12 + 1; + r /= 12; + let s = r; + s / 10 == 0 && t.append("0"), t.append(s), i / 10 == 0 && t.append("0"), t.append(i), n / 10 == 0 && t.append("0"), t.append(n) + } + + addWeightCode(t, e) { + t.append("("), t.append(this.firstAIdigits), t.append(e / 1e5), t.append(")") + } + + checkWeight(t) { + return t % 1e5 + } +} + +function qt(t) { + try { + if (t.get(1)) return new Ut(t); + if (!t.get(2)) return new Ht(t); + switch (vt.extractNumericValueFromBitArray(t, 1, 4)) { + case 4: + return new Wt(t); + case 5: + return new zt(t) + } + switch (vt.extractNumericValueFromBitArray(t, 1, 5)) { + case 12: + return new Yt(t); + case 13: + return new Zt(t) + } + switch (vt.extractNumericValueFromBitArray(t, 1, 7)) { + case 56: + return new Kt(t, "310", "11"); + case 57: + return new Kt(t, "320", "11"); + case 58: + return new Kt(t, "310", "13"); + case 59: + return new Kt(t, "320", "13"); + case 60: + return new Kt(t, "310", "15"); + case 61: + return new Kt(t, "320", "15"); + case 62: + return new Kt(t, "310", "17"); + case 63: + return new Kt(t, "320", "17") + } + } catch (e) { + throw console.log(e), new j("unknown decoder: " + t) + } +} + +Kt.HEADER_SIZE = 8, Kt.WEIGHT_SIZE = 20, Kt.DATE_SIZE = 16; + +class Qt { + constructor(t, e, r, n) { + this.leftchar = t, this.rightchar = e, this.finderpattern = r, this.maybeLast = n + } + + mayBeLast() { + return this.maybeLast + } + + getLeftChar() { + return this.leftchar + } + + getRightChar() { + return this.rightchar + } + + getFinderPattern() { + return this.finderpattern + } + + mustBeLast() { + return null == this.rightchar + } + + toString() { + return "[ " + this.leftchar + ", " + this.rightchar + " : " + (null == this.finderpattern ? "null" : this.finderpattern.getValue()) + " ]" + } + + static equals(t, e) { + return t instanceof Qt && (Qt.equalsOrNull(t.leftchar, e.leftchar) && Qt.equalsOrNull(t.rightchar, e.rightchar) && Qt.equalsOrNull(t.finderpattern, e.finderpattern)) + } + + static equalsOrNull(t, e) { + return null === t ? null === e : Qt.equals(t, e) + } + + hashCode() { + return this.leftchar.getValue() ^ this.rightchar.getValue() ^ this.finderpattern.getValue() + } +} + +class jt { + constructor(t, e, r) { + this.pairs = t, this.rowNumber = e, this.wasReversed = r + } + + getPairs() { + return this.pairs + } + + getRowNumber() { + return this.rowNumber + } + + isReversed() { + return this.wasReversed + } + + isEquivalent(t) { + return this.checkEqualitity(this, t) + } + + toString() { + return "{ " + this.pairs + " }" + } + + equals(t, e) { + return t instanceof jt && (this.checkEqualitity(t, e) && t.wasReversed === e.wasReversed) + } + + checkEqualitity(t, e) { + if (!t || !e) return; + let r; + return t.forEach(((t, n) => { + e.forEach((e => { + t.getLeftChar().getValue() === e.getLeftChar().getValue() && t.getRightChar().getValue() === e.getRightChar().getValue() && t.getFinderPatter().getValue() === e.getFinderPatter().getValue() && (r = !0) + })) + })), r + } +} + +class Jt extends Dt { + constructor() { + super(...arguments), this.pairs = new Array(Jt.MAX_PAIRS), this.rows = new Array, this.startEnd = [2] + } + + decodeRow(t, e, r) { + this.pairs.length = 0, this.startFromEven = !1; + try { + return Jt.constructResult(this.decodeRow2pairs(t, e)) + } catch (t) { + } + return this.pairs.length = 0, this.startFromEven = !0, Jt.constructResult(this.decodeRow2pairs(t, e)) + } + + reset() { + this.pairs.length = 0, this.rows.length = 0 + } + + decodeRow2pairs(t, e) { + let r, n = !1; + for (; !n;) try { + this.pairs.push(this.retrieveNextPair(e, this.pairs, t)) + } catch (t) { + if (t instanceof R) { + if (!this.pairs.length) throw new R; + n = !0 + } + } + if (this.checkChecksum()) return this.pairs; + if (r = !!this.rows.length, this.storeRow(t, !1), r) { + let t = this.checkRowsBoolean(!1); + if (null != t) return t; + if (t = this.checkRowsBoolean(!0), null != t) return t + } + throw new R + } + + checkRowsBoolean(t) { + if (this.rows.length > 25) return this.rows.length = 0, null; + this.pairs.length = 0, t && (this.rows = this.rows.reverse()); + let e = null; + try { + e = this.checkRows(new Array, 0) + } catch (t) { + console.log(t) + } + return t && (this.rows = this.rows.reverse()), e + } + + checkRows(t, e) { + for (let r = e; r < this.rows.length; r++) { + let e = this.rows[r]; + this.pairs.length = 0; + for (let e of t) this.pairs.push(e.getPairs()); + if (this.pairs.push(e.getPairs()), !Jt.isValidSequence(this.pairs)) continue; + if (this.checkChecksum()) return this.pairs; + let n = new Array(t); + n.push(e); + try { + return this.checkRows(n, r + 1) + } catch (t) { + console.log(t) + } + } + throw new R + } + + static isValidSequence(t) { + for (let e of Jt.FINDER_PATTERN_SEQUENCES) { + if (t.length > e.length) continue; + let r = !0; + for (let n = 0; n < t.length; n++) if (t[n].getFinderPattern().getValue() != e[n]) { + r = !1; + break + } + if (r) return !0 + } + return !1 + } + + storeRow(t, e) { + let r = 0, n = !1, i = !1; + for (; r < this.rows.length;) { + let e = this.rows[r]; + if (e.getRowNumber() > t) { + i = e.isEquivalent(this.pairs); + break + } + n = e.isEquivalent(this.pairs), r++ + } + i || n || Jt.isPartialRow(this.pairs, this.rows) || (this.rows.push(r, new jt(this.pairs, t, e)), this.removePartialRows(this.pairs, this.rows)) + } + + removePartialRows(t, e) { + for (let r of e) if (r.getPairs().length !== t.length) for (let e of r.getPairs()) for (let r of t) if (Qt.equals(e, r)) break + } + + static isPartialRow(t, e) { + for (let r of e) { + let e = !0; + for (let n of t) { + let t = !1; + for (let e of r.getPairs()) if (n.equals(e)) { + t = !0; + break + } + if (!t) { + e = !1; + break + } + } + if (e) return !0 + } + return !1 + } + + getRows() { + return this.rows + } + + static constructResult(t) { + let e = qt(class { + static buildBitArray(t) { + let e = 2 * t.length - 1; + null == t[t.length - 1].getRightChar() && (e -= 1); + let r = new w(12 * e), n = 0, i = t[0].getRightChar().getValue(); + for (let t = 11; t >= 0; --t) 0 != (i & 1 << t) && r.set(n), n++; + for (let e = 1; e < t.length; ++e) { + let i = t[e], s = i.getLeftChar().getValue(); + for (let t = 11; t >= 0; --t) 0 != (s & 1 << t) && r.set(n), n++; + if (null != i.getRightChar()) { + let t = i.getRightChar().getValue(); + for (let e = 11; e >= 0; --e) 0 != (t & 1 << e) && r.set(n), n++ + } + } + return r + } + }.buildBitArray(t)).parseInformation(), r = t[0].getFinderPattern().getResultPoints(), + n = t[t.length - 1].getFinderPattern().getResultPoints(), i = [r[0], r[1], n[0], n[1]]; + return new F(e, null, null, i, v.RSS_EXPANDED, null) + } + + checkChecksum() { + let t = this.pairs.get(0), e = t.getLeftChar(), r = t.getRightChar(); + if (null == r) return !1; + let n = r.getChecksumPortion(), i = 2; + for (let t = 1; t < this.pairs.size(); ++t) { + let e = this.pairs.get(t); + n += e.getLeftChar().getChecksumPortion(), i++; + let r = e.getRightChar(); + null != r && (n += r.getChecksumPortion(), i++) + } + return n %= 211, 211 * (i - 4) + n == e.getValue() + } + + static getNextSecondBar(t, e) { + let r; + return t.get(e) ? (r = t.getNextUnset(e), r = t.getNextSet(r)) : (r = t.getNextSet(e), r = t.getNextUnset(r)), r + } + + retrieveNextPair(t, e, r) { + let n, i = e.length % 2 == 0; + this.startFromEven && (i = !i); + let s = !0, o = -1; + do { + this.findNextPair(t, e, o), n = this.parseFoundFinderPattern(t, r, i), null == n ? o = Jt.getNextSecondBar(t, this.startEnd[0]) : s = !1 + } while (s); + let a, l = this.decodeDataCharacter(t, n, i, !0); + if (!this.isEmptyPair(e) && e[e.length - 1].mustBeLast()) throw new R; + try { + a = this.decodeDataCharacter(t, n, i, !1) + } catch (t) { + a = null, console.log(t) + } + return new Qt(l, a, n, !0) + } + + isEmptyPair(t) { + return 0 === t.length + } + + findNextPair(t, e, r) { + let n = this.getDecodeFinderCounters(); + n[0] = 0, n[1] = 0, n[2] = 0, n[3] = 0; + let i, s = t.getSize(); + if (r >= 0) i = r; else if (this.isEmptyPair(e)) i = 0; else { + i = e[e.length - 1].getFinderPattern().getStartEnd()[1] + } + let o = e.length % 2 != 0; + this.startFromEven && (o = !o); + let a = !1; + for (; i < s && (a = !t.get(i), a);) i++; + let l = 0, h = i; + for (let e = i; e < s; e++) if (t.get(e) != a) n[l]++; else { + if (3 == l) { + if (o && Jt.reverseCounters(n), Jt.isFinderPattern(n)) return this.startEnd[0] = h, void (this.startEnd[1] = e); + o && Jt.reverseCounters(n), h += n[0] + n[1], n[0] = n[2], n[1] = n[3], n[2] = 0, n[3] = 0, l-- + } else l++; + n[l] = 1, a = !a + } + throw new R + } + + static reverseCounters(t) { + let e = t.length; + for (let r = 0; r < e / 2; ++r) { + let n = t[r]; + t[r] = t[e - r - 1], t[e - r - 1] = n + } + } + + parseFoundFinderPattern(t, e, r) { + let n, i, s; + if (r) { + let e = this.startEnd[0] - 1; + for (; e >= 0 && !t.get(e);) e--; + e++, n = this.startEnd[0] - e, i = e, s = this.startEnd[1] + } else i = this.startEnd[0], s = t.getNextUnset(this.startEnd[1] + 1), n = s - this.startEnd[1]; + let o, a = this.getDecodeFinderCounters(); + c.arraycopy(a, 0, a, 1, a.length - 1), a[0] = n; + try { + o = this.parseFinderValue(a, Jt.FINDER_PATTERNS) + } catch (t) { + return null + } + return new Ot(o, [i, s], i, s, e) + } + + decodeDataCharacter(t, e, r, n) { + let i = this.getDataCharacterCounters(); + for (let t = 0; t < i.length; t++) i[t] = 0; + if (n) Jt.recordPatternInReverse(t, e.getStartEnd()[0], i); else { + Jt.recordPattern(t, e.getStartEnd()[1], i); + for (let t = 0, e = i.length - 1; t < e; t++, e--) { + let r = i[t]; + i[t] = i[e], i[e] = r + } + } + let s = tt.sum(new Int32Array(i)) / 17, o = (e.getStartEnd()[1] - e.getStartEnd()[0]) / 15; + if (Math.abs(s - o) / o > .3) throw new R; + let a = this.getOddCounts(), l = this.getEvenCounts(), h = this.getOddRoundingErrors(), + c = this.getEvenRoundingErrors(); + for (let t = 0; t < i.length; t++) { + let e = 1 * i[t] / s, r = e + .5; + if (r < 1) { + if (e < .3) throw new R; + r = 1 + } else if (r > 8) { + if (e > 8.7) throw new R; + r = 8 + } + let n = t / 2; + 0 == (1 & t) ? (a[n] = r, h[n] = e - r) : (l[n] = r, c[n] = e - r) + } + this.adjustOddEvenCounts(17); + let u = 4 * e.getValue() + (r ? 0 : 2) + (n ? 0 : 1) - 1, d = 0, g = 0; + for (let t = a.length - 1; t >= 0; t--) { + if (Jt.isNotA1left(e, r, n)) { + let e = Jt.WEIGHTS[u][2 * t]; + g += a[t] * e + } + d += a[t] + } + let f = 0; + for (let t = l.length - 1; t >= 0; t--) if (Jt.isNotA1left(e, r, n)) { + let e = Jt.WEIGHTS[u][2 * t + 1]; + f += l[t] * e + } + let w = g + f; + if (0 != (1 & d) || d > 13 || d < 4) throw new R; + let A = (13 - d) / 2, C = Jt.SYMBOL_WIDEST[A], E = 9 - C, m = Mt.getRSSvalue(a, C, !0), + _ = Mt.getRSSvalue(l, E, !1), I = Jt.EVEN_TOTAL_SUBSET[A], S = Jt.GSUM[A]; + return new yt(m * I + _ + S, w) + } + + static isNotA1left(t, e, r) { + return !(0 == t.getValue() && e && r) + } + + adjustOddEvenCounts(t) { + let e = tt.sum(new Int32Array(this.getOddCounts())), r = tt.sum(new Int32Array(this.getEvenCounts())), n = !1, + i = !1; + e > 13 ? i = !0 : e < 4 && (n = !0); + let s = !1, o = !1; + r > 13 ? o = !0 : r < 4 && (s = !0); + let a = e + r - t, l = 1 == (1 & e), h = 0 == (1 & r); + if (1 == a) if (l) { + if (h) throw new R; + i = !0 + } else { + if (!h) throw new R; + o = !0 + } else if (-1 == a) if (l) { + if (h) throw new R; + n = !0 + } else { + if (!h) throw new R; + s = !0 + } else { + if (0 != a) throw new R; + if (l) { + if (!h) throw new R; + e < r ? (n = !0, o = !0) : (i = !0, s = !0) + } else if (h) throw new R + } + if (n) { + if (i) throw new R; + Jt.increment(this.getOddCounts(), this.getOddRoundingErrors()) + } + if (i && Jt.decrement(this.getOddCounts(), this.getOddRoundingErrors()), s) { + if (o) throw new R; + Jt.increment(this.getEvenCounts(), this.getOddRoundingErrors()) + } + o && Jt.decrement(this.getEvenCounts(), this.getEvenRoundingErrors()) + } +} + +Jt.SYMBOL_WIDEST = [7, 5, 4, 3, 1], Jt.EVEN_TOTAL_SUBSET = [4, 20, 52, 104, 204], Jt.GSUM = [0, 348, 1388, 2948, 3988], Jt.FINDER_PATTERNS = [Int32Array.from([1, 8, 4, 1]), Int32Array.from([3, 6, 4, 1]), Int32Array.from([3, 4, 6, 1]), Int32Array.from([3, 2, 8, 1]), Int32Array.from([2, 6, 5, 1]), Int32Array.from([2, 2, 9, 1])], Jt.WEIGHTS = [[1, 3, 9, 27, 81, 32, 96, 77], [20, 60, 180, 118, 143, 7, 21, 63], [189, 145, 13, 39, 117, 140, 209, 205], [193, 157, 49, 147, 19, 57, 171, 91], [62, 186, 136, 197, 169, 85, 44, 132], [185, 133, 188, 142, 4, 12, 36, 108], [113, 128, 173, 97, 80, 29, 87, 50], [150, 28, 84, 41, 123, 158, 52, 156], [46, 138, 203, 187, 139, 206, 196, 166], [76, 17, 51, 153, 37, 111, 122, 155], [43, 129, 176, 106, 107, 110, 119, 146], [16, 48, 144, 10, 30, 90, 59, 177], [109, 116, 137, 200, 178, 112, 125, 164], [70, 210, 208, 202, 184, 130, 179, 115], [134, 191, 151, 31, 93, 68, 204, 190], [148, 22, 66, 198, 172, 94, 71, 2], [6, 18, 54, 162, 64, 192, 154, 40], [120, 149, 25, 75, 14, 42, 126, 167], [79, 26, 78, 23, 69, 207, 199, 175], [103, 98, 83, 38, 114, 131, 182, 124], [161, 61, 183, 127, 170, 88, 53, 159], [55, 165, 73, 8, 24, 72, 5, 15], [45, 135, 194, 160, 58, 174, 100, 89]], Jt.FINDER_PAT_A = 0, Jt.FINDER_PAT_B = 1, Jt.FINDER_PAT_C = 2, Jt.FINDER_PAT_D = 3, Jt.FINDER_PAT_E = 4, Jt.FINDER_PAT_F = 5, Jt.FINDER_PATTERN_SEQUENCES = [[Jt.FINDER_PAT_A, Jt.FINDER_PAT_A], [Jt.FINDER_PAT_A, Jt.FINDER_PAT_B, Jt.FINDER_PAT_B], [Jt.FINDER_PAT_A, Jt.FINDER_PAT_C, Jt.FINDER_PAT_B, Jt.FINDER_PAT_D], [Jt.FINDER_PAT_A, Jt.FINDER_PAT_E, Jt.FINDER_PAT_B, Jt.FINDER_PAT_D, Jt.FINDER_PAT_C], [Jt.FINDER_PAT_A, Jt.FINDER_PAT_E, Jt.FINDER_PAT_B, Jt.FINDER_PAT_D, Jt.FINDER_PAT_D, Jt.FINDER_PAT_F], [Jt.FINDER_PAT_A, Jt.FINDER_PAT_E, Jt.FINDER_PAT_B, Jt.FINDER_PAT_D, Jt.FINDER_PAT_E, Jt.FINDER_PAT_F, Jt.FINDER_PAT_F], [Jt.FINDER_PAT_A, Jt.FINDER_PAT_A, Jt.FINDER_PAT_B, Jt.FINDER_PAT_B, Jt.FINDER_PAT_C, Jt.FINDER_PAT_C, Jt.FINDER_PAT_D, Jt.FINDER_PAT_D], [Jt.FINDER_PAT_A, Jt.FINDER_PAT_A, Jt.FINDER_PAT_B, Jt.FINDER_PAT_B, Jt.FINDER_PAT_C, Jt.FINDER_PAT_C, Jt.FINDER_PAT_D, Jt.FINDER_PAT_E, Jt.FINDER_PAT_E], [Jt.FINDER_PAT_A, Jt.FINDER_PAT_A, Jt.FINDER_PAT_B, Jt.FINDER_PAT_B, Jt.FINDER_PAT_C, Jt.FINDER_PAT_C, Jt.FINDER_PAT_D, Jt.FINDER_PAT_E, Jt.FINDER_PAT_F, Jt.FINDER_PAT_F], [Jt.FINDER_PAT_A, Jt.FINDER_PAT_A, Jt.FINDER_PAT_B, Jt.FINDER_PAT_B, Jt.FINDER_PAT_C, Jt.FINDER_PAT_D, Jt.FINDER_PAT_D, Jt.FINDER_PAT_E, Jt.FINDER_PAT_E, Jt.FINDER_PAT_F, Jt.FINDER_PAT_F]], Jt.MAX_PAIRS = 11; + +class $t extends yt { + constructor(t, e, r) { + super(t, e), this.count = 0, this.finderPattern = r + } + + getFinderPattern() { + return this.finderPattern + } + + getCount() { + return this.count + } + + incrementCount() { + this.count++ + } +} + +class te extends Dt { + constructor() { + super(...arguments), this.possibleLeftPairs = [], this.possibleRightPairs = [] + } + + decodeRow(t, e, r) { + const n = this.decodePair(e, !1, t, r); + te.addOrTally(this.possibleLeftPairs, n), e.reverse(); + let i = this.decodePair(e, !0, t, r); + te.addOrTally(this.possibleRightPairs, i), e.reverse(); + for (let t of this.possibleLeftPairs) if (t.getCount() > 1) for (let e of this.possibleRightPairs) if (e.getCount() > 1 && te.checkChecksum(t, e)) return te.constructResult(t, e); + throw new R + } + + static addOrTally(t, e) { + if (null == e) return; + let r = !1; + for (let n of t) if (n.getValue() === e.getValue()) { + n.incrementCount(), r = !0; + break + } + r || t.push(e) + } + + reset() { + this.possibleLeftPairs.length = 0, this.possibleRightPairs.length = 0 + } + + static constructResult(t, e) { + let r = 4537077 * t.getValue() + e.getValue(), n = new String(r).toString(), i = new p; + for (let t = 13 - n.length; t > 0; t--) i.append("0"); + i.append(n); + let s = 0; + for (let t = 0; t < 13; t++) { + let e = i.charAt(t).charCodeAt(0) - "0".charCodeAt(0); + s += 0 == (1 & t) ? 3 * e : e + } + s = 10 - s % 10, 10 === s && (s = 0), i.append(s.toString()); + let o = t.getFinderPattern().getResultPoints(), a = e.getFinderPattern().getResultPoints(); + return new F(i.toString(), null, 0, [o[0], o[1], a[0], a[1]], v.RSS_14, (new Date).getTime()) + } + + static checkChecksum(t, e) { + let r = (t.getChecksumPortion() + 16 * e.getChecksumPortion()) % 79, + n = 9 * t.getFinderPattern().getValue() + e.getFinderPattern().getValue(); + return n > 72 && n--, n > 8 && n--, r === n + } + + decodePair(t, e, r, n) { + try { + let i = this.findFinderPattern(t, e), s = this.parseFoundFinderPattern(t, r, e, i), + o = null == n ? null : n.get(C.NEED_RESULT_POINT_CALLBACK); + if (null != o) { + let n = (i[0] + i[1]) / 2; + e && (n = t.getSize() - 1 - n), o.foundPossibleResultPoint(new rt(n, r)) + } + let a = this.decodeDataCharacter(t, s, !0), l = this.decodeDataCharacter(t, s, !1); + return new $t(1597 * a.getValue() + l.getValue(), a.getChecksumPortion() + 4 * l.getChecksumPortion(), s) + } catch (t) { + return null + } + } + + decodeDataCharacter(t, e, r) { + let n = this.getDataCharacterCounters(); + for (let t = 0; t < n.length; t++) n[t] = 0; + if (r) gt.recordPatternInReverse(t, e.getStartEnd()[0], n); else { + gt.recordPattern(t, e.getStartEnd()[1] + 1, n); + for (let t = 0, e = n.length - 1; t < e; t++, e--) { + let r = n[t]; + n[t] = n[e], n[e] = r + } + } + let i = r ? 16 : 15, s = tt.sum(new Int32Array(n)) / i, o = this.getOddCounts(), a = this.getEvenCounts(), + l = this.getOddRoundingErrors(), h = this.getEvenRoundingErrors(); + for (let t = 0; t < n.length; t++) { + let e = n[t] / s, r = Math.floor(e + .5); + r < 1 ? r = 1 : r > 8 && (r = 8); + let i = Math.floor(t / 2); + 0 == (1 & t) ? (o[i] = r, l[i] = e - r) : (a[i] = r, h[i] = e - r) + } + this.adjustOddEvenCounts(r, i); + let c = 0, u = 0; + for (let t = o.length - 1; t >= 0; t--) u *= 9, u += o[t], c += o[t]; + let d = 0, g = 0; + for (let t = a.length - 1; t >= 0; t--) d *= 9, d += a[t], g += a[t]; + let f = u + 3 * d; + if (r) { + if (0 != (1 & c) || c > 12 || c < 4) throw new R; + let t = (12 - c) / 2, e = te.OUTSIDE_ODD_WIDEST[t], r = 9 - e, n = Mt.getRSSvalue(o, e, !1), + i = Mt.getRSSvalue(a, r, !0), s = te.OUTSIDE_EVEN_TOTAL_SUBSET[t], l = te.OUTSIDE_GSUM[t]; + return new yt(n * s + i + l, f) + } + { + if (0 != (1 & g) || g > 10 || g < 4) throw new R; + let t = (10 - g) / 2, e = te.INSIDE_ODD_WIDEST[t], r = 9 - e, n = Mt.getRSSvalue(o, e, !0), + i = Mt.getRSSvalue(a, r, !1), s = te.INSIDE_ODD_TOTAL_SUBSET[t], l = te.INSIDE_GSUM[t]; + return new yt(i * s + n + l, f) + } + } + + findFinderPattern(t, e) { + let r = this.getDecodeFinderCounters(); + r[0] = 0, r[1] = 0, r[2] = 0, r[3] = 0; + let n = t.getSize(), i = !1, s = 0; + for (; s < n && (i = !t.get(s), e !== i);) s++; + let o = 0, a = s; + for (let e = s; e < n; e++) if (t.get(e) !== i) r[o]++; else { + if (3 === o) { + if (Dt.isFinderPattern(r)) return [a, e]; + a += r[0] + r[1], r[0] = r[2], r[1] = r[3], r[2] = 0, r[3] = 0, o-- + } else o++; + r[o] = 1, i = !i + } + throw new R + } + + parseFoundFinderPattern(t, e, r, n) { + let i = t.get(n[0]), s = n[0] - 1; + for (; s >= 0 && i !== t.get(s);) s--; + s++; + const o = n[0] - s, a = this.getDecodeFinderCounters(), l = new Int32Array(a.length); + c.arraycopy(a, 0, l, 1, a.length - 1), l[0] = o; + const h = this.parseFinderValue(l, te.FINDER_PATTERNS); + let u = s, d = n[1]; + return r && (u = t.getSize() - 1 - u, d = t.getSize() - 1 - d), new Ot(h, [s, n[1]], u, d, e) + } + + adjustOddEvenCounts(t, e) { + let r = tt.sum(new Int32Array(this.getOddCounts())), n = tt.sum(new Int32Array(this.getEvenCounts())), i = !1, + s = !1, o = !1, a = !1; + t ? (r > 12 ? s = !0 : r < 4 && (i = !0), n > 12 ? a = !0 : n < 4 && (o = !0)) : (r > 11 ? s = !0 : r < 5 && (i = !0), n > 10 ? a = !0 : n < 4 && (o = !0)); + let l = r + n - e, h = (1 & r) == (t ? 1 : 0), c = 1 == (1 & n); + if (1 === l) if (h) { + if (c) throw new R; + s = !0 + } else { + if (!c) throw new R; + a = !0 + } else if (-1 === l) if (h) { + if (c) throw new R; + i = !0 + } else { + if (!c) throw new R; + o = !0 + } else { + if (0 !== l) throw new R; + if (h) { + if (!c) throw new R; + r < n ? (i = !0, a = !0) : (s = !0, o = !0) + } else if (c) throw new R + } + if (i) { + if (s) throw new R; + Dt.increment(this.getOddCounts(), this.getOddRoundingErrors()) + } + if (s && Dt.decrement(this.getOddCounts(), this.getOddRoundingErrors()), o) { + if (a) throw new R; + Dt.increment(this.getEvenCounts(), this.getOddRoundingErrors()) + } + a && Dt.decrement(this.getEvenCounts(), this.getEvenRoundingErrors()) + } +} + +te.OUTSIDE_EVEN_TOTAL_SUBSET = [1, 10, 34, 70, 126], te.INSIDE_ODD_TOTAL_SUBSET = [4, 20, 48, 81], te.OUTSIDE_GSUM = [0, 161, 961, 2015, 2715], te.INSIDE_GSUM = [0, 336, 1036, 1516], te.OUTSIDE_ODD_WIDEST = [8, 6, 4, 3, 1], te.INSIDE_ODD_WIDEST = [2, 4, 6, 8], te.FINDER_PATTERNS = [Int32Array.from([3, 8, 2, 1]), Int32Array.from([3, 5, 5, 1]), Int32Array.from([3, 3, 7, 1]), Int32Array.from([3, 1, 9, 1]), Int32Array.from([2, 7, 4, 1]), Int32Array.from([2, 5, 6, 1]), Int32Array.from([2, 3, 8, 1]), Int32Array.from([1, 5, 7, 1]), Int32Array.from([1, 3, 9, 1])]; + +class ee extends gt { + constructor(t) { + super(), this.readers = []; + const e = t ? t.get(C.POSSIBLE_FORMATS) : null, r = t && void 0 !== t.get(C.ASSUME_CODE_39_CHECK_DIGIT); + e && ((e.includes(v.EAN_13) || e.includes(v.UPC_A) || e.includes(v.EAN_8) || e.includes(v.UPC_E)) && this.readers.push(new Nt(t)), e.includes(v.CODE_39) && this.readers.push(new wt(r)), e.includes(v.CODE_128) && this.readers.push(new ft), e.includes(v.ITF) && this.readers.push(new At), e.includes(v.RSS_14) && this.readers.push(new te), e.includes(v.RSS_EXPANDED) && (console.warn("RSS Expanded reader IS NOT ready for production yet! use at your own risk."), this.readers.push(new Jt))), 0 === this.readers.length && (this.readers.push(new Nt(t)), this.readers.push(new wt), this.readers.push(new Nt(t)), this.readers.push(new ft), this.readers.push(new At), this.readers.push(new te)) + } + + decodeRow(t, e, r) { + for (let n = 0; n < this.readers.length; n++) try { + return this.readers[n].decodeRow(t, e, r) + } catch (t) { + } + throw new R + } + + reset() { + this.readers.forEach((t => t.reset())) + } +} + +class re { + constructor(t, e, r) { + this.ecCodewords = t, this.ecBlocks = [e], r && this.ecBlocks.push(r) + } + + getECCodewords() { + return this.ecCodewords + } + + getECBlocks() { + return this.ecBlocks + } +} + +class ne { + constructor(t, e) { + this.count = t, this.dataCodewords = e + } + + getCount() { + return this.count + } + + getDataCodewords() { + return this.dataCodewords + } +} + +class ie { + constructor(t, e, r, n, i, s) { + this.versionNumber = t, this.symbolSizeRows = e, this.symbolSizeColumns = r, this.dataRegionSizeRows = n, this.dataRegionSizeColumns = i, this.ecBlocks = s; + let o = 0; + const a = s.getECCodewords(), l = s.getECBlocks(); + for (let t of l) o += t.getCount() * (t.getDataCodewords() + a); + this.totalCodewords = o + } + + getVersionNumber() { + return this.versionNumber + } + + getSymbolSizeRows() { + return this.symbolSizeRows + } + + getSymbolSizeColumns() { + return this.symbolSizeColumns + } + + getDataRegionSizeRows() { + return this.dataRegionSizeRows + } + + getDataRegionSizeColumns() { + return this.dataRegionSizeColumns + } + + getTotalCodewords() { + return this.totalCodewords + } + + getECBlocks() { + return this.ecBlocks + } + + static getVersionForDimensions(t, e) { + if (0 != (1 & t) || 0 != (1 & e)) throw new E; + for (let r of ie.VERSIONS) if (r.symbolSizeRows === t && r.symbolSizeColumns === e) return r; + throw new E + } + + toString() { + return "" + this.versionNumber + } + + static buildVersions() { + return [new ie(1, 10, 10, 8, 8, new re(5, new ne(1, 3))), new ie(2, 12, 12, 10, 10, new re(7, new ne(1, 5))), new ie(3, 14, 14, 12, 12, new re(10, new ne(1, 8))), new ie(4, 16, 16, 14, 14, new re(12, new ne(1, 12))), new ie(5, 18, 18, 16, 16, new re(14, new ne(1, 18))), new ie(6, 20, 20, 18, 18, new re(18, new ne(1, 22))), new ie(7, 22, 22, 20, 20, new re(20, new ne(1, 30))), new ie(8, 24, 24, 22, 22, new re(24, new ne(1, 36))), new ie(9, 26, 26, 24, 24, new re(28, new ne(1, 44))), new ie(10, 32, 32, 14, 14, new re(36, new ne(1, 62))), new ie(11, 36, 36, 16, 16, new re(42, new ne(1, 86))), new ie(12, 40, 40, 18, 18, new re(48, new ne(1, 114))), new ie(13, 44, 44, 20, 20, new re(56, new ne(1, 144))), new ie(14, 48, 48, 22, 22, new re(68, new ne(1, 174))), new ie(15, 52, 52, 24, 24, new re(42, new ne(2, 102))), new ie(16, 64, 64, 14, 14, new re(56, new ne(2, 140))), new ie(17, 72, 72, 16, 16, new re(36, new ne(4, 92))), new ie(18, 80, 80, 18, 18, new re(48, new ne(4, 114))), new ie(19, 88, 88, 20, 20, new re(56, new ne(4, 144))), new ie(20, 96, 96, 22, 22, new re(68, new ne(4, 174))), new ie(21, 104, 104, 24, 24, new re(56, new ne(6, 136))), new ie(22, 120, 120, 18, 18, new re(68, new ne(6, 175))), new ie(23, 132, 132, 20, 20, new re(62, new ne(8, 163))), new ie(24, 144, 144, 22, 22, new re(62, new ne(8, 156), new ne(2, 155))), new ie(25, 8, 18, 6, 16, new re(7, new ne(1, 5))), new ie(26, 8, 32, 6, 14, new re(11, new ne(1, 10))), new ie(27, 12, 26, 10, 24, new re(14, new ne(1, 16))), new ie(28, 12, 36, 10, 16, new re(18, new ne(1, 22))), new ie(29, 16, 36, 14, 16, new re(24, new ne(1, 32))), new ie(30, 16, 48, 14, 22, new re(28, new ne(1, 49)))] + } +} + +ie.VERSIONS = ie.buildVersions(); + +class se { + constructor(t) { + const e = t.getHeight(); + if (e < 8 || e > 144 || 0 != (1 & e)) throw new E; + this.version = se.readVersion(t), this.mappingBitMatrix = this.extractDataRegion(t), this.readMappingMatrix = new T(this.mappingBitMatrix.getWidth(), this.mappingBitMatrix.getHeight()) + } + + getVersion() { + return this.version + } + + static readVersion(t) { + const e = t.getHeight(), r = t.getWidth(); + return ie.getVersionForDimensions(e, r) + } + + readCodewords() { + const t = new Int8Array(this.version.getTotalCodewords()); + let e = 0, r = 4, n = 0; + const i = this.mappingBitMatrix.getHeight(), s = this.mappingBitMatrix.getWidth(); + let o = !1, a = !1, l = !1, h = !1; + do { + if (r !== i || 0 !== n || o) if (r !== i - 2 || 0 !== n || 0 == (3 & s) || a) if (r !== i + 4 || 2 !== n || 0 != (7 & s) || l) if (r !== i - 2 || 0 !== n || 4 != (7 & s) || h) { + do { + r < i && n >= 0 && !this.readMappingMatrix.get(n, r) && (t[e++] = 255 & this.readUtah(r, n, i, s)), r -= 2, n += 2 + } while (r >= 0 && n < s); + r += 1, n += 3; + do { + r >= 0 && n < s && !this.readMappingMatrix.get(n, r) && (t[e++] = 255 & this.readUtah(r, n, i, s)), r += 2, n -= 2 + } while (r < i && n >= 0); + r += 3, n += 1 + } else t[e++] = 255 & this.readCorner4(i, s), r -= 2, n += 2, h = !0; else t[e++] = 255 & this.readCorner3(i, s), r -= 2, n += 2, l = !0; else t[e++] = 255 & this.readCorner2(i, s), r -= 2, n += 2, a = !0; else t[e++] = 255 & this.readCorner1(i, s), r -= 2, n += 2, o = !0 + } while (r < i || n < s); + if (e !== this.version.getTotalCodewords()) throw new E; + return t + } + + readModule(t, e, r, n) { + return t < 0 && (t += r, e += 4 - (r + 4 & 7)), e < 0 && (e += n, t += 4 - (n + 4 & 7)), this.readMappingMatrix.set(e, t), this.mappingBitMatrix.get(e, t) + } + + readUtah(t, e, r, n) { + let i = 0; + return this.readModule(t - 2, e - 2, r, n) && (i |= 1), i <<= 1, this.readModule(t - 2, e - 1, r, n) && (i |= 1), i <<= 1, this.readModule(t - 1, e - 2, r, n) && (i |= 1), i <<= 1, this.readModule(t - 1, e - 1, r, n) && (i |= 1), i <<= 1, this.readModule(t - 1, e, r, n) && (i |= 1), i <<= 1, this.readModule(t, e - 2, r, n) && (i |= 1), i <<= 1, this.readModule(t, e - 1, r, n) && (i |= 1), i <<= 1, this.readModule(t, e, r, n) && (i |= 1), i + } + + readCorner1(t, e) { + let r = 0; + return this.readModule(t - 1, 0, t, e) && (r |= 1), r <<= 1, this.readModule(t - 1, 1, t, e) && (r |= 1), r <<= 1, this.readModule(t - 1, 2, t, e) && (r |= 1), r <<= 1, this.readModule(0, e - 2, t, e) && (r |= 1), r <<= 1, this.readModule(0, e - 1, t, e) && (r |= 1), r <<= 1, this.readModule(1, e - 1, t, e) && (r |= 1), r <<= 1, this.readModule(2, e - 1, t, e) && (r |= 1), r <<= 1, this.readModule(3, e - 1, t, e) && (r |= 1), r + } + + readCorner2(t, e) { + let r = 0; + return this.readModule(t - 3, 0, t, e) && (r |= 1), r <<= 1, this.readModule(t - 2, 0, t, e) && (r |= 1), r <<= 1, this.readModule(t - 1, 0, t, e) && (r |= 1), r <<= 1, this.readModule(0, e - 4, t, e) && (r |= 1), r <<= 1, this.readModule(0, e - 3, t, e) && (r |= 1), r <<= 1, this.readModule(0, e - 2, t, e) && (r |= 1), r <<= 1, this.readModule(0, e - 1, t, e) && (r |= 1), r <<= 1, this.readModule(1, e - 1, t, e) && (r |= 1), r + } + + readCorner3(t, e) { + let r = 0; + return this.readModule(t - 1, 0, t, e) && (r |= 1), r <<= 1, this.readModule(t - 1, e - 1, t, e) && (r |= 1), r <<= 1, this.readModule(0, e - 3, t, e) && (r |= 1), r <<= 1, this.readModule(0, e - 2, t, e) && (r |= 1), r <<= 1, this.readModule(0, e - 1, t, e) && (r |= 1), r <<= 1, this.readModule(1, e - 3, t, e) && (r |= 1), r <<= 1, this.readModule(1, e - 2, t, e) && (r |= 1), r <<= 1, this.readModule(1, e - 1, t, e) && (r |= 1), r + } + + readCorner4(t, e) { + let r = 0; + return this.readModule(t - 3, 0, t, e) && (r |= 1), r <<= 1, this.readModule(t - 2, 0, t, e) && (r |= 1), r <<= 1, this.readModule(t - 1, 0, t, e) && (r |= 1), r <<= 1, this.readModule(0, e - 2, t, e) && (r |= 1), r <<= 1, this.readModule(0, e - 1, t, e) && (r |= 1), r <<= 1, this.readModule(1, e - 1, t, e) && (r |= 1), r <<= 1, this.readModule(2, e - 1, t, e) && (r |= 1), r <<= 1, this.readModule(3, e - 1, t, e) && (r |= 1), r + } + + extractDataRegion(t) { + const e = this.version.getSymbolSizeRows(), r = this.version.getSymbolSizeColumns(); + if (t.getHeight() !== e) throw new o("Dimension of bitMatrix must match the version size"); + const n = this.version.getDataRegionSizeRows(), i = this.version.getDataRegionSizeColumns(), s = e / n | 0, + a = r / i | 0, l = new T(a * i, s * n); + for (let e = 0; e < s; ++e) { + const r = e * n; + for (let s = 0; s < a; ++s) { + const o = s * i; + for (let a = 0; a < n; ++a) { + const h = e * (n + 2) + 1 + a, c = r + a; + for (let e = 0; e < i; ++e) { + const r = s * (i + 2) + 1 + e; + if (t.get(r, h)) { + const t = o + e; + l.set(t, c) + } + } + } + } + } + return l + } +} + +class oe { + constructor(t, e) { + this.numDataCodewords = t, this.codewords = e + } + + static getDataBlocks(t, e) { + const r = e.getECBlocks(); + let n = 0; + const i = r.getECBlocks(); + for (let t of i) n += t.getCount(); + const s = new Array(n); + let a = 0; + for (let t of i) for (let e = 0; e < t.getCount(); e++) { + const e = t.getDataCodewords(), n = r.getECCodewords() + e; + s[a++] = new oe(e, new Uint8Array(n)) + } + const l = s[0].codewords.length - r.getECCodewords(), h = l - 1; + let c = 0; + for (let e = 0; e < h; e++) for (let r = 0; r < a; r++) s[r].codewords[e] = t[c++]; + const u = 24 === e.getVersionNumber(), d = u ? 8 : a; + for (let e = 0; e < d; e++) s[e].codewords[l - 1] = t[c++]; + const g = s[0].codewords.length; + for (let e = l; e < g; e++) for (let r = 0; r < a; r++) { + const n = u ? (r + 8) % a : r, i = u && n > 7 ? e - 1 : e; + s[n].codewords[i] = t[c++] + } + if (c !== t.length) throw new o; + return s + } + + getNumDataCodewords() { + return this.numDataCodewords + } + + getCodewords() { + return this.codewords + } +} + +class ae { + constructor(t) { + this.bytes = t, this.byteOffset = 0, this.bitOffset = 0 + } + + getBitOffset() { + return this.bitOffset + } + + getByteOffset() { + return this.byteOffset + } + + readBits(t) { + if (t < 1 || t > 32 || t > this.available()) throw new o("" + t); + let e = 0, r = this.bitOffset, n = this.byteOffset; + const i = this.bytes; + if (r > 0) { + const s = 8 - r, o = t < s ? t : s, a = s - o, l = 255 >> 8 - o << a; + e = (i[n] & l) >> a, t -= o, r += o, 8 === r && (r = 0, n++) + } + if (t > 0) { + for (; t >= 8;) e = e << 8 | 255 & i[n], n++, t -= 8; + if (t > 0) { + const s = 8 - t, o = 255 >> s << s; + e = e << t | (i[n] & o) >> s, r += t + } + } + return this.bitOffset = r, this.byteOffset = n, e + } + + available() { + return 8 * (this.bytes.length - this.byteOffset) - this.bitOffset + } +} + +!function (t) { + t[t.PAD_ENCODE = 0] = "PAD_ENCODE", t[t.ASCII_ENCODE = 1] = "ASCII_ENCODE", t[t.C40_ENCODE = 2] = "C40_ENCODE", t[t.TEXT_ENCODE = 3] = "TEXT_ENCODE", t[t.ANSIX12_ENCODE = 4] = "ANSIX12_ENCODE", t[t.EDIFACT_ENCODE = 5] = "EDIFACT_ENCODE", t[t.BASE256_ENCODE = 6] = "BASE256_ENCODE" +}(V || (V = {})); + +class le { + static decode(t) { + const e = new ae(t), r = new p, n = new p, i = new Array; + let s = V.ASCII_ENCODE; + do { + if (s === V.ASCII_ENCODE) s = this.decodeAsciiSegment(e, r, n); else { + switch (s) { + case V.C40_ENCODE: + this.decodeC40Segment(e, r); + break; + case V.TEXT_ENCODE: + this.decodeTextSegment(e, r); + break; + case V.ANSIX12_ENCODE: + this.decodeAnsiX12Segment(e, r); + break; + case V.EDIFACT_ENCODE: + this.decodeEdifactSegment(e, r); + break; + case V.BASE256_ENCODE: + this.decodeBase256Segment(e, r, i); + break; + default: + throw new E + } + s = V.ASCII_ENCODE + } + } while (s !== V.PAD_ENCODE && e.available() > 0); + return n.length() > 0 && r.append(n.toString()), new z(t, r.toString(), 0 === i.length ? null : i, null) + } + + static decodeAsciiSegment(t, e, r) { + let n = !1; + do { + let i = t.readBits(8); + if (0 === i) throw new E; + if (i <= 128) return n && (i += 128), e.append(String.fromCharCode(i - 1)), V.ASCII_ENCODE; + if (129 === i) return V.PAD_ENCODE; + if (i <= 229) { + const t = i - 130; + t < 10 && e.append("0"), e.append("" + t) + } else switch (i) { + case 230: + return V.C40_ENCODE; + case 231: + return V.BASE256_ENCODE; + case 232: + e.append(String.fromCharCode(29)); + break; + case 233: + case 234: + break; + case 235: + n = !0; + break; + case 236: + e.append("[)>05"), r.insert(0, ""); + break; + case 237: + e.append("[)>06"), r.insert(0, ""); + break; + case 238: + return V.ANSIX12_ENCODE; + case 239: + return V.TEXT_ENCODE; + case 240: + return V.EDIFACT_ENCODE; + case 241: + break; + default: + if (254 !== i || 0 !== t.available()) throw new E + } + } while (t.available() > 0); + return V.ASCII_ENCODE + } + + static decodeC40Segment(t, e) { + let r = !1; + const n = []; + let i = 0; + do { + if (8 === t.available()) return; + const s = t.readBits(8); + if (254 === s) return; + this.parseTwoBytes(s, t.readBits(8), n); + for (let t = 0; t < 3; t++) { + const s = n[t]; + switch (i) { + case 0: + if (s < 3) i = s + 1; else { + if (!(s < this.C40_BASIC_SET_CHARS.length)) throw new E; + { + const t = this.C40_BASIC_SET_CHARS[s]; + r ? (e.append(String.fromCharCode(t.charCodeAt(0) + 128)), r = !1) : e.append(t) + } + } + break; + case 1: + r ? (e.append(String.fromCharCode(s + 128)), r = !1) : e.append(String.fromCharCode(s)), i = 0; + break; + case 2: + if (s < this.C40_SHIFT2_SET_CHARS.length) { + const t = this.C40_SHIFT2_SET_CHARS[s]; + r ? (e.append(String.fromCharCode(t.charCodeAt(0) + 128)), r = !1) : e.append(t) + } else switch (s) { + case 27: + e.append(String.fromCharCode(29)); + break; + case 30: + r = !0; + break; + default: + throw new E + } + i = 0; + break; + case 3: + r ? (e.append(String.fromCharCode(s + 224)), r = !1) : e.append(String.fromCharCode(s + 96)), i = 0; + break; + default: + throw new E + } + } + } while (t.available() > 0) + } + + static decodeTextSegment(t, e) { + let r = !1, n = [], i = 0; + do { + if (8 === t.available()) return; + const s = t.readBits(8); + if (254 === s) return; + this.parseTwoBytes(s, t.readBits(8), n); + for (let t = 0; t < 3; t++) { + const s = n[t]; + switch (i) { + case 0: + if (s < 3) i = s + 1; else { + if (!(s < this.TEXT_BASIC_SET_CHARS.length)) throw new E; + { + const t = this.TEXT_BASIC_SET_CHARS[s]; + r ? (e.append(String.fromCharCode(t.charCodeAt(0) + 128)), r = !1) : e.append(t) + } + } + break; + case 1: + r ? (e.append(String.fromCharCode(s + 128)), r = !1) : e.append(String.fromCharCode(s)), i = 0; + break; + case 2: + if (s < this.TEXT_SHIFT2_SET_CHARS.length) { + const t = this.TEXT_SHIFT2_SET_CHARS[s]; + r ? (e.append(String.fromCharCode(t.charCodeAt(0) + 128)), r = !1) : e.append(t) + } else switch (s) { + case 27: + e.append(String.fromCharCode(29)); + break; + case 30: + r = !0; + break; + default: + throw new E + } + i = 0; + break; + case 3: + if (!(s < this.TEXT_SHIFT3_SET_CHARS.length)) throw new E; + { + const t = this.TEXT_SHIFT3_SET_CHARS[s]; + r ? (e.append(String.fromCharCode(t.charCodeAt(0) + 128)), r = !1) : e.append(t), i = 0 + } + break; + default: + throw new E + } + } + } while (t.available() > 0) + } + + static decodeAnsiX12Segment(t, e) { + const r = []; + do { + if (8 === t.available()) return; + const n = t.readBits(8); + if (254 === n) return; + this.parseTwoBytes(n, t.readBits(8), r); + for (let t = 0; t < 3; t++) { + const n = r[t]; + switch (n) { + case 0: + e.append("\r"); + break; + case 1: + e.append("*"); + break; + case 2: + e.append(">"); + break; + case 3: + e.append(" "); + break; + default: + if (n < 14) e.append(String.fromCharCode(n + 44)); else { + if (!(n < 40)) throw new E; + e.append(String.fromCharCode(n + 51)) + } + } + } + } while (t.available() > 0) + } + + static parseTwoBytes(t, e, r) { + let n = (t << 8) + e - 1, i = Math.floor(n / 1600); + r[0] = i, n -= 1600 * i, i = Math.floor(n / 40), r[1] = i, r[2] = n - 40 * i + } + + static decodeEdifactSegment(t, e) { + do { + if (t.available() <= 16) return; + for (let r = 0; r < 4; r++) { + let r = t.readBits(6); + if (31 === r) { + const e = 8 - t.getBitOffset(); + return void (8 !== e && t.readBits(e)) + } + 0 == (32 & r) && (r |= 64), e.append(String.fromCharCode(r)) + } + } while (t.available() > 0) + } + + static decodeBase256Segment(t, e, r) { + let n = 1 + t.getByteOffset(); + const i = this.unrandomize255State(t.readBits(8), n++); + let s; + if (s = 0 === i ? t.available() / 8 | 0 : i < 250 ? i : 250 * (i - 249) + this.unrandomize255State(t.readBits(8), n++), s < 0) throw new E; + const o = new Uint8Array(s); + for (let e = 0; e < s; e++) { + if (t.available() < 8) throw new E; + o[e] = this.unrandomize255State(t.readBits(8), n++) + } + r.push(o); + try { + e.append(I.decode(o, S.ISO88591)) + } catch (t) { + throw new j("Platform does not support required encoding: " + t.message) + } + } + + static unrandomize255State(t, e) { + const r = t - (149 * e % 255 + 1); + return r >= 0 ? r : r + 256 + } +} + +le.C40_BASIC_SET_CHARS = ["*", "*", "*", " ", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"], le.C40_SHIFT2_SET_CHARS = ["!", '"', "#", "$", "%", "&", "'", "(", ")", "*", "+", ",", "-", ".", "/", ":", ";", "<", "=", ">", "?", "@", "[", "\\", "]", "^", "_"], le.TEXT_BASIC_SET_CHARS = ["*", "*", "*", " ", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"], le.TEXT_SHIFT2_SET_CHARS = le.C40_SHIFT2_SET_CHARS, le.TEXT_SHIFT3_SET_CHARS = ["`", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "{", "|", "}", "~", String.fromCharCode(127)]; + +class he { + constructor() { + this.rsDecoder = new J(q.DATA_MATRIX_FIELD_256) + } + + decode(t) { + const e = new se(t), r = e.getVersion(), n = e.readCodewords(), i = oe.getDataBlocks(n, r); + let s = 0; + for (let t of i) s += t.getNumDataCodewords(); + const o = new Uint8Array(s), a = i.length; + for (let t = 0; t < a; t++) { + const e = i[t], r = e.getCodewords(), n = e.getNumDataCodewords(); + this.correctErrors(r, n); + for (let e = 0; e < n; e++) o[e * a + t] = r[e] + } + return le.decode(o) + } + + correctErrors(t, e) { + const r = new Int32Array(t); + try { + this.rsDecoder.decode(r, t.length - e) + } catch (t) { + throw new l + } + for (let n = 0; n < e; n++) t[n] = r[n] + } +} + +class ce { + constructor(t) { + this.image = t, this.rectangleDetector = new st(this.image) + } + + detect() { + const t = this.rectangleDetector.detect(); + let e = this.detectSolid1(t); + if (e = this.detectSolid2(e), e[3] = this.correctTopRight(e), !e[3]) throw new R; + e = this.shiftToModuleCenter(e); + const r = e[0], n = e[1], i = e[2], s = e[3]; + let o = this.transitionsBetween(r, s) + 1, a = this.transitionsBetween(i, s) + 1; + 1 == (1 & o) && (o += 1), 1 == (1 & a) && (a += 1), 4 * o < 7 * a && 4 * a < 7 * o && (o = a = Math.max(o, a)); + let l = ce.sampleGrid(this.image, r, n, i, s, o, a); + return new nt(l, [r, n, i, s]) + } + + static shiftPoint(t, e, r) { + let n = (e.getX() - t.getX()) / (r + 1), i = (e.getY() - t.getY()) / (r + 1); + return new rt(t.getX() + n, t.getY() + i) + } + + static moveAway(t, e, r) { + let n = t.getX(), i = t.getY(); + return n < e ? n -= 1 : n += 1, i < r ? i -= 1 : i += 1, new rt(n, i) + } + + detectSolid1(t) { + let e = t[0], r = t[1], n = t[3], i = t[2], s = this.transitionsBetween(e, r), + o = this.transitionsBetween(r, n), a = this.transitionsBetween(n, i), l = this.transitionsBetween(i, e), + h = s, c = [i, e, r, n]; + return h > o && (h = o, c[0] = e, c[1] = r, c[2] = n, c[3] = i), h > a && (h = a, c[0] = r, c[1] = n, c[2] = i, c[3] = e), h > l && (c[0] = n, c[1] = i, c[2] = e, c[3] = r), c + } + + detectSolid2(t) { + let e = t[0], r = t[1], n = t[2], i = t[3], s = this.transitionsBetween(e, i), + o = ce.shiftPoint(r, n, 4 * (s + 1)), a = ce.shiftPoint(n, r, 4 * (s + 1)); + return this.transitionsBetween(o, e) < this.transitionsBetween(a, i) ? (t[0] = e, t[1] = r, t[2] = n, t[3] = i) : (t[0] = r, t[1] = n, t[2] = i, t[3] = e), t + } + + correctTopRight(t) { + let e = t[0], r = t[1], n = t[2], i = t[3], s = this.transitionsBetween(e, i), + o = this.transitionsBetween(r, i), a = ce.shiftPoint(e, r, 4 * (o + 1)), + l = ce.shiftPoint(n, r, 4 * (s + 1)); + s = this.transitionsBetween(a, i), o = this.transitionsBetween(l, i); + let h = new rt(i.getX() + (n.getX() - r.getX()) / (s + 1), i.getY() + (n.getY() - r.getY()) / (s + 1)), + c = new rt(i.getX() + (e.getX() - r.getX()) / (o + 1), i.getY() + (e.getY() - r.getY()) / (o + 1)); + return this.isValid(h) ? this.isValid(c) ? this.transitionsBetween(a, h) + this.transitionsBetween(l, h) > this.transitionsBetween(a, c) + this.transitionsBetween(l, c) ? h : c : h : this.isValid(c) ? c : null + } + + shiftToModuleCenter(t) { + let e = t[0], r = t[1], n = t[2], i = t[3], s = this.transitionsBetween(e, i) + 1, + o = this.transitionsBetween(n, i) + 1, a = ce.shiftPoint(e, r, 4 * o), l = ce.shiftPoint(n, r, 4 * s); + s = this.transitionsBetween(a, i) + 1, o = this.transitionsBetween(l, i) + 1, 1 == (1 & s) && (s += 1), 1 == (1 & o) && (o += 1); + let h, c, u = (e.getX() + r.getX() + n.getX() + i.getX()) / 4, + d = (e.getY() + r.getY() + n.getY() + i.getY()) / 4; + return e = ce.moveAway(e, u, d), r = ce.moveAway(r, u, d), n = ce.moveAway(n, u, d), i = ce.moveAway(i, u, d), a = ce.shiftPoint(e, r, 4 * o), a = ce.shiftPoint(a, i, 4 * s), h = ce.shiftPoint(r, e, 4 * o), h = ce.shiftPoint(h, n, 4 * s), l = ce.shiftPoint(n, i, 4 * o), l = ce.shiftPoint(l, r, 4 * s), c = ce.shiftPoint(i, n, 4 * o), c = ce.shiftPoint(c, e, 4 * s), [a, h, l, c] + } + + isValid(t) { + return t.getX() >= 0 && t.getX() < this.image.getWidth() && t.getY() > 0 && t.getY() < this.image.getHeight() + } + + static sampleGrid(t, e, r, n, i, s, o) { + return ht.getInstance().sampleGrid(t, s, o, .5, .5, s - .5, .5, s - .5, o - .5, .5, o - .5, e.getX(), e.getY(), i.getX(), i.getY(), n.getX(), n.getY(), r.getX(), r.getY()) + } + + transitionsBetween(t, e) { + let r = Math.trunc(t.getX()), n = Math.trunc(t.getY()), i = Math.trunc(e.getX()), s = Math.trunc(e.getY()), + o = Math.abs(s - n) > Math.abs(i - r); + if (o) { + let t = r; + r = n, n = t, t = i, i = s, s = t + } + let a = Math.abs(i - r), l = Math.abs(s - n), h = -a / 2, c = n < s ? 1 : -1, u = r < i ? 1 : -1, d = 0, + g = this.image.get(o ? n : r, o ? r : n); + for (let t = r, e = n; t !== i; t += u) { + let r = this.image.get(o ? e : t, o ? t : e); + if (r !== g && (d++, g = r), h += l, h > 0) { + if (e === s) break; + e += c, h -= a + } + } + return d + } +} + +class ue { + constructor() { + this.decoder = new he + } + + decode(t, e = null) { + let r, n; + if (null != e && e.has(C.PURE_BARCODE)) { + const e = ue.extractPureBits(t.getBlackMatrix()); + r = this.decoder.decode(e), n = ue.NO_POINTS + } else { + const e = new ce(t.getBlackMatrix()).detect(); + r = this.decoder.decode(e.getBits()), n = e.getPoints() + } + const i = r.getRawBytes(), s = new F(r.getText(), i, 8 * i.length, n, v.DATA_MATRIX, c.currentTimeMillis()), + o = r.getByteSegments(); + null != o && s.putMetadata(W.BYTE_SEGMENTS, o); + const a = r.getECLevel(); + return null != a && s.putMetadata(W.ERROR_CORRECTION_LEVEL, a), s + } + + reset() { + } + + static extractPureBits(t) { + const e = t.getTopLeftOnBit(), r = t.getBottomRightOnBit(); + if (null == e || null == r) throw new R; + const n = this.moduleSize(e, t); + let i = e[1]; + const s = r[1]; + let o = e[0]; + const a = (r[0] - o + 1) / n, l = (s - i + 1) / n; + if (a <= 0 || l <= 0) throw new R; + const h = n / 2; + i += h, o += h; + const c = new T(a, l); + for (let e = 0; e < l; e++) { + const r = i + e * n; + for (let i = 0; i < a; i++) t.get(o + i * n, r) && c.set(i, e) + } + return c + } + + static moduleSize(t, e) { + const r = e.getWidth(); + let n = t[0]; + const i = t[1]; + for (; n < r && e.get(n, i);) n++; + if (n === r) throw new R; + const s = n - t[0]; + if (0 === s) throw new R; + return s + } +} + +ue.NO_POINTS = []; +!function (t) { + t[t.L = 0] = "L", t[t.M = 1] = "M", t[t.Q = 2] = "Q", t[t.H = 3] = "H" +}(U || (U = {})); + +class de { + constructor(t, e, r) { + this.value = t, this.stringValue = e, this.bits = r, de.FOR_BITS.set(r, this), de.FOR_VALUE.set(t, this) + } + + getValue() { + return this.value + } + + getBits() { + return this.bits + } + + static fromString(t) { + switch (t) { + case"L": + return de.L; + case"M": + return de.M; + case"Q": + return de.Q; + case"H": + return de.H; + default: + throw new s(t + "not available") + } + } + + toString() { + return this.stringValue + } + + equals(t) { + if (!(t instanceof de)) return !1; + const e = t; + return this.value === e.value + } + + static forBits(t) { + if (t < 0 || t >= de.FOR_BITS.size) throw new o; + return de.FOR_BITS.get(t) + } +} + +de.FOR_BITS = new Map, de.FOR_VALUE = new Map, de.L = new de(U.L, "L", 1), de.M = new de(U.M, "M", 0), de.Q = new de(U.Q, "Q", 3), de.H = new de(U.H, "H", 2); + +class ge { + constructor(t) { + this.errorCorrectionLevel = de.forBits(t >> 3 & 3), this.dataMask = 7 & t + } + + static numBitsDiffering(t, e) { + return f.bitCount(t ^ e) + } + + static decodeFormatInformation(t, e) { + const r = ge.doDecodeFormatInformation(t, e); + return null !== r ? r : ge.doDecodeFormatInformation(t ^ ge.FORMAT_INFO_MASK_QR, e ^ ge.FORMAT_INFO_MASK_QR) + } + + static doDecodeFormatInformation(t, e) { + let r = Number.MAX_SAFE_INTEGER, n = 0; + for (const i of ge.FORMAT_INFO_DECODE_LOOKUP) { + const s = i[0]; + if (s === t || s === e) return new ge(i[1]); + let o = ge.numBitsDiffering(t, s); + o < r && (n = i[1], r = o), t !== e && (o = ge.numBitsDiffering(e, s), o < r && (n = i[1], r = o)) + } + return r <= 3 ? new ge(n) : null + } + + getErrorCorrectionLevel() { + return this.errorCorrectionLevel + } + + getDataMask() { + return this.dataMask + } + + hashCode() { + return this.errorCorrectionLevel.getBits() << 3 | this.dataMask + } + + equals(t) { + if (!(t instanceof ge)) return !1; + const e = t; + return this.errorCorrectionLevel === e.errorCorrectionLevel && this.dataMask === e.dataMask + } +} + +ge.FORMAT_INFO_MASK_QR = 21522, ge.FORMAT_INFO_DECODE_LOOKUP = [Int32Array.from([21522, 0]), Int32Array.from([20773, 1]), Int32Array.from([24188, 2]), Int32Array.from([23371, 3]), Int32Array.from([17913, 4]), Int32Array.from([16590, 5]), Int32Array.from([20375, 6]), Int32Array.from([19104, 7]), Int32Array.from([30660, 8]), Int32Array.from([29427, 9]), Int32Array.from([32170, 10]), Int32Array.from([30877, 11]), Int32Array.from([26159, 12]), Int32Array.from([25368, 13]), Int32Array.from([27713, 14]), Int32Array.from([26998, 15]), Int32Array.from([5769, 16]), Int32Array.from([5054, 17]), Int32Array.from([7399, 18]), Int32Array.from([6608, 19]), Int32Array.from([1890, 20]), Int32Array.from([597, 21]), Int32Array.from([3340, 22]), Int32Array.from([2107, 23]), Int32Array.from([13663, 24]), Int32Array.from([12392, 25]), Int32Array.from([16177, 26]), Int32Array.from([14854, 27]), Int32Array.from([9396, 28]), Int32Array.from([8579, 29]), Int32Array.from([11994, 30]), Int32Array.from([11245, 31])]; + +class fe { + constructor(t, ...e) { + this.ecCodewordsPerBlock = t, this.ecBlocks = e + } + + getECCodewordsPerBlock() { + return this.ecCodewordsPerBlock + } + + getNumBlocks() { + let t = 0; + const e = this.ecBlocks; + for (const r of e) t += r.getCount(); + return t + } + + getTotalECCodewords() { + return this.ecCodewordsPerBlock * this.getNumBlocks() + } + + getECBlocks() { + return this.ecBlocks + } +} + +class we { + constructor(t, e) { + this.count = t, this.dataCodewords = e + } + + getCount() { + return this.count + } + + getDataCodewords() { + return this.dataCodewords + } +} + +class Ae { + constructor(t, e, ...r) { + this.versionNumber = t, this.alignmentPatternCenters = e, this.ecBlocks = r; + let n = 0; + const i = r[0].getECCodewordsPerBlock(), s = r[0].getECBlocks(); + for (const t of s) n += t.getCount() * (t.getDataCodewords() + i); + this.totalCodewords = n + } + + getVersionNumber() { + return this.versionNumber + } + + getAlignmentPatternCenters() { + return this.alignmentPatternCenters + } + + getTotalCodewords() { + return this.totalCodewords + } + + getDimensionForVersion() { + return 17 + 4 * this.versionNumber + } + + getECBlocksForLevel(t) { + return this.ecBlocks[t.getValue()] + } + + static getProvisionalVersionForDimension(t) { + if (t % 4 != 1) throw new E; + try { + return this.getVersionForNumber((t - 17) / 4) + } catch (t) { + throw new E + } + } + + static getVersionForNumber(t) { + if (t < 1 || t > 40) throw new o; + return Ae.VERSIONS[t - 1] + } + + static decodeVersionInformation(t) { + let e = Number.MAX_SAFE_INTEGER, r = 0; + for (let n = 0; n < Ae.VERSION_DECODE_INFO.length; n++) { + const i = Ae.VERSION_DECODE_INFO[n]; + if (i === t) return Ae.getVersionForNumber(n + 7); + const s = ge.numBitsDiffering(t, i); + s < e && (r = n + 7, e = s) + } + return e <= 3 ? Ae.getVersionForNumber(r) : null + } + + buildFunctionPattern() { + const t = this.getDimensionForVersion(), e = new T(t); + e.setRegion(0, 0, 9, 9), e.setRegion(t - 8, 0, 8, 9), e.setRegion(0, t - 8, 9, 8); + const r = this.alignmentPatternCenters.length; + for (let t = 0; t < r; t++) { + const n = this.alignmentPatternCenters[t] - 2; + for (let i = 0; i < r; i++) 0 === t && (0 === i || i === r - 1) || t === r - 1 && 0 === i || e.setRegion(this.alignmentPatternCenters[i] - 2, n, 5, 5) + } + return e.setRegion(6, 9, 1, t - 17), e.setRegion(9, 6, t - 17, 1), this.versionNumber > 6 && (e.setRegion(t - 11, 0, 3, 6), e.setRegion(0, t - 11, 6, 3)), e + } + + toString() { + return "" + this.versionNumber + } +} + +Ae.VERSION_DECODE_INFO = Int32Array.from([31892, 34236, 39577, 42195, 48118, 51042, 55367, 58893, 63784, 68472, 70749, 76311, 79154, 84390, 87683, 92361, 96236, 102084, 102881, 110507, 110734, 117786, 119615, 126325, 127568, 133589, 136944, 141498, 145311, 150283, 152622, 158308, 161089, 167017]), Ae.VERSIONS = [new Ae(1, new Int32Array(0), new fe(7, new we(1, 19)), new fe(10, new we(1, 16)), new fe(13, new we(1, 13)), new fe(17, new we(1, 9))), new Ae(2, Int32Array.from([6, 18]), new fe(10, new we(1, 34)), new fe(16, new we(1, 28)), new fe(22, new we(1, 22)), new fe(28, new we(1, 16))), new Ae(3, Int32Array.from([6, 22]), new fe(15, new we(1, 55)), new fe(26, new we(1, 44)), new fe(18, new we(2, 17)), new fe(22, new we(2, 13))), new Ae(4, Int32Array.from([6, 26]), new fe(20, new we(1, 80)), new fe(18, new we(2, 32)), new fe(26, new we(2, 24)), new fe(16, new we(4, 9))), new Ae(5, Int32Array.from([6, 30]), new fe(26, new we(1, 108)), new fe(24, new we(2, 43)), new fe(18, new we(2, 15), new we(2, 16)), new fe(22, new we(2, 11), new we(2, 12))), new Ae(6, Int32Array.from([6, 34]), new fe(18, new we(2, 68)), new fe(16, new we(4, 27)), new fe(24, new we(4, 19)), new fe(28, new we(4, 15))), new Ae(7, Int32Array.from([6, 22, 38]), new fe(20, new we(2, 78)), new fe(18, new we(4, 31)), new fe(18, new we(2, 14), new we(4, 15)), new fe(26, new we(4, 13), new we(1, 14))), new Ae(8, Int32Array.from([6, 24, 42]), new fe(24, new we(2, 97)), new fe(22, new we(2, 38), new we(2, 39)), new fe(22, new we(4, 18), new we(2, 19)), new fe(26, new we(4, 14), new we(2, 15))), new Ae(9, Int32Array.from([6, 26, 46]), new fe(30, new we(2, 116)), new fe(22, new we(3, 36), new we(2, 37)), new fe(20, new we(4, 16), new we(4, 17)), new fe(24, new we(4, 12), new we(4, 13))), new Ae(10, Int32Array.from([6, 28, 50]), new fe(18, new we(2, 68), new we(2, 69)), new fe(26, new we(4, 43), new we(1, 44)), new fe(24, new we(6, 19), new we(2, 20)), new fe(28, new we(6, 15), new we(2, 16))), new Ae(11, Int32Array.from([6, 30, 54]), new fe(20, new we(4, 81)), new fe(30, new we(1, 50), new we(4, 51)), new fe(28, new we(4, 22), new we(4, 23)), new fe(24, new we(3, 12), new we(8, 13))), new Ae(12, Int32Array.from([6, 32, 58]), new fe(24, new we(2, 92), new we(2, 93)), new fe(22, new we(6, 36), new we(2, 37)), new fe(26, new we(4, 20), new we(6, 21)), new fe(28, new we(7, 14), new we(4, 15))), new Ae(13, Int32Array.from([6, 34, 62]), new fe(26, new we(4, 107)), new fe(22, new we(8, 37), new we(1, 38)), new fe(24, new we(8, 20), new we(4, 21)), new fe(22, new we(12, 11), new we(4, 12))), new Ae(14, Int32Array.from([6, 26, 46, 66]), new fe(30, new we(3, 115), new we(1, 116)), new fe(24, new we(4, 40), new we(5, 41)), new fe(20, new we(11, 16), new we(5, 17)), new fe(24, new we(11, 12), new we(5, 13))), new Ae(15, Int32Array.from([6, 26, 48, 70]), new fe(22, new we(5, 87), new we(1, 88)), new fe(24, new we(5, 41), new we(5, 42)), new fe(30, new we(5, 24), new we(7, 25)), new fe(24, new we(11, 12), new we(7, 13))), new Ae(16, Int32Array.from([6, 26, 50, 74]), new fe(24, new we(5, 98), new we(1, 99)), new fe(28, new we(7, 45), new we(3, 46)), new fe(24, new we(15, 19), new we(2, 20)), new fe(30, new we(3, 15), new we(13, 16))), new Ae(17, Int32Array.from([6, 30, 54, 78]), new fe(28, new we(1, 107), new we(5, 108)), new fe(28, new we(10, 46), new we(1, 47)), new fe(28, new we(1, 22), new we(15, 23)), new fe(28, new we(2, 14), new we(17, 15))), new Ae(18, Int32Array.from([6, 30, 56, 82]), new fe(30, new we(5, 120), new we(1, 121)), new fe(26, new we(9, 43), new we(4, 44)), new fe(28, new we(17, 22), new we(1, 23)), new fe(28, new we(2, 14), new we(19, 15))), new Ae(19, Int32Array.from([6, 30, 58, 86]), new fe(28, new we(3, 113), new we(4, 114)), new fe(26, new we(3, 44), new we(11, 45)), new fe(26, new we(17, 21), new we(4, 22)), new fe(26, new we(9, 13), new we(16, 14))), new Ae(20, Int32Array.from([6, 34, 62, 90]), new fe(28, new we(3, 107), new we(5, 108)), new fe(26, new we(3, 41), new we(13, 42)), new fe(30, new we(15, 24), new we(5, 25)), new fe(28, new we(15, 15), new we(10, 16))), new Ae(21, Int32Array.from([6, 28, 50, 72, 94]), new fe(28, new we(4, 116), new we(4, 117)), new fe(26, new we(17, 42)), new fe(28, new we(17, 22), new we(6, 23)), new fe(30, new we(19, 16), new we(6, 17))), new Ae(22, Int32Array.from([6, 26, 50, 74, 98]), new fe(28, new we(2, 111), new we(7, 112)), new fe(28, new we(17, 46)), new fe(30, new we(7, 24), new we(16, 25)), new fe(24, new we(34, 13))), new Ae(23, Int32Array.from([6, 30, 54, 78, 102]), new fe(30, new we(4, 121), new we(5, 122)), new fe(28, new we(4, 47), new we(14, 48)), new fe(30, new we(11, 24), new we(14, 25)), new fe(30, new we(16, 15), new we(14, 16))), new Ae(24, Int32Array.from([6, 28, 54, 80, 106]), new fe(30, new we(6, 117), new we(4, 118)), new fe(28, new we(6, 45), new we(14, 46)), new fe(30, new we(11, 24), new we(16, 25)), new fe(30, new we(30, 16), new we(2, 17))), new Ae(25, Int32Array.from([6, 32, 58, 84, 110]), new fe(26, new we(8, 106), new we(4, 107)), new fe(28, new we(8, 47), new we(13, 48)), new fe(30, new we(7, 24), new we(22, 25)), new fe(30, new we(22, 15), new we(13, 16))), new Ae(26, Int32Array.from([6, 30, 58, 86, 114]), new fe(28, new we(10, 114), new we(2, 115)), new fe(28, new we(19, 46), new we(4, 47)), new fe(28, new we(28, 22), new we(6, 23)), new fe(30, new we(33, 16), new we(4, 17))), new Ae(27, Int32Array.from([6, 34, 62, 90, 118]), new fe(30, new we(8, 122), new we(4, 123)), new fe(28, new we(22, 45), new we(3, 46)), new fe(30, new we(8, 23), new we(26, 24)), new fe(30, new we(12, 15), new we(28, 16))), new Ae(28, Int32Array.from([6, 26, 50, 74, 98, 122]), new fe(30, new we(3, 117), new we(10, 118)), new fe(28, new we(3, 45), new we(23, 46)), new fe(30, new we(4, 24), new we(31, 25)), new fe(30, new we(11, 15), new we(31, 16))), new Ae(29, Int32Array.from([6, 30, 54, 78, 102, 126]), new fe(30, new we(7, 116), new we(7, 117)), new fe(28, new we(21, 45), new we(7, 46)), new fe(30, new we(1, 23), new we(37, 24)), new fe(30, new we(19, 15), new we(26, 16))), new Ae(30, Int32Array.from([6, 26, 52, 78, 104, 130]), new fe(30, new we(5, 115), new we(10, 116)), new fe(28, new we(19, 47), new we(10, 48)), new fe(30, new we(15, 24), new we(25, 25)), new fe(30, new we(23, 15), new we(25, 16))), new Ae(31, Int32Array.from([6, 30, 56, 82, 108, 134]), new fe(30, new we(13, 115), new we(3, 116)), new fe(28, new we(2, 46), new we(29, 47)), new fe(30, new we(42, 24), new we(1, 25)), new fe(30, new we(23, 15), new we(28, 16))), new Ae(32, Int32Array.from([6, 34, 60, 86, 112, 138]), new fe(30, new we(17, 115)), new fe(28, new we(10, 46), new we(23, 47)), new fe(30, new we(10, 24), new we(35, 25)), new fe(30, new we(19, 15), new we(35, 16))), new Ae(33, Int32Array.from([6, 30, 58, 86, 114, 142]), new fe(30, new we(17, 115), new we(1, 116)), new fe(28, new we(14, 46), new we(21, 47)), new fe(30, new we(29, 24), new we(19, 25)), new fe(30, new we(11, 15), new we(46, 16))), new Ae(34, Int32Array.from([6, 34, 62, 90, 118, 146]), new fe(30, new we(13, 115), new we(6, 116)), new fe(28, new we(14, 46), new we(23, 47)), new fe(30, new we(44, 24), new we(7, 25)), new fe(30, new we(59, 16), new we(1, 17))), new Ae(35, Int32Array.from([6, 30, 54, 78, 102, 126, 150]), new fe(30, new we(12, 121), new we(7, 122)), new fe(28, new we(12, 47), new we(26, 48)), new fe(30, new we(39, 24), new we(14, 25)), new fe(30, new we(22, 15), new we(41, 16))), new Ae(36, Int32Array.from([6, 24, 50, 76, 102, 128, 154]), new fe(30, new we(6, 121), new we(14, 122)), new fe(28, new we(6, 47), new we(34, 48)), new fe(30, new we(46, 24), new we(10, 25)), new fe(30, new we(2, 15), new we(64, 16))), new Ae(37, Int32Array.from([6, 28, 54, 80, 106, 132, 158]), new fe(30, new we(17, 122), new we(4, 123)), new fe(28, new we(29, 46), new we(14, 47)), new fe(30, new we(49, 24), new we(10, 25)), new fe(30, new we(24, 15), new we(46, 16))), new Ae(38, Int32Array.from([6, 32, 58, 84, 110, 136, 162]), new fe(30, new we(4, 122), new we(18, 123)), new fe(28, new we(13, 46), new we(32, 47)), new fe(30, new we(48, 24), new we(14, 25)), new fe(30, new we(42, 15), new we(32, 16))), new Ae(39, Int32Array.from([6, 26, 54, 82, 110, 138, 166]), new fe(30, new we(20, 117), new we(4, 118)), new fe(28, new we(40, 47), new we(7, 48)), new fe(30, new we(43, 24), new we(22, 25)), new fe(30, new we(10, 15), new we(67, 16))), new Ae(40, Int32Array.from([6, 30, 58, 86, 114, 142, 170]), new fe(30, new we(19, 118), new we(6, 119)), new fe(28, new we(18, 47), new we(31, 48)), new fe(30, new we(34, 24), new we(34, 25)), new fe(30, new we(20, 15), new we(61, 16)))], function (t) { + t[t.DATA_MASK_000 = 0] = "DATA_MASK_000", t[t.DATA_MASK_001 = 1] = "DATA_MASK_001", t[t.DATA_MASK_010 = 2] = "DATA_MASK_010", t[t.DATA_MASK_011 = 3] = "DATA_MASK_011", t[t.DATA_MASK_100 = 4] = "DATA_MASK_100", t[t.DATA_MASK_101 = 5] = "DATA_MASK_101", t[t.DATA_MASK_110 = 6] = "DATA_MASK_110", t[t.DATA_MASK_111 = 7] = "DATA_MASK_111" +}(H || (H = {})); + +class Ce { + constructor(t, e) { + this.value = t, this.isMasked = e + } + + unmaskBitMatrix(t, e) { + for (let r = 0; r < e; r++) for (let n = 0; n < e; n++) this.isMasked(r, n) && t.flip(n, r) + } +} + +Ce.values = new Map([[H.DATA_MASK_000, new Ce(H.DATA_MASK_000, ((t, e) => 0 == (t + e & 1)))], [H.DATA_MASK_001, new Ce(H.DATA_MASK_001, ((t, e) => 0 == (1 & t)))], [H.DATA_MASK_010, new Ce(H.DATA_MASK_010, ((t, e) => e % 3 == 0))], [H.DATA_MASK_011, new Ce(H.DATA_MASK_011, ((t, e) => (t + e) % 3 == 0))], [H.DATA_MASK_100, new Ce(H.DATA_MASK_100, ((t, e) => 0 == (Math.floor(t / 2) + Math.floor(e / 3) & 1)))], [H.DATA_MASK_101, new Ce(H.DATA_MASK_101, ((t, e) => t * e % 6 == 0))], [H.DATA_MASK_110, new Ce(H.DATA_MASK_110, ((t, e) => t * e % 6 < 3))], [H.DATA_MASK_111, new Ce(H.DATA_MASK_111, ((t, e) => 0 == (t + e + t * e % 3 & 1)))]]); + +class Ee { + constructor(t) { + const e = t.getHeight(); + if (e < 21 || 1 != (3 & e)) throw new E; + this.bitMatrix = t + } + + readFormatInformation() { + if (null !== this.parsedFormatInfo && void 0 !== this.parsedFormatInfo) return this.parsedFormatInfo; + let t = 0; + for (let e = 0; e < 6; e++) t = this.copyBit(e, 8, t); + t = this.copyBit(7, 8, t), t = this.copyBit(8, 8, t), t = this.copyBit(8, 7, t); + for (let e = 5; e >= 0; e--) t = this.copyBit(8, e, t); + const e = this.bitMatrix.getHeight(); + let r = 0; + const n = e - 7; + for (let t = e - 1; t >= n; t--) r = this.copyBit(8, t, r); + for (let t = e - 8; t < e; t++) r = this.copyBit(t, 8, r); + if (this.parsedFormatInfo = ge.decodeFormatInformation(t, r), null !== this.parsedFormatInfo) return this.parsedFormatInfo; + throw new E + } + + readVersion() { + if (null !== this.parsedVersion && void 0 !== this.parsedVersion) return this.parsedVersion; + const t = this.bitMatrix.getHeight(), e = Math.floor((t - 17) / 4); + if (e <= 6) return Ae.getVersionForNumber(e); + let r = 0; + const n = t - 11; + for (let e = 5; e >= 0; e--) for (let i = t - 9; i >= n; i--) r = this.copyBit(i, e, r); + let i = Ae.decodeVersionInformation(r); + if (null !== i && i.getDimensionForVersion() === t) return this.parsedVersion = i, i; + r = 0; + for (let e = 5; e >= 0; e--) for (let i = t - 9; i >= n; i--) r = this.copyBit(e, i, r); + if (i = Ae.decodeVersionInformation(r), null !== i && i.getDimensionForVersion() === t) return this.parsedVersion = i, i; + throw new E + } + + copyBit(t, e, r) { + return (this.isMirror ? this.bitMatrix.get(e, t) : this.bitMatrix.get(t, e)) ? r << 1 | 1 : r << 1 + } + + readCodewords() { + const t = this.readFormatInformation(), e = this.readVersion(), r = Ce.values.get(t.getDataMask()), + n = this.bitMatrix.getHeight(); + r.unmaskBitMatrix(this.bitMatrix, n); + const i = e.buildFunctionPattern(); + let s = !0; + const o = new Uint8Array(e.getTotalCodewords()); + let a = 0, l = 0, h = 0; + for (let t = n - 1; t > 0; t -= 2) { + 6 === t && t--; + for (let e = 0; e < n; e++) { + const r = s ? n - 1 - e : e; + for (let e = 0; e < 2; e++) i.get(t - e, r) || (h++, l <<= 1, this.bitMatrix.get(t - e, r) && (l |= 1), 8 === h && (o[a++] = l, h = 0, l = 0)) + } + s = !s + } + if (a !== e.getTotalCodewords()) throw new E; + return o + } + + remask() { + if (null === this.parsedFormatInfo) return; + const t = Ce.values[this.parsedFormatInfo.getDataMask()], e = this.bitMatrix.getHeight(); + t.unmaskBitMatrix(this.bitMatrix, e) + } + + setMirror(t) { + this.parsedVersion = null, this.parsedFormatInfo = null, this.isMirror = t + } + + mirror() { + const t = this.bitMatrix; + for (let e = 0, r = t.getWidth(); e < r; e++) for (let r = e + 1, n = t.getHeight(); r < n; r++) t.get(e, r) !== t.get(r, e) && (t.flip(r, e), t.flip(e, r)) + } +} + +class me { + constructor(t, e) { + this.numDataCodewords = t, this.codewords = e + } + + static getDataBlocks(t, e, r) { + if (t.length !== e.getTotalCodewords()) throw new o; + const n = e.getECBlocksForLevel(r); + let i = 0; + const s = n.getECBlocks(); + for (const t of s) i += t.getCount(); + const a = new Array(i); + let l = 0; + for (const t of s) for (let e = 0; e < t.getCount(); e++) { + const e = t.getDataCodewords(), r = n.getECCodewordsPerBlock() + e; + a[l++] = new me(e, new Uint8Array(r)) + } + const h = a[0].codewords.length; + let c = a.length - 1; + for (; c >= 0;) { + if (a[c].codewords.length === h) break; + c-- + } + c++; + const u = h - n.getECCodewordsPerBlock(); + let d = 0; + for (let e = 0; e < u; e++) for (let r = 0; r < l; r++) a[r].codewords[e] = t[d++]; + for (let e = c; e < l; e++) a[e].codewords[u] = t[d++]; + const g = a[0].codewords.length; + for (let e = u; e < g; e++) for (let r = 0; r < l; r++) { + const n = r < c ? e : e + 1; + a[r].codewords[n] = t[d++] + } + return a + } + + getNumDataCodewords() { + return this.numDataCodewords + } + + getCodewords() { + return this.codewords + } +} + +!function (t) { + t[t.TERMINATOR = 0] = "TERMINATOR", t[t.NUMERIC = 1] = "NUMERIC", t[t.ALPHANUMERIC = 2] = "ALPHANUMERIC", t[t.STRUCTURED_APPEND = 3] = "STRUCTURED_APPEND", t[t.BYTE = 4] = "BYTE", t[t.ECI = 5] = "ECI", t[t.KANJI = 6] = "KANJI", t[t.FNC1_FIRST_POSITION = 7] = "FNC1_FIRST_POSITION", t[t.FNC1_SECOND_POSITION = 8] = "FNC1_SECOND_POSITION", t[t.HANZI = 9] = "HANZI" +}(G || (G = {})); + +class _e { + constructor(t, e, r, n) { + this.value = t, this.stringValue = e, this.characterCountBitsForVersions = r, this.bits = n, _e.FOR_BITS.set(n, this), _e.FOR_VALUE.set(t, this) + } + + static forBits(t) { + const e = _e.FOR_BITS.get(t); + if (void 0 === e) throw new o; + return e + } + + getCharacterCountBits(t) { + const e = t.getVersionNumber(); + let r; + return r = e <= 9 ? 0 : e <= 26 ? 1 : 2, this.characterCountBitsForVersions[r] + } + + getValue() { + return this.value + } + + getBits() { + return this.bits + } + + equals(t) { + if (!(t instanceof _e)) return !1; + const e = t; + return this.value === e.value + } + + toString() { + return this.stringValue + } +} + +_e.FOR_BITS = new Map, _e.FOR_VALUE = new Map, _e.TERMINATOR = new _e(G.TERMINATOR, "TERMINATOR", Int32Array.from([0, 0, 0]), 0), _e.NUMERIC = new _e(G.NUMERIC, "NUMERIC", Int32Array.from([10, 12, 14]), 1), _e.ALPHANUMERIC = new _e(G.ALPHANUMERIC, "ALPHANUMERIC", Int32Array.from([9, 11, 13]), 2), _e.STRUCTURED_APPEND = new _e(G.STRUCTURED_APPEND, "STRUCTURED_APPEND", Int32Array.from([0, 0, 0]), 3), _e.BYTE = new _e(G.BYTE, "BYTE", Int32Array.from([8, 16, 16]), 4), _e.ECI = new _e(G.ECI, "ECI", Int32Array.from([0, 0, 0]), 7), _e.KANJI = new _e(G.KANJI, "KANJI", Int32Array.from([8, 10, 12]), 8), _e.FNC1_FIRST_POSITION = new _e(G.FNC1_FIRST_POSITION, "FNC1_FIRST_POSITION", Int32Array.from([0, 0, 0]), 5), _e.FNC1_SECOND_POSITION = new _e(G.FNC1_SECOND_POSITION, "FNC1_SECOND_POSITION", Int32Array.from([0, 0, 0]), 9), _e.HANZI = new _e(G.HANZI, "HANZI", Int32Array.from([8, 10, 12]), 13); + +class Ie { + static decode(t, e, r, n) { + const i = new ae(t); + let s = new p; + const o = new Array; + let a = -1, l = -1; + try { + let t, r = null, h = !1; + do { + if (i.available() < 4) t = _e.TERMINATOR; else { + const e = i.readBits(4); + t = _e.forBits(e) + } + switch (t) { + case _e.TERMINATOR: + break; + case _e.FNC1_FIRST_POSITION: + case _e.FNC1_SECOND_POSITION: + h = !0; + break; + case _e.STRUCTURED_APPEND: + if (i.available() < 16) throw new E; + a = i.readBits(8), l = i.readBits(8); + break; + case _e.ECI: + const c = Ie.parseECIValue(i); + if (r = m.getCharacterSetECIByValue(c), null === r) throw new E; + break; + case _e.HANZI: + const u = i.readBits(4), d = i.readBits(t.getCharacterCountBits(e)); + u === Ie.GB2312_SUBSET && Ie.decodeHanziSegment(i, s, d); + break; + default: + const g = i.readBits(t.getCharacterCountBits(e)); + switch (t) { + case _e.NUMERIC: + Ie.decodeNumericSegment(i, s, g); + break; + case _e.ALPHANUMERIC: + Ie.decodeAlphanumericSegment(i, s, g, h); + break; + case _e.BYTE: + Ie.decodeByteSegment(i, s, g, r, o, n); + break; + case _e.KANJI: + Ie.decodeKanjiSegment(i, s, g); + break; + default: + throw new E + } + } + } while (t !== _e.TERMINATOR) + } catch (t) { + throw new E + } + return new z(t, s.toString(), 0 === o.length ? null : o, null === r ? null : r.toString(), a, l) + } + + static decodeHanziSegment(t, e, r) { + if (13 * r > t.available()) throw new E; + const n = new Uint8Array(2 * r); + let i = 0; + for (; r > 0;) { + const e = t.readBits(13); + let s = e / 96 << 8 & 4294967295 | e % 96; + s += s < 959 ? 41377 : 42657, n[i] = s >> 8 & 255, n[i + 1] = 255 & s, i += 2, r-- + } + try { + e.append(I.decode(n, S.GB2312)) + } catch (t) { + throw new E(t) + } + } + + static decodeKanjiSegment(t, e, r) { + if (13 * r > t.available()) throw new E; + const n = new Uint8Array(2 * r); + let i = 0; + for (; r > 0;) { + const e = t.readBits(13); + let s = e / 192 << 8 & 4294967295 | e % 192; + s += s < 7936 ? 33088 : 49472, n[i] = s >> 8, n[i + 1] = s, i += 2, r-- + } + try { + e.append(I.decode(n, S.SHIFT_JIS)) + } catch (t) { + throw new E(t) + } + } + + static decodeByteSegment(t, e, r, n, i, s) { + if (8 * r > t.available()) throw new E; + const o = new Uint8Array(r); + for (let e = 0; e < r; e++) o[e] = t.readBits(8); + let a; + a = null === n ? S.guessEncoding(o, s) : n.getName(); + try { + e.append(I.decode(o, a)) + } catch (t) { + throw new E(t) + } + i.push(o) + } + + static toAlphaNumericChar(t) { + if (t >= Ie.ALPHANUMERIC_CHARS.length) throw new E; + return Ie.ALPHANUMERIC_CHARS[t] + } + + static decodeAlphanumericSegment(t, e, r, n) { + const i = e.length(); + for (; r > 1;) { + if (t.available() < 11) throw new E; + const n = t.readBits(11); + e.append(Ie.toAlphaNumericChar(Math.floor(n / 45))), e.append(Ie.toAlphaNumericChar(n % 45)), r -= 2 + } + if (1 === r) { + if (t.available() < 6) throw new E; + e.append(Ie.toAlphaNumericChar(t.readBits(6))) + } + if (n) for (let t = i; t < e.length(); t++) "%" === e.charAt(t) && (t < e.length() - 1 && "%" === e.charAt(t + 1) ? e.deleteCharAt(t + 1) : e.setCharAt(t, String.fromCharCode(29))) + } + + static decodeNumericSegment(t, e, r) { + for (; r >= 3;) { + if (t.available() < 10) throw new E; + const n = t.readBits(10); + if (n >= 1e3) throw new E; + e.append(Ie.toAlphaNumericChar(Math.floor(n / 100))), e.append(Ie.toAlphaNumericChar(Math.floor(n / 10) % 10)), e.append(Ie.toAlphaNumericChar(n % 10)), r -= 3 + } + if (2 === r) { + if (t.available() < 7) throw new E; + const r = t.readBits(7); + if (r >= 100) throw new E; + e.append(Ie.toAlphaNumericChar(Math.floor(r / 10))), e.append(Ie.toAlphaNumericChar(r % 10)) + } else if (1 === r) { + if (t.available() < 4) throw new E; + const r = t.readBits(4); + if (r >= 10) throw new E; + e.append(Ie.toAlphaNumericChar(r)) + } + } + + static parseECIValue(t) { + const e = t.readBits(8); + if (0 == (128 & e)) return 127 & e; + if (128 == (192 & e)) { + return (63 & e) << 8 & 4294967295 | t.readBits(8) + } + if (192 == (224 & e)) { + return (31 & e) << 16 & 4294967295 | t.readBits(16) + } + throw new E + } +} + +Ie.ALPHANUMERIC_CHARS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:", Ie.GB2312_SUBSET = 1; + +class Se { + constructor(t) { + this.mirrored = t + } + + isMirrored() { + return this.mirrored + } + + applyMirroredCorrection(t) { + if (!this.mirrored || null === t || t.length < 3) return; + const e = t[0]; + t[0] = t[2], t[2] = e + } +} + +class pe { + constructor() { + this.rsDecoder = new J(q.QR_CODE_FIELD_256) + } + + decodeBooleanArray(t, e) { + return this.decodeBitMatrix(T.parseFromBooleanArray(t), e) + } + + decodeBitMatrix(t, e) { + const r = new Ee(t); + let n = null; + try { + return this.decodeBitMatrixParser(r, e) + } catch (t) { + n = t + } + try { + r.remask(), r.setMirror(!0), r.readVersion(), r.readFormatInformation(), r.mirror(); + const t = this.decodeBitMatrixParser(r, e); + return t.setOther(new Se(!0)), t + } catch (t) { + if (null !== n) throw n; + throw t + } + } + + decodeBitMatrixParser(t, e) { + const r = t.readVersion(), n = t.readFormatInformation().getErrorCorrectionLevel(), i = t.readCodewords(), + s = me.getDataBlocks(i, r, n); + let o = 0; + for (const t of s) o += t.getNumDataCodewords(); + const a = new Uint8Array(o); + let l = 0; + for (const t of s) { + const e = t.getCodewords(), r = t.getNumDataCodewords(); + this.correctErrors(e, r); + for (let t = 0; t < r; t++) a[l++] = e[t] + } + return Ie.decode(a, r, n, e) + } + + correctErrors(t, e) { + const r = new Int32Array(t); + try { + this.rsDecoder.decode(r, t.length - e) + } catch (t) { + throw new l + } + for (let n = 0; n < e; n++) t[n] = r[n] + } +} + +class Te extends rt { + constructor(t, e, r) { + super(t, e), this.estimatedModuleSize = r + } + + aboutEquals(t, e, r) { + if (Math.abs(e - this.getY()) <= t && Math.abs(r - this.getX()) <= t) { + const e = Math.abs(t - this.estimatedModuleSize); + return e <= 1 || e <= this.estimatedModuleSize + } + return !1 + } + + combineEstimate(t, e, r) { + const n = (this.getX() + e) / 2, i = (this.getY() + t) / 2, s = (this.estimatedModuleSize + r) / 2; + return new Te(n, i, s) + } +} + +class Re { + constructor(t, e, r, n, i, s, o) { + this.image = t, this.startX = e, this.startY = r, this.width = n, this.height = i, this.moduleSize = s, this.resultPointCallback = o, this.possibleCenters = [], this.crossCheckStateCount = new Int32Array(3) + } + + find() { + const t = this.startX, e = this.height, r = t + this.width, n = this.startY + e / 2, i = new Int32Array(3), + s = this.image; + for (let o = 0; o < e; o++) { + const e = n + (0 == (1 & o) ? Math.floor((o + 1) / 2) : -Math.floor((o + 1) / 2)); + i[0] = 0, i[1] = 0, i[2] = 0; + let a = t; + for (; a < r && !s.get(a, e);) a++; + let l = 0; + for (; a < r;) { + if (s.get(a, e)) if (1 === l) i[1]++; else if (2 === l) { + if (this.foundPatternCross(i)) { + const t = this.handlePossibleCenter(i, e, a); + if (null !== t) return t + } + i[0] = i[2], i[1] = 1, i[2] = 0, l = 1 + } else i[++l]++; else 1 === l && l++, i[l]++; + a++ + } + if (this.foundPatternCross(i)) { + const t = this.handlePossibleCenter(i, e, r); + if (null !== t) return t + } + } + if (0 !== this.possibleCenters.length) return this.possibleCenters[0]; + throw new R + } + + static centerFromEnd(t, e) { + return e - t[2] - t[1] / 2 + } + + foundPatternCross(t) { + const e = this.moduleSize, r = e / 2; + for (let n = 0; n < 3; n++) if (Math.abs(e - t[n]) >= r) return !1; + return !0 + } + + crossCheckVertical(t, e, r, n) { + const i = this.image, s = i.getHeight(), o = this.crossCheckStateCount; + o[0] = 0, o[1] = 0, o[2] = 0; + let a = t; + for (; a >= 0 && i.get(e, a) && o[1] <= r;) o[1]++, a--; + if (a < 0 || o[1] > r) return NaN; + for (; a >= 0 && !i.get(e, a) && o[0] <= r;) o[0]++, a--; + if (o[0] > r) return NaN; + for (a = t + 1; a < s && i.get(e, a) && o[1] <= r;) o[1]++, a++; + if (a === s || o[1] > r) return NaN; + for (; a < s && !i.get(e, a) && o[2] <= r;) o[2]++, a++; + if (o[2] > r) return NaN; + const l = o[0] + o[1] + o[2]; + return 5 * Math.abs(l - n) >= 2 * n ? NaN : this.foundPatternCross(o) ? Re.centerFromEnd(o, a) : NaN + } + + handlePossibleCenter(t, e, r) { + const n = t[0] + t[1] + t[2], i = Re.centerFromEnd(t, r), s = this.crossCheckVertical(e, i, 2 * t[1], n); + if (!isNaN(s)) { + const e = (t[0] + t[1] + t[2]) / 3; + for (const t of this.possibleCenters) if (t.aboutEquals(e, s, i)) return t.combineEstimate(s, i, e); + const r = new Te(i, s, e); + this.possibleCenters.push(r), null !== this.resultPointCallback && void 0 !== this.resultPointCallback && this.resultPointCallback.foundPossibleResultPoint(r) + } + return null + } +} + +class Ne extends rt { + constructor(t, e, r, n) { + super(t, e), this.estimatedModuleSize = r, this.count = n, void 0 === n && (this.count = 1) + } + + getEstimatedModuleSize() { + return this.estimatedModuleSize + } + + getCount() { + return this.count + } + + aboutEquals(t, e, r) { + if (Math.abs(e - this.getY()) <= t && Math.abs(r - this.getX()) <= t) { + const e = Math.abs(t - this.estimatedModuleSize); + return e <= 1 || e <= this.estimatedModuleSize + } + return !1 + } + + combineEstimate(t, e, r) { + const n = this.count + 1, i = (this.count * this.getX() + e) / n, s = (this.count * this.getY() + t) / n, + o = (this.count * this.estimatedModuleSize + r) / n; + return new Ne(i, s, o, n) + } +} + +class De { + constructor(t) { + this.bottomLeft = t[0], this.topLeft = t[1], this.topRight = t[2] + } + + getBottomLeft() { + return this.bottomLeft + } + + getTopLeft() { + return this.topLeft + } + + getTopRight() { + return this.topRight + } +} + +class ye { + constructor(t, e) { + this.image = t, this.resultPointCallback = e, this.possibleCenters = [], this.crossCheckStateCount = new Int32Array(5), this.resultPointCallback = e + } + + getImage() { + return this.image + } + + getPossibleCenters() { + return this.possibleCenters + } + + find(t) { + const e = null != t && void 0 !== t.get(C.TRY_HARDER), r = null != t && void 0 !== t.get(C.PURE_BARCODE), + n = this.image, i = n.getHeight(), s = n.getWidth(); + let o = Math.floor(3 * i / (4 * ye.MAX_MODULES)); + (o < ye.MIN_SKIP || e) && (o = ye.MIN_SKIP); + let a = !1; + const l = new Int32Array(5); + for (let t = o - 1; t < i && !a; t += o) { + l[0] = 0, l[1] = 0, l[2] = 0, l[3] = 0, l[4] = 0; + let e = 0; + for (let i = 0; i < s; i++) if (n.get(i, t)) 1 == (1 & e) && e++, l[e]++; else if (0 == (1 & e)) if (4 === e) if (ye.foundPatternCross(l)) { + if (!0 !== this.handlePossibleCenter(l, t, i, r)) { + l[0] = l[2], l[1] = l[3], l[2] = l[4], l[3] = 1, l[4] = 0, e = 3; + continue + } + if (o = 2, !0 === this.hasSkipped) a = this.haveMultiplyConfirmedCenters(); else { + const e = this.findRowSkip(); + e > l[2] && (t += e - l[2] - o, i = s - 1) + } + e = 0, l[0] = 0, l[1] = 0, l[2] = 0, l[3] = 0, l[4] = 0 + } else l[0] = l[2], l[1] = l[3], l[2] = l[4], l[3] = 1, l[4] = 0, e = 3; else l[++e]++; else l[e]++; + if (ye.foundPatternCross(l)) { + !0 === this.handlePossibleCenter(l, t, s, r) && (o = l[0], this.hasSkipped && (a = this.haveMultiplyConfirmedCenters())) + } + } + const h = this.selectBestPatterns(); + return rt.orderBestPatterns(h), new De(h) + } + + static centerFromEnd(t, e) { + return e - t[4] - t[3] - t[2] / 2 + } + + static foundPatternCross(t) { + let e = 0; + for (let r = 0; r < 5; r++) { + const n = t[r]; + if (0 === n) return !1; + e += n + } + if (e < 7) return !1; + const r = e / 7, n = r / 2; + return Math.abs(r - t[0]) < n && Math.abs(r - t[1]) < n && Math.abs(3 * r - t[2]) < 3 * n && Math.abs(r - t[3]) < n && Math.abs(r - t[4]) < n + } + + getCrossCheckStateCount() { + const t = this.crossCheckStateCount; + return t[0] = 0, t[1] = 0, t[2] = 0, t[3] = 0, t[4] = 0, t + } + + crossCheckDiagonal(t, e, r, n) { + const i = this.getCrossCheckStateCount(); + let s = 0; + const o = this.image; + for (; t >= s && e >= s && o.get(e - s, t - s);) i[2]++, s++; + if (t < s || e < s) return !1; + for (; t >= s && e >= s && !o.get(e - s, t - s) && i[1] <= r;) i[1]++, s++; + if (t < s || e < s || i[1] > r) return !1; + for (; t >= s && e >= s && o.get(e - s, t - s) && i[0] <= r;) i[0]++, s++; + if (i[0] > r) return !1; + const a = o.getHeight(), l = o.getWidth(); + for (s = 1; t + s < a && e + s < l && o.get(e + s, t + s);) i[2]++, s++; + if (t + s >= a || e + s >= l) return !1; + for (; t + s < a && e + s < l && !o.get(e + s, t + s) && i[3] < r;) i[3]++, s++; + if (t + s >= a || e + s >= l || i[3] >= r) return !1; + for (; t + s < a && e + s < l && o.get(e + s, t + s) && i[4] < r;) i[4]++, s++; + if (i[4] >= r) return !1; + const h = i[0] + i[1] + i[2] + i[3] + i[4]; + return Math.abs(h - n) < 2 * n && ye.foundPatternCross(i) + } + + crossCheckVertical(t, e, r, n) { + const i = this.image, s = i.getHeight(), o = this.getCrossCheckStateCount(); + let a = t; + for (; a >= 0 && i.get(e, a);) o[2]++, a--; + if (a < 0) return NaN; + for (; a >= 0 && !i.get(e, a) && o[1] <= r;) o[1]++, a--; + if (a < 0 || o[1] > r) return NaN; + for (; a >= 0 && i.get(e, a) && o[0] <= r;) o[0]++, a--; + if (o[0] > r) return NaN; + for (a = t + 1; a < s && i.get(e, a);) o[2]++, a++; + if (a === s) return NaN; + for (; a < s && !i.get(e, a) && o[3] < r;) o[3]++, a++; + if (a === s || o[3] >= r) return NaN; + for (; a < s && i.get(e, a) && o[4] < r;) o[4]++, a++; + if (o[4] >= r) return NaN; + const l = o[0] + o[1] + o[2] + o[3] + o[4]; + return 5 * Math.abs(l - n) >= 2 * n ? NaN : ye.foundPatternCross(o) ? ye.centerFromEnd(o, a) : NaN + } + + crossCheckHorizontal(t, e, r, n) { + const i = this.image, s = i.getWidth(), o = this.getCrossCheckStateCount(); + let a = t; + for (; a >= 0 && i.get(a, e);) o[2]++, a--; + if (a < 0) return NaN; + for (; a >= 0 && !i.get(a, e) && o[1] <= r;) o[1]++, a--; + if (a < 0 || o[1] > r) return NaN; + for (; a >= 0 && i.get(a, e) && o[0] <= r;) o[0]++, a--; + if (o[0] > r) return NaN; + for (a = t + 1; a < s && i.get(a, e);) o[2]++, a++; + if (a === s) return NaN; + for (; a < s && !i.get(a, e) && o[3] < r;) o[3]++, a++; + if (a === s || o[3] >= r) return NaN; + for (; a < s && i.get(a, e) && o[4] < r;) o[4]++, a++; + if (o[4] >= r) return NaN; + const l = o[0] + o[1] + o[2] + o[3] + o[4]; + return 5 * Math.abs(l - n) >= n ? NaN : ye.foundPatternCross(o) ? ye.centerFromEnd(o, a) : NaN + } + + handlePossibleCenter(t, e, r, n) { + const i = t[0] + t[1] + t[2] + t[3] + t[4]; + let s = ye.centerFromEnd(t, r), o = this.crossCheckVertical(e, Math.floor(s), t[2], i); + if (!isNaN(o) && (s = this.crossCheckHorizontal(Math.floor(s), Math.floor(o), t[2], i), !isNaN(s) && (!n || this.crossCheckDiagonal(Math.floor(o), Math.floor(s), t[2], i)))) { + const t = i / 7; + let e = !1; + const r = this.possibleCenters; + for (let n = 0, i = r.length; n < i; n++) { + const i = r[n]; + if (i.aboutEquals(t, o, s)) { + r[n] = i.combineEstimate(o, s, t), e = !0; + break + } + } + if (!e) { + const e = new Ne(s, o, t); + r.push(e), null !== this.resultPointCallback && void 0 !== this.resultPointCallback && this.resultPointCallback.foundPossibleResultPoint(e) + } + return !0 + } + return !1 + } + + findRowSkip() { + if (this.possibleCenters.length <= 1) return 0; + let t = null; + for (const e of this.possibleCenters) if (e.getCount() >= ye.CENTER_QUORUM) { + if (null != t) return this.hasSkipped = !0, Math.floor((Math.abs(t.getX() - e.getX()) - Math.abs(t.getY() - e.getY())) / 2); + t = e + } + return 0 + } + + haveMultiplyConfirmedCenters() { + let t = 0, e = 0; + const r = this.possibleCenters.length; + for (const r of this.possibleCenters) r.getCount() >= ye.CENTER_QUORUM && (t++, e += r.getEstimatedModuleSize()); + if (t < 3) return !1; + const n = e / r; + let i = 0; + for (const t of this.possibleCenters) i += Math.abs(t.getEstimatedModuleSize() - n); + return i <= .05 * e + } + + selectBestPatterns() { + const t = this.possibleCenters.length; + if (t < 3) throw new R; + const e = this.possibleCenters; + let r; + if (t > 3) { + let n = 0, i = 0; + for (const t of this.possibleCenters) { + const e = t.getEstimatedModuleSize(); + n += e, i += e * e + } + r = n / t; + let s = Math.sqrt(i / t - r * r); + e.sort(((t, e) => { + const n = Math.abs(e.getEstimatedModuleSize() - r), i = Math.abs(t.getEstimatedModuleSize() - r); + return n < i ? -1 : n > i ? 1 : 0 + })); + const o = Math.max(.2 * r, s); + for (let t = 0; t < e.length && e.length > 3; t++) { + const n = e[t]; + Math.abs(n.getEstimatedModuleSize() - r) > o && (e.splice(t, 1), t--) + } + } + if (e.length > 3) { + let t = 0; + for (const r of e) t += r.getEstimatedModuleSize(); + r = t / e.length, e.sort(((t, e) => { + if (e.getCount() === t.getCount()) { + const n = Math.abs(e.getEstimatedModuleSize() - r), i = Math.abs(t.getEstimatedModuleSize() - r); + return n < i ? 1 : n > i ? -1 : 0 + } + return e.getCount() - t.getCount() + })), e.splice(3) + } + return [e[0], e[1], e[2]] + } +} + +ye.CENTER_QUORUM = 2, ye.MIN_SKIP = 3, ye.MAX_MODULES = 57; + +class Oe { + constructor(t) { + this.image = t + } + + getImage() { + return this.image + } + + getResultPointCallback() { + return this.resultPointCallback + } + + detect(t) { + this.resultPointCallback = null == t ? null : t.get(C.NEED_RESULT_POINT_CALLBACK); + const e = new ye(this.image, this.resultPointCallback).find(t); + return this.processFinderPatternInfo(e) + } + + processFinderPatternInfo(t) { + const e = t.getTopLeft(), r = t.getTopRight(), n = t.getBottomLeft(), i = this.calculateModuleSize(e, r, n); + if (i < 1) throw new R("No pattern found in proccess finder."); + const s = Oe.computeDimension(e, r, n, i), o = Ae.getProvisionalVersionForDimension(s), + a = o.getDimensionForVersion() - 7; + let l = null; + if (o.getAlignmentPatternCenters().length > 0) { + const t = r.getX() - e.getX() + n.getX(), s = r.getY() - e.getY() + n.getY(), o = 1 - 3 / a, + h = Math.floor(e.getX() + o * (t - e.getX())), c = Math.floor(e.getY() + o * (s - e.getY())); + for (let t = 4; t <= 16; t <<= 1) try { + l = this.findAlignmentInRegion(i, h, c, t); + break + } catch (t) { + if (!(t instanceof R)) throw t + } + } + const h = Oe.createTransform(e, r, n, l, s), c = Oe.sampleGrid(this.image, h, s); + let u; + return u = null === l ? [n, e, r] : [n, e, r, l], new nt(c, u) + } + + static createTransform(t, e, r, n, i) { + const s = i - 3.5; + let o, a, l, h; + return null !== n ? (o = n.getX(), a = n.getY(), l = s - 3, h = l) : (o = e.getX() - t.getX() + r.getX(), a = e.getY() - t.getY() + r.getY(), l = s, h = s), at.quadrilateralToQuadrilateral(3.5, 3.5, s, 3.5, l, h, 3.5, s, t.getX(), t.getY(), e.getX(), e.getY(), o, a, r.getX(), r.getY()) + } + + static sampleGrid(t, e, r) { + return ht.getInstance().sampleGridWithTransform(t, r, r, e) + } + + static computeDimension(t, e, r, n) { + const i = tt.round(rt.distance(t, e) / n), s = tt.round(rt.distance(t, r) / n); + let o = Math.floor((i + s) / 2) + 7; + switch (3 & o) { + case 0: + o++; + break; + case 2: + o--; + break; + case 3: + throw new R("Dimensions could be not found.") + } + return o + } + + calculateModuleSize(t, e, r) { + return (this.calculateModuleSizeOneWay(t, e) + this.calculateModuleSizeOneWay(t, r)) / 2 + } + + calculateModuleSizeOneWay(t, e) { + const r = this.sizeOfBlackWhiteBlackRunBothWays(Math.floor(t.getX()), Math.floor(t.getY()), Math.floor(e.getX()), Math.floor(e.getY())), + n = this.sizeOfBlackWhiteBlackRunBothWays(Math.floor(e.getX()), Math.floor(e.getY()), Math.floor(t.getX()), Math.floor(t.getY())); + return isNaN(r) ? n / 7 : isNaN(n) ? r / 7 : (r + n) / 14 + } + + sizeOfBlackWhiteBlackRunBothWays(t, e, r, n) { + let i = this.sizeOfBlackWhiteBlackRun(t, e, r, n), s = 1, o = t - (r - t); + o < 0 ? (s = t / (t - o), o = 0) : o >= this.image.getWidth() && (s = (this.image.getWidth() - 1 - t) / (o - t), o = this.image.getWidth() - 1); + let a = Math.floor(e - (n - e) * s); + return s = 1, a < 0 ? (s = e / (e - a), a = 0) : a >= this.image.getHeight() && (s = (this.image.getHeight() - 1 - e) / (a - e), a = this.image.getHeight() - 1), o = Math.floor(t + (o - t) * s), i += this.sizeOfBlackWhiteBlackRun(t, e, o, a), i - 1 + } + + sizeOfBlackWhiteBlackRun(t, e, r, n) { + const i = Math.abs(n - e) > Math.abs(r - t); + if (i) { + let i = t; + t = e, e = i, i = r, r = n, n = i + } + const s = Math.abs(r - t), o = Math.abs(n - e); + let a = -s / 2; + const l = t < r ? 1 : -1, h = e < n ? 1 : -1; + let c = 0; + const u = r + l; + for (let r = t, d = e; r !== u; r += l) { + const l = i ? d : r, u = i ? r : d; + if (1 === c === this.image.get(l, u)) { + if (2 === c) return tt.distance(r, d, t, e); + c++ + } + if (a += o, a > 0) { + if (d === n) break; + d += h, a -= s + } + } + return 2 === c ? tt.distance(r + l, n, t, e) : NaN + } + + findAlignmentInRegion(t, e, r, n) { + const i = Math.floor(n * t), s = Math.max(0, e - i), o = Math.min(this.image.getWidth() - 1, e + i); + if (o - s < 3 * t) throw new R("Alignment top exceeds estimated module size."); + const a = Math.max(0, r - i), l = Math.min(this.image.getHeight() - 1, r + i); + if (l - a < 3 * t) throw new R("Alignment bottom exceeds estimated module size."); + return new Re(this.image, s, a, o - s, l - a, t, this.resultPointCallback).find() + } +} + +class Me { + constructor() { + this.decoder = new pe + } + + getDecoder() { + return this.decoder + } + + decode(t, e) { + let r, n; + if (null != e && void 0 !== e.get(C.PURE_BARCODE)) { + const i = Me.extractPureBits(t.getBlackMatrix()); + r = this.decoder.decodeBitMatrix(i, e), n = Me.NO_POINTS + } else { + const i = new Oe(t.getBlackMatrix()).detect(e); + r = this.decoder.decodeBitMatrix(i.getBits(), e), n = i.getPoints() + } + r.getOther() instanceof Se && r.getOther().applyMirroredCorrection(n); + const i = new F(r.getText(), r.getRawBytes(), void 0, n, v.QR_CODE, void 0), s = r.getByteSegments(); + null !== s && i.putMetadata(W.BYTE_SEGMENTS, s); + const o = r.getECLevel(); + return null !== o && i.putMetadata(W.ERROR_CORRECTION_LEVEL, o), r.hasStructuredAppend() && (i.putMetadata(W.STRUCTURED_APPEND_SEQUENCE, r.getStructuredAppendSequenceNumber()), i.putMetadata(W.STRUCTURED_APPEND_PARITY, r.getStructuredAppendParity())), i + } + + reset() { + } + + static extractPureBits(t) { + const e = t.getTopLeftOnBit(), r = t.getBottomRightOnBit(); + if (null === e || null === r) throw new R; + const n = this.moduleSize(e, t); + let i = e[1], s = r[1], o = e[0], a = r[0]; + if (o >= a || i >= s) throw new R; + if (s - i != a - o && (a = o + (s - i), a >= t.getWidth())) throw new R; + const l = Math.round((a - o + 1) / n), h = Math.round((s - i + 1) / n); + if (l <= 0 || h <= 0) throw new R; + if (h !== l) throw new R; + const c = Math.floor(n / 2); + i += c, o += c; + const u = o + Math.floor((l - 1) * n) - a; + if (u > 0) { + if (u > c) throw new R; + o -= u + } + const d = i + Math.floor((h - 1) * n) - s; + if (d > 0) { + if (d > c) throw new R; + i -= d + } + const g = new T(l, h); + for (let e = 0; e < h; e++) { + const r = i + Math.floor(e * n); + for (let i = 0; i < l; i++) t.get(o + Math.floor(i * n), r) && g.set(i, e) + } + return g + } + + static moduleSize(t, e) { + const r = e.getHeight(), n = e.getWidth(); + let i = t[0], s = t[1], o = !0, a = 0; + for (; i < n && s < r;) { + if (o !== e.get(i, s)) { + if (5 == ++a) break; + o = !o + } + i++, s++ + } + if (i === n || s === r) throw new R; + return (i - t[0]) / 7 + } +} + +Me.NO_POINTS = new Array; + +class Be { + PDF417Common() { + } + + static getBitCountSum(t) { + return tt.sum(t) + } + + static toIntArray(t) { + if (null == t || !t.length) return Be.EMPTY_INT_ARRAY; + const e = new Int32Array(t.length); + let r = 0; + for (const n of t) e[r++] = n; + return e + } + + static getCodeword(t) { + const e = g.binarySearch(Be.SYMBOL_TABLE, 262143 & t); + return e < 0 ? -1 : (Be.CODEWORD_TABLE[e] - 1) % Be.NUMBER_OF_CODEWORDS + } +} + +Be.NUMBER_OF_CODEWORDS = 929, Be.MAX_CODEWORDS_IN_BARCODE = Be.NUMBER_OF_CODEWORDS - 1, Be.MIN_ROWS_IN_BARCODE = 3, Be.MAX_ROWS_IN_BARCODE = 90, Be.MODULES_IN_CODEWORD = 17, Be.MODULES_IN_STOP_PATTERN = 18, Be.BARS_IN_MODULE = 8, Be.EMPTY_INT_ARRAY = new Int32Array([]), Be.SYMBOL_TABLE = Int32Array.from([66142, 66170, 66206, 66236, 66290, 66292, 66350, 66382, 66396, 66454, 66470, 66476, 66594, 66600, 66614, 66626, 66628, 66632, 66640, 66654, 66662, 66668, 66682, 66690, 66718, 66720, 66748, 66758, 66776, 66798, 66802, 66804, 66820, 66824, 66832, 66846, 66848, 66876, 66880, 66936, 66950, 66956, 66968, 66992, 67006, 67022, 67036, 67042, 67044, 67048, 67062, 67118, 67150, 67164, 67214, 67228, 67256, 67294, 67322, 67350, 67366, 67372, 67398, 67404, 67416, 67438, 67474, 67476, 67490, 67492, 67496, 67510, 67618, 67624, 67650, 67656, 67664, 67678, 67686, 67692, 67706, 67714, 67716, 67728, 67742, 67744, 67772, 67782, 67788, 67800, 67822, 67826, 67828, 67842, 67848, 67870, 67872, 67900, 67904, 67960, 67974, 67992, 68016, 68030, 68046, 68060, 68066, 68068, 68072, 68086, 68104, 68112, 68126, 68128, 68156, 68160, 68216, 68336, 68358, 68364, 68376, 68400, 68414, 68448, 68476, 68494, 68508, 68536, 68546, 68548, 68552, 68560, 68574, 68582, 68588, 68654, 68686, 68700, 68706, 68708, 68712, 68726, 68750, 68764, 68792, 68802, 68804, 68808, 68816, 68830, 68838, 68844, 68858, 68878, 68892, 68920, 68976, 68990, 68994, 68996, 69e3, 69008, 69022, 69024, 69052, 69062, 69068, 69080, 69102, 69106, 69108, 69142, 69158, 69164, 69190, 69208, 69230, 69254, 69260, 69272, 69296, 69310, 69326, 69340, 69386, 69394, 69396, 69410, 69416, 69430, 69442, 69444, 69448, 69456, 69470, 69478, 69484, 69554, 69556, 69666, 69672, 69698, 69704, 69712, 69726, 69754, 69762, 69764, 69776, 69790, 69792, 69820, 69830, 69836, 69848, 69870, 69874, 69876, 69890, 69918, 69920, 69948, 69952, 70008, 70022, 70040, 70064, 70078, 70094, 70108, 70114, 70116, 70120, 70134, 70152, 70174, 70176, 70264, 70384, 70412, 70448, 70462, 70496, 70524, 70542, 70556, 70584, 70594, 70600, 70608, 70622, 70630, 70636, 70664, 70672, 70686, 70688, 70716, 70720, 70776, 70896, 71136, 71180, 71192, 71216, 71230, 71264, 71292, 71360, 71416, 71452, 71480, 71536, 71550, 71554, 71556, 71560, 71568, 71582, 71584, 71612, 71622, 71628, 71640, 71662, 71726, 71732, 71758, 71772, 71778, 71780, 71784, 71798, 71822, 71836, 71864, 71874, 71880, 71888, 71902, 71910, 71916, 71930, 71950, 71964, 71992, 72048, 72062, 72066, 72068, 72080, 72094, 72096, 72124, 72134, 72140, 72152, 72174, 72178, 72180, 72206, 72220, 72248, 72304, 72318, 72416, 72444, 72456, 72464, 72478, 72480, 72508, 72512, 72568, 72588, 72600, 72624, 72638, 72654, 72668, 72674, 72676, 72680, 72694, 72726, 72742, 72748, 72774, 72780, 72792, 72814, 72838, 72856, 72880, 72894, 72910, 72924, 72930, 72932, 72936, 72950, 72966, 72972, 72984, 73008, 73022, 73056, 73084, 73102, 73116, 73144, 73156, 73160, 73168, 73182, 73190, 73196, 73210, 73226, 73234, 73236, 73250, 73252, 73256, 73270, 73282, 73284, 73296, 73310, 73318, 73324, 73346, 73348, 73352, 73360, 73374, 73376, 73404, 73414, 73420, 73432, 73454, 73498, 73518, 73522, 73524, 73550, 73564, 73570, 73572, 73576, 73590, 73800, 73822, 73858, 73860, 73872, 73886, 73888, 73916, 73944, 73970, 73972, 73992, 74014, 74016, 74044, 74048, 74104, 74118, 74136, 74160, 74174, 74210, 74212, 74216, 74230, 74244, 74256, 74270, 74272, 74360, 74480, 74502, 74508, 74544, 74558, 74592, 74620, 74638, 74652, 74680, 74690, 74696, 74704, 74726, 74732, 74782, 74784, 74812, 74992, 75232, 75288, 75326, 75360, 75388, 75456, 75512, 75576, 75632, 75646, 75650, 75652, 75664, 75678, 75680, 75708, 75718, 75724, 75736, 75758, 75808, 75836, 75840, 75896, 76016, 76256, 76736, 76824, 76848, 76862, 76896, 76924, 76992, 77048, 77296, 77340, 77368, 77424, 77438, 77536, 77564, 77572, 77576, 77584, 77600, 77628, 77632, 77688, 77702, 77708, 77720, 77744, 77758, 77774, 77788, 77870, 77902, 77916, 77922, 77928, 77966, 77980, 78008, 78018, 78024, 78032, 78046, 78060, 78074, 78094, 78136, 78192, 78206, 78210, 78212, 78224, 78238, 78240, 78268, 78278, 78284, 78296, 78322, 78324, 78350, 78364, 78448, 78462, 78560, 78588, 78600, 78622, 78624, 78652, 78656, 78712, 78726, 78744, 78768, 78782, 78798, 78812, 78818, 78820, 78824, 78838, 78862, 78876, 78904, 78960, 78974, 79072, 79100, 79296, 79352, 79368, 79376, 79390, 79392, 79420, 79424, 79480, 79600, 79628, 79640, 79664, 79678, 79712, 79740, 79772, 79800, 79810, 79812, 79816, 79824, 79838, 79846, 79852, 79894, 79910, 79916, 79942, 79948, 79960, 79982, 79988, 80006, 80024, 80048, 80062, 80078, 80092, 80098, 80100, 80104, 80134, 80140, 80176, 80190, 80224, 80252, 80270, 80284, 80312, 80328, 80336, 80350, 80358, 80364, 80378, 80390, 80396, 80408, 80432, 80446, 80480, 80508, 80576, 80632, 80654, 80668, 80696, 80752, 80766, 80776, 80784, 80798, 80800, 80828, 80844, 80856, 80878, 80882, 80884, 80914, 80916, 80930, 80932, 80936, 80950, 80962, 80968, 80976, 80990, 80998, 81004, 81026, 81028, 81040, 81054, 81056, 81084, 81094, 81100, 81112, 81134, 81154, 81156, 81160, 81168, 81182, 81184, 81212, 81216, 81272, 81286, 81292, 81304, 81328, 81342, 81358, 81372, 81380, 81384, 81398, 81434, 81454, 81458, 81460, 81486, 81500, 81506, 81508, 81512, 81526, 81550, 81564, 81592, 81602, 81604, 81608, 81616, 81630, 81638, 81644, 81702, 81708, 81722, 81734, 81740, 81752, 81774, 81778, 81780, 82050, 82078, 82080, 82108, 82180, 82184, 82192, 82206, 82208, 82236, 82240, 82296, 82316, 82328, 82352, 82366, 82402, 82404, 82408, 82440, 82448, 82462, 82464, 82492, 82496, 82552, 82672, 82694, 82700, 82712, 82736, 82750, 82784, 82812, 82830, 82882, 82884, 82888, 82896, 82918, 82924, 82952, 82960, 82974, 82976, 83004, 83008, 83064, 83184, 83424, 83468, 83480, 83504, 83518, 83552, 83580, 83648, 83704, 83740, 83768, 83824, 83838, 83842, 83844, 83848, 83856, 83872, 83900, 83910, 83916, 83928, 83950, 83984, 84e3, 84028, 84032, 84088, 84208, 84448, 84928, 85040, 85054, 85088, 85116, 85184, 85240, 85488, 85560, 85616, 85630, 85728, 85756, 85764, 85768, 85776, 85790, 85792, 85820, 85824, 85880, 85894, 85900, 85912, 85936, 85966, 85980, 86048, 86080, 86136, 86256, 86496, 86976, 88160, 88188, 88256, 88312, 88560, 89056, 89200, 89214, 89312, 89340, 89536, 89592, 89608, 89616, 89632, 89664, 89720, 89840, 89868, 89880, 89904, 89952, 89980, 89998, 90012, 90040, 90190, 90204, 90254, 90268, 90296, 90306, 90308, 90312, 90334, 90382, 90396, 90424, 90480, 90494, 90500, 90504, 90512, 90526, 90528, 90556, 90566, 90572, 90584, 90610, 90612, 90638, 90652, 90680, 90736, 90750, 90848, 90876, 90884, 90888, 90896, 90910, 90912, 90940, 90944, 91e3, 91014, 91020, 91032, 91056, 91070, 91086, 91100, 91106, 91108, 91112, 91126, 91150, 91164, 91192, 91248, 91262, 91360, 91388, 91584, 91640, 91664, 91678, 91680, 91708, 91712, 91768, 91888, 91928, 91952, 91966, 92e3, 92028, 92046, 92060, 92088, 92098, 92100, 92104, 92112, 92126, 92134, 92140, 92188, 92216, 92272, 92384, 92412, 92608, 92664, 93168, 93200, 93214, 93216, 93244, 93248, 93304, 93424, 93664, 93720, 93744, 93758, 93792, 93820, 93888, 93944, 93980, 94008, 94064, 94078, 94084, 94088, 94096, 94110, 94112, 94140, 94150, 94156, 94168, 94246, 94252, 94278, 94284, 94296, 94318, 94342, 94348, 94360, 94384, 94398, 94414, 94428, 94440, 94470, 94476, 94488, 94512, 94526, 94560, 94588, 94606, 94620, 94648, 94658, 94660, 94664, 94672, 94686, 94694, 94700, 94714, 94726, 94732, 94744, 94768, 94782, 94816, 94844, 94912, 94968, 94990, 95004, 95032, 95088, 95102, 95112, 95120, 95134, 95136, 95164, 95180, 95192, 95214, 95218, 95220, 95244, 95256, 95280, 95294, 95328, 95356, 95424, 95480, 95728, 95758, 95772, 95800, 95856, 95870, 95968, 95996, 96008, 96016, 96030, 96032, 96060, 96064, 96120, 96152, 96176, 96190, 96220, 96226, 96228, 96232, 96290, 96292, 96296, 96310, 96322, 96324, 96328, 96336, 96350, 96358, 96364, 96386, 96388, 96392, 96400, 96414, 96416, 96444, 96454, 96460, 96472, 96494, 96498, 96500, 96514, 96516, 96520, 96528, 96542, 96544, 96572, 96576, 96632, 96646, 96652, 96664, 96688, 96702, 96718, 96732, 96738, 96740, 96744, 96758, 96772, 96776, 96784, 96798, 96800, 96828, 96832, 96888, 97008, 97030, 97036, 97048, 97072, 97086, 97120, 97148, 97166, 97180, 97208, 97220, 97224, 97232, 97246, 97254, 97260, 97326, 97330, 97332, 97358, 97372, 97378, 97380, 97384, 97398, 97422, 97436, 97464, 97474, 97476, 97480, 97488, 97502, 97510, 97516, 97550, 97564, 97592, 97648, 97666, 97668, 97672, 97680, 97694, 97696, 97724, 97734, 97740, 97752, 97774, 97830, 97836, 97850, 97862, 97868, 97880, 97902, 97906, 97908, 97926, 97932, 97944, 97968, 97998, 98012, 98018, 98020, 98024, 98038, 98618, 98674, 98676, 98838, 98854, 98874, 98892, 98904, 98926, 98930, 98932, 98968, 99006, 99042, 99044, 99048, 99062, 99166, 99194, 99246, 99286, 99350, 99366, 99372, 99386, 99398, 99416, 99438, 99442, 99444, 99462, 99504, 99518, 99534, 99548, 99554, 99556, 99560, 99574, 99590, 99596, 99608, 99632, 99646, 99680, 99708, 99726, 99740, 99768, 99778, 99780, 99784, 99792, 99806, 99814, 99820, 99834, 99858, 99860, 99874, 99880, 99894, 99906, 99920, 99934, 99962, 99970, 99972, 99976, 99984, 99998, 1e5, 100028, 100038, 100044, 100056, 100078, 100082, 100084, 100142, 100174, 100188, 100246, 100262, 100268, 100306, 100308, 100390, 100396, 100410, 100422, 100428, 100440, 100462, 100466, 100468, 100486, 100504, 100528, 100542, 100558, 100572, 100578, 100580, 100584, 100598, 100620, 100656, 100670, 100704, 100732, 100750, 100792, 100802, 100808, 100816, 100830, 100838, 100844, 100858, 100888, 100912, 100926, 100960, 100988, 101056, 101112, 101148, 101176, 101232, 101246, 101250, 101252, 101256, 101264, 101278, 101280, 101308, 101318, 101324, 101336, 101358, 101362, 101364, 101410, 101412, 101416, 101430, 101442, 101448, 101456, 101470, 101478, 101498, 101506, 101508, 101520, 101534, 101536, 101564, 101580, 101618, 101620, 101636, 101640, 101648, 101662, 101664, 101692, 101696, 101752, 101766, 101784, 101838, 101858, 101860, 101864, 101934, 101938, 101940, 101966, 101980, 101986, 101988, 101992, 102030, 102044, 102072, 102082, 102084, 102088, 102096, 102138, 102166, 102182, 102188, 102214, 102220, 102232, 102254, 102282, 102290, 102292, 102306, 102308, 102312, 102326, 102444, 102458, 102470, 102476, 102488, 102514, 102516, 102534, 102552, 102576, 102590, 102606, 102620, 102626, 102632, 102646, 102662, 102668, 102704, 102718, 102752, 102780, 102798, 102812, 102840, 102850, 102856, 102864, 102878, 102886, 102892, 102906, 102936, 102974, 103008, 103036, 103104, 103160, 103224, 103280, 103294, 103298, 103300, 103312, 103326, 103328, 103356, 103366, 103372, 103384, 103406, 103410, 103412, 103472, 103486, 103520, 103548, 103616, 103672, 103920, 103992, 104048, 104062, 104160, 104188, 104194, 104196, 104200, 104208, 104224, 104252, 104256, 104312, 104326, 104332, 104344, 104368, 104382, 104398, 104412, 104418, 104420, 104424, 104482, 104484, 104514, 104520, 104528, 104542, 104550, 104570, 104578, 104580, 104592, 104606, 104608, 104636, 104652, 104690, 104692, 104706, 104712, 104734, 104736, 104764, 104768, 104824, 104838, 104856, 104910, 104930, 104932, 104936, 104968, 104976, 104990, 104992, 105020, 105024, 105080, 105200, 105240, 105278, 105312, 105372, 105410, 105412, 105416, 105424, 105446, 105518, 105524, 105550, 105564, 105570, 105572, 105576, 105614, 105628, 105656, 105666, 105672, 105680, 105702, 105722, 105742, 105756, 105784, 105840, 105854, 105858, 105860, 105864, 105872, 105888, 105932, 105970, 105972, 106006, 106022, 106028, 106054, 106060, 106072, 106100, 106118, 106124, 106136, 106160, 106174, 106190, 106210, 106212, 106216, 106250, 106258, 106260, 106274, 106276, 106280, 106306, 106308, 106312, 106320, 106334, 106348, 106394, 106414, 106418, 106420, 106566, 106572, 106610, 106612, 106630, 106636, 106648, 106672, 106686, 106722, 106724, 106728, 106742, 106758, 106764, 106776, 106800, 106814, 106848, 106876, 106894, 106908, 106936, 106946, 106948, 106952, 106960, 106974, 106982, 106988, 107032, 107056, 107070, 107104, 107132, 107200, 107256, 107292, 107320, 107376, 107390, 107394, 107396, 107400, 107408, 107422, 107424, 107452, 107462, 107468, 107480, 107502, 107506, 107508, 107544, 107568, 107582, 107616, 107644, 107712, 107768, 108016, 108060, 108088, 108144, 108158, 108256, 108284, 108290, 108292, 108296, 108304, 108318, 108320, 108348, 108352, 108408, 108422, 108428, 108440, 108464, 108478, 108494, 108508, 108514, 108516, 108520, 108592, 108640, 108668, 108736, 108792, 109040, 109536, 109680, 109694, 109792, 109820, 110016, 110072, 110084, 110088, 110096, 110112, 110140, 110144, 110200, 110320, 110342, 110348, 110360, 110384, 110398, 110432, 110460, 110478, 110492, 110520, 110532, 110536, 110544, 110558, 110658, 110686, 110714, 110722, 110724, 110728, 110736, 110750, 110752, 110780, 110796, 110834, 110836, 110850, 110852, 110856, 110864, 110878, 110880, 110908, 110912, 110968, 110982, 111e3, 111054, 111074, 111076, 111080, 111108, 111112, 111120, 111134, 111136, 111164, 111168, 111224, 111344, 111372, 111422, 111456, 111516, 111554, 111556, 111560, 111568, 111590, 111632, 111646, 111648, 111676, 111680, 111736, 111856, 112096, 112152, 112224, 112252, 112320, 112440, 112514, 112516, 112520, 112528, 112542, 112544, 112588, 112686, 112718, 112732, 112782, 112796, 112824, 112834, 112836, 112840, 112848, 112870, 112890, 112910, 112924, 112952, 113008, 113022, 113026, 113028, 113032, 113040, 113054, 113056, 113100, 113138, 113140, 113166, 113180, 113208, 113264, 113278, 113376, 113404, 113416, 113424, 113440, 113468, 113472, 113560, 113614, 113634, 113636, 113640, 113686, 113702, 113708, 113734, 113740, 113752, 113778, 113780, 113798, 113804, 113816, 113840, 113854, 113870, 113890, 113892, 113896, 113926, 113932, 113944, 113968, 113982, 114016, 114044, 114076, 114114, 114116, 114120, 114128, 114150, 114170, 114194, 114196, 114210, 114212, 114216, 114242, 114244, 114248, 114256, 114270, 114278, 114306, 114308, 114312, 114320, 114334, 114336, 114364, 114380, 114420, 114458, 114478, 114482, 114484, 114510, 114524, 114530, 114532, 114536, 114842, 114866, 114868, 114970, 114994, 114996, 115042, 115044, 115048, 115062, 115130, 115226, 115250, 115252, 115278, 115292, 115298, 115300, 115304, 115318, 115342, 115394, 115396, 115400, 115408, 115422, 115430, 115436, 115450, 115478, 115494, 115514, 115526, 115532, 115570, 115572, 115738, 115758, 115762, 115764, 115790, 115804, 115810, 115812, 115816, 115830, 115854, 115868, 115896, 115906, 115912, 115920, 115934, 115942, 115948, 115962, 115996, 116024, 116080, 116094, 116098, 116100, 116104, 116112, 116126, 116128, 116156, 116166, 116172, 116184, 116206, 116210, 116212, 116246, 116262, 116268, 116282, 116294, 116300, 116312, 116334, 116338, 116340, 116358, 116364, 116376, 116400, 116414, 116430, 116444, 116450, 116452, 116456, 116498, 116500, 116514, 116520, 116534, 116546, 116548, 116552, 116560, 116574, 116582, 116588, 116602, 116654, 116694, 116714, 116762, 116782, 116786, 116788, 116814, 116828, 116834, 116836, 116840, 116854, 116878, 116892, 116920, 116930, 116936, 116944, 116958, 116966, 116972, 116986, 117006, 117048, 117104, 117118, 117122, 117124, 117136, 117150, 117152, 117180, 117190, 117196, 117208, 117230, 117234, 117236, 117304, 117360, 117374, 117472, 117500, 117506, 117508, 117512, 117520, 117536, 117564, 117568, 117624, 117638, 117644, 117656, 117680, 117694, 117710, 117724, 117730, 117732, 117736, 117750, 117782, 117798, 117804, 117818, 117830, 117848, 117874, 117876, 117894, 117936, 117950, 117966, 117986, 117988, 117992, 118022, 118028, 118040, 118064, 118078, 118112, 118140, 118172, 118210, 118212, 118216, 118224, 118238, 118246, 118266, 118306, 118312, 118338, 118352, 118366, 118374, 118394, 118402, 118404, 118408, 118416, 118430, 118432, 118460, 118476, 118514, 118516, 118574, 118578, 118580, 118606, 118620, 118626, 118628, 118632, 118678, 118694, 118700, 118730, 118738, 118740, 118830, 118834, 118836, 118862, 118876, 118882, 118884, 118888, 118902, 118926, 118940, 118968, 118978, 118980, 118984, 118992, 119006, 119014, 119020, 119034, 119068, 119096, 119152, 119166, 119170, 119172, 119176, 119184, 119198, 119200, 119228, 119238, 119244, 119256, 119278, 119282, 119284, 119324, 119352, 119408, 119422, 119520, 119548, 119554, 119556, 119560, 119568, 119582, 119584, 119612, 119616, 119672, 119686, 119692, 119704, 119728, 119742, 119758, 119772, 119778, 119780, 119784, 119798, 119920, 119934, 120032, 120060, 120256, 120312, 120324, 120328, 120336, 120352, 120384, 120440, 120560, 120582, 120588, 120600, 120624, 120638, 120672, 120700, 120718, 120732, 120760, 120770, 120772, 120776, 120784, 120798, 120806, 120812, 120870, 120876, 120890, 120902, 120908, 120920, 120946, 120948, 120966, 120972, 120984, 121008, 121022, 121038, 121058, 121060, 121064, 121078, 121100, 121112, 121136, 121150, 121184, 121212, 121244, 121282, 121284, 121288, 121296, 121318, 121338, 121356, 121368, 121392, 121406, 121440, 121468, 121536, 121592, 121656, 121730, 121732, 121736, 121744, 121758, 121760, 121804, 121842, 121844, 121890, 121922, 121924, 121928, 121936, 121950, 121958, 121978, 121986, 121988, 121992, 122e3, 122014, 122016, 122044, 122060, 122098, 122100, 122116, 122120, 122128, 122142, 122144, 122172, 122176, 122232, 122246, 122264, 122318, 122338, 122340, 122344, 122414, 122418, 122420, 122446, 122460, 122466, 122468, 122472, 122510, 122524, 122552, 122562, 122564, 122568, 122576, 122598, 122618, 122646, 122662, 122668, 122694, 122700, 122712, 122738, 122740, 122762, 122770, 122772, 122786, 122788, 122792, 123018, 123026, 123028, 123042, 123044, 123048, 123062, 123098, 123146, 123154, 123156, 123170, 123172, 123176, 123190, 123202, 123204, 123208, 123216, 123238, 123244, 123258, 123290, 123314, 123316, 123402, 123410, 123412, 123426, 123428, 123432, 123446, 123458, 123464, 123472, 123486, 123494, 123500, 123514, 123522, 123524, 123528, 123536, 123552, 123580, 123590, 123596, 123608, 123630, 123634, 123636, 123674, 123698, 123700, 123740, 123746, 123748, 123752, 123834, 123914, 123922, 123924, 123938, 123944, 123958, 123970, 123976, 123984, 123998, 124006, 124012, 124026, 124034, 124036, 124048, 124062, 124064, 124092, 124102, 124108, 124120, 124142, 124146, 124148, 124162, 124164, 124168, 124176, 124190, 124192, 124220, 124224, 124280, 124294, 124300, 124312, 124336, 124350, 124366, 124380, 124386, 124388, 124392, 124406, 124442, 124462, 124466, 124468, 124494, 124508, 124514, 124520, 124558, 124572, 124600, 124610, 124612, 124616, 124624, 124646, 124666, 124694, 124710, 124716, 124730, 124742, 124748, 124760, 124786, 124788, 124818, 124820, 124834, 124836, 124840, 124854, 124946, 124948, 124962, 124964, 124968, 124982, 124994, 124996, 125e3, 125008, 125022, 125030, 125036, 125050, 125058, 125060, 125064, 125072, 125086, 125088, 125116, 125126, 125132, 125144, 125166, 125170, 125172, 125186, 125188, 125192, 125200, 125216, 125244, 125248, 125304, 125318, 125324, 125336, 125360, 125374, 125390, 125404, 125410, 125412, 125416, 125430, 125444, 125448, 125456, 125472, 125504, 125560, 125680, 125702, 125708, 125720, 125744, 125758, 125792, 125820, 125838, 125852, 125880, 125890, 125892, 125896, 125904, 125918, 125926, 125932, 125978, 125998, 126002, 126004, 126030, 126044, 126050, 126052, 126056, 126094, 126108, 126136, 126146, 126148, 126152, 126160, 126182, 126202, 126222, 126236, 126264, 126320, 126334, 126338, 126340, 126344, 126352, 126366, 126368, 126412, 126450, 126452, 126486, 126502, 126508, 126522, 126534, 126540, 126552, 126574, 126578, 126580, 126598, 126604, 126616, 126640, 126654, 126670, 126684, 126690, 126692, 126696, 126738, 126754, 126756, 126760, 126774, 126786, 126788, 126792, 126800, 126814, 126822, 126828, 126842, 126894, 126898, 126900, 126934, 127126, 127142, 127148, 127162, 127178, 127186, 127188, 127254, 127270, 127276, 127290, 127302, 127308, 127320, 127342, 127346, 127348, 127370, 127378, 127380, 127394, 127396, 127400, 127450, 127510, 127526, 127532, 127546, 127558, 127576, 127598, 127602, 127604, 127622, 127628, 127640, 127664, 127678, 127694, 127708, 127714, 127716, 127720, 127734, 127754, 127762, 127764, 127778, 127784, 127810, 127812, 127816, 127824, 127838, 127846, 127866, 127898, 127918, 127922, 127924, 128022, 128038, 128044, 128058, 128070, 128076, 128088, 128110, 128114, 128116, 128134, 128140, 128152, 128176, 128190, 128206, 128220, 128226, 128228, 128232, 128246, 128262, 128268, 128280, 128304, 128318, 128352, 128380, 128398, 128412, 128440, 128450, 128452, 128456, 128464, 128478, 128486, 128492, 128506, 128522, 128530, 128532, 128546, 128548, 128552, 128566, 128578, 128580, 128584, 128592, 128606, 128614, 128634, 128642, 128644, 128648, 128656, 128670, 128672, 128700, 128716, 128754, 128756, 128794, 128814, 128818, 128820, 128846, 128860, 128866, 128868, 128872, 128886, 128918, 128934, 128940, 128954, 128978, 128980, 129178, 129198, 129202, 129204, 129238, 129258, 129306, 129326, 129330, 129332, 129358, 129372, 129378, 129380, 129384, 129398, 129430, 129446, 129452, 129466, 129482, 129490, 129492, 129562, 129582, 129586, 129588, 129614, 129628, 129634, 129636, 129640, 129654, 129678, 129692, 129720, 129730, 129732, 129736, 129744, 129758, 129766, 129772, 129814, 129830, 129836, 129850, 129862, 129868, 129880, 129902, 129906, 129908, 129930, 129938, 129940, 129954, 129956, 129960, 129974, 130010]), Be.CODEWORD_TABLE = Int32Array.from([2627, 1819, 2622, 2621, 1813, 1812, 2729, 2724, 2723, 2779, 2774, 2773, 902, 896, 908, 868, 865, 861, 859, 2511, 873, 871, 1780, 835, 2493, 825, 2491, 842, 837, 844, 1764, 1762, 811, 810, 809, 2483, 807, 2482, 806, 2480, 815, 814, 813, 812, 2484, 817, 816, 1745, 1744, 1742, 1746, 2655, 2637, 2635, 2626, 2625, 2623, 2628, 1820, 2752, 2739, 2737, 2728, 2727, 2725, 2730, 2785, 2783, 2778, 2777, 2775, 2780, 787, 781, 747, 739, 736, 2413, 754, 752, 1719, 692, 689, 681, 2371, 678, 2369, 700, 697, 694, 703, 1688, 1686, 642, 638, 2343, 631, 2341, 627, 2338, 651, 646, 643, 2345, 654, 652, 1652, 1650, 1647, 1654, 601, 599, 2322, 596, 2321, 594, 2319, 2317, 611, 610, 608, 606, 2324, 603, 2323, 615, 614, 612, 1617, 1616, 1614, 1612, 616, 1619, 1618, 2575, 2538, 2536, 905, 901, 898, 909, 2509, 2507, 2504, 870, 867, 864, 860, 2512, 875, 872, 1781, 2490, 2489, 2487, 2485, 1748, 836, 834, 832, 830, 2494, 827, 2492, 843, 841, 839, 845, 1765, 1763, 2701, 2676, 2674, 2653, 2648, 2656, 2634, 2633, 2631, 2629, 1821, 2638, 2636, 2770, 2763, 2761, 2750, 2745, 2753, 2736, 2735, 2733, 2731, 1848, 2740, 2738, 2786, 2784, 591, 588, 576, 569, 566, 2296, 1590, 537, 534, 526, 2276, 522, 2274, 545, 542, 539, 548, 1572, 1570, 481, 2245, 466, 2242, 462, 2239, 492, 485, 482, 2249, 496, 494, 1534, 1531, 1528, 1538, 413, 2196, 406, 2191, 2188, 425, 419, 2202, 415, 2199, 432, 430, 427, 1472, 1467, 1464, 433, 1476, 1474, 368, 367, 2160, 365, 2159, 362, 2157, 2155, 2152, 378, 377, 375, 2166, 372, 2165, 369, 2162, 383, 381, 379, 2168, 1419, 1418, 1416, 1414, 385, 1411, 384, 1423, 1422, 1420, 1424, 2461, 802, 2441, 2439, 790, 786, 783, 794, 2409, 2406, 2403, 750, 742, 738, 2414, 756, 753, 1720, 2367, 2365, 2362, 2359, 1663, 693, 691, 684, 2373, 680, 2370, 702, 699, 696, 704, 1690, 1687, 2337, 2336, 2334, 2332, 1624, 2329, 1622, 640, 637, 2344, 634, 2342, 630, 2340, 650, 648, 645, 2346, 655, 653, 1653, 1651, 1649, 1655, 2612, 2597, 2595, 2571, 2568, 2565, 2576, 2534, 2529, 2526, 1787, 2540, 2537, 907, 904, 900, 910, 2503, 2502, 2500, 2498, 1768, 2495, 1767, 2510, 2508, 2506, 869, 866, 863, 2513, 876, 874, 1782, 2720, 2713, 2711, 2697, 2694, 2691, 2702, 2672, 2670, 2664, 1828, 2678, 2675, 2647, 2646, 2644, 2642, 1823, 2639, 1822, 2654, 2652, 2650, 2657, 2771, 1855, 2765, 2762, 1850, 1849, 2751, 2749, 2747, 2754, 353, 2148, 344, 342, 336, 2142, 332, 2140, 345, 1375, 1373, 306, 2130, 299, 2128, 295, 2125, 319, 314, 311, 2132, 1354, 1352, 1349, 1356, 262, 257, 2101, 253, 2096, 2093, 274, 273, 267, 2107, 263, 2104, 280, 278, 275, 1316, 1311, 1308, 1320, 1318, 2052, 202, 2050, 2044, 2040, 219, 2063, 212, 2060, 208, 2055, 224, 221, 2066, 1260, 1258, 1252, 231, 1248, 229, 1266, 1264, 1261, 1268, 155, 1998, 153, 1996, 1994, 1991, 1988, 165, 164, 2007, 162, 2006, 159, 2003, 2e3, 172, 171, 169, 2012, 166, 2010, 1186, 1184, 1182, 1179, 175, 1176, 173, 1192, 1191, 1189, 1187, 176, 1194, 1193, 2313, 2307, 2305, 592, 589, 2294, 2292, 2289, 578, 572, 568, 2297, 580, 1591, 2272, 2267, 2264, 1547, 538, 536, 529, 2278, 525, 2275, 547, 544, 541, 1574, 1571, 2237, 2235, 2229, 1493, 2225, 1489, 478, 2247, 470, 2244, 465, 2241, 493, 488, 484, 2250, 498, 495, 1536, 1533, 1530, 1539, 2187, 2186, 2184, 2182, 1432, 2179, 1430, 2176, 1427, 414, 412, 2197, 409, 2195, 405, 2193, 2190, 426, 424, 421, 2203, 418, 2201, 431, 429, 1473, 1471, 1469, 1466, 434, 1477, 1475, 2478, 2472, 2470, 2459, 2457, 2454, 2462, 803, 2437, 2432, 2429, 1726, 2443, 2440, 792, 789, 785, 2401, 2399, 2393, 1702, 2389, 1699, 2411, 2408, 2405, 745, 741, 2415, 758, 755, 1721, 2358, 2357, 2355, 2353, 1661, 2350, 1660, 2347, 1657, 2368, 2366, 2364, 2361, 1666, 690, 687, 2374, 683, 2372, 701, 698, 705, 1691, 1689, 2619, 2617, 2610, 2608, 2605, 2613, 2593, 2588, 2585, 1803, 2599, 2596, 2563, 2561, 2555, 1797, 2551, 1795, 2573, 2570, 2567, 2577, 2525, 2524, 2522, 2520, 1786, 2517, 1785, 2514, 1783, 2535, 2533, 2531, 2528, 1788, 2541, 2539, 906, 903, 911, 2721, 1844, 2715, 2712, 1838, 1836, 2699, 2696, 2693, 2703, 1827, 1826, 1824, 2673, 2671, 2669, 2666, 1829, 2679, 2677, 1858, 1857, 2772, 1854, 1853, 1851, 1856, 2766, 2764, 143, 1987, 139, 1986, 135, 133, 131, 1984, 128, 1983, 125, 1981, 138, 137, 136, 1985, 1133, 1132, 1130, 112, 110, 1974, 107, 1973, 104, 1971, 1969, 122, 121, 119, 117, 1977, 114, 1976, 124, 1115, 1114, 1112, 1110, 1117, 1116, 84, 83, 1953, 81, 1952, 78, 1950, 1948, 1945, 94, 93, 91, 1959, 88, 1958, 85, 1955, 99, 97, 95, 1961, 1086, 1085, 1083, 1081, 1078, 100, 1090, 1089, 1087, 1091, 49, 47, 1917, 44, 1915, 1913, 1910, 1907, 59, 1926, 56, 1925, 53, 1922, 1919, 66, 64, 1931, 61, 1929, 1042, 1040, 1038, 71, 1035, 70, 1032, 68, 1048, 1047, 1045, 1043, 1050, 1049, 12, 10, 1869, 1867, 1864, 1861, 21, 1880, 19, 1877, 1874, 1871, 28, 1888, 25, 1886, 22, 1883, 982, 980, 977, 974, 32, 30, 991, 989, 987, 984, 34, 995, 994, 992, 2151, 2150, 2147, 2146, 2144, 356, 355, 354, 2149, 2139, 2138, 2136, 2134, 1359, 343, 341, 338, 2143, 335, 2141, 348, 347, 346, 1376, 1374, 2124, 2123, 2121, 2119, 1326, 2116, 1324, 310, 308, 305, 2131, 302, 2129, 298, 2127, 320, 318, 316, 313, 2133, 322, 321, 1355, 1353, 1351, 1357, 2092, 2091, 2089, 2087, 1276, 2084, 1274, 2081, 1271, 259, 2102, 256, 2100, 252, 2098, 2095, 272, 269, 2108, 266, 2106, 281, 279, 277, 1317, 1315, 1313, 1310, 282, 1321, 1319, 2039, 2037, 2035, 2032, 1203, 2029, 1200, 1197, 207, 2053, 205, 2051, 201, 2049, 2046, 2043, 220, 218, 2064, 215, 2062, 211, 2059, 228, 226, 223, 2069, 1259, 1257, 1254, 232, 1251, 230, 1267, 1265, 1263, 2316, 2315, 2312, 2311, 2309, 2314, 2304, 2303, 2301, 2299, 1593, 2308, 2306, 590, 2288, 2287, 2285, 2283, 1578, 2280, 1577, 2295, 2293, 2291, 579, 577, 574, 571, 2298, 582, 581, 1592, 2263, 2262, 2260, 2258, 1545, 2255, 1544, 2252, 1541, 2273, 2271, 2269, 2266, 1550, 535, 532, 2279, 528, 2277, 546, 543, 549, 1575, 1573, 2224, 2222, 2220, 1486, 2217, 1485, 2214, 1482, 1479, 2238, 2236, 2234, 2231, 1496, 2228, 1492, 480, 477, 2248, 473, 2246, 469, 2243, 490, 487, 2251, 497, 1537, 1535, 1532, 2477, 2476, 2474, 2479, 2469, 2468, 2466, 2464, 1730, 2473, 2471, 2453, 2452, 2450, 2448, 1729, 2445, 1728, 2460, 2458, 2456, 2463, 805, 804, 2428, 2427, 2425, 2423, 1725, 2420, 1724, 2417, 1722, 2438, 2436, 2434, 2431, 1727, 2444, 2442, 793, 791, 788, 795, 2388, 2386, 2384, 1697, 2381, 1696, 2378, 1694, 1692, 2402, 2400, 2398, 2395, 1703, 2392, 1701, 2412, 2410, 2407, 751, 748, 744, 2416, 759, 757, 1807, 2620, 2618, 1806, 1805, 2611, 2609, 2607, 2614, 1802, 1801, 1799, 2594, 2592, 2590, 2587, 1804, 2600, 2598, 1794, 1793, 1791, 1789, 2564, 2562, 2560, 2557, 1798, 2554, 1796, 2574, 2572, 2569, 2578, 1847, 1846, 2722, 1843, 1842, 1840, 1845, 2716, 2714, 1835, 1834, 1832, 1830, 1839, 1837, 2700, 2698, 2695, 2704, 1817, 1811, 1810, 897, 862, 1777, 829, 826, 838, 1760, 1758, 808, 2481, 1741, 1740, 1738, 1743, 2624, 1818, 2726, 2776, 782, 740, 737, 1715, 686, 679, 695, 1682, 1680, 639, 628, 2339, 647, 644, 1645, 1643, 1640, 1648, 602, 600, 597, 595, 2320, 593, 2318, 609, 607, 604, 1611, 1610, 1608, 1606, 613, 1615, 1613, 2328, 926, 924, 892, 886, 899, 857, 850, 2505, 1778, 824, 823, 821, 819, 2488, 818, 2486, 833, 831, 828, 840, 1761, 1759, 2649, 2632, 2630, 2746, 2734, 2732, 2782, 2781, 570, 567, 1587, 531, 527, 523, 540, 1566, 1564, 476, 467, 463, 2240, 486, 483, 1524, 1521, 1518, 1529, 411, 403, 2192, 399, 2189, 423, 416, 1462, 1457, 1454, 428, 1468, 1465, 2210, 366, 363, 2158, 360, 2156, 357, 2153, 376, 373, 370, 2163, 1410, 1409, 1407, 1405, 382, 1402, 380, 1417, 1415, 1412, 1421, 2175, 2174, 777, 774, 771, 784, 732, 725, 722, 2404, 743, 1716, 676, 674, 668, 2363, 665, 2360, 685, 1684, 1681, 626, 624, 622, 2335, 620, 2333, 617, 2330, 641, 635, 649, 1646, 1644, 1642, 2566, 928, 925, 2530, 2527, 894, 891, 888, 2501, 2499, 2496, 858, 856, 854, 851, 1779, 2692, 2668, 2665, 2645, 2643, 2640, 2651, 2768, 2759, 2757, 2744, 2743, 2741, 2748, 352, 1382, 340, 337, 333, 1371, 1369, 307, 300, 296, 2126, 315, 312, 1347, 1342, 1350, 261, 258, 250, 2097, 246, 2094, 271, 268, 264, 1306, 1301, 1298, 276, 1312, 1309, 2115, 203, 2048, 195, 2045, 191, 2041, 213, 209, 2056, 1246, 1244, 1238, 225, 1234, 222, 1256, 1253, 1249, 1262, 2080, 2079, 154, 1997, 150, 1995, 147, 1992, 1989, 163, 160, 2004, 156, 2001, 1175, 1174, 1172, 1170, 1167, 170, 1164, 167, 1185, 1183, 1180, 1177, 174, 1190, 1188, 2025, 2024, 2022, 587, 586, 564, 559, 556, 2290, 573, 1588, 520, 518, 512, 2268, 508, 2265, 530, 1568, 1565, 461, 457, 2233, 450, 2230, 446, 2226, 479, 471, 489, 1526, 1523, 1520, 397, 395, 2185, 392, 2183, 389, 2180, 2177, 410, 2194, 402, 422, 1463, 1461, 1459, 1456, 1470, 2455, 799, 2433, 2430, 779, 776, 773, 2397, 2394, 2390, 734, 728, 724, 746, 1717, 2356, 2354, 2351, 2348, 1658, 677, 675, 673, 670, 667, 688, 1685, 1683, 2606, 2589, 2586, 2559, 2556, 2552, 927, 2523, 2521, 2518, 2515, 1784, 2532, 895, 893, 890, 2718, 2709, 2707, 2689, 2687, 2684, 2663, 2662, 2660, 2658, 1825, 2667, 2769, 1852, 2760, 2758, 142, 141, 1139, 1138, 134, 132, 129, 126, 1982, 1129, 1128, 1126, 1131, 113, 111, 108, 105, 1972, 101, 1970, 120, 118, 115, 1109, 1108, 1106, 1104, 123, 1113, 1111, 82, 79, 1951, 75, 1949, 72, 1946, 92, 89, 86, 1956, 1077, 1076, 1074, 1072, 98, 1069, 96, 1084, 1082, 1079, 1088, 1968, 1967, 48, 45, 1916, 42, 1914, 39, 1911, 1908, 60, 57, 54, 1923, 50, 1920, 1031, 1030, 1028, 1026, 67, 1023, 65, 1020, 62, 1041, 1039, 1036, 1033, 69, 1046, 1044, 1944, 1943, 1941, 11, 9, 1868, 7, 1865, 1862, 1859, 20, 1878, 16, 1875, 13, 1872, 970, 968, 966, 963, 29, 960, 26, 23, 983, 981, 978, 975, 33, 971, 31, 990, 988, 985, 1906, 1904, 1902, 993, 351, 2145, 1383, 331, 330, 328, 326, 2137, 323, 2135, 339, 1372, 1370, 294, 293, 291, 289, 2122, 286, 2120, 283, 2117, 309, 303, 317, 1348, 1346, 1344, 245, 244, 242, 2090, 239, 2088, 236, 2085, 2082, 260, 2099, 249, 270, 1307, 1305, 1303, 1300, 1314, 189, 2038, 186, 2036, 183, 2033, 2030, 2026, 206, 198, 2047, 194, 216, 1247, 1245, 1243, 1240, 227, 1237, 1255, 2310, 2302, 2300, 2286, 2284, 2281, 565, 563, 561, 558, 575, 1589, 2261, 2259, 2256, 2253, 1542, 521, 519, 517, 514, 2270, 511, 533, 1569, 1567, 2223, 2221, 2218, 2215, 1483, 2211, 1480, 459, 456, 453, 2232, 449, 474, 491, 1527, 1525, 1522, 2475, 2467, 2465, 2451, 2449, 2446, 801, 800, 2426, 2424, 2421, 2418, 1723, 2435, 780, 778, 775, 2387, 2385, 2382, 2379, 1695, 2375, 1693, 2396, 735, 733, 730, 727, 749, 1718, 2616, 2615, 2604, 2603, 2601, 2584, 2583, 2581, 2579, 1800, 2591, 2550, 2549, 2547, 2545, 1792, 2542, 1790, 2558, 929, 2719, 1841, 2710, 2708, 1833, 1831, 2690, 2688, 2686, 1815, 1809, 1808, 1774, 1756, 1754, 1737, 1736, 1734, 1739, 1816, 1711, 1676, 1674, 633, 629, 1638, 1636, 1633, 1641, 598, 1605, 1604, 1602, 1600, 605, 1609, 1607, 2327, 887, 853, 1775, 822, 820, 1757, 1755, 1584, 524, 1560, 1558, 468, 464, 1514, 1511, 1508, 1519, 408, 404, 400, 1452, 1447, 1444, 417, 1458, 1455, 2208, 364, 361, 358, 2154, 1401, 1400, 1398, 1396, 374, 1393, 371, 1408, 1406, 1403, 1413, 2173, 2172, 772, 726, 723, 1712, 672, 669, 666, 682, 1678, 1675, 625, 623, 621, 618, 2331, 636, 632, 1639, 1637, 1635, 920, 918, 884, 880, 889, 849, 848, 847, 846, 2497, 855, 852, 1776, 2641, 2742, 2787, 1380, 334, 1367, 1365, 301, 297, 1340, 1338, 1335, 1343, 255, 251, 247, 1296, 1291, 1288, 265, 1302, 1299, 2113, 204, 196, 192, 2042, 1232, 1230, 1224, 214, 1220, 210, 1242, 1239, 1235, 1250, 2077, 2075, 151, 148, 1993, 144, 1990, 1163, 1162, 1160, 1158, 1155, 161, 1152, 157, 1173, 1171, 1168, 1165, 168, 1181, 1178, 2021, 2020, 2018, 2023, 585, 560, 557, 1585, 516, 509, 1562, 1559, 458, 447, 2227, 472, 1516, 1513, 1510, 398, 396, 393, 390, 2181, 386, 2178, 407, 1453, 1451, 1449, 1446, 420, 1460, 2209, 769, 764, 720, 712, 2391, 729, 1713, 664, 663, 661, 659, 2352, 656, 2349, 671, 1679, 1677, 2553, 922, 919, 2519, 2516, 885, 883, 881, 2685, 2661, 2659, 2767, 2756, 2755, 140, 1137, 1136, 130, 127, 1125, 1124, 1122, 1127, 109, 106, 102, 1103, 1102, 1100, 1098, 116, 1107, 1105, 1980, 80, 76, 73, 1947, 1068, 1067, 1065, 1063, 90, 1060, 87, 1075, 1073, 1070, 1080, 1966, 1965, 46, 43, 40, 1912, 36, 1909, 1019, 1018, 1016, 1014, 58, 1011, 55, 1008, 51, 1029, 1027, 1024, 1021, 63, 1037, 1034, 1940, 1939, 1937, 1942, 8, 1866, 4, 1863, 1, 1860, 956, 954, 952, 949, 946, 17, 14, 969, 967, 964, 961, 27, 957, 24, 979, 976, 972, 1901, 1900, 1898, 1896, 986, 1905, 1903, 350, 349, 1381, 329, 327, 324, 1368, 1366, 292, 290, 287, 284, 2118, 304, 1341, 1339, 1337, 1345, 243, 240, 237, 2086, 233, 2083, 254, 1297, 1295, 1293, 1290, 1304, 2114, 190, 187, 184, 2034, 180, 2031, 177, 2027, 199, 1233, 1231, 1229, 1226, 217, 1223, 1241, 2078, 2076, 584, 555, 554, 552, 550, 2282, 562, 1586, 507, 506, 504, 502, 2257, 499, 2254, 515, 1563, 1561, 445, 443, 441, 2219, 438, 2216, 435, 2212, 460, 454, 475, 1517, 1515, 1512, 2447, 798, 797, 2422, 2419, 770, 768, 766, 2383, 2380, 2376, 721, 719, 717, 714, 731, 1714, 2602, 2582, 2580, 2548, 2546, 2543, 923, 921, 2717, 2706, 2705, 2683, 2682, 2680, 1771, 1752, 1750, 1733, 1732, 1731, 1735, 1814, 1707, 1670, 1668, 1631, 1629, 1626, 1634, 1599, 1598, 1596, 1594, 1603, 1601, 2326, 1772, 1753, 1751, 1581, 1554, 1552, 1504, 1501, 1498, 1509, 1442, 1437, 1434, 401, 1448, 1445, 2206, 1392, 1391, 1389, 1387, 1384, 359, 1399, 1397, 1394, 1404, 2171, 2170, 1708, 1672, 1669, 619, 1632, 1630, 1628, 1773, 1378, 1363, 1361, 1333, 1328, 1336, 1286, 1281, 1278, 248, 1292, 1289, 2111, 1218, 1216, 1210, 197, 1206, 193, 1228, 1225, 1221, 1236, 2073, 2071, 1151, 1150, 1148, 1146, 152, 1143, 149, 1140, 145, 1161, 1159, 1156, 1153, 158, 1169, 1166, 2017, 2016, 2014, 2019, 1582, 510, 1556, 1553, 452, 448, 1506, 1500, 394, 391, 387, 1443, 1441, 1439, 1436, 1450, 2207, 765, 716, 713, 1709, 662, 660, 657, 1673, 1671, 916, 914, 879, 878, 877, 882, 1135, 1134, 1121, 1120, 1118, 1123, 1097, 1096, 1094, 1092, 103, 1101, 1099, 1979, 1059, 1058, 1056, 1054, 77, 1051, 74, 1066, 1064, 1061, 1071, 1964, 1963, 1007, 1006, 1004, 1002, 999, 41, 996, 37, 1017, 1015, 1012, 1009, 52, 1025, 1022, 1936, 1935, 1933, 1938, 942, 940, 938, 935, 932, 5, 2, 955, 953, 950, 947, 18, 943, 15, 965, 962, 958, 1895, 1894, 1892, 1890, 973, 1899, 1897, 1379, 325, 1364, 1362, 288, 285, 1334, 1332, 1330, 241, 238, 234, 1287, 1285, 1283, 1280, 1294, 2112, 188, 185, 181, 178, 2028, 1219, 1217, 1215, 1212, 200, 1209, 1227, 2074, 2072, 583, 553, 551, 1583, 505, 503, 500, 513, 1557, 1555, 444, 442, 439, 436, 2213, 455, 451, 1507, 1505, 1502, 796, 763, 762, 760, 767, 711, 710, 708, 706, 2377, 718, 715, 1710, 2544, 917, 915, 2681, 1627, 1597, 1595, 2325, 1769, 1749, 1747, 1499, 1438, 1435, 2204, 1390, 1388, 1385, 1395, 2169, 2167, 1704, 1665, 1662, 1625, 1623, 1620, 1770, 1329, 1282, 1279, 2109, 1214, 1207, 1222, 2068, 2065, 1149, 1147, 1144, 1141, 146, 1157, 1154, 2013, 2011, 2008, 2015, 1579, 1549, 1546, 1495, 1487, 1433, 1431, 1428, 1425, 388, 1440, 2205, 1705, 658, 1667, 1664, 1119, 1095, 1093, 1978, 1057, 1055, 1052, 1062, 1962, 1960, 1005, 1003, 1e3, 997, 38, 1013, 1010, 1932, 1930, 1927, 1934, 941, 939, 936, 933, 6, 930, 3, 951, 948, 944, 1889, 1887, 1884, 1881, 959, 1893, 1891, 35, 1377, 1360, 1358, 1327, 1325, 1322, 1331, 1277, 1275, 1272, 1269, 235, 1284, 2110, 1205, 1204, 1201, 1198, 182, 1195, 179, 1213, 2070, 2067, 1580, 501, 1551, 1548, 440, 437, 1497, 1494, 1490, 1503, 761, 709, 707, 1706, 913, 912, 2198, 1386, 2164, 2161, 1621, 1766, 2103, 1208, 2058, 2054, 1145, 1142, 2005, 2002, 1999, 2009, 1488, 1429, 1426, 2200, 1698, 1659, 1656, 1975, 1053, 1957, 1954, 1001, 998, 1924, 1921, 1918, 1928, 937, 934, 931, 1879, 1876, 1873, 1870, 945, 1885, 1882, 1323, 1273, 1270, 2105, 1202, 1199, 1196, 1211, 2061, 2057, 1576, 1543, 1540, 1484, 1481, 1478, 1491, 1700]); + +class be { + constructor(t, e) { + this.bits = t, this.points = e + } + + getBits() { + return this.bits + } + + getPoints() { + return this.points + } +} + +class Pe { + static detectMultiple(t, e, r) { + let n = t.getBlackMatrix(), i = Pe.detect(r, n); + return i.length || (n = n.clone(), n.rotate180(), i = Pe.detect(r, n)), new be(n, i) + } + + static detect(t, e) { + const r = new Array; + let n = 0, i = 0, s = !1; + for (; n < e.getHeight();) { + const o = Pe.findVertices(e, n, i); + if (null != o[0] || null != o[3]) { + if (s = !0, r.push(o), !t) break; + null != o[2] ? (i = Math.trunc(o[2].getX()), n = Math.trunc(o[2].getY())) : (i = Math.trunc(o[4].getX()), n = Math.trunc(o[4].getY())) + } else { + if (!s) break; + s = !1, i = 0; + for (const t of r) null != t[1] && (n = Math.trunc(Math.max(n, t[1].getY()))), null != t[3] && (n = Math.max(n, Math.trunc(t[3].getY()))); + n += Pe.ROW_STEP + } + } + return r + } + + static findVertices(t, e, r) { + const n = t.getHeight(), i = t.getWidth(), s = new Array(8); + return Pe.copyToResult(s, Pe.findRowsWithPattern(t, n, i, e, r, Pe.START_PATTERN), Pe.INDEXES_START_PATTERN), null != s[4] && (r = Math.trunc(s[4].getX()), e = Math.trunc(s[4].getY())), Pe.copyToResult(s, Pe.findRowsWithPattern(t, n, i, e, r, Pe.STOP_PATTERN), Pe.INDEXES_STOP_PATTERN), s + } + + static copyToResult(t, e, r) { + for (let n = 0; n < r.length; n++) t[r[n]] = e[n] + } + + static findRowsWithPattern(t, e, r, n, i, s) { + const o = new Array(4); + let a = !1; + const l = new Int32Array(s.length); + for (; n < e; n += Pe.ROW_STEP) { + let e = Pe.findGuardPattern(t, i, n, r, !1, s, l); + if (null != e) { + for (; n > 0;) { + const o = Pe.findGuardPattern(t, i, --n, r, !1, s, l); + if (null == o) { + n++; + break + } + e = o + } + o[0] = new rt(e[0], n), o[1] = new rt(e[1], n), a = !0; + break + } + } + let h = n + 1; + if (a) { + let n = 0, i = Int32Array.from([Math.trunc(o[0].getX()), Math.trunc(o[1].getX())]); + for (; h < e; h++) { + const e = Pe.findGuardPattern(t, i[0], h, r, !1, s, l); + if (null != e && Math.abs(i[0] - e[0]) < Pe.MAX_PATTERN_DRIFT && Math.abs(i[1] - e[1]) < Pe.MAX_PATTERN_DRIFT) i = e, n = 0; else { + if (n > Pe.SKIPPED_ROW_COUNT_MAX) break; + n++ + } + } + h -= n + 1, o[2] = new rt(i[0], h), o[3] = new rt(i[1], h) + } + return h - n < Pe.BARCODE_MIN_HEIGHT && g.fill(o, null), o + } + + static findGuardPattern(t, e, r, n, i, s, o) { + g.fillWithin(o, 0, o.length, 0); + let a = e, l = 0; + for (; t.get(a, r) && a > 0 && l++ < Pe.MAX_PIXEL_DRIFT;) a--; + let h = a, u = 0, d = s.length; + for (let e = i; h < n; h++) { + if (t.get(h, r) !== e) o[u]++; else { + if (u === d - 1) { + if (Pe.patternMatchVariance(o, s, Pe.MAX_INDIVIDUAL_VARIANCE) < Pe.MAX_AVG_VARIANCE) return new Int32Array([a, h]); + a += o[0] + o[1], c.arraycopy(o, 2, o, 0, u - 1), o[u - 1] = 0, o[u] = 0, u-- + } else u++; + o[u] = 1, e = !e + } + } + return u === d - 1 && Pe.patternMatchVariance(o, s, Pe.MAX_INDIVIDUAL_VARIANCE) < Pe.MAX_AVG_VARIANCE ? new Int32Array([a, h - 1]) : null + } + + static patternMatchVariance(t, e, r) { + let n = t.length, i = 0, s = 0; + for (let r = 0; r < n; r++) i += t[r], s += e[r]; + if (i < s) return 1 / 0; + let o = i / s; + r *= o; + let a = 0; + for (let i = 0; i < n; i++) { + let n = t[i], s = e[i] * o, l = n > s ? n - s : s - n; + if (l > r) return 1 / 0; + a += l + } + return a / i + } +} + +Pe.INDEXES_START_PATTERN = Int32Array.from([0, 4, 1, 5]), Pe.INDEXES_STOP_PATTERN = Int32Array.from([6, 2, 7, 3]), Pe.MAX_AVG_VARIANCE = .42, Pe.MAX_INDIVIDUAL_VARIANCE = .8, Pe.START_PATTERN = Int32Array.from([8, 1, 1, 1, 1, 1, 1, 3]), Pe.STOP_PATTERN = Int32Array.from([7, 1, 1, 3, 1, 1, 1, 2, 1]), Pe.MAX_PIXEL_DRIFT = 3, Pe.MAX_PATTERN_DRIFT = 5, Pe.SKIPPED_ROW_COUNT_MAX = 25, Pe.ROW_STEP = 5, Pe.BARCODE_MIN_HEIGHT = 10; + +class Le { + constructor(t, e) { + if (0 === e.length) throw new o; + this.field = t; + let r = e.length; + if (r > 1 && 0 === e[0]) { + let t = 1; + for (; t < r && 0 === e[t];) t++; + t === r ? this.coefficients = new Int32Array([0]) : (this.coefficients = new Int32Array(r - t), c.arraycopy(e, t, this.coefficients, 0, this.coefficients.length)) + } else this.coefficients = e + } + + getCoefficients() { + return this.coefficients + } + + getDegree() { + return this.coefficients.length - 1 + } + + isZero() { + return 0 === this.coefficients[0] + } + + getCoefficient(t) { + return this.coefficients[this.coefficients.length - 1 - t] + } + + evaluateAt(t) { + if (0 === t) return this.getCoefficient(0); + if (1 === t) { + let t = 0; + for (let e of this.coefficients) t = this.field.add(t, e); + return t + } + let e = this.coefficients[0], r = this.coefficients.length; + for (let n = 1; n < r; n++) e = this.field.add(this.field.multiply(t, e), this.coefficients[n]); + return e + } + + add(t) { + if (!this.field.equals(t.field)) throw new o("ModulusPolys do not have same ModulusGF field"); + if (this.isZero()) return t; + if (t.isZero()) return this; + let e = this.coefficients, r = t.coefficients; + if (e.length > r.length) { + let t = e; + e = r, r = t + } + let n = new Int32Array(r.length), i = r.length - e.length; + c.arraycopy(r, 0, n, 0, i); + for (let t = i; t < r.length; t++) n[t] = this.field.add(e[t - i], r[t]); + return new Le(this.field, n) + } + + subtract(t) { + if (!this.field.equals(t.field)) throw new o("ModulusPolys do not have same ModulusGF field"); + return t.isZero() ? this : this.add(t.negative()) + } + + multiply(t) { + return t instanceof Le ? this.multiplyOther(t) : this.multiplyScalar(t) + } + + multiplyOther(t) { + if (!this.field.equals(t.field)) throw new o("ModulusPolys do not have same ModulusGF field"); + if (this.isZero() || t.isZero()) return new Le(this.field, new Int32Array([0])); + let e = this.coefficients, r = e.length, n = t.coefficients, i = n.length, s = new Int32Array(r + i - 1); + for (let t = 0; t < r; t++) { + let r = e[t]; + for (let e = 0; e < i; e++) s[t + e] = this.field.add(s[t + e], this.field.multiply(r, n[e])) + } + return new Le(this.field, s) + } + + negative() { + let t = this.coefficients.length, e = new Int32Array(t); + for (let r = 0; r < t; r++) e[r] = this.field.subtract(0, this.coefficients[r]); + return new Le(this.field, e) + } + + multiplyScalar(t) { + if (0 === t) return new Le(this.field, new Int32Array([0])); + if (1 === t) return this; + let e = this.coefficients.length, r = new Int32Array(e); + for (let n = 0; n < e; n++) r[n] = this.field.multiply(this.coefficients[n], t); + return new Le(this.field, r) + } + + multiplyByMonomial(t, e) { + if (t < 0) throw new o; + if (0 === e) return new Le(this.field, new Int32Array([0])); + let r = this.coefficients.length, n = new Int32Array(r + t); + for (let t = 0; t < r; t++) n[t] = this.field.multiply(this.coefficients[t], e); + return new Le(this.field, n) + } + + toString() { + let t = new p; + for (let e = this.getDegree(); e >= 0; e--) { + let r = this.getCoefficient(e); + 0 !== r && (r < 0 ? (t.append(" - "), r = -r) : t.length() > 0 && t.append(" + "), 0 !== e && 1 === r || t.append(r), 0 !== e && (1 === e ? t.append("x") : (t.append("x^"), t.append(e)))) + } + return t.toString() + } +} + +class Fe extends class { + add(t, e) { + return (t + e) % this.modulus + } + + subtract(t, e) { + return (this.modulus + t - e) % this.modulus + } + + exp(t) { + return this.expTable[t] + } + + log(t) { + if (0 === t) throw new o; + return this.logTable[t] + } + + inverse(t) { + if (0 === t) throw new K; + return this.expTable[this.modulus - this.logTable[t] - 1] + } + + multiply(t, e) { + return 0 === t || 0 === e ? 0 : this.expTable[(this.logTable[t] + this.logTable[e]) % (this.modulus - 1)] + } + + getSize() { + return this.modulus + } + + equals(t) { + return t === this + } +} { + constructor(t, e) { + super(), this.modulus = t, this.expTable = new Int32Array(t), this.logTable = new Int32Array(t); + let r = 1; + for (let n = 0; n < t; n++) this.expTable[n] = r, r = r * e % t; + for (let e = 0; e < t - 1; e++) this.logTable[this.expTable[e]] = e; + this.zero = new Le(this, new Int32Array([0])), this.one = new Le(this, new Int32Array([1])) + } + + getZero() { + return this.zero + } + + getOne() { + return this.one + } + + buildMonomial(t, e) { + if (t < 0) throw new o; + if (0 === e) return this.zero; + let r = new Int32Array(t + 1); + return r[0] = e, new Le(this, r) + } +} + +Fe.PDF417_GF = new Fe(Be.NUMBER_OF_CODEWORDS, 3); + +class ke { + constructor() { + this.field = Fe.PDF417_GF + } + + decode(t, e, r) { + let n = new Le(this.field, t), i = new Int32Array(e), s = !1; + for (let t = e; t > 0; t--) { + let r = n.evaluateAt(this.field.exp(t)); + i[e - t] = r, 0 !== r && (s = !0) + } + if (!s) return 0; + let o = this.field.getOne(); + if (null != r) for (const e of r) { + let r = this.field.exp(t.length - 1 - e), + n = new Le(this.field, new Int32Array([this.field.subtract(0, r), 1])); + o = o.multiply(n) + } + let a = new Le(this.field, i), h = this.runEuclideanAlgorithm(this.field.buildMonomial(e, 1), a, e), c = h[0], + u = h[1], d = this.findErrorLocations(c), g = this.findErrorMagnitudes(u, c, d); + for (let e = 0; e < d.length; e++) { + let r = t.length - 1 - this.field.log(d[e]); + if (r < 0) throw l.getChecksumInstance(); + t[r] = this.field.subtract(t[r], g[e]) + } + return d.length + } + + runEuclideanAlgorithm(t, e, r) { + if (t.getDegree() < e.getDegree()) { + let r = t; + t = e, e = r + } + let n = t, i = e, s = this.field.getZero(), o = this.field.getOne(); + for (; i.getDegree() >= Math.round(r / 2);) { + let t = n, e = s; + if (n = i, s = o, n.isZero()) throw l.getChecksumInstance(); + i = t; + let r = this.field.getZero(), a = n.getCoefficient(n.getDegree()), h = this.field.inverse(a); + for (; i.getDegree() >= n.getDegree() && !i.isZero();) { + let t = i.getDegree() - n.getDegree(), e = this.field.multiply(i.getCoefficient(i.getDegree()), h); + r = r.add(this.field.buildMonomial(t, e)), i = i.subtract(n.multiplyByMonomial(t, e)) + } + o = r.multiply(s).subtract(e).negative() + } + let a = o.getCoefficient(0); + if (0 === a) throw l.getChecksumInstance(); + let h = this.field.inverse(a); + return [o.multiply(h), i.multiply(h)] + } + + findErrorLocations(t) { + let e = t.getDegree(), r = new Int32Array(e), n = 0; + for (let i = 1; i < this.field.getSize() && n < e; i++) 0 === t.evaluateAt(i) && (r[n] = this.field.inverse(i), n++); + if (n !== e) throw l.getChecksumInstance(); + return r + } + + findErrorMagnitudes(t, e, r) { + let n = e.getDegree(), i = new Int32Array(n); + for (let t = 1; t <= n; t++) i[n - t] = this.field.multiply(t, e.getCoefficient(t)); + let s = new Le(this.field, i), o = r.length, a = new Int32Array(o); + for (let e = 0; e < o; e++) { + let n = this.field.inverse(r[e]), i = this.field.subtract(0, t.evaluateAt(n)), + o = this.field.inverse(s.evaluateAt(n)); + a[e] = this.field.multiply(i, o) + } + return a + } +} + +class ve { + constructor(t, e, r, n, i) { + t instanceof ve ? this.constructor_2(t) : this.constructor_1(t, e, r, n, i) + } + + constructor_1(t, e, r, n, i) { + const s = null == e || null == r, o = null == n || null == i; + if (s && o) throw new R; + s ? (e = new rt(0, n.getY()), r = new rt(0, i.getY())) : o && (n = new rt(t.getWidth() - 1, e.getY()), i = new rt(t.getWidth() - 1, r.getY())), this.image = t, this.topLeft = e, this.bottomLeft = r, this.topRight = n, this.bottomRight = i, this.minX = Math.trunc(Math.min(e.getX(), r.getX())), this.maxX = Math.trunc(Math.max(n.getX(), i.getX())), this.minY = Math.trunc(Math.min(e.getY(), n.getY())), this.maxY = Math.trunc(Math.max(r.getY(), i.getY())) + } + + constructor_2(t) { + this.image = t.image, this.topLeft = t.getTopLeft(), this.bottomLeft = t.getBottomLeft(), this.topRight = t.getTopRight(), this.bottomRight = t.getBottomRight(), this.minX = t.getMinX(), this.maxX = t.getMaxX(), this.minY = t.getMinY(), this.maxY = t.getMaxY() + } + + static merge(t, e) { + return null == t ? e : null == e ? t : new ve(t.image, t.topLeft, t.bottomLeft, e.topRight, e.bottomRight) + } + + addMissingRows(t, e, r) { + let n = this.topLeft, i = this.bottomLeft, s = this.topRight, o = this.bottomRight; + if (t > 0) { + let e = r ? this.topLeft : this.topRight, i = Math.trunc(e.getY() - t); + i < 0 && (i = 0); + let o = new rt(e.getX(), i); + r ? n = o : s = o + } + if (e > 0) { + let t = r ? this.bottomLeft : this.bottomRight, n = Math.trunc(t.getY() + e); + n >= this.image.getHeight() && (n = this.image.getHeight() - 1); + let s = new rt(t.getX(), n); + r ? i = s : o = s + } + return new ve(this.image, n, i, s, o) + } + + getMinX() { + return this.minX + } + + getMaxX() { + return this.maxX + } + + getMinY() { + return this.minY + } + + getMaxY() { + return this.maxY + } + + getTopLeft() { + return this.topLeft + } + + getTopRight() { + return this.topRight + } + + getBottomLeft() { + return this.bottomLeft + } + + getBottomRight() { + return this.bottomRight + } +} + +class xe { + constructor(t, e, r, n) { + this.columnCount = t, this.errorCorrectionLevel = n, this.rowCountUpperPart = e, this.rowCountLowerPart = r, this.rowCount = e + r + } + + getColumnCount() { + return this.columnCount + } + + getErrorCorrectionLevel() { + return this.errorCorrectionLevel + } + + getRowCount() { + return this.rowCount + } + + getRowCountUpperPart() { + return this.rowCountUpperPart + } + + getRowCountLowerPart() { + return this.rowCountLowerPart + } +} + +class Ve { + constructor() { + this.buffer = "" + } + + static form(t, e) { + let r = -1; + return t.replace(/%(-)?(0?[0-9]+)?([.][0-9]+)?([#][0-9]+)?([scfpexd%])/g, (function (t, n, i, s, o, a) { + if ("%%" === t) return "%"; + if (void 0 === e[++r]) return; + t = s ? parseInt(s.substr(1)) : void 0; + let l, h = o ? parseInt(o.substr(1)) : void 0; + switch (a) { + case"s": + l = e[r]; + break; + case"c": + l = e[r][0]; + break; + case"f": + l = parseFloat(e[r]).toFixed(t); + break; + case"p": + l = parseFloat(e[r]).toPrecision(t); + break; + case"e": + l = parseFloat(e[r]).toExponential(t); + break; + case"x": + l = parseInt(e[r]).toString(h || 16); + break; + case"d": + l = parseFloat(parseInt(e[r], h || 10).toPrecision(t)).toFixed(0) + } + l = "object" == typeof l ? JSON.stringify(l) : (+l).toString(h); + let c = parseInt(i), u = i && i[0] + "" == "0" ? "0" : " "; + for (; l.length < c;) l = void 0 !== n ? l + u : u + l; + return l + })) + } + + format(t, ...e) { + this.buffer += Ve.form(t, e) + } + + toString() { + return this.buffer + } +} + +class Ue { + constructor(t) { + this.boundingBox = new ve(t), this.codewords = new Array(t.getMaxY() - t.getMinY() + 1) + } + + getCodewordNearby(t) { + let e = this.getCodeword(t); + if (null != e) return e; + for (let r = 1; r < Ue.MAX_NEARBY_DISTANCE; r++) { + let n = this.imageRowToCodewordIndex(t) - r; + if (n >= 0 && (e = this.codewords[n], null != e)) return e; + if (n = this.imageRowToCodewordIndex(t) + r, n < this.codewords.length && (e = this.codewords[n], null != e)) return e + } + return null + } + + imageRowToCodewordIndex(t) { + return t - this.boundingBox.getMinY() + } + + setCodeword(t, e) { + this.codewords[this.imageRowToCodewordIndex(t)] = e + } + + getCodeword(t) { + return this.codewords[this.imageRowToCodewordIndex(t)] + } + + getBoundingBox() { + return this.boundingBox + } + + getCodewords() { + return this.codewords + } + + toString() { + const t = new Ve; + let e = 0; + for (const r of this.codewords) null != r ? t.format("%3d: %3d|%3d%n", e++, r.getRowNumber(), r.getValue()) : t.format("%3d: | %n", e++); + return t.toString() + } +} + +Ue.MAX_NEARBY_DISTANCE = 5; + +class He { + constructor() { + this.values = new Map + } + + setValue(t) { + t = Math.trunc(t); + let e = this.values.get(t); + null == e && (e = 0), e++, this.values.set(t, e) + } + + getValue() { + let t = -1, e = new Array; + for (const [r, n] of this.values.entries()) { + const i = {getKey: () => r, getValue: () => n}; + i.getValue() > t ? (t = i.getValue(), e = [], e.push(i.getKey())) : i.getValue() === t && e.push(i.getKey()) + } + return Be.toIntArray(e) + } + + getConfidence(t) { + return this.values.get(t) + } +} + +class Ge extends Ue { + constructor(t, e) { + super(t), this._isLeft = e + } + + setRowNumbers() { + for (let t of this.getCodewords()) null != t && t.setRowNumberAsRowIndicatorColumn() + } + + adjustCompleteIndicatorColumnRowNumbers(t) { + let e = this.getCodewords(); + this.setRowNumbers(), this.removeIncorrectCodewords(e, t); + let r = this.getBoundingBox(), n = this._isLeft ? r.getTopLeft() : r.getTopRight(), + i = this._isLeft ? r.getBottomLeft() : r.getBottomRight(), + s = this.imageRowToCodewordIndex(Math.trunc(n.getY())), + o = this.imageRowToCodewordIndex(Math.trunc(i.getY())), a = -1, l = 1, h = 0; + for (let r = s; r < o; r++) { + if (null == e[r]) continue; + let n = e[r], i = n.getRowNumber() - a; + if (0 === i) h++; else if (1 === i) l = Math.max(l, h), h = 1, a = n.getRowNumber(); else if (i < 0 || n.getRowNumber() >= t.getRowCount() || i > r) e[r] = null; else { + let t; + t = l > 2 ? (l - 2) * i : i; + let s = t >= r; + for (let n = 1; n <= t && !s; n++) s = null != e[r - n]; + s ? e[r] = null : (a = n.getRowNumber(), h = 1) + } + } + } + + getRowHeights() { + let t = this.getBarcodeMetadata(); + if (null == t) return null; + this.adjustIncompleteIndicatorColumnRowNumbers(t); + let e = new Int32Array(t.getRowCount()); + for (let t of this.getCodewords()) if (null != t) { + let r = t.getRowNumber(); + if (r >= e.length) continue; + e[r]++ + } + return e + } + + adjustIncompleteIndicatorColumnRowNumbers(t) { + let e = this.getBoundingBox(), r = this._isLeft ? e.getTopLeft() : e.getTopRight(), + n = this._isLeft ? e.getBottomLeft() : e.getBottomRight(), + i = this.imageRowToCodewordIndex(Math.trunc(r.getY())), + s = this.imageRowToCodewordIndex(Math.trunc(n.getY())), o = this.getCodewords(), a = -1; + for (let e = i; e < s; e++) { + if (null == o[e]) continue; + let r = o[e]; + r.setRowNumberAsRowIndicatorColumn(); + let n = r.getRowNumber() - a; + 0 === n || (1 === n ? a = r.getRowNumber() : r.getRowNumber() >= t.getRowCount() ? o[e] = null : a = r.getRowNumber()) + } + } + + getBarcodeMetadata() { + let t = this.getCodewords(), e = new He, r = new He, n = new He, i = new He; + for (let s of t) { + if (null == s) continue; + s.setRowNumberAsRowIndicatorColumn(); + let t = s.getValue() % 30, o = s.getRowNumber(); + switch (this._isLeft || (o += 2), o % 3) { + case 0: + r.setValue(3 * t + 1); + break; + case 1: + i.setValue(t / 3), n.setValue(t % 3); + break; + case 2: + e.setValue(t + 1) + } + } + if (0 === e.getValue().length || 0 === r.getValue().length || 0 === n.getValue().length || 0 === i.getValue().length || e.getValue()[0] < 1 || r.getValue()[0] + n.getValue()[0] < Be.MIN_ROWS_IN_BARCODE || r.getValue()[0] + n.getValue()[0] > Be.MAX_ROWS_IN_BARCODE) return null; + let s = new xe(e.getValue()[0], r.getValue()[0], n.getValue()[0], i.getValue()[0]); + return this.removeIncorrectCodewords(t, s), s + } + + removeIncorrectCodewords(t, e) { + for (let r = 0; r < t.length; r++) { + let n = t[r]; + if (null == t[r]) continue; + let i = n.getValue() % 30, s = n.getRowNumber(); + if (s > e.getRowCount()) t[r] = null; else switch (this._isLeft || (s += 2), s % 3) { + case 0: + 3 * i + 1 !== e.getRowCountUpperPart() && (t[r] = null); + break; + case 1: + Math.trunc(i / 3) === e.getErrorCorrectionLevel() && i % 3 === e.getRowCountLowerPart() || (t[r] = null); + break; + case 2: + i + 1 !== e.getColumnCount() && (t[r] = null) + } + } + } + + isLeft() { + return this._isLeft + } + + toString() { + return "IsLeft: " + this._isLeft + "\n" + super.toString() + } +} + +class Xe { + constructor(t, e) { + this.ADJUST_ROW_NUMBER_SKIP = 2, this.barcodeMetadata = t, this.barcodeColumnCount = t.getColumnCount(), this.boundingBox = e, this.detectionResultColumns = new Array(this.barcodeColumnCount + 2) + } + + getDetectionResultColumns() { + this.adjustIndicatorColumnRowNumbers(this.detectionResultColumns[0]), this.adjustIndicatorColumnRowNumbers(this.detectionResultColumns[this.barcodeColumnCount + 1]); + let t, e = Be.MAX_CODEWORDS_IN_BARCODE; + do { + t = e, e = this.adjustRowNumbersAndGetCount() + } while (e > 0 && e < t); + return this.detectionResultColumns + } + + adjustIndicatorColumnRowNumbers(t) { + null != t && t.adjustCompleteIndicatorColumnRowNumbers(this.barcodeMetadata) + } + + adjustRowNumbersAndGetCount() { + let t = this.adjustRowNumbersByRow(); + if (0 === t) return 0; + for (let t = 1; t < this.barcodeColumnCount + 1; t++) { + let e = this.detectionResultColumns[t].getCodewords(); + for (let r = 0; r < e.length; r++) null != e[r] && (e[r].hasValidRowNumber() || this.adjustRowNumbers(t, r, e)) + } + return t + } + + adjustRowNumbersByRow() { + return this.adjustRowNumbersFromBothRI(), this.adjustRowNumbersFromLRI() + this.adjustRowNumbersFromRRI() + } + + adjustRowNumbersFromBothRI() { + if (null == this.detectionResultColumns[0] || null == this.detectionResultColumns[this.barcodeColumnCount + 1]) return; + let t = this.detectionResultColumns[0].getCodewords(), + e = this.detectionResultColumns[this.barcodeColumnCount + 1].getCodewords(); + for (let r = 0; r < t.length; r++) if (null != t[r] && null != e[r] && t[r].getRowNumber() === e[r].getRowNumber()) for (let e = 1; e <= this.barcodeColumnCount; e++) { + let n = this.detectionResultColumns[e].getCodewords()[r]; + null != n && (n.setRowNumber(t[r].getRowNumber()), n.hasValidRowNumber() || (this.detectionResultColumns[e].getCodewords()[r] = null)) + } + } + + adjustRowNumbersFromRRI() { + if (null == this.detectionResultColumns[this.barcodeColumnCount + 1]) return 0; + let t = 0, e = this.detectionResultColumns[this.barcodeColumnCount + 1].getCodewords(); + for (let r = 0; r < e.length; r++) { + if (null == e[r]) continue; + let n = e[r].getRowNumber(), i = 0; + for (let e = this.barcodeColumnCount + 1; e > 0 && i < this.ADJUST_ROW_NUMBER_SKIP; e--) { + let s = this.detectionResultColumns[e].getCodewords()[r]; + null != s && (i = Xe.adjustRowNumberIfValid(n, i, s), s.hasValidRowNumber() || t++) + } + } + return t + } + + adjustRowNumbersFromLRI() { + if (null == this.detectionResultColumns[0]) return 0; + let t = 0, e = this.detectionResultColumns[0].getCodewords(); + for (let r = 0; r < e.length; r++) { + if (null == e[r]) continue; + let n = e[r].getRowNumber(), i = 0; + for (let e = 1; e < this.barcodeColumnCount + 1 && i < this.ADJUST_ROW_NUMBER_SKIP; e++) { + let s = this.detectionResultColumns[e].getCodewords()[r]; + null != s && (i = Xe.adjustRowNumberIfValid(n, i, s), s.hasValidRowNumber() || t++) + } + } + return t + } + + static adjustRowNumberIfValid(t, e, r) { + return null == r || r.hasValidRowNumber() || (r.isValidRowNumber(t) ? (r.setRowNumber(t), e = 0) : ++e), e + } + + adjustRowNumbers(t, e, r) { + let n = r[e], i = this.detectionResultColumns[t - 1].getCodewords(), s = i; + null != this.detectionResultColumns[t + 1] && (s = this.detectionResultColumns[t + 1].getCodewords()); + let o = new Array(14); + o[2] = i[e], o[3] = s[e], e > 0 && (o[0] = r[e - 1], o[4] = i[e - 1], o[5] = s[e - 1]), e > 1 && (o[8] = r[e - 2], o[10] = i[e - 2], o[11] = s[e - 2]), e < r.length - 1 && (o[1] = r[e + 1], o[6] = i[e + 1], o[7] = s[e + 1]), e < r.length - 2 && (o[9] = r[e + 2], o[12] = i[e + 2], o[13] = s[e + 2]); + for (let t of o) if (Xe.adjustRowNumber(n, t)) return + } + + static adjustRowNumber(t, e) { + return null != e && (!(!e.hasValidRowNumber() || e.getBucket() !== t.getBucket()) && (t.setRowNumber(e.getRowNumber()), !0)) + } + + getBarcodeColumnCount() { + return this.barcodeColumnCount + } + + getBarcodeRowCount() { + return this.barcodeMetadata.getRowCount() + } + + getBarcodeECLevel() { + return this.barcodeMetadata.getErrorCorrectionLevel() + } + + setBoundingBox(t) { + this.boundingBox = t + } + + getBoundingBox() { + return this.boundingBox + } + + setDetectionResultColumn(t, e) { + this.detectionResultColumns[t] = e + } + + getDetectionResultColumn(t) { + return this.detectionResultColumns[t] + } + + toString() { + let t = this.detectionResultColumns[0]; + null == t && (t = this.detectionResultColumns[this.barcodeColumnCount + 1]); + let e = new Ve; + for (let r = 0; r < t.getCodewords().length; r++) { + e.format("CW %3d:", r); + for (let t = 0; t < this.barcodeColumnCount + 2; t++) { + if (null == this.detectionResultColumns[t]) { + e.format(" | "); + continue + } + let n = this.detectionResultColumns[t].getCodewords()[r]; + null != n ? e.format(" %3d|%3d", n.getRowNumber(), n.getValue()) : e.format(" | ") + } + e.format("%n") + } + return e.toString() + } +} + +class We { + constructor(t, e, r, n) { + this.rowNumber = We.BARCODE_ROW_UNKNOWN, this.startX = Math.trunc(t), this.endX = Math.trunc(e), this.bucket = Math.trunc(r), this.value = Math.trunc(n) + } + + hasValidRowNumber() { + return this.isValidRowNumber(this.rowNumber) + } + + isValidRowNumber(t) { + return t !== We.BARCODE_ROW_UNKNOWN && this.bucket === t % 3 * 3 + } + + setRowNumberAsRowIndicatorColumn() { + this.rowNumber = Math.trunc(3 * Math.trunc(this.value / 30) + Math.trunc(this.bucket / 3)) + } + + getWidth() { + return this.endX - this.startX + } + + getStartX() { + return this.startX + } + + getEndX() { + return this.endX + } + + getBucket() { + return this.bucket + } + + getValue() { + return this.value + } + + getRowNumber() { + return this.rowNumber + } + + setRowNumber(t) { + this.rowNumber = t + } + + toString() { + return this.rowNumber + "|" + this.value + } +} + +We.BARCODE_ROW_UNKNOWN = -1; + +class ze { + static initialize() { + for (let t = 0; t < Be.SYMBOL_TABLE.length; t++) { + let e = Be.SYMBOL_TABLE[t], r = 1 & e; + for (let n = 0; n < Be.BARS_IN_MODULE; n++) { + let i = 0; + for (; (1 & e) === r;) i += 1, e >>= 1; + r = 1 & e, ze.RATIOS_TABLE[t] || (ze.RATIOS_TABLE[t] = new Array(Be.BARS_IN_MODULE)), ze.RATIOS_TABLE[t][Be.BARS_IN_MODULE - n - 1] = Math.fround(i / Be.MODULES_IN_CODEWORD) + } + } + this.bSymbolTableReady = !0 + } + + static getDecodedValue(t) { + let e = ze.getDecodedCodewordValue(ze.sampleBitCounts(t)); + return -1 !== e ? e : ze.getClosestDecodedValue(t) + } + + static sampleBitCounts(t) { + let e = tt.sum(t), r = new Int32Array(Be.BARS_IN_MODULE), n = 0, i = 0; + for (let s = 0; s < Be.MODULES_IN_CODEWORD; s++) { + let o = e / (2 * Be.MODULES_IN_CODEWORD) + s * e / Be.MODULES_IN_CODEWORD; + i + t[n] <= o && (i += t[n], n++), r[n]++ + } + return r + } + + static getDecodedCodewordValue(t) { + let e = ze.getBitValue(t); + return -1 === Be.getCodeword(e) ? -1 : e + } + + static getBitValue(t) { + let e = 0; + for (let r = 0; r < t.length; r++) for (let n = 0; n < t[r]; n++) e = e << 1 | (r % 2 == 0 ? 1 : 0); + return Math.trunc(e) + } + + static getClosestDecodedValue(t) { + let e = tt.sum(t), r = new Array(Be.BARS_IN_MODULE); + if (e > 1) for (let n = 0; n < r.length; n++) r[n] = Math.fround(t[n] / e); + let n = et.MAX_VALUE, i = -1; + this.bSymbolTableReady || ze.initialize(); + for (let t = 0; t < ze.RATIOS_TABLE.length; t++) { + let e = 0, s = ze.RATIOS_TABLE[t]; + for (let t = 0; t < Be.BARS_IN_MODULE; t++) { + let i = Math.fround(s[t] - r[t]); + if (e += Math.fround(i * i), e >= n) break + } + e < n && (n = e, i = Be.SYMBOL_TABLE[t]) + } + return i + } +} + +ze.bSymbolTableReady = !1, ze.RATIOS_TABLE = new Array(Be.SYMBOL_TABLE.length).map((t => new Array(Be.BARS_IN_MODULE))); + +class Ye { + constructor() { + this.segmentCount = -1, this.fileSize = -1, this.timestamp = -1, this.checksum = -1 + } + + getSegmentIndex() { + return this.segmentIndex + } + + setSegmentIndex(t) { + this.segmentIndex = t + } + + getFileId() { + return this.fileId + } + + setFileId(t) { + this.fileId = t + } + + getOptionalData() { + return this.optionalData + } + + setOptionalData(t) { + this.optionalData = t + } + + isLastSegment() { + return this.lastSegment + } + + setLastSegment(t) { + this.lastSegment = t + } + + getSegmentCount() { + return this.segmentCount + } + + setSegmentCount(t) { + this.segmentCount = t + } + + getSender() { + return this.sender || null + } + + setSender(t) { + this.sender = t + } + + getAddressee() { + return this.addressee || null + } + + setAddressee(t) { + this.addressee = t + } + + getFileName() { + return this.fileName + } + + setFileName(t) { + this.fileName = t + } + + getFileSize() { + return this.fileSize + } + + setFileSize(t) { + this.fileSize = t + } + + getChecksum() { + return this.checksum + } + + setChecksum(t) { + this.checksum = t + } + + getTimestamp() { + return this.timestamp + } + + setTimestamp(t) { + this.timestamp = t + } +} + +class Ze { + static parseLong(t, e) { + return parseInt(t, e) + } +} + +class Ke extends i { +} + +Ke.kind = "NullPointerException"; + +class qe extends i { +} + +class Qe extends class { + writeBytes(t) { + this.writeBytesOffset(t, 0, t.length) + } + + writeBytesOffset(t, e, r) { + if (null == t) throw new Ke; + if (e < 0 || e > t.length || r < 0 || e + r > t.length || e + r < 0) throw new u; + if (0 !== r) for (let n = 0; n < r; n++) this.write(t[e + n]) + } + + flush() { + } + + close() { + } +} { + constructor(t = 32) { + if (super(), this.count = 0, t < 0) throw new o("Negative initial size: " + t); + this.buf = new Uint8Array(t) + } + + ensureCapacity(t) { + t - this.buf.length > 0 && this.grow(t) + } + + grow(t) { + let e = this.buf.length << 1; + if (e - t < 0 && (e = t), e < 0) { + if (t < 0) throw new qe; + e = f.MAX_VALUE + } + this.buf = g.copyOfUint8Array(this.buf, e) + } + + write(t) { + this.ensureCapacity(this.count + 1), this.buf[this.count] = t, this.count += 1 + } + + writeBytesOffset(t, e, r) { + if (e < 0 || e > t.length || r < 0 || e + r - t.length > 0) throw new u; + this.ensureCapacity(this.count + r), c.arraycopy(t, e, this.buf, this.count, r), this.count += r + } + + writeTo(t) { + t.writeBytesOffset(this.buf, 0, this.count) + } + + reset() { + this.count = 0 + } + + toByteArray() { + return g.copyOfUint8Array(this.buf, this.count) + } + + size() { + return this.count + } + + toString(t) { + return t ? "string" == typeof t ? this.toString_string(t) : this.toString_number(t) : this.toString_void() + } + + toString_void() { + return new String(this.buf).toString() + } + + toString_string(t) { + return new String(this.buf).toString() + } + + toString_number(t) { + return new String(this.buf).toString() + } + + close() { + } +} + +function je() { + if ("undefined" != typeof window) return window.BigInt || null; + if ("undefined" != typeof global) return global.BigInt || null; + if ("undefined" != typeof self) return self.BigInt || null; + throw new Error("Can't search globals for BigInt!") +} + +let Je; + +function $e(t) { + if (void 0 === Je && (Je = je()), null === Je) throw new Error("BigInt is not supported!"); + return Je(t) +} + +!function (t) { + t[t.ALPHA = 0] = "ALPHA", t[t.LOWER = 1] = "LOWER", t[t.MIXED = 2] = "MIXED", t[t.PUNCT = 3] = "PUNCT", t[t.ALPHA_SHIFT = 4] = "ALPHA_SHIFT", t[t.PUNCT_SHIFT = 5] = "PUNCT_SHIFT" +}(X || (X = {})); + +class tr { + static decode(t, e) { + let r = new p(""), n = m.ISO8859_1; + r.enableDecoding(n); + let i = 1, s = t[i++], o = new Ye; + for (; i < t[0];) { + switch (s) { + case tr.TEXT_COMPACTION_MODE_LATCH: + i = tr.textCompaction(t, i, r); + break; + case tr.BYTE_COMPACTION_MODE_LATCH: + case tr.BYTE_COMPACTION_MODE_LATCH_6: + i = tr.byteCompaction(s, t, n, i, r); + break; + case tr.MODE_SHIFT_TO_BYTE_COMPACTION_MODE: + r.append(t[i++]); + break; + case tr.NUMERIC_COMPACTION_MODE_LATCH: + i = tr.numericCompaction(t, i, r); + break; + case tr.ECI_CHARSET: + m.getCharacterSetECIByValue(t[i++]); + break; + case tr.ECI_GENERAL_PURPOSE: + i += 2; + break; + case tr.ECI_USER_DEFINED: + i++; + break; + case tr.BEGIN_MACRO_PDF417_CONTROL_BLOCK: + i = tr.decodeMacroBlock(t, i, o); + break; + case tr.BEGIN_MACRO_PDF417_OPTIONAL_FIELD: + case tr.MACRO_PDF417_TERMINATOR: + throw new E; + default: + i--, i = tr.textCompaction(t, i, r) + } + if (!(i < t.length)) throw E.getFormatInstance(); + s = t[i++] + } + if (0 === r.length()) throw E.getFormatInstance(); + let a = new z(null, r.toString(), null, e); + return a.setOther(o), a + } + + static decodeMacroBlock(t, e, r) { + if (e + tr.NUMBER_OF_SEQUENCE_CODEWORDS > t[0]) throw E.getFormatInstance(); + let n = new Int32Array(tr.NUMBER_OF_SEQUENCE_CODEWORDS); + for (let r = 0; r < tr.NUMBER_OF_SEQUENCE_CODEWORDS; r++, e++) n[r] = t[e]; + r.setSegmentIndex(f.parseInt(tr.decodeBase900toBase10(n, tr.NUMBER_OF_SEQUENCE_CODEWORDS))); + let i = new p; + e = tr.textCompaction(t, e, i), r.setFileId(i.toString()); + let s = -1; + for (t[e] === tr.BEGIN_MACRO_PDF417_OPTIONAL_FIELD && (s = e + 1); e < t[0];) switch (t[e]) { + case tr.BEGIN_MACRO_PDF417_OPTIONAL_FIELD: + switch (t[++e]) { + case tr.MACRO_PDF417_OPTIONAL_FIELD_FILE_NAME: + let n = new p; + e = tr.textCompaction(t, e + 1, n), r.setFileName(n.toString()); + break; + case tr.MACRO_PDF417_OPTIONAL_FIELD_SENDER: + let i = new p; + e = tr.textCompaction(t, e + 1, i), r.setSender(i.toString()); + break; + case tr.MACRO_PDF417_OPTIONAL_FIELD_ADDRESSEE: + let s = new p; + e = tr.textCompaction(t, e + 1, s), r.setAddressee(s.toString()); + break; + case tr.MACRO_PDF417_OPTIONAL_FIELD_SEGMENT_COUNT: + let o = new p; + e = tr.numericCompaction(t, e + 1, o), r.setSegmentCount(f.parseInt(o.toString())); + break; + case tr.MACRO_PDF417_OPTIONAL_FIELD_TIME_STAMP: + let a = new p; + e = tr.numericCompaction(t, e + 1, a), r.setTimestamp(Ze.parseLong(a.toString())); + break; + case tr.MACRO_PDF417_OPTIONAL_FIELD_CHECKSUM: + let l = new p; + e = tr.numericCompaction(t, e + 1, l), r.setChecksum(f.parseInt(l.toString())); + break; + case tr.MACRO_PDF417_OPTIONAL_FIELD_FILE_SIZE: + let h = new p; + e = tr.numericCompaction(t, e + 1, h), r.setFileSize(Ze.parseLong(h.toString())); + break; + default: + throw E.getFormatInstance() + } + break; + case tr.MACRO_PDF417_TERMINATOR: + e++, r.setLastSegment(!0); + break; + default: + throw E.getFormatInstance() + } + if (-1 !== s) { + let n = e - s; + r.isLastSegment() && n--, r.setOptionalData(g.copyOfRange(t, s, s + n)) + } + return e + } + + static textCompaction(t, e, r) { + let n = new Int32Array(2 * (t[0] - e)), i = new Int32Array(2 * (t[0] - e)), s = 0, o = !1; + for (; e < t[0] && !o;) { + let r = t[e++]; + if (r < tr.TEXT_COMPACTION_MODE_LATCH) n[s] = r / 30, n[s + 1] = r % 30, s += 2; else switch (r) { + case tr.TEXT_COMPACTION_MODE_LATCH: + n[s++] = tr.TEXT_COMPACTION_MODE_LATCH; + break; + case tr.BYTE_COMPACTION_MODE_LATCH: + case tr.BYTE_COMPACTION_MODE_LATCH_6: + case tr.NUMERIC_COMPACTION_MODE_LATCH: + case tr.BEGIN_MACRO_PDF417_CONTROL_BLOCK: + case tr.BEGIN_MACRO_PDF417_OPTIONAL_FIELD: + case tr.MACRO_PDF417_TERMINATOR: + e--, o = !0; + break; + case tr.MODE_SHIFT_TO_BYTE_COMPACTION_MODE: + n[s] = tr.MODE_SHIFT_TO_BYTE_COMPACTION_MODE, r = t[e++], i[s] = r, s++ + } + } + return tr.decodeTextCompaction(n, i, s, r), e + } + + static decodeTextCompaction(t, e, r, n) { + let i = X.ALPHA, s = X.ALPHA, o = 0; + for (; o < r;) { + let r = t[o], a = ""; + switch (i) { + case X.ALPHA: + if (r < 26) a = String.fromCharCode(65 + r); else switch (r) { + case 26: + a = " "; + break; + case tr.LL: + i = X.LOWER; + break; + case tr.ML: + i = X.MIXED; + break; + case tr.PS: + s = i, i = X.PUNCT_SHIFT; + break; + case tr.MODE_SHIFT_TO_BYTE_COMPACTION_MODE: + n.append(e[o]); + break; + case tr.TEXT_COMPACTION_MODE_LATCH: + i = X.ALPHA + } + break; + case X.LOWER: + if (r < 26) a = String.fromCharCode(97 + r); else switch (r) { + case 26: + a = " "; + break; + case tr.AS: + s = i, i = X.ALPHA_SHIFT; + break; + case tr.ML: + i = X.MIXED; + break; + case tr.PS: + s = i, i = X.PUNCT_SHIFT; + break; + case tr.MODE_SHIFT_TO_BYTE_COMPACTION_MODE: + n.append(e[o]); + break; + case tr.TEXT_COMPACTION_MODE_LATCH: + i = X.ALPHA + } + break; + case X.MIXED: + if (r < tr.PL) a = tr.MIXED_CHARS[r]; else switch (r) { + case tr.PL: + i = X.PUNCT; + break; + case 26: + a = " "; + break; + case tr.LL: + i = X.LOWER; + break; + case tr.AL: + i = X.ALPHA; + break; + case tr.PS: + s = i, i = X.PUNCT_SHIFT; + break; + case tr.MODE_SHIFT_TO_BYTE_COMPACTION_MODE: + n.append(e[o]); + break; + case tr.TEXT_COMPACTION_MODE_LATCH: + i = X.ALPHA + } + break; + case X.PUNCT: + if (r < tr.PAL) a = tr.PUNCT_CHARS[r]; else switch (r) { + case tr.PAL: + i = X.ALPHA; + break; + case tr.MODE_SHIFT_TO_BYTE_COMPACTION_MODE: + n.append(e[o]); + break; + case tr.TEXT_COMPACTION_MODE_LATCH: + i = X.ALPHA + } + break; + case X.ALPHA_SHIFT: + if (i = s, r < 26) a = String.fromCharCode(65 + r); else switch (r) { + case 26: + a = " "; + break; + case tr.TEXT_COMPACTION_MODE_LATCH: + i = X.ALPHA + } + break; + case X.PUNCT_SHIFT: + if (i = s, r < tr.PAL) a = tr.PUNCT_CHARS[r]; else switch (r) { + case tr.PAL: + i = X.ALPHA; + break; + case tr.MODE_SHIFT_TO_BYTE_COMPACTION_MODE: + n.append(e[o]); + break; + case tr.TEXT_COMPACTION_MODE_LATCH: + i = X.ALPHA + } + } + "" !== a && n.append(a), o++ + } + } + + static byteCompaction(t, e, r, n, i) { + let s = new Qe, o = 0, a = 0, l = !1; + switch (t) { + case tr.BYTE_COMPACTION_MODE_LATCH: + let t = new Int32Array(6), r = e[n++]; + for (; n < e[0] && !l;) switch (t[o++] = r, a = 900 * a + r, r = e[n++], r) { + case tr.TEXT_COMPACTION_MODE_LATCH: + case tr.BYTE_COMPACTION_MODE_LATCH: + case tr.NUMERIC_COMPACTION_MODE_LATCH: + case tr.BYTE_COMPACTION_MODE_LATCH_6: + case tr.BEGIN_MACRO_PDF417_CONTROL_BLOCK: + case tr.BEGIN_MACRO_PDF417_OPTIONAL_FIELD: + case tr.MACRO_PDF417_TERMINATOR: + n--, l = !0; + break; + default: + if (o % 5 == 0 && o > 0) { + for (let t = 0; t < 6; ++t) s.write(Number($e(a) >> $e(8 * (5 - t)))); + a = 0, o = 0 + } + } + n === e[0] && r < tr.TEXT_COMPACTION_MODE_LATCH && (t[o++] = r); + for (let e = 0; e < o; e++) s.write(t[e]); + break; + case tr.BYTE_COMPACTION_MODE_LATCH_6: + for (; n < e[0] && !l;) { + let t = e[n++]; + if (t < tr.TEXT_COMPACTION_MODE_LATCH) o++, a = 900 * a + t; else switch (t) { + case tr.TEXT_COMPACTION_MODE_LATCH: + case tr.BYTE_COMPACTION_MODE_LATCH: + case tr.NUMERIC_COMPACTION_MODE_LATCH: + case tr.BYTE_COMPACTION_MODE_LATCH_6: + case tr.BEGIN_MACRO_PDF417_CONTROL_BLOCK: + case tr.BEGIN_MACRO_PDF417_OPTIONAL_FIELD: + case tr.MACRO_PDF417_TERMINATOR: + n--, l = !0 + } + if (o % 5 == 0 && o > 0) { + for (let t = 0; t < 6; ++t) s.write(Number($e(a) >> $e(8 * (5 - t)))); + a = 0, o = 0 + } + } + } + return i.append(I.decode(s.toByteArray(), r)), n + } + + static numericCompaction(t, e, r) { + let n = 0, i = !1, s = new Int32Array(tr.MAX_NUMERIC_CODEWORDS); + for (; e < t[0] && !i;) { + let o = t[e++]; + if (e === t[0] && (i = !0), o < tr.TEXT_COMPACTION_MODE_LATCH) s[n] = o, n++; else switch (o) { + case tr.TEXT_COMPACTION_MODE_LATCH: + case tr.BYTE_COMPACTION_MODE_LATCH: + case tr.BYTE_COMPACTION_MODE_LATCH_6: + case tr.BEGIN_MACRO_PDF417_CONTROL_BLOCK: + case tr.BEGIN_MACRO_PDF417_OPTIONAL_FIELD: + case tr.MACRO_PDF417_TERMINATOR: + e--, i = !0 + } + (n % tr.MAX_NUMERIC_CODEWORDS == 0 || o === tr.NUMERIC_COMPACTION_MODE_LATCH || i) && n > 0 && (r.append(tr.decodeBase900toBase10(s, n)), n = 0) + } + return e + } + + static decodeBase900toBase10(t, e) { + let r = $e(0); + for (let n = 0; n < e; n++) r += tr.EXP900[e - n - 1] * $e(t[n]); + let n = r.toString(); + if ("1" !== n.charAt(0)) throw new E; + return n.substring(1) + } +} + +tr.TEXT_COMPACTION_MODE_LATCH = 900, tr.BYTE_COMPACTION_MODE_LATCH = 901, tr.NUMERIC_COMPACTION_MODE_LATCH = 902, tr.BYTE_COMPACTION_MODE_LATCH_6 = 924, tr.ECI_USER_DEFINED = 925, tr.ECI_GENERAL_PURPOSE = 926, tr.ECI_CHARSET = 927, tr.BEGIN_MACRO_PDF417_CONTROL_BLOCK = 928, tr.BEGIN_MACRO_PDF417_OPTIONAL_FIELD = 923, tr.MACRO_PDF417_TERMINATOR = 922, tr.MODE_SHIFT_TO_BYTE_COMPACTION_MODE = 913, tr.MAX_NUMERIC_CODEWORDS = 15, tr.MACRO_PDF417_OPTIONAL_FIELD_FILE_NAME = 0, tr.MACRO_PDF417_OPTIONAL_FIELD_SEGMENT_COUNT = 1, tr.MACRO_PDF417_OPTIONAL_FIELD_TIME_STAMP = 2, tr.MACRO_PDF417_OPTIONAL_FIELD_SENDER = 3, tr.MACRO_PDF417_OPTIONAL_FIELD_ADDRESSEE = 4, tr.MACRO_PDF417_OPTIONAL_FIELD_FILE_SIZE = 5, tr.MACRO_PDF417_OPTIONAL_FIELD_CHECKSUM = 6, tr.PL = 25, tr.LL = 27, tr.AS = 27, tr.ML = 28, tr.AL = 28, tr.PS = 29, tr.PAL = 29, tr.PUNCT_CHARS = ";<>@[\\]_`~!\r\t,:\n-.$/\"|*()?{}'", tr.MIXED_CHARS = "0123456789&\r\t,:#-.$/+%*=^", tr.EXP900 = je() ? function () { + let t = []; + t[0] = $e(1); + let e = $e(900); + t[1] = e; + for (let r = 2; r < 16; r++) t[r] = t[r - 1] * e; + return t +}() : [], tr.NUMBER_OF_SEQUENCE_CODEWORDS = 2; + +class er { + constructor() { + } + + static decode(t, e, r, n, i, s, o) { + let a, l = new ve(t, e, r, n, i), h = null, c = null; + for (let r = !0; ; r = !1) { + if (null != e && (h = er.getRowIndicatorColumn(t, l, e, !0, s, o)), null != n && (c = er.getRowIndicatorColumn(t, l, n, !1, s, o)), a = er.merge(h, c), null == a) throw R.getNotFoundInstance(); + let i = a.getBoundingBox(); + if (!r || null == i || !(i.getMinY() < l.getMinY() || i.getMaxY() > l.getMaxY())) break; + l = i + } + a.setBoundingBox(l); + let u = a.getBarcodeColumnCount() + 1; + a.setDetectionResultColumn(0, h), a.setDetectionResultColumn(u, c); + let d = null != h; + for (let e = 1; e <= u; e++) { + let r, n = d ? e : u - e; + if (void 0 !== a.getDetectionResultColumn(n)) continue; + r = 0 === n || n === u ? new Ge(l, 0 === n) : new Ue(l), a.setDetectionResultColumn(n, r); + let i = -1, h = i; + for (let e = l.getMinY(); e <= l.getMaxY(); e++) { + if (i = er.getStartColumn(a, n, e, d), i < 0 || i > l.getMaxX()) { + if (-1 === h) continue; + i = h + } + let c = er.detectCodeword(t, l.getMinX(), l.getMaxX(), d, i, e, s, o); + null != c && (r.setCodeword(e, c), h = i, s = Math.min(s, c.getWidth()), o = Math.max(o, c.getWidth())) + } + } + return er.createDecoderResult(a) + } + + static merge(t, e) { + if (null == t && null == e) return null; + let r = er.getBarcodeMetadata(t, e); + if (null == r) return null; + let n = ve.merge(er.adjustBoundingBox(t), er.adjustBoundingBox(e)); + return new Xe(r, n) + } + + static adjustBoundingBox(t) { + if (null == t) return null; + let e = t.getRowHeights(); + if (null == e) return null; + let r = er.getMax(e), n = 0; + for (let t of e) if (n += r - t, t > 0) break; + let i = t.getCodewords(); + for (let t = 0; n > 0 && null == i[t]; t++) n--; + let s = 0; + for (let t = e.length - 1; t >= 0 && (s += r - e[t], !(e[t] > 0)); t--) ; + for (let t = i.length - 1; s > 0 && null == i[t]; t--) s--; + return t.getBoundingBox().addMissingRows(n, s, t.isLeft()) + } + + static getMax(t) { + let e = -1; + for (let r of t) e = Math.max(e, r); + return e + } + + static getBarcodeMetadata(t, e) { + let r, n; + return null == t || null == (r = t.getBarcodeMetadata()) ? null == e ? null : e.getBarcodeMetadata() : null == e || null == (n = e.getBarcodeMetadata()) ? r : r.getColumnCount() !== n.getColumnCount() && r.getErrorCorrectionLevel() !== n.getErrorCorrectionLevel() && r.getRowCount() !== n.getRowCount() ? null : r + } + + static getRowIndicatorColumn(t, e, r, n, i, s) { + let o = new Ge(e, n); + for (let a = 0; a < 2; a++) { + let l = 0 === a ? 1 : -1, h = Math.trunc(Math.trunc(r.getX())); + for (let a = Math.trunc(Math.trunc(r.getY())); a <= e.getMaxY() && a >= e.getMinY(); a += l) { + let e = er.detectCodeword(t, 0, t.getWidth(), n, h, a, i, s); + null != e && (o.setCodeword(a, e), h = n ? e.getStartX() : e.getEndX()) + } + } + return o + } + + static adjustCodewordCount(t, e) { + let r = e[0][1], n = r.getValue(), + i = t.getBarcodeColumnCount() * t.getBarcodeRowCount() - er.getNumberOfECCodeWords(t.getBarcodeECLevel()); + if (0 === n.length) { + if (i < 1 || i > Be.MAX_CODEWORDS_IN_BARCODE) throw R.getNotFoundInstance(); + r.setValue(i) + } else n[0] !== i && r.setValue(i) + } + + static createDecoderResult(t) { + let e = er.createBarcodeMatrix(t); + er.adjustCodewordCount(t, e); + let r = new Array, n = new Int32Array(t.getBarcodeRowCount() * t.getBarcodeColumnCount()), i = [], + s = new Array; + for (let o = 0; o < t.getBarcodeRowCount(); o++) for (let a = 0; a < t.getBarcodeColumnCount(); a++) { + let l = e[o][a + 1].getValue(), h = o * t.getBarcodeColumnCount() + a; + 0 === l.length ? r.push(h) : 1 === l.length ? n[h] = l[0] : (s.push(h), i.push(l)) + } + let o = new Array(i.length); + for (let t = 0; t < o.length; t++) o[t] = i[t]; + return er.createDecoderResultFromAmbiguousValues(t.getBarcodeECLevel(), n, Be.toIntArray(r), Be.toIntArray(s), o) + } + + static createDecoderResultFromAmbiguousValues(t, e, r, n, i) { + let s = new Int32Array(n.length), o = 100; + for (; o-- > 0;) { + for (let t = 0; t < s.length; t++) e[n[t]] = i[t][s[t]]; + try { + return er.decodeCodewords(e, t, r) + } catch (t) { + if (!(t instanceof l)) throw t + } + if (0 === s.length) throw l.getChecksumInstance(); + for (let t = 0; t < s.length; t++) { + if (s[t] < i[t].length - 1) { + s[t]++; + break + } + if (s[t] = 0, t === s.length - 1) throw l.getChecksumInstance() + } + } + throw l.getChecksumInstance() + } + + static createBarcodeMatrix(t) { + let e = Array.from({length: t.getBarcodeRowCount()}, (() => new Array(t.getBarcodeColumnCount() + 2))); + for (let t = 0; t < e.length; t++) for (let r = 0; r < e[t].length; r++) e[t][r] = new He; + let r = 0; + for (let n of t.getDetectionResultColumns()) { + if (null != n) for (let t of n.getCodewords()) if (null != t) { + let n = t.getRowNumber(); + if (n >= 0) { + if (n >= e.length) continue; + e[n][r].setValue(t.getValue()) + } + } + r++ + } + return e + } + + static isValidBarcodeColumn(t, e) { + return e >= 0 && e <= t.getBarcodeColumnCount() + 1 + } + + static getStartColumn(t, e, r, n) { + let i = n ? 1 : -1, s = null; + if (er.isValidBarcodeColumn(t, e - i) && (s = t.getDetectionResultColumn(e - i).getCodeword(r)), null != s) return n ? s.getEndX() : s.getStartX(); + if (s = t.getDetectionResultColumn(e).getCodewordNearby(r), null != s) return n ? s.getStartX() : s.getEndX(); + if (er.isValidBarcodeColumn(t, e - i) && (s = t.getDetectionResultColumn(e - i).getCodewordNearby(r)), null != s) return n ? s.getEndX() : s.getStartX(); + let o = 0; + for (; er.isValidBarcodeColumn(t, e - i);) { + e -= i; + for (let r of t.getDetectionResultColumn(e).getCodewords()) if (null != r) return (n ? r.getEndX() : r.getStartX()) + i * o * (r.getEndX() - r.getStartX()); + o++ + } + return n ? t.getBoundingBox().getMinX() : t.getBoundingBox().getMaxX() + } + + static detectCodeword(t, e, r, n, i, s, o, a) { + i = er.adjustCodewordStartColumn(t, e, r, n, i, s); + let l, h = er.getModuleBitCount(t, e, r, n, i, s); + if (null == h) return null; + let c = tt.sum(h); + if (n) l = i + c; else { + for (let t = 0; t < h.length / 2; t++) { + let e = h[t]; + h[t] = h[h.length - 1 - t], h[h.length - 1 - t] = e + } + l = i, i = l - c + } + if (!er.checkCodewordSkew(c, o, a)) return null; + let u = ze.getDecodedValue(h), d = Be.getCodeword(u); + return -1 === d ? null : new We(i, l, er.getCodewordBucketNumber(u), d) + } + + static getModuleBitCount(t, e, r, n, i, s) { + let o = i, a = new Int32Array(8), l = 0, h = n ? 1 : -1, c = n; + for (; (n ? o < r : o >= e) && l < a.length;) t.get(o, s) === c ? (a[l]++, o += h) : (l++, c = !c); + return l === a.length || o === (n ? r : e) && l === a.length - 1 ? a : null + } + + static getNumberOfECCodeWords(t) { + return 2 << t + } + + static adjustCodewordStartColumn(t, e, r, n, i, s) { + let o = i, a = n ? -1 : 1; + for (let l = 0; l < 2; l++) { + for (; (n ? o >= e : o < r) && n === t.get(o, s);) { + if (Math.abs(i - o) > er.CODEWORD_SKEW_SIZE) return i; + o += a + } + a = -a, n = !n + } + return o + } + + static checkCodewordSkew(t, e, r) { + return e - er.CODEWORD_SKEW_SIZE <= t && t <= r + er.CODEWORD_SKEW_SIZE + } + + static decodeCodewords(t, e, r) { + if (0 === t.length) throw E.getFormatInstance(); + let n = 1 << e + 1, i = er.correctErrors(t, r, n); + er.verifyCodewordCount(t, n); + let s = tr.decode(t, "" + e); + return s.setErrorsCorrected(i), s.setErasures(r.length), s + } + + static correctErrors(t, e, r) { + if (null != e && e.length > r / 2 + er.MAX_ERRORS || r < 0 || r > er.MAX_EC_CODEWORDS) throw l.getChecksumInstance(); + return er.errorCorrection.decode(t, r, e) + } + + static verifyCodewordCount(t, e) { + if (t.length < 4) throw E.getFormatInstance(); + let r = t[0]; + if (r > t.length) throw E.getFormatInstance(); + if (0 === r) { + if (!(e < t.length)) throw E.getFormatInstance(); + t[0] = t.length - e + } + } + + static getBitCountForCodeword(t) { + let e = new Int32Array(8), r = 0, n = e.length - 1; + for (; !((1 & t) !== r && (r = 1 & t, n--, n < 0));) e[n]++, t >>= 1; + return e + } + + static getCodewordBucketNumber(t) { + return t instanceof Int32Array ? this.getCodewordBucketNumber_Int32Array(t) : this.getCodewordBucketNumber_number(t) + } + + static getCodewordBucketNumber_number(t) { + return er.getCodewordBucketNumber(er.getBitCountForCodeword(t)) + } + + static getCodewordBucketNumber_Int32Array(t) { + return (t[0] - t[2] + t[4] - t[6] + 9) % 9 + } + + static toString(t) { + let e = new Ve; + for (let r = 0; r < t.length; r++) { + e.format("Row %2d: ", r); + for (let n = 0; n < t[r].length; n++) { + let i = t[r][n]; + 0 === i.getValue().length ? e.format(" ", null) : e.format("%4d(%2d)", i.getValue()[0], i.getConfidence(i.getValue()[0])) + } + e.format("%n") + } + return e.toString() + } +} + +er.CODEWORD_SKEW_SIZE = 2, er.MAX_ERRORS = 3, er.MAX_EC_CODEWORDS = 512, er.errorCorrection = new ke; + +class rr { + decode(t, e = null) { + let r = rr.decode(t, e, !1); + if (null == r || 0 === r.length || null == r[0]) throw R.getNotFoundInstance(); + return r[0] + } + + decodeMultiple(t, e = null) { + try { + return rr.decode(t, e, !0) + } catch (t) { + if (t instanceof E || t instanceof l) throw R.getNotFoundInstance(); + throw t + } + } + + static decode(t, e, r) { + const n = new Array, i = Pe.detectMultiple(t, e, r); + for (const t of i.getPoints()) { + const e = er.decode(i.getBits(), t[4], t[5], t[6], t[7], rr.getMinCodewordWidth(t), rr.getMaxCodewordWidth(t)), + r = new F(e.getText(), e.getRawBytes(), void 0, t, v.PDF_417); + r.putMetadata(W.ERROR_CORRECTION_LEVEL, e.getECLevel()); + const s = e.getOther(); + null != s && r.putMetadata(W.PDF417_EXTRA_METADATA, s), n.push(r) + } + return n.map((t => t)) + } + + static getMaxWidth(t, e) { + return null == t || null == e ? 0 : Math.trunc(Math.abs(t.getX() - e.getX())) + } + + static getMinWidth(t, e) { + return null == t || null == e ? f.MAX_VALUE : Math.trunc(Math.abs(t.getX() - e.getX())) + } + + static getMaxCodewordWidth(t) { + return Math.floor(Math.max(Math.max(rr.getMaxWidth(t[0], t[4]), rr.getMaxWidth(t[6], t[2]) * Be.MODULES_IN_CODEWORD / Be.MODULES_IN_STOP_PATTERN), Math.max(rr.getMaxWidth(t[1], t[5]), rr.getMaxWidth(t[7], t[3]) * Be.MODULES_IN_CODEWORD / Be.MODULES_IN_STOP_PATTERN))) + } + + static getMinCodewordWidth(t) { + return Math.floor(Math.min(Math.min(rr.getMinWidth(t[0], t[4]), rr.getMinWidth(t[6], t[2]) * Be.MODULES_IN_CODEWORD / Be.MODULES_IN_STOP_PATTERN), Math.min(rr.getMinWidth(t[1], t[5]), rr.getMinWidth(t[7], t[3]) * Be.MODULES_IN_CODEWORD / Be.MODULES_IN_STOP_PATTERN))) + } + + reset() { + } +} + +class nr extends i { +} + +nr.kind = "ReaderException"; + +class ir { + decode(t, e) { + return this.setHints(e), this.decodeInternal(t) + } + + decodeWithState(t) { + return null !== this.readers && void 0 !== this.readers || this.setHints(null), this.decodeInternal(t) + } + + setHints(t) { + this.hints = t; + const e = null != t && void 0 !== t.get(C.TRY_HARDER), r = null == t ? null : t.get(C.POSSIBLE_FORMATS), + n = new Array; + if (null != r) { + const i = r.some((t => t === v.UPC_A || t === v.UPC_E || t === v.EAN_13 || t === v.EAN_8 || t === v.CODABAR || t === v.CODE_39 || t === v.CODE_93 || t === v.CODE_128 || t === v.ITF || t === v.RSS_14 || t === v.RSS_EXPANDED)); + i && !e && n.push(new ee(t)), r.includes(v.QR_CODE) && n.push(new Me), r.includes(v.DATA_MATRIX) && n.push(new ue), r.includes(v.AZTEC) && n.push(new dt), r.includes(v.PDF_417) && n.push(new rr), i && e && n.push(new ee(t)) + } + 0 === n.length && (e || n.push(new ee(t)), n.push(new Me), n.push(new ue), n.push(new dt), n.push(new rr), e && n.push(new ee(t))), this.readers = n + } + + reset() { + if (null !== this.readers) for (const t of this.readers) t.reset() + } + + decodeInternal(t) { + if (null === this.readers) throw new nr("No readers where selected, nothing can be read."); + for (const e of this.readers) try { + return e.decode(t, this.hints) + } catch (t) { + if (t instanceof nr) continue + } + throw new R("No MultiFormat Readers were able to detect the code.") + } +} + +var sr; +!function (t) { + t[t.ERROR_CORRECTION = 0] = "ERROR_CORRECTION", t[t.CHARACTER_SET = 1] = "CHARACTER_SET", t[t.DATA_MATRIX_SHAPE = 2] = "DATA_MATRIX_SHAPE", t[t.MIN_SIZE = 3] = "MIN_SIZE", t[t.MAX_SIZE = 4] = "MAX_SIZE", t[t.MARGIN = 5] = "MARGIN", t[t.PDF417_COMPACT = 6] = "PDF417_COMPACT", t[t.PDF417_COMPACTION = 7] = "PDF417_COMPACTION", t[t.PDF417_DIMENSIONS = 8] = "PDF417_DIMENSIONS", t[t.AZTEC_LAYERS = 9] = "AZTEC_LAYERS", t[t.QR_VERSION = 10] = "QR_VERSION" +}(sr || (sr = {})); +var or = sr; + +class ar { + constructor(t) { + this.field = t, this.cachedGenerators = [], this.cachedGenerators.push(new Z(t, Int32Array.from([1]))) + } + + buildGenerator(t) { + const e = this.cachedGenerators; + if (t >= e.length) { + let r = e[e.length - 1]; + const n = this.field; + for (let i = e.length; i <= t; i++) { + const t = r.multiply(new Z(n, Int32Array.from([1, n.exp(i - 1 + n.getGeneratorBase())]))); + e.push(t), r = t + } + } + return e[t] + } + + encode(t, e) { + if (0 === e) throw new o("No error correction bytes"); + const r = t.length - e; + if (r <= 0) throw new o("No data bytes provided"); + const n = this.buildGenerator(e), i = new Int32Array(r); + c.arraycopy(t, 0, i, 0, r); + let s = new Z(this.field, i); + s = s.multiplyByMonomial(e, 1); + const a = s.divide(n)[1].getCoefficients(), l = e - a.length; + for (let e = 0; e < l; e++) t[r + e] = 0; + c.arraycopy(a, 0, t, r + l, a.length) + } +} + +class lr { + constructor() { + } + + static applyMaskPenaltyRule1(t) { + return lr.applyMaskPenaltyRule1Internal(t, !0) + lr.applyMaskPenaltyRule1Internal(t, !1) + } + + static applyMaskPenaltyRule2(t) { + let e = 0; + const r = t.getArray(), n = t.getWidth(), i = t.getHeight(); + for (let t = 0; t < i - 1; t++) { + const i = r[t]; + for (let s = 0; s < n - 1; s++) { + const n = i[s]; + n === i[s + 1] && n === r[t + 1][s] && n === r[t + 1][s + 1] && e++ + } + } + return lr.N2 * e + } + + static applyMaskPenaltyRule3(t) { + let e = 0; + const r = t.getArray(), n = t.getWidth(), i = t.getHeight(); + for (let t = 0; t < i; t++) for (let s = 0; s < n; s++) { + const o = r[t]; + s + 6 < n && 1 === o[s] && 0 === o[s + 1] && 1 === o[s + 2] && 1 === o[s + 3] && 1 === o[s + 4] && 0 === o[s + 5] && 1 === o[s + 6] && (lr.isWhiteHorizontal(o, s - 4, s) || lr.isWhiteHorizontal(o, s + 7, s + 11)) && e++, t + 6 < i && 1 === r[t][s] && 0 === r[t + 1][s] && 1 === r[t + 2][s] && 1 === r[t + 3][s] && 1 === r[t + 4][s] && 0 === r[t + 5][s] && 1 === r[t + 6][s] && (lr.isWhiteVertical(r, s, t - 4, t) || lr.isWhiteVertical(r, s, t + 7, t + 11)) && e++ + } + return e * lr.N3 + } + + static isWhiteHorizontal(t, e, r) { + e = Math.max(e, 0), r = Math.min(r, t.length); + for (let n = e; n < r; n++) if (1 === t[n]) return !1; + return !0 + } + + static isWhiteVertical(t, e, r, n) { + r = Math.max(r, 0), n = Math.min(n, t.length); + for (let i = r; i < n; i++) if (1 === t[i][e]) return !1; + return !0 + } + + static applyMaskPenaltyRule4(t) { + let e = 0; + const r = t.getArray(), n = t.getWidth(), i = t.getHeight(); + for (let t = 0; t < i; t++) { + const i = r[t]; + for (let t = 0; t < n; t++) 1 === i[t] && e++ + } + const s = t.getHeight() * t.getWidth(); + return Math.floor(10 * Math.abs(2 * e - s) / s) * lr.N4 + } + + static getDataMaskBit(t, e, r) { + let n, i; + switch (t) { + case 0: + n = r + e & 1; + break; + case 1: + n = 1 & r; + break; + case 2: + n = e % 3; + break; + case 3: + n = (r + e) % 3; + break; + case 4: + n = Math.floor(r / 2) + Math.floor(e / 3) & 1; + break; + case 5: + i = r * e, n = (1 & i) + i % 3; + break; + case 6: + i = r * e, n = (1 & i) + i % 3 & 1; + break; + case 7: + i = r * e, n = i % 3 + (r + e & 1) & 1; + break; + default: + throw new o("Invalid mask pattern: " + t) + } + return 0 === n + } + + static applyMaskPenaltyRule1Internal(t, e) { + let r = 0; + const n = e ? t.getHeight() : t.getWidth(), i = e ? t.getWidth() : t.getHeight(), s = t.getArray(); + for (let t = 0; t < n; t++) { + let n = 0, o = -1; + for (let a = 0; a < i; a++) { + const i = e ? s[t][a] : s[a][t]; + i === o ? n++ : (n >= 5 && (r += lr.N1 + (n - 5)), n = 1, o = i) + } + n >= 5 && (r += lr.N1 + (n - 5)) + } + return r + } +} + +lr.N1 = 3, lr.N2 = 3, lr.N3 = 40, lr.N4 = 10; + +class hr { + constructor(t, e) { + this.width = t, this.height = e; + const r = new Array(e); + for (let n = 0; n !== e; n++) r[n] = new Uint8Array(t); + this.bytes = r + } + + getHeight() { + return this.height + } + + getWidth() { + return this.width + } + + get(t, e) { + return this.bytes[e][t] + } + + getArray() { + return this.bytes + } + + setNumber(t, e, r) { + this.bytes[e][t] = r + } + + setBoolean(t, e, r) { + this.bytes[e][t] = r ? 1 : 0 + } + + clear(t) { + for (const e of this.bytes) g.fill(e, t) + } + + equals(t) { + if (!(t instanceof hr)) return !1; + const e = t; + if (this.width !== e.width) return !1; + if (this.height !== e.height) return !1; + for (let t = 0, r = this.height; t < r; ++t) { + const r = this.bytes[t], n = e.bytes[t]; + for (let t = 0, e = this.width; t < e; ++t) if (r[t] !== n[t]) return !1 + } + return !0 + } + + toString() { + const t = new p; + for (let e = 0, r = this.height; e < r; ++e) { + const r = this.bytes[e]; + for (let e = 0, n = this.width; e < n; ++e) switch (r[e]) { + case 0: + t.append(" 0"); + break; + case 1: + t.append(" 1"); + break; + default: + t.append(" ") + } + t.append("\n") + } + return t.toString() + } +} + +class cr { + constructor() { + this.maskPattern = -1 + } + + getMode() { + return this.mode + } + + getECLevel() { + return this.ecLevel + } + + getVersion() { + return this.version + } + + getMaskPattern() { + return this.maskPattern + } + + getMatrix() { + return this.matrix + } + + toString() { + const t = new p; + return t.append("<<\n"), t.append(" mode: "), t.append(this.mode ? this.mode.toString() : "null"), t.append("\n ecLevel: "), t.append(this.ecLevel ? this.ecLevel.toString() : "null"), t.append("\n version: "), t.append(this.version ? this.version.toString() : "null"), t.append("\n maskPattern: "), t.append(this.maskPattern.toString()), this.matrix ? (t.append("\n matrix:\n"), t.append(this.matrix.toString())) : t.append("\n matrix: null\n"), t.append(">>\n"), t.toString() + } + + setMode(t) { + this.mode = t + } + + setECLevel(t) { + this.ecLevel = t + } + + setVersion(t) { + this.version = t + } + + setMaskPattern(t) { + this.maskPattern = t + } + + setMatrix(t) { + this.matrix = t + } + + static isValidMaskPattern(t) { + return t >= 0 && t < cr.NUM_MASK_PATTERNS + } +} + +cr.NUM_MASK_PATTERNS = 8; + +class ur extends i { +} + +ur.kind = "WriterException"; + +class dr { + constructor() { + } + + static clearMatrix(t) { + t.clear(255) + } + + static buildMatrix(t, e, r, n, i) { + dr.clearMatrix(i), dr.embedBasicPatterns(r, i), dr.embedTypeInfo(e, n, i), dr.maybeEmbedVersionInfo(r, i), dr.embedDataBits(t, n, i) + } + + static embedBasicPatterns(t, e) { + dr.embedPositionDetectionPatternsAndSeparators(e), dr.embedDarkDotAtLeftBottomCorner(e), dr.maybeEmbedPositionAdjustmentPatterns(t, e), dr.embedTimingPatterns(e) + } + + static embedTypeInfo(t, e, r) { + const n = new w; + dr.makeTypeInfoBits(t, e, n); + for (let t = 0, e = n.getSize(); t < e; ++t) { + const e = n.get(n.getSize() - 1 - t), i = dr.TYPE_INFO_COORDINATES[t], s = i[0], o = i[1]; + if (r.setBoolean(s, o, e), t < 8) { + const n = r.getWidth() - t - 1, i = 8; + r.setBoolean(n, i, e) + } else { + const n = 8, i = r.getHeight() - 7 + (t - 8); + r.setBoolean(n, i, e) + } + } + } + + static maybeEmbedVersionInfo(t, e) { + if (t.getVersionNumber() < 7) return; + const r = new w; + dr.makeVersionInfoBits(t, r); + let n = 17; + for (let t = 0; t < 6; ++t) for (let i = 0; i < 3; ++i) { + const s = r.get(n); + n--, e.setBoolean(t, e.getHeight() - 11 + i, s), e.setBoolean(e.getHeight() - 11 + i, t, s) + } + } + + static embedDataBits(t, e, r) { + let n = 0, i = -1, s = r.getWidth() - 1, o = r.getHeight() - 1; + for (; s > 0;) { + for (6 === s && (s -= 1); o >= 0 && o < r.getHeight();) { + for (let i = 0; i < 2; ++i) { + const a = s - i; + if (!dr.isEmpty(r.get(a, o))) continue; + let l; + n < t.getSize() ? (l = t.get(n), ++n) : l = !1, 255 !== e && lr.getDataMaskBit(e, a, o) && (l = !l), r.setBoolean(a, o, l) + } + o += i + } + i = -i, o += i, s -= 2 + } + if (n !== t.getSize()) throw new ur("Not all bits consumed: " + n + "/" + t.getSize()) + } + + static findMSBSet(t) { + return 32 - f.numberOfLeadingZeros(t) + } + + static calculateBCHCode(t, e) { + if (0 === e) throw new o("0 polynomial"); + const r = dr.findMSBSet(e); + for (t <<= r - 1; dr.findMSBSet(t) >= r;) t ^= e << dr.findMSBSet(t) - r; + return t + } + + static makeTypeInfoBits(t, e, r) { + if (!cr.isValidMaskPattern(e)) throw new ur("Invalid mask pattern"); + const n = t.getBits() << 3 | e; + r.appendBits(n, 5); + const i = dr.calculateBCHCode(n, dr.TYPE_INFO_POLY); + r.appendBits(i, 10); + const s = new w; + if (s.appendBits(dr.TYPE_INFO_MASK_PATTERN, 15), r.xor(s), 15 !== r.getSize()) throw new ur("should not happen but we got: " + r.getSize()) + } + + static makeVersionInfoBits(t, e) { + e.appendBits(t.getVersionNumber(), 6); + const r = dr.calculateBCHCode(t.getVersionNumber(), dr.VERSION_INFO_POLY); + if (e.appendBits(r, 12), 18 !== e.getSize()) throw new ur("should not happen but we got: " + e.getSize()) + } + + static isEmpty(t) { + return 255 === t + } + + static embedTimingPatterns(t) { + for (let e = 8; e < t.getWidth() - 8; ++e) { + const r = (e + 1) % 2; + dr.isEmpty(t.get(e, 6)) && t.setNumber(e, 6, r), dr.isEmpty(t.get(6, e)) && t.setNumber(6, e, r) + } + } + + static embedDarkDotAtLeftBottomCorner(t) { + if (0 === t.get(8, t.getHeight() - 8)) throw new ur; + t.setNumber(8, t.getHeight() - 8, 1) + } + + static embedHorizontalSeparationPattern(t, e, r) { + for (let n = 0; n < 8; ++n) { + if (!dr.isEmpty(r.get(t + n, e))) throw new ur; + r.setNumber(t + n, e, 0) + } + } + + static embedVerticalSeparationPattern(t, e, r) { + for (let n = 0; n < 7; ++n) { + if (!dr.isEmpty(r.get(t, e + n))) throw new ur; + r.setNumber(t, e + n, 0) + } + } + + static embedPositionAdjustmentPattern(t, e, r) { + for (let n = 0; n < 5; ++n) { + const i = dr.POSITION_ADJUSTMENT_PATTERN[n]; + for (let s = 0; s < 5; ++s) r.setNumber(t + s, e + n, i[s]) + } + } + + static embedPositionDetectionPattern(t, e, r) { + for (let n = 0; n < 7; ++n) { + const i = dr.POSITION_DETECTION_PATTERN[n]; + for (let s = 0; s < 7; ++s) r.setNumber(t + s, e + n, i[s]) + } + } + + static embedPositionDetectionPatternsAndSeparators(t) { + const e = dr.POSITION_DETECTION_PATTERN[0].length; + dr.embedPositionDetectionPattern(0, 0, t), dr.embedPositionDetectionPattern(t.getWidth() - e, 0, t), dr.embedPositionDetectionPattern(0, t.getWidth() - e, t); + dr.embedHorizontalSeparationPattern(0, 7, t), dr.embedHorizontalSeparationPattern(t.getWidth() - 8, 7, t), dr.embedHorizontalSeparationPattern(0, t.getWidth() - 8, t); + dr.embedVerticalSeparationPattern(7, 0, t), dr.embedVerticalSeparationPattern(t.getHeight() - 7 - 1, 0, t), dr.embedVerticalSeparationPattern(7, t.getHeight() - 7, t) + } + + static maybeEmbedPositionAdjustmentPatterns(t, e) { + if (t.getVersionNumber() < 2) return; + const r = t.getVersionNumber() - 1, n = dr.POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE[r]; + for (let t = 0, r = n.length; t !== r; t++) { + const i = n[t]; + if (i >= 0) for (let t = 0; t !== r; t++) { + const r = n[t]; + r >= 0 && dr.isEmpty(e.get(r, i)) && dr.embedPositionAdjustmentPattern(r - 2, i - 2, e) + } + } + } +} + +dr.POSITION_DETECTION_PATTERN = Array.from([Int32Array.from([1, 1, 1, 1, 1, 1, 1]), Int32Array.from([1, 0, 0, 0, 0, 0, 1]), Int32Array.from([1, 0, 1, 1, 1, 0, 1]), Int32Array.from([1, 0, 1, 1, 1, 0, 1]), Int32Array.from([1, 0, 1, 1, 1, 0, 1]), Int32Array.from([1, 0, 0, 0, 0, 0, 1]), Int32Array.from([1, 1, 1, 1, 1, 1, 1])]), dr.POSITION_ADJUSTMENT_PATTERN = Array.from([Int32Array.from([1, 1, 1, 1, 1]), Int32Array.from([1, 0, 0, 0, 1]), Int32Array.from([1, 0, 1, 0, 1]), Int32Array.from([1, 0, 0, 0, 1]), Int32Array.from([1, 1, 1, 1, 1])]), dr.POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE = Array.from([Int32Array.from([-1, -1, -1, -1, -1, -1, -1]), Int32Array.from([6, 18, -1, -1, -1, -1, -1]), Int32Array.from([6, 22, -1, -1, -1, -1, -1]), Int32Array.from([6, 26, -1, -1, -1, -1, -1]), Int32Array.from([6, 30, -1, -1, -1, -1, -1]), Int32Array.from([6, 34, -1, -1, -1, -1, -1]), Int32Array.from([6, 22, 38, -1, -1, -1, -1]), Int32Array.from([6, 24, 42, -1, -1, -1, -1]), Int32Array.from([6, 26, 46, -1, -1, -1, -1]), Int32Array.from([6, 28, 50, -1, -1, -1, -1]), Int32Array.from([6, 30, 54, -1, -1, -1, -1]), Int32Array.from([6, 32, 58, -1, -1, -1, -1]), Int32Array.from([6, 34, 62, -1, -1, -1, -1]), Int32Array.from([6, 26, 46, 66, -1, -1, -1]), Int32Array.from([6, 26, 48, 70, -1, -1, -1]), Int32Array.from([6, 26, 50, 74, -1, -1, -1]), Int32Array.from([6, 30, 54, 78, -1, -1, -1]), Int32Array.from([6, 30, 56, 82, -1, -1, -1]), Int32Array.from([6, 30, 58, 86, -1, -1, -1]), Int32Array.from([6, 34, 62, 90, -1, -1, -1]), Int32Array.from([6, 28, 50, 72, 94, -1, -1]), Int32Array.from([6, 26, 50, 74, 98, -1, -1]), Int32Array.from([6, 30, 54, 78, 102, -1, -1]), Int32Array.from([6, 28, 54, 80, 106, -1, -1]), Int32Array.from([6, 32, 58, 84, 110, -1, -1]), Int32Array.from([6, 30, 58, 86, 114, -1, -1]), Int32Array.from([6, 34, 62, 90, 118, -1, -1]), Int32Array.from([6, 26, 50, 74, 98, 122, -1]), Int32Array.from([6, 30, 54, 78, 102, 126, -1]), Int32Array.from([6, 26, 52, 78, 104, 130, -1]), Int32Array.from([6, 30, 56, 82, 108, 134, -1]), Int32Array.from([6, 34, 60, 86, 112, 138, -1]), Int32Array.from([6, 30, 58, 86, 114, 142, -1]), Int32Array.from([6, 34, 62, 90, 118, 146, -1]), Int32Array.from([6, 30, 54, 78, 102, 126, 150]), Int32Array.from([6, 24, 50, 76, 102, 128, 154]), Int32Array.from([6, 28, 54, 80, 106, 132, 158]), Int32Array.from([6, 32, 58, 84, 110, 136, 162]), Int32Array.from([6, 26, 54, 82, 110, 138, 166]), Int32Array.from([6, 30, 58, 86, 114, 142, 170])]), dr.TYPE_INFO_COORDINATES = Array.from([Int32Array.from([8, 0]), Int32Array.from([8, 1]), Int32Array.from([8, 2]), Int32Array.from([8, 3]), Int32Array.from([8, 4]), Int32Array.from([8, 5]), Int32Array.from([8, 7]), Int32Array.from([8, 8]), Int32Array.from([7, 8]), Int32Array.from([5, 8]), Int32Array.from([4, 8]), Int32Array.from([3, 8]), Int32Array.from([2, 8]), Int32Array.from([1, 8]), Int32Array.from([0, 8])]), dr.VERSION_INFO_POLY = 7973, dr.TYPE_INFO_POLY = 1335, dr.TYPE_INFO_MASK_PATTERN = 21522; + +class gr { + constructor(t, e) { + this.dataBytes = t, this.errorCorrectionBytes = e + } + + getDataBytes() { + return this.dataBytes + } + + getErrorCorrectionBytes() { + return this.errorCorrectionBytes + } +} + +class fr { + constructor() { + } + + static calculateMaskPenalty(t) { + return lr.applyMaskPenaltyRule1(t) + lr.applyMaskPenaltyRule2(t) + lr.applyMaskPenaltyRule3(t) + lr.applyMaskPenaltyRule4(t) + } + + static encode(t, e, r = null) { + let n = fr.DEFAULT_BYTE_MODE_ENCODING; + const i = null !== r && void 0 !== r.get(or.CHARACTER_SET); + i && (n = r.get(or.CHARACTER_SET).toString()); + const s = this.chooseMode(t, n), o = new w; + if (s === _e.BYTE && (i || fr.DEFAULT_BYTE_MODE_ENCODING !== n)) { + const t = m.getCharacterSetECIByName(n); + void 0 !== t && this.appendECI(t, o) + } + this.appendModeInfo(s, o); + const a = new w; + let l; + if (this.appendBytes(t, s, a, n), null !== r && void 0 !== r.get(or.QR_VERSION)) { + const t = Number.parseInt(r.get(or.QR_VERSION).toString(), 10); + l = Ae.getVersionForNumber(t); + const n = this.calculateBitsNeeded(s, o, a, l); + if (!this.willFit(n, l, e)) throw new ur("Data too big for requested version") + } else l = this.recommendVersion(e, s, o, a); + const h = new w; + h.appendBitArray(o); + const c = s === _e.BYTE ? a.getSizeInBytes() : t.length; + this.appendLengthInfo(c, l, s, h), h.appendBitArray(a); + const u = l.getECBlocksForLevel(e), d = l.getTotalCodewords() - u.getTotalECCodewords(); + this.terminateBits(d, h); + const g = this.interleaveWithECBytes(h, l.getTotalCodewords(), d, u.getNumBlocks()), f = new cr; + f.setECLevel(e), f.setMode(s), f.setVersion(l); + const A = l.getDimensionForVersion(), C = new hr(A, A), E = this.chooseMaskPattern(g, e, l, C); + return f.setMaskPattern(E), dr.buildMatrix(g, e, l, E, C), f.setMatrix(C), f + } + + static recommendVersion(t, e, r, n) { + const i = this.calculateBitsNeeded(e, r, n, Ae.getVersionForNumber(1)), s = this.chooseVersion(i, t), + o = this.calculateBitsNeeded(e, r, n, s); + return this.chooseVersion(o, t) + } + + static calculateBitsNeeded(t, e, r, n) { + return e.getSize() + t.getCharacterCountBits(n) + r.getSize() + } + + static getAlphanumericCode(t) { + return t < fr.ALPHANUMERIC_TABLE.length ? fr.ALPHANUMERIC_TABLE[t] : -1 + } + + static chooseMode(t, e = null) { + if (m.SJIS.getName() === e && this.isOnlyDoubleByteKanji(t)) return _e.KANJI; + let r = !1, n = !1; + for (let e = 0, i = t.length; e < i; ++e) { + const i = t.charAt(e); + if (fr.isDigit(i)) r = !0; else { + if (-1 === this.getAlphanumericCode(i.charCodeAt(0))) return _e.BYTE; + n = !0 + } + } + return n ? _e.ALPHANUMERIC : r ? _e.NUMERIC : _e.BYTE + } + + static isOnlyDoubleByteKanji(t) { + let e; + try { + e = I.encode(t, m.SJIS) + } catch (t) { + return !1 + } + const r = e.length; + if (r % 2 != 0) return !1; + for (let t = 0; t < r; t += 2) { + const r = 255 & e[t]; + if ((r < 129 || r > 159) && (r < 224 || r > 235)) return !1 + } + return !0 + } + + static chooseMaskPattern(t, e, r, n) { + let i = Number.MAX_SAFE_INTEGER, s = -1; + for (let o = 0; o < cr.NUM_MASK_PATTERNS; o++) { + dr.buildMatrix(t, e, r, o, n); + let a = this.calculateMaskPenalty(n); + a < i && (i = a, s = o) + } + return s + } + + static chooseVersion(t, e) { + for (let r = 1; r <= 40; r++) { + const n = Ae.getVersionForNumber(r); + if (fr.willFit(t, n, e)) return n + } + throw new ur("Data too big") + } + + static willFit(t, e, r) { + return e.getTotalCodewords() - e.getECBlocksForLevel(r).getTotalECCodewords() >= (t + 7) / 8 + } + + static terminateBits(t, e) { + const r = 8 * t; + if (e.getSize() > r) throw new ur("data bits cannot fit in the QR Code" + e.getSize() + " > " + r); + for (let t = 0; t < 4 && e.getSize() < r; ++t) e.appendBit(!1); + const n = 7 & e.getSize(); + if (n > 0) for (let t = n; t < 8; t++) e.appendBit(!1); + const i = t - e.getSizeInBytes(); + for (let t = 0; t < i; ++t) e.appendBits(0 == (1 & t) ? 236 : 17, 8); + if (e.getSize() !== r) throw new ur("Bits size does not equal capacity") + } + + static getNumDataBytesAndNumECBytesForBlockID(t, e, r, n, i, s) { + if (n >= r) throw new ur("Block ID too large"); + const o = t % r, a = r - o, l = Math.floor(t / r), h = l + 1, c = Math.floor(e / r), u = c + 1, d = l - c, + g = h - u; + if (d !== g) throw new ur("EC bytes mismatch"); + if (r !== a + o) throw new ur("RS blocks mismatch"); + if (t !== (c + d) * a + (u + g) * o) throw new ur("Total bytes mismatch"); + n < a ? (i[0] = c, s[0] = d) : (i[0] = u, s[0] = g) + } + + static interleaveWithECBytes(t, e, r, n) { + if (t.getSizeInBytes() !== r) throw new ur("Number of bits and data bytes does not match"); + let i = 0, s = 0, o = 0; + const a = new Array; + for (let l = 0; l < n; ++l) { + const h = new Int32Array(1), c = new Int32Array(1); + fr.getNumDataBytesAndNumECBytesForBlockID(e, r, n, l, h, c); + const u = h[0], d = new Uint8Array(u); + t.toBytes(8 * i, d, 0, u); + const g = fr.generateECBytes(d, c[0]); + a.push(new gr(d, g)), s = Math.max(s, u), o = Math.max(o, g.length), i += h[0] + } + if (r !== i) throw new ur("Data bytes does not match offset"); + const l = new w; + for (let t = 0; t < s; ++t) for (const e of a) { + const r = e.getDataBytes(); + t < r.length && l.appendBits(r[t], 8) + } + for (let t = 0; t < o; ++t) for (const e of a) { + const r = e.getErrorCorrectionBytes(); + t < r.length && l.appendBits(r[t], 8) + } + if (e !== l.getSizeInBytes()) throw new ur("Interleaving error: " + e + " and " + l.getSizeInBytes() + " differ."); + return l + } + + static generateECBytes(t, e) { + const r = t.length, n = new Int32Array(r + e); + for (let e = 0; e < r; e++) n[e] = 255 & t[e]; + new ar(q.QR_CODE_FIELD_256).encode(n, e); + const i = new Uint8Array(e); + for (let t = 0; t < e; t++) i[t] = n[r + t]; + return i + } + + static appendModeInfo(t, e) { + e.appendBits(t.getBits(), 4) + } + + static appendLengthInfo(t, e, r, n) { + const i = r.getCharacterCountBits(e); + if (t >= 1 << i) throw new ur(t + " is bigger than " + ((1 << i) - 1)); + n.appendBits(t, i) + } + + static appendBytes(t, e, r, n) { + switch (e) { + case _e.NUMERIC: + fr.appendNumericBytes(t, r); + break; + case _e.ALPHANUMERIC: + fr.appendAlphanumericBytes(t, r); + break; + case _e.BYTE: + fr.append8BitBytes(t, r, n); + break; + case _e.KANJI: + fr.appendKanjiBytes(t, r); + break; + default: + throw new ur("Invalid mode: " + e) + } + } + + static getDigit(t) { + return t.charCodeAt(0) - 48 + } + + static isDigit(t) { + const e = fr.getDigit(t); + return e >= 0 && e <= 9 + } + + static appendNumericBytes(t, e) { + const r = t.length; + let n = 0; + for (; n < r;) { + const i = fr.getDigit(t.charAt(n)); + if (n + 2 < r) { + const r = fr.getDigit(t.charAt(n + 1)), s = fr.getDigit(t.charAt(n + 2)); + e.appendBits(100 * i + 10 * r + s, 10), n += 3 + } else if (n + 1 < r) { + const r = fr.getDigit(t.charAt(n + 1)); + e.appendBits(10 * i + r, 7), n += 2 + } else e.appendBits(i, 4), n++ + } + } + + static appendAlphanumericBytes(t, e) { + const r = t.length; + let n = 0; + for (; n < r;) { + const i = fr.getAlphanumericCode(t.charCodeAt(n)); + if (-1 === i) throw new ur; + if (n + 1 < r) { + const r = fr.getAlphanumericCode(t.charCodeAt(n + 1)); + if (-1 === r) throw new ur; + e.appendBits(45 * i + r, 11), n += 2 + } else e.appendBits(i, 6), n++ + } + } + + static append8BitBytes(t, e, r) { + let n; + try { + n = I.encode(t, r) + } catch (t) { + throw new ur(t) + } + for (let t = 0, r = n.length; t !== r; t++) { + const r = n[t]; + e.appendBits(r, 8) + } + } + + static appendKanjiBytes(t, e) { + let r; + try { + r = I.encode(t, m.SJIS) + } catch (t) { + throw new ur(t) + } + const n = r.length; + for (let t = 0; t < n; t += 2) { + const n = (255 & r[t]) << 8 & 4294967295 | 255 & r[t + 1]; + let i = -1; + if (n >= 33088 && n <= 40956 ? i = n - 33088 : n >= 57408 && n <= 60351 && (i = n - 49472), -1 === i) throw new ur("Invalid byte sequence"); + const s = 192 * (i >> 8) + (255 & i); + e.appendBits(s, 13) + } + } + + static appendECI(t, e) { + e.appendBits(_e.ECI.getBits(), 4), e.appendBits(t.getValue(), 8) + } +} + +fr.ALPHANUMERIC_TABLE = Int32Array.from([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 36, -1, -1, -1, 37, 38, -1, -1, -1, -1, 39, 40, -1, 41, 42, 43, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 44, -1, -1, -1, -1, -1, -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1]), fr.DEFAULT_BYTE_MODE_ENCODING = m.UTF8.getName(); + +class wr { + write(t, e, r, n = null) { + if (0 === t.length) throw new o("Found empty contents"); + if (e < 0 || r < 0) throw new o("Requested dimensions are too small: " + e + "x" + r); + let i = de.L, s = wr.QUIET_ZONE_SIZE; + null !== n && (void 0 !== n.get(or.ERROR_CORRECTION) && (i = de.fromString(n.get(or.ERROR_CORRECTION).toString())), void 0 !== n.get(or.MARGIN) && (s = Number.parseInt(n.get(or.MARGIN).toString(), 10))); + const a = fr.encode(t, i, n); + return this.renderResult(a, e, r, s) + } + + writeToDom(t, e, r, n, i = null) { + "string" == typeof t && (t = document.querySelector(t)); + const s = this.write(e, r, n, i); + t && t.appendChild(s) + } + + renderResult(t, e, r, n) { + const i = t.getMatrix(); + if (null === i) throw new j; + const s = i.getWidth(), o = i.getHeight(), a = s + 2 * n, l = o + 2 * n, h = Math.max(e, a), c = Math.max(r, l), + u = Math.min(Math.floor(h / a), Math.floor(c / l)), d = Math.floor((h - s * u) / 2), + g = Math.floor((c - o * u) / 2), f = this.createSVGElement(h, c); + for (let t = 0, e = g; t < o; t++, e += u) for (let r = 0, n = d; r < s; r++, n += u) if (1 === i.get(r, t)) { + const t = this.createSvgRectElement(n, e, u, u); + f.appendChild(t) + } + return f + } + + createSVGElement(t, e) { + const r = document.createElementNS(wr.SVG_NS, "svg"); + return r.setAttributeNS(null, "height", t.toString()), r.setAttributeNS(null, "width", e.toString()), r + } + + createSvgRectElement(t, e, r, n) { + const i = document.createElementNS(wr.SVG_NS, "rect"); + return i.setAttributeNS(null, "x", t.toString()), i.setAttributeNS(null, "y", e.toString()), i.setAttributeNS(null, "height", r.toString()), i.setAttributeNS(null, "width", n.toString()), i.setAttributeNS(null, "fill", "#000000"), i + } +} + +wr.QUIET_ZONE_SIZE = 4, wr.SVG_NS = "http://www.w3.org/2000/svg"; + +class Ar { + encode(t, e, r, n, i) { + if (0 === t.length) throw new o("Found empty contents"); + if (e !== v.QR_CODE) throw new o("Can only encode QR_CODE, but got " + e); + if (r < 0 || n < 0) throw new o(`Requested dimensions are too small: ${r}x${n}`); + let s = de.L, a = Ar.QUIET_ZONE_SIZE; + null !== i && (void 0 !== i.get(or.ERROR_CORRECTION) && (s = de.fromString(i.get(or.ERROR_CORRECTION).toString())), void 0 !== i.get(or.MARGIN) && (a = Number.parseInt(i.get(or.MARGIN).toString(), 10))); + const l = fr.encode(t, s, i); + return Ar.renderResult(l, r, n, a) + } + + static renderResult(t, e, r, n) { + const i = t.getMatrix(); + if (null === i) throw new j; + const s = i.getWidth(), o = i.getHeight(), a = s + 2 * n, l = o + 2 * n, h = Math.max(e, a), c = Math.max(r, l), + u = Math.min(Math.floor(h / a), Math.floor(c / l)), d = Math.floor((h - s * u) / 2), + g = Math.floor((c - o * u) / 2), f = new T(h, c); + for (let t = 0, e = g; t < o; t++, e += u) for (let r = 0, n = d; r < s; r++, n += u) 1 === i.get(r, t) && f.setRegion(n, e, u, u); + return f + } +} + +Ar.QUIET_ZONE_SIZE = 4; + +class Cr extends y { + constructor(t, e, r, n, i, s, a, l) { + if (super(s, a), this.yuvData = t, this.dataWidth = e, this.dataHeight = r, this.left = n, this.top = i, n + s > e || i + a > r) throw new o("Crop rectangle does not fit within image data."); + l && this.reverseHorizontal(s, a) + } + + getRow(t, e) { + if (t < 0 || t >= this.getHeight()) throw new o("Requested row is outside the image: " + t); + const r = this.getWidth(); + (null == e || e.length < r) && (e = new Uint8ClampedArray(r)); + const n = (t + this.top) * this.dataWidth + this.left; + return c.arraycopy(this.yuvData, n, e, 0, r), e + } + + getMatrix() { + const t = this.getWidth(), e = this.getHeight(); + if (t === this.dataWidth && e === this.dataHeight) return this.yuvData; + const r = t * e, n = new Uint8ClampedArray(r); + let i = this.top * this.dataWidth + this.left; + if (t === this.dataWidth) return c.arraycopy(this.yuvData, i, n, 0, r), n; + for (let r = 0; r < e; r++) { + const e = r * t; + c.arraycopy(this.yuvData, i, n, e, t), i += this.dataWidth + } + return n + } + + isCropSupported() { + return !0 + } + + crop(t, e, r, n) { + return new Cr(this.yuvData, this.dataWidth, this.dataHeight, this.left + t, this.top + e, r, n, !1) + } + + renderThumbnail() { + const t = this.getWidth() / Cr.THUMBNAIL_SCALE_FACTOR, e = this.getHeight() / Cr.THUMBNAIL_SCALE_FACTOR, + r = new Int32Array(t * e), n = this.yuvData; + let i = this.top * this.dataWidth + this.left; + for (let s = 0; s < e; s++) { + const e = s * t; + for (let s = 0; s < t; s++) { + const t = 255 & n[i + s * Cr.THUMBNAIL_SCALE_FACTOR]; + r[e + s] = 4278190080 | 65793 * t + } + i += this.dataWidth * Cr.THUMBNAIL_SCALE_FACTOR + } + return r + } + + getThumbnailWidth() { + return this.getWidth() / Cr.THUMBNAIL_SCALE_FACTOR + } + + getThumbnailHeight() { + return this.getHeight() / Cr.THUMBNAIL_SCALE_FACTOR + } + + reverseHorizontal(t, e) { + const r = this.yuvData; + for (let n = 0, i = this.top * this.dataWidth + this.left; n < e; n++, i += this.dataWidth) { + const e = i + t / 2; + for (let n = i, s = i + t - 1; n < e; n++, s--) { + const t = r[n]; + r[n] = r[s], r[s] = t + } + } + } + + invert() { + return new O(this) + } +} + +Cr.THUMBNAIL_SCALE_FACTOR = 2; + +class Er extends y { + constructor(t, e, r, n, i, s, a) { + if (super(e, r), this.dataWidth = n, this.dataHeight = i, this.left = s, this.top = a, 4 === t.BYTES_PER_ELEMENT) { + const n = e * r, i = new Uint8ClampedArray(n); + for (let e = 0; e < n; e++) { + const r = t[e], n = r >> 16 & 255, s = r >> 7 & 510, o = 255 & r; + i[e] = (n + s + o) / 4 & 255 + } + this.luminances = i + } else this.luminances = t; + if (void 0 === n && (this.dataWidth = e), void 0 === i && (this.dataHeight = r), void 0 === s && (this.left = 0), void 0 === a && (this.top = 0), this.left + e > this.dataWidth || this.top + r > this.dataHeight) throw new o("Crop rectangle does not fit within image data.") + } + + getRow(t, e) { + if (t < 0 || t >= this.getHeight()) throw new o("Requested row is outside the image: " + t); + const r = this.getWidth(); + (null == e || e.length < r) && (e = new Uint8ClampedArray(r)); + const n = (t + this.top) * this.dataWidth + this.left; + return c.arraycopy(this.luminances, n, e, 0, r), e + } + + getMatrix() { + const t = this.getWidth(), e = this.getHeight(); + if (t === this.dataWidth && e === this.dataHeight) return this.luminances; + const r = t * e, n = new Uint8ClampedArray(r); + let i = this.top * this.dataWidth + this.left; + if (t === this.dataWidth) return c.arraycopy(this.luminances, i, n, 0, r), n; + for (let r = 0; r < e; r++) { + const e = r * t; + c.arraycopy(this.luminances, i, n, e, t), i += this.dataWidth + } + return n + } + + isCropSupported() { + return !0 + } + + crop(t, e, r, n) { + return new Er(this.luminances, r, n, this.dataWidth, this.dataHeight, this.left + t, this.top + e) + } + + invert() { + return new O(this) + } +} + +class mr extends m { + static forName(t) { + return this.getCharacterSetECIByName(t) + } +} + +class _r { +} + +_r.ISO_8859_1 = m.ISO8859_1; + +class Ir { + isCompact() { + return this.compact + } + + setCompact(t) { + this.compact = t + } + + getSize() { + return this.size + } + + setSize(t) { + this.size = t + } + + getLayers() { + return this.layers + } + + setLayers(t) { + this.layers = t + } + + getCodeWords() { + return this.codeWords + } + + setCodeWords(t) { + this.codeWords = t + } + + getMatrix() { + return this.matrix + } + + setMatrix(t) { + this.matrix = t + } +} + +class Sr { + static singletonList(t) { + return [t] + } + + static min(t, e) { + return t.sort(e)[0] + } +} + +class pr extends class { + constructor(t) { + this.previous = t + } + + getPrevious() { + return this.previous + } +} { + constructor(t, e, r) { + super(t), this.value = e, this.bitCount = r + } + + appendTo(t, e) { + t.appendBits(this.value, this.bitCount) + } + + add(t, e) { + return new pr(this, t, e) + } + + addBinaryShift(t, e) { + return console.warn("addBinaryShift on SimpleToken, this simply returns a copy of this token"), new pr(this, t, e) + } + + toString() { + let t = this.value & (1 << this.bitCount) - 1; + return t |= 1 << this.bitCount, "<" + f.toBinaryString(t | 1 << this.bitCount).substring(1) + ">" + } +} + +class Tr extends pr { + constructor(t, e, r) { + super(t, 0, 0), this.binaryShiftStart = e, this.binaryShiftByteCount = r + } + + appendTo(t, e) { + for (let r = 0; r < this.binaryShiftByteCount; r++) (0 === r || 31 === r && this.binaryShiftByteCount <= 62) && (t.appendBits(31, 5), this.binaryShiftByteCount > 62 ? t.appendBits(this.binaryShiftByteCount - 31, 16) : 0 === r ? t.appendBits(Math.min(this.binaryShiftByteCount, 31), 5) : t.appendBits(this.binaryShiftByteCount - 31, 5)), t.appendBits(e[this.binaryShiftStart + r], 8) + } + + addBinaryShift(t, e) { + return new Tr(this, t, e) + } + + toString() { + return "<" + this.binaryShiftStart + "::" + (this.binaryShiftStart + this.binaryShiftByteCount - 1) + ">" + } +} + +function Rr(t, e, r) { + return new pr(t, e, r) +} + +const Nr = ["UPPER", "LOWER", "DIGIT", "MIXED", "PUNCT"], Dr = new pr(null, 0, 0), + yr = [Int32Array.from([0, 327708, 327710, 327709, 656318]), Int32Array.from([590318, 0, 327710, 327709, 656318]), Int32Array.from([262158, 590300, 0, 590301, 932798]), Int32Array.from([327709, 327708, 656318, 0, 327710]), Int32Array.from([327711, 656380, 656382, 656381, 0])]; +const Or = function (t) { + for (let e of t) g.fill(e, -1); + return t[0][4] = 0, t[1][4] = 0, t[1][0] = 28, t[3][4] = 0, t[2][4] = 0, t[2][0] = 15, t +}(g.createInt32Array(6, 6)); + +class Mr { + constructor(t, e, r, n) { + this.token = t, this.mode = e, this.binaryShiftByteCount = r, this.bitCount = n + } + + getMode() { + return this.mode + } + + getToken() { + return this.token + } + + getBinaryShiftByteCount() { + return this.binaryShiftByteCount + } + + getBitCount() { + return this.bitCount + } + + latchAndAppend(t, e) { + let r = this.bitCount, n = this.token; + if (t !== this.mode) { + let e = yr[this.mode][t]; + n = Rr(n, 65535 & e, e >> 16), r += e >> 16 + } + let i = 2 === t ? 4 : 5; + return n = Rr(n, e, i), new Mr(n, t, 0, r + i) + } + + shiftAndAppend(t, e) { + let r = this.token, n = 2 === this.mode ? 4 : 5; + return r = Rr(r, Or[this.mode][t], n), r = Rr(r, e, 5), new Mr(r, this.mode, 0, this.bitCount + n + 5) + } + + addBinaryShiftChar(t) { + let e = this.token, r = this.mode, n = this.bitCount; + if (4 === this.mode || 2 === this.mode) { + let t = yr[r][0]; + e = Rr(e, 65535 & t, t >> 16), n += t >> 16, r = 0 + } + let i = 0 === this.binaryShiftByteCount || 31 === this.binaryShiftByteCount ? 18 : 62 === this.binaryShiftByteCount ? 9 : 8, + s = new Mr(e, r, this.binaryShiftByteCount + 1, n + i); + return 2078 === s.binaryShiftByteCount && (s = s.endBinaryShift(t + 1)), s + } + + endBinaryShift(t) { + if (0 === this.binaryShiftByteCount) return this; + let e = this.token; + return e = function (t, e, r) { + return new Tr(t, e, r) + }(e, t - this.binaryShiftByteCount, this.binaryShiftByteCount), new Mr(e, this.mode, 0, this.bitCount) + } + + isBetterThanOrEqualTo(t) { + let e = this.bitCount + (yr[this.mode][t.mode] >> 16); + return this.binaryShiftByteCount < t.binaryShiftByteCount ? e += Mr.calculateBinaryShiftCost(t) - Mr.calculateBinaryShiftCost(this) : this.binaryShiftByteCount > t.binaryShiftByteCount && t.binaryShiftByteCount > 0 && (e += 10), e <= t.bitCount + } + + toBitArray(t) { + let e = []; + for (let r = this.endBinaryShift(t.length).token; null !== r; r = r.getPrevious()) e.unshift(r); + let r = new w; + for (const n of e) n.appendTo(r, t); + return r + } + + toString() { + return S.format("%s bits=%d bytes=%d", Nr[this.mode], this.bitCount, this.binaryShiftByteCount) + } + + static calculateBinaryShiftCost(t) { + return t.binaryShiftByteCount > 62 ? 21 : t.binaryShiftByteCount > 31 ? 20 : t.binaryShiftByteCount > 0 ? 10 : 0 + } +} + +Mr.INITIAL_STATE = new Mr(Dr, 0, 0, 0); +const Br = function (t) { + const e = S.getCharCode(" "), r = S.getCharCode("."), n = S.getCharCode(","); + t[0][e] = 1; + const i = S.getCharCode("Z"), s = S.getCharCode("A"); + for (let e = s; e <= i; e++) t[0][e] = e - s + 2; + t[1][e] = 1; + const o = S.getCharCode("z"), a = S.getCharCode("a"); + for (let e = a; e <= o; e++) t[1][e] = e - a + 2; + t[2][e] = 1; + const l = S.getCharCode("9"), h = S.getCharCode("0"); + for (let e = h; e <= l; e++) t[2][e] = e - h + 2; + t[2][n] = 12, t[2][r] = 13; + const c = ["\0", " ", "", "", "", "", "", "", "", "\b", "\t", "\n", "\v", "\f", "\r", "", "", "", "", "", "@", "\\", "^", "_", "`", "|", "~", ""]; + for (let e = 0; e < c.length; e++) t[3][S.getCharCode(c[e])] = e; + const u = ["\0", "\r", "\0", "\0", "\0", "\0", "!", "'", "#", "$", "%", "&", "'", "(", ")", "*", "+", ",", "-", ".", "/", ":", ";", "<", "=", ">", "?", "[", "]", "{", "}"]; + for (let e = 0; e < u.length; e++) S.getCharCode(u[e]) > 0 && (t[4][S.getCharCode(u[e])] = e); + return t +}(g.createInt32Array(5, 256)); + +class br { + constructor(t) { + this.text = t + } + + encode() { + const t = S.getCharCode(" "), e = S.getCharCode("\n"); + let r = Sr.singletonList(Mr.INITIAL_STATE); + for (let n = 0; n < this.text.length; n++) { + let i, s = n + 1 < this.text.length ? this.text[n + 1] : 0; + switch (this.text[n]) { + case S.getCharCode("\r"): + i = s === e ? 2 : 0; + break; + case S.getCharCode("."): + i = s === t ? 3 : 0; + break; + case S.getCharCode(","): + i = s === t ? 4 : 0; + break; + case S.getCharCode(":"): + i = s === t ? 5 : 0; + break; + default: + i = 0 + } + i > 0 ? (r = br.updateStateListForPair(r, n, i), n++) : r = this.updateStateListForChar(r, n) + } + return Sr.min(r, ((t, e) => t.getBitCount() - e.getBitCount())).toBitArray(this.text) + } + + updateStateListForChar(t, e) { + const r = []; + for (let n of t) this.updateStateForChar(n, e, r); + return br.simplifyStates(r) + } + + updateStateForChar(t, e, r) { + let n = 255 & this.text[e], i = Br[t.getMode()][n] > 0, s = null; + for (let o = 0; o <= 4; o++) { + let a = Br[o][n]; + if (a > 0) { + if (null == s && (s = t.endBinaryShift(e)), !i || o === t.getMode() || 2 === o) { + const t = s.latchAndAppend(o, a); + r.push(t) + } + if (!i && Or[t.getMode()][o] >= 0) { + const t = s.shiftAndAppend(o, a); + r.push(t) + } + } + } + if (t.getBinaryShiftByteCount() > 0 || 0 === Br[t.getMode()][n]) { + let n = t.addBinaryShiftChar(e); + r.push(n) + } + } + + static updateStateListForPair(t, e, r) { + const n = []; + for (let i of t) this.updateStateForPair(i, e, r, n); + return this.simplifyStates(n) + } + + static updateStateForPair(t, e, r, n) { + let i = t.endBinaryShift(e); + if (n.push(i.latchAndAppend(4, r)), 4 !== t.getMode() && n.push(i.shiftAndAppend(4, r)), 3 === r || 4 === r) { + let t = i.latchAndAppend(2, 16 - r).latchAndAppend(2, 1); + n.push(t) + } + if (t.getBinaryShiftByteCount() > 0) { + let r = t.addBinaryShiftChar(e).addBinaryShiftChar(e + 1); + n.push(r) + } + } + + static simplifyStates(t) { + let e = []; + for (const r of t) { + let t = !0; + for (const n of e) { + if (n.isBetterThanOrEqualTo(r)) { + t = !1; + break + } + r.isBetterThanOrEqualTo(n) && (e = e.filter((t => t !== n))) + } + t && e.push(r) + } + return e + } +} + +class Pr { + constructor() { + } + + static encodeBytes(t) { + return Pr.encode(t, Pr.DEFAULT_EC_PERCENT, Pr.DEFAULT_AZTEC_LAYERS) + } + + static encode(t, e, r) { + let n, i, s, a, l, h = new br(t).encode(), c = f.truncDivision(h.getSize() * e, 100) + 11, u = h.getSize() + c; + if (r !== Pr.DEFAULT_AZTEC_LAYERS) { + if (n = r < 0, i = Math.abs(r), i > (n ? Pr.MAX_NB_BITS_COMPACT : Pr.MAX_NB_BITS)) throw new o(S.format("Illegal value %s for layers", r)); + s = Pr.totalBitsInLayer(i, n), a = Pr.WORD_SIZE[i]; + let t = s - s % a; + if (l = Pr.stuffBits(h, a), l.getSize() + c > t) throw new o("Data to large for user specified layer"); + if (n && l.getSize() > 64 * a) throw new o("Data to large for user specified layer") + } else { + a = 0, l = null; + for (let t = 0; ; t++) { + if (t > Pr.MAX_NB_BITS) throw new o("Data too large for an Aztec code"); + if (n = t <= 3, i = n ? t + 1 : t, s = Pr.totalBitsInLayer(i, n), u > s) continue; + null != l && a === Pr.WORD_SIZE[i] || (a = Pr.WORD_SIZE[i], l = Pr.stuffBits(h, a)); + let e = s - s % a; + if (!(n && l.getSize() > 64 * a) && l.getSize() + c <= e) break + } + } + let d, g = Pr.generateCheckWords(l, s, a), w = l.getSize() / a, A = Pr.generateModeMessage(n, i, w), + C = (n ? 11 : 14) + 4 * i, E = new Int32Array(C); + if (n) { + d = C; + for (let t = 0; t < E.length; t++) E[t] = t + } else { + d = C + 1 + 2 * f.truncDivision(f.truncDivision(C, 2) - 1, 15); + let t = f.truncDivision(C, 2), e = f.truncDivision(d, 2); + for (let r = 0; r < t; r++) { + let n = r + f.truncDivision(r, 15); + E[t - r - 1] = e - n - 1, E[t + r] = e + n + 1 + } + } + let m = new T(d); + for (let t = 0, e = 0; t < i; t++) { + let r = 4 * (i - t) + (n ? 9 : 12); + for (let n = 0; n < r; n++) { + let i = 2 * n; + for (let s = 0; s < 2; s++) g.get(e + i + s) && m.set(E[2 * t + s], E[2 * t + n]), g.get(e + 2 * r + i + s) && m.set(E[2 * t + n], E[C - 1 - 2 * t - s]), g.get(e + 4 * r + i + s) && m.set(E[C - 1 - 2 * t - s], E[C - 1 - 2 * t - n]), g.get(e + 6 * r + i + s) && m.set(E[C - 1 - 2 * t - n], E[2 * t + s]) + } + e += 8 * r + } + if (Pr.drawModeMessage(m, n, d, A), n) Pr.drawBullsEye(m, f.truncDivision(d, 2), 5); else { + Pr.drawBullsEye(m, f.truncDivision(d, 2), 7); + for (let t = 0, e = 0; t < f.truncDivision(C, 2) - 1; t += 15, e += 16) for (let t = 1 & f.truncDivision(d, 2); t < d; t += 2) m.set(f.truncDivision(d, 2) - e, t), m.set(f.truncDivision(d, 2) + e, t), m.set(t, f.truncDivision(d, 2) - e), m.set(t, f.truncDivision(d, 2) + e) + } + let _ = new Ir; + return _.setCompact(n), _.setSize(d), _.setLayers(i), _.setCodeWords(w), _.setMatrix(m), _ + } + + static drawBullsEye(t, e, r) { + for (let n = 0; n < r; n += 2) for (let r = e - n; r <= e + n; r++) t.set(r, e - n), t.set(r, e + n), t.set(e - n, r), t.set(e + n, r); + t.set(e - r, e - r), t.set(e - r + 1, e - r), t.set(e - r, e - r + 1), t.set(e + r, e - r), t.set(e + r, e - r + 1), t.set(e + r, e + r - 1) + } + + static generateModeMessage(t, e, r) { + let n = new w; + return t ? (n.appendBits(e - 1, 2), n.appendBits(r - 1, 6), n = Pr.generateCheckWords(n, 28, 4)) : (n.appendBits(e - 1, 5), n.appendBits(r - 1, 11), n = Pr.generateCheckWords(n, 40, 4)), n + } + + static drawModeMessage(t, e, r, n) { + let i = f.truncDivision(r, 2); + if (e) for (let e = 0; e < 7; e++) { + let r = i - 3 + e; + n.get(e) && t.set(r, i - 5), n.get(e + 7) && t.set(i + 5, r), n.get(20 - e) && t.set(r, i + 5), n.get(27 - e) && t.set(i - 5, r) + } else for (let e = 0; e < 10; e++) { + let r = i - 5 + e + f.truncDivision(e, 5); + n.get(e) && t.set(r, i - 7), n.get(e + 10) && t.set(i + 7, r), n.get(29 - e) && t.set(r, i + 7), n.get(39 - e) && t.set(i - 7, r) + } + } + + static generateCheckWords(t, e, r) { + let n = t.getSize() / r, i = new ar(Pr.getGF(r)), s = f.truncDivision(e, r), o = Pr.bitsToWords(t, r, s); + i.encode(o, s - n); + let a = e % r, l = new w; + l.appendBits(0, a); + for (const t of Array.from(o)) l.appendBits(t, r); + return l + } + + static bitsToWords(t, e, r) { + let n, i, s = new Int32Array(r); + for (n = 0, i = t.getSize() / e; n < i; n++) { + let r = 0; + for (let i = 0; i < e; i++) r |= t.get(n * e + i) ? 1 << e - i - 1 : 0; + s[n] = r + } + return s + } + + static getGF(t) { + switch (t) { + case 4: + return q.AZTEC_PARAM; + case 6: + return q.AZTEC_DATA_6; + case 8: + return q.AZTEC_DATA_8; + case 10: + return q.AZTEC_DATA_10; + case 12: + return q.AZTEC_DATA_12; + default: + throw new o("Unsupported word size " + t) + } + } + + static stuffBits(t, e) { + let r = new w, n = t.getSize(), i = (1 << e) - 2; + for (let s = 0; s < n; s += e) { + let o = 0; + for (let r = 0; r < e; r++) (s + r >= n || t.get(s + r)) && (o |= 1 << e - 1 - r); + (o & i) === i ? (r.appendBits(o & i, e), s--) : 0 == (o & i) ? (r.appendBits(1 | o, e), s--) : r.appendBits(o, e) + } + return r + } + + static totalBitsInLayer(t, e) { + return ((e ? 88 : 112) + 16 * t) * t + } +} + +Pr.DEFAULT_EC_PERCENT = 33, Pr.DEFAULT_AZTEC_LAYERS = 0, Pr.MAX_NB_BITS = 32, Pr.MAX_NB_BITS_COMPACT = 4, Pr.WORD_SIZE = Int32Array.from([4, 6, 6, 8, 8, 8, 8, 8, 8, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12]); + +class Lr { + encode(t, e, r, n) { + return this.encodeWithHints(t, e, r, n, null) + } + + encodeWithHints(t, e, r, n, i) { + let s = _r.ISO_8859_1, o = Pr.DEFAULT_EC_PERCENT, a = Pr.DEFAULT_AZTEC_LAYERS; + return null != i && (i.has(or.CHARACTER_SET) && (s = mr.forName(i.get(or.CHARACTER_SET).toString())), i.has(or.ERROR_CORRECTION) && (o = f.parseInt(i.get(or.ERROR_CORRECTION).toString())), i.has(or.AZTEC_LAYERS) && (a = f.parseInt(i.get(or.AZTEC_LAYERS).toString()))), Lr.encodeLayers(t, e, r, n, s, o, a) + } + + static encodeLayers(t, e, r, n, i, s, a) { + if (e !== v.AZTEC) throw new o("Can only encode AZTEC, but got " + e); + let l = Pr.encode(S.getBytes(t, i), s, a); + return Lr.renderResult(l, r, n) + } + + static renderResult(t, e, r) { + let n = t.getMatrix(); + if (null == n) throw new j; + let i = n.getWidth(), s = n.getHeight(), o = Math.max(e, i), a = Math.max(r, s), l = Math.min(o / i, a / s), + h = (o - i * l) / 2, c = (a - s * l) / 2, u = new T(o, a); + for (let t = 0, e = c; t < s; t++, e += l) for (let r = 0, s = h; r < i; r++, s += l) n.get(r, t) && u.setRegion(s, e, l, l); + return u + } +} + +t.AbstractExpandedDecoder = xt, t.ArgumentException = s, t.ArithmeticException = K, t.AztecCode = Ir, t.AztecCodeReader = dt, t.AztecCodeWriter = Lr, t.AztecDecoder = $, t.AztecDetector = ut, t.AztecDetectorResult = it, t.AztecEncoder = Pr, t.AztecHighLevelEncoder = br, t.AztecPoint = ct, t.BarcodeFormat = v, t.Binarizer = h, t.BinaryBitmap = a, t.BitArray = w, t.BitMatrix = T, t.BitSource = ae, t.BrowserAztecCodeReader = class extends L { + constructor(t = 500) { + super(new dt, t) + } +}, t.BrowserBarcodeReader = class extends L { + constructor(t = 500, e) { + super(new ee(e), t, e) + } +}, t.BrowserCodeReader = L, t.BrowserDatamatrixCodeReader = class extends L { + constructor(t = 500) { + super(new ue, t) + } +}, t.BrowserMultiFormatReader = class extends L { + constructor(t = null, e = 500) { + const r = new ir; + r.setHints(t), super(r, e) + } + + decodeBitmap(t) { + return this.reader.decodeWithState(t) + } +}, t.BrowserPDF417Reader = class extends L { + constructor(t = 500) { + super(new rr, t) + } +}, t.BrowserQRCodeReader = class extends L { + constructor(t = 500) { + super(new Me, t) + } +}, t.BrowserQRCodeSvgWriter = wr, t.CharacterSetECI = m, t.ChecksumException = l, t.Code128Reader = ft, t.Code39Reader = wt, t.DataMatrixDecodedBitStreamParser = le, t.DataMatrixReader = ue, t.DecodeHintType = C, t.DecoderResult = z, t.DefaultGridSampler = lt, t.DetectorResult = nt, t.EAN13Reader = St, t.EncodeHintType = or, t.Exception = i, t.FormatException = E, t.GenericGF = q, t.GenericGFPoly = Z, t.GlobalHistogramBinarizer = N, t.GridSampler = ot, t.GridSamplerInstance = ht, t.HTMLCanvasElementLuminanceSource = M, t.HybridBinarizer = D, t.ITFReader = At, t.IllegalArgumentException = o, t.IllegalStateException = j, t.InvertedLuminanceSource = O, t.LuminanceSource = y, t.MathUtils = tt, t.MultiFormatOneDReader = ee, t.MultiFormatReader = ir, t.MultiFormatWriter = class { + encode(t, e, r, n, i) { + let s; + switch (e) { + case v.QR_CODE: + s = new Ar; + break; + default: + throw new o("No encoder available for format " + e) + } + return s.encode(t, e, r, n, i) + } +}, t.NotFoundException = R, t.OneDReader = gt, t.PDF417DecodedBitStreamParser = tr, t.PDF417DecoderErrorCorrection = ke, t.PDF417Reader = rr, t.PDF417ResultMetadata = Ye, t.PerspectiveTransform = at, t.PlanarYUVLuminanceSource = Cr, t.QRCodeByteMatrix = hr, t.QRCodeDataMask = Ce, t.QRCodeDecodedBitStreamParser = Ie, t.QRCodeDecoderErrorCorrectionLevel = de, t.QRCodeDecoderFormatInformation = ge, t.QRCodeEncoder = fr, t.QRCodeEncoderQRCode = cr, t.QRCodeMaskUtil = lr, t.QRCodeMatrixUtil = dr, t.QRCodeMode = _e, t.QRCodeReader = Me, t.QRCodeVersion = Ae, t.QRCodeWriter = Ar, t.RGBLuminanceSource = Er, t.RSS14Reader = te, t.RSSExpandedReader = Jt, t.ReaderException = nr, t.ReedSolomonDecoder = J, t.ReedSolomonEncoder = ar, t.ReedSolomonException = Q, t.Result = F, t.ResultMetadataType = W, t.ResultPoint = rt, t.StringUtils = S, t.UnsupportedOperationException = _, t.VideoInputDevice = B, t.WhiteRectangleDetector = st, t.WriterException = ur, t.ZXingArrays = g, t.ZXingCharset = mr, t.ZXingInteger = f, t.ZXingStandardCharsets = _r, t.ZXingStringBuilder = p, t.ZXingStringEncoding = I, t.ZXingSystem = c, t.createAbstractExpandedDecoder = qt, Object.defineProperty(t, "__esModule", {value: !0}) +})) +; \ No newline at end of file diff --git a/src/main/resources/static/js/cookie.js b/src/main/resources/static/js/cookie.js index 98bc4c8a..6b296f60 100644 --- a/src/main/resources/static/js/cookie.js +++ b/src/main/resources/static/js/cookie.js @@ -1,41 +1,41 @@ -var cookieUtil={ - createCookie:function (name,value,days){ - var expires=""; - if (days){ - var date=new Date(); - date.setTime(date.getTime()+(days*14*24*3600*1000)); - expires=";expires="+date.toGMTString(); +var cookieUtil = { + createCookie: function (name, value, days) { + var expires = ""; + if (days) { + var date = new Date(); + date.setTime(date.getTime() + (days * 14 * 24 * 3600 * 1000)); + expires = ";expires=" + date.toGMTString(); } - document.cookie=name+"="+value+expires+";path=/"; + document.cookie = name + "=" + value + expires + ";path=/"; }, /*设置cookie*/ - set:function(name,value,expires,path,domain,secure){ - var cookie=encodeURIComponent(name)+"="+encodeURIComponent(value); - if(expires instanceof Date){ - cookie+="; expires="+expires.toGMTString(); - }else{ - var date=new Date(); - date.setTime(date.getTime()+expires*24*3600*1000); - cookie+="; expires="+date.toGMTString(); + set: function (name, value, expires, path, domain, secure) { + var cookie = encodeURIComponent(name) + "=" + encodeURIComponent(value); + if (expires instanceof Date) { + cookie += "; expires=" + expires.toGMTString(); + } else { + var date = new Date(); + date.setTime(date.getTime() + expires * 24 * 3600 * 1000); + cookie += "; expires=" + date.toGMTString(); } - if(path){ - cookie+="; path="+path; + if (path) { + cookie += "; path=" + path; } - if(domain){ - cookie+="; domain="+domain; + if (domain) { + cookie += "; domain=" + domain; } if (secure) { - cookie+="; "+secure; + cookie += "; " + secure; } - document.cookie=cookie; + document.cookie = cookie; }, /*获取cookie*/ - get:function(name){ - var cookieName=encodeURIComponent(name); + get: function (name) { + var cookieName = encodeURIComponent(name); /*正则表达式获取cookie*/ - var restr="(^| )"+cookieName+"=([^;]*)(;|$)"; - var reg=new RegExp(restr); - var cookieValue=document.cookie.match(reg)[2]; + var restr = "(^| )" + cookieName + "=([^;]*)(;|$)"; + var reg = new RegExp(restr); + var cookieValue = document.cookie.match(reg)[2]; /*字符串截取cookie*/ /*var cookieStart=document.cookie.indexOf(cookieName+“=”); var cookieValue=null; diff --git a/src/main/resources/static/js/jsQR.js b/src/main/resources/static/js/jsQR.js index 072fc022..ae6ffb6b 100644 --- a/src/main/resources/static/js/jsQR.js +++ b/src/main/resources/static/js/jsQR.js @@ -1,91 +1,127 @@ (function webpackUniversalModuleDefinition(root, factory) { - if(typeof exports === 'object' && typeof module === 'object') + if (typeof exports === 'object' && typeof module === 'object') module.exports = factory(); - else if(typeof define === 'function' && define.amd) + else if (typeof define === 'function' && define.amd) define([], factory); - else if(typeof exports === 'object') + else if (typeof exports === 'object') exports["jsQR"] = factory(); else root["jsQR"] = factory(); -})(typeof self !== 'undefined' ? self : this, function() { - return /******/ (function(modules) { // webpackBootstrap +})(typeof self !== 'undefined' ? self : this, function () { + return /******/ (function (modules) { // webpackBootstrap /******/ // The module cache - /******/ var installedModules = {}; + /******/ + var installedModules = {}; /******/ /******/ // The require function - /******/ function __webpack_require__(moduleId) { + /******/ + function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache - /******/ if(installedModules[moduleId]) { - /******/ return installedModules[moduleId].exports; - /******/ } + /******/ + if (installedModules[moduleId]) { + /******/ + return installedModules[moduleId].exports; + /******/ + } /******/ // Create a new module (and put it into the cache) - /******/ var module = installedModules[moduleId] = { - /******/ i: moduleId, - /******/ l: false, - /******/ exports: {} - /******/ }; + /******/ + var module = installedModules[moduleId] = { + /******/ i: moduleId, + /******/ l: false, + /******/ exports: {} + /******/ + }; /******/ /******/ // Execute the module function - /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); + /******/ + modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded - /******/ module.l = true; + /******/ + module.l = true; /******/ /******/ // Return the exports of the module - /******/ return module.exports; - /******/ } + /******/ + return module.exports; + /******/ + } + /******/ /******/ /******/ // expose the modules object (__webpack_modules__) - /******/ __webpack_require__.m = modules; + /******/ + __webpack_require__.m = modules; /******/ /******/ // expose the module cache - /******/ __webpack_require__.c = installedModules; + /******/ + __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports - /******/ __webpack_require__.d = function(exports, name, getter) { - /******/ if(!__webpack_require__.o(exports, name)) { - /******/ Object.defineProperty(exports, name, { - /******/ configurable: false, - /******/ enumerable: true, - /******/ get: getter - /******/ }); - /******/ } - /******/ }; + /******/ + __webpack_require__.d = function (exports, name, getter) { + /******/ + if (!__webpack_require__.o(exports, name)) { + /******/ + Object.defineProperty(exports, name, { + /******/ configurable: false, + /******/ enumerable: true, + /******/ get: getter + /******/ + }); + /******/ + } + /******/ + }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules - /******/ __webpack_require__.n = function(module) { - /******/ var getter = module && module.__esModule ? - /******/ function getDefault() { return module['default']; } : - /******/ function getModuleExports() { return module; }; - /******/ __webpack_require__.d(getter, 'a', getter); - /******/ return getter; - /******/ }; + /******/ + __webpack_require__.n = function (module) { + /******/ + var getter = module && module.__esModule ? + /******/ function getDefault() { + return module['default']; + } : + /******/ function getModuleExports() { + return module; + }; + /******/ + __webpack_require__.d(getter, 'a', getter); + /******/ + return getter; + /******/ + }; /******/ /******/ // Object.prototype.hasOwnProperty.call - /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; + /******/ + __webpack_require__.o = function (object, property) { + return Object.prototype.hasOwnProperty.call(object, property); + }; /******/ /******/ // __webpack_public_path__ - /******/ __webpack_require__.p = ""; + /******/ + __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports - /******/ return __webpack_require__(__webpack_require__.s = 3); - /******/ }) + /******/ + return __webpack_require__(__webpack_require__.s = 3); + /******/ + }) /************************************************************************/ /******/ ([ /* 0 */ - /***/ (function(module, exports, __webpack_require__) { + /***/ (function (module, exports, __webpack_require__) { "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); + Object.defineProperty(exports, "__esModule", {value: true}); var BitMatrix = /** @class */ (function () { function BitMatrix(data, width) { this.width = width; this.height = data.length / width; this.data = data; } + BitMatrix.createEmpty = function (width, height) { return new BitMatrix(new Uint8ClampedArray(width * height), width); }; @@ -110,17 +146,20 @@ exports.BitMatrix = BitMatrix; - /***/ }), + /***/ + }), /* 1 */ - /***/ (function(module, exports, __webpack_require__) { + /***/ (function (module, exports, __webpack_require__) { "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); + Object.defineProperty(exports, "__esModule", {value: true}); var GenericGFPoly_1 = __webpack_require__(2); + function addOrSubtractGF(a, b) { return a ^ b; // tslint:disable-line:no-bitwise } + exports.addOrSubtractGF = addOrSubtractGF; var GenericGF = /** @class */ (function () { function GenericGF(primitive, size, genBase) { @@ -143,6 +182,7 @@ this.zero = new GenericGFPoly_1.default(this, Uint8ClampedArray.from([0])); this.one = new GenericGFPoly_1.default(this, Uint8ClampedArray.from([1])); } + GenericGF.prototype.multiply = function (a, b) { if (a === 0 || b === 0) { return 0; @@ -180,13 +220,14 @@ exports.default = GenericGF; - /***/ }), + /***/ + }), /* 2 */ - /***/ (function(module, exports, __webpack_require__) { + /***/ (function (module, exports, __webpack_require__) { "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); + Object.defineProperty(exports, "__esModule", {value: true}); var GenericGF_1 = __webpack_require__(1); var GenericGFPoly = /** @class */ (function () { function GenericGFPoly(field, coefficients) { @@ -203,18 +244,17 @@ } if (firstNonZero === coefficientsLength) { this.coefficients = field.zero.coefficients; - } - else { + } else { this.coefficients = new Uint8ClampedArray(coefficientsLength - firstNonZero); for (var i = 0; i < this.coefficients.length; i++) { this.coefficients[i] = coefficients[firstNonZero + i]; } } - } - else { + } else { this.coefficients = coefficients; } } + GenericGFPoly.prototype.degree = function () { return this.coefficients.length - 1; }; @@ -317,17 +357,19 @@ exports.default = GenericGFPoly; - /***/ }), + /***/ + }), /* 3 */ - /***/ (function(module, exports, __webpack_require__) { + /***/ (function (module, exports, __webpack_require__) { "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); + Object.defineProperty(exports, "__esModule", {value: true}); var binarizer_1 = __webpack_require__(4); var decoder_1 = __webpack_require__(5); var extractor_1 = __webpack_require__(11); var locator_1 = __webpack_require__(12); + function scan(matrix) { var locations = locator_1.locate(matrix); if (!locations) { @@ -358,47 +400,57 @@ } return null; } + var defaultOptions = { inversionAttempts: "attemptBoth", }; + function jsQR(data, width, height, providedOptions) { - if (providedOptions === void 0) { providedOptions = {}; } + if (providedOptions === void 0) { + providedOptions = {}; + } var options = defaultOptions; Object.keys(options || {}).forEach(function (opt) { options[opt] = providedOptions[opt] || options[opt]; }); var shouldInvert = options.inversionAttempts === "attemptBoth" || options.inversionAttempts === "invertFirst"; var tryInvertedFirst = options.inversionAttempts === "onlyInvert" || options.inversionAttempts === "invertFirst"; - var _a = binarizer_1.binarize(data, width, height, shouldInvert), binarized = _a.binarized, inverted = _a.inverted; + var _a = binarizer_1.binarize(data, width, height, shouldInvert), binarized = _a.binarized, + inverted = _a.inverted; var result = scan(tryInvertedFirst ? inverted : binarized); if (!result && (options.inversionAttempts === "attemptBoth" || options.inversionAttempts === "invertFirst")) { result = scan(tryInvertedFirst ? binarized : inverted); } return result; } + jsQR.default = jsQR; exports.default = jsQR; - /***/ }), + /***/ + }), /* 4 */ - /***/ (function(module, exports, __webpack_require__) { + /***/ (function (module, exports, __webpack_require__) { "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); + Object.defineProperty(exports, "__esModule", {value: true}); var BitMatrix_1 = __webpack_require__(0); var REGION_SIZE = 8; var MIN_DYNAMIC_RANGE = 24; + function numBetween(value, min, max) { return value < min ? min : value > max ? max : value; } + // Like BitMatrix but accepts arbitry Uint8 values var Matrix = /** @class */ (function () { function Matrix(width, height) { this.width = width; this.data = new Uint8ClampedArray(width * height); } + Matrix.prototype.get = function (x, y) { return this.data[y * this.width + x]; }; @@ -407,6 +459,7 @@ }; return Matrix; }()); + function binarize(data, width, height, returnInverted) { if (data.length !== width * height * 4) { throw new Error("Malformed data passed to binarizer."); @@ -493,24 +546,27 @@ } } if (returnInverted) { - return { binarized: binarized, inverted: inverted }; + return {binarized: binarized, inverted: inverted}; } - return { binarized: binarized }; + return {binarized: binarized}; } + exports.binarize = binarize; - /***/ }), + /***/ + }), /* 5 */ - /***/ (function(module, exports, __webpack_require__) { + /***/ (function (module, exports, __webpack_require__) { "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); + Object.defineProperty(exports, "__esModule", {value: true}); var BitMatrix_1 = __webpack_require__(0); var decodeData_1 = __webpack_require__(6); var reedsolomon_1 = __webpack_require__(9); var version_1 = __webpack_require__(10); + // tslint:disable:no-bitwise function numBitsDiffering(x, y) { var z = x ^ y; @@ -521,54 +577,73 @@ } return bitCount; } + function pushBit(bit, byte) { return (byte << 1) | bit; } + // tslint:enable:no-bitwise var FORMAT_INFO_TABLE = [ - { bits: 0x5412, formatInfo: { errorCorrectionLevel: 1, dataMask: 0 } }, - { bits: 0x5125, formatInfo: { errorCorrectionLevel: 1, dataMask: 1 } }, - { bits: 0x5E7C, formatInfo: { errorCorrectionLevel: 1, dataMask: 2 } }, - { bits: 0x5B4B, formatInfo: { errorCorrectionLevel: 1, dataMask: 3 } }, - { bits: 0x45F9, formatInfo: { errorCorrectionLevel: 1, dataMask: 4 } }, - { bits: 0x40CE, formatInfo: { errorCorrectionLevel: 1, dataMask: 5 } }, - { bits: 0x4F97, formatInfo: { errorCorrectionLevel: 1, dataMask: 6 } }, - { bits: 0x4AA0, formatInfo: { errorCorrectionLevel: 1, dataMask: 7 } }, - { bits: 0x77C4, formatInfo: { errorCorrectionLevel: 0, dataMask: 0 } }, - { bits: 0x72F3, formatInfo: { errorCorrectionLevel: 0, dataMask: 1 } }, - { bits: 0x7DAA, formatInfo: { errorCorrectionLevel: 0, dataMask: 2 } }, - { bits: 0x789D, formatInfo: { errorCorrectionLevel: 0, dataMask: 3 } }, - { bits: 0x662F, formatInfo: { errorCorrectionLevel: 0, dataMask: 4 } }, - { bits: 0x6318, formatInfo: { errorCorrectionLevel: 0, dataMask: 5 } }, - { bits: 0x6C41, formatInfo: { errorCorrectionLevel: 0, dataMask: 6 } }, - { bits: 0x6976, formatInfo: { errorCorrectionLevel: 0, dataMask: 7 } }, - { bits: 0x1689, formatInfo: { errorCorrectionLevel: 3, dataMask: 0 } }, - { bits: 0x13BE, formatInfo: { errorCorrectionLevel: 3, dataMask: 1 } }, - { bits: 0x1CE7, formatInfo: { errorCorrectionLevel: 3, dataMask: 2 } }, - { bits: 0x19D0, formatInfo: { errorCorrectionLevel: 3, dataMask: 3 } }, - { bits: 0x0762, formatInfo: { errorCorrectionLevel: 3, dataMask: 4 } }, - { bits: 0x0255, formatInfo: { errorCorrectionLevel: 3, dataMask: 5 } }, - { bits: 0x0D0C, formatInfo: { errorCorrectionLevel: 3, dataMask: 6 } }, - { bits: 0x083B, formatInfo: { errorCorrectionLevel: 3, dataMask: 7 } }, - { bits: 0x355F, formatInfo: { errorCorrectionLevel: 2, dataMask: 0 } }, - { bits: 0x3068, formatInfo: { errorCorrectionLevel: 2, dataMask: 1 } }, - { bits: 0x3F31, formatInfo: { errorCorrectionLevel: 2, dataMask: 2 } }, - { bits: 0x3A06, formatInfo: { errorCorrectionLevel: 2, dataMask: 3 } }, - { bits: 0x24B4, formatInfo: { errorCorrectionLevel: 2, dataMask: 4 } }, - { bits: 0x2183, formatInfo: { errorCorrectionLevel: 2, dataMask: 5 } }, - { bits: 0x2EDA, formatInfo: { errorCorrectionLevel: 2, dataMask: 6 } }, - { bits: 0x2BED, formatInfo: { errorCorrectionLevel: 2, dataMask: 7 } }, + {bits: 0x5412, formatInfo: {errorCorrectionLevel: 1, dataMask: 0}}, + {bits: 0x5125, formatInfo: {errorCorrectionLevel: 1, dataMask: 1}}, + {bits: 0x5E7C, formatInfo: {errorCorrectionLevel: 1, dataMask: 2}}, + {bits: 0x5B4B, formatInfo: {errorCorrectionLevel: 1, dataMask: 3}}, + {bits: 0x45F9, formatInfo: {errorCorrectionLevel: 1, dataMask: 4}}, + {bits: 0x40CE, formatInfo: {errorCorrectionLevel: 1, dataMask: 5}}, + {bits: 0x4F97, formatInfo: {errorCorrectionLevel: 1, dataMask: 6}}, + {bits: 0x4AA0, formatInfo: {errorCorrectionLevel: 1, dataMask: 7}}, + {bits: 0x77C4, formatInfo: {errorCorrectionLevel: 0, dataMask: 0}}, + {bits: 0x72F3, formatInfo: {errorCorrectionLevel: 0, dataMask: 1}}, + {bits: 0x7DAA, formatInfo: {errorCorrectionLevel: 0, dataMask: 2}}, + {bits: 0x789D, formatInfo: {errorCorrectionLevel: 0, dataMask: 3}}, + {bits: 0x662F, formatInfo: {errorCorrectionLevel: 0, dataMask: 4}}, + {bits: 0x6318, formatInfo: {errorCorrectionLevel: 0, dataMask: 5}}, + {bits: 0x6C41, formatInfo: {errorCorrectionLevel: 0, dataMask: 6}}, + {bits: 0x6976, formatInfo: {errorCorrectionLevel: 0, dataMask: 7}}, + {bits: 0x1689, formatInfo: {errorCorrectionLevel: 3, dataMask: 0}}, + {bits: 0x13BE, formatInfo: {errorCorrectionLevel: 3, dataMask: 1}}, + {bits: 0x1CE7, formatInfo: {errorCorrectionLevel: 3, dataMask: 2}}, + {bits: 0x19D0, formatInfo: {errorCorrectionLevel: 3, dataMask: 3}}, + {bits: 0x0762, formatInfo: {errorCorrectionLevel: 3, dataMask: 4}}, + {bits: 0x0255, formatInfo: {errorCorrectionLevel: 3, dataMask: 5}}, + {bits: 0x0D0C, formatInfo: {errorCorrectionLevel: 3, dataMask: 6}}, + {bits: 0x083B, formatInfo: {errorCorrectionLevel: 3, dataMask: 7}}, + {bits: 0x355F, formatInfo: {errorCorrectionLevel: 2, dataMask: 0}}, + {bits: 0x3068, formatInfo: {errorCorrectionLevel: 2, dataMask: 1}}, + {bits: 0x3F31, formatInfo: {errorCorrectionLevel: 2, dataMask: 2}}, + {bits: 0x3A06, formatInfo: {errorCorrectionLevel: 2, dataMask: 3}}, + {bits: 0x24B4, formatInfo: {errorCorrectionLevel: 2, dataMask: 4}}, + {bits: 0x2183, formatInfo: {errorCorrectionLevel: 2, dataMask: 5}}, + {bits: 0x2EDA, formatInfo: {errorCorrectionLevel: 2, dataMask: 6}}, + {bits: 0x2BED, formatInfo: {errorCorrectionLevel: 2, dataMask: 7}}, ]; var DATA_MASKS = [ - function (p) { return ((p.y + p.x) % 2) === 0; }, - function (p) { return (p.y % 2) === 0; }, - function (p) { return p.x % 3 === 0; }, - function (p) { return (p.y + p.x) % 3 === 0; }, - function (p) { return (Math.floor(p.y / 2) + Math.floor(p.x / 3)) % 2 === 0; }, - function (p) { return ((p.x * p.y) % 2) + ((p.x * p.y) % 3) === 0; }, - function (p) { return ((((p.y * p.x) % 2) + (p.y * p.x) % 3) % 2) === 0; }, - function (p) { return ((((p.y + p.x) % 2) + (p.y * p.x) % 3) % 2) === 0; }, + function (p) { + return ((p.y + p.x) % 2) === 0; + }, + function (p) { + return (p.y % 2) === 0; + }, + function (p) { + return p.x % 3 === 0; + }, + function (p) { + return (p.y + p.x) % 3 === 0; + }, + function (p) { + return (Math.floor(p.y / 2) + Math.floor(p.x / 3)) % 2 === 0; + }, + function (p) { + return ((p.x * p.y) % 2) + ((p.x * p.y) % 3) === 0; + }, + function (p) { + return ((((p.y * p.x) % 2) + (p.y * p.x) % 3) % 2) === 0; + }, + function (p) { + return ((((p.y + p.x) % 2) + (p.y * p.x) % 3) % 2) === 0; + }, ]; + function buildFunctionPatternMask(version) { var dimension = 17 + 4 * version.versionNumber; var matrix = BitMatrix_1.BitMatrix.createEmpty(dimension, dimension); @@ -593,6 +668,7 @@ } return matrix; } + function readCodewords(matrix, version, formatInfo) { var dataMask = DATA_MASKS[formatInfo.dataMask]; var dimension = matrix.height; @@ -613,7 +689,7 @@ if (!functionPatternMask.get(x, y)) { bitsRead++; var bit = matrix.get(x, y); - if (dataMask({ y: y, x: x })) { + if (dataMask({y: y, x: x})) { bit = !bit; } currentByte = pushBit(bit, currentByte); @@ -629,6 +705,7 @@ } return codewords; } + function readVersion(matrix) { var dimension = matrix.height; var provisionalVersion = Math.floor((dimension - 17) / 4); @@ -671,6 +748,7 @@ return bestVersion; } } + function readFormatInformation(matrix) { var topLeftFormatInfoBits = 0; for (var x = 0; x <= 8; x++) { @@ -717,13 +795,14 @@ } return null; } + function getDataBlocks(codewords, version, ecLevel) { var ecInfo = version.errorCorrectionLevels[ecLevel]; var dataBlocks = []; var totalCodewords = 0; ecInfo.ecBlocks.forEach(function (block) { for (var i = 0; i < block.numBlocks; i++) { - dataBlocks.push({ numDataCodewords: block.dataCodewordsPerBlock, codewords: [] }); + dataBlocks.push({numDataCodewords: block.dataCodewordsPerBlock, codewords: []}); totalCodewords += block.dataCodewordsPerBlock + ecInfo.ecCodewordsPerBlock; } }); @@ -759,6 +838,7 @@ } return dataBlocks; } + function decodeMatrix(matrix) { var version = readVersion(matrix); if (!version) { @@ -774,7 +854,9 @@ return null; } // Count total number of data bytes - var totalBytes = dataBlocks.reduce(function (a, b) { return a + b.numDataCodewords; }, 0); + var totalBytes = dataBlocks.reduce(function (a, b) { + return a + b.numDataCodewords; + }, 0); var resultBytes = new Uint8ClampedArray(totalBytes); var resultIndex = 0; for (var _i = 0, dataBlocks_3 = dataBlocks; _i < dataBlocks_3.length; _i++) { @@ -789,11 +871,11 @@ } try { return decodeData_1.decode(resultBytes, version.versionNumber); - } - catch (_a) { + } catch (_a) { return null; } } + function decode(matrix) { if (matrix == null) { return null; @@ -813,16 +895,18 @@ } return decodeMatrix(matrix); } + exports.decode = decode; - /***/ }), + /***/ + }), /* 6 */ - /***/ (function(module, exports, __webpack_require__) { + /***/ (function (module, exports, __webpack_require__) { "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); + Object.defineProperty(exports, "__esModule", {value: true}); // tslint:disable:no-bitwise var BitStream_1 = __webpack_require__(7); var shiftJISTable_1 = __webpack_require__(8); @@ -846,6 +930,7 @@ // FNC1FirstPosition = 0x5, // FNC1SecondPosition = 0x9, })(ModeByte || (ModeByte = {})); + function decodeNumeric(stream, size) { var bytes = []; var text = ""; @@ -874,8 +959,7 @@ var b = num % 10; bytes.push(48 + a, 48 + b); text += a.toString() + b.toString(); - } - else if (length === 1) { + } else if (length === 1) { var num = stream.readBits(4); if (num >= 10) { throw new Error("Invalid numeric value above 9"); @@ -883,8 +967,9 @@ bytes.push(48 + num); text += num.toString(); } - return { bytes: bytes, text: text }; + return {bytes: bytes, text: text}; } + var AlphanumericCharacterCodes = [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", @@ -892,6 +977,7 @@ "R", "S", "T", "U", "V", "W", "X", "Y", "Z", " ", "$", "%", "*", "+", "-", ".", "/", ":", ]; + function decodeAlphanumeric(stream, size) { var bytes = []; var text = ""; @@ -910,8 +996,9 @@ bytes.push(AlphanumericCharacterCodes[a].charCodeAt(0)); text += AlphanumericCharacterCodes[a]; } - return { bytes: bytes, text: text }; + return {bytes: bytes, text: text}; } + function decodeByte(stream, size) { var bytes = []; var text = ""; @@ -922,13 +1009,15 @@ bytes.push(b); } try { - text += decodeURIComponent(bytes.map(function (b) { return "%" + ("0" + b.toString(16)).substr(-2); }).join("")); - } - catch (_a) { + text += decodeURIComponent(bytes.map(function (b) { + return "%" + ("0" + b.toString(16)).substr(-2); + }).join("")); + } catch (_a) { // failed to decode } - return { bytes: bytes, text: text }; + return {bytes: bytes, text: text}; } + function decodeKanji(stream, size) { var bytes = []; var text = ""; @@ -939,15 +1028,15 @@ var c = (Math.floor(k / 0xC0) << 8) | (k % 0xC0); if (c < 0x1F00) { c += 0x8140; - } - else { + } else { c += 0xC140; } bytes.push(c >> 8, c & 0xFF); text += String.fromCharCode(shiftJISTable_1.shiftJISTable[c]); } - return { bytes: bytes, text: text }; + return {bytes: bytes, text: text}; } + function decode(data, version) { var _a, _b, _c, _d; var stream = new BitStream_1.BitStream(data); @@ -963,35 +1052,30 @@ var mode = stream.readBits(4); if (mode === ModeByte.Terminator) { return result; - } - else if (mode === ModeByte.ECI) { + } else if (mode === ModeByte.ECI) { if (stream.readBits(1) === 0) { result.chunks.push({ type: Mode.ECI, assignmentNumber: stream.readBits(7), }); - } - else if (stream.readBits(1) === 0) { + } else if (stream.readBits(1) === 0) { result.chunks.push({ type: Mode.ECI, assignmentNumber: stream.readBits(14), }); - } - else if (stream.readBits(1) === 0) { + } else if (stream.readBits(1) === 0) { result.chunks.push({ type: Mode.ECI, assignmentNumber: stream.readBits(21), }); - } - else { + } else { // ECI data seems corrupted result.chunks.push({ type: Mode.ECI, assignmentNumber: -1, }); } - } - else if (mode === ModeByte.Numeric) { + } else if (mode === ModeByte.Numeric) { var numericResult = decodeNumeric(stream, size); result.text += numericResult.text; (_a = result.bytes).push.apply(_a, numericResult.bytes); @@ -999,8 +1083,7 @@ type: Mode.Numeric, text: numericResult.text, }); - } - else if (mode === ModeByte.Alphanumeric) { + } else if (mode === ModeByte.Alphanumeric) { var alphanumericResult = decodeAlphanumeric(stream, size); result.text += alphanumericResult.text; (_b = result.bytes).push.apply(_b, alphanumericResult.bytes); @@ -1008,8 +1091,7 @@ type: Mode.Alphanumeric, text: alphanumericResult.text, }); - } - else if (mode === ModeByte.Byte) { + } else if (mode === ModeByte.Byte) { var byteResult = decodeByte(stream, size); result.text += byteResult.text; (_c = result.bytes).push.apply(_c, byteResult.bytes); @@ -1018,8 +1100,7 @@ bytes: byteResult.bytes, text: byteResult.text, }); - } - else if (mode === ModeByte.Kanji) { + } else if (mode === ModeByte.Kanji) { var kanjiResult = decodeKanji(stream, size); result.text += kanjiResult.text; (_d = result.bytes).push.apply(_d, kanjiResult.bytes); @@ -1035,23 +1116,26 @@ return result; } } + exports.decode = decode; - /***/ }), + /***/ + }), /* 7 */ - /***/ (function(module, exports, __webpack_require__) { + /***/ (function (module, exports, __webpack_require__) { "use strict"; // tslint:disable:no-bitwise - Object.defineProperty(exports, "__esModule", { value: true }); + Object.defineProperty(exports, "__esModule", {value: true}); var BitStream = /** @class */ (function () { function BitStream(bytes) { this.byteOffset = 0; this.bitOffset = 0; this.bytes = bytes; } + BitStream.prototype.readBits = function (numBits) { if (numBits < 1 || numBits > 32 || numBits > this.available()) { throw new Error("Cannot read " + numBits.toString() + " bits"); @@ -1096,13 +1180,14 @@ exports.BitStream = BitStream; - /***/ }), + /***/ + }), /* 8 */ - /***/ (function(module, exports, __webpack_require__) { + /***/ (function (module, exports, __webpack_require__) { "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); + Object.defineProperty(exports, "__esModule", {value: true}); exports.shiftJISTable = { 0x20: 0x0020, 0x21: 0x0021, @@ -8144,15 +8229,17 @@ }; - /***/ }), + /***/ + }), /* 9 */ - /***/ (function(module, exports, __webpack_require__) { + /***/ (function (module, exports, __webpack_require__) { "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); + Object.defineProperty(exports, "__esModule", {value: true}); var GenericGF_1 = __webpack_require__(1); var GenericGFPoly_1 = __webpack_require__(2); + function runEuclideanAlgorithm(field, a, b, R) { var _a; // Assume a's degree is >= b's @@ -8196,6 +8283,7 @@ var inverse = field.inverse(sigmaTildeAtZero); return [t.multiply(inverse), r.multiply(inverse)]; } + function findErrorLocations(field, errorLocator) { // This is a direct application of Chien's search var numErrors = errorLocator.degree(); @@ -8215,6 +8303,7 @@ } return result; } + function findErrorMagnitudes(field, errorEvaluator, errorLocations) { // This is directly applying Forney's Formula var s = errorLocations.length; @@ -8234,6 +8323,7 @@ } return result; } + function decode(bytes, twoS) { var outputBytes = new Uint8ClampedArray(bytes.length); outputBytes.set(bytes); @@ -8270,16 +8360,18 @@ } return outputBytes; } + exports.decode = decode; - /***/ }), + /***/ + }), /* 10 */ - /***/ (function(module, exports, __webpack_require__) { + /***/ (function (module, exports, __webpack_require__) { "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); + Object.defineProperty(exports, "__esModule", {value: true}); exports.VERSIONS = [ { infoBits: null, @@ -8288,19 +8380,19 @@ errorCorrectionLevels: [ { ecCodewordsPerBlock: 7, - ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 19 }], + ecBlocks: [{numBlocks: 1, dataCodewordsPerBlock: 19}], }, { ecCodewordsPerBlock: 10, - ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 16 }], + ecBlocks: [{numBlocks: 1, dataCodewordsPerBlock: 16}], }, { ecCodewordsPerBlock: 13, - ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 13 }], + ecBlocks: [{numBlocks: 1, dataCodewordsPerBlock: 13}], }, { ecCodewordsPerBlock: 17, - ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 9 }], + ecBlocks: [{numBlocks: 1, dataCodewordsPerBlock: 9}], }, ], }, @@ -8311,19 +8403,19 @@ errorCorrectionLevels: [ { ecCodewordsPerBlock: 10, - ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 34 }], + ecBlocks: [{numBlocks: 1, dataCodewordsPerBlock: 34}], }, { ecCodewordsPerBlock: 16, - ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 28 }], + ecBlocks: [{numBlocks: 1, dataCodewordsPerBlock: 28}], }, { ecCodewordsPerBlock: 22, - ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 22 }], + ecBlocks: [{numBlocks: 1, dataCodewordsPerBlock: 22}], }, { ecCodewordsPerBlock: 28, - ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 16 }], + ecBlocks: [{numBlocks: 1, dataCodewordsPerBlock: 16}], }, ], }, @@ -8334,19 +8426,19 @@ errorCorrectionLevels: [ { ecCodewordsPerBlock: 15, - ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 55 }], + ecBlocks: [{numBlocks: 1, dataCodewordsPerBlock: 55}], }, { ecCodewordsPerBlock: 26, - ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 44 }], + ecBlocks: [{numBlocks: 1, dataCodewordsPerBlock: 44}], }, { ecCodewordsPerBlock: 18, - ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 17 }], + ecBlocks: [{numBlocks: 2, dataCodewordsPerBlock: 17}], }, { ecCodewordsPerBlock: 22, - ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 13 }], + ecBlocks: [{numBlocks: 2, dataCodewordsPerBlock: 13}], }, ], }, @@ -8357,19 +8449,19 @@ errorCorrectionLevels: [ { ecCodewordsPerBlock: 20, - ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 80 }], + ecBlocks: [{numBlocks: 1, dataCodewordsPerBlock: 80}], }, { ecCodewordsPerBlock: 18, - ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 32 }], + ecBlocks: [{numBlocks: 2, dataCodewordsPerBlock: 32}], }, { ecCodewordsPerBlock: 26, - ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 24 }], + ecBlocks: [{numBlocks: 2, dataCodewordsPerBlock: 24}], }, { ecCodewordsPerBlock: 16, - ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 9 }], + ecBlocks: [{numBlocks: 4, dataCodewordsPerBlock: 9}], }, ], }, @@ -8380,24 +8472,24 @@ errorCorrectionLevels: [ { ecCodewordsPerBlock: 26, - ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 108 }], + ecBlocks: [{numBlocks: 1, dataCodewordsPerBlock: 108}], }, { ecCodewordsPerBlock: 24, - ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 43 }], + ecBlocks: [{numBlocks: 2, dataCodewordsPerBlock: 43}], }, { ecCodewordsPerBlock: 18, ecBlocks: [ - { numBlocks: 2, dataCodewordsPerBlock: 15 }, - { numBlocks: 2, dataCodewordsPerBlock: 16 }, + {numBlocks: 2, dataCodewordsPerBlock: 15}, + {numBlocks: 2, dataCodewordsPerBlock: 16}, ], }, { ecCodewordsPerBlock: 22, ecBlocks: [ - { numBlocks: 2, dataCodewordsPerBlock: 11 }, - { numBlocks: 2, dataCodewordsPerBlock: 12 }, + {numBlocks: 2, dataCodewordsPerBlock: 11}, + {numBlocks: 2, dataCodewordsPerBlock: 12}, ], }, ], @@ -8409,19 +8501,19 @@ errorCorrectionLevels: [ { ecCodewordsPerBlock: 18, - ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 68 }], + ecBlocks: [{numBlocks: 2, dataCodewordsPerBlock: 68}], }, { ecCodewordsPerBlock: 16, - ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 27 }], + ecBlocks: [{numBlocks: 4, dataCodewordsPerBlock: 27}], }, { ecCodewordsPerBlock: 24, - ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 19 }], + ecBlocks: [{numBlocks: 4, dataCodewordsPerBlock: 19}], }, { ecCodewordsPerBlock: 28, - ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 15 }], + ecBlocks: [{numBlocks: 4, dataCodewordsPerBlock: 15}], }, ], }, @@ -8432,24 +8524,24 @@ errorCorrectionLevels: [ { ecCodewordsPerBlock: 20, - ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 78 }], + ecBlocks: [{numBlocks: 2, dataCodewordsPerBlock: 78}], }, { ecCodewordsPerBlock: 18, - ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 31 }], + ecBlocks: [{numBlocks: 4, dataCodewordsPerBlock: 31}], }, { ecCodewordsPerBlock: 18, ecBlocks: [ - { numBlocks: 2, dataCodewordsPerBlock: 14 }, - { numBlocks: 4, dataCodewordsPerBlock: 15 }, + {numBlocks: 2, dataCodewordsPerBlock: 14}, + {numBlocks: 4, dataCodewordsPerBlock: 15}, ], }, { ecCodewordsPerBlock: 26, ecBlocks: [ - { numBlocks: 4, dataCodewordsPerBlock: 13 }, - { numBlocks: 1, dataCodewordsPerBlock: 14 }, + {numBlocks: 4, dataCodewordsPerBlock: 13}, + {numBlocks: 1, dataCodewordsPerBlock: 14}, ], }, ], @@ -8461,27 +8553,27 @@ errorCorrectionLevels: [ { ecCodewordsPerBlock: 24, - ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 97 }], + ecBlocks: [{numBlocks: 2, dataCodewordsPerBlock: 97}], }, { ecCodewordsPerBlock: 22, ecBlocks: [ - { numBlocks: 2, dataCodewordsPerBlock: 38 }, - { numBlocks: 2, dataCodewordsPerBlock: 39 }, + {numBlocks: 2, dataCodewordsPerBlock: 38}, + {numBlocks: 2, dataCodewordsPerBlock: 39}, ], }, { ecCodewordsPerBlock: 22, ecBlocks: [ - { numBlocks: 4, dataCodewordsPerBlock: 18 }, - { numBlocks: 2, dataCodewordsPerBlock: 19 }, + {numBlocks: 4, dataCodewordsPerBlock: 18}, + {numBlocks: 2, dataCodewordsPerBlock: 19}, ], }, { ecCodewordsPerBlock: 26, ecBlocks: [ - { numBlocks: 4, dataCodewordsPerBlock: 14 }, - { numBlocks: 2, dataCodewordsPerBlock: 15 }, + {numBlocks: 4, dataCodewordsPerBlock: 14}, + {numBlocks: 2, dataCodewordsPerBlock: 15}, ], }, ], @@ -8493,27 +8585,27 @@ errorCorrectionLevels: [ { ecCodewordsPerBlock: 30, - ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 116 }], + ecBlocks: [{numBlocks: 2, dataCodewordsPerBlock: 116}], }, { ecCodewordsPerBlock: 22, ecBlocks: [ - { numBlocks: 3, dataCodewordsPerBlock: 36 }, - { numBlocks: 2, dataCodewordsPerBlock: 37 }, + {numBlocks: 3, dataCodewordsPerBlock: 36}, + {numBlocks: 2, dataCodewordsPerBlock: 37}, ], }, { ecCodewordsPerBlock: 20, ecBlocks: [ - { numBlocks: 4, dataCodewordsPerBlock: 16 }, - { numBlocks: 4, dataCodewordsPerBlock: 17 }, + {numBlocks: 4, dataCodewordsPerBlock: 16}, + {numBlocks: 4, dataCodewordsPerBlock: 17}, ], }, { ecCodewordsPerBlock: 24, ecBlocks: [ - { numBlocks: 4, dataCodewordsPerBlock: 12 }, - { numBlocks: 4, dataCodewordsPerBlock: 13 }, + {numBlocks: 4, dataCodewordsPerBlock: 12}, + {numBlocks: 4, dataCodewordsPerBlock: 13}, ], }, ], @@ -8526,29 +8618,29 @@ { ecCodewordsPerBlock: 18, ecBlocks: [ - { numBlocks: 2, dataCodewordsPerBlock: 68 }, - { numBlocks: 2, dataCodewordsPerBlock: 69 }, + {numBlocks: 2, dataCodewordsPerBlock: 68}, + {numBlocks: 2, dataCodewordsPerBlock: 69}, ], }, { ecCodewordsPerBlock: 26, ecBlocks: [ - { numBlocks: 4, dataCodewordsPerBlock: 43 }, - { numBlocks: 1, dataCodewordsPerBlock: 44 }, + {numBlocks: 4, dataCodewordsPerBlock: 43}, + {numBlocks: 1, dataCodewordsPerBlock: 44}, ], }, { ecCodewordsPerBlock: 24, ecBlocks: [ - { numBlocks: 6, dataCodewordsPerBlock: 19 }, - { numBlocks: 2, dataCodewordsPerBlock: 20 }, + {numBlocks: 6, dataCodewordsPerBlock: 19}, + {numBlocks: 2, dataCodewordsPerBlock: 20}, ], }, { ecCodewordsPerBlock: 28, ecBlocks: [ - { numBlocks: 6, dataCodewordsPerBlock: 15 }, - { numBlocks: 2, dataCodewordsPerBlock: 16 }, + {numBlocks: 6, dataCodewordsPerBlock: 15}, + {numBlocks: 2, dataCodewordsPerBlock: 16}, ], }, ], @@ -8560,27 +8652,27 @@ errorCorrectionLevels: [ { ecCodewordsPerBlock: 20, - ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 81 }], + ecBlocks: [{numBlocks: 4, dataCodewordsPerBlock: 81}], }, { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 1, dataCodewordsPerBlock: 50 }, - { numBlocks: 4, dataCodewordsPerBlock: 51 }, + {numBlocks: 1, dataCodewordsPerBlock: 50}, + {numBlocks: 4, dataCodewordsPerBlock: 51}, ], }, { ecCodewordsPerBlock: 28, ecBlocks: [ - { numBlocks: 4, dataCodewordsPerBlock: 22 }, - { numBlocks: 4, dataCodewordsPerBlock: 23 }, + {numBlocks: 4, dataCodewordsPerBlock: 22}, + {numBlocks: 4, dataCodewordsPerBlock: 23}, ], }, { ecCodewordsPerBlock: 24, ecBlocks: [ - { numBlocks: 3, dataCodewordsPerBlock: 12 }, - { numBlocks: 8, dataCodewordsPerBlock: 13 }, + {numBlocks: 3, dataCodewordsPerBlock: 12}, + {numBlocks: 8, dataCodewordsPerBlock: 13}, ], }, ], @@ -8593,29 +8685,29 @@ { ecCodewordsPerBlock: 24, ecBlocks: [ - { numBlocks: 2, dataCodewordsPerBlock: 92 }, - { numBlocks: 2, dataCodewordsPerBlock: 93 }, + {numBlocks: 2, dataCodewordsPerBlock: 92}, + {numBlocks: 2, dataCodewordsPerBlock: 93}, ], }, { ecCodewordsPerBlock: 22, ecBlocks: [ - { numBlocks: 6, dataCodewordsPerBlock: 36 }, - { numBlocks: 2, dataCodewordsPerBlock: 37 }, + {numBlocks: 6, dataCodewordsPerBlock: 36}, + {numBlocks: 2, dataCodewordsPerBlock: 37}, ], }, { ecCodewordsPerBlock: 26, ecBlocks: [ - { numBlocks: 4, dataCodewordsPerBlock: 20 }, - { numBlocks: 6, dataCodewordsPerBlock: 21 }, + {numBlocks: 4, dataCodewordsPerBlock: 20}, + {numBlocks: 6, dataCodewordsPerBlock: 21}, ], }, { ecCodewordsPerBlock: 28, ecBlocks: [ - { numBlocks: 7, dataCodewordsPerBlock: 14 }, - { numBlocks: 4, dataCodewordsPerBlock: 15 }, + {numBlocks: 7, dataCodewordsPerBlock: 14}, + {numBlocks: 4, dataCodewordsPerBlock: 15}, ], }, ], @@ -8627,27 +8719,27 @@ errorCorrectionLevels: [ { ecCodewordsPerBlock: 26, - ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 107 }], + ecBlocks: [{numBlocks: 4, dataCodewordsPerBlock: 107}], }, { ecCodewordsPerBlock: 22, ecBlocks: [ - { numBlocks: 8, dataCodewordsPerBlock: 37 }, - { numBlocks: 1, dataCodewordsPerBlock: 38 }, + {numBlocks: 8, dataCodewordsPerBlock: 37}, + {numBlocks: 1, dataCodewordsPerBlock: 38}, ], }, { ecCodewordsPerBlock: 24, ecBlocks: [ - { numBlocks: 8, dataCodewordsPerBlock: 20 }, - { numBlocks: 4, dataCodewordsPerBlock: 21 }, + {numBlocks: 8, dataCodewordsPerBlock: 20}, + {numBlocks: 4, dataCodewordsPerBlock: 21}, ], }, { ecCodewordsPerBlock: 22, ecBlocks: [ - { numBlocks: 12, dataCodewordsPerBlock: 11 }, - { numBlocks: 4, dataCodewordsPerBlock: 12 }, + {numBlocks: 12, dataCodewordsPerBlock: 11}, + {numBlocks: 4, dataCodewordsPerBlock: 12}, ], }, ], @@ -8660,29 +8752,29 @@ { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 3, dataCodewordsPerBlock: 115 }, - { numBlocks: 1, dataCodewordsPerBlock: 116 }, + {numBlocks: 3, dataCodewordsPerBlock: 115}, + {numBlocks: 1, dataCodewordsPerBlock: 116}, ], }, { ecCodewordsPerBlock: 24, ecBlocks: [ - { numBlocks: 4, dataCodewordsPerBlock: 40 }, - { numBlocks: 5, dataCodewordsPerBlock: 41 }, + {numBlocks: 4, dataCodewordsPerBlock: 40}, + {numBlocks: 5, dataCodewordsPerBlock: 41}, ], }, { ecCodewordsPerBlock: 20, ecBlocks: [ - { numBlocks: 11, dataCodewordsPerBlock: 16 }, - { numBlocks: 5, dataCodewordsPerBlock: 17 }, + {numBlocks: 11, dataCodewordsPerBlock: 16}, + {numBlocks: 5, dataCodewordsPerBlock: 17}, ], }, { ecCodewordsPerBlock: 24, ecBlocks: [ - { numBlocks: 11, dataCodewordsPerBlock: 12 }, - { numBlocks: 5, dataCodewordsPerBlock: 13 }, + {numBlocks: 11, dataCodewordsPerBlock: 12}, + {numBlocks: 5, dataCodewordsPerBlock: 13}, ], }, ], @@ -8695,29 +8787,29 @@ { ecCodewordsPerBlock: 22, ecBlocks: [ - { numBlocks: 5, dataCodewordsPerBlock: 87 }, - { numBlocks: 1, dataCodewordsPerBlock: 88 }, + {numBlocks: 5, dataCodewordsPerBlock: 87}, + {numBlocks: 1, dataCodewordsPerBlock: 88}, ], }, { ecCodewordsPerBlock: 24, ecBlocks: [ - { numBlocks: 5, dataCodewordsPerBlock: 41 }, - { numBlocks: 5, dataCodewordsPerBlock: 42 }, + {numBlocks: 5, dataCodewordsPerBlock: 41}, + {numBlocks: 5, dataCodewordsPerBlock: 42}, ], }, { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 5, dataCodewordsPerBlock: 24 }, - { numBlocks: 7, dataCodewordsPerBlock: 25 }, + {numBlocks: 5, dataCodewordsPerBlock: 24}, + {numBlocks: 7, dataCodewordsPerBlock: 25}, ], }, { ecCodewordsPerBlock: 24, ecBlocks: [ - { numBlocks: 11, dataCodewordsPerBlock: 12 }, - { numBlocks: 7, dataCodewordsPerBlock: 13 }, + {numBlocks: 11, dataCodewordsPerBlock: 12}, + {numBlocks: 7, dataCodewordsPerBlock: 13}, ], }, ], @@ -8730,29 +8822,29 @@ { ecCodewordsPerBlock: 24, ecBlocks: [ - { numBlocks: 5, dataCodewordsPerBlock: 98 }, - { numBlocks: 1, dataCodewordsPerBlock: 99 }, + {numBlocks: 5, dataCodewordsPerBlock: 98}, + {numBlocks: 1, dataCodewordsPerBlock: 99}, ], }, { ecCodewordsPerBlock: 28, ecBlocks: [ - { numBlocks: 7, dataCodewordsPerBlock: 45 }, - { numBlocks: 3, dataCodewordsPerBlock: 46 }, + {numBlocks: 7, dataCodewordsPerBlock: 45}, + {numBlocks: 3, dataCodewordsPerBlock: 46}, ], }, { ecCodewordsPerBlock: 24, ecBlocks: [ - { numBlocks: 15, dataCodewordsPerBlock: 19 }, - { numBlocks: 2, dataCodewordsPerBlock: 20 }, + {numBlocks: 15, dataCodewordsPerBlock: 19}, + {numBlocks: 2, dataCodewordsPerBlock: 20}, ], }, { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 3, dataCodewordsPerBlock: 15 }, - { numBlocks: 13, dataCodewordsPerBlock: 16 }, + {numBlocks: 3, dataCodewordsPerBlock: 15}, + {numBlocks: 13, dataCodewordsPerBlock: 16}, ], }, ], @@ -8765,29 +8857,29 @@ { ecCodewordsPerBlock: 28, ecBlocks: [ - { numBlocks: 1, dataCodewordsPerBlock: 107 }, - { numBlocks: 5, dataCodewordsPerBlock: 108 }, + {numBlocks: 1, dataCodewordsPerBlock: 107}, + {numBlocks: 5, dataCodewordsPerBlock: 108}, ], }, { ecCodewordsPerBlock: 28, ecBlocks: [ - { numBlocks: 10, dataCodewordsPerBlock: 46 }, - { numBlocks: 1, dataCodewordsPerBlock: 47 }, + {numBlocks: 10, dataCodewordsPerBlock: 46}, + {numBlocks: 1, dataCodewordsPerBlock: 47}, ], }, { ecCodewordsPerBlock: 28, ecBlocks: [ - { numBlocks: 1, dataCodewordsPerBlock: 22 }, - { numBlocks: 15, dataCodewordsPerBlock: 23 }, + {numBlocks: 1, dataCodewordsPerBlock: 22}, + {numBlocks: 15, dataCodewordsPerBlock: 23}, ], }, { ecCodewordsPerBlock: 28, ecBlocks: [ - { numBlocks: 2, dataCodewordsPerBlock: 14 }, - { numBlocks: 17, dataCodewordsPerBlock: 15 }, + {numBlocks: 2, dataCodewordsPerBlock: 14}, + {numBlocks: 17, dataCodewordsPerBlock: 15}, ], }, ], @@ -8800,29 +8892,29 @@ { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 5, dataCodewordsPerBlock: 120 }, - { numBlocks: 1, dataCodewordsPerBlock: 121 }, + {numBlocks: 5, dataCodewordsPerBlock: 120}, + {numBlocks: 1, dataCodewordsPerBlock: 121}, ], }, { ecCodewordsPerBlock: 26, ecBlocks: [ - { numBlocks: 9, dataCodewordsPerBlock: 43 }, - { numBlocks: 4, dataCodewordsPerBlock: 44 }, + {numBlocks: 9, dataCodewordsPerBlock: 43}, + {numBlocks: 4, dataCodewordsPerBlock: 44}, ], }, { ecCodewordsPerBlock: 28, ecBlocks: [ - { numBlocks: 17, dataCodewordsPerBlock: 22 }, - { numBlocks: 1, dataCodewordsPerBlock: 23 }, + {numBlocks: 17, dataCodewordsPerBlock: 22}, + {numBlocks: 1, dataCodewordsPerBlock: 23}, ], }, { ecCodewordsPerBlock: 28, ecBlocks: [ - { numBlocks: 2, dataCodewordsPerBlock: 14 }, - { numBlocks: 19, dataCodewordsPerBlock: 15 }, + {numBlocks: 2, dataCodewordsPerBlock: 14}, + {numBlocks: 19, dataCodewordsPerBlock: 15}, ], }, ], @@ -8835,29 +8927,29 @@ { ecCodewordsPerBlock: 28, ecBlocks: [ - { numBlocks: 3, dataCodewordsPerBlock: 113 }, - { numBlocks: 4, dataCodewordsPerBlock: 114 }, + {numBlocks: 3, dataCodewordsPerBlock: 113}, + {numBlocks: 4, dataCodewordsPerBlock: 114}, ], }, { ecCodewordsPerBlock: 26, ecBlocks: [ - { numBlocks: 3, dataCodewordsPerBlock: 44 }, - { numBlocks: 11, dataCodewordsPerBlock: 45 }, + {numBlocks: 3, dataCodewordsPerBlock: 44}, + {numBlocks: 11, dataCodewordsPerBlock: 45}, ], }, { ecCodewordsPerBlock: 26, ecBlocks: [ - { numBlocks: 17, dataCodewordsPerBlock: 21 }, - { numBlocks: 4, dataCodewordsPerBlock: 22 }, + {numBlocks: 17, dataCodewordsPerBlock: 21}, + {numBlocks: 4, dataCodewordsPerBlock: 22}, ], }, { ecCodewordsPerBlock: 26, ecBlocks: [ - { numBlocks: 9, dataCodewordsPerBlock: 13 }, - { numBlocks: 16, dataCodewordsPerBlock: 14 }, + {numBlocks: 9, dataCodewordsPerBlock: 13}, + {numBlocks: 16, dataCodewordsPerBlock: 14}, ], }, ], @@ -8870,29 +8962,29 @@ { ecCodewordsPerBlock: 28, ecBlocks: [ - { numBlocks: 3, dataCodewordsPerBlock: 107 }, - { numBlocks: 5, dataCodewordsPerBlock: 108 }, + {numBlocks: 3, dataCodewordsPerBlock: 107}, + {numBlocks: 5, dataCodewordsPerBlock: 108}, ], }, { ecCodewordsPerBlock: 26, ecBlocks: [ - { numBlocks: 3, dataCodewordsPerBlock: 41 }, - { numBlocks: 13, dataCodewordsPerBlock: 42 }, + {numBlocks: 3, dataCodewordsPerBlock: 41}, + {numBlocks: 13, dataCodewordsPerBlock: 42}, ], }, { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 15, dataCodewordsPerBlock: 24 }, - { numBlocks: 5, dataCodewordsPerBlock: 25 }, + {numBlocks: 15, dataCodewordsPerBlock: 24}, + {numBlocks: 5, dataCodewordsPerBlock: 25}, ], }, { ecCodewordsPerBlock: 28, ecBlocks: [ - { numBlocks: 15, dataCodewordsPerBlock: 15 }, - { numBlocks: 10, dataCodewordsPerBlock: 16 }, + {numBlocks: 15, dataCodewordsPerBlock: 15}, + {numBlocks: 10, dataCodewordsPerBlock: 16}, ], }, ], @@ -8905,26 +8997,26 @@ { ecCodewordsPerBlock: 28, ecBlocks: [ - { numBlocks: 4, dataCodewordsPerBlock: 116 }, - { numBlocks: 4, dataCodewordsPerBlock: 117 }, + {numBlocks: 4, dataCodewordsPerBlock: 116}, + {numBlocks: 4, dataCodewordsPerBlock: 117}, ], }, { ecCodewordsPerBlock: 26, - ecBlocks: [{ numBlocks: 17, dataCodewordsPerBlock: 42 }], + ecBlocks: [{numBlocks: 17, dataCodewordsPerBlock: 42}], }, { ecCodewordsPerBlock: 28, ecBlocks: [ - { numBlocks: 17, dataCodewordsPerBlock: 22 }, - { numBlocks: 6, dataCodewordsPerBlock: 23 }, + {numBlocks: 17, dataCodewordsPerBlock: 22}, + {numBlocks: 6, dataCodewordsPerBlock: 23}, ], }, { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 19, dataCodewordsPerBlock: 16 }, - { numBlocks: 6, dataCodewordsPerBlock: 17 }, + {numBlocks: 19, dataCodewordsPerBlock: 16}, + {numBlocks: 6, dataCodewordsPerBlock: 17}, ], }, ], @@ -8937,24 +9029,24 @@ { ecCodewordsPerBlock: 28, ecBlocks: [ - { numBlocks: 2, dataCodewordsPerBlock: 111 }, - { numBlocks: 7, dataCodewordsPerBlock: 112 }, + {numBlocks: 2, dataCodewordsPerBlock: 111}, + {numBlocks: 7, dataCodewordsPerBlock: 112}, ], }, { ecCodewordsPerBlock: 28, - ecBlocks: [{ numBlocks: 17, dataCodewordsPerBlock: 46 }], + ecBlocks: [{numBlocks: 17, dataCodewordsPerBlock: 46}], }, { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 7, dataCodewordsPerBlock: 24 }, - { numBlocks: 16, dataCodewordsPerBlock: 25 }, + {numBlocks: 7, dataCodewordsPerBlock: 24}, + {numBlocks: 16, dataCodewordsPerBlock: 25}, ], }, { ecCodewordsPerBlock: 24, - ecBlocks: [{ numBlocks: 34, dataCodewordsPerBlock: 13 }], + ecBlocks: [{numBlocks: 34, dataCodewordsPerBlock: 13}], }, ], }, @@ -8966,29 +9058,29 @@ { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 4, dataCodewordsPerBlock: 121 }, - { numBlocks: 5, dataCodewordsPerBlock: 122 }, + {numBlocks: 4, dataCodewordsPerBlock: 121}, + {numBlocks: 5, dataCodewordsPerBlock: 122}, ], }, { ecCodewordsPerBlock: 28, ecBlocks: [ - { numBlocks: 4, dataCodewordsPerBlock: 47 }, - { numBlocks: 14, dataCodewordsPerBlock: 48 }, + {numBlocks: 4, dataCodewordsPerBlock: 47}, + {numBlocks: 14, dataCodewordsPerBlock: 48}, ], }, { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 11, dataCodewordsPerBlock: 24 }, - { numBlocks: 14, dataCodewordsPerBlock: 25 }, + {numBlocks: 11, dataCodewordsPerBlock: 24}, + {numBlocks: 14, dataCodewordsPerBlock: 25}, ], }, { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 16, dataCodewordsPerBlock: 15 }, - { numBlocks: 14, dataCodewordsPerBlock: 16 }, + {numBlocks: 16, dataCodewordsPerBlock: 15}, + {numBlocks: 14, dataCodewordsPerBlock: 16}, ], }, ], @@ -9001,29 +9093,29 @@ { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 6, dataCodewordsPerBlock: 117 }, - { numBlocks: 4, dataCodewordsPerBlock: 118 }, + {numBlocks: 6, dataCodewordsPerBlock: 117}, + {numBlocks: 4, dataCodewordsPerBlock: 118}, ], }, { ecCodewordsPerBlock: 28, ecBlocks: [ - { numBlocks: 6, dataCodewordsPerBlock: 45 }, - { numBlocks: 14, dataCodewordsPerBlock: 46 }, + {numBlocks: 6, dataCodewordsPerBlock: 45}, + {numBlocks: 14, dataCodewordsPerBlock: 46}, ], }, { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 11, dataCodewordsPerBlock: 24 }, - { numBlocks: 16, dataCodewordsPerBlock: 25 }, + {numBlocks: 11, dataCodewordsPerBlock: 24}, + {numBlocks: 16, dataCodewordsPerBlock: 25}, ], }, { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 30, dataCodewordsPerBlock: 16 }, - { numBlocks: 2, dataCodewordsPerBlock: 17 }, + {numBlocks: 30, dataCodewordsPerBlock: 16}, + {numBlocks: 2, dataCodewordsPerBlock: 17}, ], }, ], @@ -9036,29 +9128,29 @@ { ecCodewordsPerBlock: 26, ecBlocks: [ - { numBlocks: 8, dataCodewordsPerBlock: 106 }, - { numBlocks: 4, dataCodewordsPerBlock: 107 }, + {numBlocks: 8, dataCodewordsPerBlock: 106}, + {numBlocks: 4, dataCodewordsPerBlock: 107}, ], }, { ecCodewordsPerBlock: 28, ecBlocks: [ - { numBlocks: 8, dataCodewordsPerBlock: 47 }, - { numBlocks: 13, dataCodewordsPerBlock: 48 }, + {numBlocks: 8, dataCodewordsPerBlock: 47}, + {numBlocks: 13, dataCodewordsPerBlock: 48}, ], }, { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 7, dataCodewordsPerBlock: 24 }, - { numBlocks: 22, dataCodewordsPerBlock: 25 }, + {numBlocks: 7, dataCodewordsPerBlock: 24}, + {numBlocks: 22, dataCodewordsPerBlock: 25}, ], }, { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 22, dataCodewordsPerBlock: 15 }, - { numBlocks: 13, dataCodewordsPerBlock: 16 }, + {numBlocks: 22, dataCodewordsPerBlock: 15}, + {numBlocks: 13, dataCodewordsPerBlock: 16}, ], }, ], @@ -9071,29 +9163,29 @@ { ecCodewordsPerBlock: 28, ecBlocks: [ - { numBlocks: 10, dataCodewordsPerBlock: 114 }, - { numBlocks: 2, dataCodewordsPerBlock: 115 }, + {numBlocks: 10, dataCodewordsPerBlock: 114}, + {numBlocks: 2, dataCodewordsPerBlock: 115}, ], }, { ecCodewordsPerBlock: 28, ecBlocks: [ - { numBlocks: 19, dataCodewordsPerBlock: 46 }, - { numBlocks: 4, dataCodewordsPerBlock: 47 }, + {numBlocks: 19, dataCodewordsPerBlock: 46}, + {numBlocks: 4, dataCodewordsPerBlock: 47}, ], }, { ecCodewordsPerBlock: 28, ecBlocks: [ - { numBlocks: 28, dataCodewordsPerBlock: 22 }, - { numBlocks: 6, dataCodewordsPerBlock: 23 }, + {numBlocks: 28, dataCodewordsPerBlock: 22}, + {numBlocks: 6, dataCodewordsPerBlock: 23}, ], }, { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 33, dataCodewordsPerBlock: 16 }, - { numBlocks: 4, dataCodewordsPerBlock: 17 }, + {numBlocks: 33, dataCodewordsPerBlock: 16}, + {numBlocks: 4, dataCodewordsPerBlock: 17}, ], }, ], @@ -9106,29 +9198,29 @@ { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 8, dataCodewordsPerBlock: 122 }, - { numBlocks: 4, dataCodewordsPerBlock: 123 }, + {numBlocks: 8, dataCodewordsPerBlock: 122}, + {numBlocks: 4, dataCodewordsPerBlock: 123}, ], }, { ecCodewordsPerBlock: 28, ecBlocks: [ - { numBlocks: 22, dataCodewordsPerBlock: 45 }, - { numBlocks: 3, dataCodewordsPerBlock: 46 }, + {numBlocks: 22, dataCodewordsPerBlock: 45}, + {numBlocks: 3, dataCodewordsPerBlock: 46}, ], }, { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 8, dataCodewordsPerBlock: 23 }, - { numBlocks: 26, dataCodewordsPerBlock: 24 }, + {numBlocks: 8, dataCodewordsPerBlock: 23}, + {numBlocks: 26, dataCodewordsPerBlock: 24}, ], }, { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 12, dataCodewordsPerBlock: 15 }, - { numBlocks: 28, dataCodewordsPerBlock: 16 }, + {numBlocks: 12, dataCodewordsPerBlock: 15}, + {numBlocks: 28, dataCodewordsPerBlock: 16}, ], }, ], @@ -9141,29 +9233,29 @@ { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 3, dataCodewordsPerBlock: 117 }, - { numBlocks: 10, dataCodewordsPerBlock: 118 }, + {numBlocks: 3, dataCodewordsPerBlock: 117}, + {numBlocks: 10, dataCodewordsPerBlock: 118}, ], }, { ecCodewordsPerBlock: 28, ecBlocks: [ - { numBlocks: 3, dataCodewordsPerBlock: 45 }, - { numBlocks: 23, dataCodewordsPerBlock: 46 }, + {numBlocks: 3, dataCodewordsPerBlock: 45}, + {numBlocks: 23, dataCodewordsPerBlock: 46}, ], }, { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 4, dataCodewordsPerBlock: 24 }, - { numBlocks: 31, dataCodewordsPerBlock: 25 }, + {numBlocks: 4, dataCodewordsPerBlock: 24}, + {numBlocks: 31, dataCodewordsPerBlock: 25}, ], }, { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 11, dataCodewordsPerBlock: 15 }, - { numBlocks: 31, dataCodewordsPerBlock: 16 }, + {numBlocks: 11, dataCodewordsPerBlock: 15}, + {numBlocks: 31, dataCodewordsPerBlock: 16}, ], }, ], @@ -9176,29 +9268,29 @@ { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 7, dataCodewordsPerBlock: 116 }, - { numBlocks: 7, dataCodewordsPerBlock: 117 }, + {numBlocks: 7, dataCodewordsPerBlock: 116}, + {numBlocks: 7, dataCodewordsPerBlock: 117}, ], }, { ecCodewordsPerBlock: 28, ecBlocks: [ - { numBlocks: 21, dataCodewordsPerBlock: 45 }, - { numBlocks: 7, dataCodewordsPerBlock: 46 }, + {numBlocks: 21, dataCodewordsPerBlock: 45}, + {numBlocks: 7, dataCodewordsPerBlock: 46}, ], }, { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 1, dataCodewordsPerBlock: 23 }, - { numBlocks: 37, dataCodewordsPerBlock: 24 }, + {numBlocks: 1, dataCodewordsPerBlock: 23}, + {numBlocks: 37, dataCodewordsPerBlock: 24}, ], }, { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 19, dataCodewordsPerBlock: 15 }, - { numBlocks: 26, dataCodewordsPerBlock: 16 }, + {numBlocks: 19, dataCodewordsPerBlock: 15}, + {numBlocks: 26, dataCodewordsPerBlock: 16}, ], }, ], @@ -9211,29 +9303,29 @@ { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 5, dataCodewordsPerBlock: 115 }, - { numBlocks: 10, dataCodewordsPerBlock: 116 }, + {numBlocks: 5, dataCodewordsPerBlock: 115}, + {numBlocks: 10, dataCodewordsPerBlock: 116}, ], }, { ecCodewordsPerBlock: 28, ecBlocks: [ - { numBlocks: 19, dataCodewordsPerBlock: 47 }, - { numBlocks: 10, dataCodewordsPerBlock: 48 }, + {numBlocks: 19, dataCodewordsPerBlock: 47}, + {numBlocks: 10, dataCodewordsPerBlock: 48}, ], }, { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 15, dataCodewordsPerBlock: 24 }, - { numBlocks: 25, dataCodewordsPerBlock: 25 }, + {numBlocks: 15, dataCodewordsPerBlock: 24}, + {numBlocks: 25, dataCodewordsPerBlock: 25}, ], }, { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 23, dataCodewordsPerBlock: 15 }, - { numBlocks: 25, dataCodewordsPerBlock: 16 }, + {numBlocks: 23, dataCodewordsPerBlock: 15}, + {numBlocks: 25, dataCodewordsPerBlock: 16}, ], }, ], @@ -9246,29 +9338,29 @@ { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 13, dataCodewordsPerBlock: 115 }, - { numBlocks: 3, dataCodewordsPerBlock: 116 }, + {numBlocks: 13, dataCodewordsPerBlock: 115}, + {numBlocks: 3, dataCodewordsPerBlock: 116}, ], }, { ecCodewordsPerBlock: 28, ecBlocks: [ - { numBlocks: 2, dataCodewordsPerBlock: 46 }, - { numBlocks: 29, dataCodewordsPerBlock: 47 }, + {numBlocks: 2, dataCodewordsPerBlock: 46}, + {numBlocks: 29, dataCodewordsPerBlock: 47}, ], }, { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 42, dataCodewordsPerBlock: 24 }, - { numBlocks: 1, dataCodewordsPerBlock: 25 }, + {numBlocks: 42, dataCodewordsPerBlock: 24}, + {numBlocks: 1, dataCodewordsPerBlock: 25}, ], }, { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 23, dataCodewordsPerBlock: 15 }, - { numBlocks: 28, dataCodewordsPerBlock: 16 }, + {numBlocks: 23, dataCodewordsPerBlock: 15}, + {numBlocks: 28, dataCodewordsPerBlock: 16}, ], }, ], @@ -9280,27 +9372,27 @@ errorCorrectionLevels: [ { ecCodewordsPerBlock: 30, - ecBlocks: [{ numBlocks: 17, dataCodewordsPerBlock: 115 }], + ecBlocks: [{numBlocks: 17, dataCodewordsPerBlock: 115}], }, { ecCodewordsPerBlock: 28, ecBlocks: [ - { numBlocks: 10, dataCodewordsPerBlock: 46 }, - { numBlocks: 23, dataCodewordsPerBlock: 47 }, + {numBlocks: 10, dataCodewordsPerBlock: 46}, + {numBlocks: 23, dataCodewordsPerBlock: 47}, ], }, { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 10, dataCodewordsPerBlock: 24 }, - { numBlocks: 35, dataCodewordsPerBlock: 25 }, + {numBlocks: 10, dataCodewordsPerBlock: 24}, + {numBlocks: 35, dataCodewordsPerBlock: 25}, ], }, { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 19, dataCodewordsPerBlock: 15 }, - { numBlocks: 35, dataCodewordsPerBlock: 16 }, + {numBlocks: 19, dataCodewordsPerBlock: 15}, + {numBlocks: 35, dataCodewordsPerBlock: 16}, ], }, ], @@ -9313,29 +9405,29 @@ { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 17, dataCodewordsPerBlock: 115 }, - { numBlocks: 1, dataCodewordsPerBlock: 116 }, + {numBlocks: 17, dataCodewordsPerBlock: 115}, + {numBlocks: 1, dataCodewordsPerBlock: 116}, ], }, { ecCodewordsPerBlock: 28, ecBlocks: [ - { numBlocks: 14, dataCodewordsPerBlock: 46 }, - { numBlocks: 21, dataCodewordsPerBlock: 47 }, + {numBlocks: 14, dataCodewordsPerBlock: 46}, + {numBlocks: 21, dataCodewordsPerBlock: 47}, ], }, { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 29, dataCodewordsPerBlock: 24 }, - { numBlocks: 19, dataCodewordsPerBlock: 25 }, + {numBlocks: 29, dataCodewordsPerBlock: 24}, + {numBlocks: 19, dataCodewordsPerBlock: 25}, ], }, { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 11, dataCodewordsPerBlock: 15 }, - { numBlocks: 46, dataCodewordsPerBlock: 16 }, + {numBlocks: 11, dataCodewordsPerBlock: 15}, + {numBlocks: 46, dataCodewordsPerBlock: 16}, ], }, ], @@ -9348,29 +9440,29 @@ { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 13, dataCodewordsPerBlock: 115 }, - { numBlocks: 6, dataCodewordsPerBlock: 116 }, + {numBlocks: 13, dataCodewordsPerBlock: 115}, + {numBlocks: 6, dataCodewordsPerBlock: 116}, ], }, { ecCodewordsPerBlock: 28, ecBlocks: [ - { numBlocks: 14, dataCodewordsPerBlock: 46 }, - { numBlocks: 23, dataCodewordsPerBlock: 47 }, + {numBlocks: 14, dataCodewordsPerBlock: 46}, + {numBlocks: 23, dataCodewordsPerBlock: 47}, ], }, { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 44, dataCodewordsPerBlock: 24 }, - { numBlocks: 7, dataCodewordsPerBlock: 25 }, + {numBlocks: 44, dataCodewordsPerBlock: 24}, + {numBlocks: 7, dataCodewordsPerBlock: 25}, ], }, { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 59, dataCodewordsPerBlock: 16 }, - { numBlocks: 1, dataCodewordsPerBlock: 17 }, + {numBlocks: 59, dataCodewordsPerBlock: 16}, + {numBlocks: 1, dataCodewordsPerBlock: 17}, ], }, ], @@ -9383,29 +9475,29 @@ { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 12, dataCodewordsPerBlock: 121 }, - { numBlocks: 7, dataCodewordsPerBlock: 122 }, + {numBlocks: 12, dataCodewordsPerBlock: 121}, + {numBlocks: 7, dataCodewordsPerBlock: 122}, ], }, { ecCodewordsPerBlock: 28, ecBlocks: [ - { numBlocks: 12, dataCodewordsPerBlock: 47 }, - { numBlocks: 26, dataCodewordsPerBlock: 48 }, + {numBlocks: 12, dataCodewordsPerBlock: 47}, + {numBlocks: 26, dataCodewordsPerBlock: 48}, ], }, { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 39, dataCodewordsPerBlock: 24 }, - { numBlocks: 14, dataCodewordsPerBlock: 25 }, + {numBlocks: 39, dataCodewordsPerBlock: 24}, + {numBlocks: 14, dataCodewordsPerBlock: 25}, ], }, { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 22, dataCodewordsPerBlock: 15 }, - { numBlocks: 41, dataCodewordsPerBlock: 16 }, + {numBlocks: 22, dataCodewordsPerBlock: 15}, + {numBlocks: 41, dataCodewordsPerBlock: 16}, ], }, ], @@ -9418,29 +9510,29 @@ { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 6, dataCodewordsPerBlock: 121 }, - { numBlocks: 14, dataCodewordsPerBlock: 122 }, + {numBlocks: 6, dataCodewordsPerBlock: 121}, + {numBlocks: 14, dataCodewordsPerBlock: 122}, ], }, { ecCodewordsPerBlock: 28, ecBlocks: [ - { numBlocks: 6, dataCodewordsPerBlock: 47 }, - { numBlocks: 34, dataCodewordsPerBlock: 48 }, + {numBlocks: 6, dataCodewordsPerBlock: 47}, + {numBlocks: 34, dataCodewordsPerBlock: 48}, ], }, { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 46, dataCodewordsPerBlock: 24 }, - { numBlocks: 10, dataCodewordsPerBlock: 25 }, + {numBlocks: 46, dataCodewordsPerBlock: 24}, + {numBlocks: 10, dataCodewordsPerBlock: 25}, ], }, { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 2, dataCodewordsPerBlock: 15 }, - { numBlocks: 64, dataCodewordsPerBlock: 16 }, + {numBlocks: 2, dataCodewordsPerBlock: 15}, + {numBlocks: 64, dataCodewordsPerBlock: 16}, ], }, ], @@ -9453,29 +9545,29 @@ { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 17, dataCodewordsPerBlock: 122 }, - { numBlocks: 4, dataCodewordsPerBlock: 123 }, + {numBlocks: 17, dataCodewordsPerBlock: 122}, + {numBlocks: 4, dataCodewordsPerBlock: 123}, ], }, { ecCodewordsPerBlock: 28, ecBlocks: [ - { numBlocks: 29, dataCodewordsPerBlock: 46 }, - { numBlocks: 14, dataCodewordsPerBlock: 47 }, + {numBlocks: 29, dataCodewordsPerBlock: 46}, + {numBlocks: 14, dataCodewordsPerBlock: 47}, ], }, { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 49, dataCodewordsPerBlock: 24 }, - { numBlocks: 10, dataCodewordsPerBlock: 25 }, + {numBlocks: 49, dataCodewordsPerBlock: 24}, + {numBlocks: 10, dataCodewordsPerBlock: 25}, ], }, { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 24, dataCodewordsPerBlock: 15 }, - { numBlocks: 46, dataCodewordsPerBlock: 16 }, + {numBlocks: 24, dataCodewordsPerBlock: 15}, + {numBlocks: 46, dataCodewordsPerBlock: 16}, ], }, ], @@ -9488,29 +9580,29 @@ { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 4, dataCodewordsPerBlock: 122 }, - { numBlocks: 18, dataCodewordsPerBlock: 123 }, + {numBlocks: 4, dataCodewordsPerBlock: 122}, + {numBlocks: 18, dataCodewordsPerBlock: 123}, ], }, { ecCodewordsPerBlock: 28, ecBlocks: [ - { numBlocks: 13, dataCodewordsPerBlock: 46 }, - { numBlocks: 32, dataCodewordsPerBlock: 47 }, + {numBlocks: 13, dataCodewordsPerBlock: 46}, + {numBlocks: 32, dataCodewordsPerBlock: 47}, ], }, { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 48, dataCodewordsPerBlock: 24 }, - { numBlocks: 14, dataCodewordsPerBlock: 25 }, + {numBlocks: 48, dataCodewordsPerBlock: 24}, + {numBlocks: 14, dataCodewordsPerBlock: 25}, ], }, { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 42, dataCodewordsPerBlock: 15 }, - { numBlocks: 32, dataCodewordsPerBlock: 16 }, + {numBlocks: 42, dataCodewordsPerBlock: 15}, + {numBlocks: 32, dataCodewordsPerBlock: 16}, ], }, ], @@ -9523,29 +9615,29 @@ { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 20, dataCodewordsPerBlock: 117 }, - { numBlocks: 4, dataCodewordsPerBlock: 118 }, + {numBlocks: 20, dataCodewordsPerBlock: 117}, + {numBlocks: 4, dataCodewordsPerBlock: 118}, ], }, { ecCodewordsPerBlock: 28, ecBlocks: [ - { numBlocks: 40, dataCodewordsPerBlock: 47 }, - { numBlocks: 7, dataCodewordsPerBlock: 48 }, + {numBlocks: 40, dataCodewordsPerBlock: 47}, + {numBlocks: 7, dataCodewordsPerBlock: 48}, ], }, { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 43, dataCodewordsPerBlock: 24 }, - { numBlocks: 22, dataCodewordsPerBlock: 25 }, + {numBlocks: 43, dataCodewordsPerBlock: 24}, + {numBlocks: 22, dataCodewordsPerBlock: 25}, ], }, { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 10, dataCodewordsPerBlock: 15 }, - { numBlocks: 67, dataCodewordsPerBlock: 16 }, + {numBlocks: 10, dataCodewordsPerBlock: 15}, + {numBlocks: 67, dataCodewordsPerBlock: 16}, ], }, ], @@ -9558,29 +9650,29 @@ { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 19, dataCodewordsPerBlock: 118 }, - { numBlocks: 6, dataCodewordsPerBlock: 119 }, + {numBlocks: 19, dataCodewordsPerBlock: 118}, + {numBlocks: 6, dataCodewordsPerBlock: 119}, ], }, { ecCodewordsPerBlock: 28, ecBlocks: [ - { numBlocks: 18, dataCodewordsPerBlock: 47 }, - { numBlocks: 31, dataCodewordsPerBlock: 48 }, + {numBlocks: 18, dataCodewordsPerBlock: 47}, + {numBlocks: 31, dataCodewordsPerBlock: 48}, ], }, { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 34, dataCodewordsPerBlock: 24 }, - { numBlocks: 34, dataCodewordsPerBlock: 25 }, + {numBlocks: 34, dataCodewordsPerBlock: 24}, + {numBlocks: 34, dataCodewordsPerBlock: 25}, ], }, { ecCodewordsPerBlock: 30, ecBlocks: [ - { numBlocks: 20, dataCodewordsPerBlock: 15 }, - { numBlocks: 61, dataCodewordsPerBlock: 16 }, + {numBlocks: 20, dataCodewordsPerBlock: 15}, + {numBlocks: 61, dataCodewordsPerBlock: 16}, ], }, ], @@ -9588,14 +9680,16 @@ ]; - /***/ }), + /***/ + }), /* 11 */ - /***/ (function(module, exports, __webpack_require__) { + /***/ (function (module, exports, __webpack_require__) { "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); + Object.defineProperty(exports, "__esModule", {value: true}); var BitMatrix_1 = __webpack_require__(0); + function squareToQuadrilateral(p1, p2, p3, p4) { var dx3 = p1.x - p2.x + p3.x - p4.x; var dy3 = p1.y - p2.y + p3.y - p4.y; @@ -9611,8 +9705,7 @@ a32: p1.y, a33: 1, }; - } - else { + } else { var dx1 = p2.x - p3.x; var dx2 = p4.x - p3.x; var dy1 = p2.y - p3.y; @@ -9633,6 +9726,7 @@ }; } } + function quadrilateralToSquare(p1, p2, p3, p4) { // Here, the adjoint serves as the inverse: var sToQ = squareToQuadrilateral(p1, p2, p3, p4); @@ -9648,6 +9742,7 @@ a33: sToQ.a11 * sToQ.a22 - sToQ.a12 * sToQ.a21, }; } + function times(a, b) { return { a11: a.a11 * b.a11 + a.a21 * b.a12 + a.a31 * b.a13, @@ -9661,8 +9756,15 @@ a33: a.a13 * b.a31 + a.a23 * b.a32 + a.a33 * b.a33, }; } + function extract(image, location) { - var qToS = quadrilateralToSquare({ x: 3.5, y: 3.5 }, { x: location.dimension - 3.5, y: 3.5 }, { x: location.dimension - 6.5, y: location.dimension - 6.5 }, { x: 3.5, y: location.dimension - 3.5 }); + var qToS = quadrilateralToSquare({x: 3.5, y: 3.5}, { + x: location.dimension - 3.5, + y: 3.5 + }, {x: location.dimension - 6.5, y: location.dimension - 6.5}, { + x: 3.5, + y: location.dimension - 3.5 + }); var sToQ = squareToQuadrilateral(location.topLeft, location.topRight, location.alignmentPattern, location.bottomLeft); var transform = times(sToQ, qToS); var matrix = BitMatrix_1.BitMatrix.createEmpty(location.dimension, location.dimension); @@ -9686,23 +9788,31 @@ mappingFunction: mappingFunction, }; } + exports.extract = extract; - /***/ }), + /***/ + }), /* 12 */ - /***/ (function(module, exports, __webpack_require__) { + /***/ (function (module, exports, __webpack_require__) { "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); + Object.defineProperty(exports, "__esModule", {value: true}); var MAX_FINDERPATTERNS_TO_SEARCH = 4; var MIN_QUAD_RATIO = 0.5; var MAX_QUAD_RATIO = 1.5; - var distance = function (a, b) { return Math.sqrt(Math.pow((b.x - a.x), 2) + Math.pow((b.y - a.y), 2)); }; + var distance = function (a, b) { + return Math.sqrt(Math.pow((b.x - a.x), 2) + Math.pow((b.y - a.y), 2)); + }; + function sum(values) { - return values.reduce(function (a, b) { return a + b; }); + return values.reduce(function (a, b) { + return a + b; + }); } + // Takes three finder patterns and organizes them into topLeft, topRight, etc function reorderFinderPatterns(pattern1, pattern2, pattern3) { var _a, _b, _c, _d; @@ -9716,11 +9826,9 @@ // Assume one closest to other two is B; A and C will just be guesses at first if (twoThreeDistance >= oneTwoDistance && twoThreeDistance >= oneThreeDistance) { _a = [pattern2, pattern1, pattern3], bottomLeft = _a[0], topLeft = _a[1], topRight = _a[2]; - } - else if (oneThreeDistance >= twoThreeDistance && oneThreeDistance >= oneTwoDistance) { + } else if (oneThreeDistance >= twoThreeDistance && oneThreeDistance >= oneTwoDistance) { _b = [pattern1, pattern2, pattern3], bottomLeft = _b[0], topLeft = _b[1], topRight = _b[2]; - } - else { + } else { _c = [pattern1, pattern3, pattern2], bottomLeft = _c[0], topLeft = _c[1], topRight = _c[2]; } // Use cross product to figure out whether bottomLeft (A) and topRight (C) are correct or flipped in relation to topLeft (B) @@ -9729,8 +9837,9 @@ if (((topRight.x - topLeft.x) * (bottomLeft.y - topLeft.y)) - ((topRight.y - topLeft.y) * (bottomLeft.x - topLeft.x)) < 0) { _d = [topRight, bottomLeft], bottomLeft = _d[0], topRight = _d[1]; } - return { bottomLeft: bottomLeft, topLeft: topLeft, topRight: topRight }; + return {bottomLeft: bottomLeft, topLeft: topLeft, topRight: topRight}; } + // Computes the dimension (number of modules on a side) of the QR Code based on the position of the finder patterns function computeDimension(topLeft, topRight, bottomLeft, matrix) { var moduleSize = (sum(countBlackWhiteRun(topLeft, bottomLeft, matrix, 5)) / 7 + // Divide by 7 since the ratio is 1:1:3:1:1 @@ -9751,13 +9860,14 @@ dimension--; break; } - return { dimension: dimension, moduleSize: moduleSize }; + return {dimension: dimension, moduleSize: moduleSize}; } + // Takes an origin point and an end point and counts the sizes of the black white run from the origin towards the end point. // Returns an array of elements, representing the pixel size of the black white run. // Uses a variant of http://en.wikipedia.org/wiki/Bresenham's_line_algorithm function countBlackWhiteRunTowardsPoint(origin, end, matrix, length) { - var switchPoints = [{ x: Math.floor(origin.x), y: Math.floor(origin.y) }]; + var switchPoints = [{x: Math.floor(origin.x), y: Math.floor(origin.y)}]; var steep = Math.abs(end.y - origin.y) > Math.abs(end.x - origin.x); var fromX; var fromY; @@ -9768,8 +9878,7 @@ fromY = Math.floor(origin.x); toX = Math.floor(end.y); toY = Math.floor(end.x); - } - else { + } else { fromX = Math.floor(origin.x); fromY = Math.floor(origin.y); toX = Math.floor(end.x); @@ -9790,7 +9899,7 @@ var realY = steep ? x : y; if (matrix.get(realX, realY) !== currentPixel) { currentPixel = !currentPixel; - switchPoints.push({ x: realX, y: realY }); + switchPoints.push({x: realX, y: realY}); if (switchPoints.length === length + 1) { break; } @@ -9808,13 +9917,13 @@ for (var i = 0; i < length; i++) { if (switchPoints[i] && switchPoints[i + 1]) { distances.push(distance(switchPoints[i], switchPoints[i + 1])); - } - else { + } else { distances.push(0); } } return distances; } + // Takes an origin point and an end point and counts the sizes of the black white run in the origin point // along the line that intersects with the end point. Returns an array of elements, representing the pixel sizes // of the black white run. Takes a length which represents the number of switches from black to white to look for. @@ -9823,10 +9932,14 @@ var rise = end.y - origin.y; var run = end.x - origin.x; var towardsEnd = countBlackWhiteRunTowardsPoint(origin, end, matrix, Math.ceil(length / 2)); - var awayFromEnd = countBlackWhiteRunTowardsPoint(origin, { x: origin.x - run, y: origin.y - rise }, matrix, Math.ceil(length / 2)); + var awayFromEnd = countBlackWhiteRunTowardsPoint(origin, { + x: origin.x - run, + y: origin.y - rise + }, matrix, Math.ceil(length / 2)); var middleValue = towardsEnd.shift() + awayFromEnd.shift() - 1; // Substract one so we don't double count a pixel return (_a = awayFromEnd.concat(middleValue)).concat.apply(_a, towardsEnd); } + // Takes in a black white run and an array of expected ratios. Returns the average size of the run as well as the "error" - // that is the amount the run diverges from the expected ratio function scoreBlackWhiteRun(sequence, ratios) { @@ -9835,15 +9948,16 @@ ratios.forEach(function (ratio, i) { error += Math.pow((sequence[i] - ratio * averageSize), 2); }); - return { averageSize: averageSize, error: error }; + return {averageSize: averageSize, error: error}; } + // Takes an X,Y point and an array of sizes and scores the point against those ratios. // For example for a finder pattern takes the ratio list of 1:1:3:1:1 and checks horizontal, vertical and diagonal ratios // against that. function scorePattern(point, ratios, matrix) { try { - var horizontalRun = countBlackWhiteRun(point, { x: -1, y: point.y }, matrix, ratios.length); - var verticalRun = countBlackWhiteRun(point, { x: point.x, y: -1 }, matrix, ratios.length); + var horizontalRun = countBlackWhiteRun(point, {x: -1, y: point.y}, matrix, ratios.length); + var verticalRun = countBlackWhiteRun(point, {x: point.x, y: -1}, matrix, ratios.length); var topLeftPoint = { x: Math.max(0, point.x - point.y) - 1, y: Math.max(0, point.y - point.x) - 1, @@ -9868,11 +9982,11 @@ Math.pow((diagDownError.averageSize - avgSize), 2) + Math.pow((diagUpError.averageSize - avgSize), 2)) / avgSize; return ratioError + sizeError; - } - catch (_a) { + } catch (_a) { return Infinity; } } + function recenterLocation(matrix, p) { var leftX = Math.round(p.x); while (matrix.get(leftX, Math.round(p.y))) { @@ -9892,8 +10006,9 @@ bottomY++; } var y = (topY + bottomY) / 2; - return { x: x, y: y }; + return {x: x, y: y}; } + function locate(matrix) { var finderPatternQuads = []; var activeFinderPatternQuads = []; @@ -9907,8 +10022,7 @@ var v = matrix.get(x, y); if (v === lastBit) { length_1++; - } - else { + } else { scans = [scans[1], scans[2], scans[3], scans[4], length_1]; length_1 = 1; lastBit = v; @@ -9930,7 +10044,7 @@ // Compute the start and end x values of the large center black square var endX_1 = x - scans[3] - scans[4]; var startX_1 = endX_1 - scans[2]; - var line = { startX: startX_1, endX: endX_1, y: y }; + var line = {startX: startX_1, endX: endX_1, y: y}; // Is there a quad directly above the current spot? If so, extend it with the new line. Otherwise, create a new quad with // that line as the starting point. var matchingQuads = activeFinderPatternQuads.filter(function (q) { @@ -9941,16 +10055,15 @@ }); if (matchingQuads.length > 0) { matchingQuads[0].bottom = line; - } - else { - activeFinderPatternQuads.push({ top: line, bottom: line }); + } else { + activeFinderPatternQuads.push({top: line, bottom: line}); } } if (validAlignmentPattern) { // Compute the start and end x values of the center black square var endX_2 = x - scans[4]; var startX_2 = endX_2 - scans[3]; - var line = { startX: startX_2, y: y, endX: endX_2 }; + var line = {startX: startX_2, y: y, endX: endX_2}; // Is there a quad directly above the current spot? If so, extend it with the new line. Otherwise, create a new quad with // that line as the starting point. var matchingQuads = activeAlignmentPatternQuads.filter(function (q) { @@ -9961,9 +10074,8 @@ }); if (matchingQuads.length > 0) { matchingQuads[0].bottom = line; - } - else { - activeAlignmentPatternQuads.push({ top: line, bottom: line }); + } else { + activeAlignmentPatternQuads.push({top: line, bottom: line}); } } } @@ -9971,18 +10083,30 @@ for (var x = -1; x <= matrix.width; x++) { _loop_2(x); } - finderPatternQuads.push.apply(finderPatternQuads, activeFinderPatternQuads.filter(function (q) { return q.bottom.y !== y && q.bottom.y - q.top.y >= 2; })); - activeFinderPatternQuads = activeFinderPatternQuads.filter(function (q) { return q.bottom.y === y; }); - alignmentPatternQuads.push.apply(alignmentPatternQuads, activeAlignmentPatternQuads.filter(function (q) { return q.bottom.y !== y; })); - activeAlignmentPatternQuads = activeAlignmentPatternQuads.filter(function (q) { return q.bottom.y === y; }); + finderPatternQuads.push.apply(finderPatternQuads, activeFinderPatternQuads.filter(function (q) { + return q.bottom.y !== y && q.bottom.y - q.top.y >= 2; + })); + activeFinderPatternQuads = activeFinderPatternQuads.filter(function (q) { + return q.bottom.y === y; + }); + alignmentPatternQuads.push.apply(alignmentPatternQuads, activeAlignmentPatternQuads.filter(function (q) { + return q.bottom.y !== y; + })); + activeAlignmentPatternQuads = activeAlignmentPatternQuads.filter(function (q) { + return q.bottom.y === y; + }); }; for (var y = 0; y <= matrix.height; y++) { _loop_1(y); } - finderPatternQuads.push.apply(finderPatternQuads, activeFinderPatternQuads.filter(function (q) { return q.bottom.y - q.top.y >= 2; })); + finderPatternQuads.push.apply(finderPatternQuads, activeFinderPatternQuads.filter(function (q) { + return q.bottom.y - q.top.y >= 2; + })); alignmentPatternQuads.push.apply(alignmentPatternQuads, activeAlignmentPatternQuads); var finderPatternGroups = finderPatternQuads - .filter(function (q) { return q.bottom.y - q.top.y >= 2; }) // All quads must be at least 2px tall since the center square is larger than a block + .filter(function (q) { + return q.bottom.y - q.top.y >= 2; + }) // All quads must be at least 2px tall since the center square is larger than a block .map(function (q) { var x = (q.top.startX + q.top.endX + q.bottom.startX + q.bottom.endX) / 4; var y = (q.top.y + q.bottom.y + 1) / 2; @@ -9991,41 +10115,61 @@ } var lengths = [q.top.endX - q.top.startX, q.bottom.endX - q.bottom.startX, q.bottom.y - q.top.y + 1]; var size = sum(lengths) / lengths.length; - var score = scorePattern({ x: Math.round(x), y: Math.round(y) }, [1, 1, 3, 1, 1], matrix); - return { score: score, x: x, y: y, size: size }; + var score = scorePattern({x: Math.round(x), y: Math.round(y)}, [1, 1, 3, 1, 1], matrix); + return {score: score, x: x, y: y, size: size}; + }) + .filter(function (q) { + return !!q; + }) // Filter out any rejected quads from above + .sort(function (a, b) { + return a.score - b.score; }) - .filter(function (q) { return !!q; }) // Filter out any rejected quads from above - .sort(function (a, b) { return a.score - b.score; }) // Now take the top finder pattern options and try to find 2 other options with a similar size. .map(function (point, i, finderPatterns) { if (i > MAX_FINDERPATTERNS_TO_SEARCH) { return null; } var otherPoints = finderPatterns - .filter(function (p, ii) { return i !== ii; }) - .map(function (p) { return ({ x: p.x, y: p.y, score: p.score + (Math.pow((p.size - point.size), 2)) / point.size, size: p.size }); }) - .sort(function (a, b) { return a.score - b.score; }); + .filter(function (p, ii) { + return i !== ii; + }) + .map(function (p) { + return ({ + x: p.x, + y: p.y, + score: p.score + (Math.pow((p.size - point.size), 2)) / point.size, + size: p.size + }); + }) + .sort(function (a, b) { + return a.score - b.score; + }); if (otherPoints.length < 2) { return null; } var score = point.score + otherPoints[0].score + otherPoints[1].score; - return { points: [point].concat(otherPoints.slice(0, 2)), score: score }; + return {points: [point].concat(otherPoints.slice(0, 2)), score: score}; }) - .filter(function (q) { return !!q; }) // Filter out any rejected finder patterns from above - .sort(function (a, b) { return a.score - b.score; }); + .filter(function (q) { + return !!q; + }) // Filter out any rejected finder patterns from above + .sort(function (a, b) { + return a.score - b.score; + }); if (finderPatternGroups.length === 0) { return null; } - var _a = reorderFinderPatterns(finderPatternGroups[0].points[0], finderPatternGroups[0].points[1], finderPatternGroups[0].points[2]), topRight = _a.topRight, topLeft = _a.topLeft, bottomLeft = _a.bottomLeft; + var _a = reorderFinderPatterns(finderPatternGroups[0].points[0], finderPatternGroups[0].points[1], finderPatternGroups[0].points[2]), + topRight = _a.topRight, topLeft = _a.topLeft, bottomLeft = _a.bottomLeft; var alignment = findAlignmentPattern(matrix, alignmentPatternQuads, topRight, topLeft, bottomLeft); var result = []; if (alignment) { result.push({ - alignmentPattern: { x: alignment.alignmentPattern.x, y: alignment.alignmentPattern.y }, - bottomLeft: { x: bottomLeft.x, y: bottomLeft.y }, + alignmentPattern: {x: alignment.alignmentPattern.x, y: alignment.alignmentPattern.y}, + bottomLeft: {x: bottomLeft.x, y: bottomLeft.y}, dimension: alignment.dimension, - topLeft: { x: topLeft.x, y: topLeft.y }, - topRight: { x: topRight.x, y: topRight.y }, + topLeft: {x: topLeft.x, y: topLeft.y}, + topRight: {x: topRight.x, y: topRight.y}, }); } // We normally use the center of the quads as the location of the tracking points, which is optimal for most cases and will account @@ -10039,10 +10183,13 @@ var centeredAlignment = findAlignmentPattern(matrix, alignmentPatternQuads, midTopRight, midTopLeft, midBottomLeft); if (centeredAlignment) { result.push({ - alignmentPattern: { x: centeredAlignment.alignmentPattern.x, y: centeredAlignment.alignmentPattern.y }, - bottomLeft: { x: midBottomLeft.x, y: midBottomLeft.y }, - topLeft: { x: midTopLeft.x, y: midTopLeft.y }, - topRight: { x: midTopRight.x, y: midTopRight.y }, + alignmentPattern: { + x: centeredAlignment.alignmentPattern.x, + y: centeredAlignment.alignmentPattern.y + }, + bottomLeft: {x: midBottomLeft.x, y: midBottomLeft.y}, + topLeft: {x: midTopLeft.x, y: midTopLeft.y}, + topRight: {x: midTopRight.x, y: midTopRight.y}, dimension: centeredAlignment.dimension, }); } @@ -10051,7 +10198,9 @@ } return result; } + exports.locate = locate; + function findAlignmentPattern(matrix, alignmentPatternQuads, topRight, topLeft, bottomLeft) { var _a; // Now that we've found the three finder patterns we can determine the blockSize and the size of the QR code. @@ -10060,8 +10209,7 @@ var moduleSize; try { (_a = computeDimension(topLeft, topRight, bottomLeft, matrix), dimension = _a.dimension, moduleSize = _a.moduleSize); - } - catch (e) { + } catch (e) { return null; } // Now find the alignment pattern @@ -10082,19 +10230,24 @@ if (!matrix.get(Math.floor(x), Math.floor(y))) { return; } - var sizeScore = scorePattern({ x: Math.floor(x), y: Math.floor(y) }, [1, 1, 1], matrix); - var score = sizeScore + distance({ x: x, y: y }, expectedAlignmentPattern); - return { x: x, y: y, score: score }; + var sizeScore = scorePattern({x: Math.floor(x), y: Math.floor(y)}, [1, 1, 1], matrix); + var score = sizeScore + distance({x: x, y: y}, expectedAlignmentPattern); + return {x: x, y: y, score: score}; + }) + .filter(function (v) { + return !!v; }) - .filter(function (v) { return !!v; }) - .sort(function (a, b) { return a.score - b.score; }); + .sort(function (a, b) { + return a.score - b.score; + }); // If there are less than 15 modules between finder patterns it's a version 1 QR code and as such has no alignmemnt pattern // so we can only use our best guess. var alignmentPattern = modulesBetweenFinderPatterns >= 15 && alignmentPatterns.length ? alignmentPatterns[0] : expectedAlignmentPattern; - return { alignmentPattern: alignmentPattern, dimension: dimension }; + return {alignmentPattern: alignmentPattern, dimension: dimension}; } - /***/ }) - /******/ ])["default"]; + /***/ + }) + /******/])["default"]; }); \ No newline at end of file diff --git a/src/main/resources/static/js/lay-module/cardTable/cardTable.css b/src/main/resources/static/js/lay-module/cardTable/cardTable.css index 71449a3b..46e2b307 100644 --- a/src/main/resources/static/js/lay-module/cardTable/cardTable.css +++ b/src/main/resources/static/js/lay-module/cardTable/cardTable.css @@ -1,89 +1,92 @@ .project-list-item { - background-color: #fff; - border-radius: 4px; - cursor: pointer; - transition: all .2s; + background-color: #fff; + border-radius: 4px; + cursor: pointer; + transition: all .2s; } .project-list-item:hover { - box-shadow: 2px 0 4px rgba(0, 21, 41, .35); + box-shadow: 2px 0 4px rgba(0, 21, 41, .35); } .project-list-item .project-list-item-cover { - width: 100%; - height: 180px; - display: block; - border-top-left-radius: 4px; - border-top-right-radius: 4px; + width: 100%; + height: 180px; + display: block; + border-top-left-radius: 4px; + border-top-right-radius: 4px; } .project-list-item-body { - padding: 20px; - border: 1px solid #e8e8e8; + padding: 20px; + border: 1px solid #e8e8e8; } -.project-list-item .project-list-item-body>h2 { - font-size: 16px; - color: #333; - margin-bottom: 12px; +.project-list-item .project-list-item-body > h2 { + font-size: 16px; + color: #333; + margin-bottom: 12px; } .project-list-item .project-list-item-text { - height: 40px; - overflow: hidden; - margin-bottom: 12px; + height: 40px; + overflow: hidden; + margin-bottom: 12px; } .project-list-item .project-list-item-desc { - position: relative; + position: relative; } .project-list-item .project-list-item-desc .time { - color: #999; - font-size: 12px; + color: #999; + font-size: 12px; } .project-list-item .project-list-item-desc .ew-head-list { - position: absolute; - right: 0; - top: 0; + position: absolute; + right: 0; + top: 0; } .ew-head-list .ew-head-list-item:first-child { - margin-left: 0; + margin-left: 0; } .ew-head-list .ew-head-list-item { - width: 22px; - height: 22px; - border-radius: 50%; - border: 1px solid #fff; - margin-left: -10px; + width: 22px; + height: 22px; + border-radius: 50%; + border: 1px solid #fff; + margin-left: -10px; } .ew-head-list .ew-head-list-item { - width: 22px; - height: 22px; - border-radius: 50%; - border: 1px solid #fff; - margin-left: -10px; + width: 22px; + height: 22px; + border-radius: 50%; + border: 1px solid #fff; + margin-left: -10px; } .cloud-card-component { - padding: 20px; + padding: 20px; } .cloud-card-component .layui-laypage .layui-laypage-curr .layui-laypage-em { - border-radius: 0px !important; + border-radius: 0px !important; } + .ew-table-loading { padding: 10px 0; text-align: center; } + .ew-table-loading > i { color: #999; font-size: 30px; } + .ew-table-loading.ew-loading-float { position: absolute; top: 0; diff --git a/src/main/resources/static/js/lay-module/cardTable/cardTable.js b/src/main/resources/static/js/lay-module/cardTable/cardTable.js index 6218ab8b..a213574a 100644 --- a/src/main/resources/static/js/lay-module/cardTable/cardTable.js +++ b/src/main/resources/static/js/lay-module/cardTable/cardTable.js @@ -1,247 +1,249 @@ -layui.define(['table', 'laypage','jquery', 'element'], function(exports) { - "use strict"; - var filePath = layui.cache.modules.cardTable - .substr(0, layui.cache.modules.cardTable.lastIndexOf('/')); - // 引入tablePlug.css - layui.link(filePath + '/cardTable.css'); - var MOD_NAME = 'cardTable', - $ = layui.jquery, - element = layui.element, - laypage = layui.laypage; - var _instances = {}; // 记录所有实例 - /* 默认参数 */ - var defaultOption = { - elem: "#currentTableId",// 构建的模型 - url: "",// 数据 url 连接 - loading: true,//是否加载 - limit: 0, //每页数量默认是每行数量的双倍 - linenum: 4, //每行数量 2,3,4,6 - currentPage: 1,//当前页 - data:[], //静态数据 - limits:[], //页码 - page: true, //是否分页 - layout: ['count', 'prev', 'page', 'next','limit', 'skip'],//分页控件 - request: { - pageName: 'page' //页码的参数名称,默认:page - , limitName: 'limit' //每页数据量的参数名,默认:limit - , idName: 'id' //主键名称,默认:id - , titleName: 'title' //标题名称,默认:title - , imageName: 'image' //图片地址,默认:image - , remarkName: 'remark' //备注名称,默认:remark - , timeName: 'time' //时间名称,默认:time - }, - response: { - statusName: 'code' //规定数据状态的字段名称,默认:code - , statusCode: 0 //规定成功的状态码,默认:0 - , msgName: 'msg' //规定状态信息的字段名称,默认:msg - , countName: 'count' //规定数据总数的字段名称,默认:count - , dataName: 'data' //规定数据列表的字段名称,默认:data - }, - // 完 成 函 数 - done: function () { +layui.define(['table', 'laypage', 'jquery', 'element'], function (exports) { + "use strict"; + var filePath = layui.cache.modules.cardTable + .substr(0, layui.cache.modules.cardTable.lastIndexOf('/')); + // 引入tablePlug.css + layui.link(filePath + '/cardTable.css'); + var MOD_NAME = 'cardTable', + $ = layui.jquery, + element = layui.element, + laypage = layui.laypage; + var _instances = {}; // 记录所有实例 + /* 默认参数 */ + var defaultOption = { + elem: "#currentTableId",// 构建的模型 + url: "",// 数据 url 连接 + loading: true,//是否加载 + limit: 0, //每页数量默认是每行数量的双倍 + linenum: 4, //每行数量 2,3,4,6 + currentPage: 1,//当前页 + data: [], //静态数据 + limits: [], //页码 + page: true, //是否分页 + layout: ['count', 'prev', 'page', 'next', 'limit', 'skip'],//分页控件 + request: { + pageName: 'page' //页码的参数名称,默认:page + , limitName: 'limit' //每页数据量的参数名,默认:limit + , idName: 'id' //主键名称,默认:id + , titleName: 'title' //标题名称,默认:title + , imageName: 'image' //图片地址,默认:image + , remarkName: 'remark' //备注名称,默认:remark + , timeName: 'time' //时间名称,默认:time + }, + response: { + statusName: 'code' //规定数据状态的字段名称,默认:code + , statusCode: 0 //规定成功的状态码,默认:0 + , msgName: 'msg' //规定状态信息的字段名称,默认:msg + , countName: 'count' //规定数据总数的字段名称,默认:count + , dataName: 'data' //规定数据列表的字段名称,默认:data + }, + // 完 成 函 数 + done: function () { - } - }; - var card = function(opt) { - _instances[opt.elem.substring(1)] = this; - this.reload(opt); - }; - /** 参数设置 */ - card.prototype.initOptions = function (opt) { - this.option = $.extend(true, {}, defaultOption, opt); - if (!this.option.limit || this.option.limit == 0) { - this.option.limit = this.option.linenum * 2; - } - if (!this.option.limits || this.option.limits.length == 0) { - this.option.limits = [this.option.limit]; } - }; - card.prototype.init = function () { - var option = this.option; - var url = option.url; - var html = ""; - html += option.loading == true ? '
' : '
'; - html += ' '; - html += '
'; - $(option.elem).html(html); - // 根 据 请 求 方 式 获 取 数 据 - html = ""; - if (!!url) { - if (url.indexOf("?") >= 0) { - url = url + '&v=1.0.0'; - } - else { - url = url + '?v=1.0.0'; - } - if (!!option.page) { - url = url + '&' + option.request.limitName + '=' + option.limit; - url = url + '&' + option.request.pageName + '=' + option.currentPage; - } - if (!!option.where) { - for (let key in option.where) { - url = url + '&' + key + '=' + option.where[key]; - } + }; + var card = function (opt) { + _instances[opt.elem.substring(1)] = this; + this.reload(opt); + }; + /** 参数设置 */ + card.prototype.initOptions = function (opt) { + this.option = $.extend(true, {}, defaultOption, opt); + if (!this.option.limit || this.option.limit == 0) { + this.option.limit = this.option.linenum * 2; + } + if (!this.option.limits || this.option.limits.length == 0) { + this.option.limits = [this.option.limit]; + } + }; + card.prototype.init = function () { + var option = this.option; + var url = option.url; + var html = ""; + html += option.loading == true ? '
' : '
'; + html += ' '; + html += '
'; + $(option.elem).html(html); + // 根 据 请 求 方 式 获 取 数 据 + html = ""; + if (!!url) { + if (url.indexOf("?") >= 0) { + url = url + '&v=1.0.0'; + } else { + url = url + '?v=1.0.0'; } - var data = getData(url); - data = initData(data, option); - if (data.code != option.response.statusCode) { - option.data = []; - option.count = 0; + if (!!option.page) { + url = url + '&' + option.request.limitName + '=' + option.limit; + url = url + '&' + option.request.pageName + '=' + option.currentPage; + } + if (!!option.where) { + for (let key in option.where) { + url = url + '&' + key + '=' + option.where[key]; + } + } + var data = getData(url); + data = initData(data, option); + if (data.code != option.response.statusCode) { + option.data = []; + option.count = 0; } else { - option.data = data.data; - option.count = option.data.length; - } + option.data = data.data; + option.count = option.data.length; + } - } - else { - if (!option.alldata) { - option.alldata = option.data; + } else { + if (!option.alldata) { + option.alldata = option.data; } - if (option.page) { - var data = []; - option.count = option.alldata.length; - for (var i = (option.currentPage - 1) * option.limit; i < option.currentPage * option.limit && i 0) { - html = createComponent(option.elem.substring(1), option.linenum, option.data); - html += "
"; - } - else { - html = "

没有数据

"; - } - $(option.elem).html(html); - if (option.page) { - // 初始化分页组件 - laypage.render({ - elem: 'cardpage' - , count: option.count, limit: option.limit, limits: option.limits, curr: option.currentPage - , layout: option.layout - , jump: function (obj, first) { - option.limit = obj.limit; - option.currentPage = obj.curr; - if (!first) { - _instances[option.elem.substring(1)].reload(option); - } - } - }); - } - } - card.prototype.reload = function (opt) { - this.initOptions(this.option ? $.extend(true, this.option, opt) : opt); - this.init(); // 初始化表格 + if (option.page) { + var data = []; + option.count = option.alldata.length; + for (var i = (option.currentPage - 1) * option.limit; i < option.currentPage * option.limit && i < option.alldata.length; i++) { + data.push(option.alldata[i]); + } + option.data = data; + } + } + // 根据结果进行相应结构的创建 + if (!!option.data && option.data.length > 0) { + html = createComponent(option.elem.substring(1), option.linenum, option.data); + html += "
"; + } else { + html = "

没有数据

"; + } + $(option.elem).html(html); + if (option.page) { + // 初始化分页组件 + laypage.render({ + elem: 'cardpage' + , count: option.count, limit: option.limit, limits: option.limits, curr: option.currentPage + , layout: option.layout + , jump: function (obj, first) { + option.limit = obj.limit; + option.currentPage = obj.curr; + if (!first) { + _instances[option.elem.substring(1)].reload(option); + } + } + }); + } + } + card.prototype.reload = function (opt) { + this.initOptions(this.option ? $.extend(true, this.option, opt) : opt); + this.init(); // 初始化表格 } - function createComponent(elem,linenum,data) { - var html = "
" - var content = createCards(elem, linenum,data); + function createComponent(elem, linenum, data) { + var html = "
" + var content = createCards(elem, linenum, data); var page = ""; content = content + page; html += content + "
" return html; - } - /** 创建指定数量的卡片 */ - function createCards(elem, linenum,data) { - var content = "
"; - for (var i = 0; i < data.length; i++) { - content += createCard(elem, linenum,data[i],i); + } + + /** 创建指定数量的卡片 */ + function createCards(elem, linenum, data) { + var content = "
"; + for (var i = 0; i < data.length; i++) { + content += createCard(elem, linenum, data[i], i); + } + content += "
"; + return content; + } + + /** 创建一个卡片 */ + function createCard(elem, linenum, item, no) { + var line = 12 / linenum; + var card = + '

' + item.title + '

' + item.remark + '
' + item.time + '
' + return card; + } + + /** 格式化返回参数 */ + function initData(tempData, option) { + var data = {}; + data.code = tempData[option.response.statusName]; + data.msg = tempData[option.response.msgName]; + data.count = tempData[option.response.countName]; + var dataList = tempData[option.response.dataName]; + data.data = []; + for (var i = 0; i < dataList.length; i++) { + var item = {}; + item.id = dataList[i][option.request.idName]; + item.image = dataList[i][option.request.imageName]; + item.title = dataList[i][option.request.titleName]; + item.remark = dataList[i][option.request.remarkName]; + item.time = dataList[i][option.request.timeName]; + data.data.push(item); } - content += "
"; - return content; - } - /** 创建一个卡片 */ - function createCard(elem, linenum, item, no) { - var line = 12 / linenum; - var card = - '

' + item.title + '

' + item.remark + '
' +item.time + '
' - return card; - } - /** 格式化返回参数 */ - function initData(tempData, option) { - var data = {}; - data.code = tempData[option.response.statusName]; - data.msg = tempData[option.response.msgName]; - data.count = tempData[option.response.countName]; - var dataList = tempData[option.response.dataName]; - data.data = []; - for (var i = 0; i < dataList.length; i++) { - var item = {}; - item.id = dataList[i][option.request.idName]; - item.image = dataList[i][option.request.imageName]; - item.title = dataList[i][option.request.titleName]; - item.remark = dataList[i][option.request.remarkName]; - item.time = dataList[i][option.request.timeName]; - data.data.push(item); - } - return data; + return data; } - /** 同 步 请 求 获 取 数 据 */ - function getData(url) { - $.ajaxSettings.async = false; - var redata = null; - $.getJSON(url, function (data) { - redata = data; - }).fail(function () { - redata = null; - }); - return redata; - } - //卡片点击事件 - window.cardTableCheckedCard = function (elem,obj) { - $(obj).addClass('layui-table-click').siblings().removeClass('layui-table-click'); - var item = {}; - item.id = obj.id; - item.image = $(obj).find('.project-list-item-cover')[0].src; - item.title = $(obj).find('h2')[0].innerHTML; - item.remark = $(obj).find('.project-list-item-text')[0].innerHTML; - item.time = $(obj).find('.time')[0].innerHTML; - _instances[elem.id].option.checkedItem = item; - } - /** 对外提供的方法 */ - var tt = { - /* 渲染 */ - render: function (options) { - return new card(options); - }, - /* 重载 */ - reload: function (id, opt) { - _instances[id].option.checkedItem = null; - _instances[id].reload(opt); - }, - /* 获取选中数据 */ - getChecked: function (id) { - var option = _instances[id].option; - var data = option.checkedItem; - var item = {}; + + /** 同 步 请 求 获 取 数 据 */ + function getData(url) { + $.ajaxSettings.async = false; + var redata = null; + $.getJSON(url, function (data) { + redata = data; + }).fail(function () { + redata = null; + }); + return redata; + } + + //卡片点击事件 + window.cardTableCheckedCard = function (elem, obj) { + $(obj).addClass('layui-table-click').siblings().removeClass('layui-table-click'); + var item = {}; + item.id = obj.id; + item.image = $(obj).find('.project-list-item-cover')[0].src; + item.title = $(obj).find('h2')[0].innerHTML; + item.remark = $(obj).find('.project-list-item-text')[0].innerHTML; + item.time = $(obj).find('.time')[0].innerHTML; + _instances[elem.id].option.checkedItem = item; + } + /** 对外提供的方法 */ + var tt = { + /* 渲染 */ + render: function (options) { + return new card(options); + }, + /* 重载 */ + reload: function (id, opt) { + _instances[id].option.checkedItem = null; + _instances[id].reload(opt); + }, + /* 获取选中数据 */ + getChecked: function (id) { + var option = _instances[id].option; + var data = option.checkedItem; + var item = {}; if (!data) { - return null; + return null; } - item[option.request.idName] = data.id; - item[option.request.imageName] = data.image; - item[option.request.titleName] = data.title; - item[option.request.remarkName] = data.remark; - item[option.request.timeName] = data.time; - return item; - }, - /* 获取表格数据 */ - getAllData: function (id) { - var option = _instances[id].option; - var data = []; - for (var i = 0; i < option.data.length; i++) { - var item = {}; - item[option.request.idName] = option.data[i].id; - item[option.request.imageName] = option.data[i].image; - item[option.request.titleName] = option.data[i].title; - item[option.request.remarkName] = option.data[i].remark; - item[option.request.timeName] = option.data[i].time; - data.push(item); + item[option.request.idName] = data.id; + item[option.request.imageName] = data.image; + item[option.request.titleName] = data.title; + item[option.request.remarkName] = data.remark; + item[option.request.timeName] = data.time; + return item; + }, + /* 获取表格数据 */ + getAllData: function (id) { + var option = _instances[id].option; + var data = []; + for (var i = 0; i < option.data.length; i++) { + var item = {}; + item[option.request.idName] = option.data[i].id; + item[option.request.imageName] = option.data[i].image; + item[option.request.titleName] = option.data[i].title; + item[option.request.remarkName] = option.data[i].remark; + item[option.request.timeName] = option.data[i].time; + data.push(item); } - return data; - }, - } - exports(MOD_NAME, tt); + return data; + }, + } + exports(MOD_NAME, tt); }) diff --git a/src/main/resources/static/js/lay-module/echarts/echarts.js b/src/main/resources/static/js/lay-module/echarts/echarts.js index fcb939c2..c32131c2 100644 --- a/src/main/resources/static/js/lay-module/echarts/echarts.js +++ b/src/main/resources/static/js/lay-module/echarts/echarts.js @@ -1,19 +1,15825 @@ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e(t.echarts={})}(this,function(t){"use strict";function e(t){var e={},i={},n=t.match(/Firefox\/([\d.]+)/),r=t.match(/MSIE\s([\d.]+)/)||t.match(/Trident\/.+?rv:(([\d.]+))/),a=t.match(/Edge\/([\d.]+)/),o=/micromessenger/i.test(t);return n&&(i.firefox=!0,i.version=n[1]),r&&(i.ie=!0,i.version=r[1]),a&&(i.edge=!0,i.version=a[1]),o&&(i.weChat=!0),{browser:i,os:e,node:!1,canvasSupported:!!document.createElement("canvas").getContext,svgSupported:"undefined"!=typeof SVGRect,touchEventsSupported:"ontouchstart"in window&&!i.ie&&!i.edge,pointerEventsSupported:"onpointerdown"in window&&(i.edge||i.ie&&i.version>=11),domSupported:"undefined"!=typeof document}}function i(t,e){"createCanvas"===t&&(dg=null),ug[t]=e}function n(t){if(null==t||"object"!=typeof t)return t;var e=t,i=ng.call(t);if("[object Array]"===i){if(!R(t)){e=[];for(var r=0,a=t.length;a>r;r++)e[r]=n(t[r])}}else if(ig[i]){if(!R(t)){var o=t.constructor;if(t.constructor.from)e=o.from(t);else{e=new o(t.length);for(var r=0,a=t.length;a>r;r++)e[r]=n(t[r])}}}else if(!eg[i]&&!R(t)&&!T(t)){e={};for(var s in t)t.hasOwnProperty(s)&&(e[s]=n(t[s]))}return e}function r(t,e,i){if(!S(e)||!S(t))return i?n(e):t;for(var a in e)if(e.hasOwnProperty(a)){var o=t[a],s=e[a];!S(s)||!S(o)||_(s)||_(o)||T(s)||T(o)||M(s)||M(o)||R(s)||R(o)?!i&&a in t||(t[a]=n(e[a],!0)):r(o,s,i)}return t}function a(t,e){for(var i=t[0],n=1,a=t.length;a>n;n++)i=r(i,t[n],e);return i}function o(t,e){for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i]);return t}function s(t,e,i){for(var n in e)e.hasOwnProperty(n)&&(i?null!=e[n]:null==t[n])&&(t[n]=e[n]);return t}function l(){return dg||(dg=cg().getContext("2d")),dg}function h(t,e){if(t){if(t.indexOf)return t.indexOf(e);for(var i=0,n=t.length;n>i;i++)if(t[i]===e)return i}return-1}function u(t,e){function i(){}var n=t.prototype;i.prototype=e.prototype,t.prototype=new i;for(var r in n)t.prototype[r]=n[r];t.prototype.constructor=t,t.superClass=e}function c(t,e,i){t="prototype"in t?t.prototype:t,e="prototype"in e?e.prototype:e,s(t,e,i)}function d(t){return t?"string"==typeof t?!1:"number"==typeof t.length:void 0}function f(t,e,i){if(t&&e)if(t.forEach&&t.forEach===ag)t.forEach(e,i);else if(t.length===+t.length)for(var n=0,r=t.length;r>n;n++)e.call(i,t[n],n,t);else for(var a in t)t.hasOwnProperty(a)&&e.call(i,t[a],a,t)}function p(t,e,i){if(t&&e){if(t.map&&t.map===lg)return t.map(e,i);for(var n=[],r=0,a=t.length;a>r;r++)n.push(e.call(i,t[r],r,t));return n}}function g(t,e,i,n){if(t&&e){if(t.reduce&&t.reduce===hg)return t.reduce(e,i,n);for(var r=0,a=t.length;a>r;r++)i=e.call(n,i,t[r],r,t);return i}}function v(t,e,i){if(t&&e){if(t.filter&&t.filter===og)return t.filter(e,i);for(var n=[],r=0,a=t.length;a>r;r++)e.call(i,t[r],r,t)&&n.push(t[r]);return n}}function m(t,e,i){if(t&&e)for(var n=0,r=t.length;r>n;n++)if(e.call(i,t[n],n,t))return t[n]}function y(t,e){var i=sg.call(arguments,2);return function(){return t.apply(e,i.concat(sg.call(arguments)))}}function x(t){var e=sg.call(arguments,1);return function(){return t.apply(this,e.concat(sg.call(arguments)))}}function _(t){return"[object Array]"===ng.call(t)}function w(t){return"function"==typeof t}function b(t){return"[object String]"===ng.call(t)}function S(t){var e=typeof t;return"function"===e||!!t&&"object"==e}function M(t){return!!eg[ng.call(t)]}function I(t){return!!ig[ng.call(t)]}function T(t){return"object"==typeof t&&"number"==typeof t.nodeType&&"object"==typeof t.ownerDocument}function C(t){return t!==t}function A(){for(var t=0,e=arguments.length;e>t;t++)if(null!=arguments[t])return arguments[t]}function D(t,e){return null!=t?t:e}function k(t,e,i){return null!=t?t:null!=e?e:i}function P(){return Function.call.apply(sg,arguments)}function L(t){if("number"==typeof t)return[t,t,t,t];var e=t.length;return 2===e?[t[0],t[1],t[0],t[1]]:3===e?[t[0],t[1],t[2],t[1]]:t}function O(t,e){if(!t)throw new Error(e)}function z(t){return null==t?null:"function"==typeof t.trim?t.trim():t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")}function E(t){t[fg]=!0}function R(t){return t[fg]}function B(t){function e(t,e){i?n.set(t,e):n.set(e,t)}var i=_(t);this.data={};var n=this;t instanceof B?t.each(e):t&&f(t,e)}function N(t){return new B(t)}function F(t,e){for(var i=new t.constructor(t.length+e.length),n=0;n=0;if(r){var a="touchend"!=n?e.targetTouches[0]:e.changedTouches[0];a&&de(t,a,e,i)}else de(t,e,e,i),e.zrDelta=e.wheelDelta?e.wheelDelta/120:-(e.detail||0)/3;var o=e.button;return null==e.which&&void 0!==o&&Mg.test(e.type)&&(e.which=1&o?1:2&o?3:4&o?2:0),e}function ge(t,e,i){Sg?t.addEventListener(e,i):t.attachEvent("on"+e,i)}function ve(t,e,i){Sg?t.removeEventListener(e,i):t.detachEvent("on"+e,i)}function me(t){return t.which>1}function ye(t,e,i){return{type:t,event:i,target:e.target,topTarget:e.topTarget,cancelBubble:!1,offsetX:i.zrX,offsetY:i.zrY,gestureEvent:i.gestureEvent,pinchX:i.pinchX,pinchY:i.pinchY,pinchScale:i.pinchScale,wheelDelta:i.zrDelta,zrByTouch:i.zrByTouch,which:i.which,stop:xe}}function xe(){Ig(this.event)}function _e(){}function we(t,e,i){if(t[t.rectHover?"rectContain":"contain"](e,i)){for(var n,r=t;r;){if(r.clipPath&&!r.clipPath.contain(e,i))return!1;r.silent&&(n=!0),r=r.parent}return n?Tg:!0}return!1}function be(){var t=new Dg(6);return Se(t),t}function Se(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=0,t[5]=0,t}function Me(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t}function Ie(t,e,i){var n=e[0]*i[0]+e[2]*i[1],r=e[1]*i[0]+e[3]*i[1],a=e[0]*i[2]+e[2]*i[3],o=e[1]*i[2]+e[3]*i[3],s=e[0]*i[4]+e[2]*i[5]+e[4],l=e[1]*i[4]+e[3]*i[5]+e[5];return t[0]=n,t[1]=r,t[2]=a,t[3]=o,t[4]=s,t[5]=l,t}function Te(t,e,i){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4]+i[0],t[5]=e[5]+i[1],t}function Ce(t,e,i){var n=e[0],r=e[2],a=e[4],o=e[1],s=e[3],l=e[5],h=Math.sin(i),u=Math.cos(i);return t[0]=n*u+o*h,t[1]=-n*h+o*u,t[2]=r*u+s*h,t[3]=-r*h+u*s,t[4]=u*a+h*l,t[5]=u*l-h*a,t}function Ae(t,e,i){var n=i[0],r=i[1];return t[0]=e[0]*n,t[1]=e[1]*r,t[2]=e[2]*n,t[3]=e[3]*r,t[4]=e[4]*n,t[5]=e[5]*r,t}function De(t,e){var i=e[0],n=e[2],r=e[4],a=e[1],o=e[3],s=e[5],l=i*o-a*n;return l?(l=1/l,t[0]=o*l,t[1]=-a*l,t[2]=-n*l,t[3]=i*l,t[4]=(n*s-o*r)*l,t[5]=(a*r-i*s)*l,t):null}function ke(t){var e=be();return Me(e,t),e}function Pe(t){return t>Lg||-Lg>t}function Le(t){this._target=t.target,this._life=t.life||1e3,this._delay=t.delay||0,this._initialized=!1,this.loop=null==t.loop?!1:t.loop,this.gap=t.gap||0,this.easing=t.easing||"Linear",this.onframe=t.onframe,this.ondestroy=t.ondestroy,this.onrestart=t.onrestart,this._pausedTime=0,this._paused=!1}function Oe(t){return t=Math.round(t),0>t?0:t>255?255:t}function ze(t){return t=Math.round(t),0>t?0:t>360?360:t}function Ee(t){return 0>t?0:t>1?1:t}function Re(t){return Oe(t.length&&"%"===t.charAt(t.length-1)?parseFloat(t)/100*255:parseInt(t,10))}function Be(t){return Ee(t.length&&"%"===t.charAt(t.length-1)?parseFloat(t)/100:parseFloat(t))}function Ne(t,e,i){return 0>i?i+=1:i>1&&(i-=1),1>6*i?t+(e-t)*i*6:1>2*i?e:2>3*i?t+(e-t)*(2/3-i)*6:t}function Fe(t,e,i){return t+(e-t)*i}function Ve(t,e,i,n,r){return t[0]=e,t[1]=i,t[2]=n,t[3]=r,t}function We(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}function Ge(t,e){Yg&&We(Yg,e),Yg=Xg.put(t,Yg||e.slice())}function He(t,e){if(t){e=e||[];var i=Xg.get(t);if(i)return We(e,i);t+="";var n=t.replace(/ /g,"").toLowerCase();if(n in Zg)return We(e,Zg[n]),Ge(t,e),e;if("#"!==n.charAt(0)){var r=n.indexOf("("),a=n.indexOf(")");if(-1!==r&&a+1===n.length){var o=n.substr(0,r),s=n.substr(r+1,a-(r+1)).split(","),l=1;switch(o){case"rgba":if(4!==s.length)return void Ve(e,0,0,0,1);l=Be(s.pop());case"rgb":return 3!==s.length?void Ve(e,0,0,0,1):(Ve(e,Re(s[0]),Re(s[1]),Re(s[2]),l),Ge(t,e),e);case"hsla":return 4!==s.length?void Ve(e,0,0,0,1):(s[3]=Be(s[3]),Ze(s,e),Ge(t,e),e);case"hsl":return 3!==s.length?void Ve(e,0,0,0,1):(Ze(s,e),Ge(t,e),e);default:return}}Ve(e,0,0,0,1)}else{if(4===n.length){var h=parseInt(n.substr(1),16);return h>=0&&4095>=h?(Ve(e,(3840&h)>>4|(3840&h)>>8,240&h|(240&h)>>4,15&h|(15&h)<<4,1),Ge(t,e),e):void Ve(e,0,0,0,1)}if(7===n.length){var h=parseInt(n.substr(1),16);return h>=0&&16777215>=h?(Ve(e,(16711680&h)>>16,(65280&h)>>8,255&h,1),Ge(t,e),e):void Ve(e,0,0,0,1)}}}}function Ze(t,e){var i=(parseFloat(t[0])%360+360)%360/360,n=Be(t[1]),r=Be(t[2]),a=.5>=r?r*(n+1):r+n-r*n,o=2*r-a;return e=e||[],Ve(e,Oe(255*Ne(o,a,i+1/3)),Oe(255*Ne(o,a,i)),Oe(255*Ne(o,a,i-1/3)),1),4===t.length&&(e[3]=t[3]),e}function Xe(t){if(t){var e,i,n=t[0]/255,r=t[1]/255,a=t[2]/255,o=Math.min(n,r,a),s=Math.max(n,r,a),l=s-o,h=(s+o)/2;if(0===l)e=0,i=0;else{i=.5>h?l/(s+o):l/(2-s-o);var u=((s-n)/6+l/2)/l,c=((s-r)/6+l/2)/l,d=((s-a)/6+l/2)/l;n===s?e=d-c:r===s?e=1/3+u-d:a===s&&(e=2/3+c-u),0>e&&(e+=1),e>1&&(e-=1)}var f=[360*e,i,h];return null!=t[3]&&f.push(t[3]),f}}function Ye(t,e){var i=He(t);if(i){for(var n=0;3>n;n++)i[n]=0>e?i[n]*(1-e)|0:(255-i[n])*e+i[n]|0,i[n]>255?i[n]=255:t[n]<0&&(i[n]=0);return Qe(i,4===i.length?"rgba":"rgb")}}function je(t){var e=He(t);return e?((1<<24)+(e[0]<<16)+(e[1]<<8)+ +e[2]).toString(16).slice(1):void 0}function qe(t,e,i){if(e&&e.length&&t>=0&&1>=t){i=i||[];var n=t*(e.length-1),r=Math.floor(n),a=Math.ceil(n),o=e[r],s=e[a],l=n-r;return i[0]=Oe(Fe(o[0],s[0],l)),i[1]=Oe(Fe(o[1],s[1],l)),i[2]=Oe(Fe(o[2],s[2],l)),i[3]=Ee(Fe(o[3],s[3],l)),i}}function Ue(t,e,i){if(e&&e.length&&t>=0&&1>=t){var n=t*(e.length-1),r=Math.floor(n),a=Math.ceil(n),o=He(e[r]),s=He(e[a]),l=n-r,h=Qe([Oe(Fe(o[0],s[0],l)),Oe(Fe(o[1],s[1],l)),Oe(Fe(o[2],s[2],l)),Ee(Fe(o[3],s[3],l))],"rgba");return i?{color:h,leftIndex:r,rightIndex:a,value:n}:h}}function $e(t,e,i,n){return t=He(t),t?(t=Xe(t),null!=e&&(t[0]=ze(e)),null!=i&&(t[1]=Be(i)),null!=n&&(t[2]=Be(n)),Qe(Ze(t),"rgba")):void 0}function Ke(t,e){return t=He(t),t&&null!=e?(t[3]=Ee(e),Qe(t,"rgba")):void 0}function Qe(t,e){if(t&&t.length){var i=t[0]+","+t[1]+","+t[2];return("rgba"===e||"hsva"===e||"hsla"===e)&&(i+=","+t[3]),e+"("+i+")"}}function Je(t,e){return t[e]}function ti(t,e,i){t[e]=i}function ei(t,e,i){return(e-t)*i+t}function ii(t,e,i){return i>.5?e:t}function ni(t,e,i,n,r){var a=t.length;if(1==r)for(var o=0;a>o;o++)n[o]=ei(t[o],e[o],i);else for(var s=a&&t[0].length,o=0;a>o;o++)for(var l=0;s>l;l++)n[o][l]=ei(t[o][l],e[o][l],i)}function ri(t,e,i){var n=t.length,r=e.length;if(n!==r){var a=n>r;if(a)t.length=r;else for(var o=n;r>o;o++)t.push(1===i?e[o]:$g.call(e[o]))}for(var s=t[0]&&t[0].length,o=0;ol;l++)isNaN(t[o][l])&&(t[o][l]=e[o][l])}function ai(t,e,i){if(t===e)return!0;var n=t.length;if(n!==e.length)return!1;if(1===i){for(var r=0;n>r;r++)if(t[r]!==e[r])return!1}else for(var a=t[0].length,r=0;n>r;r++)for(var o=0;a>o;o++)if(t[r][o]!==e[r][o])return!1;return!0}function oi(t,e,i,n,r,a,o,s,l){var h=t.length;if(1==l)for(var u=0;h>u;u++)s[u]=si(t[u],e[u],i[u],n[u],r,a,o);else for(var c=t[0].length,u=0;h>u;u++)for(var d=0;c>d;d++)s[u][d]=si(t[u][d],e[u][d],i[u][d],n[u][d],r,a,o)}function si(t,e,i,n,r,a,o){var s=.5*(i-t),l=.5*(n-e);return(2*(e-i)+s+l)*o+(-3*(e-i)-2*s-l)*a+s*r+e}function li(t){if(d(t)){var e=t.length;if(d(t[0])){for(var i=[],n=0;e>n;n++)i.push($g.call(t[n]));return i}return $g.call(t)}return t}function hi(t){return t[0]=Math.floor(t[0]),t[1]=Math.floor(t[1]),t[2]=Math.floor(t[2]),"rgba("+t.join(",")+")"}function ui(t){var e=t[t.length-1].value;return d(e&&e[0])?2:1}function ci(t,e,i,n,r,a){var o=t._getter,s=t._setter,l="spline"===e,h=n.length;if(h){var u,c=n[0].value,f=d(c),p=!1,g=!1,v=f?ui(n):0;n.sort(function(t,e){return t.time-e.time}),u=n[h-1].time;for(var m=[],y=[],x=n[0].value,_=!0,w=0;h>w;w++){m.push(n[w].time/u);var b=n[w].value;if(f&&ai(b,x,v)||!f&&b===x||(_=!1),x=b,"string"==typeof b){var S=He(b);S?(b=S,p=!0):g=!0}y.push(b)}if(a||!_){for(var M=y[h-1],w=0;h-1>w;w++)f?ri(y[w],M,v):!isNaN(y[w])||isNaN(M)||g||p||(y[w]=M);f&&ri(o(t._target,r),M,v);var I,T,C,A,D,k,P=0,L=0;if(p)var O=[0,0,0,0];var z=function(t,e){var i;if(0>e)i=0;else if(L>e){for(I=Math.min(P+1,h-1),i=I;i>=0&&!(m[i]<=e);i--);i=Math.min(i,h-2)}else{for(i=P;h>i&&!(m[i]>e);i++);i=Math.min(i-1,h-2)}P=i,L=e;var n=m[i+1]-m[i];if(0!==n)if(T=(e-m[i])/n,l)if(A=y[i],C=y[0===i?i:i-1],D=y[i>h-2?h-1:i+1],k=y[i>h-3?h-1:i+2],f)oi(C,A,D,k,T,T*T,T*T*T,o(t,r),v);else{var a;if(p)a=oi(C,A,D,k,T,T*T,T*T*T,O,1),a=hi(O);else{if(g)return ii(A,D,T);a=si(C,A,D,k,T,T*T,T*T*T)}s(t,r,a)}else if(f)ni(y[i],y[i+1],T,o(t,r),v);else{var a;if(p)ni(y[i],y[i+1],T,O,1),a=hi(O);else{if(g)return ii(y[i],y[i+1],T);a=ei(y[i],y[i+1],T)}s(t,r,a)}},E=new Le({target:t._target,life:u,loop:t._loop,delay:t._delay,onframe:z,ondestroy:i});return e&&"spline"!==e&&(E.easing=e),E}}}function di(t,e,i,n,r,a,o,s){function l(){u--,u||a&&a()}b(n)?(a=r,r=n,n=0):w(r)?(a=r,r="linear",n=0):w(n)?(a=n,n=0):w(i)?(a=i,i=500):i||(i=500),t.stopAnimation(),fi(t,"",t,e,i,n,s);var h=t.animators.slice(),u=h.length;u||a&&a();for(var c=0;c0&&t.animate(e,!1).when(null==r?500:r,s).delay(a||0)}function pi(t,e,i,n){if(e){var r={};r[e]={},r[e][i]=n,t.attr(r)}else t.attr(i,n)}function gi(t,e,i,n){0>i&&(t+=i,i=-i),0>n&&(e+=n,n=-n),this.x=t,this.y=e,this.width=i,this.height=n}function vi(t){for(var e=0;t>=hv;)e|=1&t,t>>=1;return t+e}function mi(t,e,i,n){var r=e+1;if(r===i)return 1;if(n(t[r++],t[e])<0){for(;i>r&&n(t[r],t[r-1])<0;)r++;yi(t,e,r)}else for(;i>r&&n(t[r],t[r-1])>=0;)r++;return r-e}function yi(t,e,i){for(i--;i>e;){var n=t[e];t[e++]=t[i],t[i--]=n}}function xi(t,e,i,n,r){for(n===e&&n++;i>n;n++){for(var a,o=t[n],s=e,l=n;l>s;)a=s+l>>>1,r(o,t[a])<0?l=a:s=a+1;var h=n-s;switch(h){case 3:t[s+3]=t[s+2];case 2:t[s+2]=t[s+1];case 1:t[s+1]=t[s];break;default:for(;h>0;)t[s+h]=t[s+h-1],h--}t[s]=o}}function _i(t,e,i,n,r,a){var o=0,s=0,l=1;if(a(t,e[i+r])>0){for(s=n-r;s>l&&a(t,e[i+r+l])>0;)o=l,l=(l<<1)+1,0>=l&&(l=s);l>s&&(l=s),o+=r,l+=r}else{for(s=r+1;s>l&&a(t,e[i+r-l])<=0;)o=l,l=(l<<1)+1,0>=l&&(l=s);l>s&&(l=s);var h=o;o=r-l,l=r-h}for(o++;l>o;){var u=o+(l-o>>>1);a(t,e[i+u])>0?o=u+1:l=u}return l}function wi(t,e,i,n,r,a){var o=0,s=0,l=1;if(a(t,e[i+r])<0){for(s=r+1;s>l&&a(t,e[i+r-l])<0;)o=l,l=(l<<1)+1,0>=l&&(l=s);l>s&&(l=s);var h=o;o=r-l,l=r-h}else{for(s=n-r;s>l&&a(t,e[i+r+l])>=0;)o=l,l=(l<<1)+1,0>=l&&(l=s);l>s&&(l=s),o+=r,l+=r}for(o++;l>o;){var u=o+(l-o>>>1);a(t,e[i+u])<0?l=u:o=u+1}return l}function bi(t,e){function i(t,e){l[c]=t,h[c]=e,c+=1}function n(){for(;c>1;){var t=c-2;if(t>=1&&h[t-1]<=h[t]+h[t+1]||t>=2&&h[t-2]<=h[t]+h[t-1])h[t-1]h[t+1])break;a(t)}}function r(){for(;c>1;){var t=c-2;t>0&&h[t-1]=r?o(n,r,a,u):s(n,r,a,u)))}function o(i,n,r,a){var o=0;for(o=0;n>o;o++)d[o]=t[i+o];var s=0,l=r,h=i;if(t[h++]=t[l++],0!==--a){if(1===n){for(o=0;a>o;o++)t[h+o]=t[l+o];return void(t[h+a]=d[s])}for(var c,f,p,g=u;;){c=0,f=0,p=!1;do if(e(t[l],d[s])<0){if(t[h++]=t[l++],f++,c=0,0===--a){p=!0;break}}else if(t[h++]=d[s++],c++,f=0,1===--n){p=!0;break}while(g>(c|f));if(p)break;do{if(c=wi(t[l],d,s,n,0,e),0!==c){for(o=0;c>o;o++)t[h+o]=d[s+o];if(h+=c,s+=c,n-=c,1>=n){p=!0;break}}if(t[h++]=t[l++],0===--a){p=!0;break}if(f=_i(d[s],t,l,a,0,e),0!==f){for(o=0;f>o;o++)t[h+o]=t[l+o];if(h+=f,l+=f,a-=f,0===a){p=!0;break}}if(t[h++]=d[s++],1===--n){p=!0;break}g--}while(c>=uv||f>=uv);if(p)break;0>g&&(g=0),g+=2}if(u=g,1>u&&(u=1),1===n){for(o=0;a>o;o++)t[h+o]=t[l+o];t[h+a]=d[s]}else{if(0===n)throw new Error;for(o=0;n>o;o++)t[h+o]=d[s+o]}}else for(o=0;n>o;o++)t[h+o]=d[s+o]}function s(i,n,r,a){var o=0;for(o=0;a>o;o++)d[o]=t[r+o];var s=i+n-1,l=a-1,h=r+a-1,c=0,f=0;if(t[h--]=t[s--],0!==--n){if(1===a){for(h-=n,s-=n,f=h+1,c=s+1,o=n-1;o>=0;o--)t[f+o]=t[c+o];return void(t[h]=d[l])}for(var p=u;;){var g=0,v=0,m=!1;do if(e(d[l],t[s])<0){if(t[h--]=t[s--],g++,v=0,0===--n){m=!0;break}}else if(t[h--]=d[l--],v++,g=0,1===--a){m=!0;break}while(p>(g|v));if(m)break;do{if(g=n-wi(d[l],t,i,n,n-1,e),0!==g){for(h-=g,s-=g,n-=g,f=h+1,c=s+1,o=g-1;o>=0;o--)t[f+o]=t[c+o];if(0===n){m=!0;break}}if(t[h--]=d[l--],1===--a){m=!0;break}if(v=a-_i(t[s],d,0,a,a-1,e),0!==v){for(h-=v,l-=v,a-=v,f=h+1,c=l+1,o=0;v>o;o++)t[f+o]=d[c+o];if(1>=a){m=!0;break}}if(t[h--]=t[s--],0===--n){m=!0;break}p--}while(g>=uv||v>=uv);if(m)break;0>p&&(p=0),p+=2}if(u=p,1>u&&(u=1),1===a){for(h-=n,s-=n,f=h+1,c=s+1,o=n-1;o>=0;o--)t[f+o]=t[c+o];t[h]=d[l]}else{if(0===a)throw new Error;for(c=h-(a-1),o=0;a>o;o++)t[c+o]=d[o]}}else for(c=h-(a-1),o=0;a>o;o++)t[c+o]=d[o]}var l,h,u=uv,c=0,d=[];l=[],h=[],this.mergeRuns=n,this.forceMergeRuns=r,this.pushRun=i}function Si(t,e,i,n){i||(i=0),n||(n=t.length);var r=n-i;if(!(2>r)){var a=0;if(hv>r)return a=mi(t,i,n,e),void xi(t,i,n,i+a,e);var o=new bi(t,e),s=vi(r);do{if(a=mi(t,i,n,e),s>a){var l=r;l>s&&(l=s),xi(t,i,i+l,i+a,e),a=l}o.pushRun(i,a),o.mergeRuns(),r-=a,i+=a}while(0!==r);o.forceMergeRuns()}}function Mi(t,e){return t.zlevel===e.zlevel?t.z===e.z?t.z2-e.z2:t.z-e.z:t.zlevel-e.zlevel}function Ii(t,e,i){var n=null==e.x?0:e.x,r=null==e.x2?1:e.x2,a=null==e.y?0:e.y,o=null==e.y2?0:e.y2;e.global||(n=n*i.width+i.x,r=r*i.width+i.x,a=a*i.height+i.y,o=o*i.height+i.y),n=isNaN(n)?0:n,r=isNaN(r)?1:r,a=isNaN(a)?0:a,o=isNaN(o)?0:o;var s=t.createLinearGradient(n,a,r,o);return s}function Ti(t,e,i){var n=i.width,r=i.height,a=Math.min(n,r),o=null==e.x?.5:e.x,s=null==e.y?.5:e.y,l=null==e.r?.5:e.r;e.global||(o=o*n+i.x,s=s*r+i.y,l*=a);var h=t.createRadialGradient(o,s,0,o,s,l);return h}function Ci(){return!1}function Ai(t,e,i){var n=cg(),r=e.getWidth(),a=e.getHeight(),o=n.style;return o&&(o.position="absolute",o.left=0,o.top=0,o.width=r+"px",o.height=a+"px",n.setAttribute("data-zr-dom-id",t)),n.width=r*i,n.height=a*i,n}function Di(t){if("string"==typeof t){var e=bv.get(t);return e&&e.image}return t}function ki(t,e,i,n,r){if(t){if("string"==typeof t){if(e&&e.__zrImageSrc===t||!i)return e;var a=bv.get(t),o={hostEl:i,cb:n,cbPayload:r};return a?(e=a.image,!Li(e)&&a.pending.push(o)):(!e&&(e=new Image),e.onload=e.onerror=Pi,bv.put(t,e.__cachedImgObj={image:e,pending:[o]}),e.src=e.__zrImageSrc=t),e}return t}return e}function Pi(){var t=this.__cachedImgObj;this.onload=this.onerror=this.__cachedImgObj=null;for(var e=0;ea;a++)r=Math.max(Yi(n[a],e).width,r);return Mv>Iv&&(Mv=0,Sv={}),Mv++,Sv[i]=r,r}function Ei(t,e,i,n,r,a,o){return a?Bi(t,e,i,n,r,a,o):Ri(t,e,i,n,r,o)}function Ri(t,e,i,n,r,a){var o=ji(t,e,r,a),s=zi(t,e);r&&(s+=r[1]+r[3]);var l=o.outerHeight,h=Ni(0,s,i),u=Fi(0,l,n),c=new gi(h,u,s,l);return c.lineHeight=o.lineHeight,c}function Bi(t,e,i,n,r,a,o){var s=qi(t,{rich:a,truncate:o,font:e,textAlign:i,textPadding:r}),l=s.outerWidth,h=s.outerHeight,u=Ni(0,l,i),c=Fi(0,h,n);return new gi(u,c,l,h)}function Ni(t,e,i){return"right"===i?t-=e:"center"===i&&(t-=e/2),t}function Fi(t,e,i){return"middle"===i?t-=e/2:"bottom"===i&&(t-=e),t}function Vi(t,e,i){var n=e.x,r=e.y,a=e.height,o=e.width,s=a/2,l="left",h="top";switch(t){case"left":n-=i,r+=s,l="right",h="middle";break;case"right":n+=i+o,r+=s,h="middle";break;case"top":n+=o/2,r-=i,l="center",h="bottom";break;case"bottom":n+=o/2,r+=a+i,l="center";break;case"inside":n+=o/2,r+=s,l="center",h="middle";break;case"insideLeft":n+=i,r+=s,h="middle";break;case"insideRight":n+=o-i,r+=s,l="right",h="middle";break;case"insideTop":n+=o/2,r+=i,l="center";break;case"insideBottom":n+=o/2,r+=a-i,l="center",h="bottom";break;case"insideTopLeft":n+=i,r+=i;break;case"insideTopRight":n+=o-i,r+=i,l="right";break;case"insideBottomLeft":n+=i,r+=a-i,h="bottom";break;case"insideBottomRight":n+=o-i,r+=a-i,l="right",h="bottom"}return{x:n,y:r,textAlign:l,textVerticalAlign:h}}function Wi(t,e,i,n,r){if(!e)return"";var a=(t+"").split("\n");r=Gi(e,i,n,r);for(var o=0,s=a.length;s>o;o++)a[o]=Hi(a[o],r);return a.join("\n")}function Gi(t,e,i,n){n=o({},n),n.font=e;var i=D(i,"...");n.maxIterations=D(n.maxIterations,2);var r=n.minChar=D(n.minChar,0);n.cnCharWidth=zi("国",e);var a=n.ascCharWidth=zi("a",e);n.placeholder=D(n.placeholder,"");for(var s=t=Math.max(0,t-1),l=0;r>l&&s>=a;l++)s-=a;var h=zi(i);return h>s&&(i="",h=0),s=t-h,n.ellipsis=i,n.ellipsisWidth=h,n.contentWidth=s,n.containerWidth=t,n}function Hi(t,e){var i=e.containerWidth,n=e.font,r=e.contentWidth;if(!i)return"";var a=zi(t,n);if(i>=a)return t;for(var o=0;;o++){if(r>=a||o>=e.maxIterations){t+=e.ellipsis;break}var s=0===o?Zi(t,r,e.ascCharWidth,e.cnCharWidth):a>0?Math.floor(t.length*r/a):0;t=t.substr(0,s),a=zi(t,n)}return""===t&&(t=e.placeholder),t}function Zi(t,e,i,n){for(var r=0,a=0,o=t.length;o>a&&e>r;a++){var s=t.charCodeAt(a);r+=s>=0&&127>=s?i:n}return a}function Xi(t){return zi("国",t)}function Yi(t,e){return Av.measureText(t,e)}function ji(t,e,i,n){null!=t&&(t+="");var r=Xi(e),a=t?t.split("\n"):[],o=a.length*r,s=o;if(i&&(s+=i[0]+i[2]),t&&n){var l=n.outerHeight,h=n.outerWidth;if(null!=l&&s>l)t="",a=[];else if(null!=h)for(var u=Gi(h-(i?i[1]+i[3]:0),e,n.ellipsis,{minChar:n.minChar,placeholder:n.placeholder}),c=0,d=a.length;d>c;c++)a[c]=Hi(a[c],u)}return{lines:a,height:o,outerHeight:s,lineHeight:r}}function qi(t,e){var i={lines:[],width:0,height:0};if(null!=t&&(t+=""),!t)return i;for(var n,r=Tv.lastIndex=0;null!=(n=Tv.exec(t));){var a=n.index;a>r&&Ui(i,t.substring(r,a)),Ui(i,n[2],n[1]),r=Tv.lastIndex}rf)return{lines:[],width:0,height:0};x.textWidth=zi(x.text,b);var M=_.textWidth,I=null==M||"auto"===M;if("string"==typeof M&&"%"===M.charAt(M.length-1))x.percentWidth=M,h.push(x),M=0;else{if(I){M=x.textWidth;var T=_.textBackgroundColor,C=T&&T.image;C&&(C=Di(C),Li(C)&&(M=Math.max(M,C.width*S/C.height)))}var A=w?w[1]+w[3]:0;M+=A;var P=null!=d?d-m:null;null!=P&&M>P&&(!I||A>P?(x.text="",x.textWidth=M=0):(x.text=Wi(x.text,P-A,b,c.ellipsis,{minChar:c.minChar}),x.textWidth=zi(x.text,b),M=x.textWidth+A))}m+=x.width=M,_&&(v=Math.max(v,x.lineHeight))}g.width=m,g.lineHeight=v,s+=v,l=Math.max(l,m)}i.outerWidth=i.width=D(e.textWidth,l),i.outerHeight=i.height=D(e.textHeight,s),u&&(i.outerWidth+=u[1]+u[3],i.outerHeight+=u[0]+u[2]);for(var p=0;pl&&(o+=l,l=-l),0>h&&(s+=h,h=-h),"number"==typeof u?i=n=r=a=u:u instanceof Array?1===u.length?i=n=r=a=u[0]:2===u.length?(i=r=u[0],n=a=u[1]):3===u.length?(i=u[0],n=a=u[1],r=u[2]):(i=u[0],n=u[1],r=u[2],a=u[3]):i=n=r=a=0;var c;i+n>l&&(c=i+n,i*=l/c,n*=l/c),r+a>l&&(c=r+a,r*=l/c,a*=l/c),n+r>h&&(c=n+r,n*=h/c,r*=h/c),i+a>h&&(c=i+a,i*=h/c,a*=h/c),t.moveTo(o+i,s),t.lineTo(o+l-n,s),0!==n&&t.arc(o+l-n,s+n,n,-Math.PI/2,0),t.lineTo(o+l,s+h-r),0!==r&&t.arc(o+l-r,s+h-r,r,0,Math.PI/2),t.lineTo(o+a,s+h),0!==a&&t.arc(o+a,s+h-a,a,Math.PI/2,Math.PI),t.lineTo(o,s+i),0!==i&&t.arc(o+i,s+i,i,Math.PI,1.5*Math.PI)}function Qi(t){return Ji(t),f(t.rich,Ji),t}function Ji(t){if(t){t.font=$i(t);var e=t.textAlign;"middle"===e&&(e="center"),t.textAlign=null==e||Dv[e]?e:"left";var i=t.textVerticalAlign||t.textBaseline;"center"===i&&(i="middle"),t.textVerticalAlign=null==i||kv[i]?i:"top";var n=t.textPadding;n&&(t.textPadding=L(t.textPadding))}}function tn(t,e,i,n,r,a){n.rich?nn(t,e,i,n,r):en(t,e,i,n,r,a)}function en(t,e,i,n,r,a){var o=a&&a.style,s=o&&"text"===a.type,l=n.font||Cv;s&&l===(o.font||Cv)||(e.font=l);var h=t.__computedFont;t.__styleFont!==l&&(t.__styleFont=l,h=t.__computedFont=e.font);var u=n.textPadding,c=t.__textCotentBlock;(!c||t.__dirtyText)&&(c=t.__textCotentBlock=ji(i,h,u,n.truncate));var d=c.outerHeight,f=c.lines,p=c.lineHeight,g=un(d,n,r),v=g.baseX,m=g.baseY,y=g.textAlign||"left",x=g.textVerticalAlign;an(e,n,r,v,m);var _=Fi(m,d,x),w=v,b=_,S=sn(n);if(S||u){var M=zi(i,h),I=M;u&&(I+=u[1]+u[3]);var T=Ni(v,I,y);S&&ln(t,e,n,T,_,I,d),u&&(w=gn(v,y,u),b+=u[0])}e.textAlign=y,e.textBaseline="middle";for(var C=0;CT&&(_=b[T],!_.textAlign||"left"===_.textAlign);)on(t,e,_,n,M,m,C,"left"),I-=_.width,C+=_.width,T++;for(;D>=0&&(_=b[D],"right"===_.textAlign);)on(t,e,_,n,M,m,A,"right"),I-=_.width,A-=_.width,D--;for(C+=(a-(C-v)-(y-A)-I)/2;D>=T;)_=b[T],on(t,e,_,n,M,m,C+_.width/2,"center"),C+=_.width,T++;m+=M}}function an(t,e,i,n,r){if(i&&e.textRotation){var a=e.textOrigin;"center"===a?(n=i.width/2+i.x,r=i.height/2+i.y):a&&(n=a[0]+i.x,r=a[1]+i.y),t.translate(n,r),t.rotate(-e.textRotation),t.translate(-n,-r)}}function on(t,e,i,n,r,a,o,s){var l=n.rich[i.styleName]||{};l.text=i.text;var h=i.textVerticalAlign,u=a+r/2;"top"===h?u=a+i.height/2:"bottom"===h&&(u=a+r-i.height/2),!i.isLineHolder&&sn(l)&&ln(t,e,l,"right"===s?o-i.width:"center"===s?o-i.width/2:o,u-i.height/2,i.width,i.height);var c=i.textPadding;c&&(o=gn(o,s,c),u-=i.height/2-c[2]-i.textHeight/2),cn(e,"shadowBlur",k(l.textShadowBlur,n.textShadowBlur,0)),cn(e,"shadowColor",l.textShadowColor||n.textShadowColor||"transparent"),cn(e,"shadowOffsetX",k(l.textShadowOffsetX,n.textShadowOffsetX,0)),cn(e,"shadowOffsetY",k(l.textShadowOffsetY,n.textShadowOffsetY,0)),cn(e,"textAlign",s),cn(e,"textBaseline","middle"),cn(e,"font",i.font||Cv);var d=dn(l.textStroke||n.textStroke,p),f=fn(l.textFill||n.textFill),p=D(l.textStrokeWidth,n.textStrokeWidth);d&&(cn(e,"lineWidth",p),cn(e,"strokeStyle",d),e.strokeText(i.text,o,u)),f&&(cn(e,"fillStyle",f),e.fillText(i.text,o,u))}function sn(t){return t.textBackgroundColor||t.textBorderWidth&&t.textBorderColor}function ln(t,e,i,n,r,a,o){var s=i.textBackgroundColor,l=i.textBorderWidth,h=i.textBorderColor,u=b(s);if(cn(e,"shadowBlur",i.textBoxShadowBlur||0),cn(e,"shadowColor",i.textBoxShadowColor||"transparent"),cn(e,"shadowOffsetX",i.textBoxShadowOffsetX||0),cn(e,"shadowOffsetY",i.textBoxShadowOffsetY||0),u||l&&h){e.beginPath();var c=i.textBorderRadius;c?Ki(e,{x:n,y:r,width:a,height:o,r:c}):e.rect(n,r,a,o),e.closePath()}if(u)if(cn(e,"fillStyle",s),null!=i.fillOpacity){var d=e.globalAlpha;e.globalAlpha=i.fillOpacity*i.opacity,e.fill(),e.globalAlpha=d}else e.fill();else if(w(s))cn(e,"fillStyle",s(i)),e.fill();else if(S(s)){var f=s.image;f=ki(f,null,t,hn,s),f&&Li(f)&&e.drawImage(f,n,r,a,o)}if(l&&h)if(cn(e,"lineWidth",l),cn(e,"strokeStyle",h),null!=i.strokeOpacity){var d=e.globalAlpha;e.globalAlpha=i.strokeOpacity*i.opacity,e.stroke(),e.globalAlpha=d}else e.stroke()}function hn(t,e){e.image=t}function un(t,e,i){var n=e.x||0,r=e.y||0,a=e.textAlign,o=e.textVerticalAlign;if(i){var s=e.textPosition;if(s instanceof Array)n=i.x+pn(s[0],i.width),r=i.y+pn(s[1],i.height);else{var l=Vi(s,i,e.textDistance);n=l.x,r=l.y,a=a||l.textAlign,o=o||l.textVerticalAlign}var h=e.textOffset;h&&(n+=h[0],r+=h[1])}return{baseX:n,baseY:r,textAlign:a,textVerticalAlign:o}}function cn(t,e,i){return t[e]=fv(t,e,i),t[e]}function dn(t,e){return null==t||0>=e||"transparent"===t||"none"===t?null:t.image||t.colorStops?"#000":t}function fn(t){return null==t||"none"===t?null:t.image||t.colorStops?"#000":t}function pn(t,e){return"string"==typeof t?t.lastIndexOf("%")>=0?parseFloat(t)/100*e:parseFloat(t):t}function gn(t,e,i){return"right"===e?t-i[1]:"center"===e?t+i[3]/2-i[1]/2:t+i[3]}function vn(t,e){return null!=t&&(t||e.textBackgroundColor||e.textBorderWidth&&e.textBorderColor||e.textPadding)}function mn(t){t=t||{},rv.call(this,t);for(var e in t)t.hasOwnProperty(e)&&"style"!==e&&(this[e]=t[e]);this.style=new gv(t.style,this),this._rect=null,this.__clipPaths=[] -}function yn(t){mn.call(this,t)}function xn(t){return parseInt(t,10)}function _n(t){return t?t.__builtin__?!0:"function"!=typeof t.resize||"function"!=typeof t.refresh?!1:!0:!1}function wn(t,e,i){return Nv.copy(t.getBoundingRect()),t.transform&&Nv.applyTransform(t.transform),Fv.width=e,Fv.height=i,!Nv.intersect(Fv)}function bn(t,e){if(t==e)return!1;if(!t||!e||t.length!==e.length)return!0;for(var i=0;in;n++){var a=i[n];!t.emphasis[e].hasOwnProperty(a)&&t[e].hasOwnProperty(a)&&(t.emphasis[e][a]=t[e][a])}}}function Vn(t){return!rm(t)||am(t)||t instanceof Date?t:t.value}function Wn(t){return rm(t)&&!(t instanceof Array)}function Gn(t,e){e=(e||[]).slice();var i=p(t||[],function(t){return{exist:t}});return nm(e,function(t,n){if(rm(t)){for(var r=0;r=i.length&&i.push({option:t})}}),i}function Hn(t){var e=N();nm(t,function(t){var i=t.exist;i&&e.set(i.id,t)}),nm(t,function(t){var i=t.option;O(!i||null==i.id||!e.get(i.id)||e.get(i.id)===t,"id duplicates: "+(i&&i.id)),i&&null!=i.id&&e.set(i.id,t),!t.keyInfo&&(t.keyInfo={})}),nm(t,function(t,i){var n=t.exist,r=t.option,a=t.keyInfo;if(rm(r)){if(a.name=null!=r.name?r.name+"":n?n.name:om+i,n)a.id=n.id;else if(null!=r.id)a.id=r.id+"";else{var o=0;do a.id="\x00"+a.name+"\x00"+o++;while(e.get(a.id))}e.set(a.id,t)}})}function Zn(t){var e=t.name;return!(!e||!e.indexOf(om))}function Xn(t){return rm(t)&&t.id&&0===(t.id+"").indexOf("\x00_ec_\x00")}function Yn(t,e){return null!=e.dataIndexInside?e.dataIndexInside:null!=e.dataIndex?_(e.dataIndex)?p(e.dataIndex,function(e){return t.indexOfRawIndex(e)}):t.indexOfRawIndex(e.dataIndex):null!=e.name?_(e.name)?p(e.name,function(e){return t.indexOfName(e)}):t.indexOfName(e.name):void 0}function jn(){var t="__\x00ec_inner_"+lm++ +"_"+Math.random().toFixed(5);return function(e){return e[t]||(e[t]={})}}function qn(t,e,i){if(b(e)){var n={};n[e+"Index"]=0,e=n}var r=i&&i.defaultMainType;!r||Un(e,r+"Index")||Un(e,r+"Id")||Un(e,r+"Name")||(e[r+"Index"]=0);var a={};return nm(e,function(n,r){var n=e[r];if("dataIndex"===r||"dataIndexInside"===r)return void(a[r]=n);var o=r.match(/^(\w+)(Index|Id|Name)$/)||[],s=o[1],l=(o[2]||"").toLowerCase();if(!(!s||!l||null==n||"index"===l&&"none"===n||i&&i.includeMainTypes&&h(i.includeMainTypes,s)<0)){var u={mainType:s};("index"!==l||"all"!==n)&&(u[l]=n);var c=t.queryComponents(u);a[s+"Models"]=c,a[s+"Model"]=c[0]}}),a}function Un(t,e){return t&&t.hasOwnProperty(e)}function $n(t,e,i){t.setAttribute?t.setAttribute(e,i):t[e]=i}function Kn(t,e){return t.getAttribute?t.getAttribute(e):t[e]}function Qn(t){return"auto"===t?tg.domSupported?"html":"richText":t||"html"}function Jn(t){var e={main:"",sub:""};return t&&(t=t.split(hm),e.main=t[0]||"",e.sub=t[1]||""),e}function tr(t){O(/^[a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)?$/.test(t),'componentType "'+t+'" illegal')}function er(t){t.$constructor=t,t.extend=function(t){var e=this,i=function(){t.$constructor?t.$constructor.apply(this,arguments):e.apply(this,arguments)};return o(i.prototype,t),i.extend=this.extend,i.superCall=nr,i.superApply=rr,u(i,this),i.superClass=e,i}}function ir(t){var e=["__\x00is_clz",cm++,Math.random().toFixed(3)].join("_");t.prototype[e]=!0,t.isInstance=function(t){return!(!t||!t[e])}}function nr(t,e){var i=P(arguments,2);return this.superClass.prototype[e].apply(t,i)}function rr(t,e,i){return this.superClass.prototype[e].apply(t,i)}function ar(t,e){function i(t){var e=n[t.main];return e&&e[um]||(e=n[t.main]={},e[um]=!0),e}e=e||{};var n={};if(t.registerClass=function(t,e){if(e)if(tr(e),e=Jn(e),e.sub){if(e.sub!==um){var r=i(e);r[e.sub]=t}}else n[e.main]=t;return t},t.getClass=function(t,e,i){var r=n[t];if(r&&r[um]&&(r=e?r[e]:null),i&&!r)throw new Error(e?"Component "+t+"."+(e||"")+" not exists. Load it first.":t+".type should be specified.");return r},t.getClassesByMainType=function(t){t=Jn(t);var e=[],i=n[t.main];return i&&i[um]?f(i,function(t,i){i!==um&&e.push(t)}):e.push(i),e},t.hasClass=function(t){return t=Jn(t),!!n[t.main]},t.getAllClassMainTypes=function(){var t=[];return f(n,function(e,i){t.push(i)}),t},t.hasSubTypes=function(t){t=Jn(t);var e=n[t.main];return e&&e[um]},t.parseClassType=Jn,e.registerWhenExtend){var r=t.extend;r&&(t.extend=function(e){var i=r.call(this,e);return t.registerClass(i,e.type)})}return t}function or(t){return t>-xm&&xm>t}function sr(t){return t>xm||-xm>t}function lr(t,e,i,n,r){var a=1-r;return a*a*(a*t+3*r*e)+r*r*(r*n+3*a*i)}function hr(t,e,i,n,r){var a=1-r;return 3*(((e-t)*a+2*(i-e)*r)*a+(n-i)*r*r)}function ur(t,e,i,n,r,a){var o=n+3*(e-i)-t,s=3*(i-2*e+t),l=3*(e-t),h=t-r,u=s*s-3*o*l,c=s*l-9*o*h,d=l*l-3*s*h,f=0;if(or(u)&&or(c))if(or(s))a[0]=0;else{var p=-l/s;p>=0&&1>=p&&(a[f++]=p)}else{var g=c*c-4*u*d;if(or(g)){var v=c/u,p=-s/o+v,m=-v/2;p>=0&&1>=p&&(a[f++]=p),m>=0&&1>=m&&(a[f++]=m)}else if(g>0){var y=ym(g),x=u*s+1.5*o*(-c+y),_=u*s+1.5*o*(-c-y);x=0>x?-mm(-x,bm):mm(x,bm),_=0>_?-mm(-_,bm):mm(_,bm);var p=(-s-(x+_))/(3*o);p>=0&&1>=p&&(a[f++]=p)}else{var w=(2*u*s-3*o*c)/(2*ym(u*u*u)),b=Math.acos(w)/3,S=ym(u),M=Math.cos(b),p=(-s-2*S*M)/(3*o),m=(-s+S*(M+wm*Math.sin(b)))/(3*o),I=(-s+S*(M-wm*Math.sin(b)))/(3*o);p>=0&&1>=p&&(a[f++]=p),m>=0&&1>=m&&(a[f++]=m),I>=0&&1>=I&&(a[f++]=I)}}return f}function cr(t,e,i,n,r){var a=6*i-12*e+6*t,o=9*e+3*n-3*t-9*i,s=3*e-3*t,l=0;if(or(o)){if(sr(a)){var h=-s/a;h>=0&&1>=h&&(r[l++]=h)}}else{var u=a*a-4*o*s;if(or(u))r[0]=-a/(2*o);else if(u>0){var c=ym(u),h=(-a+c)/(2*o),d=(-a-c)/(2*o);h>=0&&1>=h&&(r[l++]=h),d>=0&&1>=d&&(r[l++]=d)}}return l}function dr(t,e,i,n,r,a){var o=(e-t)*r+t,s=(i-e)*r+e,l=(n-i)*r+i,h=(s-o)*r+o,u=(l-s)*r+s,c=(u-h)*r+h;a[0]=t,a[1]=o,a[2]=h,a[3]=c,a[4]=c,a[5]=u,a[6]=l,a[7]=n}function fr(t,e,i,n,r,a,o,s,l,h,u){var c,d,f,p,g,v=.005,m=1/0;Sm[0]=l,Sm[1]=h;for(var y=0;1>y;y+=.05)Mm[0]=lr(t,i,r,o,y),Mm[1]=lr(e,n,a,s,y),p=xg(Sm,Mm),m>p&&(c=y,m=p);m=1/0;for(var x=0;32>x&&!(_m>v);x++)d=c-v,f=c+v,Mm[0]=lr(t,i,r,o,d),Mm[1]=lr(e,n,a,s,d),p=xg(Mm,Sm),d>=0&&m>p?(c=d,m=p):(Im[0]=lr(t,i,r,o,f),Im[1]=lr(e,n,a,s,f),g=xg(Im,Sm),1>=f&&m>g?(c=f,m=g):v*=.5);return u&&(u[0]=lr(t,i,r,o,c),u[1]=lr(e,n,a,s,c)),ym(m)}function pr(t,e,i,n){var r=1-n;return r*(r*t+2*n*e)+n*n*i}function gr(t,e,i,n){return 2*((1-n)*(e-t)+n*(i-e))}function vr(t,e,i,n,r){var a=t-2*e+i,o=2*(e-t),s=t-n,l=0;if(or(a)){if(sr(o)){var h=-s/o;h>=0&&1>=h&&(r[l++]=h)}}else{var u=o*o-4*a*s;if(or(u)){var h=-o/(2*a);h>=0&&1>=h&&(r[l++]=h)}else if(u>0){var c=ym(u),h=(-o+c)/(2*a),d=(-o-c)/(2*a);h>=0&&1>=h&&(r[l++]=h),d>=0&&1>=d&&(r[l++]=d)}}return l}function mr(t,e,i){var n=t+i-2*e;return 0===n?.5:(t-e)/n}function yr(t,e,i,n,r){var a=(e-t)*n+t,o=(i-e)*n+e,s=(o-a)*n+a;r[0]=t,r[1]=a,r[2]=s,r[3]=s,r[4]=o,r[5]=i}function xr(t,e,i,n,r,a,o,s,l){var h,u=.005,c=1/0;Sm[0]=o,Sm[1]=s;for(var d=0;1>d;d+=.05){Mm[0]=pr(t,i,r,d),Mm[1]=pr(e,n,a,d);var f=xg(Sm,Mm);c>f&&(h=d,c=f)}c=1/0;for(var p=0;32>p&&!(_m>u);p++){var g=h-u,v=h+u;Mm[0]=pr(t,i,r,g),Mm[1]=pr(e,n,a,g);var f=xg(Mm,Sm);if(g>=0&&c>f)h=g,c=f;else{Im[0]=pr(t,i,r,v),Im[1]=pr(e,n,a,v);var m=xg(Im,Sm);1>=v&&c>m?(h=v,c=m):u*=.5}}return l&&(l[0]=pr(t,i,r,h),l[1]=pr(e,n,a,h)),ym(c)}function _r(t,e,i){if(0!==t.length){var n,r=t[0],a=r[0],o=r[0],s=r[1],l=r[1];for(n=1;nu;u++){var p=d(t,i,r,o,zm[u]);l[0]=Tm(p,l[0]),h[0]=Cm(p,h[0])}for(f=c(e,n,a,s,Em),u=0;f>u;u++){var g=d(e,n,a,s,Em[u]);l[1]=Tm(g,l[1]),h[1]=Cm(g,h[1])}l[0]=Tm(t,l[0]),h[0]=Cm(t,h[0]),l[0]=Tm(o,l[0]),h[0]=Cm(o,h[0]),l[1]=Tm(e,l[1]),h[1]=Cm(e,h[1]),l[1]=Tm(s,l[1]),h[1]=Cm(s,h[1])}function Sr(t,e,i,n,r,a,o,s){var l=mr,h=pr,u=Cm(Tm(l(t,i,r),1),0),c=Cm(Tm(l(e,n,a),1),0),d=h(t,i,r,u),f=h(e,n,a,c);o[0]=Tm(t,r,d),o[1]=Tm(e,a,f),s[0]=Cm(t,r,d),s[1]=Cm(e,a,f)}function Mr(t,e,i,n,r,a,o,s,l){var h=oe,u=se,c=Math.abs(r-a);if(1e-4>c%km&&c>1e-4)return s[0]=t-i,s[1]=e-n,l[0]=t+i,void(l[1]=e+n);if(Pm[0]=Dm(r)*i+t,Pm[1]=Am(r)*n+e,Lm[0]=Dm(a)*i+t,Lm[1]=Am(a)*n+e,h(s,Pm,Lm),u(l,Pm,Lm),r%=km,0>r&&(r+=km),a%=km,0>a&&(a+=km),r>a&&!o?a+=km:a>r&&o&&(r+=km),o){var d=a;a=r,r=d}for(var f=0;a>f;f+=Math.PI/2)f>r&&(Om[0]=Dm(f)*i+t,Om[1]=Am(f)*n+e,h(s,Om,s),u(l,Om,l))}function Ir(t,e,i,n,r,a,o){if(0===r)return!1;var s=r,l=0,h=t;if(o>e+s&&o>n+s||e-s>o&&n-s>o||a>t+s&&a>i+s||t-s>a&&i-s>a)return!1;if(t===i)return Math.abs(a-t)<=s/2;l=(e-n)/(t-i),h=(t*n-i*e)/(t-i);var u=l*a-o+h,c=u*u/(l*l+1);return s/2*s/2>=c}function Tr(t,e,i,n,r,a,o,s,l,h,u){if(0===l)return!1;var c=l;if(u>e+c&&u>n+c&&u>a+c&&u>s+c||e-c>u&&n-c>u&&a-c>u&&s-c>u||h>t+c&&h>i+c&&h>r+c&&h>o+c||t-c>h&&i-c>h&&r-c>h&&o-c>h)return!1;var d=fr(t,e,i,n,r,a,o,s,h,u,null);return c/2>=d}function Cr(t,e,i,n,r,a,o,s,l){if(0===o)return!1;var h=o;if(l>e+h&&l>n+h&&l>a+h||e-h>l&&n-h>l&&a-h>l||s>t+h&&s>i+h&&s>r+h||t-h>s&&i-h>s&&r-h>s)return!1;var u=xr(t,e,i,n,r,a,s,l,null);return h/2>=u}function Ar(t){return t%=Um,0>t&&(t+=Um),t}function Dr(t,e,i,n,r,a,o,s,l){if(0===o)return!1;var h=o;s-=t,l-=e;var u=Math.sqrt(s*s+l*l);if(u-h>i||i>u+h)return!1;if(Math.abs(n-r)%$m<1e-4)return!0;if(a){var c=n;n=Ar(r),r=Ar(c)}else n=Ar(n),r=Ar(r);n>r&&(r+=$m);var d=Math.atan2(l,s);return 0>d&&(d+=$m),d>=n&&r>=d||d+$m>=n&&r>=d+$m}function kr(t,e,i,n,r,a){if(a>e&&a>n||e>a&&n>a)return 0;if(n===e)return 0;var o=e>n?1:-1,s=(a-e)/(n-e);(1===s||0===s)&&(o=e>n?.5:-.5);var l=s*(i-t)+t;return l===r?1/0:l>r?o:0}function Pr(t,e){return Math.abs(t-e)e&&h>n&&h>a&&h>s||e>h&&n>h&&a>h&&s>h)return 0;var u=ur(e,n,a,s,h,ty);if(0===u)return 0;for(var c,d,f=0,p=-1,g=0;u>g;g++){var v=ty[g],m=0===v||1===v?.5:1,y=lr(t,i,r,o,v);l>y||(0>p&&(p=cr(e,n,a,s,ey),ey[1]1&&Lr(),c=lr(e,n,a,s,ey[0]),p>1&&(d=lr(e,n,a,s,ey[1]))),f+=2==p?vc?m:-m:vd?m:-m:d>s?m:-m:vc?m:-m:c>s?m:-m)}return f}function zr(t,e,i,n,r,a,o,s){if(s>e&&s>n&&s>a||e>s&&n>s&&a>s)return 0;var l=vr(e,n,a,s,ty);if(0===l)return 0;var h=mr(e,n,a);if(h>=0&&1>=h){for(var u=0,c=pr(e,n,a,h),d=0;l>d;d++){var f=0===ty[d]||1===ty[d]?.5:1,p=pr(t,i,r,ty[d]);o>p||(u+=ty[d]c?f:-f:c>a?f:-f)}return u}var f=0===ty[0]||1===ty[0]?.5:1,p=pr(t,i,r,ty[0]);return o>p?0:e>a?f:-f}function Er(t,e,i,n,r,a,o,s){if(s-=e,s>i||-i>s)return 0;var l=Math.sqrt(i*i-s*s);ty[0]=-l,ty[1]=l;var h=Math.abs(n-r);if(1e-4>h)return 0;if(1e-4>h%Qm){n=0,r=Qm;var u=a?1:-1;return o>=ty[0]+t&&o<=ty[1]+t?u:0}if(a){var l=n;n=Ar(r),r=Ar(l)}else n=Ar(n),r=Ar(r);n>r&&(r+=Qm);for(var c=0,d=0;2>d;d++){var f=ty[d];if(f+t>o){var p=Math.atan2(s,f),u=a?1:-1;0>p&&(p=Qm+p),(p>=n&&r>=p||p+Qm>=n&&r>=p+Qm)&&(p>Math.PI/2&&p<1.5*Math.PI&&(u=-u),c+=u)}}return c}function Rr(t,e,i,n,r){for(var a=0,o=0,s=0,l=0,h=0,u=0;u1&&(i||(a+=kr(o,s,l,h,n,r))),1==u&&(o=t[u],s=t[u+1],l=o,h=s),c){case Km.M:l=t[u++],h=t[u++],o=l,s=h;break;case Km.L:if(i){if(Ir(o,s,t[u],t[u+1],e,n,r))return!0}else a+=kr(o,s,t[u],t[u+1],n,r)||0;o=t[u++],s=t[u++];break;case Km.C:if(i){if(Tr(o,s,t[u++],t[u++],t[u++],t[u++],t[u],t[u+1],e,n,r))return!0}else a+=Or(o,s,t[u++],t[u++],t[u++],t[u++],t[u],t[u+1],n,r)||0;o=t[u++],s=t[u++];break;case Km.Q:if(i){if(Cr(o,s,t[u++],t[u++],t[u],t[u+1],e,n,r))return!0}else a+=zr(o,s,t[u++],t[u++],t[u],t[u+1],n,r)||0;o=t[u++],s=t[u++];break;case Km.A:var d=t[u++],f=t[u++],p=t[u++],g=t[u++],v=t[u++],m=t[u++],y=(t[u++],1-t[u++]),x=Math.cos(v)*p+d,_=Math.sin(v)*g+f;u>1?a+=kr(o,s,x,_,n,r):(l=x,h=_);var w=(n-d)*g/p+d;if(i){if(Dr(d,f,g,v,v+m,y,e,w,r))return!0}else a+=Er(d,f,g,v,v+m,y,w,r);o=Math.cos(v+m)*p+d,s=Math.sin(v+m)*g+f;break;case Km.R:l=o=t[u++],h=s=t[u++];var b=t[u++],S=t[u++],x=l+b,_=h+S;if(i){if(Ir(l,h,x,h,e,n,r)||Ir(x,h,x,_,e,n,r)||Ir(x,_,l,_,e,n,r)||Ir(l,_,l,h,e,n,r))return!0}else a+=kr(x,h,x,_,n,r),a+=kr(l,_,l,h,n,r);break;case Km.Z:if(i){if(Ir(o,s,l,h,e,n,r))return!0}else a+=kr(o,s,l,h,n,r);o=l,s=h}}return i||Pr(s,h)||(a+=kr(o,s,l,h,n,r)||0),0!==a}function Br(t,e,i){return Rr(t,0,!1,e,i)}function Nr(t,e,i,n){return Rr(t,e,!0,i,n)}function Fr(t){mn.call(this,t),this.path=null}function Vr(t,e,i,n,r,a,o,s,l,h,u){var c=l*(fy/180),d=dy(c)*(t-i)/2+cy(c)*(e-n)/2,f=-1*cy(c)*(t-i)/2+dy(c)*(e-n)/2,p=d*d/(o*o)+f*f/(s*s);p>1&&(o*=uy(p),s*=uy(p));var g=(r===a?-1:1)*uy((o*o*s*s-o*o*f*f-s*s*d*d)/(o*o*f*f+s*s*d*d))||0,v=g*o*f/s,m=g*-s*d/o,y=(t+i)/2+dy(c)*v-cy(c)*m,x=(e+n)/2+cy(c)*v+dy(c)*m,_=vy([1,0],[(d-v)/o,(f-m)/s]),w=[(d-v)/o,(f-m)/s],b=[(-1*d-v)/o,(-1*f-m)/s],S=vy(w,b);gy(w,b)<=-1&&(S=fy),gy(w,b)>=1&&(S=0),0===a&&S>0&&(S-=2*fy),1===a&&0>S&&(S+=2*fy),u.addData(h,y,x,o,s,_,S,c,a)}function Wr(t){if(!t)return new qm;for(var e,i=0,n=0,r=i,a=n,o=new qm,s=qm.CMD,l=t.match(my),h=0;hg;g++)f[g]=parseFloat(f[g]);for(var v=0;p>v;){var m,y,x,_,w,b,S,M=i,I=n;switch(d){case"l":i+=f[v++],n+=f[v++],u=s.L,o.addData(u,i,n);break;case"L":i=f[v++],n=f[v++],u=s.L,o.addData(u,i,n);break;case"m":i+=f[v++],n+=f[v++],u=s.M,o.addData(u,i,n),r=i,a=n,d="l";break;case"M":i=f[v++],n=f[v++],u=s.M,o.addData(u,i,n),r=i,a=n,d="L";break;case"h":i+=f[v++],u=s.L,o.addData(u,i,n);break;case"H":i=f[v++],u=s.L,o.addData(u,i,n);break;case"v":n+=f[v++],u=s.L,o.addData(u,i,n);break;case"V":n=f[v++],u=s.L,o.addData(u,i,n);break;case"C":u=s.C,o.addData(u,f[v++],f[v++],f[v++],f[v++],f[v++],f[v++]),i=f[v-2],n=f[v-1];break;case"c":u=s.C,o.addData(u,f[v++]+i,f[v++]+n,f[v++]+i,f[v++]+n,f[v++]+i,f[v++]+n),i+=f[v-2],n+=f[v-1];break;case"S":m=i,y=n;var T=o.len(),C=o.data;e===s.C&&(m+=i-C[T-4],y+=n-C[T-3]),u=s.C,M=f[v++],I=f[v++],i=f[v++],n=f[v++],o.addData(u,m,y,M,I,i,n);break;case"s":m=i,y=n;var T=o.len(),C=o.data;e===s.C&&(m+=i-C[T-4],y+=n-C[T-3]),u=s.C,M=i+f[v++],I=n+f[v++],i+=f[v++],n+=f[v++],o.addData(u,m,y,M,I,i,n);break;case"Q":M=f[v++],I=f[v++],i=f[v++],n=f[v++],u=s.Q,o.addData(u,M,I,i,n);break;case"q":M=f[v++]+i,I=f[v++]+n,i+=f[v++],n+=f[v++],u=s.Q,o.addData(u,M,I,i,n);break;case"T":m=i,y=n;var T=o.len(),C=o.data;e===s.Q&&(m+=i-C[T-4],y+=n-C[T-3]),i=f[v++],n=f[v++],u=s.Q,o.addData(u,m,y,i,n);break;case"t":m=i,y=n;var T=o.len(),C=o.data;e===s.Q&&(m+=i-C[T-4],y+=n-C[T-3]),i+=f[v++],n+=f[v++],u=s.Q,o.addData(u,m,y,i,n);break;case"A":x=f[v++],_=f[v++],w=f[v++],b=f[v++],S=f[v++],M=i,I=n,i=f[v++],n=f[v++],u=s.A,Vr(M,I,i,n,b,S,x,_,w,u,o);break;case"a":x=f[v++],_=f[v++],w=f[v++],b=f[v++],S=f[v++],M=i,I=n,i+=f[v++],n+=f[v++],u=s.A,Vr(M,I,i,n,b,S,x,_,w,u,o)}}("z"===d||"Z"===d)&&(u=s.Z,o.addData(u),i=r,n=a),e=u}return o.toStatic(),o}function Gr(t,e){var i=Wr(t);return e=e||{},e.buildPath=function(t){if(t.setData){t.setData(i.data);var e=t.getContext();e&&t.rebuildPath(e)}else{var e=t;i.rebuildPath(e)}},e.applyTransform=function(t){hy(i,t),this.dirty(!0)},e}function Hr(t,e){return new Fr(Gr(t,e))}function Zr(t,e){return Fr.extend(Gr(t,e))}function Xr(t,e){for(var i=[],n=t.length,r=0;n>r;r++){var a=t[r];a.path||a.createPathProxy(),a.__dirtyPath&&a.buildPath(a.path,a.shape,!0),i.push(a.path)}var o=new Fr(e);return o.createPathProxy(),o.buildPath=function(t){t.appendPath(i);var e=t.getContext();e&&t.rebuildPath(e)},o}function Yr(t,e,i,n,r,a,o){var s=.5*(i-t),l=.5*(n-e);return(2*(e-i)+s+l)*o+(-3*(e-i)-2*s-l)*a+s*r+e}function jr(t,e,i){var n=e.points,r=e.smooth;if(n&&n.length>=2){if(r&&"spline"!==r){var a=Ty(n,r,i,e.smoothConstraint);t.moveTo(n[0][0],n[0][1]);for(var o=n.length,s=0;(i?o:o-1)>s;s++){var l=a[2*s],h=a[2*s+1],u=n[(s+1)%o];t.bezierCurveTo(l[0],l[1],h[0],h[1],u[0],u[1])}}else{"spline"===r&&(n=Iy(n,i)),t.moveTo(n[0][0],n[0][1]);for(var s=1,c=n.length;c>s;s++)t.lineTo(n[s][0],n[s][1])}i&&t.closePath()}}function qr(t,e,i){var n=t.cpx2,r=t.cpy2;return null===n||null===r?[(i?hr:lr)(t.x1,t.cpx1,t.cpx2,t.x2,e),(i?hr:lr)(t.y1,t.cpy1,t.cpy2,t.y2,e)]:[(i?gr:pr)(t.x1,t.cpx1,t.x2,e),(i?gr:pr)(t.y1,t.cpy1,t.y2,e)]}function Ur(t){mn.call(this,t),this._displayables=[],this._temporaryDisplayables=[],this._cursor=0,this.notClear=!0}function $r(t){return Fr.extend(t)}function Kr(t,e){return Zr(t,e)}function Qr(t,e,i,n){var r=Hr(t,e);return i&&("center"===n&&(i=ta(i,r.getBoundingRect())),ea(r,i)),r}function Jr(t,e,i){var n=new yn({style:{image:t,x:e.x,y:e.y,width:e.width,height:e.height},onload:function(t){if("center"===i){var r={width:t.width,height:t.height};n.setStyle(ta(e,r))}}});return n}function ta(t,e){var i,n=e.width/e.height,r=t.height*n;r<=t.width?i=t.height:(r=t.width,i=r/n);var a=t.x+t.width/2,o=t.y+t.height/2;return{x:a-r/2,y:o-i/2,width:r,height:i}}function ea(t,e){if(t.applyTransform){var i=t.getBoundingRect(),n=i.calculateTransform(e);t.applyTransform(n)}}function ia(t){var e=t.shape,i=t.style.lineWidth;return Fy(2*e.x1)===Fy(2*e.x2)&&(e.x1=e.x2=ra(e.x1,i,!0)),Fy(2*e.y1)===Fy(2*e.y2)&&(e.y1=e.y2=ra(e.y1,i,!0)),t}function na(t){var e=t.shape,i=t.style.lineWidth,n=e.x,r=e.y,a=e.width,o=e.height;return e.x=ra(e.x,i,!0),e.y=ra(e.y,i,!0),e.width=Math.max(ra(n+a,i,!1)-e.x,0===a?0:1),e.height=Math.max(ra(r+o,i,!1)-e.y,0===o?0:1),t}function ra(t,e,i){var n=Fy(2*t);return(n+Fy(e))%2===0?n/2:(n+(i?1:-1))/2}function aa(t){return null!=t&&"none"!==t}function oa(t){if("string"!=typeof t)return t;var e=Zy.get(t);return e||(e=Ye(t,-.1),1e4>Xy&&(Zy.set(t,e),Xy++)),e}function sa(t){if(t.__hoverStlDirty){t.__hoverStlDirty=!1;var e=t.__hoverStl;if(!e)return void(t.__normalStl=null);var i=t.__normalStl={},n=t.style;for(var r in e)null!=e[r]&&(i[r]=n[r]);i.fill=n.fill,i.stroke=n.stroke}}function la(t){var e=t.__hoverStl;if(e&&!t.__highlighted){var i=t.useHoverLayer;t.__highlighted=i?"layer":"plain";var n=t.__zr;if(n||!i){var r=t,a=t.style;i&&(r=n.addHover(t),a=r.style),Da(a),i||sa(r),a.extendFrom(e),ha(a,e,"fill"),ha(a,e,"stroke"),Aa(a),i||(t.dirty(!1),t.z2+=1)}}}function ha(t,e,i){!aa(e[i])&&aa(t[i])&&(t[i]=oa(t[i]))}function ua(t){t.__highlighted&&(ca(t),t.__highlighted=!1)}function ca(t){var e=t.__highlighted;if("layer"===e)t.__zr&&t.__zr.removeHover(t);else if(e){var i=t.style,n=t.__normalStl;n&&(Da(i),t.setStyle(n),Aa(i),t.z2-=1)}}function da(t,e){t.isGroup?t.traverse(function(t){!t.isGroup&&e(t)}):e(t)}function fa(t,e){e=t.__hoverStl=e!==!1&&(e||{}),t.__hoverStlDirty=!0,t.__highlighted&&(ua(t),la(t))}function pa(t){return t&&t.__isEmphasisEntered}function ga(t){this.__hoverSilentOnTouch&&t.zrByTouch||!this.__isEmphasisEntered&&da(this,la)}function va(t){this.__hoverSilentOnTouch&&t.zrByTouch||!this.__isEmphasisEntered&&da(this,ua)}function ma(){this.__isEmphasisEntered=!0,da(this,la)}function ya(){this.__isEmphasisEntered=!1,da(this,ua)}function xa(t,e,i){t.isGroup?t.traverse(function(t){!t.isGroup&&fa(t,t.hoverStyle||e)}):fa(t,t.hoverStyle||e),_a(t,i)}function _a(t,e){var i=e===!1;if(t.__hoverSilentOnTouch=null!=e&&e.hoverSilentOnTouch,!i||t.__hoverStyleTrigger){var n=i?"off":"on";t[n]("mouseover",ga)[n]("mouseout",va),t[n]("emphasis",ma)[n]("normal",ya),t.__hoverStyleTrigger=!i}}function wa(t,e,i,n,r,a,o){r=r||Gy;var s,l=r.labelFetcher,h=r.labelDataIndex,u=r.labelDimIndex,c=i.getShallow("show"),d=n.getShallow("show");(c||d)&&(l&&(s=l.getFormattedLabel(h,"normal",null,u)),null==s&&(s=w(r.defaultText)?r.defaultText(h,r):r.defaultText));var f=c?s:null,p=d?D(l?l.getFormattedLabel(h,"emphasis",null,u):null,s):null;(null!=f||null!=p)&&(ba(t,i,a,r),ba(e,n,o,r,!0)),t.text=f,e.text=p}function ba(t,e,i,n,r){return Ma(t,e,n,r),i&&o(t,i),t}function Sa(t,e,i){var n,r={isRectText:!0};i===!1?n=!0:r.autoColor=i,Ma(t,e,r,n)}function Ma(t,e,i,n){if(i=i||Gy,i.isRectText){var r=e.getShallow("position")||(n?null:"inside");"outside"===r&&(r="top"),t.textPosition=r,t.textOffset=e.getShallow("offset");var a=e.getShallow("rotate");null!=a&&(a*=Math.PI/180),t.textRotation=a,t.textDistance=D(e.getShallow("distance"),n?null:5)}var o,s=e.ecModel,l=s&&s.option.textStyle,h=Ia(e);if(h){o={};for(var u in h)if(h.hasOwnProperty(u)){var c=e.getModel(["rich",u]);Ta(o[u]={},c,l,i,n)}}return t.rich=o,Ta(t,e,l,i,n,!0),i.forceRich&&!i.textStyle&&(i.textStyle={}),t}function Ia(t){for(var e;t&&t!==t.ecModel;){var i=(t.option||Gy).rich;if(i){e=e||{};for(var n in i)i.hasOwnProperty(n)&&(e[n]=1)}t=t.parentModel}return e}function Ta(t,e,i,n,r,a){i=!r&&i||Gy,t.textFill=Ca(e.getShallow("color"),n)||i.color,t.textStroke=Ca(e.getShallow("textBorderColor"),n)||i.textBorderColor,t.textStrokeWidth=D(e.getShallow("textBorderWidth"),i.textBorderWidth),t.insideRawTextPosition=t.textPosition,r||(a&&(t.insideRollbackOpt=n,Aa(t)),null==t.textFill&&(t.textFill=n.autoColor)),t.fontStyle=e.getShallow("fontStyle")||i.fontStyle,t.fontWeight=e.getShallow("fontWeight")||i.fontWeight,t.fontSize=e.getShallow("fontSize")||i.fontSize,t.fontFamily=e.getShallow("fontFamily")||i.fontFamily,t.textAlign=e.getShallow("align"),t.textVerticalAlign=e.getShallow("verticalAlign")||e.getShallow("baseline"),t.textLineHeight=e.getShallow("lineHeight"),t.textWidth=e.getShallow("width"),t.textHeight=e.getShallow("height"),t.textTag=e.getShallow("tag"),a&&n.disableBox||(t.textBackgroundColor=Ca(e.getShallow("backgroundColor"),n),t.textPadding=e.getShallow("padding"),t.textBorderColor=Ca(e.getShallow("borderColor"),n),t.textBorderWidth=e.getShallow("borderWidth"),t.textBorderRadius=e.getShallow("borderRadius"),t.textBoxShadowColor=e.getShallow("shadowColor"),t.textBoxShadowBlur=e.getShallow("shadowBlur"),t.textBoxShadowOffsetX=e.getShallow("shadowOffsetX"),t.textBoxShadowOffsetY=e.getShallow("shadowOffsetY")),t.textShadowColor=e.getShallow("textShadowColor")||i.textShadowColor,t.textShadowBlur=e.getShallow("textShadowBlur")||i.textShadowBlur,t.textShadowOffsetX=e.getShallow("textShadowOffsetX")||i.textShadowOffsetX,t.textShadowOffsetY=e.getShallow("textShadowOffsetY")||i.textShadowOffsetY}function Ca(t,e){return"auto"!==t?t:e&&e.autoColor?e.autoColor:null}function Aa(t){var e=t.insideRollbackOpt;if(e&&null==t.textFill){var i,n=e.useInsideStyle,r=t.insideRawTextPosition,a=e.autoColor;n!==!1&&(n===!0||e.isRectText&&r&&"string"==typeof r&&r.indexOf("inside")>=0)?(i={textFill:null,textStroke:t.textStroke,textStrokeWidth:t.textStrokeWidth},t.textFill="#fff",null==t.textStroke&&(t.textStroke=a,null==t.textStrokeWidth&&(t.textStrokeWidth=2))):null!=a&&(i={textFill:null},t.textFill=a),i&&(t.insideRollback=i)}}function Da(t){var e=t.insideRollback;e&&(t.textFill=e.textFill,t.textStroke=e.textStroke,t.textStrokeWidth=e.textStrokeWidth,t.insideRollback=null)}function ka(t,e){var i=e||e.getModel("textStyle");return z([t.fontStyle||i&&i.getShallow("fontStyle")||"",t.fontWeight||i&&i.getShallow("fontWeight")||"",(t.fontSize||i&&i.getShallow("fontSize")||12)+"px",t.fontFamily||i&&i.getShallow("fontFamily")||"sans-serif"].join(" "))}function Pa(t,e,i,n,r,a){"function"==typeof r&&(a=r,r=null);var o=n&&n.isAnimationEnabled();if(o){var s=t?"Update":"",l=n.getShallow("animationDuration"+s),h=n.getShallow("animationEasing"+s),u=n.getShallow("animationDelay"+s);"function"==typeof u&&(u=u(r,n.getAnimationDelayParams?n.getAnimationDelayParams(e,r):null)),"function"==typeof l&&(l=l(r)),l>0?e.animateTo(i,l,u||0,h,a,!!a):(e.stopAnimation(),e.attr(i),a&&a())}else e.stopAnimation(),e.attr(i),a&&a()}function La(t,e,i,n,r){Pa(!0,t,e,i,n,r)}function Oa(t,e,i,n,r){Pa(!1,t,e,i,n,r)}function za(t,e){for(var i=Se([]);t&&t!==e;)Ie(i,t.getLocalTransform(),i),t=t.parent;return i}function Ea(t,e,i){return e&&!d(e)&&(e=Og.getLocalTransform(e)),i&&(e=De([],e)),ae([],t,e)}function Ra(t,e,i){var n=0===e[4]||0===e[5]||0===e[0]?1:Math.abs(2*e[4]/e[0]),r=0===e[4]||0===e[5]||0===e[2]?1:Math.abs(2*e[4]/e[2]),a=["left"===t?-n:"right"===t?n:0,"top"===t?-r:"bottom"===t?r:0];return a=Ea(a,e,i),Math.abs(a[0])>Math.abs(a[1])?a[0]>0?"right":"left":a[1]>0?"bottom":"top"}function Ba(t,e,i){function n(t){var e={};return t.traverse(function(t){!t.isGroup&&t.anid&&(e[t.anid]=t)}),e}function r(t){var e={position:H(t.position),rotation:t.rotation};return t.shape&&(e.shape=o({},t.shape)),e}if(t&&e){var a=n(t);e.traverse(function(t){if(!t.isGroup&&t.anid){var e=a[t.anid];if(e){var n=r(t);t.attr(r(e)),La(t,n,i,t.dataIndex)}}})}}function Na(t,e){return p(t,function(t){var i=t[0];i=Vy(i,e.x),i=Wy(i,e.x+e.width);var n=t[1];return n=Vy(n,e.y),n=Wy(n,e.y+e.height),[i,n]})}function Fa(t,e){var i=Vy(t.x,e.x),n=Wy(t.x+t.width,e.x+e.width),r=Vy(t.y,e.y),a=Wy(t.y+t.height,e.y+e.height);return n>=i&&a>=r?{x:i,y:r,width:n-i,height:a-r}:void 0}function Va(t,e,i){e=o({rectHover:!0},e);var n=e.style={strokeNoScale:!0};return i=i||{x:-1,y:-1,width:2,height:2},t?0===t.indexOf("image://")?(n.image=t.slice(8),s(n,i),new yn(e)):Qr(t.replace("path://",""),e,i,"center"):void 0}function Wa(t,e,i){this.parentModel=e,this.ecModel=i,this.option=t}function Ga(t,e,i){for(var n=0;n=0&&i.push(t)}),i}t.topologicalTravel=function(t,e,n,r){function a(t){l[t].entryCount--,0===l[t].entryCount&&h.push(t)}function o(t){u[t]=!0,a(t)}if(t.length){var s=i(e),l=s.graph,h=s.noEntryList,u={};for(f(t,function(t){u[t]=!0});h.length;){var c=h.pop(),d=l[c],p=!!u[c];p&&(n.call(r,c,d.originalDeps.slice()),delete u[c]),f(d.successor,p?o:a)}f(u,function(){throw new Error("Circle dependency may exists")})}}}function ja(t){return t.replace(/^\s+/,"").replace(/\s+$/,"")}function qa(t,e,i,n){var r=e[1]-e[0],a=i[1]-i[0];if(0===r)return 0===a?i[0]:(i[0]+i[1])/2;if(n)if(r>0){if(t<=e[0])return i[0];if(t>=e[1])return i[1]}else{if(t>=e[0])return i[0];if(t<=e[1])return i[1]}else{if(t===e[0])return i[0];if(t===e[1])return i[1]}return(t-e[0])/r*a+i[0]}function Ua(t,e){switch(t){case"center":case"middle":t="50%";break;case"left":case"top":t="0%";break;case"right":case"bottom":t="100%"}return"string"==typeof t?ja(t).match(/%$/)?parseFloat(t)/100*e:parseFloat(t):null==t?0/0:+t}function $a(t,e,i){return null==e&&(e=10),e=Math.min(Math.max(0,e),20),t=(+t).toFixed(e),i?t:+t}function Ka(t){return t.sort(function(t,e){return t-e}),t}function Qa(t){if(t=+t,isNaN(t))return 0;for(var e=1,i=0;Math.round(t*e)/e!==t;)e*=10,i++;return i}function Ja(t){var e=t.toString(),i=e.indexOf("e");if(i>0){var n=+e.slice(i+1);return 0>n?-n:0}var r=e.indexOf(".");return 0>r?0:e.length-1-r}function to(t,e){var i=Math.log,n=Math.LN10,r=Math.floor(i(t[1]-t[0])/n),a=Math.round(i(Math.abs(e[1]-e[0]))/n),o=Math.min(Math.max(-r+a,0),20);return isFinite(o)?o:20}function eo(t,e,i){if(!t[e])return 0;var n=g(t,function(t,e){return t+(isNaN(e)?0:e)},0);if(0===n)return 0;for(var r=Math.pow(10,i),a=p(t,function(t){return(isNaN(t)?0:t)/n*r*100}),o=100*r,s=p(a,function(t){return Math.floor(t)}),l=g(s,function(t,e){return t+e},0),h=p(a,function(t,e){return t-s[e]});o>l;){for(var u=Number.NEGATIVE_INFINITY,c=null,d=0,f=h.length;f>d;++d)h[d]>u&&(u=h[d],c=d);++s[c],h[c]=0,++l}return s[e]/r}function io(t){var e=2*Math.PI;return(t%e+e)%e}function no(t){return t>-tx&&tx>t}function ro(t){if(t instanceof Date)return t;if("string"==typeof t){var e=ix.exec(t);if(!e)return new Date(0/0);if(e[8]){var i=+e[4]||0;return"Z"!==e[8].toUpperCase()&&(i-=e[8].slice(0,3)),new Date(Date.UTC(+e[1],+(e[2]||1)-1,+e[3]||1,i,+(e[5]||0),+e[6]||0,+e[7]||0))}return new Date(+e[1],+(e[2]||1)-1,+e[3]||1,+e[4]||0,+(e[5]||0),+e[6]||0,+e[7]||0)}return new Date(null==t?0/0:Math.round(t))}function ao(t){return Math.pow(10,oo(t))}function oo(t){return Math.floor(Math.log(t)/Math.LN10)}function so(t,e){var i,n=oo(t),r=Math.pow(10,n),a=t/r;return i=e?1.5>a?1:2.5>a?2:4>a?3:7>a?5:10:1>a?1:2>a?2:3>a?3:5>a?5:10,t=i*r,n>=-20?+t.toFixed(0>n?-n:0):t}function lo(t,e){var i=(t.length-1)*e+1,n=Math.floor(i),r=+t[n-1],a=i-n;return a?r+a*(t[n]-r):r}function ho(t){function e(t,i,n){return t.interval[n]s;s++)a[s]<=i&&(a[s]=i,o[s]=s?1:1-n),i=a[s],n=o[s];a[0]===a[1]&&o[0]*o[1]!==1?t.splice(r,1):r++}return t}function uo(t){return t-parseFloat(t)>=0}function co(t){return isNaN(t)?"-":(t=(t+"").split("."),t[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g,"$1,")+(t.length>1?"."+t[1]:""))}function fo(t,e){return t=(t||"").toLowerCase().replace(/-(.)/g,function(t,e){return e.toUpperCase()}),e&&t&&(t=t.charAt(0).toUpperCase()+t.slice(1)),t}function po(t){return null==t?"":(t+"").replace(ax,function(t,e){return ox[e]})}function go(t,e,i){_(e)||(e=[e]);var n=e.length;if(!n)return"";for(var r=e[0].$vars||[],a=0;as;s++)for(var l=0;l':'':{renderMode:r,content:"{marker"+a+"|} ",style:{color:i}}:"" -}function yo(t,e){return t+="","0000".substr(0,e-t.length)+t}function xo(t,e,i){("week"===t||"month"===t||"quarter"===t||"half-year"===t||"year"===t)&&(t="MM-dd\nyyyy");var n=ro(e),r=i?"UTC":"",a=n["get"+r+"FullYear"](),o=n["get"+r+"Month"]()+1,s=n["get"+r+"Date"](),l=n["get"+r+"Hours"](),h=n["get"+r+"Minutes"](),u=n["get"+r+"Seconds"](),c=n["get"+r+"Milliseconds"]();return t=t.replace("MM",yo(o,2)).replace("M",o).replace("yyyy",a).replace("yy",a%100).replace("dd",yo(s,2)).replace("d",s).replace("hh",yo(l,2)).replace("h",l).replace("mm",yo(h,2)).replace("m",h).replace("ss",yo(u,2)).replace("s",u).replace("SSS",yo(c,3))}function _o(t){return t?t.charAt(0).toUpperCase()+t.substr(1):t}function wo(t,e,i,n,r){var a=0,o=0;null==n&&(n=1/0),null==r&&(r=1/0);var s=0;e.eachChild(function(l,h){var u,c,d=l.position,f=l.getBoundingRect(),p=e.childAt(h+1),g=p&&p.getBoundingRect();if("horizontal"===t){var v=f.width+(g?-g.x+f.x:0);u=a+v,u>n||l.newline?(a=0,u=v,o+=s+i,s=f.height):s=Math.max(s,f.height)}else{var m=f.height+(g?-g.y+f.y:0);c=o+m,c>r||l.newline?(a+=s+i,o=0,c=m,s=f.width):s=Math.max(s,f.width)}l.newline||(d[0]=a,d[1]=o,"horizontal"===t?a=u+i:o=c+i)})}function bo(t,e,i){i=rx(i||0);var n=e.width,r=e.height,a=Ua(t.left,n),o=Ua(t.top,r),s=Ua(t.right,n),l=Ua(t.bottom,r),h=Ua(t.width,n),u=Ua(t.height,r),c=i[2]+i[0],d=i[1]+i[3],f=t.aspect;switch(isNaN(h)&&(h=n-s-d-a),isNaN(u)&&(u=r-l-c-o),null!=f&&(isNaN(h)&&isNaN(u)&&(f>n/r?h=.8*n:u=.8*r),isNaN(h)&&(h=f*u),isNaN(u)&&(u=h/f)),isNaN(a)&&(a=n-s-h-d),isNaN(o)&&(o=r-l-u-c),t.left||t.right){case"center":a=n/2-h/2-i[3];break;case"right":a=n-h-d}switch(t.top||t.bottom){case"middle":case"center":o=r/2-u/2-i[0];break;case"bottom":o=r-u-c}a=a||0,o=o||0,isNaN(h)&&(h=n-d-a-(s||0)),isNaN(u)&&(u=r-c-o-(l||0));var p=new gi(a+i[3],o+i[0],h,u);return p.margin=i,p}function So(t,e,i){function n(i,n){var o={},l=0,h={},u=0,c=2;if(dx(i,function(e){h[e]=t[e]}),dx(i,function(t){r(e,t)&&(o[t]=h[t]=e[t]),a(o,t)&&l++,a(h,t)&&u++}),s[n])return a(e,i[1])?h[i[2]]=null:a(e,i[2])&&(h[i[1]]=null),h;if(u!==c&&l){if(l>=c)return o;for(var d=0;dn;n++)if(t[n].length>e)return t[n];return t[i-1]}function Ao(t){var e=t.get("coordinateSystem"),i={coordSysName:e,coordSysDims:[],axisMap:N(),categoryAxisMap:N()},n=Mx[e];return n?(n(t,i,i.axisMap,i.categoryAxisMap),i):void 0}function Do(t){return"category"===t.get("type")}function ko(t){this.fromDataset=t.fromDataset,this.data=t.data||(t.sourceFormat===Ax?{}:[]),this.sourceFormat=t.sourceFormat||Dx,this.seriesLayoutBy=t.seriesLayoutBy||Px,this.dimensionsDefine=t.dimensionsDefine,this.encodeDefine=t.encodeDefine&&N(t.encodeDefine),this.startIndex=t.startIndex||0,this.dimensionsDetectCount=t.dimensionsDetectCount}function Po(t){var e=t.option.source,i=Dx;if(I(e))i=kx;else if(_(e)){0===e.length&&(i=Tx);for(var n=0,r=e.length;r>n;n++){var a=e[n];if(null!=a){if(_(a)){i=Tx;break}if(S(a)){i=Cx;break}}}}else if(S(e)){for(var o in e)if(e.hasOwnProperty(o)&&d(e[o])){i=Ax;break}}else if(null!=e)throw new Error("Invalid data");Ox(t).sourceFormat=i}function Lo(t){return Ox(t).source}function Oo(t){Ox(t).datasetMap=N()}function zo(t){var e=t.option,i=e.data,n=I(i)?kx:Ix,r=!1,a=e.seriesLayoutBy,o=e.sourceHeader,s=e.dimensions,l=Vo(t);if(l){var h=l.option;i=h.source,n=Ox(l).sourceFormat,r=!0,a=a||h.seriesLayoutBy,null==o&&(o=h.sourceHeader),s=s||h.dimensions}var u=Eo(i,n,a,o,s),c=e.encode;!c&&l&&(c=Fo(t,l,i,n,a,u)),Ox(t).source=new ko({data:i,fromDataset:r,seriesLayoutBy:a,sourceFormat:n,dimensionsDefine:u.dimensionsDefine,startIndex:u.startIndex,dimensionsDetectCount:u.dimensionsDetectCount,encodeDefine:c})}function Eo(t,e,i,n,r){if(!t)return{dimensionsDefine:Ro(r)};var a,o,s;if(e===Tx)"auto"===n||null==n?Bo(function(t){null!=t&&"-"!==t&&(b(t)?null==o&&(o=1):o=0)},i,t,10):o=n?1:0,r||1!==o||(r=[],Bo(function(t,e){r[e]=null!=t?t:""},i,t)),a=r?r.length:i===Lx?t.length:t[0]?t[0].length:null;else if(e===Cx)r||(r=No(t),s=!0);else if(e===Ax)r||(r=[],s=!0,f(t,function(t,e){r.push(e)}));else if(e===Ix){var l=Vn(t[0]);a=_(l)&&l.length||1}var h;return s&&f(r,function(t,e){"name"===(S(t)?t.name:t)&&(h=e)}),{startIndex:o,dimensionsDefine:Ro(r),dimensionsDetectCount:a,potentialNameDimIndex:h}}function Ro(t){if(t){var e=N();return p(t,function(t){if(t=o({},S(t)?t:{name:t}),null==t.name)return t;t.name+="",null==t.displayName&&(t.displayName=t.name);var i=e.get(t.name);return i?t.name+="-"+i.count++:e.set(t.name,{count:1}),t})}}function Bo(t,e,i,n){if(null==n&&(n=1/0),e===Lx)for(var r=0;rr;r++)t(i[r]?i[r][0]:null,r);else for(var a=i[0]||[],r=0;rr;r++)t(a[r],r)}function No(t){for(var e,i=0;ix&&null==y;x++)Go(i,n,r,a.dimensionsDefine,a.startIndex,x)||(y=x);if(null!=y){s.value=y;var _=a.potentialNameDimIndex||Math.max(y-1,0);h.push(_),l.push(_)}}return l.length&&(s.itemName=l),h.length&&(s.seriesName=h),s}function Vo(t){var e=t.option,i=e.data;return i?void 0:t.ecModel.getComponent("dataset",e.datasetIndex||0)}function Wo(t,e){return Go(t.data,t.sourceFormat,t.seriesLayoutBy,t.dimensionsDefine,t.startIndex,e)}function Go(t,e,i,n,r,a){function o(t){return null!=t&&isFinite(t)&&""!==t?!1:b(t)&&"-"!==t?!0:void 0}var s,l=5;if(I(t))return!1;var h;if(n&&(h=n[a],h=S(h)?h.name:h),e===Tx)if(i===Lx){for(var u=t[a],c=0;c<(u||[]).length&&l>c;c++)if(null!=(s=o(u[r+c])))return s}else for(var c=0;cc;c++){var d=t[r+c];if(d&&null!=(s=o(d[a])))return s}else if(e===Cx){if(!h)return;for(var c=0;cc;c++){var f=t[c];if(f&&null!=(s=o(f[h])))return s}}else if(e===Ax){if(!h)return;var u=t[h];if(!u||I(u))return!1;for(var c=0;cc;c++)if(null!=(s=o(u[c])))return s}else if(e===Ix)for(var c=0;cc;c++){var f=t[c],p=Vn(f);if(!_(p))return!1;if(null!=(s=o(p[a])))return s}return!1}function Ho(t,e){if(e){var i=e.seiresIndex,n=e.seriesId,r=e.seriesName;return null!=i&&t.componentIndex!==i||null!=n&&t.id!==n||null!=r&&t.name!==r}}function Zo(t,e){var i=t.color&&!t.colorLayer;f(e,function(e,a){"colorLayer"===a&&i||yx.hasClass(a)||("object"==typeof e?t[a]=t[a]?r(t[a],e,!1):n(e):null==t[a]&&(t[a]=e))})}function Xo(t){t=t,this.option={},this.option[zx]=1,this._componentsMap=N({series:[]}),this._seriesIndices,this._seriesIndicesMap,Zo(t,this._theme.option),r(t,_x,!1),this.mergeOption(t)}function Yo(t,e){_(e)||(e=e?[e]:[]);var i={};return f(e,function(e){i[e]=(t.get(e)||[]).slice()}),i}function jo(t,e,i){var n=e.type?e.type:i?i.subType:yx.determineSubType(t,e);return n}function qo(t,e){t._seriesIndicesMap=N(t._seriesIndices=p(e,function(t){return t.componentIndex})||[])}function Uo(t,e){return e.hasOwnProperty("subType")?v(t,function(t){return t.subType===e.subType}):t}function $o(t){f(Rx,function(e){this[e]=y(t[e],t)},this)}function Ko(){this._coordinateSystems=[]}function Qo(t){this._api=t,this._timelineOptions=[],this._mediaList=[],this._mediaDefault,this._currentMediaIndices=[],this._optionBackup,this._newBaseOption}function Jo(t,e,i){var n,r,a=[],o=[],s=t.timeline;if(t.baseOption&&(r=t.baseOption),(s||t.options)&&(r=r||{},a=(t.options||[]).slice()),t.media){r=r||{};var l=t.media;Nx(l,function(t){t&&t.option&&(t.query?o.push(t):n||(n=t))})}return r||(r=t),r.timeline||(r.timeline=s),Nx([r].concat(a).concat(p(o,function(t){return t.option})),function(t){Nx(e,function(e){e(t,i)})}),{baseOption:r,timelineOptions:a,mediaDefault:n,mediaList:o}}function ts(t,e,i){var n={width:e,height:i,aspectratio:e/i},r=!0;return f(t,function(t,e){var i=e.match(Gx);if(i&&i[1]&&i[2]){var a=i[1],o=i[2].toLowerCase();es(n[o],t,a)||(r=!1)}}),r}function es(t,e,i){return"min"===i?t>=e:"max"===i?e>=t:t===e}function is(t,e){return t.join(",")===e.join(",")}function ns(t,e){e=e||{},Nx(e,function(e,i){if(null!=e){var n=t[i];if(yx.hasClass(i)){e=Nn(e),n=Nn(n);var r=Gn(n,e);t[i]=Vx(r,function(t){return t.option&&t.exist?Wx(t.exist,t.option,!0):t.exist||t.option})}else t[i]=Wx(n,e,!0)}})}function rs(t){var e=t&&t.itemStyle;if(e)for(var i=0,n=Xx.length;n>i;i++){var a=Xx[i],o=e.normal,s=e.emphasis;o&&o[a]&&(t[a]=t[a]||{},t[a].normal?r(t[a].normal,o[a]):t[a].normal=o[a],o[a]=null),s&&s[a]&&(t[a]=t[a]||{},t[a].emphasis?r(t[a].emphasis,s[a]):t[a].emphasis=s[a],s[a]=null)}}function as(t,e,i){if(t&&t[e]&&(t[e].normal||t[e].emphasis)){var n=t[e].normal,r=t[e].emphasis;n&&(i?(t[e].normal=t[e].emphasis=null,s(t[e],n)):t[e]=n),r&&(t.emphasis=t.emphasis||{},t.emphasis[e]=r)}}function os(t){as(t,"itemStyle"),as(t,"lineStyle"),as(t,"areaStyle"),as(t,"label"),as(t,"labelLine"),as(t,"upperLabel"),as(t,"edgeLabel")}function ss(t,e){var i=Zx(t)&&t[e],n=Zx(i)&&i.textStyle;if(n)for(var r=0,a=sm.length;a>r;r++){var e=sm[r];n.hasOwnProperty(e)&&(i[e]=n[e])}}function ls(t){t&&(os(t),ss(t,"label"),t.emphasis&&ss(t.emphasis,"label"))}function hs(t){if(Zx(t)){rs(t),os(t),ss(t,"label"),ss(t,"upperLabel"),ss(t,"edgeLabel"),t.emphasis&&(ss(t.emphasis,"label"),ss(t.emphasis,"upperLabel"),ss(t.emphasis,"edgeLabel"));var e=t.markPoint;e&&(rs(e),ls(e));var i=t.markLine;i&&(rs(i),ls(i));var n=t.markArea;n&&ls(n);var r=t.data;if("graph"===t.type){r=r||t.nodes;var a=t.links||t.edges;if(a&&!I(a))for(var o=0;o=0;p--){var g=t[p];if(s||(d=g.data.rawIndexOf(g.stackedByDimension,c)),d>=0){var v=g.data.getByRawIndex(g.stackResultDimension,d);if(u>=0&&v>0||0>=u&&0>v){u+=v,f=v;break}}}return n[0]=u,n[1]=f,n});o.hostModel.setData(l),e.data=l})}function vs(t,e){ko.isInstance(t)||(t=ko.seriesDataToSource(t)),this._source=t;var i=this._data=t.data,n=t.sourceFormat;n===kx&&(this._offset=0,this._dimSize=e,this._data=i);var r=Qx[n===Tx?n+"_"+t.seriesLayoutBy:n];o(this,r)}function ms(){return this._data.length}function ys(t){return this._data[t]}function xs(t){for(var e=0;ee.outputData.count()&&e.model.getRawData().cloneShallow(e.outputData)}function zs(t,e){f(t.CHANGABLE_METHODS,function(i){t.wrapMethod(i,x(Es,e))})}function Es(t){var e=Rs(t);e&&e.setOutputEnd(this.count())}function Rs(t){var e=(t.ecModel||{}).scheduler,i=e&&e.getPipeline(t.uid);if(i){var n=i.currentTask;if(n){var r=n.agentStubMap;r&&(n=r.get(t.uid))}return n}}function Bs(){this.group=new lv,this.uid=Za("viewChart"),this.renderTask=Is({plan:Vs,reset:Ws}),this.renderTask.context={view:this}}function Ns(t,e){if(t&&(t.trigger(e),"group"===t.type))for(var i=0;i=0?n():c=setTimeout(n,-a),h=r};return d.clear=function(){c&&(clearTimeout(c),c=null)},d.debounceNextCall=function(t){l=t},d}function Hs(t,e,i,n){var r=t[e];if(r){var a=r[p_]||r,o=r[v_],s=r[g_];if(s!==i||o!==n){if(null==i||!n)return t[e]=a;r=t[e]=Gs(a,i,"debounce"===n),r[p_]=a,r[v_]=n,r[g_]=i}return r}}function Zs(t,e){var i=t[e];i&&i[p_]&&(t[e]=i[p_])}function Xs(t,e,i,n){this.ecInstance=t,this.api=e,this.unfinished;var i=this._dataProcessorHandlers=i.slice(),n=this._visualHandlers=n.slice();this._allHandlers=i.concat(n),this._stageTaskMap=N()}function Ys(t,e,i,n,r){function a(t,e){return t.setDirty&&(!t.dirtyMap||t.dirtyMap.get(e.__pipeline.id))}r=r||{};var o;f(e,function(e){if(!r.visualType||r.visualType===e.visualType){var s=t._stageTaskMap.get(e.uid),l=s.seriesTaskMap,h=s.overallTask;if(h){var u,c=h.agentStubMap;c.each(function(t){a(r,t)&&(t.dirty(),u=!0)}),u&&h.dirty(),S_(h,n);var d=t.getPerformArgs(h,r.block);c.each(function(t){t.perform(d)}),o|=h.perform(d)}else l&&l.each(function(s){a(r,s)&&s.dirty();var l=t.getPerformArgs(s,r.block);l.skip=!e.performRawSeries&&i.isSeriesFiltered(s.context.model),S_(s,n),o|=s.perform(l)})}}),t.unfinished|=o}function js(t,e,i,n,r){function a(i){var a=i.uid,s=o.get(a)||o.set(a,Is({plan:Js,reset:tl,count:il}));s.context={model:i,ecModel:n,api:r,useClearVisual:e.isVisual&&!e.isLayout,plan:e.plan,reset:e.reset,scheduler:t},nl(t,i,s)}var o=i.seriesTaskMap||(i.seriesTaskMap=N()),s=e.seriesType,l=e.getTargetSeries;e.createOnAllSeries?n.eachRawSeries(a):s?n.eachRawSeriesByType(s,a):l&&l(n,r).each(a);var h=t._pipelineMap;o.each(function(t,e){h.get(e)||(t.dispose(),o.removeKey(e))})}function qs(t,e,i,n,r){function a(e){var i=e.uid,n=s.get(i);n||(n=s.set(i,Is({reset:$s,onDirty:Qs})),o.dirty()),n.context={model:e,overallProgress:u,modifyOutputEnd:c},n.agent=o,n.__block=u,nl(t,e,n)}var o=i.overallTask=i.overallTask||Is({reset:Us});o.context={ecModel:n,api:r,overallReset:e.overallReset,scheduler:t};var s=o.agentStubMap=o.agentStubMap||N(),l=e.seriesType,h=e.getTargetSeries,u=!0,c=e.modifyOutputEnd;l?n.eachRawSeriesByType(l,a):h?h(n,r).each(a):(u=!1,f(n.getSeries(),a));var d=t._pipelineMap;s.each(function(t,e){d.get(e)||(t.dispose(),o.dirty(),s.removeKey(e))})}function Us(t){t.overallReset(t.ecModel,t.api,t.payload)}function $s(t){return t.overallProgress&&Ks}function Ks(){this.agent.dirty(),this.getDownstream().dirty()}function Qs(){this.agent&&this.agent.dirty()}function Js(t){return t.plan&&t.plan(t.model,t.ecModel,t.api,t.payload)}function tl(t){t.useClearVisual&&t.data.clearAllVisual();var e=t.resetDefines=Nn(t.reset(t.model,t.ecModel,t.api,t.payload));return e.length>1?p(e,function(t,e){return el(e)}):M_}function el(t){return function(e,i){var n=i.data,r=i.resetDefines[t];if(r&&r.dataEach)for(var a=e.start;a0?parseInt(n,10)/100:n?parseFloat(n):0;var r=i.getAttribute("stop-color")||"#000000";e.addColorStop(n,r)}i=i.nextSibling}}function hl(t,e){t&&t.__inheritedStyle&&(e.__inheritedStyle||(e.__inheritedStyle={}),s(e.__inheritedStyle,t.__inheritedStyle))}function ul(t){for(var e=z(t).split(E_),i=[],n=0;n0;a-=2){var o=r[a],s=r[a-1];switch(n=n||be(),s){case"translate":o=z(o).split(E_),Te(n,n,[parseFloat(o[0]),parseFloat(o[1]||0)]);break;case"scale":o=z(o).split(E_),Ae(n,n,[parseFloat(o[0]),parseFloat(o[1]||o[0])]);break;case"rotate":o=z(o).split(E_),Ce(n,n,parseFloat(o[0]));break;case"skew":o=z(o).split(E_),console.warn("Skew transform is not supported yet");break;case"matrix":var o=z(o).split(E_);n[0]=parseFloat(o[0]),n[1]=parseFloat(o[1]),n[2]=parseFloat(o[2]),n[3]=parseFloat(o[3]),n[4]=parseFloat(o[4]),n[5]=parseFloat(o[5])}}}e.setLocalTransform(n)}function pl(t){var e=t.getAttribute("style"),i={};if(!e)return i;var n={};W_.lastIndex=0;for(var r;null!=(r=W_.exec(e));)n[r[1]]=r[2];for(var a in N_)N_.hasOwnProperty(a)&&null!=n[a]&&(i[N_[a]]=n[a]);return i}function gl(t,e,i){var n=e/t.width,r=i/t.height,a=Math.min(n,r),o=[a,a],s=[-(t.x+t.width/2)*a+e/2,-(t.y+t.height/2)*a+i/2];return{scale:o,position:s}}function vl(t){return function(e,i,n){e=e&&e.toLowerCase(),bg.prototype[t].call(this,e,i,n)}}function ml(){bg.call(this)}function yl(t,e,i){function r(t,e){return t.__prio-e.__prio}i=i||{},"string"==typeof e&&(e=xw[e]),this.id,this.group,this._dom=t;var a="canvas",o=this._zr=On(t,{renderer:i.renderer||a,devicePixelRatio:i.devicePixelRatio,width:i.width,height:i.height});this._throttledZrFlush=Gs(y(o.flush,o),17);var e=n(e);e&&Ux(e,!0),this._theme=e,this._chartsViews=[],this._chartsMap={},this._componentsViews=[],this._componentsMap={},this._coordSysMgr=new Ko;var s=this._api=Rl(this);Si(yw,r),Si(gw,r),this._scheduler=new Xs(this,s,gw,yw),bg.call(this,this._ecEventProcessor=new Bl),this._messageCenter=new ml,this._initEvents(),this.resize=y(this.resize,this),this._pendingActions=[],o.animation.on("frame",this._onframe,this),Tl(o,this),E(this)}function xl(t,e,i){var n,r=this._model,a=this._coordSysMgr.getCoordinateSystems();e=qn(r,e);for(var o=0;oe.get("hoverLayerThreshold")&&!tg.node&&i.traverse(function(t){t.isGroup||(t.useHoverLayer=!0)})}function zl(t,e){var i=t.get("blendMode")||null;e.group.traverse(function(t){t.isGroup||t.style.blend!==i&&t.setStyle("blend",i),t.eachPendingDisplayable&&t.eachPendingDisplayable(function(t){t.setStyle("blend",i)})})}function El(t,e){var i=t.get("z"),n=t.get("zlevel");e.group.traverse(function(t){"group"!==t.type&&(null!=i&&(t.z=i),null!=n&&(t.zlevel=n))})}function Rl(t){var e=t._coordSysMgr;return o(new $o(t),{getCoordinateSystems:y(e.getCoordinateSystems,e),getComponentByElement:function(e){for(;e;){var i=e.__ecComponentInfo;if(null!=i)return t._model.getComponent(i.mainType,i.index);e=e.parent}}})}function Bl(){this.eventInfo}function Nl(t){function e(t,e){for(var i=0;i65535?Ow:zw}function vh(t){var e=t.constructor;return e===Array?t.slice():new e(t)}function mh(t,e){f(Ew.concat(e.__wrappedMethods||[]),function(i){e.hasOwnProperty(i)&&(t[i]=e[i])}),t.__wrappedMethods=e.__wrappedMethods,f(Rw,function(i){t[i]=n(e[i])}),t._calculationInfo=o(e._calculationInfo)}function yh(t){var e=t._invertedIndicesMap;f(e,function(i,n){var r=t._dimensionInfos[n],a=r.ordinalMeta;if(a){i=e[n]=new Ow(a.categories.length);for(var o=0;o=0?this._indices[t]:-1}function bh(t,e){var i=t._idList[e];return null==i&&(i=xh(t,t._idDimIdx,e)),null==i&&(i=Pw+e),i}function Sh(t){return _(t)||(t=[t]),t}function Mh(t,e){var i=t.dimensions,n=new Bw(p(i,t.getDimensionInfo,t),t.hostModel);mh(n,t);for(var r=n._storage={},a=t._storage,o=0;o=0?(r[s]=Ih(a[s]),n._rawExtent[s]=Th(),n._extent[s]=null):r[s]=a[s])}return n}function Ih(t){for(var e=new Array(t.length),i=0;ip;p++){var g=a[p]=o({},S(a[p])?a[p]:{name:a[p]}),v=g.name,m=c[p]={otherDims:{}};null!=v&&null==h.get(v)&&(m.name=m.displayName=v,h.set(v,p)),null!=g.type&&(m.type=g.type),null!=g.displayName&&(m.displayName=g.displayName)}l.each(function(t,e){if(t=Nn(t).slice(),1===t.length&&t[0]<0)return void l.set(e,!1);var i=l.set(e,[]);f(t,function(t,n){b(t)&&(t=h.get(t)),null!=t&&d>t&&(i[n]=t,r(c[t],e,n))})});var y=0;f(t,function(t){var e,t,i,a;if(b(t))e=t,t={};else{e=t.name;var o=t.ordinalMeta;t.ordinalMeta=null,t=n(t),t.ordinalMeta=o,i=t.dimsDef,a=t.otherDims,t.name=t.coordDim=t.coordDimIndex=t.dimsDef=t.otherDims=null}var h=l.get(e);if(h!==!1){var h=Nn(h);if(!h.length)for(var u=0;u<(i&&i.length||1);u++){for(;yI;I++){var m=c[I]=c[I]||{},T=m.coordDim;null==T&&(m.coordDim=Dh(M,u,w),m.coordDimIndex=0,(!x||0>=_)&&(m.isExtraCoord=!0),_--),null==m.name&&(m.name=Dh(m.coordDim,h)),null==m.type&&Wo(e,I,m.name)&&(m.type="ordinal")}return c}function Ah(t,e,i,n){var r=Math.max(t.dimensionsDetectCount||1,e.length,i.length,n||0);return f(e,function(t){var e=t.dimsDef;e&&(r=Math.max(r,e.length)) -}),r}function Dh(t,e,i){if(i||null!=e.get(t)){for(var n=0;null!=e.get(t+n);)n++;t+=n}return e.set(t,!0),t}function kh(t,e,i){i=i||{};var n,r,a,o,s=i.byIndex,l=i.stackedCoordDimension,h=!(!t||!t.get("stack"));if(f(e,function(t,i){b(t)&&(e[i]=t={name:t}),h&&!t.isExtraCoord&&(s||n||!t.ordinalMeta||(n=t),r||"ordinal"===t.type||"time"===t.type||l&&l!==t.coordDim||(r=t))}),!r||s||n||(s=!0),r){a="__\x00ecstackresult",o="__\x00ecstackedover",n&&(n.createInvertedIndices=!0);var u=r.coordDim,c=r.type,d=0;f(e,function(t){t.coordDim===u&&d++}),e.push({name:a,coordDim:u,coordDimIndex:d,type:c,isExtraCoord:!0,isCalculationCoord:!0}),d++,e.push({name:o,coordDim:o,coordDimIndex:d,type:c,isExtraCoord:!0,isCalculationCoord:!0})}return{stackedDimension:r&&r.name,stackedByDimension:n&&n.name,isStackedByIndex:s,stackedOverDimension:o,stackResultDimension:a}}function Ph(t,e){return!!e&&e===t.getCalculationInfo("stackedDimension")}function Lh(t,e){return Ph(t,e)?t.getCalculationInfo("stackResultDimension"):e}function Oh(t,e,i){i=i||{},ko.isInstance(t)||(t=ko.seriesDataToSource(t));var n,r=e.get("coordinateSystem"),a=Ko.get(r),o=Ao(e);o&&(n=p(o.coordSysDims,function(t){var e={name:t},i=o.axisMap.get(t);if(i){var n=i.get("type");e.type=fh(n)}return e})),n||(n=a&&(a.getDimensionsInfo?a.getDimensionsInfo():a.dimensions.slice())||["x","y"]);var s,l,h=Vw(t,{coordDimensions:n,generateCoord:i.generateCoord});o&&f(h,function(t,e){var i=t.coordDim,n=o.categoryAxisMap.get(i);n&&(null==s&&(s=e),t.ordinalMeta=n.getOrdinalMeta()),null!=t.otherDims.itemName&&(l=!0)}),l||null==s||(h[s].otherDims.itemName=0);var u=kh(e,h),c=new Bw(h,e);c.setCalculationInfo(u);var d=null!=s&&zh(t)?function(t,e,i,n){return n===s?i:this.defaultDimValueGetter(t,e,i,n)}:null;return c.hasItemOption=!1,c.initData(t,null,d),c}function zh(t){if(t.sourceFormat===Ix){var e=Eh(t.data||[]);return null!=e&&!_(Vn(e))}}function Eh(t){for(var e=0;eo&&(o=r.interval=i),null!=n&&o>n&&(o=r.interval=n);var s=r.intervalPrecision=Wh(o),l=r.niceTickExtent=[Zw(Math.ceil(t[0]/o)*o,s),Zw(Math.floor(t[1]/o)*o,s)];return Hh(l,t),r}function Wh(t){return Ja(t)+2}function Gh(t,e,i){t[e]=Math.max(Math.min(t[e],i[1]),i[0])}function Hh(t,e){!isFinite(t[0])&&(t[0]=e[0]),!isFinite(t[1])&&(t[1]=e[1]),Gh(t,0,e),Gh(t,1,e),t[0]>t[1]&&(t[0]=t[1])}function Zh(t,e,i,n){var r=[];if(!t)return r;var a=1e4;e[0]a)return[];return e[1]>(r.length?r[r.length-1]:i[1])&&r.push(e[1]),r}function Xh(t){return t.get("stack")||jw+t.seriesIndex}function Yh(t){return t.dim+t.index}function jh(t){var e=[],i=t.axis,n="axis0";if("category"===i.type){for(var r=i.getBandWidth(),a=0;ae&&(e=Math.min(e,s),t.width&&(e=Math.min(e,t.width)),s-=e,t.width=e,l--)}),h=(s-a)/(l+(l-1)*o),h=Math.max(h,0);var u,c=0;f(n,function(t){t.width||(t.width=h),u=t,c+=t.width*(1+o)}),u&&(c-=u.width*o);var d=-c/2;f(n,function(t,n){i[e][n]=i[e][n]||{offset:d,width:t.width},d+=t.width*(1+o)})}),i}function Kh(t,e,i){if(t&&e){var n=t[Yh(e)];return null!=n&&null!=i&&(n=n[Xh(i)]),n}}function Qh(t,e){var i=qh(t,e),n=Uh(i),r={};f(i,function(t){var e=t.getData(),i=t.coordinateSystem,a=i.getBaseAxis(),o=Xh(t),s=n[Yh(a)][o],l=s.offset,h=s.width,u=i.getOtherAxis(a),c=t.get("barMinHeight")||0;r[o]=r[o]||[],e.setLayout({offset:l,size:h});for(var d=e.mapDimension(u.dim),f=e.mapDimension(a.dim),p=Ph(e,d),g=u.isHorizontal(),v=eu(a,u,p),m=0,y=e.count();y>m;m++){var x=e.get(d,m),_=e.get(f,m);if(!isNaN(x)){var w=x>=0?"p":"n",b=v;p&&(r[o][_]||(r[o][_]={p:v,n:v}),b=r[o][_][w]);var S,M,I,T;if(g){var C=i.dataToPoint([x,_]);S=b,M=C[1]+l,I=C[0]-v,T=h,Math.abs(I)I?-1:1)*c),p&&(r[o][_][w]+=I)}else{var C=i.dataToPoint([_,x]);S=C[0]+l,M=b,I=h,T=C[1]-v,Math.abs(T)=T?-1:1)*c),p&&(r[o][_][w]+=T)}e.setItemLayout(m,{x:S,y:M,width:I,height:T})}}},this)}function Jh(t){return t.coordinateSystem&&"cartesian2d"===t.coordinateSystem.type}function tu(t){return t.pipelineContext&&t.pipelineContext.large}function eu(t,e){var i,n,r=e.getGlobalExtent();r[0]>r[1]?(i=r[1],n=r[0]):(i=r[0],n=r[1]);var a=e.toGlobalCoord(e.dataToCoord(0));return i>a&&(a=i),a>n&&(a=n),a}function iu(t,e){return ub(t,hb(e))}function nu(t,e){var i,n,r,a=t.type,o=e.getMin(),s=e.getMax(),l=null!=o,h=null!=s,u=t.getExtent();"ordinal"===a?i=e.getCategories().length:(n=e.get("boundaryGap"),_(n)||(n=[n||0,n||0]),"boolean"==typeof n[0]&&(n=[0,0]),n[0]=Ua(n[0],1),n[1]=Ua(n[1],1),r=u[1]-u[0]||Math.abs(u[0])),null==o&&(o="ordinal"===a?i?0:0/0:u[0]-n[0]*r),null==s&&(s="ordinal"===a?i?i-1:0/0:u[1]+n[1]*r),"dataMin"===o?o=u[0]:"function"==typeof o&&(o=o({min:u[0],max:u[1]})),"dataMax"===s?s=u[1]:"function"==typeof s&&(s=s({min:u[0],max:u[1]})),(null==o||!isFinite(o))&&(o=0/0),(null==s||!isFinite(s))&&(s=0/0),t.setBlank(C(o)||C(s)||"ordinal"===a&&!t.getOrdinalMeta().categories.length),e.getNeedCrossZero()&&(o>0&&s>0&&!l&&(o=0),0>o&&0>s&&!h&&(s=0));var c=e.ecModel;if(c&&"time"===a){var d,p=qh("bar",c);if(f(p,function(t){d|=t.getBaseAxis()===e.axis}),d){var g=Uh(p),v=ru(o,s,e,g);o=v.min,s=v.max}}return[o,s]}function ru(t,e,i,n){var r=i.axis.getExtent(),a=r[1]-r[0],o=Kh(n,i.axis);if(void 0===o)return{min:t,max:e};var s=1/0;f(o,function(t){s=Math.min(t.offset,s)});var l=-1/0;f(o,function(t){l=Math.max(t.offset+t.width,l)}),s=Math.abs(s),l=Math.abs(l);var h=s+l,u=e-t,c=1-(s+l)/a,d=u/c-u;return e+=d*(l/h),t-=d*(s/h),{min:t,max:e}}function au(t,e){var i=nu(t,e),n=null!=e.getMin(),r=null!=e.getMax(),a=e.get("splitNumber");"log"===t.type&&(t.base=e.get("logBase"));var o=t.type;t.setExtent(i[0],i[1]),t.niceExtent({splitNumber:a,fixMin:n,fixMax:r,minInterval:"interval"===o||"time"===o?e.get("minInterval"):null,maxInterval:"interval"===o||"time"===o?e.get("maxInterval"):null});var s=e.get("interval");null!=s&&t.setInterval&&t.setInterval(s)}function ou(t,e){if(e=e||t.get("type"))switch(e){case"category":return new Hw(t.getOrdinalMeta?t.getOrdinalMeta():t.getCategories(),[1/0,-1/0]);case"value":return new Yw;default:return(Rh.getClass(e)||Yw).create(t)}}function su(t){var e=t.scale.getExtent(),i=e[0],n=e[1];return!(i>0&&n>0||0>i&&0>n)}function lu(t){var e=t.getLabelModel().get("formatter"),i="category"===t.type?t.scale.getExtent()[0]:null;return"string"==typeof e?e=function(e){return function(i){return i=t.scale.getLabel(i),e.replace("{value}",null!=i?i:"")}}(e):"function"==typeof e?function(n,r){return null!=i&&(r=n-i),e(hu(t,n),r)}:function(e){return t.scale.getLabel(e)}}function hu(t,e){return"category"===t.type?t.scale.getLabel(e):e}function uu(t){var e=t.model,i=t.scale;if(e.get("axisLabel.show")&&!i.isBlank()){var n,r,a="category"===t.type,o=i.getExtent();a?r=i.count():(n=i.getTicks(),r=n.length);var s,l=t.getLabelModel(),h=lu(t),u=1;r>40&&(u=Math.ceil(r/40));for(var c=0;r>c;c+=u){var d=n?n[c]:o[0]+c,f=h(d),p=l.getTextRect(f),g=cu(p,l.get("rotate")||0);s?s.union(g):s=g}return s}}function cu(t,e){var i=e*Math.PI/180,n=t.plain(),r=n.width,a=n.height,o=r*Math.cos(i)+a*Math.sin(i),s=r*Math.sin(i)+a*Math.cos(i),l=new gi(n.x,n.y,o,s);return l}function du(t,e){if("image"!==this.type){var i=this.style,n=this.shape;n&&"line"===n.symbolType?i.stroke=t:this.__isEmptyBrush?(i.stroke=t,i.fill=e||"#fff"):(i.fill&&(i.fill=t),i.stroke&&(i.stroke=t)),this.dirty(!1)}}function fu(t,e,i,n,r,a,o){var s=0===t.indexOf("empty");s&&(t=t.substr(5,1).toLowerCase()+t.substr(6));var l;return l=0===t.indexOf("image://")?Jr(t.slice(8),new gi(e,i,n,r),o?"center":"cover"):0===t.indexOf("path://")?Qr(t.slice(7),{},new gi(e,i,n,r),o?"center":"cover"):new Mb({shape:{symbolType:t,x:e,y:i,width:n,height:r}}),l.__isEmptyBrush=s,l.setColor=du,l.setColor(a),l}function pu(t){return Oh(t.getSource(),t)}function gu(t,e){var i=e;Wa.isInstance(e)||(i=new Wa(e),c(i,vb));var n=ou(i);return n.setExtent(t[0],t[1]),au(n,i),n}function vu(t){c(t,vb)}function mu(t,e){return Math.abs(t-e)>1^-(1&s),l=l>>1^-(1&l),s+=r,l+=a,r=s,a=l,n.push([s/i,l/i])}return n}function bu(t){return"category"===t.type?Mu(t):Cu(t)}function Su(t,e){return"category"===t.type?Tu(t,e):{ticks:t.scale.getTicks()}}function Mu(t){var e=t.getLabelModel(),i=Iu(t,e);return!e.get("show")||t.scale.isBlank()?{labels:[],labelCategoryInterval:i.labelCategoryInterval}:i}function Iu(t,e){var i=Au(t,"labels"),n=Ru(e),r=Du(i,n);if(r)return r;var a,o;return w(n)?a=Eu(t,n):(o="auto"===n?Pu(t):n,a=zu(t,o)),ku(i,n,{labels:a,labelCategoryInterval:o})}function Tu(t,e){var i=Au(t,"ticks"),n=Ru(e),r=Du(i,n);if(r)return r;var a,o;if((!e.get("show")||t.scale.isBlank())&&(a=[]),w(n))a=Eu(t,n,!0);else if("auto"===n){var s=Iu(t,t.getLabelModel());o=s.labelCategoryInterval,a=p(s.labels,function(t){return t.tickValue})}else o=n,a=zu(t,o,!0);return ku(i,n,{ticks:a,tickCategoryInterval:o})}function Cu(t){var e=t.scale.getTicks(),i=lu(t);return{labels:p(e,function(e,n){return{formattedLabel:i(e,n),rawLabel:t.scale.getLabel(e),tickValue:e}})}}function Au(t,e){return Db(t)[e]||(Db(t)[e]=[])}function Du(t,e){for(var i=0;i40&&(s=Math.max(1,Math.floor(o/40)));for(var l=a[0],h=t.dataToCoord(l+1)-t.dataToCoord(l),u=Math.abs(h*Math.cos(n)),c=Math.abs(h*Math.sin(n)),d=0,f=0;l<=a[1];l+=s){var p=0,g=0,v=Ei(i(l),e.font,"center","top");p=1.3*v.width,g=1.3*v.height,d=Math.max(d,p,7),f=Math.max(f,g,7)}var m=d/u,y=f/c;isNaN(m)&&(m=1/0),isNaN(y)&&(y=1/0);var x=Math.max(0,Math.floor(Math.min(m,y))),_=Db(t.model),w=_.lastAutoInterval,b=_.lastTickCount;return null!=w&&null!=b&&Math.abs(w-x)<=1&&Math.abs(b-o)<=1&&w>x?x=w:(_.lastTickCount=o,_.lastAutoInterval=x),x}function Ou(t){var e=t.getLabelModel();return{axisRotate:t.getRotate?t.getRotate():t.isHorizontal&&!t.isHorizontal()?90:0,labelRotate:e.get("rotate")||0,font:e.getFont()}}function zu(t,e,i){function n(t){l.push(i?t:{formattedLabel:r(t),rawLabel:a.getLabel(t),tickValue:t})}var r=lu(t),a=t.scale,o=a.getExtent(),s=t.getLabelModel(),l=[],h=Math.max((e||0)+1,1),u=o[0],c=a.count();0!==u&&h>1&&c/h>2&&(u=Math.round(Math.ceil(u/h)*h));var d={min:s.get("showMinLabel"),max:s.get("showMaxLabel")};d.min&&u!==o[0]&&n(o[0]);for(var f=u;f<=o[1];f+=h)n(f);return d.max&&f!==o[1]&&n(o[1]),l}function Eu(t,e,i){var n=t.scale,r=lu(t),a=[];return f(n.getTicks(),function(t){var o=n.getLabel(t);e(t,o)&&a.push(i?t:{formattedLabel:r(t),rawLabel:o,tickValue:t})}),a}function Ru(t){var e=t.get("interval");return null==e?"auto":e}function Bu(t,e){var i=t[1]-t[0],n=e,r=i/n/2;t[0]+=r,t[1]-=r}function Nu(t,e,i,n,r){function a(t,e){return u?t>e:e>t}var o=e.length;if(t.onBand&&!n&&o){var s,l=t.getExtent();if(1===o)e[0].coord=l[0],s=e[1]={coord:l[0]};else{var h=e[1].coord-e[0].coord;f(e,function(t){t.coord-=h/2;var e=e||0;e%2>0&&(t.coord-=h/(2*(e+1)))}),s={coord:e[o-1].coord+h},e.push(s)}var u=l[0]>l[1];a(e[0].coord,l[0])&&(r?e[0].coord=l[0]:e.shift()),r&&a(l[0],e[0].coord)&&e.unshift({coord:l[0]}),a(l[1],s.coord)&&(r?s.coord=l[1]:e.pop()),r&&a(s.coord,l[1])&&e.push({coord:l[1]})}}function Fu(t){return this._axes[t]}function Vu(t){Eb.call(this,t)}function Wu(t,e){return e.type||(e.data?"category":"value")}function Gu(t,e){return t.getCoordSysModel()===e}function Hu(t,e,i){this._coordsMap={},this._coordsList=[],this._axesMap={},this._axesList=[],this._initCartesian(t,e,i),this.model=t}function Zu(t,e,i,n){function r(t){return t.dim+"_"+t.index}i.getAxesOnZeroOf=function(){return a?[a]:[]};var a,o=t[e],s=i.model,l=s.get("axisLine.onZero"),h=s.get("axisLine.onZeroAxisIndex");if(l){if(null!=h)Xu(o[h])&&(a=o[h]);else for(var u in o)if(o.hasOwnProperty(u)&&Xu(o[u])&&!n[r(o[u])]){a=o[u];break}a&&(n[r(a)]=!0)}}function Xu(t){return t&&"category"!==t.type&&"time"!==t.type&&su(t)}function Yu(t,e){var i=t.getExtent(),n=i[0]+i[1];t.toGlobalCoord="x"===t.dim?function(t){return t+e}:function(t){return n-t+e},t.toLocalCoord="x"===t.dim?function(t){return t-e}:function(t){return n-t+e}}function ju(t){return p(Zb,function(e){var i=t.getReferringComponents(e)[0];return i})}function qu(t){return"cartesian2d"===t.get("coordinateSystem")}function Uu(t,e){var i=t.mapDimension("defaultedLabel",!0),n=i.length;if(1===n)return Ss(t,e,i[0]);if(n){for(var r=[],a=0;a0?"bottom":"top":r.width>0?"left":"right";l||$u(t.style,d,n,h,a,i,p),xa(t,d)}function ec(t,e){var i=t.get(qb)||0;return Math.min(i,Math.abs(e.width),Math.abs(e.height))}function ic(t,e,i){var n=t.getData(),r=[],a=n.getLayout("valueAxisHorizontal")?1:0;r[1-a]=n.getLayout("valueAxisStart");var o=new Kb({shape:{points:n.getLayout("largePoints")},incremental:!!i,__startPoint:r,__valueIdx:a});e.add(o),nc(o,t,n)}function nc(t,e,i){var n=i.getVisual("borderColor")||i.getVisual("color"),r=e.getModel("itemStyle").getItemStyle(["color","borderColor"]);t.useStyle(r),t.style.fill=null,t.style.stroke=n,t.style.lineWidth=i.getLayout("barWidth")}function rc(t){var e={componentType:t.mainType,componentIndex:t.componentIndex};return e[t.mainType+"Index"]=t.componentIndex,e}function ac(t,e,i,n){var r,a,o=io(i-t.rotation),s=n[0]>n[1],l="start"===e&&!s||"start"!==e&&s;return no(o-Qb/2)?(a=l?"bottom":"top",r="center"):no(o-1.5*Qb)?(a=l?"top":"bottom",r="center"):(a="middle",r=1.5*Qb>o&&o>Qb/2?l?"left":"right":l?"right":"left"),{rotation:o,textAlign:r,textVerticalAlign:a}}function oc(t){var e=t.get("tooltip");return t.get("silent")||!(t.get("triggerEvent")||e&&e.show)}function sc(t,e,i){var n=t.get("axisLabel.showMinLabel"),r=t.get("axisLabel.showMaxLabel");e=e||[],i=i||[];var a=e[0],o=e[1],s=e[e.length-1],l=e[e.length-2],h=i[0],u=i[1],c=i[i.length-1],d=i[i.length-2];n===!1?(lc(a),lc(h)):hc(a,o)&&(n?(lc(o),lc(u)):(lc(a),lc(h))),r===!1?(lc(s),lc(c)):hc(l,s)&&(r?(lc(l),lc(d)):(lc(s),lc(c)))}function lc(t){t&&(t.ignore=!0)}function hc(t,e){var i=t&&t.getBoundingRect().clone(),n=e&&e.getBoundingRect().clone();if(i&&n){var r=Se([]);return Ce(r,r,-t.rotation),i.applyTransform(Ie([],r,t.getLocalTransform())),n.applyTransform(Ie([],r,e.getLocalTransform())),i.intersect(n)}}function uc(t){return"middle"===t||"center"===t}function cc(t,e,i){var n=e.axis;if(e.get("axisTick.show")&&!n.scale.isBlank()){for(var r=e.getModel("axisTick"),a=r.getModel("lineStyle"),o=r.get("length"),l=n.getTicksCoords(),h=[],u=[],c=t._transform,d=[],f=0;f=0||t===e}function xc(t){var e=_c(t);if(e){var i=e.axisPointerModel,n=e.axis.scale,r=i.option,a=i.get("status"),o=i.get("value");null!=o&&(o=n.parse(o));var s=bc(i);null==a&&(r.status=s?"show":"hide");var l=n.getExtent().slice();l[0]>l[1]&&l.reverse(),(null==o||o>l[1])&&(o=l[1]),o0?i=n[0]:n[1]<0&&(i=n[1]),i}function Vc(t,e,i,n){var r=0/0;t.stacked&&(r=i.get(i.getCalculationInfo("stackedOverDimension"),n)),isNaN(r)&&(r=t.valueStart);var a=t.baseDataOffset,o=[];return o[a]=i.get(t.baseDim,n),o[1-a]=r,e.dataToPoint(o)}function Wc(t,e){var i=[];return e.diff(t).add(function(t){i.push({cmd:"+",idx:t})}).update(function(t,e){i.push({cmd:"=",idx:e,idx1:t})}).remove(function(t){i.push({cmd:"-",idx:t})}).execute(),i}function Gc(t){return isNaN(t[0])||isNaN(t[1])}function Hc(t,e,i,n,r,a,o,s,l,h){return"none"!==h&&h?Zc.apply(this,arguments):Xc.apply(this,arguments)}function Zc(t,e,i,n,r,a,o,s,l,h,u){for(var c=0,d=i,f=0;n>f;f++){var p=e[d];if(d>=r||0>d)break;if(Gc(p)){if(u){d+=a;continue}break}if(d===i)t[a>0?"moveTo":"lineTo"](p[0],p[1]);else if(l>0){var g=e[c],v="y"===h?1:0,m=(p[v]-g[v])*l;_S(bS,g),bS[v]=g[v]+m,_S(SS,p),SS[v]=p[v]-m,t.bezierCurveTo(bS[0],bS[1],SS[0],SS[1],p[0],p[1])}else t.lineTo(p[0],p[1]);c=d,d+=a}return f}function Xc(t,e,i,n,r,a,o,s,l,h,u){for(var c=0,d=i,f=0;n>f;f++){var p=e[d];if(d>=r||0>d)break;if(Gc(p)){if(u){d+=a;continue}break}if(d===i)t[a>0?"moveTo":"lineTo"](p[0],p[1]),_S(bS,p);else if(l>0){var g=d+a,v=e[g];if(u)for(;v&&Gc(e[g]);)g+=a,v=e[g];var m=.5,y=e[c],v=e[g];if(!v||Gc(v))_S(SS,p);else{Gc(v)&&!u&&(v=p),j(wS,v,y);var x,_;if("x"===h||"y"===h){var w="x"===h?0:1;x=Math.abs(p[w]-y[w]),_=Math.abs(p[w]-v[w])}else x=yg(p,y),_=yg(p,v);m=_/(_+x),xS(SS,p,wS,-l*(1-m))}mS(bS,bS,s),yS(bS,bS,o),mS(SS,SS,s),yS(SS,SS,o),t.bezierCurveTo(bS[0],bS[1],SS[0],SS[1],p[0],p[1]),xS(bS,p,wS,l*m)}else t.lineTo(p[0],p[1]);c=d,d+=a}return f}function Yc(t,e){var i=[1/0,1/0],n=[-1/0,-1/0];if(e)for(var r=0;rn[0]&&(n[0]=a[0]),a[1]>n[1]&&(n[1]=a[1])}return{min:e?i:n,max:e?n:i}}function jc(t,e){if(t.length===e.length){for(var i=0;ie[0]?1:-1;e[0]+=n*i,e[1]-=n*i}return e}function $c(t,e,i){if(!i.valueDim)return[];for(var n=[],r=0,a=e.count();a>r;r++)n.push(Vc(i,t,e,r));return n}function Kc(t,e,i,n){var r=Uc(t.getAxis("x")),a=Uc(t.getAxis("y")),o=t.getBaseAxis().isHorizontal(),s=Math.min(r[0],r[1]),l=Math.min(a[0],a[1]),h=Math.max(r[0],r[1])-s,u=Math.max(a[0],a[1])-l;if(i)s-=.5,h+=.5,l-=.5,u+=.5;else{var c=n.get("lineStyle.width")||2,d=n.get("clipOverflow")?c/2:Math.max(h,u);o?(l-=d,u+=2*d):(s-=d,h+=2*d)}var f=new Dy({shape:{x:s,y:l,width:h,height:u}});return e&&(f.shape[o?"width":"height"]=0,Oa(f,{shape:{width:h,height:u}},n)),f}function Qc(t,e,i,n){var r=t.getAngleAxis(),a=t.getRadiusAxis(),o=a.getExtent().slice();o[0]>o[1]&&o.reverse();var s=r.getExtent(),l=Math.PI/180;i&&(o[0]-=.5,o[1]+=.5);var h=new Sy({shape:{cx:$a(t.cx,1),cy:$a(t.cy,1),r0:$a(o[0],1),r:$a(o[1],1),startAngle:-s[0]*l,endAngle:-s[1]*l,clockwise:r.inverse}});return e&&(h.shape.endAngle=-s[0]*l,Oa(h,{shape:{endAngle:-s[1]*l}},n)),h}function Jc(t,e,i,n){return"polar"===t.type?Qc(t,e,i,n):Kc(t,e,i,n)}function td(t,e,i){for(var n=e.getBaseAxis(),r="x"===n.dim||"radius"===n.dim?0:1,a=[],o=0;o=0;a--){var o=i[a].dimension,s=t.dimensions[o],l=t.getDimensionInfo(s);if(n=l&&l.coordDim,"x"===n||"y"===n){r=i[a];break}}if(r){var h=e.getAxis(n),u=p(r.stops,function(t){return{coord:h.toGlobalCoord(h.dataToCoord(t.value)),color:t.color}}),c=u.length,d=r.outerColors.slice();c&&u[0].coord>u[c-1].coord&&(u.reverse(),d.reverse());var g=10,v=u[0].coord-g,m=u[c-1].coord+g,y=m-v;if(.001>y)return"transparent";f(u,function(t){t.offset=(t.coord-v)/y}),u.push({offset:c?u[c-1].offset:.5,color:d[1]||"transparent"}),u.unshift({offset:c?u[0].offset:.5,color:d[0]||"transparent"});var x=new Ry(0,0,0,0,u,!0);return x[n]=v,x[n+"2"]=m,x}}}function id(t,e,i){var n=t.get("showAllSymbol"),r="auto"===n;if(!n||r){var a=i.getAxesByScale("ordinal")[0];if(a&&(!r||!nd(a,e))){var o=e.mapDimension(a.dim),s={};return f(a.getViewLabels(),function(t){s[t.tickValue]=1}),function(t){return!s.hasOwnProperty(e.get(o,t))}}}}function nd(t,e){var i=t.getExtent(),n=Math.abs(i[1]-i[0])/t.scale.count();isNaN(n)&&(n=0);for(var r=e.count(),a=Math.max(1,Math.round(r/5)),o=0;r>o;o+=a)if(1.5*Cc.getSymbolSize(e,o)[t.isHorizontal()?1:0]>n)return!1;return!0}function rd(t,e,i,n){var r=e.getData(),a=this.dataIndex,o=r.getName(a),s=e.get("selectedOffset");n.dispatchAction({type:"pieToggleSelect",from:t,name:o,seriesId:e.id}),r.each(function(t){ad(r.getItemGraphicEl(t),r.getItemLayout(t),e.isSelected(r.getName(t)),s,i)})}function ad(t,e,i,n,r){var a=(e.startAngle+e.endAngle)/2,o=Math.cos(a),s=Math.sin(a),l=i?n:0,h=[o*l,s*l];r?t.animate().when(200,{position:h}).start("bounceOut"):t.attr("position",h)}function od(t,e){function i(){a.ignore=a.hoverIgnore,o.ignore=o.hoverIgnore}function n(){a.ignore=a.normalIgnore,o.ignore=o.normalIgnore}lv.call(this);var r=new Sy({z2:2}),a=new Ay,o=new xy;this.add(r),this.add(a),this.add(o),this.updateData(t,e,!0),this.on("emphasis",i).on("normal",n).on("mouseover",i).on("mouseout",n)}function sd(t,e,i,n,r,a,o){function s(e,i,n){for(var r=e;i>r;r++)if(t[r].y+=n,r>e&&i>r+1&&t[r+1].y>t[r].y+t[r].height)return void l(r,n/2);l(i-1,n/2)}function l(e,i){for(var n=e;n>=0&&(t[n].y-=i,!(n>0&&t[n].y>t[n-1].y+t[n-1].height));n--);}function h(t,e,i,n,r,a){for(var o=a>0?e?Number.MAX_VALUE:0:e?Number.MAX_VALUE:0,s=0,l=t.length;l>s;s++)if("center"!==t[s].position){var h=Math.abs(t[s].y-n),u=t[s].len,c=t[s].len2,d=r+u>h?Math.sqrt((r+u+c)*(r+u+c)-h*h):Math.abs(t[s].x-i);e&&d>=o&&(d=o-10),!e&&o>=d&&(d=o+10),t[s].x=i+d*a,o=d}}t.sort(function(t,e){return t.y-e.y});for(var u,c=0,d=t.length,f=[],p=[],g=0;d>g;g++)u=t[g].y-c,0>u&&s(g,d,-u,r),c=t[g].y+t[g].height;0>o-c&&l(d-1,c-o);for(var g=0;d>g;g++)t[g].y>=i?p.push(t[g]):f.push(t[g]);h(f,!1,e,i,n,r),h(p,!0,e,i,n,r)}function ld(t,e,i,n,r,a){for(var o=[],s=[],l=0;lu;u++)a[u]&&xd(t.childAt(u),e,a[u],n,t,r)}}function wd(t){new uh(t.oldChildren,t.newChildren,bd,bd,t).add(Sd).update(Sd).remove(Md).execute()}function bd(t,e){var i=t&&t.name;return null!=i?i:KS+e}function Sd(t,e){var i=this.context,n=null!=t?i.newChildren[t]:null,r=null!=e?i.oldChildren[e]:null;xd(r,i.dataIndex,n,i.animatableModel,i.group,i.data)}function Md(t){var e=this.context,i=e.oldChildren[t];i&&e.group.remove(i)}function Id(t){return t&&(t.pathData||t.d)}function Td(t){return t&&(t.hasOwnProperty("pathData")||t.hasOwnProperty("d"))}function Cd(t,e){return t&&t.hasOwnProperty(e)}function Ad(t,e,i){var n,r={},a="toggleSelected"===t;return i.eachComponent("legend",function(i){a&&null!=n?i[n?"select":"unSelect"](e.name):(i[t](e.name),n=i.isSelected(e.name));var o=i.getData();f(o,function(t){var e=t.get("name");if("\n"!==e&&""!==e){var n=i.isSelected(e);r[e]=r.hasOwnProperty(e)?r[e]&&n:n}})}),{name:e.name,selected:r}}function Dd(t,e){var i=rx(e.get("padding")),n=e.getItemStyle(["color","opacity"]);n.fill=e.get("backgroundColor");var t=new Dy({shape:{x:t.x-i[3],y:t.y-i[0],width:t.width+i[1]+i[3],height:t.height+i[0]+i[2],r:e.get("borderRadius")},style:n,silent:!0,z2:-1});return t}function kd(t,e){e.dispatchAction({type:"legendToggleSelect",name:t})}function Pd(t,e,i,n){var r=i.getZr().storage.getDisplayList()[0];r&&r.useHoverLayer||i.dispatchAction({type:"highlight",seriesName:t,name:e,excludeSeriesId:n})}function Ld(t,e,i,n){var r=i.getZr().storage.getDisplayList()[0];r&&r.useHoverLayer||i.dispatchAction({type:"downplay",seriesName:t,name:e,excludeSeriesId:n})}function Od(t,e,i){var n=t.getOrient(),r=[1,1];r[n.index]=0,So(e,i,{type:"box",ignoreSize:r})}function zd(t,e,i,n,r){var a=t.axis;if(!a.scale.isBlank()&&a.containData(e)){if(!t.involveSeries)return void i.showPointer(t,e);var s=Ed(e,t),l=s.payloadBatch,h=s.snapToValue;l[0]&&null==r.seriesIndex&&o(r,l[0]),!n&&t.snap&&a.containData(h)&&null!=h&&(e=h),i.showPointer(t,e,l,r),i.showTooltip(t,s,h)}}function Ed(t,e){var i=e.axis,n=i.dim,r=t,a=[],o=Number.MAX_VALUE,s=-1;return cM(e.seriesModels,function(e){var l,h,u=e.getData().mapDimension(n,!0);if(e.getAxisTooltipData){var c=e.getAxisTooltipData(u,t,i);h=c.dataIndices,l=c.nestestValue}else{if(h=e.getData().indicesOfNearest(u[0],t,"category"===i.type?.5:null),!h.length)return;l=e.getData().get(u[0],h[0])}if(null!=l&&isFinite(l)){var d=t-l,f=Math.abs(d);o>=f&&((o>f||d>=0&&0>s)&&(o=f,s=d,r=l,a.length=0),cM(h,function(t){a.push({seriesIndex:e.seriesIndex,dataIndexInside:t,dataIndex:e.getData().getRawIndex(t)})}))}}),{payloadBatch:a,snapToValue:r}}function Rd(t,e,i,n){t[e.key]={value:i,payloadBatch:n}}function Bd(t,e,i,n){var r=i.payloadBatch,a=e.axis,o=a.model,s=e.axisPointerModel;if(e.triggerTooltip&&r.length){var l=e.coordSys.model,h=Sc(l),u=t.map[h];u||(u=t.map[h]={coordSysId:l.id,coordSysIndex:l.componentIndex,coordSysType:l.type,coordSysMainType:l.mainType,dataByAxis:[]},t.list.push(u)),u.dataByAxis.push({axisDim:a.dim,axisIndex:o.componentIndex,axisType:o.type,axisId:o.id,value:n,valueLabelOpt:{precision:s.get("label.precision"),formatter:s.get("label.formatter")},seriesDataIndices:r.slice()})}}function Nd(t,e,i){var n=i.axesInfo=[];cM(e,function(e,i){var r=e.axisPointerModel.option,a=t[i];a?(!e.useHandle&&(r.status="show"),r.value=a.value,r.seriesDataIndices=(a.payloadBatch||[]).slice()):!e.useHandle&&(r.status="hide"),"show"===r.status&&n.push({axisDim:e.axis.dim,axisIndex:e.axis.model.componentIndex,value:r.value})})}function Fd(t,e,i,n){if(Hd(e)||!t.list.length)return void n({type:"hideTip"});var r=((t.list[0].dataByAxis[0]||{}).seriesDataIndices||[])[0]||{};n({type:"showTip",escapeConnect:!0,x:e[0],y:e[1],tooltipOption:i.tooltipOption,position:i.position,dataIndexInside:r.dataIndexInside,dataIndex:r.dataIndex,seriesIndex:r.seriesIndex,dataByCoordSys:t.list})}function Vd(t,e,i){var n=i.getZr(),r="axisPointerLastHighlights",a=fM(n)[r]||{},o=fM(n)[r]={};cM(t,function(t){var e=t.axisPointerModel.option;"show"===e.status&&cM(e.seriesDataIndices,function(t){var e=t.seriesIndex+" | "+t.dataIndex;o[e]=t})});var s=[],l=[];f(a,function(t,e){!o[e]&&l.push(t)}),f(o,function(t,e){!a[e]&&s.push(t)}),l.length&&i.dispatchAction({type:"downplay",escapeConnect:!0,batch:l}),s.length&&i.dispatchAction({type:"highlight",escapeConnect:!0,batch:s})}function Wd(t,e){for(var i=0;i<(t||[]).length;i++){var n=t[i];if(e.axis.dim===n.axisDim&&e.axis.model.componentIndex===n.axisIndex)return n}}function Gd(t){var e=t.axis.model,i={},n=i.axisDim=t.axis.dim;return i.axisIndex=i[n+"AxisIndex"]=e.componentIndex,i.axisName=i[n+"AxisName"]=e.name,i.axisId=i[n+"AxisId"]=e.id,i}function Hd(t){return!t||null==t[0]||isNaN(t[0])||null==t[1]||isNaN(t[1])}function Zd(t,e,i){if(!tg.node){var n=e.getZr();gM(n).records||(gM(n).records={}),Xd(n,e);var r=gM(n).records[t]||(gM(n).records[t]={});r.handler=i}}function Xd(t,e){function i(i,n){t.on(i,function(i){var r=Ud(e);vM(gM(t).records,function(t){t&&n(t,i,r.dispatchAction)}),Yd(r.pendings,e)})}gM(t).initialized||(gM(t).initialized=!0,i("click",x(qd,"click")),i("mousemove",x(qd,"mousemove")),i("globalout",jd))}function Yd(t,e){var i,n=t.showTip.length,r=t.hideTip.length;n?i=t.showTip[n-1]:r&&(i=t.hideTip[r-1]),i&&(i.dispatchAction=null,e.dispatchAction(i))}function jd(t,e,i){t.handler("leave",null,i)}function qd(t,e,i,n){e.handler(t,i,n)}function Ud(t){var e={showTip:[],hideTip:[]},i=function(n){var r=e[n.type];r?r.push(n):(n.dispatchAction=i,t.dispatchAction(n))};return{dispatchAction:i,pendings:e}}function $d(t,e){if(!tg.node){var i=e.getZr(),n=(gM(i).records||{})[t];n&&(gM(i).records[t]=null)}}function Kd(){}function Qd(t,e,i,n){Jd(yM(i).lastProp,n)||(yM(i).lastProp=n,e?La(i,n,t):(i.stopAnimation(),i.attr(n)))}function Jd(t,e){if(S(t)&&S(e)){var i=!0;return f(e,function(e,n){i=i&&Jd(t[n],e)}),!!i}return t===e}function tf(t,e){t[e.get("label.show")?"show":"hide"]()}function ef(t){return{position:t.position.slice(),rotation:t.rotation||0}}function nf(t,e,i){var n=e.get("z"),r=e.get("zlevel");t&&t.traverse(function(t){"group"!==t.type&&(null!=n&&(t.z=n),null!=r&&(t.zlevel=r),t.silent=i)})}function rf(t){var e,i=t.get("type"),n=t.getModel(i+"Style");return"line"===i?(e=n.getLineStyle(),e.fill=null):"shadow"===i&&(e=n.getAreaStyle(),e.stroke=null),e}function af(t,e,i,n,r){var a=i.get("value"),o=sf(a,e.axis,e.ecModel,i.get("seriesDataIndices"),{precision:i.get("label.precision"),formatter:i.get("label.formatter")}),s=i.getModel("label"),l=rx(s.get("padding")||0),h=s.getFont(),u=Ei(o,h),c=r.position,d=u.width+l[1]+l[3],f=u.height+l[0]+l[2],p=r.align;"right"===p&&(c[0]-=d),"center"===p&&(c[0]-=d/2);var g=r.verticalAlign;"bottom"===g&&(c[1]-=f),"middle"===g&&(c[1]-=f/2),of(c,d,f,n);var v=s.get("backgroundColor");v&&"auto"!==v||(v=e.get("axisLine.lineStyle.color")),t.label={shape:{x:0,y:0,width:d,height:f,r:s.get("borderRadius")},position:c.slice(),style:{text:o,textFont:h,textFill:s.getTextColor(),textPosition:"inside",fill:v,stroke:s.get("borderColor")||"transparent",lineWidth:s.get("borderWidth")||0,shadowBlur:s.get("shadowBlur"),shadowColor:s.get("shadowColor"),shadowOffsetX:s.get("shadowOffsetX"),shadowOffsetY:s.get("shadowOffsetY")},z2:10}}function of(t,e,i,n){var r=n.getWidth(),a=n.getHeight();t[0]=Math.min(t[0]+e,r)-e,t[1]=Math.min(t[1]+i,a)-i,t[0]=Math.max(t[0],0),t[1]=Math.max(t[1],0)}function sf(t,e,i,n,r){t=e.scale.parse(t);var a=e.scale.getLabel(t,{precision:r.precision}),o=r.formatter;if(o){var s={value:hu(e,t),seriesData:[]};f(n,function(t){var e=i.getSeriesByIndex(t.seriesIndex),n=t.dataIndexInside,r=e&&e.getDataParams(n);r&&s.seriesData.push(r)}),b(o)?a=o.replace("{value}",a):w(o)&&(a=o(s))}return a}function lf(t,e,i){var n=be();return Ce(n,n,i.rotation),Te(n,n,i.position),Ea([t.dataToCoord(e),(i.labelOffset||0)+(i.labelDirection||1)*(i.labelMargin||0)],n)}function hf(t,e,i,n,r,a){var o=Jb.innerTextLayout(i.rotation,0,i.labelDirection);i.labelMargin=r.get("label.margin"),af(e,n,r,a,{position:lf(n.axis,t,i),align:o.textAlign,verticalAlign:o.textVerticalAlign})}function uf(t,e,i){return i=i||0,{x1:t[i],y1:t[1-i],x2:e[i],y2:e[1-i]}}function cf(t,e,i){return i=i||0,{x:t[i],y:t[1-i],width:e[i],height:e[1-i]}}function df(t,e){var i={};return i[e.dim+"AxisIndex"]=e.index,t.getCartesian(i)}function ff(t){return"x"===t.dim?0:1}function pf(t){var e="cubic-bezier(0.23, 1, 0.32, 1)",i="left "+t+"s "+e+",top "+t+"s "+e;return p(IM,function(t){return t+"transition:"+i}).join(";")}function gf(t){var e=[],i=t.get("fontSize"),n=t.getTextColor();return n&&e.push("color:"+n),e.push("font:"+t.getFont()),i&&e.push("line-height:"+Math.round(3*i/2)+"px"),SM(["decoration","align"],function(i){var n=t.get(i);n&&e.push("text-"+i+":"+n)}),e.join(";")}function vf(t){var e=[],i=t.get("transitionDuration"),n=t.get("backgroundColor"),r=t.getModel("textStyle"),a=t.get("padding");return i&&e.push(pf(i)),n&&(tg.canvasSupported?e.push("background-Color:"+n):(e.push("background-Color:#"+je(n)),e.push("filter:alpha(opacity=70)"))),SM(["width","color","radius"],function(i){var n="border-"+i,r=MM(n),a=t.get(r);null!=a&&e.push(n+":"+a+("color"===i?"":"px"))}),e.push(gf(r)),null!=a&&e.push("padding:"+rx(a).join("px ")+"px"),e.join(";")+";"}function mf(t,e){if(tg.wxa)return null;var i=document.createElement("div"),n=this._zr=e.getZr();this.el=i,this._x=e.getWidth()/2,this._y=e.getHeight()/2,t.appendChild(i),this._container=t,this._show=!1,this._hideTimeout;var r=this;i.onmouseenter=function(){r._enterable&&(clearTimeout(r._hideTimeout),r._show=!0),r._inContent=!0},i.onmousemove=function(e){if(e=e||window.event,!r._enterable){var i=n.handler;pe(t,e,!0),i.dispatch("mousemove",e)}},i.onmouseleave=function(){r._enterable&&r._show&&r.hideLater(r._hideDelay),r._inContent=!1}}function yf(t){this._zr=t.getZr(),this._show=!1,this._hideTimeout}function xf(t){for(var e=t.pop();t.length;){var i=t.pop();i&&(Wa.isInstance(i)&&(i=i.get("tooltip",!0)),"string"==typeof i&&(i={formatter:i}),e=new Wa(i,e,e.ecModel))}return e}function _f(t,e){return t.dispatchAction||y(e.dispatchAction,e)}function wf(t,e,i,n,r,a,o){var s=i.getOuterSize(),l=s.width,h=s.height;return null!=a&&(t+l+a>n?t-=l+a:t+=a),null!=o&&(e+h+o>r?e-=h+o:e+=o),[t,e]}function bf(t,e,i,n,r){var a=i.getOuterSize(),o=a.width,s=a.height;return t=Math.min(t+o,n)-o,e=Math.min(e+s,r)-s,t=Math.max(t,0),e=Math.max(e,0),[t,e]}function Sf(t,e,i){var n=i[0],r=i[1],a=5,o=0,s=0,l=e.width,h=e.height;switch(t){case"inside":o=e.x+l/2-n/2,s=e.y+h/2-r/2;break;case"top":o=e.x+l/2-n/2,s=e.y-r-a;break;case"bottom":o=e.x+l/2-n/2,s=e.y+h+a;break;case"left":o=e.x-n-a,s=e.y+h/2-r/2;break;case"right":o=e.x+l+a,s=e.y+h/2-r/2}return[o,s]}function Mf(t){return"center"===t||"middle"===t}function If(t){Fn(t,"label",["show"])}function Tf(t){return!(isNaN(parseFloat(t.x))&&isNaN(parseFloat(t.y)))}function Cf(t){return!isNaN(parseFloat(t.x))&&!isNaN(parseFloat(t.y))}function Af(t,e,i,n,r,a){var o=[],s=Ph(e,n),l=s?e.getCalculationInfo("stackResultDimension"):n,h=zf(e,l,t),u=e.indicesOfNearest(l,h)[0];o[r]=e.get(i,u),o[a]=e.get(n,u);var c=Qa(e.get(n,u));return c=Math.min(c,20),c>=0&&(o[a]=+o[a].toFixed(c)),o}function Df(t,e){var i=t.getData(),r=t.coordinateSystem;if(e&&!Cf(e)&&!_(e.coord)&&r){var a=r.dimensions,o=kf(e,i,r,t);if(e=n(e),e.type&&RM[e.type]&&o.baseAxis&&o.valueAxis){var s=zM(a,o.baseAxis.dim),l=zM(a,o.valueAxis.dim);e.coord=RM[e.type](i,o.baseDataDim,o.valueDataDim,s,l),e.value=e.coord[l]}else{for(var h=[null!=e.xAxis?e.xAxis:e.radiusAxis,null!=e.yAxis?e.yAxis:e.angleAxis],u=0;2>u;u++)RM[h[u]]&&(h[u]=zf(i,i.mapDimension(a[u]),h[u]));e.coord=h}}return e}function kf(t,e,i,n){var r={};return null!=t.valueIndex||null!=t.valueDim?(r.valueDataDim=null!=t.valueIndex?e.getDimension(t.valueIndex):t.valueDim,r.valueAxis=i.getAxis(Pf(n,r.valueDataDim)),r.baseAxis=i.getOtherAxis(r.valueAxis),r.baseDataDim=e.mapDimension(r.baseAxis.dim)):(r.baseAxis=n.getBaseAxis(),r.valueAxis=i.getOtherAxis(r.baseAxis),r.baseDataDim=e.mapDimension(r.baseAxis.dim),r.valueDataDim=e.mapDimension(r.valueAxis.dim)),r}function Pf(t,e){var i=t.getData(),n=i.dimensions;e=i.getDimension(e);for(var r=0;rn?t.coord&&t.coord[n]:t.value}function zf(t,e,i){if("average"===i){var n=0,r=0;return t.each(e,function(t){isNaN(t)||(n+=t,r++)}),n/r}return"median"===i?t.getMedian(e):t.getDataExtent(e,!0)["max"===i?1:0]}function Ef(t,e,i){var n=e.coordinateSystem;t.each(function(r){var a,o=t.getItemModel(r),s=Ua(o.get("x"),i.getWidth()),l=Ua(o.get("y"),i.getHeight());if(isNaN(s)||isNaN(l)){if(e.getMarkerPosition)a=e.getMarkerPosition(t.getValues(t.dimensions,r));else if(n){var h=t.get(n.dimensions[0],r),u=t.get(n.dimensions[1],r);a=n.dataToPoint([h,u])}}else a=[s,l];isNaN(s)||(a[0]=s),isNaN(l)||(a[1]=l),t.setItemLayout(r,a)})}function Rf(t,e,i){var n;n=t?p(t&&t.dimensions,function(t){var i=e.getData().getDimensionInfo(e.getData().mapDimension(t))||{};return s({name:t},i)}):[{name:"value",type:"float"}];var r=new Bw(n,i),a=p(i.get("data"),x(Df,e));return t&&(a=v(a,x(Lf,t))),r.initData(a,null,t?Of:function(t){return t.value}),r}function Bf(t){return isNaN(+t.cpx1)||isNaN(+t.cpy1)}function Nf(t){return"_"+t+"Type"}function Ff(t,e,i){var n=e.getItemVisual(i,"color"),r=e.getItemVisual(i,t),a=e.getItemVisual(i,t+"Size");if(r&&"none"!==r){_(a)||(a=[a,a]);var o=fu(r,-a[0]/2,-a[1]/2,a[0],a[1],n);return o.name=t,o}}function Vf(t){var e=new VM({name:"line"});return Wf(e.shape,t),e}function Wf(t,e){var i=e[0],n=e[1],r=e[2];t.x1=i[0],t.y1=i[1],t.x2=n[0],t.y2=n[1],t.percent=1,r?(t.cpx1=r[0],t.cpy1=r[1]):(t.cpx1=0/0,t.cpy1=0/0)}function Gf(){var t=this,e=t.childOfName("fromSymbol"),i=t.childOfName("toSymbol"),n=t.childOfName("label");if(e||i||!n.ignore){for(var r=1,a=this.parent;a;)a.scale&&(r/=a.scale[0]),a=a.parent;var o=t.childOfName("line");if(this.__dirty||o.__dirty){var s=o.shape.percent,l=o.pointAt(0),h=o.pointAt(s),u=j([],h,l);if(te(u,u),e){e.attr("position",l);var c=o.tangentAt(0);e.attr("rotation",Math.PI/2-Math.atan2(c[1],c[0])),e.attr("scale",[r*s,r*s])}if(i){i.attr("position",h);var c=o.tangentAt(1);i.attr("rotation",-Math.PI/2-Math.atan2(c[1],c[0])),i.attr("scale",[r*s,r*s])}if(!n.ignore){n.attr("position",h);var d,f,p,g=5*r;if("end"===n.__position)d=[u[0]*g+h[0],u[1]*g+h[1]],f=u[0]>.8?"left":u[0]<-.8?"right":"center",p=u[1]>.8?"top":u[1]<-.8?"bottom":"middle";else if("middle"===n.__position){var v=s/2,c=o.tangentAt(v),m=[c[1],-c[0]],y=o.pointAt(v);m[1]>0&&(m[0]=-m[0],m[1]=-m[1]),d=[y[0]+m[0]*g,y[1]+m[1]*g],f="center",p="bottom";var x=-Math.atan2(c[1],c[0]);h[0].8?"right":u[0]<-.8?"left":"center",p=u[1]>.8?"bottom":u[1]<-.8?"top":"middle";n.attr({style:{textVerticalAlign:n.__verticalAlign||p,textAlign:n.__textAlign||f},position:d,scale:[r,r]})}}}}function Hf(t,e,i){lv.call(this),this._createLine(t,e,i)}function Zf(t){this._ctor=t||Hf,this.group=new lv}function Xf(t,e,i,n){var r=e.getItemLayout(i);if(Uf(r)){var a=new t._ctor(e,i,n);e.setItemGraphicEl(i,a),t.group.add(a)}}function Yf(t,e,i,n,r,a){var o=e.getItemGraphicEl(n);return Uf(i.getItemLayout(r))?(o?o.updateData(i,r,a):o=new t._ctor(i,r,a),i.setItemGraphicEl(r,o),void t.group.add(o)):void t.group.remove(o)}function jf(t){var e=t.hostModel;return{lineStyle:e.getModel("lineStyle").getLineStyle(),hoverLineStyle:e.getModel("emphasis.lineStyle").getLineStyle(),labelModel:e.getModel("label"),hoverLabelModel:e.getModel("emphasis.label")}}function qf(t){return isNaN(t[0])||isNaN(t[1])}function Uf(t){return!qf(t[0])&&!qf(t[1])}function $f(t){return!isNaN(t)&&!isFinite(t)}function Kf(t,e,i,n){var r=1-t,a=n.dimensions[t];return $f(e[r])&&$f(i[r])&&e[t]===i[t]&&n.getAxis(a).containData(e[t])}function Qf(t,e){if("cartesian2d"===t.type){var i=e[0].coord,n=e[1].coord;if(i&&n&&(Kf(1,i,n,t)||Kf(0,i,n,t)))return!0}return Lf(t,e[0])&&Lf(t,e[1])}function Jf(t,e,i,n,r){var a,o=n.coordinateSystem,s=t.getItemModel(e),l=Ua(s.get("x"),r.getWidth()),h=Ua(s.get("y"),r.getHeight());if(isNaN(l)||isNaN(h)){if(n.getMarkerPosition)a=n.getMarkerPosition(t.getValues(t.dimensions,e));else{var u=o.dimensions,c=t.get(u[0],e),d=t.get(u[1],e);a=o.dataToPoint([c,d])}if("cartesian2d"===o.type){var f=o.getAxis("x"),p=o.getAxis("y"),u=o.dimensions;$f(t.get(u[0],e))?a[0]=f.toGlobalCoord(f.getExtent()[i?0:1]):$f(t.get(u[1],e))&&(a[1]=p.toGlobalCoord(p.getExtent()[i?0:1]))}isNaN(l)||(a[0]=l),isNaN(h)||(a[1]=h)}else a=[l,h];t.setItemLayout(e,a)}function tp(t,e,i){var n;n=t?p(t&&t.dimensions,function(t){var i=e.getData().getDimensionInfo(e.getData().mapDimension(t))||{};return s({name:t},i)}):[{name:"value",type:"float"}];var r=new Bw(n,i),a=new Bw(n,i),o=new Bw([],i),l=p(i.get("data"),x(ZM,e,t,i));t&&(l=v(l,x(Qf,t)));var h=t?Of:function(t){return t.value};return r.initData(p(l,function(t){return t[0]}),null,h),a.initData(p(l,function(t){return t[1]}),null,h),o.initData(p(l,function(t){return t[2]})),o.hasItemOption=!0,{from:r,to:a,line:o}}function ep(t){return!isNaN(t)&&!isFinite(t)}function ip(t,e,i){var n=1-t;return ep(e[n])&&ep(i[n])}function np(t,e){var i=e.coord[0],n=e.coord[1];return"cartesian2d"===t.type&&i&&n&&(ip(1,i,n,t)||ip(0,i,n,t))?!0:Lf(t,{coord:i,x:e.x0,y:e.y0})||Lf(t,{coord:n,x:e.x1,y:e.y1})}function rp(t,e,i,n,r){var a,o=n.coordinateSystem,s=t.getItemModel(e),l=Ua(s.get(i[0]),r.getWidth()),h=Ua(s.get(i[1]),r.getHeight());if(isNaN(l)||isNaN(h)){if(n.getMarkerPosition)a=n.getMarkerPosition(t.getValues(i,e));else{var u=t.get(i[0],e),c=t.get(i[1],e),d=[u,c];o.clampData&&o.clampData(d,d),a=o.dataToPoint(d,!0)}if("cartesian2d"===o.type){var f=o.getAxis("x"),p=o.getAxis("y"),u=t.get(i[0],e),c=t.get(i[1],e);ep(u)?a[0]=f.toGlobalCoord(f.getExtent()["x0"===i[0]?0:1]):ep(c)&&(a[1]=p.toGlobalCoord(p.getExtent()["y0"===i[1]?0:1]))}isNaN(l)||(a[0]=l),isNaN(h)||(a[1]=h)}else a=[l,h];return a}function ap(t,e,i){var n,r,a=["x0","y0","x1","y1"];t?(n=p(t&&t.dimensions,function(t){var i=e.getData(),n=i.getDimensionInfo(i.mapDimension(t))||{};return s({name:t},n)}),r=new Bw(p(a,function(t,e){return{name:t,type:n[e%2].type}}),i)):(n=[{name:"value",type:"float"}],r=new Bw(n,i));var o=p(i.get("data"),x(XM,e,t,i));t&&(o=v(o,x(np,t)));var l=t?function(t,e,i,n){return t.coord[Math.floor(n/2)][n%2]}:function(t){return t.value};return r.initData(o,null,l),r.hasItemOption=!0,r}function op(t){var e=t.type,i={number:"value",time:"time"};if(i[e]&&(t.axisType=i[e],delete t.type),sp(t),lp(t,"controlPosition")){var n=t.controlStyle||(t.controlStyle={});lp(n,"position")||(n.position=t.controlPosition),"none"!==n.position||lp(n,"show")||(n.show=!1,delete n.position),delete t.controlPosition}f(t.data||[],function(t){S(t)&&!_(t)&&(!lp(t,"value")&&lp(t,"name")&&(t.value=t.name),sp(t))})}function sp(t){var e=t.itemStyle||(t.itemStyle={}),i=e.emphasis||(e.emphasis={}),n=t.label||t.label||{},r=n.normal||(n.normal={}),a={normal:1,emphasis:1};f(n,function(t,e){a[e]||lp(r,e)||(r[e]=t)}),i.label&&!lp(n,"emphasis")&&(n.emphasis=i.label,delete i.label)}function lp(t,e){return t.hasOwnProperty(e)}function hp(t,e){return bo(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()},t.get("padding"))}function up(t,e,i,r){var a=Qr(t.get(e).replace(/^path:\/\//,""),n(r||{}),new gi(i[0],i[1],i[2],i[3]),"center");return a}function cp(t,e,i,n,a,o){var s=e.get("color");if(a)a.setColor(s),i.add(a),o&&o.onUpdate(a);else{var l=t.get("symbol");a=fu(l,-1,-1,2,2,s),a.setStyle("strokeNoScale",!0),i.add(a),o&&o.onCreate(a)}var h=e.getItemStyle(["color","symbol","symbolSize"]);a.setStyle(h),n=r({rectHover:!0,z2:100},n,!0);var u=t.get("symbolSize");u=u instanceof Array?u.slice():[+u,+u],u[0]/=2,u[1]/=2,n.scale=u;var c=t.get("symbolOffset");if(c){var d=n.position=n.position||[0,0];d[0]+=Ua(c[0],u[0]),d[1]+=Ua(c[1],u[1])}var f=t.get("symbolRotate");return n.rotation=(f||0)*Math.PI/180||0,a.attr(n),a.updateTransform(),a}function dp(t,e,i,n,r){if(!t.dragging){var a=n.getModel("checkpointStyle"),o=i.dataToCoord(n.getData().get(["value"],e));r||!a.get("animation",!0)?t.attr({position:[o,0]}):(t.stopAnimation(!0),t.animateTo({position:[o,0]},a.get("animationDuration",!0),a.get("animationEasing",!0)))}}function fp(t){return h(iI,t)>=0}function pp(t,e){t=t.slice();var i=p(t,_o);e=(e||[]).slice();var n=p(e,_o);return function(r,a){f(t,function(t,o){for(var s={name:t,capital:i[o]},l=0;l=0}function r(t,n){var r=!1;return e(function(e){f(i(t,e)||[],function(t){n.records[e.name][t]&&(r=!0)})}),r}function a(t,n){n.nodes.push(t),e(function(e){f(i(t,e)||[],function(t){n.records[e.name][t]=!0})})}return function(i){function o(t){!n(t,s)&&r(t,s)&&(a(t,s),l=!0)}var s={nodes:[],records:{}};if(e(function(t){s.records[t.name]={}}),!i)return s;a(i,s);var l;do l=!1,t(o);while(l);return s}}function vp(t,e,i){var n=[1/0,-1/0];return rI(i,function(t){var i=t.getData();i&&rI(i.mapDimension(e,!0),function(t){var e=i.getApproximateExtent(t);e[0]n[1]&&(n[1]=e[1])})}),n[1]0?0:0/0);var o=i.getMax(!0);return null!=o&&"dataMax"!==o&&"function"!=typeof o?e[1]=o:r&&(e[1]=a>0?a-1:0/0),i.get("scale",!0)||(e[0]>0&&(e[0]=0),e[1]<0&&(e[1]=0)),e}function yp(t,e){var i=t.getAxisModel(),n=t._percentWindow,r=t._valueWindow;if(n){var a=to(r,[0,500]);a=Math.min(a,20);var o=e||0===n[0]&&100===n[1];i.setRange(o?null:+r[0].toFixed(a),o?null:+r[1].toFixed(a))}}function xp(t){var e=t._minMaxSpan={},i=t._dataZoomModel;rI(["min","max"],function(n){e[n+"Span"]=i.get(n+"Span");var r=i.get(n+"ValueSpan");if(null!=r&&(e[n+"ValueSpan"]=r,r=t.getAxisModel().axis.scale.parse(r),null!=r)){var a=t._dataExtent;e[n+"Span"]=qa(a[0]+r,a,[0,100],!0)}})}function _p(t){var e={};return sI(["start","end","startValue","endValue","throttle"],function(i){t.hasOwnProperty(i)&&(e[i]=t[i])}),e}function wp(t,e){var i=t._rangePropMode,n=t.get("rangeMode");sI([["start","startValue"],["end","endValue"]],function(t,r){var a=null!=e[t[0]],o=null!=e[t[1]];a&&!o?i[r]="percent":!a&&o?i[r]="value":n?i[r]=n[r]:a&&(i[r]="percent")})}function bp(t,e){var i=t[e]-t[1-e];return{span:Math.abs(i),sign:i>0?-1:0>i?1:e?-1:1}}function Sp(t,e){return Math.min(e[1],Math.max(e[0],t))}function Mp(t){var e={x:"y",y:"x",radius:"angle",angle:"radius"};return e[t]}function Ip(t){return"vertical"===t?"ns-resize":"ew-resize"}function Tp(t,e){return!!Cp(t)[e]}function Cp(t){return t[II]||(t[II]={})}function Ap(t){this.pointerChecker,this._zr=t,this._opt={};var e=y,i=e(Dp,this),r=e(kp,this),a=e(Pp,this),o=e(Lp,this),l=e(Op,this);bg.call(this),this.setPointerChecker=function(t){this.pointerChecker=t},this.enable=function(e,h){this.disable(),this._opt=s(n(h)||{},{zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!1,preventDefaultMouseMove:!0}),null==e&&(e=!0),(e===!0||"move"===e||"pan"===e)&&(t.on("mousedown",i),t.on("mousemove",r),t.on("mouseup",a)),(e===!0||"scale"===e||"zoom"===e)&&(t.on("mousewheel",o),t.on("pinch",l))},this.disable=function(){t.off("mousedown",i),t.off("mousemove",r),t.off("mouseup",a),t.off("mousewheel",o),t.off("pinch",l)},this.dispose=this.disable,this.isDragging=function(){return this._dragging},this.isPinching=function(){return this._pinching}}function Dp(t){if(!(me(t)||t.target&&t.target.draggable)){var e=t.offsetX,i=t.offsetY;this.pointerChecker&&this.pointerChecker(t,e,i)&&(this._x=e,this._y=i,this._dragging=!0)}}function kp(t){if(!me(t)&&Rp("moveOnMouseMove",t,this._opt)&&this._dragging&&"pinch"!==t.gestureEvent&&!Tp(this._zr,"globalPan")){var e=t.offsetX,i=t.offsetY,n=this._x,r=this._y,a=e-n,o=i-r;this._x=e,this._y=i,this._opt.preventDefaultMouseMove&&Ig(t.event),Ep(this,"pan","moveOnMouseMove",t,{dx:a,dy:o,oldX:n,oldY:r,newX:e,newY:i})}}function Pp(t){me(t)||(this._dragging=!1)}function Lp(t){var e=Rp("zoomOnMouseWheel",t,this._opt),i=Rp("moveOnMouseWheel",t,this._opt),n=t.wheelDelta,r=Math.abs(n),a=t.offsetX,o=t.offsetY;if(0!==n&&(e||i)){if(e){var s=r>3?1.4:r>1?1.2:1.1,l=n>0?s:1/s;zp(this,"zoom","zoomOnMouseWheel",t,{scale:l,originX:a,originY:o})}if(i){var h=Math.abs(n),u=(n>0?1:-1)*(h>3?.4:h>1?.15:.05);zp(this,"scrollMove","moveOnMouseWheel",t,{scrollDelta:u,originX:a,originY:o})}}}function Op(t){if(!Tp(this._zr,"globalPan")){var e=t.pinchScale>1?1.1:1/1.1;zp(this,"zoom",null,t,{scale:e,originX:t.pinchX,originY:t.pinchY})}}function zp(t,e,i,n,r){t.pointerChecker&&t.pointerChecker(n,r.originX,r.originY)&&(Ig(n.event),Ep(t,e,i,n,r))}function Ep(t,e,i,n,r){r.isAvailableBehavior=y(Rp,null,i,n),t.trigger(e,r)}function Rp(t,e,i){var n=i[t];return!t||n&&(!b(n)||e.event[n+"Key"])}function Bp(t,e){var i=Vp(t),n=e.dataZoomId,r=e.coordId;f(i,function(t){var i=t.dataZoomInfos;i[n]&&h(e.allCoordIds,r)<0&&(delete i[n],t.count--)}),Gp(i);var a=i[r];a||(a=i[r]={coordId:r,dataZoomInfos:{},count:0},a.controller=Wp(t,a),a.dispatchAction=x(Hp,t)),!a.dataZoomInfos[n]&&a.count++,a.dataZoomInfos[n]=e;var o=Zp(a.dataZoomInfos);a.controller.enable(o.controlType,o.opt),a.controller.setPointerChecker(e.containsPoint),Hs(a,"dispatchAction",e.dataZoomModel.get("throttle",!0),"fixRate")}function Np(t,e){var i=Vp(t);f(i,function(t){t.controller.dispose();var i=t.dataZoomInfos;i[e]&&(delete i[e],t.count--)}),Gp(i)}function Fp(t){return t.type+"\x00_"+t.id}function Vp(t){var e=t.getZr();return e[TI]||(e[TI]={})}function Wp(t,e){var i=new Ap(t.getZr());return f(["pan","zoom","scrollMove"],function(t){i.on(t,function(i){var n=[];f(e.dataZoomInfos,function(r){if(i.isAvailableBehavior(r.dataZoomModel.option)){var a=(r.getRange||{})[t],o=a&&a(e.controller,i);!r.dataZoomModel.get("disabled",!0)&&o&&n.push({dataZoomId:r.dataZoomId,start:o[0],end:o[1]})}}),n.length&&e.dispatchAction(n)})}),i}function Gp(t){f(t,function(e,i){e.count||(e.controller.dispose(),delete t[i])})}function Hp(t,e){t.dispatchAction({type:"dataZoom",batch:e})}function Zp(t){var e,i="type_",n={type_true:2,type_move:1,type_false:0,type_undefined:-1},r=!0;return f(t,function(t){var a=t.dataZoomModel,o=a.get("disabled",!0)?!1:a.get("zoomLock",!0)?"move":!0;n[i+o]>n[i+e]&&(e=o),r&=a.get("preventDefaultMouseMove",!0)}),{controlType:e,opt:{zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!0,preventDefaultMouseMove:!!r}}}function Xp(t){return function(e,i,n,r){var a=this._range,o=a.slice(),s=e.axisModels[0];if(s){var l=t(o,s,e,i,n,r);return cI(l,o,[0,100],"all"),this._range=o,a[0]!==o[0]||a[1]!==o[1]?o:void 0}}}function Yp(t){return PI(t)}function jp(){if(!zI&&EI){zI=!0;var t=EI.styleSheets;t.length<31?EI.createStyleSheet().addRule(".zrvml","behavior:url(#default#VML)"):t[0].addRule(".zrvml","behavior:url(#default#VML)")}}function qp(t){return parseInt(t,10)}function Up(t,e){jp(),this.root=t,this.storage=e;var i=document.createElement("div"),n=document.createElement("div");i.style.cssText="display:inline-block;overflow:hidden;position:relative;width:300px;height:150px;",n.style.cssText="position:absolute;left:0;top:0;",t.appendChild(i),this._vmlRoot=n,this._vmlViewport=i,this.resize();var r=e.delFromStorage,a=e.addToStorage;e.delFromStorage=function(t){r.call(e,t),t&&t.onRemove&&t.onRemove(n)},e.addToStorage=function(t){t.onAdd&&t.onAdd(n),a.call(e,t) -},this._firstPaint=!0}function $p(t){return function(){iv('In IE8.0 VML mode painter not support method "'+t+'"')}}var Kp=2311,Qp=function(){return Kp++},Jp={};Jp="object"==typeof wx&&"function"==typeof wx.getSystemInfoSync?{browser:{},os:{},node:!1,wxa:!0,canvasSupported:!0,svgSupported:!1,touchEventsSupported:!0,domSupported:!1}:"undefined"==typeof document&&"undefined"!=typeof self?{browser:{},os:{},node:!1,worker:!0,canvasSupported:!0,domSupported:!1}:"undefined"==typeof navigator?{browser:{},os:{},node:!0,worker:!1,canvasSupported:!0,svgSupported:!0,domSupported:!1}:e(navigator.userAgent);var tg=Jp,eg={"[object Function]":1,"[object RegExp]":1,"[object Date]":1,"[object Error]":1,"[object CanvasGradient]":1,"[object CanvasPattern]":1,"[object Image]":1,"[object Canvas]":1},ig={"[object Int8Array]":1,"[object Uint8Array]":1,"[object Uint8ClampedArray]":1,"[object Int16Array]":1,"[object Uint16Array]":1,"[object Int32Array]":1,"[object Uint32Array]":1,"[object Float32Array]":1,"[object Float64Array]":1},ng=Object.prototype.toString,rg=Array.prototype,ag=rg.forEach,og=rg.filter,sg=rg.slice,lg=rg.map,hg=rg.reduce,ug={},cg=function(){return ug.createCanvas()};ug.createCanvas=function(){return document.createElement("canvas")};var dg,fg="__ec_primitive__";B.prototype={constructor:B,get:function(t){return this.data.hasOwnProperty(t)?this.data[t]:null},set:function(t,e){return this.data[t]=e},each:function(t,e){void 0!==e&&(t=y(t,e));for(var i in this.data)this.data.hasOwnProperty(i)&&t(this.data[i],i)},removeKey:function(t){delete this.data[t]}};var pg=(Object.freeze||Object)({$override:i,clone:n,merge:r,mergeAll:a,extend:o,defaults:s,createCanvas:cg,getContext:l,indexOf:h,inherits:u,mixin:c,isArrayLike:d,each:f,map:p,reduce:g,filter:v,find:m,bind:y,curry:x,isArray:_,isFunction:w,isString:b,isObject:S,isBuiltInObject:M,isTypedArray:I,isDom:T,eqNaN:C,retrieve:A,retrieve2:D,retrieve3:k,slice:P,normalizeCssArray:L,assert:O,trim:z,setAsPrimitive:E,isPrimitive:R,createHashMap:N,concatArray:F,noop:V}),gg="undefined"==typeof Float32Array?Array:Float32Array,vg=q,mg=U,yg=ee,xg=ie,_g=(Object.freeze||Object)({create:W,copy:G,clone:H,set:Z,add:X,scaleAndAdd:Y,sub:j,len:q,length:vg,lenSquare:U,lengthSquare:mg,mul:$,div:K,dot:Q,scale:J,normalize:te,distance:ee,dist:yg,distanceSquare:ie,distSquare:xg,negate:ne,lerp:re,applyTransform:ae,min:oe,max:se});le.prototype={constructor:le,_dragStart:function(t){var e=t.target;e&&e.draggable&&(this._draggingTarget=e,e.dragging=!0,this._x=t.offsetX,this._y=t.offsetY,this.dispatchToElement(he(e,t),"dragstart",t.event))},_drag:function(t){var e=this._draggingTarget;if(e){var i=t.offsetX,n=t.offsetY,r=i-this._x,a=n-this._y;this._x=i,this._y=n,e.drift(r,a,t),this.dispatchToElement(he(e,t),"drag",t.event);var o=this.findHover(i,n,e).target,s=this._dropTarget;this._dropTarget=o,e!==o&&(s&&o!==s&&this.dispatchToElement(he(s,t),"dragleave",t.event),o&&o!==s&&this.dispatchToElement(he(o,t),"dragenter",t.event))}},_dragEnd:function(t){var e=this._draggingTarget;e&&(e.dragging=!1),this.dispatchToElement(he(e,t),"dragend",t.event),this._dropTarget&&this.dispatchToElement(he(this._dropTarget,t),"drop",t.event),this._draggingTarget=null,this._dropTarget=null}};var wg=Array.prototype.slice,bg=function(t){this._$handlers={},this._$eventProcessor=t};bg.prototype={constructor:bg,one:function(t,e,i,n){var r=this._$handlers;if("function"==typeof e&&(n=i,i=e,e=null),!i||!t)return this;e=ue(this,e),r[t]||(r[t]=[]);for(var a=0;ar;r++)i[t][r].h!==e&&n.push(i[t][r]);i[t]=n}i[t]&&0===i[t].length&&delete i[t]}else delete i[t];return this},trigger:function(t){var e=this._$handlers[t],i=this._$eventProcessor;if(e){var n=arguments,r=n.length;r>3&&(n=wg.call(n,1));for(var a=e.length,o=0;a>o;){var s=e[o];if(i&&i.filter&&null!=s.query&&!i.filter(t,s.query))o++;else{switch(r){case 1:s.h.call(s.ctx);break;case 2:s.h.call(s.ctx,n[1]);break;case 3:s.h.call(s.ctx,n[1],n[2]);break;default:s.h.apply(s.ctx,n)}s.one?(e.splice(o,1),a--):o++}}}return i&&i.afterTrigger&&i.afterTrigger(t),this},triggerWithContext:function(t){var e=this._$handlers[t],i=this._$eventProcessor;if(e){var n=arguments,r=n.length;r>4&&(n=wg.call(n,1,n.length-1));for(var a=n[n.length-1],o=e.length,s=0;o>s;){var l=e[s];if(i&&i.filter&&null!=l.query&&!i.filter(t,l.query))s++;else{switch(r){case 1:l.h.call(a);break;case 2:l.h.call(a,n[1]);break;case 3:l.h.call(a,n[1],n[2]);break;default:l.h.apply(a,n)}l.one?(e.splice(s,1),o--):s++}}}return i&&i.afterTrigger&&i.afterTrigger(t),this}};var Sg="undefined"!=typeof window&&!!window.addEventListener,Mg=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ig=Sg?function(t){t.preventDefault(),t.stopPropagation(),t.cancelBubble=!0}:function(t){t.returnValue=!1,t.cancelBubble=!0},Tg="silent";_e.prototype.dispose=function(){};var Cg=["click","dblclick","mousewheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],Ag=function(t,e,i,n){bg.call(this),this.storage=t,this.painter=e,this.painterRoot=n,i=i||new _e,this.proxy=null,this._hovered={},this._lastTouchMoment,this._lastX,this._lastY,le.call(this),this.setHandlerProxy(i)};Ag.prototype={constructor:Ag,setHandlerProxy:function(t){this.proxy&&this.proxy.dispose(),t&&(f(Cg,function(e){t.on&&t.on(e,this[e],this)},this),t.handler=this),this.proxy=t},mousemove:function(t){var e=t.zrX,i=t.zrY,n=this._hovered,r=n.target;r&&!r.__zr&&(n=this.findHover(n.x,n.y),r=n.target);var a=this._hovered=this.findHover(e,i),o=a.target,s=this.proxy;s.setCursor&&s.setCursor(o?o.cursor:"default"),r&&o!==r&&this.dispatchToElement(n,"mouseout",t),this.dispatchToElement(a,"mousemove",t),o&&o!==r&&this.dispatchToElement(a,"mouseover",t)},mouseout:function(t){this.dispatchToElement(this._hovered,"mouseout",t);var e,i=t.toElement||t.relatedTarget;do i=i&&i.parentNode;while(i&&9!=i.nodeType&&!(e=i===this.painterRoot));!e&&this.trigger("globalout",{event:t})},resize:function(){this._hovered={}},dispatch:function(t,e){var i=this[t];i&&i.call(this,e)},dispose:function(){this.proxy.dispose(),this.storage=this.proxy=this.painter=null},setCursorStyle:function(t){var e=this.proxy;e.setCursor&&e.setCursor(t)},dispatchToElement:function(t,e,i){t=t||{};var n=t.target;if(!n||!n.silent){for(var r="on"+e,a=ye(e,t,i);n&&(n[r]&&(a.cancelBubble=n[r].call(n,a)),n.trigger(e,a),n=n.parent,!a.cancelBubble););a.cancelBubble||(this.trigger(e,a),this.painter&&this.painter.eachOtherLayer(function(t){"function"==typeof t[r]&&t[r].call(t,a),t.trigger&&t.trigger(e,a)}))}},findHover:function(t,e,i){for(var n=this.storage.getDisplayList(),r={x:t,y:e},a=n.length-1;a>=0;a--){var o;if(n[a]!==i&&!n[a].ignore&&(o=we(n[a],t,e))&&(!r.topTarget&&(r.topTarget=n[a]),o!==Tg)){r.target=n[a];break}}return r}},f(["click","mousedown","mouseup","mousewheel","dblclick","contextmenu"],function(t){Ag.prototype[t]=function(e){var i=this.findHover(e.zrX,e.zrY),n=i.target;if("mousedown"===t)this._downEl=n,this._downPoint=[e.zrX,e.zrY],this._upEl=n;else if("mouseup"===t)this._upEl=n;else if("click"===t){if(this._downEl!==this._upEl||!this._downPoint||yg(this._downPoint,[e.zrX,e.zrY])>4)return;this._downPoint=null}this.dispatchToElement(i,t,e)}}),c(Ag,bg),c(Ag,le);var Dg="undefined"==typeof Float32Array?Array:Float32Array,kg=(Object.freeze||Object)({create:be,identity:Se,copy:Me,mul:Ie,translate:Te,rotate:Ce,scale:Ae,invert:De,clone:ke}),Pg=Se,Lg=5e-5,Og=function(t){t=t||{},t.position||(this.position=[0,0]),null==t.rotation&&(this.rotation=0),t.scale||(this.scale=[1,1]),this.origin=this.origin||null},zg=Og.prototype;zg.transform=null,zg.needLocalTransform=function(){return Pe(this.rotation)||Pe(this.position[0])||Pe(this.position[1])||Pe(this.scale[0]-1)||Pe(this.scale[1]-1)};var Eg=[];zg.updateTransform=function(){var t=this.parent,e=t&&t.transform,i=this.needLocalTransform(),n=this.transform;if(!i&&!e)return void(n&&Pg(n));n=n||be(),i?this.getLocalTransform(n):Pg(n),e&&(i?Ie(n,t.transform,n):Me(n,t.transform)),this.transform=n;var r=this.globalScaleRatio;if(null!=r&&1!==r){this.getGlobalScale(Eg);var a=Eg[0]<0?-1:1,o=Eg[1]<0?-1:1,s=((Eg[0]-a)*r+a)/Eg[0]||0,l=((Eg[1]-o)*r+o)/Eg[1]||0;n[0]*=s,n[1]*=s,n[2]*=l,n[3]*=l}this.invTransform=this.invTransform||be(),De(this.invTransform,n)},zg.getLocalTransform=function(t){return Og.getLocalTransform(this,t)},zg.setTransform=function(t){var e=this.transform,i=t.dpr||1;e?t.setTransform(i*e[0],i*e[1],i*e[2],i*e[3],i*e[4],i*e[5]):t.setTransform(i,0,0,i,0,0)},zg.restoreTransform=function(t){var e=t.dpr||1;t.setTransform(e,0,0,e,0,0)};var Rg=[],Bg=be();zg.setLocalTransform=function(t){if(t){var e=t[0]*t[0]+t[1]*t[1],i=t[2]*t[2]+t[3]*t[3],n=this.position,r=this.scale;Pe(e-1)&&(e=Math.sqrt(e)),Pe(i-1)&&(i=Math.sqrt(i)),t[0]<0&&(e=-e),t[3]<0&&(i=-i),n[0]=t[4],n[1]=t[5],r[0]=e,r[1]=i,this.rotation=Math.atan2(-t[1]/i,t[0]/e)}},zg.decomposeTransform=function(){if(this.transform){var t=this.parent,e=this.transform;t&&t.transform&&(Ie(Rg,t.invTransform,e),e=Rg);var i=this.origin;i&&(i[0]||i[1])&&(Bg[4]=i[0],Bg[5]=i[1],Ie(Rg,e,Bg),Rg[4]-=i[0],Rg[5]-=i[1],e=Rg),this.setLocalTransform(e)}},zg.getGlobalScale=function(t){var e=this.transform;return t=t||[],e?(t[0]=Math.sqrt(e[0]*e[0]+e[1]*e[1]),t[1]=Math.sqrt(e[2]*e[2]+e[3]*e[3]),e[0]<0&&(t[0]=-t[0]),e[3]<0&&(t[1]=-t[1]),t):(t[0]=1,t[1]=1,t)},zg.transformCoordToLocal=function(t,e){var i=[t,e],n=this.invTransform;return n&&ae(i,i,n),i},zg.transformCoordToGlobal=function(t,e){var i=[t,e],n=this.transform;return n&&ae(i,i,n),i},Og.getLocalTransform=function(t,e){e=e||[],Pg(e);var i=t.origin,n=t.scale||[1,1],r=t.rotation||0,a=t.position||[0,0];return i&&(e[4]-=i[0],e[5]-=i[1]),Ae(e,e,n),r&&Ce(e,e,r),i&&(e[4]+=i[0],e[5]+=i[1]),e[4]+=a[0],e[5]+=a[1],e};var Ng={linear:function(t){return t},quadraticIn:function(t){return t*t},quadraticOut:function(t){return t*(2-t)},quadraticInOut:function(t){return(t*=2)<1?.5*t*t:-.5*(--t*(t-2)-1)},cubicIn:function(t){return t*t*t},cubicOut:function(t){return--t*t*t+1},cubicInOut:function(t){return(t*=2)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},quarticIn:function(t){return t*t*t*t},quarticOut:function(t){return 1- --t*t*t*t},quarticInOut:function(t){return(t*=2)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},quinticIn:function(t){return t*t*t*t*t},quinticOut:function(t){return--t*t*t*t*t+1},quinticInOut:function(t){return(t*=2)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},sinusoidalIn:function(t){return 1-Math.cos(t*Math.PI/2)},sinusoidalOut:function(t){return Math.sin(t*Math.PI/2)},sinusoidalInOut:function(t){return.5*(1-Math.cos(Math.PI*t))},exponentialIn:function(t){return 0===t?0:Math.pow(1024,t-1)},exponentialOut:function(t){return 1===t?1:1-Math.pow(2,-10*t)},exponentialInOut:function(t){return 0===t?0:1===t?1:(t*=2)<1?.5*Math.pow(1024,t-1):.5*(-Math.pow(2,-10*(t-1))+2)},circularIn:function(t){return 1-Math.sqrt(1-t*t)},circularOut:function(t){return Math.sqrt(1- --t*t)},circularInOut:function(t){return(t*=2)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},elasticIn:function(t){var e,i=.1,n=.4;return 0===t?0:1===t?1:(!i||1>i?(i=1,e=n/4):e=n*Math.asin(1/i)/(2*Math.PI),-(i*Math.pow(2,10*(t-=1))*Math.sin(2*(t-e)*Math.PI/n)))},elasticOut:function(t){var e,i=.1,n=.4;return 0===t?0:1===t?1:(!i||1>i?(i=1,e=n/4):e=n*Math.asin(1/i)/(2*Math.PI),i*Math.pow(2,-10*t)*Math.sin(2*(t-e)*Math.PI/n)+1)},elasticInOut:function(t){var e,i=.1,n=.4;return 0===t?0:1===t?1:(!i||1>i?(i=1,e=n/4):e=n*Math.asin(1/i)/(2*Math.PI),(t*=2)<1?-.5*i*Math.pow(2,10*(t-=1))*Math.sin(2*(t-e)*Math.PI/n):i*Math.pow(2,-10*(t-=1))*Math.sin(2*(t-e)*Math.PI/n)*.5+1)},backIn:function(t){var e=1.70158;return t*t*((e+1)*t-e)},backOut:function(t){var e=1.70158;return--t*t*((e+1)*t+e)+1},backInOut:function(t){var e=2.5949095;return(t*=2)<1?.5*t*t*((e+1)*t-e):.5*((t-=2)*t*((e+1)*t+e)+2)},bounceIn:function(t){return 1-Ng.bounceOut(1-t)},bounceOut:function(t){return 1/2.75>t?7.5625*t*t:2/2.75>t?7.5625*(t-=1.5/2.75)*t+.75:2.5/2.75>t?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},bounceInOut:function(t){return.5>t?.5*Ng.bounceIn(2*t):.5*Ng.bounceOut(2*t-1)+.5}};Le.prototype={constructor:Le,step:function(t,e){if(this._initialized||(this._startTime=t+this._delay,this._initialized=!0),this._paused)return void(this._pausedTime+=e);var i=(t-this._startTime-this._pausedTime)/this._life;if(!(0>i)){i=Math.min(i,1);var n=this.easing,r="string"==typeof n?Ng[n]:n,a="function"==typeof r?r(i):i;return this.fire("frame",a),1==i?this.loop?(this.restart(t),"restart"):(this._needsRemove=!0,"destroy"):null}},restart:function(t){var e=(t-this._startTime-this._pausedTime)%this._life;this._startTime=t-e+this.gap,this._pausedTime=0,this._needsRemove=!1},fire:function(t,e){t="on"+t,this[t]&&this[t](this._target,e)},pause:function(){this._paused=!0},resume:function(){this._paused=!1}};var Fg=function(){this.head=null,this.tail=null,this._len=0},Vg=Fg.prototype;Vg.insert=function(t){var e=new Wg(t);return this.insertEntry(e),e},Vg.insertEntry=function(t){this.head?(this.tail.next=t,t.prev=this.tail,t.next=null,this.tail=t):this.head=this.tail=t,this._len++},Vg.remove=function(t){var e=t.prev,i=t.next;e?e.next=i:this.head=i,i?i.prev=e:this.tail=e,t.next=t.prev=null,this._len--},Vg.len=function(){return this._len},Vg.clear=function(){this.head=this.tail=null,this._len=0};var Wg=function(t){this.value=t,this.next,this.prev},Gg=function(t){this._list=new Fg,this._map={},this._maxSize=t||10,this._lastRemovedEntry=null},Hg=Gg.prototype;Hg.put=function(t,e){var i=this._list,n=this._map,r=null;if(null==n[t]){var a=i.len(),o=this._lastRemovedEntry;if(a>=this._maxSize&&a>0){var s=i.head;i.remove(s),delete n[s.key],r=s.value,this._lastRemovedEntry=s}o?o.value=e:o=new Wg(e),o.key=t,i.insertEntry(o),n[t]=o}return r},Hg.get=function(t){var e=this._map[t],i=this._list;return null!=e?(e!==i.tail&&(i.remove(e),i.insertEntry(e)),e.value):void 0},Hg.clear=function(){this._list.clear(),this._map={}};var Zg={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]},Xg=new Gg(20),Yg=null,jg=qe,qg=Ue,Ug=(Object.freeze||Object)({parse:He,lift:Ye,toHex:je,fastLerp:qe,fastMapToColor:jg,lerp:Ue,mapToColor:qg,modifyHSL:$e,modifyAlpha:Ke,stringify:Qe}),$g=Array.prototype.slice,Kg=function(t,e,i,n){this._tracks={},this._target=t,this._loop=e||!1,this._getter=i||Je,this._setter=n||ti,this._clipCount=0,this._delay=0,this._doneList=[],this._onframeList=[],this._clipList=[]};Kg.prototype={when:function(t,e){var i=this._tracks;for(var n in e)if(e.hasOwnProperty(n)){if(!i[n]){i[n]=[];var r=this._getter(this._target,n);if(null==r)continue;0!==t&&i[n].push({time:0,value:li(r)})}i[n].push({time:t,value:e[n]})}return this},during:function(t){return this._onframeList.push(t),this},pause:function(){for(var t=0;ti;i++)t[i].call(this)},start:function(t,e){var i,n=this,r=0,a=function(){r--,r||n._doneCallback()};for(var o in this._tracks)if(this._tracks.hasOwnProperty(o)){var s=ci(this,t,a,this._tracks[o],o,e);s&&(this._clipList.push(s),r++,this.animation&&this.animation.addClip(s),i=s)}if(i){var l=i.onframe;i.onframe=function(t,e){l(t,e);for(var i=0;i1&&(ev=function(){for(var t in arguments)console.log(arguments[t])});var iv=ev,nv=function(){this.animators=[]};nv.prototype={constructor:nv,animate:function(t,e){var i,n=!1,r=this,a=this.__zr;if(t){var o=t.split("."),s=r;n="shape"===o[0];for(var l=0,u=o.length;u>l;l++)s&&(s=s[o[l]]);s&&(i=s)}else i=r;if(!i)return void iv('Property "'+t+'" is not existed in element '+r.id);var c=r.animators,d=new Kg(i,e);return d.during(function(){r.dirty(n)}).done(function(){c.splice(h(c,d),1)}),c.push(d),a&&a.animation.addAnimator(d),d},stopAnimation:function(t){for(var e=this.animators,i=e.length,n=0;i>n;n++)e[n].stop(t);return e.length=0,this},animateTo:function(t,e,i,n,r,a){di(this,t,e,i,n,r,a)},animateFrom:function(t,e,i,n,r,a){di(this,t,e,i,n,r,a,!0)}};var rv=function(t){Og.call(this,t),bg.call(this,t),nv.call(this,t),this.id=t.id||Qp()};rv.prototype={type:"element",name:"",__zr:null,ignore:!1,clipPath:null,isGroup:!1,drift:function(t,e){switch(this.draggable){case"horizontal":e=0;break;case"vertical":t=0}var i=this.transform;i||(i=this.transform=[1,0,0,1,0,0]),i[4]+=t,i[5]+=e,this.decomposeTransform(),this.dirty(!1)},beforeUpdate:function(){},afterUpdate:function(){},update:function(){this.updateTransform()},traverse:function(){},attrKV:function(t,e){if("position"===t||"scale"===t||"origin"===t){if(e){var i=this[t];i||(i=this[t]=[]),i[0]=e[0],i[1]=e[1]}}else this[t]=e},hide:function(){this.ignore=!0,this.__zr&&this.__zr.refresh()},show:function(){this.ignore=!1,this.__zr&&this.__zr.refresh()},attr:function(t,e){if("string"==typeof t)this.attrKV(t,e);else if(S(t))for(var i in t)t.hasOwnProperty(i)&&this.attrKV(i,t[i]);return this.dirty(!1),this},setClipPath:function(t){var e=this.__zr;e&&t.addSelfToZr(e),this.clipPath&&this.clipPath!==t&&this.removeClipPath(),this.clipPath=t,t.__zr=e,t.__clipTarget=this,this.dirty(!1)},removeClipPath:function(){var t=this.clipPath;t&&(t.__zr&&t.removeSelfFromZr(t.__zr),t.__zr=null,t.__clipTarget=null,this.clipPath=null,this.dirty(!1))},addSelfToZr:function(t){this.__zr=t;var e=this.animators;if(e)for(var i=0;in||i>s||l>a||r>h)},contain:function(t,e){var i=this;return t>=i.x&&t<=i.x+i.width&&e>=i.y&&e<=i.y+i.height},clone:function(){return new gi(this.x,this.y,this.width,this.height)},copy:function(t){this.x=t.x,this.y=t.y,this.width=t.width,this.height=t.height},plain:function(){return{x:this.x,y:this.y,width:this.width,height:this.height}}},gi.create=function(t){return new gi(t.x,t.y,t.width,t.height)};var lv=function(t){t=t||{},rv.call(this,t);for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);this._children=[],this.__storage=null,this.__dirty=!0};lv.prototype={constructor:lv,isGroup:!0,type:"group",silent:!1,children:function(){return this._children.slice()},childAt:function(t){return this._children[t]},childOfName:function(t){for(var e=this._children,i=0;i=0&&(i.splice(n,0,t),this._doAdd(t))}return this},_doAdd:function(t){t.parent&&t.parent.remove(t),t.parent=this;var e=this.__storage,i=this.__zr;e&&e!==t.__storage&&(e.addToStorage(t),t instanceof lv&&t.addChildrenToStorage(e)),i&&i.refresh()},remove:function(t){var e=this.__zr,i=this.__storage,n=this._children,r=h(n,t);return 0>r?this:(n.splice(r,1),t.parent=null,i&&(i.delFromStorage(t),t instanceof lv&&t.delChildrenFromStorage(i)),e&&e.refresh(),this)},removeAll:function(){var t,e,i=this._children,n=this.__storage;for(e=0;en;n++)this._updateAndAddDisplayable(e[n],null,t);i.length=this._displayListLen,tg.canvasSupported&&Si(i,Mi)},_updateAndAddDisplayable:function(t,e,i){if(!t.ignore||i){t.beforeUpdate(),t.__dirty&&t.update(),t.afterUpdate();var n=t.clipPath;if(n){e=e?e.slice():[];for(var r=n,a=t;r;)r.parent=a,r.updateTransform(),e.push(r),a=r,r=r.clipPath}if(t.isGroup){for(var o=t._children,s=0;se;e++)this.delRoot(t[e]);else{var r=h(this._roots,t);r>=0&&(this.delFromStorage(t),this._roots.splice(r,1),t instanceof lv&&t.delChildrenFromStorage(this))}},addToStorage:function(t){return t&&(t.__storage=this,t.dirty(!1)),this},delFromStorage:function(t){return t&&(t.__storage=null),this},dispose:function(){this._renderList=this._roots=null},displayableSortFunc:Mi};var dv={shadowBlur:1,shadowOffsetX:1,shadowOffsetY:1,textShadowBlur:1,textShadowOffsetX:1,textShadowOffsetY:1,textBoxShadowBlur:1,textBoxShadowOffsetX:1,textBoxShadowOffsetY:1},fv=function(t,e,i){return dv.hasOwnProperty(e)?i*=t.dpr:i},pv=[["shadowBlur",0],["shadowOffsetX",0],["shadowOffsetY",0],["shadowColor","#000"],["lineCap","butt"],["lineJoin","miter"],["miterLimit",10]],gv=function(t){this.extendFrom(t,!1)};gv.prototype={constructor:gv,fill:"#000",stroke:null,opacity:1,fillOpacity:null,strokeOpacity:null,lineDash:null,lineDashOffset:0,shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,lineWidth:1,strokeNoScale:!1,text:null,font:null,textFont:null,fontStyle:null,fontWeight:null,fontSize:null,fontFamily:null,textTag:null,textFill:"#000",textStroke:null,textWidth:null,textHeight:null,textStrokeWidth:0,textLineHeight:null,textPosition:"inside",textRect:null,textOffset:null,textAlign:null,textVerticalAlign:null,textDistance:5,textShadowColor:"transparent",textShadowBlur:0,textShadowOffsetX:0,textShadowOffsetY:0,textBoxShadowColor:"transparent",textBoxShadowBlur:0,textBoxShadowOffsetX:0,textBoxShadowOffsetY:0,transformText:!1,textRotation:0,textOrigin:null,textBackgroundColor:null,textBorderColor:null,textBorderWidth:0,textBorderRadius:0,textPadding:null,rich:null,truncate:null,blend:null,bind:function(t,e,i){for(var n=this,r=i&&i.style,a=!r,o=0;o0},extendFrom:function(t,e){if(t)for(var i in t)!t.hasOwnProperty(i)||e!==!0&&(e===!1?this.hasOwnProperty(i):null==t[i])||(this[i]=t[i])},set:function(t,e){"string"==typeof t?this[t]=e:this.extendFrom(t,!0)},clone:function(){var t=new this.constructor;return t.extendFrom(this,!0),t},getGradient:function(t,e,i){for(var n="radial"===e.type?Ti:Ii,r=n(t,e,i),a=e.colorStops,o=0;o=0&&i.splice(n,1),t.__hoverMir=null},clearHover:function(){for(var t=this._hoverElements,e=0;er;){var a=t[r],o=a.__from;o&&o.__zr?(r++,o.invisible||(a.transform=o.transform,a.invTransform=o.invTransform,a.__clipPaths=o.__clipPaths,this._doPaintEl(a,i,!0,n))):(t.splice(r,1),o.__hoverMir=null,e--)}i.ctx.restore()}},getHoverLayer:function(){return this.getLayer(zv)},_paintList:function(t,e,i){if(this._redrawId===i){e=e||!1,this._updateLayerStatus(t);var n=this._doPaintList(t,e);if(this._needsManuallyCompositing&&this._compositeManually(),!n){var r=this;wv(function(){r._paintList(t,e,i)})}}},_compositeManually:function(){var t=this.getLayer(Ev).ctx,e=this._domRoot.width,i=this._domRoot.height;t.clearRect(0,0,e,i),this.eachBuiltinLayer(function(n){n.virtual&&t.drawImage(n.dom,0,0,e,i)})},_doPaintList:function(t,e){for(var i=[],n=0;n15)break}}a.__drawIndex=v,a.__drawIndex0&&t>n[0]){for(o=0;r-1>o&&!(n[o]t);o++);a=i[n[o]]}if(n.splice(o+1,0,t),i[t]=e,!e.virtual)if(a){var l=a.dom;l.nextSibling?s.insertBefore(e.dom,l.nextSibling):s.appendChild(e.dom)}else s.firstChild?s.insertBefore(e.dom,s.firstChild):s.appendChild(e.dom)},eachLayer:function(t,e){var i,n,r=this._zlevelList;for(n=0;n0?Rv:0),this._needsManuallyCompositing),o.__builtin__||iv("ZLevel "+s+" has been used by unkown layer "+o.id),o!==r&&(o.__used=!0,o.__startIndex!==i&&(o.__dirty=!0),o.__startIndex=i,o.__drawIndex=o.incremental?-1:i,e(i),r=o),n.__dirty&&(o.__dirty=!0,o.incremental&&o.__drawIndex<0&&(o.__drawIndex=i))}e(i),this.eachBuiltinLayer(function(t){!t.__used&&t.getElementCount()>0&&(t.__dirty=!0,t.__startIndex=t.__endIndex=t.__drawIndex=0),t.__dirty&&t.__drawIndex<0&&(t.__drawIndex=t.__startIndex)})},clear:function(){return this.eachBuiltinLayer(this._clearLayer),this},_clearLayer:function(t){t.clear()},setBackgroundColor:function(t){this._backgroundColor=t},configLayer:function(t,e){if(e){var i=this._layerConfig;i[t]?r(i[t],e,!0):i[t]=e;for(var n=0;n=0&&this._clips.splice(e,1)},removeAnimator:function(t){for(var e=t.getClips(),i=0;io;o++){var s=i[o],l=s.step(t,e);l&&(r.push(l),a.push(s))}for(var o=0;n>o;)i[o]._needsRemove?(i[o]=i[n-1],i.pop(),n--):o++;n=r.length;for(var o=0;n>o;o++)a[o].fire(r[o]);this._time=t,this.onframe(e),this.trigger("frame",e),this.stage.update&&this.stage.update()},_startLoop:function(){function t(){e._running&&(wv(t),!e._paused&&e._update())}var e=this;this._running=!0,wv(t)},start:function(){this._time=(new Date).getTime(),this._pausedTime=0,this._startLoop()},stop:function(){this._running=!1},pause:function(){this._paused||(this._pauseStart=(new Date).getTime(),this._paused=!0)},resume:function(){this._paused&&(this._pausedTime+=(new Date).getTime()-this._pauseStart,this._paused=!1)},clear:function(){this._clips=[]},isFinished:function(){return!this._clips.length},animate:function(t,e){e=e||{};var i=new Kg(t,e.loop,e.getter,e.setter);return this.addAnimator(i),i}},c(Wv,bg);var Gv=function(){this._track=[]};Gv.prototype={constructor:Gv,recognize:function(t,e,i){return this._doTrack(t,e,i),this._recognize(t)},clear:function(){return this._track.length=0,this},_doTrack:function(t,e,i){var n=t.touches;if(n){for(var r={points:[],touches:[],target:e,event:t},a=0,o=n.length;o>a;a++){var s=n[a],l=de(i,s,{});r.points.push([l.zrX,l.zrY]),r.touches.push(s)}this._track.push(r)}},_recognize:function(t){for(var e in Hv)if(Hv.hasOwnProperty(e)){var i=Hv[e](this._track,t);if(i)return i}}};var Hv={pinch:function(t,e){var i=t.length;if(i){var n=(t[i-1]||{}).points,r=(t[i-2]||{}).points||n;if(r&&r.length>1&&n&&n.length>1){var a=In(n)/In(r);!isFinite(a)&&(a=1),e.pinchScale=a;var o=Tn(n);return e.pinchX=o[0],e.pinchY=o[1],{type:"pinch",target:t[0].target,event:e}}}}},Zv=300,Xv=["click","dblclick","mousewheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],Yv=["touchstart","touchend","touchmove"],jv={pointerdown:1,pointerup:1,pointermove:1,pointerout:1},qv=p(Xv,function(t){var e=t.replace("mouse","pointer");return jv[e]?e:t}),Uv={mousemove:function(t){t=pe(this.dom,t),this.trigger("mousemove",t)},mouseout:function(t){t=pe(this.dom,t);var e=t.toElement||t.relatedTarget;if(e!=this.dom)for(;e&&9!=e.nodeType;){if(e===this.dom)return;e=e.parentNode}this.trigger("mouseout",t)},touchstart:function(t){t=pe(this.dom,t),t.zrByTouch=!0,this._lastTouchMoment=new Date,An(this,t,"start"),Uv.mousemove.call(this,t),Uv.mousedown.call(this,t),Dn(this)},touchmove:function(t){t=pe(this.dom,t),t.zrByTouch=!0,An(this,t,"change"),Uv.mousemove.call(this,t),Dn(this)},touchend:function(t){t=pe(this.dom,t),t.zrByTouch=!0,An(this,t,"end"),Uv.mouseup.call(this,t),+new Date-this._lastTouchMoment=0||n&&h(n,o)<0)){var s=e.getShallow(o);null!=s&&(r[t[a][0]]=s)}}return r}},fm=dm([["lineWidth","width"],["stroke","color"],["opacity"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["shadowColor"]]),pm={getLineStyle:function(t){var e=fm(this,t),i=this.getLineDash(e.lineWidth);return i&&(e.lineDash=i),e},getLineDash:function(t){null==t&&(t=1);var e=this.get("type"),i=Math.max(t,2),n=4*t;return"solid"===e||null==e?null:"dashed"===e?[n,n]:[i,i]}},gm=dm([["fill","color"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["opacity"],["shadowColor"]]),vm={getAreaStyle:function(t,e){return gm(this,t,e)}},mm=Math.pow,ym=Math.sqrt,xm=1e-8,_m=1e-4,wm=ym(3),bm=1/3,Sm=W(),Mm=W(),Im=W(),Tm=Math.min,Cm=Math.max,Am=Math.sin,Dm=Math.cos,km=2*Math.PI,Pm=W(),Lm=W(),Om=W(),zm=[],Em=[],Rm={M:1,L:2,C:3,Q:4,A:5,Z:6,R:7},Bm=[],Nm=[],Fm=[],Vm=[],Wm=Math.min,Gm=Math.max,Hm=Math.cos,Zm=Math.sin,Xm=Math.sqrt,Ym=Math.abs,jm="undefined"!=typeof Float32Array,qm=function(t){this._saveData=!t,this._saveData&&(this.data=[]),this._ctx=null};qm.prototype={constructor:qm,_xi:0,_yi:0,_x0:0,_y0:0,_ux:0,_uy:0,_len:0,_lineDash:null,_dashOffset:0,_dashIdx:0,_dashSum:0,setScale:function(t,e){this._ux=Ym(1/tv/t)||0,this._uy=Ym(1/tv/e)||0},getContext:function(){return this._ctx},beginPath:function(t){return this._ctx=t,t&&t.beginPath(),t&&(this.dpr=t.dpr),this._saveData&&(this._len=0),this._lineDash&&(this._lineDash=null,this._dashOffset=0),this},moveTo:function(t,e){return this.addData(Rm.M,t,e),this._ctx&&this._ctx.moveTo(t,e),this._x0=t,this._y0=e,this._xi=t,this._yi=e,this},lineTo:function(t,e){var i=Ym(t-this._xi)>this._ux||Ym(e-this._yi)>this._uy||this._len<5;return this.addData(Rm.L,t,e),this._ctx&&i&&(this._needsDash()?this._dashedLineTo(t,e):this._ctx.lineTo(t,e)),i&&(this._xi=t,this._yi=e),this},bezierCurveTo:function(t,e,i,n,r,a){return this.addData(Rm.C,t,e,i,n,r,a),this._ctx&&(this._needsDash()?this._dashedBezierTo(t,e,i,n,r,a):this._ctx.bezierCurveTo(t,e,i,n,r,a)),this._xi=r,this._yi=a,this},quadraticCurveTo:function(t,e,i,n){return this.addData(Rm.Q,t,e,i,n),this._ctx&&(this._needsDash()?this._dashedQuadraticTo(t,e,i,n):this._ctx.quadraticCurveTo(t,e,i,n)),this._xi=i,this._yi=n,this},arc:function(t,e,i,n,r,a){return this.addData(Rm.A,t,e,i,i,n,r-n,0,a?0:1),this._ctx&&this._ctx.arc(t,e,i,n,r,a),this._xi=Hm(r)*i+t,this._yi=Zm(r)*i+e,this},arcTo:function(t,e,i,n,r){return this._ctx&&this._ctx.arcTo(t,e,i,n,r),this},rect:function(t,e,i,n){return this._ctx&&this._ctx.rect(t,e,i,n),this.addData(Rm.R,t,e,i,n),this},closePath:function(){this.addData(Rm.Z);var t=this._ctx,e=this._x0,i=this._y0;return t&&(this._needsDash()&&this._dashedLineTo(e,i),t.closePath()),this._xi=e,this._yi=i,this},fill:function(t){t&&t.fill(),this.toStatic()},stroke:function(t){t&&t.stroke(),this.toStatic()},setLineDash:function(t){if(t instanceof Array){this._lineDash=t,this._dashIdx=0;for(var e=0,i=0;ii;i++)this.data[i]=t[i];this._len=e},appendPath:function(t){t instanceof Array||(t=[t]);for(var e=t.length,i=0,n=this._len,r=0;e>r;r++)i+=t[r].len();jm&&this.data instanceof Float32Array&&(this.data=new Float32Array(n+i));for(var r=0;e>r;r++)for(var a=t[r].data,o=0;oe.length&&(this._expandData(),e=this.data);for(var i=0;ia&&(a=r+a),a%=r,f-=a*u,p-=a*c;u>0&&t>=f||0>u&&f>=t||0==u&&(c>0&&e>=p||0>c&&p>=e);)n=this._dashIdx,i=o[n],f+=u*i,p+=c*i,this._dashIdx=(n+1)%g,u>0&&l>f||0>u&&f>l||c>0&&h>p||0>c&&p>h||s[n%2?"moveTo":"lineTo"](u>=0?Wm(f,t):Gm(f,t),c>=0?Wm(p,e):Gm(p,e));u=f-t,c=p-e,this._dashOffset=-Xm(u*u+c*c)},_dashedBezierTo:function(t,e,i,n,r,a){var o,s,l,h,u,c=this._dashSum,d=this._dashOffset,f=this._lineDash,p=this._ctx,g=this._xi,v=this._yi,m=lr,y=0,x=this._dashIdx,_=f.length,w=0;for(0>d&&(d=c+d),d%=c,o=0;1>o;o+=.1)s=m(g,t,i,r,o+.1)-m(g,t,i,r,o),l=m(v,e,n,a,o+.1)-m(v,e,n,a,o),y+=Xm(s*s+l*l);for(;_>x&&(w+=f[x],!(w>d));x++);for(o=(w-d)/y;1>=o;)h=m(g,t,i,r,o),u=m(v,e,n,a,o),x%2?p.moveTo(h,u):p.lineTo(h,u),o+=f[x]/y,x=(x+1)%_;x%2!==0&&p.lineTo(r,a),s=r-h,l=a-u,this._dashOffset=-Xm(s*s+l*l)},_dashedQuadraticTo:function(t,e,i,n){var r=i,a=n;i=(i+2*t)/3,n=(n+2*e)/3,t=(this._xi+2*t)/3,e=(this._yi+2*e)/3,this._dashedBezierTo(t,e,i,n,r,a)},toStatic:function(){var t=this.data;t instanceof Array&&(t.length=this._len,jm&&(this.data=new Float32Array(t)))},getBoundingRect:function(){Bm[0]=Bm[1]=Fm[0]=Fm[1]=Number.MAX_VALUE,Nm[0]=Nm[1]=Vm[0]=Vm[1]=-Number.MAX_VALUE;for(var t=this.data,e=0,i=0,n=0,r=0,a=0;ac;){var d=s[c++];switch(1==c&&(n=s[c],r=s[c+1],e=n,i=r),d){case Rm.M:e=n=s[c++],i=r=s[c++],t.moveTo(n,r);break;case Rm.L:a=s[c++],o=s[c++],(Ym(a-n)>l||Ym(o-r)>h||c===u-1)&&(t.lineTo(a,o),n=a,r=o);break;case Rm.C:t.bezierCurveTo(s[c++],s[c++],s[c++],s[c++],s[c++],s[c++]),n=s[c-2],r=s[c-1];break;case Rm.Q:t.quadraticCurveTo(s[c++],s[c++],s[c++],s[c++]),n=s[c-2],r=s[c-1];break;case Rm.A:var f=s[c++],p=s[c++],g=s[c++],v=s[c++],m=s[c++],y=s[c++],x=s[c++],_=s[c++],w=g>v?g:v,b=g>v?1:g/v,S=g>v?v/g:1,M=Math.abs(g-v)>.001,I=m+y;M?(t.translate(f,p),t.rotate(x),t.scale(b,S),t.arc(0,0,w,m,I,1-_),t.scale(1/b,1/S),t.rotate(-x),t.translate(-f,-p)):t.arc(f,p,w,m,I,1-_),1==c&&(e=Hm(m)*g+f,i=Zm(m)*v+p),n=Hm(I)*g+f,r=Zm(I)*v+p;break;case Rm.R:e=n=s[c],i=r=s[c+1],t.rect(s[c++],s[c++],s[c++],s[c++]);break;case Rm.Z:t.closePath(),n=e,r=i}}}},qm.CMD=Rm;var Um=2*Math.PI,$m=2*Math.PI,Km=qm.CMD,Qm=2*Math.PI,Jm=1e-4,ty=[-1,-1,-1],ey=[-1,-1],iy=xv.prototype.getCanvasPattern,ny=Math.abs,ry=new qm(!0);Fr.prototype={constructor:Fr,type:"path",__dirtyPath:!0,strokeContainThreshold:5,brush:function(t,e){var i=this.style,n=this.path||ry,r=i.hasStroke(),a=i.hasFill(),o=i.fill,s=i.stroke,l=a&&!!o.colorStops,h=r&&!!s.colorStops,u=a&&!!o.image,c=r&&!!s.image;if(i.bind(t,this,e),this.setTransform(t),this.__dirty){var d;l&&(d=d||this.getBoundingRect(),this._fillGradient=i.getGradient(t,o,d)),h&&(d=d||this.getBoundingRect(),this._strokeGradient=i.getGradient(t,s,d))}l?t.fillStyle=this._fillGradient:u&&(t.fillStyle=iy.call(o,t)),h?t.strokeStyle=this._strokeGradient:c&&(t.strokeStyle=iy.call(s,t));var f=i.lineDash,p=i.lineDashOffset,g=!!t.setLineDash,v=this.getGlobalScale();if(n.setScale(v[0],v[1]),this.__dirtyPath||f&&!g&&r?(n.beginPath(t),f&&!g&&(n.setLineDash(f),n.setLineDashOffset(p)),this.buildPath(n,this.shape,!1),this.path&&(this.__dirtyPath=!1)):(t.beginPath(),this.path.rebuildPath(t)),a)if(null!=i.fillOpacity){var m=t.globalAlpha;t.globalAlpha=i.fillOpacity*i.opacity,n.fill(t),t.globalAlpha=m}else n.fill(t);if(f&&g&&(t.setLineDash(f),t.lineDashOffset=p),r)if(null!=i.strokeOpacity){var m=t.globalAlpha;t.globalAlpha=i.strokeOpacity*i.opacity,n.stroke(t),t.globalAlpha=m}else n.stroke(t);f&&g&&t.setLineDash([]),null!=i.text&&(this.restoreTransform(t),this.drawRectText(t,this.getBoundingRect()))},buildPath:function(){},createPathProxy:function(){this.path=new qm},getBoundingRect:function(){var t=this._rect,e=this.style,i=!t;if(i){var n=this.path;n||(n=this.path=new qm),this.__dirtyPath&&(n.beginPath(),this.buildPath(n,this.shape,!1)),t=n.getBoundingRect()}if(this._rect=t,e.hasStroke()){var r=this._rectWithStroke||(this._rectWithStroke=t.clone());if(this.__dirty||i){r.copy(t);var a=e.lineWidth,o=e.strokeNoScale?this.getLineScale():1;e.hasFill()||(a=Math.max(a,this.strokeContainThreshold||4)),o>1e-10&&(r.width+=a/o,r.height+=a/o,r.x-=a/o/2,r.y-=a/o/2)}return r}return t},contain:function(t,e){var i=this.transformCoordToLocal(t,e),n=this.getBoundingRect(),r=this.style;if(t=i[0],e=i[1],n.contain(t,e)){var a=this.path.data;if(r.hasStroke()){var o=r.lineWidth,s=r.strokeNoScale?this.getLineScale():1;if(s>1e-10&&(r.hasFill()||(o=Math.max(o,this.strokeContainThreshold)),Nr(a,o/s,t,e)))return!0}if(r.hasFill())return Br(a,t,e)}return!1},dirty:function(t){null==t&&(t=!0),t&&(this.__dirtyPath=t,this._rect=null),this.__dirty=this.__dirtyText=!0,this.__zr&&this.__zr.refresh(),this.__clipTarget&&this.__clipTarget.dirty()},animateShape:function(t){return this.animate("shape",t)},attrKV:function(t,e){"shape"===t?(this.setShape(e),this.__dirtyPath=!0,this._rect=null):mn.prototype.attrKV.call(this,t,e)},setShape:function(t,e){var i=this.shape;if(i){if(S(t))for(var n in t)t.hasOwnProperty(n)&&(i[n]=t[n]);else i[t]=e;this.dirty(!0)}return this},getLineScale:function(){var t=this.transform;return t&&ny(t[0]-1)>1e-10&&ny(t[3]-1)>1e-10?Math.sqrt(ny(t[0]*t[3]-t[2]*t[1])):1}},Fr.extend=function(t){var e=function(e){Fr.call(this,e),t.style&&this.style.extendFrom(t.style,!1);var i=t.shape;if(i){this.shape=this.shape||{};var n=this.shape;for(var r in i)!n.hasOwnProperty(r)&&i.hasOwnProperty(r)&&(n[r]=i[r])}t.init&&t.init.call(this,e)};u(e,Fr);for(var i in t)"style"!==i&&"shape"!==i&&(e.prototype[i]=t[i]);return e},u(Fr,mn);var ay=qm.CMD,oy=[[],[],[]],sy=Math.sqrt,ly=Math.atan2,hy=function(t,e){var i,n,r,a,o,s,l=t.data,h=ay.M,u=ay.C,c=ay.L,d=ay.R,f=ay.A,p=ay.Q;for(r=0,a=0;ro;o++){var s=oy[o];s[0]=l[r++],s[1]=l[r++],ae(s,s,e),l[a++]=s[0],l[a++]=s[1]}}},uy=Math.sqrt,cy=Math.sin,dy=Math.cos,fy=Math.PI,py=function(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1])},gy=function(t,e){return(t[0]*e[0]+t[1]*e[1])/(py(t)*py(e))},vy=function(t,e){return(t[0]*e[1]=11?function(){var e,i=this.__clipPaths,n=this.style;if(i)for(var r=0;ra;a++)r+=ee(t[a-1],t[a]);var o=r/2;o=i>o?i:o;for(var a=0;o>a;a++){var s,l,h,u=a/(o-1)*(e?i:i-1),c=Math.floor(u),d=u-c,f=t[c%i];e?(s=t[(c-1+i)%i],l=t[(c+1)%i],h=t[(c+2)%i]):(s=t[0===c?c:c-1],l=t[c>i-2?i-1:c+1],h=t[c>i-3?i-1:c+2]);var p=d*d,g=d*p;n.push([Yr(s[0],f[0],l[0],h[0],d,p,g),Yr(s[1],f[1],l[1],h[1],d,p,g)])}return n},Ty=function(t,e,i,n){var r,a,o,s,l=[],h=[],u=[],c=[];if(n){o=[1/0,1/0],s=[-1/0,-1/0];for(var d=0,f=t.length;f>d;d++)oe(o,o,t[d]),se(s,s,t[d]);oe(o,o,n[0]),se(s,s,n[1])}for(var d=0,f=t.length;f>d;d++){var p=t[d];if(i)r=t[d?d-1:f-1],a=t[(d+1)%f];else{if(0===d||d===f-1){l.push(H(t[d]));continue}r=t[d-1],a=t[d+1]}j(h,a,r),J(h,h,e);var g=ee(p,r),v=ee(p,a),m=g+v;0!==m&&(g/=m,v/=m),J(u,h,-g),J(c,h,v);var y=X([],p,u),x=X([],p,c);n&&(se(y,y,o),oe(y,y,s),se(x,x,o),oe(x,x,s)),l.push(y),l.push(x)}return i&&l.push(l.shift()),l},Cy=Fr.extend({type:"polygon",shape:{points:null,smooth:!1,smoothConstraint:null},buildPath:function(t,e){jr(t,e,!0)}}),Ay=Fr.extend({type:"polyline",shape:{points:null,smooth:!1,smoothConstraint:null},style:{stroke:"#000",fill:null},buildPath:function(t,e){jr(t,e,!1)}}),Dy=Fr.extend({type:"rect",shape:{r:0,x:0,y:0,width:0,height:0},buildPath:function(t,e){var i=e.x,n=e.y,r=e.width,a=e.height;e.r?Ki(t,e):t.rect(i,n,r,a),t.closePath()}}),ky=Fr.extend({type:"line",shape:{x1:0,y1:0,x2:0,y2:0,percent:1},style:{stroke:"#000",fill:null},buildPath:function(t,e){var i=e.x1,n=e.y1,r=e.x2,a=e.y2,o=e.percent;0!==o&&(t.moveTo(i,n),1>o&&(r=i*(1-o)+r*o,a=n*(1-o)+a*o),t.lineTo(r,a))},pointAt:function(t){var e=this.shape;return[e.x1*(1-t)+e.x2*t,e.y1*(1-t)+e.y2*t]}}),Py=[],Ly=Fr.extend({type:"bezier-curve",shape:{x1:0,y1:0,x2:0,y2:0,cpx1:0,cpy1:0,percent:1},style:{stroke:"#000",fill:null},buildPath:function(t,e){var i=e.x1,n=e.y1,r=e.x2,a=e.y2,o=e.cpx1,s=e.cpy1,l=e.cpx2,h=e.cpy2,u=e.percent;0!==u&&(t.moveTo(i,n),null==l||null==h?(1>u&&(yr(i,o,r,u,Py),o=Py[1],r=Py[2],yr(n,s,a,u,Py),s=Py[1],a=Py[2]),t.quadraticCurveTo(o,s,r,a)):(1>u&&(dr(i,o,l,r,u,Py),o=Py[1],l=Py[2],r=Py[3],dr(n,s,h,a,u,Py),s=Py[1],h=Py[2],a=Py[3]),t.bezierCurveTo(o,s,l,h,r,a)))},pointAt:function(t){return qr(this.shape,t,!1)},tangentAt:function(t){var e=qr(this.shape,t,!0);return te(e,e)}}),Oy=Fr.extend({type:"arc",shape:{cx:0,cy:0,r:0,startAngle:0,endAngle:2*Math.PI,clockwise:!0},style:{stroke:"#000",fill:null},buildPath:function(t,e){var i=e.cx,n=e.cy,r=Math.max(e.r,0),a=e.startAngle,o=e.endAngle,s=e.clockwise,l=Math.cos(a),h=Math.sin(a);t.moveTo(l*r+i,h*r+n),t.arc(i,n,r,a,o,!s)}}),zy=Fr.extend({type:"compound",shape:{paths:null},_updatePathDirty:function(){for(var t=this.__dirtyPath,e=this.shape.paths,i=0;i"'])/g,ox={"&":"&","<":"<",">":">",'"':""","'":"'"},sx=["a","b","c","d","e","f","g"],lx=function(t,e){return"{"+t+(null==e?"":e)+"}"},hx=Wi,ux=Ei,cx=(Object.freeze||Object)({addCommas:co,toCamelCase:fo,normalizeCssArray:rx,encodeHTML:po,formatTpl:go,formatTplSimple:vo,getTooltipMarker:mo,formatTime:xo,capitalFirst:_o,truncateText:hx,getTextRect:ux}),dx=f,fx=["left","right","top","bottom","width","height"],px=[["width","left","right"],["height","top","bottom"]],gx=wo,vx=(x(wo,"vertical"),x(wo,"horizontal"),{getBoxLayoutParams:function(){return{left:this.get("left"),top:this.get("top"),right:this.get("right"),bottom:this.get("bottom"),width:this.get("width"),height:this.get("height")}}}),mx=jn(),yx=Wa.extend({type:"component",id:"",name:"",mainType:"",subType:"",componentIndex:0,defaultOption:null,ecModel:null,dependentModels:[],uid:null,layoutMode:null,$constructor:function(t,e,i,n){Wa.call(this,t,e,i,n),this.uid=Za("ec_cpt_model")},init:function(t,e,i){this.mergeDefaultAndTheme(t,i)},mergeDefaultAndTheme:function(t,e){var i=this.layoutMode,n=i?Mo(t):{},a=e.getTheme();r(t,a.get(this.mainType)),r(t,this.getDefaultOption()),i&&So(t,n,i)},mergeOption:function(t){r(this.option,t,!0);var e=this.layoutMode;e&&So(this.option,t,e)},optionUpdated:function(){},getDefaultOption:function(){var t=mx(this);if(!t.defaultOption){for(var e=[],i=this.constructor;i;){var n=i.prototype.defaultOption;n&&e.push(n),i=i.superClass}for(var a={},o=e.length-1;o>=0;o--)a=r(a,e[o],!0);t.defaultOption=a}return t.defaultOption},getReferringComponents:function(t){return this.ecModel.queryComponents({mainType:t,index:this.get(t+"Index",!0),id:this.get(t+"Id",!0)})}});ar(yx,{registerWhenExtend:!0}),Xa(yx),Ya(yx,To),c(yx,vx);var xx="";"undefined"!=typeof navigator&&(xx=navigator.platform||"");var _x={color:["#c23531","#2f4554","#61a0a8","#d48265","#91c7ae","#749f83","#ca8622","#bda29a","#6e7074","#546570","#c4ccd3"],gradientColor:["#f6efa6","#d88273","#bf444c"],textStyle:{fontFamily:xx.match(/^Win/)?"Microsoft YaHei":"sans-serif",fontSize:12,fontStyle:"normal",fontWeight:"normal"},blendMode:null,animation:"auto",animationDuration:1e3,animationDurationUpdate:300,animationEasing:"exponentialOut",animationEasingUpdate:"cubicOut",animationThreshold:2e3,progressiveThreshold:3e3,progressive:400,hoverLayerThreshold:3e3,useUTC:!1},bx=jn(),Sx={clearColorPalette:function(){bx(this).colorIdx=0,bx(this).colorNameMap={}},getColorFromPalette:function(t,e,i){e=e||this;var n=bx(e),r=n.colorIdx||0,a=n.colorNameMap=n.colorNameMap||{};if(a.hasOwnProperty(t))return a[t];var o=Nn(this.get("color",!0)),s=this.get("colorLayer",!0),l=null!=i&&s?Co(s,i):o;if(l=l||o,l&&l.length){var h=l[r];return t&&(a[t]=h),n.colorIdx=(r+1)%l.length,h}}},Mx={cartesian2d:function(t,e,i,n){var r=t.getReferringComponents("xAxis")[0],a=t.getReferringComponents("yAxis")[0];e.coordSysDims=["x","y"],i.set("x",r),i.set("y",a),Do(r)&&(n.set("x",r),e.firstCategoryDimIndex=0),Do(a)&&(n.set("y",a),e.firstCategoryDimIndex=1)},singleAxis:function(t,e,i,n){var r=t.getReferringComponents("singleAxis")[0];e.coordSysDims=["single"],i.set("single",r),Do(r)&&(n.set("single",r),e.firstCategoryDimIndex=0)},polar:function(t,e,i,n){var r=t.getReferringComponents("polar")[0],a=r.findAxisModel("radiusAxis"),o=r.findAxisModel("angleAxis");e.coordSysDims=["radius","angle"],i.set("radius",a),i.set("angle",o),Do(a)&&(n.set("radius",a),e.firstCategoryDimIndex=0),Do(o)&&(n.set("angle",o),e.firstCategoryDimIndex=1)},geo:function(t,e){e.coordSysDims=["lng","lat"]},parallel:function(t,e,i,n){var r=t.ecModel,a=r.getComponent("parallel",t.get("parallelIndex")),o=e.coordSysDims=a.dimensions.slice();f(a.parallelAxisIndex,function(t,a){var s=r.getComponent("parallelAxis",t),l=o[a];i.set(l,s),Do(s)&&null==e.firstCategoryDimIndex&&(n.set(l,s),e.firstCategoryDimIndex=a)})}},Ix="original",Tx="arrayRows",Cx="objectRows",Ax="keyedColumns",Dx="unknown",kx="typedArray",Px="column",Lx="row";ko.seriesDataToSource=function(t){return new ko({data:t,sourceFormat:I(t)?kx:Ix,fromDataset:!1})},ir(ko);var Ox=jn(),zx="\x00_ec_inner",Ex=Wa.extend({init:function(t,e,i,n){i=i||{},this.option=null,this._theme=new Wa(i),this._optionManager=n},setOption:function(t,e){O(!(zx in t),"please use chart.getOption()"),this._optionManager.setOption(t,e),this.resetOption(null)},resetOption:function(t){var e=!1,i=this._optionManager;if(!t||"recreate"===t){var n=i.mountOption("recreate"===t);this.option&&"recreate"!==t?(this.restoreData(),this.mergeOption(n)):Xo.call(this,n),e=!0}if(("timeline"===t||"media"===t)&&this.restoreData(),!t||"recreate"===t||"timeline"===t){var r=i.getTimelineOption(this);r&&(this.mergeOption(r),e=!0)}if(!t||"recreate"===t||"media"===t){var a=i.getMediaOption(this,this._api);a.length&&f(a,function(t){this.mergeOption(t,e=!0)},this)}return e},mergeOption:function(t){function e(e,n){var r=Nn(t[e]),s=Gn(a.get(e),r);Hn(s),f(s,function(t){var i=t.option;S(i)&&(t.keyInfo.mainType=e,t.keyInfo.subType=jo(e,i,t.exist))});var l=Yo(a,n);i[e]=[],a.set(e,[]),f(s,function(t,n){var r=t.exist,s=t.option;if(O(S(s)||r,"Empty component definition"),s){var h=yx.getClass(e,t.keyInfo.subType,!0);if(r&&r instanceof h)r.name=t.keyInfo.name,r.mergeOption(s,this),r.optionUpdated(s,!1);else{var u=o({dependentModels:l,componentIndex:n},t.keyInfo);r=new h(s,this,this,u),o(r,u),r.init(s,this,this,u),r.optionUpdated(null,!0)}}else r.mergeOption({},this),r.optionUpdated({},!1);a.get(e)[n]=r,i[e][n]=r.option},this),"series"===e&&qo(this,a.get("series"))}var i=this.option,a=this._componentsMap,s=[];Oo(this),f(t,function(t,e){null!=t&&(yx.hasClass(e)?e&&s.push(e):i[e]=null==i[e]?n(t):r(i[e],t,!0))}),yx.topologicalTravel(s,yx.getAllClassMainTypes(),e,this),this._seriesIndicesMap=N(this._seriesIndices=this._seriesIndices||[])},getOption:function(){var t=n(this.option);return f(t,function(e,i){if(yx.hasClass(i)){for(var e=Nn(e),n=e.length-1;n>=0;n--)Xn(e[n])&&e.splice(n,1);t[i]=e}}),delete t[zx],t},getTheme:function(){return this._theme},getComponent:function(t,e){var i=this._componentsMap.get(t);return i?i[e||0]:void 0},queryComponents:function(t){var e=t.mainType;if(!e)return[];var i=t.index,n=t.id,r=t.name,a=this._componentsMap.get(e);if(!a||!a.length)return[];var o;if(null!=i)_(i)||(i=[i]),o=v(p(i,function(t){return a[t]}),function(t){return!!t});else if(null!=n){var s=_(n);o=v(a,function(t){return s&&h(n,t.id)>=0||!s&&t.id===n})}else if(null!=r){var l=_(r);o=v(a,function(t){return l&&h(r,t.name)>=0||!l&&t.name===r})}else o=a.slice();return Uo(o,t)},findComponents:function(t){function e(t){var e=r+"Index",i=r+"Id",n=r+"Name";return!t||null==t[e]&&null==t[i]&&null==t[n]?null:{mainType:r,index:t[e],id:t[i],name:t[n]}}function i(e){return t.filter?v(e,t.filter):e}var n=t.query,r=t.mainType,a=e(n),o=a?this.queryComponents(a):this._componentsMap.get(r);return i(Uo(o,t))},eachComponent:function(t,e,i){var n=this._componentsMap;if("function"==typeof t)i=e,e=t,n.each(function(t,n){f(t,function(t,r){e.call(i,n,t,r)})});else if(b(t))f(n.get(t),e,i);else if(S(t)){var r=this.findComponents(t);f(r,e,i)}},getSeriesByName:function(t){var e=this._componentsMap.get("series");return v(e,function(e){return e.name===t})},getSeriesByIndex:function(t){return this._componentsMap.get("series")[t]},getSeriesByType:function(t){var e=this._componentsMap.get("series");return v(e,function(e){return e.subType===t})},getSeries:function(){return this._componentsMap.get("series").slice()},getSeriesCount:function(){return this._componentsMap.get("series").length},eachSeries:function(t,e){f(this._seriesIndices,function(i){var n=this._componentsMap.get("series")[i];t.call(e,n,i)},this)},eachRawSeries:function(t,e){f(this._componentsMap.get("series"),t,e)},eachSeriesByType:function(t,e,i){f(this._seriesIndices,function(n){var r=this._componentsMap.get("series")[n];r.subType===t&&e.call(i,r,n)},this)},eachRawSeriesByType:function(t,e,i){return f(this.getSeriesByType(t),e,i)},isSeriesFiltered:function(t){return null==this._seriesIndicesMap.get(t.componentIndex)},getCurrentSeriesIndices:function(){return(this._seriesIndices||[]).slice()},filterSeries:function(t,e){var i=v(this._componentsMap.get("series"),t,e);qo(this,i)},restoreData:function(t){var e=this._componentsMap;qo(this,e.get("series"));var i=[];e.each(function(t,e){i.push(e)}),yx.topologicalTravel(i,yx.getAllClassMainTypes(),function(i){f(e.get(i),function(e){("series"!==i||!Ho(e,t))&&e.restoreData()})})}});c(Ex,Sx);var Rx=["getDom","getZr","getWidth","getHeight","getDevicePixelRatio","dispatchAction","isDisposed","on","off","getDataURL","getConnectedDataURL","getModel","getOption","getViewOfComponentModel","getViewOfSeriesModel"],Bx={};Ko.prototype={constructor:Ko,create:function(t,e){var i=[];f(Bx,function(n){var r=n.create(t,e);i=i.concat(r||[])}),this._coordinateSystems=i},update:function(t,e){f(this._coordinateSystems,function(i){i.update&&i.update(t,e)})},getCoordinateSystems:function(){return this._coordinateSystems.slice()}},Ko.register=function(t,e){Bx[t]=e},Ko.get=function(t){return Bx[t]};var Nx=f,Fx=n,Vx=p,Wx=r,Gx=/^(min|max)?(.+)$/;Qo.prototype={constructor:Qo,setOption:function(t,e){t&&f(Nn(t.series),function(t){t&&t.data&&I(t.data)&&E(t.data)}),t=Fx(t,!0);var i=this._optionBackup,n=Jo.call(this,t,e,!i);this._newBaseOption=n.baseOption,i?(ns(i.baseOption,n.baseOption),n.timelineOptions.length&&(i.timelineOptions=n.timelineOptions),n.mediaList.length&&(i.mediaList=n.mediaList),n.mediaDefault&&(i.mediaDefault=n.mediaDefault)):this._optionBackup=n},mountOption:function(t){var e=this._optionBackup;return this._timelineOptions=Vx(e.timelineOptions,Fx),this._mediaList=Vx(e.mediaList,Fx),this._mediaDefault=Fx(e.mediaDefault),this._currentMediaIndices=[],Fx(t?e.baseOption:this._newBaseOption)},getTimelineOption:function(t){var e,i=this._timelineOptions;if(i.length){var n=t.getComponent("timeline");n&&(e=Fx(i[n.getCurrentIndex()],!0))}return e},getMediaOption:function(){var t=this._api.getWidth(),e=this._api.getHeight(),i=this._mediaList,n=this._mediaDefault,r=[],a=[];if(!i.length&&!n)return a;for(var o=0,s=i.length;s>o;o++)ts(i[o].query,t,e)&&r.push(o);return!r.length&&n&&(r=[-1]),r.length&&!is(r,this._currentMediaIndices)&&(a=Vx(r,function(t){return Fx(-1===t?n.option:i[t].option)})),this._currentMediaIndices=r,a}};var Hx=f,Zx=S,Xx=["areaStyle","lineStyle","nodeStyle","linkStyle","chordStyle","label","labelLine"],Yx=function(t,e){Hx(us(t.series),function(t){Zx(t)&&hs(t)});var i=["xAxis","yAxis","radiusAxis","angleAxis","singleAxis","parallelAxis","radar"];e&&i.push("valueAxis","categoryAxis","logAxis","timeAxis"),Hx(i,function(e){Hx(us(t[e]),function(t){t&&(ss(t,"axisLabel"),ss(t.axisPointer,"label"))})}),Hx(us(t.parallel),function(t){var e=t&&t.parallelAxisDefault;ss(e,"axisLabel"),ss(e&&e.axisPointer,"label")}),Hx(us(t.calendar),function(t){as(t,"itemStyle"),ss(t,"dayLabel"),ss(t,"monthLabel"),ss(t,"yearLabel")}),Hx(us(t.radar),function(t){ss(t,"name")}),Hx(us(t.geo),function(t){Zx(t)&&(ls(t),Hx(us(t.regions),function(t){ls(t)}))}),Hx(us(t.timeline),function(t){ls(t),as(t,"label"),as(t,"itemStyle"),as(t,"controlStyle",!0);var e=t.data;_(e)&&f(e,function(t){S(t)&&(as(t,"label"),as(t,"itemStyle"))})}),Hx(us(t.toolbox),function(t){as(t,"iconStyle"),Hx(t.feature,function(t){as(t,"iconStyle")})}),ss(cs(t.axisPointer),"label"),ss(cs(t.tooltip).axisPointer,"label")},jx=[["x","left"],["y","top"],["x2","right"],["y2","bottom"]],qx=["grid","geo","parallel","legend","toolbox","title","visualMap","dataZoom","timeline"],Ux=function(t,e){Yx(t,e),t.series=Nn(t.series),f(t.series,function(t){if(S(t)){var e=t.type;if(("pie"===e||"gauge"===e)&&null!=t.clockWise&&(t.clockwise=t.clockWise),"gauge"===e){var i=ds(t,"pointer.color");null!=i&&fs(t,"itemStyle.normal.color",i)}ps(t)}}),t.dataRange&&(t.visualMap=t.dataRange),f(qx,function(e){var i=t[e];i&&(_(i)||(i=[i]),f(i,function(t){ps(t)}))})},$x=function(t){var e=N();t.eachSeries(function(t){var i=t.get("stack");if(i){var n=e.get(i)||e.set(i,[]),r=t.getData(),a={stackResultDimension:r.getCalculationInfo("stackResultDimension"),stackedOverDimension:r.getCalculationInfo("stackedOverDimension"),stackedDimension:r.getCalculationInfo("stackedDimension"),stackedByDimension:r.getCalculationInfo("stackedByDimension"),isStackedByIndex:r.getCalculationInfo("isStackedByIndex"),data:r,seriesModel:t};if(!a.stackedDimension||!a.isStackedByIndex&&!a.stackedByDimension)return;n.length&&r.setCalculationInfo("stackedOnSeries",n[n.length-1].seriesModel),n.push(a)}}),e.each(gs)},Kx=vs.prototype;Kx.pure=!1,Kx.persistent=!0,Kx.getSource=function(){return this._source};var Qx={arrayRows_column:{pure:!0,count:function(){return Math.max(0,this._data.length-this._source.startIndex)},getItem:function(t){return this._data[t+this._source.startIndex]},appendData:xs},arrayRows_row:{pure:!0,count:function(){var t=this._data[0];return t?Math.max(0,t.length-this._source.startIndex):0},getItem:function(t){t+=this._source.startIndex;for(var e=[],i=this._data,n=0;n=1)&&(t=1),t}var i=this._upstream,n=t&&t.skip;if(this._dirty&&i){var r=this.context;r.data=r.outputData=i.context.outputData}this.__pipeline&&(this.__pipeline.currentTask=this);var a;this._plan&&!n&&(a=this._plan(this.context));var o=e(this._modBy),s=this._modDataCount||0,l=e(t&&t.modBy),h=t&&t.modDataCount||0;(o!==l||s!==h)&&(a="reset");var u;(this._dirty||"reset"===a)&&(this._dirty=!1,u=As(this,n)),this._modBy=l,this._modDataCount=h;var c=t&&t.step;if(this._dueEnd=i?i._outputDueEnd:this._count?this._count(this.context):1/0,this._progress){var d=this._dueIndex,f=Math.min(null!=c?this._dueIndex+c:1/0,this._dueEnd);if(!n&&(u||f>d)){var p=this._progress;if(_(p))for(var g=0;gn?n++:null}function e(){var t=n%o*r+Math.ceil(n/o),e=n>=i?null:a>t?t:n;return n++,e}var i,n,r,a,o,s={reset:function(l,h,u,c){n=l,i=h,r=u,a=c,o=Math.ceil(a/r),s.next=r>1&&a>0?e:t}};return s}();n_.dirty=function(){this._dirty=!0,this._onDirty&&this._onDirty(this.context)},n_.unfinished=function(){return this._progress&&this._dueIndex":"",v=p+s.join(p||", ");return{renderMode:n,content:v,style:h}}function a(t){return{renderMode:n,content:po(co(t)),style:h}}var o=this;n=n||"html";var s="html"===n?"
":"\n",l="richText"===n,h={},u=0,c=this.getData(),d=c.mapDimension("defaultedTooltip",!0),p=d.length,v=this.getRawValue(t),m=_(v),y=c.getItemVisual(t,"color");S(y)&&y.colorStops&&(y=(y.colorStops[0]||{}).color),y=y||"transparent";var x=p>1||m&&!p?r(v):a(p?Ss(c,t,d[0]):m?v[0]:v),w=x.content,b=o.seriesIndex+"at"+u,M=mo({color:y,type:"item",renderMode:n,markerId:b});h[b]=y,++u;var I=c.getName(t),T=this.name;Zn(this)||(T=""),T=T?po(T)+(e?": ":s):"";var C="string"==typeof M?M:M.content,A=e?C+T+w:T+C+(I?po(I)+": "+w:w);return{html:A,markers:h}},isAnimationEnabled:function(){if(tg.node)return!1;var t=this.getShallow("animation");return t&&this.getData().count()>this.getShallow("animationThreshold")&&(t=!1),t},restoreData:function(){this.dataTask.dirty()},getColorFromPalette:function(t,e,i){var n=this.ecModel,r=Sx.getColorFromPalette.call(this,t,e,i);return r||(r=n.getColorFromPalette(t,e,i)),r},coordDimToDataDim:function(t){return this.getRawData().mapDimension(t,!0)},getProgressive:function(){return this.get("progressive")},getProgressiveThreshold:function(){return this.get("progressiveThreshold")},getAxisTooltipData:null,getTooltipPosition:null,pipeTask:null,preventIncremental:null,pipelineContext:null});c(o_,i_),c(o_,Sx);var s_=function(){this.group=new lv,this.uid=Za("viewComponent")};s_.prototype={constructor:s_,init:function(){},render:function(){},dispose:function(){},filterForExposedEvent:null};var l_=s_.prototype;l_.updateView=l_.updateLayout=l_.updateVisual=function(){},er(s_),ar(s_,{registerWhenExtend:!0});var h_=function(){var t=jn();return function(e){var i=t(e),n=e.pipelineContext,r=i.large,a=i.progressiveRender,o=i.large=n.large,s=i.progressiveRender=n.progressiveRender;return!!(r^o||a^s)&&"reset"}},u_=jn(),c_=h_();Bs.prototype={type:"chart",init:function(){},render:function(){},highlight:function(t,e,i,n){Fs(t.getData(),n,"emphasis")},downplay:function(t,e,i,n){Fs(t.getData(),n,"normal")},remove:function(){this.group.removeAll()},dispose:function(){},incrementalPrepareRender:null,incrementalRender:null,updateTransform:null,filterForExposedEvent:null};var d_=Bs.prototype;d_.updateView=d_.updateLayout=d_.updateVisual=function(t,e,i,n){this.render(t,e,i,n)},er(Bs,["dispose"]),ar(Bs,{registerWhenExtend:!0}),Bs.markUpdateMethod=function(t,e){u_(t).updateMethod=e -};var f_={incrementalPrepareRender:{progress:function(t,e){e.view.incrementalRender(t,e.model,e.ecModel,e.api,e.payload)}},render:{forceFirstProgress:!0,progress:function(t,e){e.view.render(e.model,e.ecModel,e.api,e.payload)}}},p_="\x00__throttleOriginMethod",g_="\x00__throttleRate",v_="\x00__throttleType",m_={createOnAllSeries:!0,performRawSeries:!0,reset:function(t,e){var i=t.getData(),n=(t.visualColorAccessPath||"itemStyle.color").split("."),r=t.get(n)||t.getColorFromPalette(t.name,null,e.getSeriesCount());if(i.setVisual("color",r),!e.isSeriesFiltered(t)){"function"!=typeof r||r instanceof Ey||i.each(function(e){i.setItemVisual(e,"color",r(t.getDataParams(e)))});var a=function(t,e){var i=t.getItemModel(e),r=i.get(n,!0);null!=r&&t.setItemVisual(e,"color",r)};return{dataEach:i.hasItemOption?a:null}}}},y_={toolbox:{brush:{title:{rect:"矩形选择",polygon:"圈选",lineX:"横向选择",lineY:"纵向选择",keep:"保持选择",clear:"清除选择"}},dataView:{title:"数据视图",lang:["数据视图","关闭","刷新"]},dataZoom:{title:{zoom:"区域缩放",back:"区域缩放还原"}},magicType:{title:{line:"切换为折线图",bar:"切换为柱状图",stack:"切换为堆叠",tiled:"切换为平铺"}},restore:{title:"还原"},saveAsImage:{title:"保存为图片",lang:["右键另存为图片"]}},series:{typeNames:{pie:"饼图",bar:"柱状图",line:"折线图",scatter:"散点图",effectScatter:"涟漪散点图",radar:"雷达图",tree:"树图",treemap:"矩形树图",boxplot:"箱型图",candlestick:"K线图",k:"K线图",heatmap:"热力图",map:"地图",parallel:"平行坐标图",lines:"线图",graph:"关系图",sankey:"桑基图",funnel:"漏斗图",gauge:"仪表盘图",pictorialBar:"象形柱图",themeRiver:"主题河流图",sunburst:"旭日图"}},aria:{general:{withTitle:"这是一个关于“{title}”的图表。",withoutTitle:"这是一个图表,"},series:{single:{prefix:"",withName:"图表类型是{seriesType},表示{seriesName}。",withoutName:"图表类型是{seriesType}。"},multiple:{prefix:"它由{seriesCount}个图表系列组成。",withName:"第{seriesId}个系列是一个表示{seriesName}的{seriesType},",withoutName:"第{seriesId}个系列是一个{seriesType},",separator:{middle:";",end:"。"}}},data:{allData:"其数据是——",partialData:"其中,前{displayCnt}项是——",withName:"{name}的数据是{value}",withoutName:"{value}",separator:{middle:",",end:""}}}},x_=function(t,e){function i(t,e){if("string"!=typeof t)return t;var i=t;return f(e,function(t,e){i=i.replace(new RegExp("\\{\\s*"+e+"\\s*\\}","g"),t)}),i}function n(t){var e=o.get(t);if(null==e){for(var i=t.split("."),n=y_.aria,r=0;rs)){var d=r();l=d?i(n("general.withTitle"),{title:d}):n("general.withoutTitle");var p=[],g=s>1?"series.multiple.prefix":"series.single.prefix";l+=i(n(g),{seriesCount:s}),e.eachSeries(function(t,e){if(c>e){var r,o=t.get("name"),l="series."+(s>1?"multiple":"single")+".";r=n(o?l+"withName":l+"withoutName"),r=i(r,{seriesId:t.seriesIndex,seriesName:t.get("name"),seriesType:a(t.subType)});var u=t.getData();window.data=u,r+=u.count()>h?i(n("data.partialData"),{displayCnt:h}):n("data.allData");for(var d=[],f=0;ff){var g=u.getName(f),v=Ss(u,f);d.push(i(n(g?"data.withName":"data.withoutName"),{name:g,value:v}))}r+=d.join(n("data.separator.middle"))+n("data.separator.end"),p.push(r)}}),l+=p.join(n("series.multiple.separator.middle"))+n("series.multiple.separator.end"),t.setAttribute("aria-label",l)}}},__=Math.PI,w_=function(t,e){e=e||{},s(e,{text:"loading",color:"#c23531",textColor:"#000",maskColor:"rgba(255, 255, 255, 0.8)",zlevel:0});var i=new Dy({style:{fill:e.maskColor},zlevel:e.zlevel,z:1e4}),n=new Oy({shape:{startAngle:-__/2,endAngle:-__/2+.1,r:10},style:{stroke:e.color,lineCap:"round",lineWidth:5},zlevel:e.zlevel,z:10001}),r=new Dy({style:{fill:"none",text:e.text,textPosition:"right",textDistance:10,textFill:e.textColor},zlevel:e.zlevel,z:10001});n.animateShape(!0).when(1e3,{endAngle:3*__/2}).start("circularInOut"),n.animateShape(!0).when(1e3,{startAngle:3*__/2}).delay(300).start("circularInOut");var a=new lv;return a.add(n),a.add(r),a.add(i),a.resize=function(){var e=t.getWidth()/2,a=t.getHeight()/2;n.setShape({cx:e,cy:a});var o=n.shape.r;r.setShape({x:e-o,y:a-o,width:2*o,height:2*o}),i.setShape({x:0,y:0,width:t.getWidth(),height:t.getHeight()})},a.resize(),a},b_=Xs.prototype;b_.restoreData=function(t,e){t.restoreData(e),this._stageTaskMap.each(function(t){var e=t.overallTask;e&&e.dirty()})},b_.getPerformArgs=function(t,e){if(t.__pipeline){var i=this._pipelineMap.get(t.__pipeline.id),n=i.context,r=!e&&i.progressiveEnabled&&(!n||n.progressiveRender)&&t.__idxInPipeline>i.blockIndex,a=r?i.step:null,o=n&&n.modDataCount,s=null!=o?Math.ceil(o/a):null;return{step:a,modBy:s,modDataCount:o}}},b_.getPipeline=function(t){return this._pipelineMap.get(t)},b_.updateStreamModes=function(t,e){var i=this._pipelineMap.get(t.uid),n=t.getData(),r=n.count(),a=i.progressiveEnabled&&e.incrementalPrepareRender&&r>=i.threshold,o=t.get("large")&&r>=t.get("largeThreshold"),s="mod"===t.get("progressiveChunkMode")?r:null;t.pipelineContext=i.context={progressiveRender:a,modDataCount:s,large:o}},b_.restorePipelines=function(t){var e=this,i=e._pipelineMap=N();t.eachSeries(function(t){var n=t.getProgressive(),r=t.uid;i.set(r,{id:r,head:null,tail:null,threshold:t.getProgressiveThreshold(),progressiveEnabled:n&&!(t.preventIncremental&&t.preventIncremental()),blockIndex:-1,step:Math.round(n||700),count:0}),nl(e,t,t.dataTask)})},b_.prepareStageTasks=function(){var t=this._stageTaskMap,e=this.ecInstance.getModel(),i=this.api;f(this._allHandlers,function(n){var r=t.get(n.uid)||t.set(n.uid,[]);n.reset&&js(this,n,r,e,i),n.overallReset&&qs(this,n,r,e,i)},this)},b_.prepareView=function(t,e,i,n){var r=t.renderTask,a=r.context;a.model=e,a.ecModel=i,a.api=n,r.__block=!t.incrementalPrepareRender,nl(this,e,r)},b_.performDataProcessorTasks=function(t,e){Ys(this,this._dataProcessorHandlers,t,e,{block:!0})},b_.performVisualTasks=function(t,e,i){Ys(this,this._visualHandlers,t,e,i)},b_.performSeriesTasks=function(t){var e;t.eachSeries(function(t){e|=t.dataTask.perform()}),this.unfinished|=e},b_.plan=function(){this._pipelineMap.each(function(t){var e=t.tail;do{if(e.__block){t.blockIndex=e.__idxInPipeline;break}e=e.getUpstream()}while(e)})};var S_=b_.updatePayload=function(t,e){"remain"!==e&&(t.context.payload=e)},M_=el(0);Xs.wrapStageHandler=function(t,e){return w(t)&&(t={overallReset:t,seriesType:rl(t)}),t.uid=Za("stageHandler"),e&&(t.visualType=e),t};var I_,T_={},C_={};al(T_,Ex),al(C_,$o),T_.eachSeriesByType=T_.eachRawSeriesByType=function(t){I_=t},T_.eachComponent=function(t){"series"===t.mainType&&t.subType&&(I_=t.subType)};var A_=["#37A2DA","#32C5E9","#67E0E3","#9FE6B8","#FFDB5C","#ff9f7f","#fb7293","#E062AE","#E690D1","#e7bcf3","#9d96f5","#8378EA","#96BFFF"],D_={color:A_,colorLayer:[["#37A2DA","#ffd85c","#fd7b5f"],["#37A2DA","#67E0E3","#FFDB5C","#ff9f7f","#E062AE","#9d96f5"],["#37A2DA","#32C5E9","#9FE6B8","#FFDB5C","#ff9f7f","#fb7293","#e7bcf3","#8378EA","#96BFFF"],A_]},k_="#eee",P_=function(){return{axisLine:{lineStyle:{color:k_}},axisTick:{lineStyle:{color:k_}},axisLabel:{textStyle:{color:k_}},splitLine:{lineStyle:{type:"dashed",color:"#aaa"}},splitArea:{areaStyle:{color:k_}}}},L_=["#dd6b66","#759aa0","#e69d87","#8dc1a9","#ea7e53","#eedd78","#73a373","#73b9bc","#7289ab","#91ca8c","#f49f42"],O_={color:L_,backgroundColor:"#333",tooltip:{axisPointer:{lineStyle:{color:k_},crossStyle:{color:k_}}},legend:{textStyle:{color:k_}},textStyle:{color:k_},title:{textStyle:{color:k_}},toolbox:{iconStyle:{normal:{borderColor:k_}}},dataZoom:{textStyle:{color:k_}},visualMap:{textStyle:{color:k_}},timeline:{lineStyle:{color:k_},itemStyle:{normal:{color:L_[1]}},label:{normal:{textStyle:{color:k_}}},controlStyle:{normal:{color:k_,borderColor:k_}}},timeAxis:P_(),logAxis:P_(),valueAxis:P_(),categoryAxis:P_(),line:{symbol:"circle"},graph:{color:L_},gauge:{title:{textStyle:{color:k_}}},candlestick:{itemStyle:{normal:{color:"#FD1050",color0:"#0CF49B",borderColor:"#FD1050",borderColor0:"#0CF49B"}}}};O_.categoryAxis.splitLine.show=!1,yx.extend({type:"dataset",defaultOption:{seriesLayoutBy:Px,sourceHeader:null,dimensions:null,source:null},optionUpdated:function(){Po(this)}}),s_.extend({type:"dataset"});var z_=Fr.extend({type:"ellipse",shape:{cx:0,cy:0,rx:0,ry:0},buildPath:function(t,e){var i=.5522848,n=e.cx,r=e.cy,a=e.rx,o=e.ry,s=a*i,l=o*i;t.moveTo(n-a,r),t.bezierCurveTo(n-a,r-l,n-s,r-o,n,r-o),t.bezierCurveTo(n+s,r-o,n+a,r-l,n+a,r),t.bezierCurveTo(n+a,r+l,n+s,r+o,n,r+o),t.bezierCurveTo(n-s,r+o,n-a,r+l,n-a,r),t.closePath()}}),E_=/[\s,]+/;sl.prototype.parse=function(t,e){e=e||{};var i=ol(t);if(!i)throw new Error("Illegal svg");var n=new lv;this._root=n;var r=i.getAttribute("viewBox")||"",a=parseFloat(i.getAttribute("width")||e.width),o=parseFloat(i.getAttribute("height")||e.height);isNaN(a)&&(a=null),isNaN(o)&&(o=null),cl(i,n,null,!0);for(var s=i.firstChild;s;)this._parseNode(s,n),s=s.nextSibling;var l,h;if(r){var u=z(r).split(E_);u.length>=4&&(l={x:parseFloat(u[0]||0),y:parseFloat(u[1]||0),width:parseFloat(u[2]),height:parseFloat(u[3])})}if(l&&null!=a&&null!=o&&(h=gl(l,a,o),!e.ignoreViewBox)){var c=n;n=new lv,n.add(c),c.scale=h.scale.slice(),c.position=h.position.slice()}return e.ignoreRootClip||null==a||null==o||n.setClipPath(new Dy({shape:{x:0,y:0,width:a,height:o}})),{root:n,width:a,height:o,viewBoxRect:l,viewBoxTransform:h}},sl.prototype._parseNode=function(t,e){var i=t.nodeName.toLowerCase();"defs"===i?this._isDefine=!0:"text"===i&&(this._isText=!0);var n;if(this._isDefine){var r=B_[i];if(r){var a=r.call(this,t),o=t.getAttribute("id");o&&(this._defs[o]=a)}}else{var r=R_[i];r&&(n=r.call(this,t,e),e.add(n))}for(var s=t.firstChild;s;)1===s.nodeType&&this._parseNode(s,n),3===s.nodeType&&this._isText&&this._parseText(s,n),s=s.nextSibling;"defs"===i?this._isDefine=!1:"text"===i&&(this._isText=!1)},sl.prototype._parseText=function(t,e){if(1===t.nodeType){var i=t.getAttribute("dx")||0,n=t.getAttribute("dy")||0;this._textX+=parseFloat(i),this._textY+=parseFloat(n)}var r=new xy({style:{text:t.textContent,transformText:!0},position:[this._textX||0,this._textY||0]});hl(e,r),cl(t,r,this._defs);var a=r.style.fontSize;a&&9>a&&(r.style.fontSize=9,r.scale=r.scale||[1,1],r.scale[0]*=a/9,r.scale[1]*=a/9);var o=r.getBoundingRect();return this._textX+=o.width,e.add(r),r};var R_={g:function(t,e){var i=new lv;return hl(e,i),cl(t,i,this._defs),i},rect:function(t,e){var i=new Dy;return hl(e,i),cl(t,i,this._defs),i.setShape({x:parseFloat(t.getAttribute("x")||0),y:parseFloat(t.getAttribute("y")||0),width:parseFloat(t.getAttribute("width")||0),height:parseFloat(t.getAttribute("height")||0)}),i},circle:function(t,e){var i=new _y;return hl(e,i),cl(t,i,this._defs),i.setShape({cx:parseFloat(t.getAttribute("cx")||0),cy:parseFloat(t.getAttribute("cy")||0),r:parseFloat(t.getAttribute("r")||0)}),i},line:function(t,e){var i=new ky;return hl(e,i),cl(t,i,this._defs),i.setShape({x1:parseFloat(t.getAttribute("x1")||0),y1:parseFloat(t.getAttribute("y1")||0),x2:parseFloat(t.getAttribute("x2")||0),y2:parseFloat(t.getAttribute("y2")||0)}),i},ellipse:function(t,e){var i=new z_;return hl(e,i),cl(t,i,this._defs),i.setShape({cx:parseFloat(t.getAttribute("cx")||0),cy:parseFloat(t.getAttribute("cy")||0),rx:parseFloat(t.getAttribute("rx")||0),ry:parseFloat(t.getAttribute("ry")||0)}),i},polygon:function(t,e){var i=t.getAttribute("points");i&&(i=ul(i));var n=new Cy({shape:{points:i||[]}});return hl(e,n),cl(t,n,this._defs),n},polyline:function(t,e){var i=new Fr;hl(e,i),cl(t,i,this._defs);var n=t.getAttribute("points");n&&(n=ul(n));var r=new Ay({shape:{points:n||[]}});return r},image:function(t,e){var i=new yn;return hl(e,i),cl(t,i,this._defs),i.setStyle({image:t.getAttribute("xlink:href"),x:t.getAttribute("x"),y:t.getAttribute("y"),width:t.getAttribute("width"),height:t.getAttribute("height")}),i},text:function(t,e){var i=t.getAttribute("x")||0,n=t.getAttribute("y")||0,r=t.getAttribute("dx")||0,a=t.getAttribute("dy")||0;this._textX=parseFloat(i)+parseFloat(r),this._textY=parseFloat(n)+parseFloat(a);var o=new lv;return hl(e,o),cl(t,o,this._defs),o},tspan:function(t,e){var i=t.getAttribute("x"),n=t.getAttribute("y");null!=i&&(this._textX=parseFloat(i)),null!=n&&(this._textY=parseFloat(n));var r=t.getAttribute("dx")||0,a=t.getAttribute("dy")||0,o=new lv;return hl(e,o),cl(t,o,this._defs),this._textX+=r,this._textY+=a,o},path:function(t,e){var i=t.getAttribute("d")||"",n=Hr(i);return hl(e,n),cl(t,n,this._defs),n}},B_={lineargradient:function(t){var e=parseInt(t.getAttribute("x1")||0,10),i=parseInt(t.getAttribute("y1")||0,10),n=parseInt(t.getAttribute("x2")||10,10),r=parseInt(t.getAttribute("y2")||0,10),a=new Ry(e,i,n,r);return ll(t,a),a},radialgradient:function(){}},N_={fill:"fill",stroke:"stroke","stroke-width":"lineWidth",opacity:"opacity","fill-opacity":"fillOpacity","stroke-opacity":"strokeOpacity","stroke-dasharray":"lineDash","stroke-dashoffset":"lineDashOffset","stroke-linecap":"lineCap","stroke-linejoin":"lineJoin","stroke-miterlimit":"miterLimit","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","text-align":"textAlign","alignment-baseline":"textBaseline"},F_=/url\(\s*#(.*?)\)/,V_=/(translate|scale|rotate|skewX|skewY|matrix)\(([\-\s0-9\.e,]*)\)/g,W_=/([^\s:;]+)\s*:\s*([^:;]+)/g,G_=N(),H_={registerMap:function(t,e,i){var n;return _(e)?n=e:e.svg?n=[{type:"svg",source:e.svg,specialAreas:e.specialAreas}]:(e.geoJson&&!e.features&&(i=e.specialAreas,e=e.geoJson),n=[{type:"geoJSON",source:e,specialAreas:i}]),f(n,function(t){var e=t.type;"geoJson"===e&&(e=t.type="geoJSON");var i=Z_[e];i(t)}),G_.set(t,n)},retrieveMap:function(t){return G_.get(t)}},Z_={geoJSON:function(t){var e=t.source;t.geoJSON=b(e)?"undefined"!=typeof JSON&&JSON.parse?JSON.parse(e):new Function("return ("+e+");")():e},svg:function(t){t.svgXML=ol(t.source)}},X_=O,Y_=f,j_=w,q_=S,U_=yx.parseClassType,$_="4.2.0",K_={zrender:"4.0.5"},Q_=1,J_=1e3,tw=5e3,ew=1e3,iw=2e3,nw=3e3,rw=4e3,aw=5e3,ow={PROCESSOR:{FILTER:J_,STATISTIC:tw},VISUAL:{LAYOUT:ew,GLOBAL:iw,CHART:nw,COMPONENT:rw,BRUSH:aw}},sw="__flagInMainProcess",lw="__optionUpdated",hw=/^[a-zA-Z0-9_]+$/;ml.prototype.on=vl("on"),ml.prototype.off=vl("off"),ml.prototype.one=vl("one"),c(ml,bg);var uw=yl.prototype;uw._onframe=function(){if(!this._disposed){var t=this._scheduler;if(this[lw]){var e=this[lw].silent;this[sw]=!0,_l(this),cw.update.call(this),this[sw]=!1,this[lw]=!1,Ml.call(this,e),Il.call(this,e)}else if(t.unfinished){var i=Q_,n=this._model,r=this._api;t.unfinished=!1;do{var a=+new Date;t.performSeriesTasks(n),t.performDataProcessorTasks(n),bl(this,n),t.performVisualTasks(n),Pl(this,this._model,r,"remain"),i-=+new Date-a}while(i>0&&t.unfinished);t.unfinished||this._zr.flush()}}},uw.getDom=function(){return this._dom},uw.getZr=function(){return this._zr},uw.setOption=function(t,e,i){var n;if(q_(e)&&(i=e.lazyUpdate,n=e.silent,e=e.notMerge),this[sw]=!0,!this._model||e){var r=new Qo(this._api),a=this._theme,o=this._model=new Ex(null,null,a,r);o.scheduler=this._scheduler,o.init(null,null,a,r)}this._model.setOption(t,vw),i?(this[lw]={silent:n},this[sw]=!1):(_l(this),cw.update.call(this),this._zr.flush(),this[lw]=!1,this[sw]=!1,Ml.call(this,n),Il.call(this,n))},uw.setTheme=function(){console.error("ECharts#setTheme() is DEPRECATED in ECharts 3.0")},uw.getModel=function(){return this._model},uw.getOption=function(){return this._model&&this._model.getOption()},uw.getWidth=function(){return this._zr.getWidth()},uw.getHeight=function(){return this._zr.getHeight()},uw.getDevicePixelRatio=function(){return this._zr.painter.dpr||window.devicePixelRatio||1},uw.getRenderedCanvas=function(t){if(tg.canvasSupported){t=t||{},t.pixelRatio=t.pixelRatio||1,t.backgroundColor=t.backgroundColor||this._model.get("backgroundColor");var e=this._zr;return e.painter.getRenderedCanvas(t)}},uw.getSvgDataUrl=function(){if(tg.svgSupported){var t=this._zr,e=t.storage.getDisplayList();return f(e,function(t){t.stopAnimation(!0)}),t.painter.pathToDataUrl()}},uw.getDataURL=function(t){t=t||{};var e=t.excludeComponents,i=this._model,n=[],r=this;Y_(e,function(t){i.eachComponent({mainType:t},function(t){var e=r._componentsMap[t.__viewId];e.group.ignore||(n.push(e),e.group.ignore=!0)})});var a="svg"===this._zr.painter.getType()?this.getSvgDataUrl():this.getRenderedCanvas(t).toDataURL("image/"+(t&&t.type||"png"));return Y_(n,function(t){t.group.ignore=!1}),a},uw.getConnectedDataURL=function(t){if(tg.canvasSupported){var e=this.group,i=Math.min,r=Math.max,a=1/0;if(bw[e]){var o=a,s=a,l=-a,h=-a,u=[],c=t&&t.pixelRatio||1;f(ww,function(a){if(a.group===e){var c=a.getRenderedCanvas(n(t)),d=a.getDom().getBoundingClientRect();o=i(d.left,o),s=i(d.top,s),l=r(d.right,l),h=r(d.bottom,h),u.push({dom:c,left:d.left,top:d.top})}}),o*=c,s*=c,l*=c,h*=c;var d=l-o,p=h-s,g=cg();g.width=d,g.height=p;var v=On(g);return Y_(u,function(t){var e=new yn({style:{x:t.left*c-o,y:t.top*c-s,image:t.dom}});v.add(e)}),v.refreshImmediately(),g.toDataURL("image/"+(t&&t.type||"png"))}return this.getDataURL(t)}},uw.convertToPixel=x(xl,"convertToPixel"),uw.convertFromPixel=x(xl,"convertFromPixel"),uw.containPixel=function(t,e){var i,n=this._model;return t=qn(n,t),f(t,function(t,n){n.indexOf("Models")>=0&&f(t,function(t){var r=t.coordinateSystem;if(r&&r.containPoint)i|=!!r.containPoint(e);else if("seriesModels"===n){var a=this._chartsMap[t.__viewId];a&&a.containPoint&&(i|=a.containPoint(e,t))}},this)},this),!!i},uw.getVisual=function(t,e){var i=this._model;t=qn(i,t,{defaultMainType:"series"});var n=t.seriesModel,r=n.getData(),a=t.hasOwnProperty("dataIndexInside")?t.dataIndexInside:t.hasOwnProperty("dataIndex")?r.indexOfRawIndex(t.dataIndex):null;return null!=a?r.getItemVisual(a,e):r.getVisual(e)},uw.getViewOfComponentModel=function(t){return this._componentsMap[t.__viewId]},uw.getViewOfSeriesModel=function(t){return this._chartsMap[t.__viewId]};var cw={prepareAndUpdate:function(t){_l(this),cw.update.call(this,t)},update:function(t){var e=this._model,i=this._api,n=this._zr,r=this._coordSysMgr,a=this._scheduler;if(e){a.restoreData(e,t),a.performSeriesTasks(e),r.create(e,i),a.performDataProcessorTasks(e,t),bl(this,e),r.update(e,i),Al(e),a.performVisualTasks(e,t),Dl(this,e,i,t);var o=e.get("backgroundColor")||"transparent";if(tg.canvasSupported)n.setBackgroundColor(o);else{var s=He(o);o=Qe(s,"rgb"),0===s[3]&&(o="transparent")}Ll(e,i)}},updateTransform:function(t){var e=this._model,i=this,n=this._api;if(e){var r=[];e.eachComponent(function(a,o){var s=i.getViewOfComponentModel(o);if(s&&s.__alive)if(s.updateTransform){var l=s.updateTransform(o,e,n,t);l&&l.update&&r.push(s)}else r.push(s)});var a=N();e.eachSeries(function(r){var o=i._chartsMap[r.__viewId];if(o.updateTransform){var s=o.updateTransform(r,e,n,t);s&&s.update&&a.set(r.uid,1)}else a.set(r.uid,1)}),Al(e),this._scheduler.performVisualTasks(e,t,{setDirty:!0,dirtyMap:a}),Pl(i,e,n,t,a),Ll(e,this._api)}},updateView:function(t){var e=this._model;e&&(Bs.markUpdateMethod(t,"updateView"),Al(e),this._scheduler.performVisualTasks(e,t,{setDirty:!0}),Dl(this,this._model,this._api,t),Ll(e,this._api))},updateVisual:function(t){cw.update.call(this,t)},updateLayout:function(t){cw.update.call(this,t)}};uw.resize=function(t){this._zr.resize(t);var e=this._model;if(this._loadingFX&&this._loadingFX.resize(),e){var i=e.resetOption("media"),n=t&&t.silent;this[sw]=!0,i&&_l(this),cw.update.call(this),this[sw]=!1,Ml.call(this,n),Il.call(this,n)}},uw.showLoading=function(t,e){if(q_(t)&&(e=t,t=""),t=t||"default",this.hideLoading(),_w[t]){var i=_w[t](this._api,e),n=this._zr;this._loadingFX=i,n.add(i)}},uw.hideLoading=function(){this._loadingFX&&this._zr.remove(this._loadingFX),this._loadingFX=null},uw.makeActionFromEvent=function(t){var e=o({},t);return e.type=pw[t.type],e},uw.dispatchAction=function(t,e){if(q_(e)||(e={silent:!!e}),fw[t.type]&&this._model){if(this[sw])return void this._pendingActions.push(t);Sl.call(this,t,e.silent),e.flush?this._zr.flush(!0):e.flush!==!1&&tg.browser.weChat&&this._throttledZrFlush(),Ml.call(this,e.silent),Il.call(this,e.silent)}},uw.appendData=function(t){var e=t.seriesIndex,i=this.getModel(),n=i.getSeriesByIndex(e);n.appendData(t),this._scheduler.unfinished=!0},uw.on=vl("on"),uw.off=vl("off"),uw.one=vl("one");var dw=["click","dblclick","mouseover","mouseout","mousemove","mousedown","mouseup","globalout","contextmenu"];uw._initEvents=function(){Y_(dw,function(t){this._zr.on(t,function(e){var i,n=this.getModel(),r=e.target,a="globalout"===t;if(a)i={};else if(r&&null!=r.dataIndex){var s=r.dataModel||n.getSeriesByIndex(r.seriesIndex);i=s&&s.getDataParams(r.dataIndex,r.dataType,r)||{}}else r&&r.eventData&&(i=o({},r.eventData));if(i){var l=i.componentType,h=i.componentIndex;("markLine"===l||"markPoint"===l||"markArea"===l)&&(l="series",h=i.seriesIndex);var u=l&&null!=h&&n.getComponent(l,h),c=u&&this["series"===u.mainType?"_chartsMap":"_componentsMap"][u.__viewId];i.event=e,i.type=t,this._ecEventProcessor.eventInfo={targetEl:r,packedEvent:i,model:u,view:c},this.trigger(t,i)}},this)},this),Y_(pw,function(t,e){this._messageCenter.on(e,function(t){this.trigger(e,t)},this)},this)},uw.isDisposed=function(){return this._disposed},uw.clear=function(){this.setOption({series:[]},!0)},uw.dispose=function(){if(!this._disposed){this._disposed=!0,$n(this.getDom(),Iw,"");var t=this._api,e=this._model;Y_(this._componentsViews,function(i){i.dispose(e,t)}),Y_(this._chartsViews,function(i){i.dispose(e,t)}),this._zr.dispose(),delete ww[this.id]}},c(yl,bg),Bl.prototype={constructor:Bl,normalizeQuery:function(t){var e={},i={},n={};if(b(t)){var r=U_(t);e.mainType=r.main||null,e.subType=r.sub||null}else{var a=["Index","Name","Id"],o={name:1,dataIndex:1,dataType:1};f(t,function(t,r){for(var s=!1,l=0;l0&&u===r.length-h.length){var c=r.slice(0,u);"data"!==c&&(e.mainType=c,e[h.toLowerCase()]=t,s=!0)}}o.hasOwnProperty(r)&&(i[r]=t,s=!0),s||(n[r]=t)})}return{cptQuery:e,dataQuery:i,otherQuery:n}},filter:function(t,e){function i(t,e,i,n){return null==t[i]||e[n||i]===t[i]}var n=this.eventInfo;if(!n)return!0;var r=n.targetEl,a=n.packedEvent,o=n.model,s=n.view;if(!o||!s)return!0;var l=e.cptQuery,h=e.dataQuery;return i(l,o,"mainType")&&i(l,o,"subType")&&i(l,o,"index","componentIndex")&&i(l,o,"name")&&i(l,o,"id")&&i(h,a,"name")&&i(h,a,"dataIndex")&&i(h,a,"dataType")&&(!s.filterForExposedEvent||s.filterForExposedEvent(t,e.otherQuery,r,a))},afterTrigger:function(){this.eventInfo=null}};var fw={},pw={},gw=[],vw=[],mw=[],yw=[],xw={},_w={},ww={},bw={},Sw=new Date-0,Mw=new Date-0,Iw="_echarts_instance_",Tw=Wl;Jl(iw,m_),Yl(Ux),jl(tw,$x),eh("default",w_),Ul({type:"highlight",event:"highlight",update:"highlight"},V),Ul({type:"downplay",event:"downplay",update:"downplay"},V),Xl("light",D_),Xl("dark",O_);var Cw={};uh.prototype={constructor:uh,add:function(t){return this._add=t,this},update:function(t){return this._update=t,this},remove:function(t){return this._remove=t,this},execute:function(){var t,e=this._old,i=this._new,n={},r={},a=[],o=[];for(ch(e,n,a,"_oldKeyGetter",this),ch(i,r,o,"_newKeyGetter",this),t=0;tu;u++)this._add&&this._add(l[u]);else this._add&&this._add(l)}}}};var Aw=N(["tooltip","label","itemName","itemId","seriesName"]),Dw=S,kw="undefined",Pw="e\x00\x00",Lw={"float":typeof Float64Array===kw?Array:Float64Array,"int":typeof Int32Array===kw?Array:Int32Array,ordinal:Array,number:Array,time:Array},Ow=typeof Uint32Array===kw?Array:Uint32Array,zw=typeof Uint16Array===kw?Array:Uint16Array,Ew=["hasItemOption","_nameList","_idList","_invertedIndicesMap","_rawData","_chunkSize","_chunkCount","_dimValueGetter","_count","_rawCount","_nameDimIdx","_idDimIdx"],Rw=["_extent","_approximateExtent","_rawExtent"],Bw=function(t,e){t=t||["x","y"];for(var i={},n=[],r={},a=0;a=e)){for(var i,n=this._chunkSize,r=this._rawData,a=this._storage,o=this.dimensions,s=o.length,l=this._dimensionInfos,h=this._nameList,u=this._idList,c=this._rawExtent,d=this._nameRepeatCount={},f=this._chunkCount,p=f-1,g=0;s>g;g++){var v=o[g];c[v]||(c[v]=Th());var m=l[v];0===m.otherDims.itemName&&(i=this._nameDimIdx=g),0===m.otherDims.itemId&&(this._idDimIdx=g);var y=Lw[m.type];a[v]||(a[v]=[]);var x=a[v][p];if(x&&x.lengthb;b+=n)a[v].push(new y(Math.min(e-b,n)));this._chunkCount=a[v].length}for(var S=new Array(s),M=t;e>M;M++){S=r.getItem(M,S);for(var I=Math.floor(M/n),T=M%n,b=0;s>b;b++){var v=o[b],C=a[v][I],A=this._dimValueGetter(S,v,M,b);C[T]=A;var D=c[v];AD[1]&&(D[1]=A)}if(!r.pure){var k=h[M];if(S&&null==k)if(null!=S.name)h[M]=k=S.name;else if(null!=i){var P=o[i],L=a[P][I];if(L){k=L[T];var O=l[P].ordinalMeta;O&&O.categories.length&&(k=O.categories[k])}}var z=null==S?null:S.id;null==z&&null!=k&&(d[k]=d[k]||0,z=k,d[k]>0&&(z+="__ec__"+d[k]),d[k]++),null!=z&&(u[M]=z)}}!r.persistent&&r.clean&&r.clean(),this._rawCount=this._count=e,this._extent={},yh(this)}},Nw.count=function(){return this._count},Nw.getIndices=function(){var t,e=this._indices;if(e){var i=e.constructor,n=this._count;if(i===Array){t=new i(n);for(var r=0;n>r;r++)t[r]=e[r]}else t=new i(e.buffer,0,n)}else for(var i=gh(this),t=new i(this.count()),r=0;r=0&&e=0&&en;n++)i.push(this.get(t[n],e));return i},Nw.hasValue=function(t){for(var e=this._dimensionsSummary.dataDimsOnCoord,i=this._dimensionInfos,n=0,r=e.length;r>n;n++)if("ordinal"!==i[e[n]].type&&isNaN(this.get(e[n],t)))return!1;return!0},Nw.getDataExtent=function(t){t=this.getDimension(t);var e=this._storage[t],i=Th();if(!e)return i;var n,r=this.count(),a=!this._indices;if(a)return this._rawExtent[t].slice();if(n=this._extent[t])return n.slice();n=i;for(var o=n[0],s=n[1],l=0;r>l;l++){var h=this._getFast(t,this.getRawIndex(l));o>h&&(o=h),h>s&&(s=h)}return n=[o,s],this._extent[t]=n,n},Nw.getApproximateExtent=function(t){return t=this.getDimension(t),this._approximateExtent[t]||this.getDataExtent(t)},Nw.setApproximateExtent=function(t,e){e=this.getDimension(e),this._approximateExtent[e]=t.slice()},Nw.getCalculationInfo=function(t){return this._calculationInfo[t]},Nw.setCalculationInfo=function(t,e){Dw(t)?o(this._calculationInfo,t):this._calculationInfo[t]=e},Nw.getSum=function(t){var e=this._storage[t],i=0;if(e)for(var n=0,r=this.count();r>n;n++){var a=this.get(t,n);isNaN(a)||(i+=a)}return i},Nw.getMedian=function(t){var e=[];this.each(t,function(t){isNaN(t)||e.push(t)});var i=[].concat(e).sort(function(t,e){return t-e}),n=this.count();return 0===n?0:n%2===1?i[(n-1)/2]:(i[n/2]+i[n/2-1])/2},Nw.rawIndexOf=function(t,e){var i=t&&this._invertedIndicesMap[t],n=i[e];return null==n||isNaN(n)?-1:n},Nw.indexOfName=function(t){for(var e=0,i=this.count();i>e;e++)if(this.getName(e)===t)return e;return-1},Nw.indexOfRawIndex=function(t){if(!this._indices)return t;if(t>=this._rawCount||0>t)return-1;var e=this._indices,i=e[t];if(null!=i&&i=n;){var a=(n+r)/2|0;if(e[a]t))return a;r=a-1}}return-1},Nw.indicesOfNearest=function(t,e,i){var n=this._storage,r=n[t],a=[];if(!r)return a;null==i&&(i=1/0);for(var o=Number.MAX_VALUE,s=-1,l=0,h=this.count();h>l;l++){var u=e-this.get(t,l),c=Math.abs(u);i>=u&&o>=c&&((o>c||u>=0&&0>s)&&(o=c,s=u,a.length=0),a.push(l))}return a},Nw.getRawIndex=_h,Nw.getRawDataItem=function(t){if(this._rawData.persistent)return this._rawData.getItem(this.getRawIndex(t));for(var e=[],i=0;io;o++)s[o]=this.get(t[o],a);s[o]=a,e.apply(i,s)}}},Nw.filterSelf=function(t,e,i,n){if(this._count){"function"==typeof t&&(n=i,i=e,e=t,t=[]),i=i||n||this,t=p(Sh(t),this.getDimension,this);for(var r=this.count(),a=gh(this),o=new a(r),s=[],l=t.length,h=0,u=t[0],c=0;r>c;c++){var d,f=this.getRawIndex(c);if(0===l)d=e.call(i,c);else if(1===l){var g=this._getFast(u,f);d=e.call(i,g,c)}else{for(var v=0;l>v;v++)s[v]=this._getFast(u,f);s[v]=c,d=e.apply(i,s)}d&&(o[h++]=f)}return r>h&&(this._indices=o),this._count=h,this._extent={},this.getRawIndex=this._indices?wh:_h,this}},Nw.selectRange=function(t){if(this._count){var e=[];for(var i in t)t.hasOwnProperty(i)&&e.push(i);var n=e.length;if(n){var r=this.count(),a=gh(this),o=new a(r),s=0,l=e[0],h=t[l][0],u=t[l][1],c=!1;if(!this._indices){var d=0;if(1===n){for(var f=this._storage[e[0]],p=0;pm;m++){var y=g[m];(y>=h&&u>=y||isNaN(y))&&(o[s++]=d),d++}c=!0}else if(2===n){for(var f=this._storage[l],x=this._storage[e[1]],_=t[e[1]][0],w=t[e[1]][1],p=0;pm;m++){var y=g[m],S=b[m]; - (y>=h&&u>=y||isNaN(y))&&(S>=_&&w>=S||isNaN(S))&&(o[s++]=d),d++}c=!0}}if(!c)if(1===n)for(var m=0;r>m;m++){var M=this.getRawIndex(m),y=this._getFast(l,M);(y>=h&&u>=y||isNaN(y))&&(o[s++]=M)}else for(var m=0;r>m;m++){for(var I=!0,M=this.getRawIndex(m),p=0;n>p;p++){var T=e[p],y=this._getFast(i,M);(yt[T][1])&&(I=!1)}I&&(o[s++]=this.getRawIndex(m))}return r>s&&(this._indices=o),this._count=s,this._extent={},this.getRawIndex=this._indices?wh:_h,this}}},Nw.mapArray=function(t,e,i,n){"function"==typeof t&&(n=i,i=e,e=t,t=[]),i=i||n||this;var r=[];return this.each(t,function(){r.push(e&&e.apply(this,arguments))},i),r},Nw.map=function(t,e,i,n){i=i||n||this,t=p(Sh(t),this.getDimension,this);var r=Mh(this,t);r._indices=this._indices,r.getRawIndex=r._indices?wh:_h;for(var a=r._storage,o=[],s=this._chunkSize,l=t.length,h=this.count(),u=[],c=r._rawExtent,d=0;h>d;d++){for(var f=0;l>f;f++)u[f]=this.get(t[f],d);u[l]=d;var g=e&&e.apply(i,u);if(null!=g){"object"!=typeof g&&(o[0]=g,g=o);for(var v=this.getRawIndex(d),m=Math.floor(v/s),y=v%s,x=0;xb[1]&&(b[1]=w)}}}return r},Nw.downSample=function(t,e,i,n){for(var r=Mh(this,[t]),a=r._storage,o=[],s=Math.floor(1/e),l=a[t],h=this.count(),u=this._chunkSize,c=r._rawExtent[t],d=new(gh(this))(h),f=0,p=0;h>p;p+=s){s>h-p&&(s=h-p,o.length=s);for(var g=0;s>g;g++){var v=this.getRawIndex(p+g),m=Math.floor(v/u),y=v%u;o[g]=l[m][y]}var x=i(o),_=this.getRawIndex(Math.min(p+n(o,x)||0,h-1)),w=Math.floor(_/u),b=_%u;l[w][b]=x,xc[1]&&(c[1]=x),d[f++]=_}return r._count=f,r._indices=d,r.getRawIndex=wh,r},Nw.getItemModel=function(t){var e=this.hostModel;return new Wa(this.getRawDataItem(t),e,e&&e.ecModel)},Nw.diff=function(t){var e=this;return new uh(t?t.getIndices():[],this.getIndices(),function(e){return bh(t,e)},function(t){return bh(e,t)})},Nw.getVisual=function(t){var e=this._visual;return e&&e[t]},Nw.setVisual=function(t,e){if(Dw(t))for(var i in t)t.hasOwnProperty(i)&&this.setVisual(i,t[i]);else this._visual=this._visual||{},this._visual[t]=e},Nw.setLayout=function(t,e){if(Dw(t))for(var i in t)t.hasOwnProperty(i)&&this.setLayout(i,t[i]);else this._layout[t]=e},Nw.getLayout=function(t){return this._layout[t]},Nw.getItemLayout=function(t){return this._itemLayouts[t]},Nw.setItemLayout=function(t,e,i){this._itemLayouts[t]=i?o(this._itemLayouts[t]||{},e):e},Nw.clearItemLayouts=function(){this._itemLayouts.length=0},Nw.getItemVisual=function(t,e,i){var n=this._itemVisuals[t],r=n&&n[e];return null!=r||i?r:this.getVisual(e)},Nw.setItemVisual=function(t,e,i){var n=this._itemVisuals[t]||{},r=this.hasItemVisual;if(this._itemVisuals[t]=n,Dw(e))for(var a in e)e.hasOwnProperty(a)&&(n[a]=e[a],r[a]=!0);else n[e]=i,r[e]=!0},Nw.clearAllVisual=function(){this._visual={},this._itemVisuals=[],this.hasItemVisual={}};var Fw=function(t){t.seriesIndex=this.seriesIndex,t.dataIndex=this.dataIndex,t.dataType=this.dataType};Nw.setItemGraphicEl=function(t,e){var i=this.hostModel;e&&(e.dataIndex=t,e.dataType=this.dataType,e.seriesIndex=i&&i.seriesIndex,"group"===e.type&&e.traverse(Fw,e)),this._graphicEls[t]=e},Nw.getItemGraphicEl=function(t){return this._graphicEls[t]},Nw.eachItemGraphicEl=function(t,e){f(this._graphicEls,function(i,n){i&&t&&t.call(e,i,n)})},Nw.cloneShallow=function(t){if(!t){var e=p(this.dimensions,this.getDimensionInfo,this);t=new Bw(e,this.hostModel)}if(t._storage=this._storage,mh(t,this),this._indices){var i=this._indices.constructor;t._indices=new i(this._indices)}else t._indices=null;return t.getRawIndex=t._indices?wh:_h,t},Nw.wrapMethod=function(t,e){var i=this[t];"function"==typeof i&&(this.__wrappedMethods=this.__wrappedMethods||[],this.__wrappedMethods.push(t),this[t]=function(){var t=i.apply(this,arguments);return e.apply(this,[t].concat(P(arguments)))})},Nw.TRANSFERABLE_METHODS=["cloneShallow","downSample","map"],Nw.CHANGABLE_METHODS=["filterSelf","selectRange"];var Vw=function(t,e){return e=e||{},Ch(e.coordDimensions||[],t,{dimsDef:e.dimensionsDefine||t.dimensionsDefine,encodeDef:e.encodeDefine||t.encodeDefine,dimCount:e.dimensionsCount,generateCoord:e.generateCoord,generateCoordCount:e.generateCoordCount})};Rh.prototype.parse=function(t){return t},Rh.prototype.getSetting=function(t){return this._setting[t]},Rh.prototype.contain=function(t){var e=this._extent;return t>=e[0]&&t<=e[1]},Rh.prototype.normalize=function(t){var e=this._extent;return e[1]===e[0]?.5:(t-e[0])/(e[1]-e[0])},Rh.prototype.scale=function(t){var e=this._extent;return t*(e[1]-e[0])+e[0]},Rh.prototype.unionExtent=function(t){var e=this._extent;t[0]e[1]&&(e[1]=t[1])},Rh.prototype.unionExtentFromData=function(t,e){this.unionExtent(t.getApproximateExtent(e))},Rh.prototype.getExtent=function(){return this._extent.slice()},Rh.prototype.setExtent=function(t,e){var i=this._extent;isNaN(t)||(i[0]=t),isNaN(e)||(i[1]=e)},Rh.prototype.isBlank=function(){return this._isBlank},Rh.prototype.setBlank=function(t){this._isBlank=t},Rh.prototype.getLabel=null,er(Rh),ar(Rh,{registerWhenExtend:!0}),Bh.createByAxisModel=function(t){var e=t.option,i=e.data,n=i&&p(i,Fh);return new Bh({categories:n,needCollect:!n,deduplication:e.dedplication!==!1})};var Ww=Bh.prototype;Ww.getOrdinal=function(t){return Nh(this).get(t)},Ww.parseAndCollect=function(t){var e,i=this._needCollect;if("string"!=typeof t&&!i)return t;if(i&&!this._deduplication)return e=this.categories.length,this.categories[e]=t,e;var n=Nh(this);return e=n.get(t),null==e&&(i?(e=this.categories.length,this.categories[e]=t,n.set(t,e)):e=0/0),e};var Gw=Rh.prototype,Hw=Rh.extend({type:"ordinal",init:function(t,e){(!t||_(t))&&(t=new Bh({categories:t})),this._ordinalMeta=t,this._extent=e||[0,t.categories.length-1]},parse:function(t){return"string"==typeof t?this._ordinalMeta.getOrdinal(t):Math.round(t)},contain:function(t){return t=this.parse(t),Gw.contain.call(this,t)&&null!=this._ordinalMeta.categories[t]},normalize:function(t){return Gw.normalize.call(this,this.parse(t))},scale:function(t){return Math.round(Gw.scale.call(this,t))},getTicks:function(){for(var t=[],e=this._extent,i=e[0];i<=e[1];)t.push(i),i++;return t},getLabel:function(t){return this.isBlank()?void 0:this._ordinalMeta.categories[t]},count:function(){return this._extent[1]-this._extent[0]+1},unionExtentFromData:function(t,e){this.unionExtent(t.getApproximateExtent(e))},getOrdinalMeta:function(){return this._ordinalMeta},niceTicks:V,niceExtent:V});Hw.create=function(){return new Hw};var Zw=$a,Xw=$a,Yw=Rh.extend({type:"interval",_interval:0,_intervalPrecision:2,setExtent:function(t,e){var i=this._extent;isNaN(t)||(i[0]=parseFloat(t)),isNaN(e)||(i[1]=parseFloat(e))},unionExtent:function(t){var e=this._extent;t[0]e[1]&&(e[1]=t[1]),Yw.prototype.setExtent.call(this,e[0],e[1])},getInterval:function(){return this._interval},setInterval:function(t){this._interval=t,this._niceExtent=this._extent.slice(),this._intervalPrecision=Wh(t)},getTicks:function(){return Zh(this._interval,this._extent,this._niceExtent,this._intervalPrecision)},getLabel:function(t,e){if(null==t)return"";var i=e&&e.precision;return null==i?i=Ja(t)||0:"auto"===i&&(i=this._intervalPrecision),t=Xw(t,i,!0),co(t)},niceTicks:function(t,e,i){t=t||5;var n=this._extent,r=n[1]-n[0];if(isFinite(r)){0>r&&(r=-r,n.reverse());var a=Vh(n,t,e,i);this._intervalPrecision=a.intervalPrecision,this._interval=a.interval,this._niceExtent=a.niceTickExtent}},niceExtent:function(t){var e=this._extent;if(e[0]===e[1])if(0!==e[0]){var i=e[0];t.fixMax?e[0]-=i/2:(e[1]+=i/2,e[0]-=i/2)}else e[1]=1;var n=e[1]-e[0];isFinite(n)||(e[0]=0,e[1]=1),this.niceTicks(t.splitNumber,t.minInterval,t.maxInterval);var r=this._interval;t.fixMin||(e[0]=Xw(Math.floor(e[0]/r)*r)),t.fixMax||(e[1]=Xw(Math.ceil(e[1]/r)*r))}});Yw.create=function(){return new Yw};var jw="__ec_stack_",qw=.5,Uw="undefined"!=typeof Float32Array?Float32Array:Array,$w={seriesType:"bar",plan:h_(),reset:function(t){function e(t,e){for(var i,c=new Uw(2*t.count),d=[],f=[],p=0;null!=(i=t.next());)f[h]=e.get(o,i),f[1-h]=e.get(s,i),d=n.dataToPoint(f,null,d),c[p++]=d[0],c[p++]=d[1];e.setLayout({largePoints:c,barWidth:u,valueAxisStart:eu(r,a,!1),valueAxisHorizontal:l})}if(Jh(t)&&tu(t)){var i=t.getData(),n=t.coordinateSystem,r=n.getBaseAxis(),a=n.getOtherAxis(r),o=i.mapDimension(a.dim),s=i.mapDimension(r.dim),l=a.isHorizontal(),h=l?0:1,u=Kh(Uh([t]),r,t).width;return u>qw||(u=qw),{progress:e}}}},Kw=Yw.prototype,Qw=Math.ceil,Jw=Math.floor,tb=1e3,eb=60*tb,ib=60*eb,nb=24*ib,rb=function(t,e,i,n){for(;n>i;){var r=i+n>>>1;t[r][1]a&&(a=e),null!=i&&a>i&&(a=i);var o=ob.length,s=rb(ob,a,0,o),l=ob[Math.min(s,o-1)],h=l[1];if("year"===l[0]){var u=r/h,c=so(u/t,!0);h*=c}var d=this.getSetting("useUTC")?0:60*new Date(+n[0]||+n[1]).getTimezoneOffset()*1e3,f=[Math.round(Qw((n[0]-d)/h)*h+d),Math.round(Jw((n[1]-d)/h)*h+d)];Hh(f,n),this._stepLvl=l,this._interval=h,this._niceExtent=f},parse:function(t){return+ro(t)}});f(["contain","normalize"],function(t){ab.prototype[t]=function(e){return Kw[t].call(this,this.parse(e))}});var ob=[["hh:mm:ss",tb],["hh:mm:ss",5*tb],["hh:mm:ss",10*tb],["hh:mm:ss",15*tb],["hh:mm:ss",30*tb],["hh:mm\nMM-dd",eb],["hh:mm\nMM-dd",5*eb],["hh:mm\nMM-dd",10*eb],["hh:mm\nMM-dd",15*eb],["hh:mm\nMM-dd",30*eb],["hh:mm\nMM-dd",ib],["hh:mm\nMM-dd",2*ib],["hh:mm\nMM-dd",6*ib],["hh:mm\nMM-dd",12*ib],["MM-dd\nyyyy",nb],["MM-dd\nyyyy",2*nb],["MM-dd\nyyyy",3*nb],["MM-dd\nyyyy",4*nb],["MM-dd\nyyyy",5*nb],["MM-dd\nyyyy",6*nb],["week",7*nb],["MM-dd\nyyyy",10*nb],["week",14*nb],["week",21*nb],["month",31*nb],["week",42*nb],["month",62*nb],["week",70*nb],["quarter",95*nb],["month",31*nb*4],["month",31*nb*5],["half-year",380*nb/2],["month",31*nb*8],["month",31*nb*10],["year",380*nb]];ab.create=function(t){return new ab({useUTC:t.ecModel.get("useUTC")})};var sb=Rh.prototype,lb=Yw.prototype,hb=Ja,ub=$a,cb=Math.floor,db=Math.ceil,fb=Math.pow,pb=Math.log,gb=Rh.extend({type:"log",base:10,$constructor:function(){Rh.apply(this,arguments),this._originalScale=new Yw},getTicks:function(){var t=this._originalScale,e=this._extent,i=t.getExtent();return p(lb.getTicks.call(this),function(n){var r=$a(fb(this.base,n));return r=n===e[0]&&t.__fixMin?iu(r,i[0]):r,r=n===e[1]&&t.__fixMax?iu(r,i[1]):r},this)},getLabel:lb.getLabel,scale:function(t){return t=sb.scale.call(this,t),fb(this.base,t)},setExtent:function(t,e){var i=this.base;t=pb(t)/pb(i),e=pb(e)/pb(i),lb.setExtent.call(this,t,e)},getExtent:function(){var t=this.base,e=sb.getExtent.call(this);e[0]=fb(t,e[0]),e[1]=fb(t,e[1]);var i=this._originalScale,n=i.getExtent();return i.__fixMin&&(e[0]=iu(e[0],n[0])),i.__fixMax&&(e[1]=iu(e[1],n[1])),e},unionExtent:function(t){this._originalScale.unionExtent(t);var e=this.base;t[0]=pb(t[0])/pb(e),t[1]=pb(t[1])/pb(e),sb.unionExtent.call(this,t)},unionExtentFromData:function(t,e){this.unionExtent(t.getApproximateExtent(e))},niceTicks:function(t){t=t||10;var e=this._extent,i=e[1]-e[0];if(!(1/0===i||0>=i)){var n=ao(i),r=t/i*n;for(.5>=r&&(n*=10);!isNaN(n)&&Math.abs(n)<1&&Math.abs(n)>0;)n*=10;var a=[$a(db(e[0]/n)*n),$a(cb(e[1]/n)*n)];this._interval=n,this._niceExtent=a}},niceExtent:function(t){lb.niceExtent.call(this,t);var e=this._originalScale;e.__fixMin=t.fixMin,e.__fixMax=t.fixMax}});f(["contain","normalize"],function(t){gb.prototype[t]=function(e){return e=pb(e)/pb(this.base),sb[t].call(this,e)}}),gb.create=function(){return new gb};var vb={getMin:function(t){var e=this.option,i=t||null==e.rangeStart?e.min:e.rangeStart;return this.axis&&null!=i&&"dataMin"!==i&&"function"!=typeof i&&!C(i)&&(i=this.axis.scale.parse(i)),i},getMax:function(t){var e=this.option,i=t||null==e.rangeEnd?e.max:e.rangeEnd;return this.axis&&null!=i&&"dataMax"!==i&&"function"!=typeof i&&!C(i)&&(i=this.axis.scale.parse(i)),i},getNeedCrossZero:function(){var t=this.option;return null!=t.rangeStart||null!=t.rangeEnd?!1:!t.scale},getCoordSysModel:V,setRange:function(t,e){this.option.rangeStart=t,this.option.rangeEnd=e},resetRange:function(){this.option.rangeStart=this.option.rangeEnd=null}},mb=$r({type:"triangle",shape:{cx:0,cy:0,width:0,height:0},buildPath:function(t,e){var i=e.cx,n=e.cy,r=e.width/2,a=e.height/2;t.moveTo(i,n-a),t.lineTo(i+r,n+a),t.lineTo(i-r,n+a),t.closePath()}}),yb=$r({type:"diamond",shape:{cx:0,cy:0,width:0,height:0},buildPath:function(t,e){var i=e.cx,n=e.cy,r=e.width/2,a=e.height/2;t.moveTo(i,n-a),t.lineTo(i+r,n),t.lineTo(i,n+a),t.lineTo(i-r,n),t.closePath()}}),xb=$r({type:"pin",shape:{x:0,y:0,width:0,height:0},buildPath:function(t,e){var i=e.x,n=e.y,r=e.width/5*3,a=Math.max(r,e.height),o=r/2,s=o*o/(a-o),l=n-a+o+s,h=Math.asin(s/o),u=Math.cos(h)*o,c=Math.sin(h),d=Math.cos(h),f=.6*o,p=.7*o;t.moveTo(i-u,l+s),t.arc(i,l,o,Math.PI-h,2*Math.PI+h),t.bezierCurveTo(i+u-c*f,l+s+d*f,i,n-p,i,n),t.bezierCurveTo(i,n-p,i-u+c*f,l+s+d*f,i-u,l+s),t.closePath()}}),_b=$r({type:"arrow",shape:{x:0,y:0,width:0,height:0},buildPath:function(t,e){var i=e.height,n=e.width,r=e.x,a=e.y,o=n/3*2;t.moveTo(r,a),t.lineTo(r+o,a+i),t.lineTo(r,a+i/4*3),t.lineTo(r-o,a+i),t.lineTo(r,a),t.closePath()}}),wb={line:ky,rect:Dy,roundRect:Dy,square:Dy,circle:_y,diamond:yb,pin:xb,arrow:_b,triangle:mb},bb={line:function(t,e,i,n,r){r.x1=t,r.y1=e+n/2,r.x2=t+i,r.y2=e+n/2},rect:function(t,e,i,n,r){r.x=t,r.y=e,r.width=i,r.height=n},roundRect:function(t,e,i,n,r){r.x=t,r.y=e,r.width=i,r.height=n,r.r=Math.min(i,n)/4},square:function(t,e,i,n,r){var a=Math.min(i,n);r.x=t,r.y=e,r.width=a,r.height=a},circle:function(t,e,i,n,r){r.cx=t+i/2,r.cy=e+n/2,r.r=Math.min(i,n)/2},diamond:function(t,e,i,n,r){r.cx=t+i/2,r.cy=e+n/2,r.width=i,r.height=n},pin:function(t,e,i,n,r){r.x=t+i/2,r.y=e+n/2,r.width=i,r.height=n},arrow:function(t,e,i,n,r){r.x=t+i/2,r.y=e+n/2,r.width=i,r.height=n},triangle:function(t,e,i,n,r){r.cx=t+i/2,r.cy=e+n/2,r.width=i,r.height=n}},Sb={};f(wb,function(t,e){Sb[e]=new t});var Mb=$r({type:"symbol",shape:{symbolType:"",x:0,y:0,width:0,height:0},beforeBrush:function(){var t=this.style,e=this.shape;"pin"===e.symbolType&&"inside"===t.textPosition&&(t.textPosition=["50%","40%"],t.textAlign="center",t.textVerticalAlign="middle")},buildPath:function(t,e,i){var n=e.symbolType,r=Sb[n];"none"!==e.symbolType&&(r||(n="rect",r=Sb[n]),bb[n](e.x,e.y,e.width,e.height,r.shape),r.buildPath(t,r.shape,i))}}),Ib={isDimensionStacked:Ph,enableDataStack:kh,getStackedDimension:Lh},Tb=(Object.freeze||Object)({createList:pu,getLayoutRect:bo,dataStack:Ib,createScale:gu,mixinAxisModelCommonMethods:vu,completeDimensions:Ch,createDimensions:Vw,createSymbol:fu}),Cb=1e-8;xu.prototype={constructor:xu,properties:null,getBoundingRect:function(){var t=this._rect;if(t)return t;for(var e=Number.MAX_VALUE,i=[e,e],n=[-e,-e],r=[],a=[],o=this.geometries,s=0;sn;n++)if("polygon"===i[n].type){var a=i[n].exterior,o=i[n].interiors;if(yu(a,t[0],t[1])){for(var s=0;s<(o?o.length:0);s++)if(yu(o[s]))continue t;return!0}}return!1},transformTo:function(t,e,i,n){var r=this.getBoundingRect(),a=r.width/r.height;i?n||(n=i/a):i=a*n;for(var o=new gi(t,e,i,n),s=r.calculateTransform(o),l=this.geometries,h=0;h0}),function(t){var e=t.properties,i=t.geometry,n=i.coordinates,r=[];"Polygon"===i.type&&r.push({type:"polygon",exterior:n[0],interiors:n.slice(1)}),"MultiPolygon"===i.type&&f(n,function(t){t[0]&&r.push({type:"polygon",exterior:t[0],interiors:t.slice(1)})});var a=new xu(e.name,r,e.cp);return a.properties=e,a})},Db=jn(),kb=[0,1],Pb=function(t,e,i){this.dim=t,this.scale=e,this._extent=i||[0,0],this.inverse=!1,this.onBand=!1};Pb.prototype={constructor:Pb,contain:function(t){var e=this._extent,i=Math.min(e[0],e[1]),n=Math.max(e[0],e[1]);return t>=i&&n>=t},containData:function(t){return this.contain(this.dataToCoord(t))},getExtent:function(){return this._extent.slice()},getPixelPrecision:function(t){return to(t||this.scale.getExtent(),this._extent)},setExtent:function(t,e){var i=this._extent;i[0]=t,i[1]=e},dataToCoord:function(t,e){var i=this._extent,n=this.scale;return t=n.normalize(t),this.onBand&&"ordinal"===n.type&&(i=i.slice(),Bu(i,n.count())),qa(t,kb,i,e)},coordToData:function(t,e){var i=this._extent,n=this.scale;this.onBand&&"ordinal"===n.type&&(i=i.slice(),Bu(i,n.count()));var r=qa(t,i,kb,e);return this.scale.scale(r)},pointToData:function(){},getTicksCoords:function(t){t=t||{};var e=t.tickModel||this.getTickModel(),i=Su(this,e),n=i.ticks,r=p(n,function(t){return{coord:this.dataToCoord(t),tickValue:t}},this),a=e.get("alignWithLabel");return Nu(this,r,i.tickCategoryInterval,a,t.clamp),r},getViewLabels:function(){return bu(this).labels},getLabelModel:function(){return this.model.getModel("axisLabel")},getTickModel:function(){return this.model.getModel("axisTick")},getBandWidth:function(){var t=this._extent,e=this.scale.getExtent(),i=e[1]-e[0]+(this.onBand?1:0);0===i&&(i=1);var n=Math.abs(t[1]-t[0]);return Math.abs(n)/i},isHorizontal:null,getRotate:null,calculateCategoryInterval:function(){return Lu(this)}};var Lb=Ab,Ob={};f(["map","each","filter","indexOf","inherits","reduce","filter","bind","curry","isArray","isString","isObject","isFunction","extend","defaults","clone","merge"],function(t){Ob[t]=pg[t]});var zb={};f(["extendShape","extendPath","makePath","makeImage","mergePath","resizePath","createIcon","setHoverStyle","setLabelStyle","setTextStyle","setText","getFont","updateProps","initProps","getTransform","clipPointsByRect","clipRectByRect","Group","Image","Text","Circle","Sector","Ring","Polygon","Polyline","Rect","Line","BezierCurve","Arc","IncrementalDisplayable","CompoundPath","LinearGradient","RadialGradient","BoundingRect"],function(t){zb[t]=Yy[t]});var Eb=function(t){this._axes={},this._dimList=[],this.name=t||""};Eb.prototype={constructor:Eb,type:"cartesian",getAxis:function(t){return this._axes[t]},getAxes:function(){return p(this._dimList,Fu,this)},getAxesByScale:function(t){return t=t.toLowerCase(),v(this.getAxes(),function(e){return e.scale.type===t})},addAxis:function(t){var e=t.dim;this._axes[e]=t,this._dimList.push(e)},dataToCoord:function(t){return this._dataCoordConvert(t,"dataToCoord")},coordToData:function(t){return this._dataCoordConvert(t,"coordToData")},_dataCoordConvert:function(t,e){for(var i=this._dimList,n=t instanceof Array?[]:{},r=0;re[1]&&e.reverse(),e},getOtherAxis:function(){this.grid.getOtherAxis()},pointToData:function(t,e){return this.coordToData(this.toLocalCoord(t["x"===this.dim?0:1]),e)},toLocalCoord:null,toGlobalCoord:null},u(Rb,Pb);var Bb={show:!0,zlevel:0,z:0,inverse:!1,name:"",nameLocation:"end",nameRotate:null,nameTruncate:{maxWidth:null,ellipsis:"...",placeholder:"."},nameTextStyle:{},nameGap:15,silent:!1,triggerEvent:!1,tooltip:{show:!1},axisPointer:{},axisLine:{show:!0,onZero:!0,onZeroAxisIndex:null,lineStyle:{color:"#333",width:1,type:"solid"},symbol:["none","none"],symbolSize:[10,15]},axisTick:{show:!0,inside:!1,length:5,lineStyle:{width:1}},axisLabel:{show:!0,inside:!1,rotate:0,showMinLabel:null,showMaxLabel:null,margin:8,fontSize:12},splitLine:{show:!0,lineStyle:{color:["#ccc"],width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:["rgba(250,250,250,0.3)","rgba(200,200,200,0.3)"]}}},Nb={};Nb.categoryAxis=r({boundaryGap:!0,deduplication:null,splitLine:{show:!1},axisTick:{alignWithLabel:!1,interval:"auto"},axisLabel:{interval:"auto"}},Bb),Nb.valueAxis=r({boundaryGap:[0,0],splitNumber:5},Bb),Nb.timeAxis=s({scale:!0,min:"dataMin",max:"dataMax"},Nb.valueAxis),Nb.logAxis=s({scale:!0,logBase:10},Nb.valueAxis);var Fb=["value","category","time","log"],Vb=function(t,e,i,n){f(Fb,function(o){e.extend({type:t+"Axis."+o,mergeDefaultAndTheme:function(e,n){var a=this.layoutMode,s=a?Mo(e):{},l=n.getTheme();r(e,l.get(o+"Axis")),r(e,this.getDefaultOption()),e.type=i(t,e),a&&So(e,s,a)},optionUpdated:function(){var t=this.option;"category"===t.type&&(this.__ordinalMeta=Bh.createByAxisModel(this))},getCategories:function(t){var e=this.option;return"category"===e.type?t?e.data:this.__ordinalMeta.categories:void 0},getOrdinalMeta:function(){return this.__ordinalMeta},defaultOption:a([{},Nb[o+"Axis"],n],!0)})}),yx.registerSubTypeDefaulter(t+"Axis",x(i,t))},Wb=yx.extend({type:"cartesian2dAxis",axis:null,init:function(){Wb.superApply(this,"init",arguments),this.resetRange()},mergeOption:function(){Wb.superApply(this,"mergeOption",arguments),this.resetRange()},restoreData:function(){Wb.superApply(this,"restoreData",arguments),this.resetRange()},getCoordSysModel:function(){return this.ecModel.queryComponents({mainType:"grid",index:this.option.gridIndex,id:this.option.gridId})[0]}});r(Wb.prototype,vb);var Gb={offset:0};Vb("x",Wb,Wu,Gb),Vb("y",Wb,Wu,Gb),yx.extend({type:"grid",dependencies:["xAxis","yAxis"],layoutMode:"box",coordinateSystem:null,defaultOption:{show:!1,zlevel:0,z:0,left:"10%",top:60,right:"10%",bottom:60,containLabel:!1,backgroundColor:"rgba(0,0,0,0)",borderWidth:1,borderColor:"#ccc"}});var Hb=Hu.prototype;Hb.type="grid",Hb.axisPointerEnabled=!0,Hb.getRect=function(){return this._rect},Hb.update=function(t,e){var i=this._axesMap;this._updateScale(t,this.model),f(i.x,function(t){au(t.scale,t.model)}),f(i.y,function(t){au(t.scale,t.model)});var n={};f(i.x,function(t){Zu(i,"y",t,n)}),f(i.y,function(t){Zu(i,"x",t,n)}),this.resize(this.model,e)},Hb.resize=function(t,e,i){function n(){f(a,function(t){var e=t.isHorizontal(),i=e?[0,r.width]:[0,r.height],n=t.inverse?1:0;t.setExtent(i[n],i[1-n]),Yu(t,e?r.x:r.y)})}var r=bo(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()});this._rect=r;var a=this._axesList;n(),!i&&t.get("containLabel")&&(f(a,function(t){if(!t.model.get("axisLabel.inside")){var e=uu(t);if(e){var i=t.isHorizontal()?"height":"width",n=t.model.get("axisLabel.margin");r[i]-=e[i]+n,"top"===t.position?r.y+=e.height+n:"left"===t.position&&(r.x+=e.width+n)}}}),n())},Hb.getAxis=function(t,e){var i=this._axesMap[t];if(null!=i){if(null==e)for(var n in i)if(i.hasOwnProperty(n))return i[n];return i[e]}},Hb.getAxes=function(){return this._axesList.slice()},Hb.getCartesian=function(t,e){if(null!=t&&null!=e){var i="x"+t+"y"+e;return this._coordsMap[i]}S(t)&&(e=t.yAxisIndex,t=t.xAxisIndex);for(var n=0,r=this._coordsList;nt&&(t=e),t}});var Yb=dm([["fill","color"],["stroke","borderColor"],["lineWidth","borderWidth"],["stroke","barBorderColor"],["lineWidth","barBorderWidth"],["opacity"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["shadowColor"]]),jb={getBarItemStyle:function(t){var e=Yb(this,t);if(this.getBorderLineDash){var i=this.getBorderLineDash();i&&(e.lineDash=i)}return e}},qb=["itemStyle","barBorderWidth"];o(Wa.prototype,jb),ah({type:"bar",render:function(t,e,i){this._updateDrawMode(t);var n=t.get("coordinateSystem");return("cartesian2d"===n||"polar"===n)&&(this._isLargeDraw?this._renderLarge(t,e,i):this._renderNormal(t,e,i)),this.group},incrementalPrepareRender:function(t){this._clear(),this._updateDrawMode(t)},incrementalRender:function(t,e){this._incrementalRenderLarge(t,e)},_updateDrawMode:function(t){var e=t.pipelineContext.large;(null==this._isLargeDraw||e^this._isLargeDraw)&&(this._isLargeDraw=e,this._clear())},_renderNormal:function(t){var e,i=this.group,n=t.getData(),r=this._data,a=t.coordinateSystem,o=a.getBaseAxis();"cartesian2d"===a.type?e=o.isHorizontal():"polar"===a.type&&(e="angle"===o.dim);var s=t.isAnimationEnabled()?t:null;n.diff(r).add(function(r){if(n.hasValue(r)){var o=n.getItemModel(r),l=$b[a.type](n,r,o),h=Ub[a.type](n,r,o,l,e,s);n.setItemGraphicEl(r,h),i.add(h),tc(h,n,r,o,l,t,e,"polar"===a.type)}}).update(function(o,l){var h=r.getItemGraphicEl(l);if(!n.hasValue(o))return void i.remove(h);var u=n.getItemModel(o),c=$b[a.type](n,o,u);h?La(h,{shape:c},s,o):h=Ub[a.type](n,o,u,c,e,s,!0),n.setItemGraphicEl(o,h),i.add(h),tc(h,n,o,u,c,t,e,"polar"===a.type)}).remove(function(t){var e=r.getItemGraphicEl(t);"cartesian2d"===a.type?e&&Qu(t,s,e):e&&Ju(t,s,e)}).execute(),this._data=n},_renderLarge:function(t){this._clear(),ic(t,this.group)},_incrementalRenderLarge:function(t,e){ic(e,this.group,!0)},dispose:V,remove:function(t){this._clear(t)},_clear:function(t){var e=this.group,i=this._data;t&&t.get("animation")&&i&&!this._isLargeDraw?i.eachItemGraphicEl(function(e){"sector"===e.type?Ju(e.dataIndex,t,e):Qu(e.dataIndex,t,e)}):e.removeAll(),this._data=null}});var Ub={cartesian2d:function(t,e,i,n,r,a,s){var l=new Dy({shape:o({},n)});if(a){var h=l.shape,u=r?"height":"width",c={};h[u]=0,c[u]=n[u],Yy[s?"updateProps":"initProps"](l,{shape:c},a,e)}return l},polar:function(t,e,i,n,r,a,o){var l=n.startAngle0?1:-1,o=n.height>0?1:-1;return{x:n.x+a*r/2,y:n.y+o*r/2,width:n.width-a*r,height:n.height-o*r}},polar:function(t,e){var i=t.getItemLayout(e);return{cx:i.cx,cy:i.cy,r0:i.r0,r:i.r,startAngle:i.startAngle,endAngle:i.endAngle}}},Kb=Fr.extend({type:"largeBar",shape:{points:[]},buildPath:function(t,e){for(var i=e.points,n=this.__startPoint,r=this.__valueIdx,a=0;ah[1]?-1:1,c=["start"===r?h[0]-u*l:"end"===r?h[1]+u*l:(h[0]+h[1])/2,uc(r)?t.labelOffset+a*l:0],d=e.get("nameRotate");null!=d&&(d=d*Qb/180);var f;uc(r)?n=eS(t.rotation,null!=d?d:t.rotation,a):(n=ac(t,r,d||0,h),f=t.axisNameAvailableWidth,null!=f&&(f=Math.abs(f/Math.sin(n.rotation)),!isFinite(f)&&(f=null)));var p=s.getFont(),g=e.get("nameTruncate",!0)||{},v=g.ellipsis,m=A(t.nameTruncateMaxWidth,g.maxWidth,f),y=null!=v&&null!=m?hx(i,m,p,v,{minChar:2,placeholder:g.placeholder}):i,x=e.get("tooltip",!0),_=e.mainType,w={componentType:_,name:i,$vars:["name"]};w[_+"Index"]=e.componentIndex;var b=new xy({anid:"name",__fullText:i,__truncatedText:y,position:c,rotation:n.rotation,silent:oc(e),z2:1,tooltip:x&&x.show?o({content:i,formatter:function(){return i},formatterParams:w},x):null});ba(b.style,s,{text:y,textFont:p,textFill:s.getTextColor()||e.get("axisLine.lineStyle.color"),textAlign:n.textAlign,textVerticalAlign:n.textVerticalAlign}),e.get("triggerEvent")&&(b.eventData=rc(e),b.eventData.targetType="axisName",b.eventData.name=i),this._dumbGroup.add(b),b.updateTransform(),this.group.add(b),b.decomposeTransform()}}},eS=Jb.innerTextLayout=function(t,e,i){var n,r,a=io(e-t);return no(a)?(r=i>0?"top":"bottom",n="center"):no(a-Qb)?(r=i>0?"bottom":"top",n="center"):(r="middle",n=a>0&&Qb>a?i>0?"right":"left":i>0?"left":"right"),{rotation:a,textAlign:n,textVerticalAlign:r}},iS=f,nS=x,rS=nh({type:"axis",_axisPointer:null,axisPointerClass:null,render:function(t,e,i,n){this.axisPointerClass&&xc(t),rS.superApply(this,"render",arguments),Mc(this,t,e,i,n,!0)},updateAxisPointer:function(t,e,i,n){Mc(this,t,e,i,n,!1)},remove:function(t,e){var i=this._axisPointer;i&&i.remove(e),rS.superApply(this,"remove",arguments)},dispose:function(t,e){Ic(this,e),rS.superApply(this,"dispose",arguments)}}),aS=[];rS.registerAxisPointerClass=function(t,e){aS[t]=e},rS.getAxisPointerClass=function(t){return t&&aS[t]};var oS=["axisLine","axisTickLabel","axisName"],sS=["splitArea","splitLine"],lS=rS.extend({type:"cartesianAxis",axisPointerClass:"CartesianAxisPointer",render:function(t,e,i,n){this.group.removeAll();var r=this._axisGroup;if(this._axisGroup=new lv,this.group.add(this._axisGroup),t.get("show")){var a=t.getCoordSysModel(),o=Tc(a,t),s=new Jb(t,o);f(oS,s.add,s),this._axisGroup.add(s.getGroup()),f(sS,function(e){t.get(e+".show")&&this["_"+e](t,a)},this),Ba(r,this._axisGroup,t),lS.superCall(this,"render",t,e,i,n)}},remove:function(){this._splitAreaColors=null},_splitLine:function(t,e){var i=t.axis;if(!i.scale.isBlank()){var n=t.getModel("splitLine"),r=n.getModel("lineStyle"),a=r.get("color");a=_(a)?a:[a];for(var o=e.coordinateSystem.getRect(),l=i.isHorizontal(),h=0,u=i.getTicksCoords({tickModel:n}),c=[],d=[],f=r.getLineStyle(),p=0;p0&&Gc(i[r-1]);r--);for(;r>n&&Gc(i[n]);n++);}for(;r>n;)n+=Hc(t,i,n,r,r,1,a.min,a.max,e.smooth,e.smoothMonotone,e.connectNulls)+1}}),IS=Fr.extend({type:"ec-polygon",shape:{points:[],stackedOnPoints:[],smooth:0,stackedOnSmooth:0,smoothConstraint:!0,smoothMonotone:null,connectNulls:!1},brush:by(Fr.prototype.brush),buildPath:function(t,e){var i=e.points,n=e.stackedOnPoints,r=0,a=i.length,o=e.smoothMonotone,s=Yc(i,e.smoothConstraint),l=Yc(n,e.smoothConstraint);if(e.connectNulls){for(;a>0&&Gc(i[a-1]);a--);for(;a>r&&Gc(i[r]);r++);}for(;a>r;){var h=Hc(t,i,r,a,a,1,s.min,s.max,e.smooth,o,e.connectNulls);Hc(t,n,r+h-1,h,a,-1,l.min,l.max,e.stackedOnSmooth,o,e.connectNulls),r+=h+1,t.closePath()}}});Bs.extend({type:"line",init:function(){var t=new lv,e=new zc;this.group.add(e.group),this._symbolDraw=e,this._lineGroup=t},render:function(t,e,i){var n=t.coordinateSystem,r=this.group,a=t.getData(),o=t.getModel("lineStyle"),l=t.getModel("areaStyle"),h=a.mapArray(a.getItemLayout),u="polar"===n.type,c=this._coordSys,d=this._symbolDraw,f=this._polyline,p=this._polygon,g=this._lineGroup,v=t.get("animation"),m=!l.isEmpty(),y=l.get("origin"),x=Nc(n,a,y),_=$c(n,a,x),w=t.get("showSymbol"),b=w&&!u&&id(t,a,n),S=this._data;S&&S.eachItemGraphicEl(function(t,e){t.__temp&&(r.remove(t),S.setItemGraphicEl(e,null))}),w||d.remove(),r.add(g);var M=!u&&t.get("step");f&&c.type===n.type&&M===this._step?(m&&!p?p=this._newPolygon(h,_,n,v):p&&!m&&(g.remove(p),p=this._polygon=null),g.setClipPath(Jc(n,!1,!1,t)),w&&d.updateData(a,{isIgnore:b,clipShape:Jc(n,!1,!0,t)}),a.eachItemGraphicEl(function(t){t.stopAnimation(!0)}),jc(this._stackedOnPoints,_)&&jc(this._points,h)||(v?this._updateAnimation(a,_,n,i,M,y):(M&&(h=td(h,n,M),_=td(_,n,M)),f.setShape({points:h}),p&&p.setShape({points:h,stackedOnPoints:_})))):(w&&d.updateData(a,{isIgnore:b,clipShape:Jc(n,!1,!0,t)}),M&&(h=td(h,n,M),_=td(_,n,M)),f=this._newPolyline(h,n,v),m&&(p=this._newPolygon(h,_,n,v)),g.setClipPath(Jc(n,!0,!1,t)));var I=ed(a,n)||a.getVisual("color");f.useStyle(s(o.getLineStyle(),{fill:"none",stroke:I,lineJoin:"bevel"}));var T=t.get("smooth");if(T=qc(t.get("smooth")),f.setShape({smooth:T,smoothMonotone:t.get("smoothMonotone"),connectNulls:t.get("connectNulls")}),p){var C=a.getCalculationInfo("stackedOnSeries"),A=0;p.useStyle(s(l.getAreaStyle(),{fill:I,opacity:.7,lineJoin:"bevel"})),C&&(A=qc(C.get("smooth"))),p.setShape({smooth:T,stackedOnSmooth:A,smoothMonotone:t.get("smoothMonotone"),connectNulls:t.get("connectNulls")})}this._data=a,this._coordSys=n,this._stackedOnPoints=_,this._points=h,this._step=M,this._valueOrigin=y},dispose:function(){},highlight:function(t,e,i,n){var r=t.getData(),a=Yn(r,n);if(!(a instanceof Array)&&null!=a&&a>=0){var o=r.getItemGraphicEl(a);if(!o){var s=r.getItemLayout(a);if(!s)return;o=new Cc(r,a),o.position=s,o.setZ(t.get("zlevel"),t.get("z")),o.ignore=isNaN(s[0])||isNaN(s[1]),o.__temp=!0,r.setItemGraphicEl(a,o),o.stopSymbolAnimation(!0),this.group.add(o)}o.highlight()}else Bs.prototype.highlight.call(this,t,e,i,n)},downplay:function(t,e,i,n){var r=t.getData(),a=Yn(r,n);if(null!=a&&a>=0){var o=r.getItemGraphicEl(a);o&&(o.__temp?(r.setItemGraphicEl(a,null),this.group.remove(o)):o.downplay())}else Bs.prototype.downplay.call(this,t,e,i,n)},_newPolyline:function(t){var e=this._polyline;return e&&this._lineGroup.remove(e),e=new MS({shape:{points:t},silent:!0,z2:10}),this._lineGroup.add(e),this._polyline=e,e},_newPolygon:function(t,e){var i=this._polygon;return i&&this._lineGroup.remove(i),i=new IS({shape:{points:t,stackedOnPoints:e},silent:!0}),this._lineGroup.add(i),this._polygon=i,i},_updateAnimation:function(t,e,i,n,r,a){var o=this._polyline,s=this._polygon,l=t.hostModel,h=vS(this._data,t,this._stackedOnPoints,e,this._coordSys,i,this._valueOrigin,a),u=h.current,c=h.stackedOnCurrent,d=h.next,f=h.stackedOnNext;r&&(u=td(h.current,i,r),c=td(h.stackedOnCurrent,i,r),d=td(h.next,i,r),f=td(h.stackedOnNext,i,r)),o.shape.__points=h.current,o.shape.points=u,La(o,{shape:{points:d}},l),s&&(s.setShape({points:u,stackedOnPoints:c}),La(s,{shape:{points:d,stackedOnPoints:f}},l));for(var p=[],g=h.status,v=0;ve&&(e=t[i]);return isFinite(e)?e:0/0},min:function(t){for(var e=1/0,i=0;i1){var h;"string"==typeof i?h=AS[i]:"function"==typeof i&&(h=i),h&&t.setData(e.downSample(e.mapDimension(a.dim),1/l,h,DS))}}}}};Jl(TS("line","circle","line")),Ql(CS("line")),jl(ow.PROCESSOR.STATISTIC,kS("line"));var PS=function(t,e,i){e=_(e)&&{coordDimensions:e}||o({},e);var n=t.getSource(),r=Vw(n,e),a=new Bw(r,t);return a.initData(n,i),a},LS={updateSelectedMap:function(t){this._targetList=_(t)?t.slice():[],this._selectTargetMap=g(t||[],function(t,e){return t.set(e.name,e),t},N())},select:function(t,e){var i=null!=e?this._targetList[e]:this._selectTargetMap.get(t),n=this.get("selectedMode");"single"===n&&this._selectTargetMap.each(function(t){t.selected=!1}),i&&(i.selected=!0)},unSelect:function(t,e){var i=null!=e?this._targetList[e]:this._selectTargetMap.get(t);i&&(i.selected=!1)},toggleSelected:function(t,e){var i=null!=e?this._targetList[e]:this._selectTargetMap.get(t);return null!=i?(this[i.selected?"unSelect":"select"](t,e),i.selected):void 0},isSelected:function(t,e){var i=null!=e?this._targetList[e]:this._selectTargetMap.get(t);return i&&i.selected}},OS=rh({type:"series.pie",init:function(t){OS.superApply(this,"init",arguments),this.legendDataProvider=function(){return this.getRawData()},this.updateSelectedMap(this._createSelectableList()),this._defaultLabelLine(t)},mergeOption:function(t){OS.superCall(this,"mergeOption",t),this.updateSelectedMap(this._createSelectableList())},getInitialData:function(){return PS(this,["value"])},_createSelectableList:function(){for(var t=this.getRawData(),e=t.mapDimension("value"),i=[],n=0,r=t.count();r>n;n++)i.push({name:t.getName(n),value:t.get(e,n),selected:Ms(t,n,"selected")});return i},getDataParams:function(t){var e=this.getData(),i=OS.superCall(this,"getDataParams",t),n=[];return e.each(e.mapDimension("value"),function(t){n.push(t)}),i.percent=eo(n,t,e.hostModel.get("percentPrecision")),i.$vars.push("percent"),i},_defaultLabelLine:function(t){Fn(t,"labelLine",["show"]);var e=t.labelLine,i=t.emphasis.labelLine;e.show=e.show&&t.label.show,i.show=i.show&&t.emphasis.label.show},defaultOption:{zlevel:0,z:2,legendHoverLink:!0,hoverAnimation:!0,center:["50%","50%"],radius:[0,"75%"],clockwise:!0,startAngle:90,minAngle:0,selectedOffset:10,hoverOffset:10,avoidLabelOverlap:!0,percentPrecision:2,stillShowZeroSum:!0,label:{rotate:!1,show:!0,position:"outer"},labelLine:{show:!0,length:15,length2:15,smooth:!1,lineStyle:{width:1,type:"solid"}},itemStyle:{borderWidth:1},animationType:"expansion",animationEasing:"cubicOut"}});c(OS,LS);var zS=od.prototype;zS.updateData=function(t,e,i){function n(){a.stopAnimation(!0),a.animateTo({shape:{r:u.r+l.get("hoverOffset")}},300,"elasticOut")}function r(){a.stopAnimation(!0),a.animateTo({shape:{r:u.r}},300,"elasticOut")}var a=this.childAt(0),l=t.hostModel,h=t.getItemModel(e),u=t.getItemLayout(e),c=o({},u);if(c.label=null,i){a.setShape(c);var d=l.getShallow("animationType");"scale"===d?(a.shape.r=u.r0,Oa(a,{shape:{r:u.r}},l,e)):(a.shape.endAngle=u.startAngle,La(a,{shape:{endAngle:u.endAngle}},l,e))}else La(a,{shape:c},l,e);var f=t.getItemVisual(e,"color");a.useStyle(s({lineJoin:"bevel",fill:f},h.getModel("itemStyle").getItemStyle())),a.hoverStyle=h.getModel("emphasis.itemStyle").getItemStyle();var p=h.getShallow("cursor");p&&a.attr("cursor",p),ad(this,t.getItemLayout(e),l.isSelected(null,e),l.get("selectedOffset"),l.get("animation")),a.off("mouseover").off("mouseout").off("emphasis").off("normal"),h.get("hoverAnimation")&&l.isAnimationEnabled()&&a.on("mouseover",n).on("mouseout",r).on("emphasis",n).on("normal",r),this._updateLabel(t,e),xa(this)},zS._updateLabel=function(t,e){var i=this.childAt(1),n=this.childAt(2),r=t.hostModel,a=t.getItemModel(e),o=t.getItemLayout(e),s=o.label,l=t.getItemVisual(e,"color");La(i,{shape:{points:s.linePoints||[[s.x,s.y],[s.x,s.y],[s.x,s.y]]}},r,e),La(n,{style:{x:s.x,y:s.y}},r,e),n.attr({rotation:s.rotation,origin:[s.x,s.y],z2:10});var h=a.getModel("label"),u=a.getModel("emphasis.label"),c=a.getModel("labelLine"),d=a.getModel("emphasis.labelLine"),l=t.getItemVisual(e,"color");wa(n.style,n.hoverStyle={},h,u,{labelFetcher:t.hostModel,labelDataIndex:e,defaultText:t.getName(e),autoColor:l,useInsideStyle:!!s.inside},{textAlign:s.textAlign,textVerticalAlign:s.verticalAlign,opacity:t.getItemVisual(e,"opacity")}),n.ignore=n.normalIgnore=!h.get("show"),n.hoverIgnore=!u.get("show"),i.ignore=i.normalIgnore=!c.get("show"),i.hoverIgnore=!d.get("show"),i.setStyle({stroke:l,opacity:t.getItemVisual(e,"opacity")}),i.setStyle(c.getModel("lineStyle").getLineStyle()),i.hoverStyle=d.getModel("lineStyle").getLineStyle();var f=c.get("smooth");f&&f===!0&&(f=.4),i.setShape({smooth:f})},u(od,lv);var ES=(Bs.extend({type:"pie",init:function(){var t=new lv;this._sectorGroup=t},render:function(t,e,i,n){if(!n||n.from!==this.uid){var r=t.getData(),a=this._data,o=this.group,s=e.get("animation"),l=!a,h=t.get("animationType"),u=x(rd,this.uid,t,s,i),c=t.get("selectedMode");if(r.diff(a).add(function(t){var e=new od(r,t);l&&"scale"!==h&&e.eachChild(function(t){t.stopAnimation(!0)}),c&&e.on("click",u),r.setItemGraphicEl(t,e),o.add(e)}).update(function(t,e){var i=a.getItemGraphicEl(e);i.updateData(r,t),i.off("click"),c&&i.on("click",u),o.add(i),r.setItemGraphicEl(t,i)}).remove(function(t){var e=a.getItemGraphicEl(t);o.remove(e)}).execute(),s&&l&&r.count()>0&&"scale"!==h){var d=r.getItemLayout(0),f=Math.max(i.getWidth(),i.getHeight())/2,p=y(o.removeClipPath,o);o.setClipPath(this._createClipPath(d.cx,d.cy,f,d.startAngle,d.clockwise,p,t))}else o.removeClipPath();this._data=r}},dispose:function(){},_createClipPath:function(t,e,i,n,r,a,o){var s=new Sy({shape:{cx:t,cy:e,r0:0,r:i,startAngle:n,endAngle:n,clockwise:r}});return Oa(s,{shape:{endAngle:n+(r?1:-1)*Math.PI*2}},o,a),s},containPoint:function(t,e){var i=e.getData(),n=i.getItemLayout(0);if(n){var r=t[0]-n.cx,a=t[1]-n.cy,o=Math.sqrt(r*r+a*a);return o<=n.r&&o>=n.r0}}}),function(t,e){f(e,function(e){e.update="updateView",Ul(e,function(i,n){var r={};return n.eachComponent({mainType:"series",subType:t,query:i},function(t){t[e.method]&&t[e.method](i.name,i.dataIndex);var n=t.getData();n.each(function(e){var i=n.getName(e);r[i]=t.isSelected(i)||!1})}),{name:i.name,selected:r}})})}),RS=function(t){return{getTargetSeries:function(e){var i={},n=N();return e.eachSeriesByType(t,function(t){t.__paletteScope=i,n.set(t.uid,t)}),n},reset:function(t){var e=t.getRawData(),i={},n=t.getData();n.each(function(t){var e=n.getRawIndex(t);i[e]=t}),e.each(function(r){var a=i[r],o=null!=a&&n.getItemVisual(a,"color",!0);if(o)e.setItemVisual(r,"color",o);else{var s=e.getItemModel(r),l=s.get("itemStyle.color")||t.getColorFromPalette(e.getName(r)||r+"",t.__paletteScope,e.count());e.setItemVisual(r,"color",l),null!=a&&n.setItemVisual(a,"color",l)}})}}},BS=function(t,e,i,n){var r,a,o=t.getData(),s=[],l=!1;o.each(function(i){var n,h,u,c,d=o.getItemLayout(i),f=o.getItemModel(i),p=f.getModel("label"),g=p.get("position")||f.get("emphasis.label.position"),v=f.getModel("labelLine"),m=v.get("length"),y=v.get("length2"),x=(d.startAngle+d.endAngle)/2,_=Math.cos(x),w=Math.sin(x);r=d.cx,a=d.cy;var b="inside"===g||"inner"===g;if("center"===g)n=d.cx,h=d.cy,c="center";else{var S=(b?(d.r+d.r0)/2*_:d.r*_)+r,M=(b?(d.r+d.r0)/2*w:d.r*w)+a;if(n=S+3*_,h=M+3*w,!b){var I=S+_*(m+e-d.r),T=M+w*(m+e-d.r),C=I+(0>_?-1:1)*y,A=T;n=C+(0>_?-5:5),h=A,u=[[S,M],[I,T],[C,A]]}c=b?"center":_>0?"left":"right"}var D=p.getFont(),k=p.get("rotate")?0>_?-x+Math.PI:-x:0,P=t.getFormattedLabel(i,"normal")||o.getName(i),L=Ei(P,D,c,"top");l=!!k,d.label={x:n,y:h,position:g,height:L.height,len:m,len2:y,linePoints:u,textAlign:c,verticalAlign:"middle",rotation:k,inside:b},b||s.push(d.label)}),!l&&t.get("avoidLabelOverlap")&&ld(s,r,a,e,i,n)},NS=2*Math.PI,FS=Math.PI/180,VS=function(t,e,i){e.eachSeriesByType(t,function(t){var e=t.getData(),n=e.mapDimension("value"),r=t.get("center"),a=t.get("radius");_(a)||(a=[0,a]),_(r)||(r=[r,r]);var o=i.getWidth(),s=i.getHeight(),l=Math.min(o,s),h=Ua(r[0],o),u=Ua(r[1],s),c=Ua(a[0],l/2),d=Ua(a[1],l/2),f=-t.get("startAngle")*FS,p=t.get("minAngle")*FS,g=0;e.each(n,function(t){!isNaN(t)&&g++});var v=e.getSum(n),m=Math.PI/(v||g)*2,y=t.get("clockwise"),x=t.get("roseType"),w=t.get("stillShowZeroSum"),b=e.getDataExtent(n);b[0]=0;var S=NS,M=0,I=f,T=y?1:-1;if(e.each(n,function(t,i){var n;if(isNaN(t))return void e.setItemLayout(i,{angle:0/0,startAngle:0/0,endAngle:0/0,clockwise:y,cx:h,cy:u,r0:c,r:x?0/0:d});n="area"!==x?0===v&&w?m:t*m:NS/g,p>n?(n=p,S-=p):M+=t;var r=I+T*n;e.setItemLayout(i,{angle:n,startAngle:I,endAngle:r,clockwise:y,cx:h,cy:u,r0:c,r:x?qa(t,b,[c,d]):d}),I=r}),NS>S&&g)if(.001>=S){var C=NS/g;e.each(n,function(t,i){if(!isNaN(t)){var n=e.getItemLayout(i);n.angle=C,n.startAngle=f+T*i*C,n.endAngle=f+T*(i+1)*C}})}else m=S/M,I=f,e.each(n,function(t,i){if(!isNaN(t)){var n=e.getItemLayout(i),r=n.angle===p?p:t*m;n.startAngle=I,n.endAngle=I+T*r,I+=T*r}});BS(t,d,o,s)})},WS=function(t){return{seriesType:t,reset:function(t,e){var i=e.findComponents({mainType:"legend"});if(i&&i.length){var n=t.getData();n.filterSelf(function(t){for(var e=n.getName(t),r=0;rn[1]&&n.reverse(),{coordSys:{type:"polar",cx:t.cx,cy:t.cy,r:n[1],r0:n[0]},api:{coord:y(function(n){var r=e.dataToRadius(n[0]),a=i.dataToAngle(n[1]),o=t.coordToPoint([r,a]);return o.push(r,a*Math.PI/180),o}),size:y(dd,t)}}},YS=function(t){var e=t.getRect(),i=t.getRangeInfo();return{coordSys:{type:"calendar",x:e.x,y:e.y,width:e.width,height:e.height,cellWidth:t.getCellWidth(),cellHeight:t.getCellHeight(),rangeInfo:{start:i.start,end:i.end,weeks:i.weeks,dayCount:i.allDay}},api:{coord:function(e,i){return t.dataToPoint(e,i)}}}},jS=["itemStyle"],qS=["emphasis","itemStyle"],US=["label"],$S=["emphasis","label"],KS="e\x00\x00",QS={cartesian2d:GS,geo:HS,singleAxis:ZS,polar:XS,calendar:YS};o_.extend({type:"series.custom",dependencies:["grid","polar","geo","singleAxis","calendar"],defaultOption:{coordinateSystem:"cartesian2d",zlevel:0,z:2,legendHoverLink:!0,useTransform:!0},getInitialData:function(){return Oh(this.getSource(),this)},getDataParams:function(t,e,i){var n=o_.prototype.getDataParams.apply(this,arguments);return i&&(n.info=i.info),n}}),Bs.extend({type:"custom",_data:null,render:function(t,e,i,n){var r=this._data,a=t.getData(),o=this.group,s=vd(t,a,e,i);a.diff(r).add(function(e){yd(null,e,s(e,n),t,o,a)}).update(function(e,i){var l=r.getItemGraphicEl(i);yd(l,e,s(e,n),t,o,a)}).remove(function(t){var e=r.getItemGraphicEl(t);e&&o.remove(e)}).execute(),this._data=a},incrementalPrepareRender:function(){this.group.removeAll(),this._data=null},incrementalRender:function(t,e,i,n,r){function a(t){t.isGroup||(t.incremental=!0,t.useHoverLayer=!0)}for(var o=e.getData(),s=vd(e,o,i,n),l=t.start;l=0},defaultOption:{zlevel:0,z:4,show:!0,orient:"horizontal",left:"center",top:0,align:"auto",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderRadius:0,borderWidth:0,padding:5,itemGap:10,itemWidth:25,itemHeight:14,inactiveColor:"#ccc",textStyle:{color:"#333"},selectedMode:!0,tooltip:{show:!1}}});Ul("legendToggleSelect","legendselectchanged",x(Ad,"toggleSelected")),Ul("legendSelect","legendselected",x(Ad,"select")),Ul("legendUnSelect","legendunselected",x(Ad,"unSelect"));var tM=x,eM=f,iM=lv,nM=nh({type:"legend.plain",newlineDisabled:!1,init:function(){this.group.add(this._contentGroup=new iM),this._backgroundEl},getContentGroup:function(){return this._contentGroup},render:function(t,e,i){if(this.resetInner(),t.get("show",!0)){var n=t.get("align");n&&"auto"!==n||(n="right"===t.get("left")&&"vertical"===t.get("orient")?"right":"left"),this.renderInner(n,t,e,i);var r=t.getBoxLayoutParams(),a={width:i.getWidth(),height:i.getHeight()},o=t.get("padding"),l=bo(r,a,o),h=this.layoutInner(t,n,l),u=bo(s({width:h.width,height:h.height},r),a,o);this.group.attr("position",[u.x-h.x,u.y-h.y]),this.group.add(this._backgroundEl=Dd(h,t))}},resetInner:function(){this.getContentGroup().removeAll(),this._backgroundEl&&this.group.remove(this._backgroundEl)},renderInner:function(t,e,i,n){var r=this.getContentGroup(),a=N(),o=e.get("selectedMode"),s=[];i.eachRawSeries(function(t){!t.get("legendHoverLink")&&s.push(t.id)}),eM(e.getData(),function(l,h){var u=l.get("name");if(!this.newlineDisabled&&(""===u||"\n"===u))return void r.add(new iM({newline:!0}));var c=i.getSeriesByName(u)[0];if(!a.get(u))if(c){var d=c.getData(),f=d.getVisual("color");"function"==typeof f&&(f=f(c.getDataParams(0)));var p=d.getVisual("legendSymbol")||"roundRect",g=d.getVisual("symbol"),v=this._createItem(u,h,l,e,p,g,t,f,o);v.on("click",tM(kd,u,n)).on("mouseover",tM(Pd,c.name,null,n,s)).on("mouseout",tM(Ld,c.name,null,n,s)),a.set(u,!0)}else i.eachRawSeries(function(i){if(!a.get(u)&&i.legendDataProvider){var r=i.legendDataProvider(),c=r.indexOfName(u);if(0>c)return;var d=r.getItemVisual(c,"color"),f="roundRect",p=this._createItem(u,h,l,e,f,null,t,d,o);p.on("click",tM(kd,u,n)).on("mouseover",tM(Pd,null,u,n,s)).on("mouseout",tM(Ld,null,u,n,s)),a.set(u,!0)}},this)},this)},_createItem:function(t,e,i,n,r,a,s,l,h){var u=n.get("itemWidth"),c=n.get("itemHeight"),d=n.get("inactiveColor"),f=n.get("symbolKeepAspect"),p=n.isSelected(t),g=new iM,v=i.getModel("textStyle"),m=i.get("icon"),y=i.getModel("tooltip"),x=y.parentModel;if(r=m||r,g.add(fu(r,0,0,u,c,p?l:d,null==f?!0:f)),!m&&a&&(a!==r||"none"===a)){var _=.8*c;"none"===a&&(a="circle"),g.add(fu(a,(u-_)/2,(c-_)/2,_,_,p?l:d,null==f?!0:f))}var w="left"===s?u+5:-5,b=s,S=n.get("formatter"),M=t;"string"==typeof S&&S?M=S.replace("{name}",null!=t?t:""):"function"==typeof S&&(M=S(t)),g.add(new xy({style:ba({},v,{text:M,x:w,y:c/2,textFill:p?v.getTextColor():d,textAlign:b,textVerticalAlign:"middle"})}));var I=new Dy({shape:g.getBoundingRect(),invisible:!0,tooltip:y.get("show")?o({content:t,formatter:x.get("formatter",!0)||function(){return t},formatterParams:{componentType:"legend",legendIndex:n.componentIndex,name:t,$vars:["name"]}},y.option):null});return g.add(I),g.eachChild(function(t){t.silent=!0}),I.silent=!h,this.getContentGroup().add(g),xa(g),g.__legendDataIndex=e,g},layoutInner:function(t,e,i){var n=this.getContentGroup();gx(t.get("orient"),n,t.get("itemGap"),i.width,i.height);var r=n.getBoundingRect();return n.attr("position",[-r.x,-r.y]),this.group.getBoundingRect()}}),rM=function(t){var e=t.findComponents({mainType:"legend"});e&&e.length&&t.filterSeries(function(t){for(var i=0;ii[s],f=[-u.x,-u.y];f[o]=n.position[o];var p=[0,0],g=[-c.x,-c.y],v=D(t.get("pageButtonGap",!0),t.get("itemGap",!0));if(d){var m=t.get("pageButtonPosition",!0);"end"===m?g[o]+=i[s]-c[s]:p[o]+=c[s]+v}g[1-o]+=u[l]/2-c[l]/2,n.attr("position",f),r.attr("position",p),a.attr("position",g);var y=this.group.getBoundingRect(),y={x:0,y:0};if(y[s]=d?i[s]:u[s],y[l]=Math.max(u[l],c[l]),y[h]=Math.min(0,c[h]+g[1-o]),r.__rectSize=i[s],d){var x={x:0,y:0};x[s]=Math.max(i[s]-c[s]-v,0),x[l]=y[l],r.setClipPath(new Dy({shape:x})),r.__rectSize=x[s]}else a.eachChild(function(t){t.attr({invisible:!0,silent:!0})});var _=this._getPageInfo(t);return null!=_.pageIndex&&La(n,{position:_.contentPosition},d?t:!1),this._updatePageInfoView(t,_),y},_pageGo:function(t,e,i){var n=this._getPageInfo(e)[t];null!=n&&i.dispatchAction({type:"legendScroll",scrollDataIndex:n,legendId:e.id})},_updatePageInfoView:function(t,e){var i=this._controllerGroup;f(["pagePrev","pageNext"],function(n){var r=null!=e[n+"DataIndex"],a=i.childOfName(n);a&&(a.setStyle("fill",r?t.get("pageIconColor",!0):t.get("pageIconInactiveColor",!0)),a.cursor=r?"pointer":"default")});var n=i.childOfName("pageText"),r=t.get("pageFormatter"),a=e.pageIndex,o=null!=a?a+1:0,s=e.pageCount;n&&r&&n.setStyle("text",b(r)?r.replace("{current}",o).replace("{total}",s):r({current:o,total:s}))},_getPageInfo:function(t){function e(t){var e=t.getBoundingRect().clone();return e[f]+=t.position[u],e}var i,n,r,a,o=t.get("scrollDataIndex",!0),s=this.getContentGroup(),l=s.getBoundingRect(),h=this._containerGroup.__rectSize,u=t.getOrient().index,c=sM[u],d=sM[1-u],f=lM[u],p=s.position.slice();this._showController?s.eachChild(function(t){t.__legendDataIndex===o&&(a=t)}):a=s.childAt(0);var g=h?Math.ceil(l[c]/h):0;if(a){var v=a.getBoundingRect(),m=a.position[u]+v[f];p[u]=-m-l[f],i=Math.floor(g*(m+v[f]+h/2)/l[c]),i=l[c]&&g?Math.max(0,Math.min(g-1,i)):-1;var y={x:0,y:0};y[c]=h,y[d]=l[d],y[f]=-p[u]-l[f];var x,_=s.children();if(s.eachChild(function(t,i){var n=e(t);n.intersect(y)&&(null==x&&(x=i),r=t.__legendDataIndex),i===_.length-1&&n[f]+n[c]<=y[f]+y[c]&&(r=null)}),null!=x){var w=_[x],b=e(w);if(y[f]=b[f]+b[c]-y[c],0>=x&&b[f]>=y[f])n=null;else{for(;x>0&&e(_[x-1]).intersect(y);)x--;n=_[x].__legendDataIndex}}}return{contentPosition:p,pageIndex:i,pageCount:g,pagePrevDataIndex:n,pageNextDataIndex:r}}});Ul("legendScroll","legendscroll",function(t,e){var i=t.scrollDataIndex;null!=i&&e.eachComponent({mainType:"legend",subType:"scroll",query:t},function(t){t.setScrollDataIndex(i)})});var uM=function(t,e){var i,n=[],r=t.seriesIndex;if(null==r||!(i=e.getSeriesByIndex(r)))return{point:[]};var a=i.getData(),o=Yn(a,t);if(null==o||0>o||_(o))return{point:[]};var s=a.getItemGraphicEl(o),l=i.coordinateSystem;if(i.getTooltipPosition)n=i.getTooltipPosition(o)||[];else if(l&&l.dataToPoint)n=l.dataToPoint(a.getValues(p(l.dimensions,function(t){return a.mapDimension(t)}),o,!0))||[];else if(s){var h=s.getBoundingRect().clone();h.applyTransform(s.transform),n=[h.x+h.width/2,h.y+h.height/2]}return{point:n,el:s}},cM=f,dM=x,fM=jn(),pM=function(t,e,i){var n=t.currTrigger,r=[t.x,t.y],a=t,o=t.dispatchAction||y(i.dispatchAction,i),s=e.getComponent("axisPointer").coordSysAxesInfo;if(s){Hd(r)&&(r=uM({seriesIndex:a.seriesIndex,dataIndex:a.dataIndex},e).point);var l=Hd(r),h=a.axesInfo,u=s.axesInfo,c="leave"===n||Hd(r),d={},f={},p={list:[],map:{}},g={showPointer:dM(Rd,f),showTooltip:dM(Bd,p)};cM(s.coordSysMap,function(t,e){var i=l||t.containPoint(r);cM(s.coordSysAxesInfo[e],function(t){var e=t.axis,n=Wd(h,t);if(!c&&i&&(!h||n)){var a=n&&n.value;null!=a||l||(a=e.pointToData(r)),null!=a&&zd(t,a,g,!1,d)}})});var v={};return cM(u,function(t,e){var i=t.linkGroup;i&&!f[e]&&cM(i.axesInfo,function(e,n){var r=f[n];if(e!==t&&r){var a=r.value;i.mapper&&(a=t.axis.scale.parse(i.mapper(a,Gd(e),Gd(t)))),v[t.key]=a}})}),cM(v,function(t,e){zd(u[e],t,g,!0,d)}),Nd(f,u,d),Fd(p,r,t,o),Vd(u,o,i),d}},gM=(ih({type:"axisPointer",coordSysAxesInfo:null,defaultOption:{show:"auto",triggerOn:null,zlevel:0,z:50,type:"line",snap:!1,triggerTooltip:!0,value:null,status:null,link:[],animation:null,animationDurationUpdate:200,lineStyle:{color:"#aaa",width:1,type:"solid"},shadowStyle:{color:"rgba(150,150,150,0.3)"},label:{show:!0,formatter:null,precision:"auto",margin:3,color:"#fff",padding:[5,7,5,7],backgroundColor:"auto",borderColor:null,borderWidth:0,shadowBlur:3,shadowColor:"#aaa"},handle:{show:!1,icon:"M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4h1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7v-1.2h6.6z M13.3,22H6.7v-1.2h6.6z M13.3,19.6H6.7v-1.2h6.6z",size:45,margin:50,color:"#333",shadowBlur:3,shadowColor:"#aaa",shadowOffsetX:0,shadowOffsetY:2,throttle:40}}}),jn()),vM=f,mM=nh({type:"axisPointer",render:function(t,e,i){var n=e.getComponent("tooltip"),r=t.get("triggerOn")||n&&n.get("triggerOn")||"mousemove|click";Zd("axisPointer",i,function(t,e,i){"none"!==r&&("leave"===t||r.indexOf(t)>=0)&&i({type:"updateAxisPointer",currTrigger:t,x:e&&e.offsetX,y:e&&e.offsetY})})},remove:function(t,e){$d(e.getZr(),"axisPointer"),mM.superApply(this._model,"remove",arguments)},dispose:function(t,e){$d("axisPointer",e),mM.superApply(this._model,"dispose",arguments)}}),yM=jn(),xM=n,_M=y;Kd.prototype={_group:null,_lastGraphicKey:null,_handle:null,_dragging:!1,_lastValue:null,_lastStatus:null,_payloadInfo:null,animationThreshold:15,render:function(t,e,i,n){var r=e.get("value"),a=e.get("status");if(this._axisModel=t,this._axisPointerModel=e,this._api=i,n||this._lastValue!==r||this._lastStatus!==a){this._lastValue=r,this._lastStatus=a;var o=this._group,s=this._handle;if(!a||"hide"===a)return o&&o.hide(),void(s&&s.hide());o&&o.show(),s&&s.show();var l={};this.makeElOption(l,r,t,e,i);var h=l.graphicKey;h!==this._lastGraphicKey&&this.clear(i),this._lastGraphicKey=h;var u=this._moveAnimation=this.determineAnimation(t,e);if(o){var c=x(Qd,e,u);this.updatePointerEl(o,l,c,e),this.updateLabelEl(o,l,c,e)}else o=this._group=new lv,this.createPointerEl(o,l,t,e),this.createLabelEl(o,l,t,e),i.getZr().add(o);nf(o,e,!0),this._renderHandle(r)}},remove:function(t){this.clear(t)},dispose:function(t){this.clear(t)},determineAnimation:function(t,e){var i=e.get("animation"),n=t.axis,r="category"===n.type,a=e.get("snap");if(!a&&!r)return!1;if("auto"===i||null==i){var o=this.animationThreshold;if(r&&n.getBandWidth()>o)return!0;if(a){var s=_c(t).seriesDataCount,l=n.getExtent();return Math.abs(l[0]-l[1])/s>o}return!1}return i===!0},makeElOption:function(){},createPointerEl:function(t,e){var i=e.pointer;if(i){var n=yM(t).pointerEl=new Yy[i.type](xM(e.pointer));t.add(n)}},createLabelEl:function(t,e,i,n){if(e.label){var r=yM(t).labelEl=new Dy(xM(e.label));t.add(r),tf(r,n)}},updatePointerEl:function(t,e,i){var n=yM(t).pointerEl;n&&(n.setStyle(e.pointer.style),i(n,{shape:e.pointer.shape}))},updateLabelEl:function(t,e,i,n){var r=yM(t).labelEl;r&&(r.setStyle(e.label.style),i(r,{shape:e.label.shape,position:e.label.position}),tf(r,n))},_renderHandle:function(t){if(!this._dragging&&this.updateHandleTransform){var e=this._axisPointerModel,i=this._api.getZr(),n=this._handle,r=e.getModel("handle"),a=e.get("status");if(!r.get("show")||!a||"hide"===a)return n&&i.remove(n),void(this._handle=null);var o;this._handle||(o=!0,n=this._handle=Va(r.get("icon"),{cursor:"move",draggable:!0,onmousemove:function(t){Ig(t.event)},onmousedown:_M(this._onHandleDragMove,this,0,0),drift:_M(this._onHandleDragMove,this),ondragend:_M(this._onHandleDragEnd,this)}),i.add(n)),nf(n,e,!1);var s=["color","borderColor","borderWidth","opacity","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY"];n.setStyle(r.getItemStyle(null,s));var l=r.get("size");_(l)||(l=[l,l]),n.attr("scale",[l[0]/2,l[1]/2]),Hs(this,"_doDispatchAxisPointer",r.get("throttle")||0,"fixRate"),this._moveHandleToValue(t,o)}},_moveHandleToValue:function(t,e){Qd(this._axisPointerModel,!e&&this._moveAnimation,this._handle,ef(this.getHandleTransform(t,this._axisModel,this._axisPointerModel)))},_onHandleDragMove:function(t,e){var i=this._handle;if(i){this._dragging=!0;var n=this.updateHandleTransform(ef(i),[t,e],this._axisModel,this._axisPointerModel);this._payloadInfo=n,i.stopAnimation(),i.attr(ef(n)),yM(i).lastProp=null,this._doDispatchAxisPointer()}},_doDispatchAxisPointer:function(){var t=this._handle;if(t){var e=this._payloadInfo,i=this._axisModel;this._api.dispatchAction({type:"updateAxisPointer",x:e.cursorPoint[0],y:e.cursorPoint[1],tooltipOption:e.tooltipOption,axesInfo:[{axisDim:i.axis.dim,axisIndex:i.componentIndex}]})}},_onHandleDragEnd:function(){this._dragging=!1;var t=this._handle;if(t){var e=this._axisPointerModel.get("value");this._moveHandleToValue(e),this._api.dispatchAction({type:"hideTip"})}},getHandleTransform:null,updateHandleTransform:null,clear:function(t){this._lastValue=null,this._lastStatus=null;var e=t.getZr(),i=this._group,n=this._handle;e&&i&&(this._lastGraphicKey=null,i&&e.remove(i),n&&e.remove(n),this._group=null,this._handle=null,this._payloadInfo=null)},doClear:function(){},buildLabel:function(t,e,i){return i=i||0,{x:t[i],y:t[1-i],width:e[i],height:e[1-i]}}},Kd.prototype.constructor=Kd,er(Kd);var wM=Kd.extend({makeElOption:function(t,e,i,n,r){var a=i.axis,o=a.grid,s=n.get("type"),l=df(o,a).getOtherAxis(a).getGlobalExtent(),h=a.toGlobalCoord(a.dataToCoord(e,!0));if(s&&"none"!==s){var u=rf(n),c=bM[s](a,h,l,u);c.style=u,t.graphicKey=c.type,t.pointer=c}var d=Tc(o.model,i);hf(e,t,d,i,n,r)},getHandleTransform:function(t,e,i){var n=Tc(e.axis.grid.model,e,{labelInside:!1});return n.labelMargin=i.get("handle.margin"),{position:lf(e.axis,t,n),rotation:n.rotation+(n.labelDirection<0?Math.PI:0)}},updateHandleTransform:function(t,e,i){var n=i.axis,r=n.grid,a=n.getGlobalExtent(!0),o=df(r,n).getOtherAxis(n).getGlobalExtent(),s="x"===n.dim?0:1,l=t.position;l[s]+=e[s],l[s]=Math.min(a[1],l[s]),l[s]=Math.max(a[0],l[s]);var h=(o[1]+o[0])/2,u=[h,h];u[s]=l[s];var c=[{verticalAlign:"middle"},{align:"center"}];return{position:l,rotation:t.rotation,cursorPoint:u,tooltipOption:c[s]}}}),bM={line:function(t,e,i,n){var r=uf([e,i[0]],[e,i[1]],ff(t));return ia({shape:r,style:n}),{type:"Line",shape:r}},shadow:function(t,e,i){var n=Math.max(1,t.getBandWidth()),r=i[1]-i[0];return{type:"Rect",shape:cf([e-n/2,i[0]],[n,r],ff(t))}}};rS.registerAxisPointerClass("CartesianAxisPointer",wM),Yl(function(t){if(t){(!t.axisPointer||0===t.axisPointer.length)&&(t.axisPointer={});var e=t.axisPointer.link;e&&!_(e)&&(t.axisPointer.link=[e])}}),jl(ow.PROCESSOR.STATISTIC,function(t,e){t.getComponent("axisPointer").coordSysAxesInfo=fc(t,e)}),Ul({type:"updateAxisPointer",event:"updateAxisPointer",update:":updateAxisPointer"},pM),ih({type:"tooltip",dependencies:["axisPointer"],defaultOption:{zlevel:0,z:60,show:!0,showContent:!0,trigger:"item",triggerOn:"mousemove|click",alwaysShowContent:!1,displayMode:"single",renderMode:"auto",confine:!1,showDelay:0,hideDelay:100,transitionDuration:.4,enterable:!1,backgroundColor:"rgba(50,50,50,0.7)",borderColor:"#333",borderRadius:4,borderWidth:0,padding:5,extraCssText:"",axisPointer:{type:"line",axis:"auto",animation:"auto",animationDurationUpdate:200,animationEasingUpdate:"exponentialOut",crossStyle:{color:"#999",width:1,type:"dashed",textStyle:{}}},textStyle:{color:"#fff",fontSize:14}}});var SM=f,MM=fo,IM=["","-webkit-","-moz-","-o-"],TM="position:absolute;display:block;border-style:solid;white-space:nowrap;z-index:9999999;";mf.prototype={constructor:mf,_enterable:!0,update:function(){var t=this._container,e=t.currentStyle||document.defaultView.getComputedStyle(t),i=t.style;"absolute"!==i.position&&"absolute"!==e.position&&(i.position="relative")},show:function(t){clearTimeout(this._hideTimeout);var e=this.el;e.style.cssText=TM+vf(t)+";left:"+this._x+"px;top:"+this._y+"px;"+(t.get("extraCssText")||""),e.style.display=e.innerHTML?"block":"none",e.style.pointerEvents=this._enterable?"auto":"none",this._show=!0},setContent:function(t){this.el.innerHTML=null==t?"":t},setEnterable:function(t){this._enterable=t},getSize:function(){var t=this.el;return[t.clientWidth,t.clientHeight]},moveTo:function(t,e){var i,n=this._zr;n&&n.painter&&(i=n.painter.getViewportRootOffset())&&(t+=i.offsetLeft,e+=i.offsetTop);var r=this.el.style;r.left=t+"px",r.top=e+"px",this._x=t,this._y=e},hide:function(){this.el.style.display="none",this._show=!1},hideLater:function(t){!this._show||this._inContent&&this._enterable||(t?(this._hideDelay=t,this._show=!1,this._hideTimeout=setTimeout(y(this.hide,this),t)):this.hide())},isShow:function(){return this._show},getOuterSize:function(){var t=this.el.clientWidth,e=this.el.clientHeight;if(document.defaultView&&document.defaultView.getComputedStyle){var i=document.defaultView.getComputedStyle(this.el);i&&(t+=parseInt(i.paddingLeft,10)+parseInt(i.paddingRight,10)+parseInt(i.borderLeftWidth,10)+parseInt(i.borderRightWidth,10),e+=parseInt(i.paddingTop,10)+parseInt(i.paddingBottom,10)+parseInt(i.borderTopWidth,10)+parseInt(i.borderBottomWidth,10))}return{width:t,height:e}}},yf.prototype={constructor:yf,_enterable:!0,update:function(){},show:function(){this._hideTimeout&&clearTimeout(this._hideTimeout),this.el.attr("show",!0),this._show=!0},setContent:function(t,e,i){this.el&&this._zr.remove(this.el);for(var n={},r=t,a="{marker",o="|}",s=r.indexOf(a);s>=0;){var l=r.indexOf(o),h=r.substr(s+a.length,l-s-a.length);n["marker"+h]=h.indexOf("sub")>-1?{textWidth:4,textHeight:4,textBorderRadius:2,textBackgroundColor:e[h],textOffset:[3,0]}:{textWidth:10,textHeight:10,textBorderRadius:5,textBackgroundColor:e[h]},r=r.substr(l+1),s=r.indexOf("{marker")}this.el=new xy({style:{rich:n,text:t,textLineHeight:20,textBackgroundColor:i.get("backgroundColor"),textBorderRadius:i.get("borderRadius"),textFill:i.get("textStyle.color"),textPadding:i.get("padding")},z:i.get("z")}),this._zr.add(this.el);var u=this;this.el.on("mouseover",function(){u._enterable&&(clearTimeout(u._hideTimeout),u._show=!0),u._inContent=!0}),this.el.on("mouseout",function(){u._enterable&&u._show&&u.hideLater(u._hideDelay),u._inContent=!1})},setEnterable:function(t){this._enterable=t},getSize:function(){var t=this.el.getBoundingRect();return[t.width,t.height]},moveTo:function(t,e){this.el&&this.el.attr("position",[t,e])},hide:function(){this.el.hide(),this._show=!1},hideLater:function(t){!this._show||this._inContent&&this._enterable||(t?(this._hideDelay=t,this._show=!1,this._hideTimeout=setTimeout(y(this.hide,this),t)):this.hide())},isShow:function(){return this._show},getOuterSize:function(){return this.getSize()}};var CM=y,AM=f,DM=Ua,kM=new Dy({shape:{x:-1,y:-1,width:2,height:2}});nh({type:"tooltip",init:function(t,e){if(!tg.node){var i=t.getComponent("tooltip"),n=i.get("renderMode");this._renderMode=Qn(n);var r;"html"===this._renderMode?(r=new mf(e.getDom(),e),this._newLine="
"):(r=new yf(e),this._newLine="\n"),this._tooltipContent=r}},render:function(t,e,i){if(!tg.node){this.group.removeAll(),this._tooltipModel=t,this._ecModel=e,this._api=i,this._lastDataByCoordSys=null,this._alwaysShowContent=t.get("alwaysShowContent");var n=this._tooltipContent;n.update(),n.setEnterable(t.get("enterable")),this._initGlobalListener(),this._keepShow()}},_initGlobalListener:function(){var t=this._tooltipModel,e=t.get("triggerOn");Zd("itemTooltip",this._api,CM(function(t,i,n){"none"!==e&&(e.indexOf(t)>=0?this._tryShow(i,n):"leave"===t&&this._hide(n))},this))},_keepShow:function(){var t=this._tooltipModel,e=this._ecModel,i=this._api;if(null!=this._lastX&&null!=this._lastY&&"none"!==t.get("triggerOn")){var n=this;clearTimeout(this._refreshUpdateTimeout),this._refreshUpdateTimeout=setTimeout(function(){n.manuallyShowTip(t,e,i,{x:n._lastX,y:n._lastY})})}},manuallyShowTip:function(t,e,i,n){if(n.from!==this.uid&&!tg.node){var r=_f(n,i);this._ticket="";var a=n.dataByCoordSys;if(n.tooltip&&null!=n.x&&null!=n.y){var o=kM;o.position=[n.x,n.y],o.update(),o.tooltip=n.tooltip,this._tryShow({offsetX:n.x,offsetY:n.y,target:o},r)}else if(a)this._tryShow({offsetX:n.x,offsetY:n.y,position:n.position,event:{},dataByCoordSys:n.dataByCoordSys,tooltipOption:n.tooltipOption},r);else if(null!=n.seriesIndex){if(this._manuallyAxisShowTip(t,e,i,n))return;var s=uM(n,e),l=s.point[0],h=s.point[1];null!=l&&null!=h&&this._tryShow({offsetX:l,offsetY:h,position:n.position,target:s.el,event:{}},r)}else null!=n.x&&null!=n.y&&(i.dispatchAction({type:"updateAxisPointer",x:n.x,y:n.y}),this._tryShow({offsetX:n.x,offsetY:n.y,position:n.position,target:i.getZr().findHover(n.x,n.y).target,event:{}},r))}},manuallyHideTip:function(t,e,i,n){var r=this._tooltipContent;!this._alwaysShowContent&&this._tooltipModel&&r.hideLater(this._tooltipModel.get("hideDelay")),this._lastX=this._lastY=null,n.from!==this.uid&&this._hide(_f(n,i))},_manuallyAxisShowTip:function(t,e,i,n){var r=n.seriesIndex,a=n.dataIndex,o=e.getComponent("axisPointer").coordSysAxesInfo;if(null!=r&&null!=a&&null!=o){var s=e.getSeriesByIndex(r);if(s){var l=s.getData(),t=xf([l.getItemModel(a),s,(s.coordinateSystem||{}).model,t]);if("axis"===t.get("trigger"))return i.dispatchAction({type:"updateAxisPointer",seriesIndex:r,dataIndex:a,position:n.position}),!0}}},_tryShow:function(t,e){var i=t.target,n=this._tooltipModel;if(n){this._lastX=t.offsetX,this._lastY=t.offsetY;var r=t.dataByCoordSys;r&&r.length?this._showAxisTooltip(r,t):i&&null!=i.dataIndex?(this._lastDataByCoordSys=null,this._showSeriesItemTooltip(t,i,e)):i&&i.tooltip?(this._lastDataByCoordSys=null,this._showComponentItemTooltip(t,i,e)):(this._lastDataByCoordSys=null,this._hide(e))}},_showOrMove:function(t,e){var i=t.get("showDelay");e=y(e,this),clearTimeout(this._showTimout),i>0?this._showTimout=setTimeout(e,i):e()},_showAxisTooltip:function(t,e){var i=this._ecModel,n=this._tooltipModel,a=[e.offsetX,e.offsetY],o=[],s=[],l=xf([e.tooltipOption,n]),h=this._renderMode,u=this._newLine,c={};AM(t,function(t){AM(t.dataByAxis,function(t){var e=i.getComponent(t.axisDim+"Axis",t.axisIndex),n=t.value,a=[];if(e&&null!=n){var l=sf(n,e.axis,i,t.seriesDataIndices,t.valueLabelOpt);f(t.seriesDataIndices,function(o){var u=i.getSeriesByIndex(o.seriesIndex),d=o.dataIndexInside,f=u&&u.getDataParams(d);if(f.axisDim=t.axisDim,f.axisIndex=t.axisIndex,f.axisType=t.axisType,f.axisId=t.axisId,f.axisValue=hu(e.axis,n),f.axisValueLabel=l,f){s.push(f);var p,g=u.formatTooltip(d,!0,null,h);if(S(g)){p=g.html;var v=g.markers;r(c,v)}else p=g;a.push(p)}});var d=l;o.push("html"!==h?a.join(u):(d?po(d)+u:"")+a.join(u))}})},this),o.reverse(),o=o.join(this._newLine+this._newLine);var d=e.position;this._showOrMove(l,function(){this._updateContentNotChangedOnAxis(t)?this._updatePosition(l,d,a[0],a[1],this._tooltipContent,s):this._showTooltipContent(l,o,s,Math.random(),a[0],a[1],d,void 0,c)})},_showSeriesItemTooltip:function(t,e,i){var n=this._ecModel,r=e.seriesIndex,a=n.getSeriesByIndex(r),o=e.dataModel||a,s=e.dataIndex,l=e.dataType,h=o.getData(),u=xf([h.getItemModel(s),o,a&&(a.coordinateSystem||{}).model,this._tooltipModel]),c=u.get("trigger");if(null==c||"item"===c){var d,f,p=o.getDataParams(s,l),g=o.formatTooltip(s,!1,l,this._renderMode);S(g)?(d=g.html,f=g.markers):(d=g,f=null);var v="item_"+o.name+"_"+s;this._showOrMove(u,function(){this._showTooltipContent(u,d,p,v,t.offsetX,t.offsetY,t.position,t.target,f)}),i({type:"showTip",dataIndexInside:s,dataIndex:h.getRawIndex(s),seriesIndex:r,from:this.uid})}},_showComponentItemTooltip:function(t,e,i){var n=e.tooltip;if("string"==typeof n){var r=n;n={content:r,formatter:r}}var a=new Wa(n,this._tooltipModel,this._ecModel),o=a.get("content"),s=Math.random();this._showOrMove(a,function(){this._showTooltipContent(a,o,a.get("formatterParams")||{},s,t.offsetX,t.offsetY,t.position,e)}),i({type:"showTip",from:this.uid})},_showTooltipContent:function(t,e,i,n,r,a,o,s,l){if(this._ticket="",t.get("showContent")&&t.get("show")){var h=this._tooltipContent,u=t.get("formatter");o=o||t.get("position");var c=e;if(u&&"string"==typeof u)c=go(u,i,!0);else if("function"==typeof u){var d=CM(function(e,n){e===this._ticket&&(h.setContent(n,l,t),this._updatePosition(t,o,r,a,h,i,s))},this);this._ticket=n,c=u(i,n,d)}h.setContent(c,l,t),h.show(t),this._updatePosition(t,o,r,a,h,i,s)}},_updatePosition:function(t,e,i,n,r,a,o){var s=this._api.getWidth(),l=this._api.getHeight();e=e||t.get("position");var h=r.getSize(),u=t.get("align"),c=t.get("verticalAlign"),d=o&&o.getBoundingRect().clone();if(o&&d.applyTransform(o.transform),"function"==typeof e&&(e=e([i,n],a,r.el,d,{viewSize:[s,l],contentSize:h.slice()})),_(e))i=DM(e[0],s),n=DM(e[1],l);else if(S(e)){e.width=h[0],e.height=h[1];var f=bo(e,{width:s,height:l});i=f.x,n=f.y,u=null,c=null}else if("string"==typeof e&&o){var p=Sf(e,d,h);i=p[0],n=p[1]}else{var p=wf(i,n,r,s,l,u?null:20,c?null:20);i=p[0],n=p[1]}if(u&&(i-=Mf(u)?h[0]/2:"right"===u?h[0]:0),c&&(n-=Mf(c)?h[1]/2:"bottom"===c?h[1]:0),t.get("confine")){var p=bf(i,n,r,s,l);i=p[0],n=p[1]}r.moveTo(i,n)},_updateContentNotChangedOnAxis:function(t){var e=this._lastDataByCoordSys,i=!!e&&e.length===t.length;return i&&AM(e,function(e,n){var r=e.dataByAxis||{},a=t[n]||{},o=a.dataByAxis||[];i&=r.length===o.length,i&&AM(r,function(t,e){var n=o[e]||{},r=t.seriesDataIndices||[],a=n.seriesDataIndices||[];i&=t.value===n.value&&t.axisType===n.axisType&&t.axisId===n.axisId&&r.length===a.length,i&&AM(r,function(t,e){var n=a[e];i&=t.seriesIndex===n.seriesIndex&&t.dataIndex===n.dataIndex})})}),this._lastDataByCoordSys=t,!!i},_hide:function(t){this._lastDataByCoordSys=null,t({type:"hideTip",from:this.uid})},dispose:function(t,e){tg.node||(this._tooltipContent.hide(),$d("itemTooltip",e))}}),Ul({type:"showTip",event:"showTip",update:"tooltip:manuallyShowTip"},function(){}),Ul({type:"hideTip",event:"hideTip",update:"tooltip:manuallyHideTip"},function(){});var PM=co,LM=po,OM=ih({type:"marker",dependencies:["series","grid","polar","geo"],init:function(t,e,i,n){this.mergeDefaultAndTheme(t,i),this.mergeOption(t,i,n.createdBySelf,!0)},isAnimationEnabled:function(){if(tg.node)return!1;var t=this.__hostSeries;return this.getShallow("animation")&&t&&t.isAnimationEnabled()},mergeOption:function(t,e,i,n){var r=this.constructor,a=this.mainType+"Model";i||e.eachSeries(function(t){var i=t.get(this.mainType,!0),s=t[a];return i&&i.data?(s?s.mergeOption(i,e,!0):(n&&If(i),f(i.data,function(t){t instanceof Array?(If(t[0]),If(t[1])):If(t)}),s=new r(i,this,e),o(s,{mainType:this.mainType,seriesIndex:t.seriesIndex,name:t.name,createdBySelf:!0}),s.__hostSeries=t),void(t[a]=s)):void(t[a]=null)},this)},formatTooltip:function(t){var e=this.getData(),i=this.getRawValue(t),n=_(i)?p(i,PM).join(", "):PM(i),r=e.getName(t),a=LM(this.name);return(null!=i||r)&&(a+="
"),r&&(a+=LM(r),null!=i&&(a+=" : ")),null!=i&&(a+=LM(n)),a},getData:function(){return this._data},setData:function(t){this._data=t}});c(OM,i_),OM.extend({type:"markPoint",defaultOption:{zlevel:0,z:5,symbol:"pin",symbolSize:50,tooltip:{trigger:"item"},label:{show:!0,position:"inside"},itemStyle:{borderWidth:2},emphasis:{label:{show:!0}}}});var zM=h,EM=x,RM={min:EM(Af,"min"),max:EM(Af,"max"),average:EM(Af,"average")},BM=nh({type:"marker",init:function(){this.markerGroupMap=N()},render:function(t,e,i){var n=this.markerGroupMap;n.each(function(t){t.__keep=!1});var r=this.type+"Model";e.eachSeries(function(t){var n=t[r];n&&this.renderSeries(t,n,e,i)},this),n.each(function(t){!t.__keep&&this.group.remove(t.group)},this)},renderSeries:function(){}});BM.extend({type:"markPoint",updateTransform:function(t,e,i){e.eachSeries(function(t){var e=t.markPointModel;e&&(Ef(e.getData(),t,i),this.markerGroupMap.get(t.id).updateLayout(e))},this)},renderSeries:function(t,e,i,n){var r=t.coordinateSystem,a=t.id,o=t.getData(),s=this.markerGroupMap,l=s.get(a)||s.set(a,new zc),h=Rf(r,t,e);e.setData(h),Ef(e.getData(),t,n),h.each(function(t){var i=h.getItemModel(t),n=i.getShallow("symbolSize");"function"==typeof n&&(n=n(e.getRawValue(t),e.getDataParams(t))),h.setItemVisual(t,{symbolSize:n,color:i.get("itemStyle.color")||o.getVisual("color"),symbol:i.getShallow("symbol")})}),l.updateData(h),this.group.add(l.group),h.eachItemGraphicEl(function(t){t.traverse(function(t){t.dataModel=e - })}),l.__keep=!0,l.group.silent=e.get("silent")||t.get("silent")}}),Yl(function(t){t.markPoint=t.markPoint||{}}),OM.extend({type:"markLine",defaultOption:{zlevel:0,z:5,symbol:["circle","arrow"],symbolSize:[8,16],precision:2,tooltip:{trigger:"item"},label:{show:!0,position:"end"},lineStyle:{type:"dashed"},emphasis:{label:{show:!0},lineStyle:{width:3}},animationEasing:"linear"}});var NM=ky.prototype,FM=Ly.prototype,VM=$r({type:"ec-line",style:{stroke:"#000",fill:null},shape:{x1:0,y1:0,x2:0,y2:0,percent:1,cpx1:null,cpy1:null},buildPath:function(t,e){(Bf(e)?NM:FM).buildPath(t,e)},pointAt:function(t){return Bf(this.shape)?NM.pointAt.call(this,t):FM.pointAt.call(this,t)},tangentAt:function(t){var e=this.shape,i=Bf(e)?[e.x2-e.x1,e.y2-e.y1]:FM.tangentAt.call(this,t);return te(i,i)}}),WM=["fromSymbol","toSymbol"],GM=Hf.prototype;GM.beforeUpdate=Gf,GM._createLine=function(t,e,i){var n=t.hostModel,r=t.getItemLayout(e),a=Vf(r);a.shape.percent=0,Oa(a,{shape:{percent:1}},n,e),this.add(a);var o=new xy({name:"label"});this.add(o),f(WM,function(i){var n=Ff(i,t,e);this.add(n),this[Nf(i)]=t.getItemVisual(e,i)},this),this._updateCommonStl(t,e,i)},GM.updateData=function(t,e,i){var n=t.hostModel,r=this.childOfName("line"),a=t.getItemLayout(e),o={shape:{}};Wf(o.shape,a),La(r,o,n,e),f(WM,function(i){var n=t.getItemVisual(e,i),r=Nf(i);if(this[r]!==n){this.remove(this.childOfName(i));var a=Ff(i,t,e);this.add(a)}this[r]=n},this),this._updateCommonStl(t,e,i)},GM._updateCommonStl=function(t,e,i){var n=t.hostModel,r=this.childOfName("line"),a=i&&i.lineStyle,o=i&&i.hoverLineStyle,l=i&&i.labelModel,h=i&&i.hoverLabelModel;if(!i||t.hasItemOption){var u=t.getItemModel(e);a=u.getModel("lineStyle").getLineStyle(),o=u.getModel("emphasis.lineStyle").getLineStyle(),l=u.getModel("label"),h=u.getModel("emphasis.label")}var c=t.getItemVisual(e,"color"),d=k(t.getItemVisual(e,"opacity"),a.opacity,1);r.useStyle(s({strokeNoScale:!0,fill:"none",stroke:c,opacity:d},a)),r.hoverStyle=o,f(WM,function(t){var e=this.childOfName(t);e&&(e.setColor(c),e.setStyle({opacity:d}))},this);var p,g,v=l.getShallow("show"),m=h.getShallow("show"),y=this.childOfName("label");if((v||m)&&(p=c||"#000",g=n.getFormattedLabel(e,"normal",t.dataType),null==g)){var x=n.getRawValue(e);g=null==x?t.getName(e):isFinite(x)?$a(x):x}var _=v?g:null,w=m?D(n.getFormattedLabel(e,"emphasis",t.dataType),g):null,b=y.style;(null!=_||null!=w)&&(ba(y.style,l,{text:_},{autoColor:p}),y.__textAlign=b.textAlign,y.__verticalAlign=b.textVerticalAlign,y.__position=l.get("position")||"middle"),y.hoverStyle=null!=w?{text:w,textFill:h.getTextColor(!0),fontStyle:h.getShallow("fontStyle"),fontWeight:h.getShallow("fontWeight"),fontSize:h.getShallow("fontSize"),fontFamily:h.getShallow("fontFamily")}:{text:null},y.ignore=!v&&!m,xa(this)},GM.highlight=function(){this.trigger("emphasis")},GM.downplay=function(){this.trigger("normal")},GM.updateLayout=function(t,e){this.setLinePoints(t.getItemLayout(e))},GM.setLinePoints=function(t){var e=this.childOfName("line");Wf(e.shape,t),e.dirty()},u(Hf,lv);var HM=Zf.prototype;HM.isPersistent=function(){return!0},HM.updateData=function(t){var e=this,i=e.group,n=e._lineData;e._lineData=t,n||i.removeAll();var r=jf(t);t.diff(n).add(function(i){Xf(e,t,i,r)}).update(function(i,a){Yf(e,n,t,a,i,r)}).remove(function(t){i.remove(n.getItemGraphicEl(t))}).execute()},HM.updateLayout=function(){var t=this._lineData;t&&t.eachItemGraphicEl(function(e,i){e.updateLayout(t,i)},this)},HM.incrementalPrepareUpdate=function(t){this._seriesScope=jf(t),this._lineData=null,this.group.removeAll()},HM.incrementalUpdate=function(t,e){function i(t){t.isGroup||(t.incremental=t.useHoverLayer=!0)}for(var n=t.start;n=0&&"number"==typeof c&&(c=+c.toFixed(Math.min(m,20))),g.coord[f]=v.coord[f]=c,a=[g,v,{type:l,valueIndex:a.valueIndex,value:c}]}return a=[Df(t,a[0]),Df(t,a[1]),o({},a[2])],a[2].type=a[2].type||"",r(a[2],a[0]),r(a[2],a[1]),a};BM.extend({type:"markLine",updateTransform:function(t,e,i){e.eachSeries(function(t){var e=t.markLineModel;if(e){var n=e.getData(),r=e.__from,a=e.__to;r.each(function(e){Jf(r,e,!0,t,i),Jf(a,e,!1,t,i)}),n.each(function(t){n.setItemLayout(t,[r.getItemLayout(t),a.getItemLayout(t)])}),this.markerGroupMap.get(t.id).updateLayout()}},this)},renderSeries:function(t,e,i,n){function r(e,i,r){var a=e.getItemModel(i);Jf(e,i,r,t,n),e.setItemVisual(i,{symbolSize:a.get("symbolSize")||g[r?0:1],symbol:a.get("symbol",!0)||p[r?0:1],color:a.get("itemStyle.color")||s.getVisual("color")})}var a=t.coordinateSystem,o=t.id,s=t.getData(),l=this.markerGroupMap,h=l.get(o)||l.set(o,new Zf);this.group.add(h.group);var u=tp(a,t,e),c=u.from,d=u.to,f=u.line;e.__from=c,e.__to=d,e.setData(f);var p=e.get("symbol"),g=e.get("symbolSize");_(p)||(p=[p,p]),"number"==typeof g&&(g=[g,g]),u.from.each(function(t){r(c,t,!0),r(d,t,!1)}),f.each(function(t){var e=f.getItemModel(t).get("lineStyle.color");f.setItemVisual(t,{color:e||c.getItemVisual(t,"color")}),f.setItemLayout(t,[c.getItemLayout(t),d.getItemLayout(t)]),f.setItemVisual(t,{fromSymbolSize:c.getItemVisual(t,"symbolSize"),fromSymbol:c.getItemVisual(t,"symbol"),toSymbolSize:d.getItemVisual(t,"symbolSize"),toSymbol:d.getItemVisual(t,"symbol")})}),h.updateData(f),u.line.eachItemGraphicEl(function(t){t.traverse(function(t){t.dataModel=e})}),h.__keep=!0,h.group.silent=e.get("silent")||t.get("silent")}}),Yl(function(t){t.markLine=t.markLine||{}}),OM.extend({type:"markArea",defaultOption:{zlevel:0,z:1,tooltip:{trigger:"item"},animation:!1,label:{show:!0,position:"top"},itemStyle:{borderWidth:0},emphasis:{label:{show:!0,position:"top"}}}});var XM=function(t,e,i,n){var r=Df(t,n[0]),o=Df(t,n[1]),s=A,l=r.coord,h=o.coord;l[0]=s(l[0],-1/0),l[1]=s(l[1],-1/0),h[0]=s(h[0],1/0),h[1]=s(h[1],1/0);var u=a([{},r,o]);return u.coord=[r.coord,o.coord],u.x0=r.x,u.y0=r.y,u.x1=o.x,u.y1=o.y,u},YM=[["x0","y0"],["x1","y0"],["x1","y1"],["x0","y1"]];BM.extend({type:"markArea",updateTransform:function(t,e,i){e.eachSeries(function(t){var e=t.markAreaModel;if(e){var n=e.getData();n.each(function(e){var r=p(YM,function(r){return rp(n,e,r,t,i)});n.setItemLayout(e,r);var a=n.getItemGraphicEl(e);a.setShape("points",r)})}},this)},renderSeries:function(t,e,i,n){var r=t.coordinateSystem,a=t.id,o=t.getData(),l=this.markerGroupMap,h=l.get(a)||l.set(a,{group:new lv});this.group.add(h.group),h.__keep=!0;var u=ap(r,t,e);e.setData(u),u.each(function(e){u.setItemLayout(e,p(YM,function(i){return rp(u,e,i,t,n)})),u.setItemVisual(e,{color:o.getVisual("color")})}),u.diff(h.__data).add(function(t){var e=new Cy({shape:{points:u.getItemLayout(t)}});u.setItemGraphicEl(t,e),h.group.add(e)}).update(function(t,i){var n=h.__data.getItemGraphicEl(i);La(n,{shape:{points:u.getItemLayout(t)}},e,t),h.group.add(n),u.setItemGraphicEl(t,n)}).remove(function(t){var e=h.__data.getItemGraphicEl(t);h.group.remove(e)}).execute(),u.eachItemGraphicEl(function(t,i){var n=u.getItemModel(i),r=n.getModel("label"),a=n.getModel("emphasis.label"),o=u.getItemVisual(i,"color");t.useStyle(s(n.getModel("itemStyle").getItemStyle(),{fill:Ke(o,.4),stroke:o})),t.hoverStyle=n.getModel("emphasis.itemStyle").getItemStyle(),wa(t.style,t.hoverStyle,r,a,{labelFetcher:e,labelDataIndex:i,defaultText:u.getName(i)||"",isRectText:!0,autoColor:o}),xa(t,{}),t.dataModel=e}),h.__data=u,h.group.silent=e.get("silent")||t.get("silent")}}),Yl(function(t){t.markArea=t.markArea||{}});var jM=function(t){var e=t&&t.timeline;_(e)||(e=e?[e]:[]),f(e,function(t){t&&op(t)})};yx.registerSubTypeDefaulter("timeline",function(){return"slider"}),Ul({type:"timelineChange",event:"timelineChanged",update:"prepareAndUpdate"},function(t,e){var i=e.getComponent("timeline");return i&&null!=t.currentIndex&&(i.setCurrentIndex(t.currentIndex),!i.get("loop",!0)&&i.isIndexMax()&&i.setPlayState(!1)),e.resetOption("timeline"),s({currentIndex:i.option.currentIndex},t)}),Ul({type:"timelinePlayChange",event:"timelinePlayChanged",update:"update"},function(t,e){var i=e.getComponent("timeline");i&&null!=t.playState&&i.setPlayState(t.playState)});var qM=yx.extend({type:"timeline",layoutMode:"box",defaultOption:{zlevel:0,z:4,show:!0,axisType:"time",realtime:!0,left:"20%",top:null,right:"20%",bottom:0,width:null,height:40,padding:5,controlPosition:"left",autoPlay:!1,rewind:!1,loop:!0,playInterval:2e3,currentIndex:0,itemStyle:{},label:{color:"#000"},data:[]},init:function(t,e,i){this._data,this._names,this.mergeDefaultAndTheme(t,i),this._initData()},mergeOption:function(){qM.superApply(this,"mergeOption",arguments),this._initData()},setCurrentIndex:function(t){null==t&&(t=this.option.currentIndex);var e=this._data.count();this.option.loop?t=(t%e+e)%e:(t>=e&&(t=e-1),0>t&&(t=0)),this.option.currentIndex=t},getCurrentIndex:function(){return this.option.currentIndex},isIndexMax:function(){return this.getCurrentIndex()>=this._data.count()-1},setPlayState:function(t){this.option.autoPlay=!!t},getPlayState:function(){return!!this.option.autoPlay},_initData:function(){var t=this.option,e=t.data||[],i=t.axisType,r=this._names=[];if("category"===i){var a=[];f(e,function(t,e){var i,o=Vn(t);S(t)?(i=n(t),i.value=e):i=e,a.push(i),b(o)||null!=o&&!isNaN(o)||(o=""),r.push(o+"")}),e=a}var o={category:"ordinal",time:"time"}[i]||"number",s=this._data=new Bw([{name:"value",type:o}],this);s.initData(e,r)},getData:function(){return this._data},getCategories:function(){return"category"===this.get("axisType")?this._names.slice():void 0}}),UM=qM.extend({type:"timeline.slider",defaultOption:{backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,orient:"horizontal",inverse:!1,tooltip:{trigger:"item"},symbol:"emptyCircle",symbolSize:10,lineStyle:{show:!0,width:2,color:"#304654"},label:{position:"auto",show:!0,interval:"auto",rotate:0,color:"#304654"},itemStyle:{color:"#304654",borderWidth:1},checkpointStyle:{symbol:"circle",symbolSize:13,color:"#c23531",borderWidth:5,borderColor:"rgba(194,53,49, 0.5)",animation:!0,animationDuration:300,animationEasing:"quinticInOut"},controlStyle:{show:!0,showPlayBtn:!0,showPrevBtn:!0,showNextBtn:!0,itemSize:22,itemGap:12,position:"left",playIcon:"path://M31.6,53C17.5,53,6,41.5,6,27.4S17.5,1.8,31.6,1.8C45.7,1.8,57.2,13.3,57.2,27.4S45.7,53,31.6,53z M31.6,3.3 C18.4,3.3,7.5,14.1,7.5,27.4c0,13.3,10.8,24.1,24.1,24.1C44.9,51.5,55.7,40.7,55.7,27.4C55.7,14.1,44.9,3.3,31.6,3.3z M24.9,21.3 c0-2.2,1.6-3.1,3.5-2l10.5,6.1c1.899,1.1,1.899,2.9,0,4l-10.5,6.1c-1.9,1.1-3.5,0.2-3.5-2V21.3z",stopIcon:"path://M30.9,53.2C16.8,53.2,5.3,41.7,5.3,27.6S16.8,2,30.9,2C45,2,56.4,13.5,56.4,27.6S45,53.2,30.9,53.2z M30.9,3.5C17.6,3.5,6.8,14.4,6.8,27.6c0,13.3,10.8,24.1,24.101,24.1C44.2,51.7,55,40.9,55,27.6C54.9,14.4,44.1,3.5,30.9,3.5z M36.9,35.8c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H36c0.5,0,0.9,0.4,0.9,1V35.8z M27.8,35.8 c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H27c0.5,0,0.9,0.4,0.9,1L27.8,35.8L27.8,35.8z",nextIcon:"path://M18.6,50.8l22.5-22.5c0.2-0.2,0.3-0.4,0.3-0.7c0-0.3-0.1-0.5-0.3-0.7L18.7,4.4c-0.1-0.1-0.2-0.3-0.2-0.5 c0-0.4,0.3-0.8,0.8-0.8c0.2,0,0.5,0.1,0.6,0.3l23.5,23.5l0,0c0.2,0.2,0.3,0.4,0.3,0.7c0,0.3-0.1,0.5-0.3,0.7l-0.1,0.1L19.7,52 c-0.1,0.1-0.3,0.2-0.5,0.2c-0.4,0-0.8-0.3-0.8-0.8C18.4,51.2,18.5,51,18.6,50.8z",prevIcon:"path://M43,52.8L20.4,30.3c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.3,0.1-0.5,0.3-0.7L42.9,6.4c0.1-0.1,0.2-0.3,0.2-0.5 c0-0.4-0.3-0.8-0.8-0.8c-0.2,0-0.5,0.1-0.6,0.3L18.3,28.8l0,0c-0.2,0.2-0.3,0.4-0.3,0.7c0,0.3,0.1,0.5,0.3,0.7l0.1,0.1L41.9,54 c0.1,0.1,0.3,0.2,0.5,0.2c0.4,0,0.8-0.3,0.8-0.8C43.2,53.2,43.1,53,43,52.8z",color:"#304654",borderColor:"#304654",borderWidth:1},emphasis:{label:{show:!0,color:"#c23531"},itemStyle:{color:"#c23531"},controlStyle:{color:"#c23531",borderColor:"#c23531",borderWidth:2}},data:[]}});c(UM,i_);var $M=s_.extend({type:"timeline"}),KM=function(t,e,i,n){Pb.call(this,t,e,i),this.type=n||"value",this.model=null};KM.prototype={constructor:KM,getLabelModel:function(){return this.model.getModel("label")},isHorizontal:function(){return"horizontal"===this.model.get("orient")}},u(KM,Pb);var QM=y,JM=f,tI=Math.PI;$M.extend({type:"timeline.slider",init:function(t,e){this.api=e,this._axis,this._viewRect,this._timer,this._currentPointer,this._mainGroup,this._labelGroup},render:function(t,e,i){if(this.model=t,this.api=i,this.ecModel=e,this.group.removeAll(),t.get("show",!0)){var n=this._layout(t,i),r=this._createGroup("mainGroup"),a=this._createGroup("labelGroup"),o=this._axis=this._createAxis(n,t);t.formatTooltip=function(t){return po(o.scale.getLabel(t))},JM(["AxisLine","AxisTick","Control","CurrentPointer"],function(e){this["_render"+e](n,r,o,t)},this),this._renderAxisLabel(n,a,o,t),this._position(n,t)}this._doPlayStop()},remove:function(){this._clearTimer(),this.group.removeAll()},dispose:function(){this._clearTimer()},_layout:function(t,e){var i=t.get("label.position"),n=t.get("orient"),r=hp(t,e);null==i||"auto"===i?i="horizontal"===n?r.y+r.height/2=0||"+"===i?"left":"right"},o={horizontal:i>=0||"+"===i?"top":"bottom",vertical:"middle"},s={horizontal:0,vertical:tI/2},l="vertical"===n?r.height:r.width,h=t.getModel("controlStyle"),u=h.get("show",!0),c=u?h.get("itemSize"):0,d=u?h.get("itemGap"):0,f=c+d,p=t.get("label.rotate")||0;p=p*tI/180;var g,v,m,y,x=h.get("position",!0),_=u&&h.get("showPlayBtn",!0),w=u&&h.get("showPrevBtn",!0),b=u&&h.get("showNextBtn",!0),S=0,M=l;return"left"===x||"bottom"===x?(_&&(g=[0,0],S+=f),w&&(v=[S,0],S+=f),b&&(m=[M-c,0],M-=f)):(_&&(g=[M-c,0],M-=f),w&&(v=[0,0],S+=f),b&&(m=[M-c,0],M-=f)),y=[S,M],t.get("inverse")&&y.reverse(),{viewRect:r,mainLength:l,orient:n,rotation:s[n],labelRotation:p,labelPosOpt:i,labelAlign:t.get("label.align")||a[n],labelBaseline:t.get("label.verticalAlign")||t.get("label.baseline")||o[n],playPosition:g,prevBtnPosition:v,nextBtnPosition:m,axisExtent:y,controlSize:c,controlGap:d}},_position:function(t){function e(t){var e=t.position;t.origin=[u[0][0]-e[0],u[1][0]-e[1]]}function i(t){return[[t.x,t.x+t.width],[t.y,t.y+t.height]]}function n(t,e,i,n,r){t[n]+=i[n][r]-e[n][r]}var r=this._mainGroup,a=this._labelGroup,o=t.viewRect;if("vertical"===t.orient){var s=be(),l=o.x,h=o.y+o.height;Te(s,s,[-l,-h]),Ce(s,s,-tI/2),Te(s,s,[l,h]),o=o.clone(),o.applyTransform(s)}var u=i(o),c=i(r.getBoundingRect()),d=i(a.getBoundingRect()),f=r.position,p=a.position;p[0]=f[0]=u[0][0];var g=t.labelPosOpt;if(isNaN(g)){var v="+"===g?0:1;n(f,c,u,1,v),n(p,d,u,1,1-v)}else{var v=g>=0?0:1;n(f,c,u,1,v),p[1]=f[1]+g}r.attr("position",f),a.attr("position",p),r.rotation=a.rotation=t.rotation,e(r),e(a)},_createAxis:function(t,e){var i=e.getData(),n=e.get("axisType"),r=ou(e,n);r.getTicks=function(){return i.mapArray(["value"],function(t){return t})};var a=i.getDataExtent("value");r.setExtent(a[0],a[1]),r.niceTicks();var o=new KM("value",r,t.axisExtent,n);return o.model=e,o},_createGroup:function(t){var e=this["_"+t]=new lv;return this.group.add(e),e},_renderAxisLine:function(t,e,i,n){var r=i.getExtent();n.get("lineStyle.show")&&e.add(new ky({shape:{x1:r[0],y1:0,x2:r[1],y2:0},style:o({lineCap:"round"},n.getModel("lineStyle").getLineStyle()),silent:!0,z2:1}))},_renderAxisTick:function(t,e,i,n){var r=n.getData(),a=i.scale.getTicks();JM(a,function(t){var a=i.dataToCoord(t),o=r.getItemModel(t),s=o.getModel("itemStyle"),l=o.getModel("emphasis.itemStyle"),h={position:[a,0],onclick:QM(this._changeTimeline,this,t)},u=cp(o,s,e,h);xa(u,l.getItemStyle()),o.get("tooltip")?(u.dataIndex=t,u.dataModel=n):u.dataIndex=u.dataModel=null},this)},_renderAxisLabel:function(t,e,i,n){var r=i.getLabelModel();if(r.get("show")){var a=n.getData(),o=i.getViewLabels();JM(o,function(n){var r=n.tickValue,o=a.getItemModel(r),s=o.getModel("label"),l=o.getModel("emphasis.label"),h=i.dataToCoord(n.tickValue),u=new xy({position:[h,0],rotation:t.labelRotation-t.rotation,onclick:QM(this._changeTimeline,this,r),silent:!1});ba(u.style,s,{text:n.formattedLabel,textAlign:t.labelAlign,textVerticalAlign:t.labelBaseline}),e.add(u),xa(u,ba({},l))},this)}},_renderControl:function(t,e,i,n){function r(t,i,r,u){if(t){var c={position:t,origin:[a/2,0],rotation:u?-o:0,rectHover:!0,style:s,onclick:r},d=up(n,i,h,c);e.add(d),xa(d,l)}}var a=t.controlSize,o=t.rotation,s=n.getModel("controlStyle").getItemStyle(),l=n.getModel("emphasis.controlStyle").getItemStyle(),h=[0,-a/2,a,a],u=n.getPlayState(),c=n.get("inverse",!0);r(t.nextBtnPosition,"controlStyle.nextIcon",QM(this._changeTimeline,this,c?"-":"+")),r(t.prevBtnPosition,"controlStyle.prevIcon",QM(this._changeTimeline,this,c?"+":"-")),r(t.playPosition,"controlStyle."+(u?"stopIcon":"playIcon"),QM(this._handlePlayClick,this,!u),!0)},_renderCurrentPointer:function(t,e,i,n){var r=n.getData(),a=n.getCurrentIndex(),o=r.getItemModel(a).getModel("checkpointStyle"),s=this,l={onCreate:function(t){t.draggable=!0,t.drift=QM(s._handlePointerDrag,s),t.ondragend=QM(s._handlePointerDragend,s),dp(t,a,i,n,!0)},onUpdate:function(t){dp(t,a,i,n)}};this._currentPointer=cp(o,o,this._mainGroup,{},this._currentPointer,l)},_handlePlayClick:function(t){this._clearTimer(),this.api.dispatchAction({type:"timelinePlayChange",playState:t,from:this.uid})},_handlePointerDrag:function(t,e,i){this._clearTimer(),this._pointerChangeTimeline([i.offsetX,i.offsetY])},_handlePointerDragend:function(t){this._pointerChangeTimeline([t.offsetX,t.offsetY],!0)},_pointerChangeTimeline:function(t,e){var i=this._toAxisCoord(t)[0],n=this._axis,r=Ka(n.getExtent().slice());i>r[1]&&(i=r[1]),is&&(n=s,e=a)}),e},_clearTimer:function(){this._timer&&(clearTimeout(this._timer),this._timer=null)},_changeTimeline:function(t){var e=this.model.getCurrentIndex();"+"===t?t=e+1:"-"===t&&(t=e-1),this.api.dispatchAction({type:"timelineChange",currentIndex:t,from:this.uid})}}),Yl(jM),yx.registerSubTypeDefaulter("dataZoom",function(){return"slider"});var eI=["x","y","z","radius","angle","single"],iI=["cartesian2d","polar","singleAxis"],nI=pp(eI,["axisIndex","axis","index","id"]),rI=f,aI=Ka,oI=function(t,e,i,n){this._dimName=t,this._axisIndex=e,this._valueWindow,this._percentWindow,this._dataExtent,this._minMaxSpan,this.ecModel=n,this._dataZoomModel=i};oI.prototype={constructor:oI,hostedBy:function(t){return this._dataZoomModel===t},getDataValueWindow:function(){return this._valueWindow.slice()},getDataPercentWindow:function(){return this._percentWindow.slice()},getTargetSeriesModels:function(){var t=[],e=this.ecModel;return e.eachSeries(function(i){if(fp(i.get("coordinateSystem"))){var n=this._dimName,r=e.queryComponents({mainType:n+"Axis",index:i.get(n+"AxisIndex"),id:i.get(n+"AxisId")})[0];this._axisIndex===(r&&r.componentIndex)&&t.push(i)}},this),t},getAxisModel:function(){return this.ecModel.getComponent(this._dimName+"Axis",this._axisIndex)},getOtherAxisModel:function(){var t,e,i=this._dimName,n=this.ecModel,r=this.getAxisModel(),a="x"===i||"y"===i;a?(e="gridIndex",t="x"===i?"y":"x"):(e="polarIndex",t="angle"===i?"radius":"angle");var o;return n.eachComponent(t+"Axis",function(t){(t.get(e)||0)===(r.get(e)||0)&&(o=t)}),o},getMinMaxSpan:function(){return n(this._minMaxSpan)},calculateDataWindow:function(t){var e=this._dataExtent,i=this.getAxisModel(),n=i.axis.scale,r=this._dataZoomModel.getRangePropMode(),a=[0,100],o=[t.start,t.end],s=[];return rI(["startValue","endValue"],function(e){s.push(null!=t[e]?n.parse(t[e]):null)}),rI([0,1],function(t){var i=s[t],l=o[t];"percent"===r[t]?(null==l&&(l=a[t]),i=n.parse(qa(l,a,e,!0))):l=qa(i,e,a,!0),s[t]=i,o[t]=l}),{valueWindow:aI(s),percentWindow:aI(o)}},reset:function(t){if(t===this._dataZoomModel){var e=this.getTargetSeriesModels();this._dataExtent=vp(this,this._dimName,e);var i=this.calculateDataWindow(t.option);this._valueWindow=i.valueWindow,this._percentWindow=i.percentWindow,xp(this),yp(this)}},restore:function(t){t===this._dataZoomModel&&(this._valueWindow=this._percentWindow=null,yp(this,!0))},filterData:function(t){function e(t){return t>=a[0]&&t<=a[1]}if(t===this._dataZoomModel){var i=this._dimName,n=this.getTargetSeriesModels(),r=t.get("filterMode"),a=this._valueWindow;"none"!==r&&rI(n,function(t){var n=t.getData(),o=n.mapDimension(i,!0);o.length&&("weakFilter"===r?n.filterSelf(function(t){for(var e,i,r,s=0;sa[1];if(h&&!u&&!c)return!0;h&&(r=!0),u&&(e=!0),c&&(i=!0)}return r&&e&&i}):rI(o,function(i){if("empty"===r)t.setData(n.map(i,function(t){return e(t)?t:0/0}));else{var o={};o[i]=a,n.selectRange(o)}}),rI(o,function(t){n.setApproximateExtent(a,t)}))})}}};var sI=f,lI=nI,hI=ih({type:"dataZoom",dependencies:["xAxis","yAxis","zAxis","radiusAxis","angleAxis","singleAxis","series"],defaultOption:{zlevel:0,z:4,orient:null,xAxisIndex:null,yAxisIndex:null,filterMode:"filter",throttle:null,start:0,end:100,startValue:null,endValue:null,minSpan:null,maxSpan:null,minValueSpan:null,maxValueSpan:null,rangeMode:null},init:function(t,e,i){this._dataIntervalByAxis={},this._dataInfo={},this._axisProxies={},this.textStyleModel,this._autoThrottle=!0,this._rangePropMode=["percent","percent"];var n=_p(t);this.mergeDefaultAndTheme(t,i),this.doInit(n)},mergeOption:function(t){var e=_p(t);r(this.option,t,!0),this.doInit(e)},doInit:function(t){var e=this.option;tg.canvasSupported||(e.realtime=!1),this._setDefaultThrottle(t),wp(this,t),sI([["start","startValue"],["end","endValue"]],function(t,i){"value"===this._rangePropMode[i]&&(e[t[0]]=null)},this),this.textStyleModel=this.getModel("textStyle"),this._resetTarget(),this._giveAxisProxies()},_giveAxisProxies:function(){var t=this._axisProxies;this.eachTargetAxis(function(e,i,n,r){var a=this.dependentModels[e.axis][i],o=a.__dzAxisProxy||(a.__dzAxisProxy=new oI(e.name,i,this,r));t[e.name+"_"+i]=o},this)},_resetTarget:function(){var t=this.option,e=this._judgeAutoMode();lI(function(e){var i=e.axisIndex;t[i]=Nn(t[i])},this),"axisIndex"===e?this._autoSetAxisIndex():"orient"===e&&this._autoSetOrient()},_judgeAutoMode:function(){var t=this.option,e=!1;lI(function(i){null!=t[i.axisIndex]&&(e=!0)},this);var i=t.orient;return null==i&&e?"orient":e?void 0:(null==i&&(t.orient="horizontal"),"axisIndex")},_autoSetAxisIndex:function(){var t=!0,e=this.get("orient",!0),i=this.option,n=this.dependentModels;if(t){var r="vertical"===e?"y":"x";n[r+"Axis"].length?(i[r+"AxisIndex"]=[0],t=!1):sI(n.singleAxis,function(n){t&&n.get("orient",!0)===e&&(i.singleAxisIndex=[n.componentIndex],t=!1)})}t&&lI(function(e){if(t){var n=[],r=this.dependentModels[e.axis];if(r.length&&!n.length)for(var a=0,o=r.length;o>a;a++)"category"===r[a].get("type")&&n.push(a);i[e.axisIndex]=n,n.length&&(t=!1)}},this),t&&this.ecModel.eachSeries(function(t){this._isSeriesHasAllAxesTypeOf(t,"value")&&lI(function(e){var n=i[e.axisIndex],r=t.get(e.axisIndex),a=t.get(e.axisId),o=t.ecModel.queryComponents({mainType:e.axis,index:r,id:a})[0];r=o.componentIndex,h(n,r)<0&&n.push(r)})},this)},_autoSetOrient:function(){var t;this.eachTargetAxis(function(e){!t&&(t=e.name)},this),this.option.orient="y"===t?"vertical":"horizontal"},_isSeriesHasAllAxesTypeOf:function(t,e){var i=!0;return lI(function(n){var r=t.get(n.axisIndex),a=this.dependentModels[n.axis][r];a&&a.get("type")===e||(i=!1)},this),i},_setDefaultThrottle:function(t){if(t.hasOwnProperty("throttle")&&(this._autoThrottle=!1),this._autoThrottle){var e=this.ecModel.option;this.option.throttle=e.animation&&e.animationDurationUpdate>0?100:20}},getFirstTargetAxisModel:function(){var t;return lI(function(e){if(null==t){var i=this.get(e.axisIndex);i.length&&(t=this.dependentModels[e.axis][i[0]])}},this),t},eachTargetAxis:function(t,e){var i=this.ecModel;lI(function(n){sI(this.get(n.axisIndex),function(r){t.call(e,n,r,this,i)},this)},this)},getAxisProxy:function(t,e){return this._axisProxies[t+"_"+e]},getAxisModel:function(t,e){var i=this.getAxisProxy(t,e);return i&&i.getAxisModel()},setRawRange:function(t,e){var i=this.option;sI([["start","startValue"],["end","endValue"]],function(e){(null!=t[e[0]]||null!=t[e[1]])&&(i[e[0]]=t[e[0]],i[e[1]]=t[e[1]])},this),!e&&wp(this,t)},getPercentRange:function(){var t=this.findRepresentativeAxisProxy();return t?t.getDataPercentWindow():void 0},getValueRange:function(t,e){if(null!=t||null!=e)return this.getAxisProxy(t,e).getDataValueWindow();var i=this.findRepresentativeAxisProxy();return i?i.getDataValueWindow():void 0},findRepresentativeAxisProxy:function(t){if(t)return t.__dzAxisProxy;var e=this._axisProxies;for(var i in e)if(e.hasOwnProperty(i)&&e[i].hostedBy(this))return e[i];for(var i in e)if(e.hasOwnProperty(i)&&!e[i].hostedBy(this))return e[i]},getRangePropMode:function(){return this._rangePropMode.slice()}}),uI=s_.extend({type:"dataZoom",render:function(t,e,i){this.dataZoomModel=t,this.ecModel=e,this.api=i},getTargetCoordInfo:function(){function t(t,e,i,n){for(var r,a=0;aa&&(e[1-n]=e[n]+u.sign*a),e}),dI=Dy,fI=qa,pI=Ka,gI=y,vI=f,mI=7,yI=1,xI=30,_I="horizontal",wI="vertical",bI=5,SI=["line","bar","candlestick","scatter"],MI=uI.extend({type:"dataZoom.slider",init:function(t,e){this._displayables={},this._orient,this._range,this._handleEnds,this._size,this._handleWidth,this._handleHeight,this._location,this._dragging,this._dataShadowInfo,this.api=e},render:function(t,e,i,n){return MI.superApply(this,"render",arguments),Hs(this,"_dispatchZoomAction",this.dataZoomModel.get("throttle"),"fixRate"),this._orient=t.get("orient"),this.dataZoomModel.get("show")===!1?void this.group.removeAll():(n&&"dataZoom"===n.type&&n.from===this.uid||this._buildView(),void this._updateView())},remove:function(){MI.superApply(this,"remove",arguments),Zs(this,"_dispatchZoomAction")},dispose:function(){MI.superApply(this,"dispose",arguments),Zs(this,"_dispatchZoomAction")},_buildView:function(){var t=this.group;t.removeAll(),this._resetLocation(),this._resetInterval();var e=this._displayables.barGroup=new lv;this._renderBackground(),this._renderHandle(),this._renderDataShadow(),t.add(e),this._positionGroup()},_resetLocation:function(){var t=this.dataZoomModel,e=this.api,i=this._findCoordRect(),n={width:e.getWidth(),height:e.getHeight()},r=this._orient===_I?{right:n.width-i.x-i.width,top:n.height-xI-mI,width:i.width,height:xI}:{right:mI,top:i.y,width:xI,height:i.height},a=Mo(t.option);f(["right","top","width","height"],function(t){"ph"===a[t]&&(a[t]=r[t])});var o=bo(a,n,t.padding);this._location={x:o.x,y:o.y},this._size=[o.width,o.height],this._orient===wI&&this._size.reverse()},_positionGroup:function(){var t=this.group,e=this._location,i=this._orient,n=this.dataZoomModel.getFirstTargetAxisModel(),r=n&&n.get("inverse"),a=this._displayables.barGroup,o=(this._dataShadowInfo||{}).otherAxisInverse;a.attr(i!==_I||r?i===_I&&r?{scale:o?[-1,1]:[-1,-1]}:i!==wI||r?{scale:o?[-1,-1]:[-1,1],rotation:Math.PI/2}:{scale:o?[1,-1]:[1,1],rotation:Math.PI/2}:{scale:o?[1,1]:[1,-1]});var s=t.getBoundingRect([a]);t.attr("position",[e.x-s.x,e.y-s.y])},_getViewExtent:function(){return[0,this._size[0]]},_renderBackground:function(){var t=this.dataZoomModel,e=this._size,i=this._displayables.barGroup;i.add(new dI({silent:!0,shape:{x:0,y:0,width:e[0],height:e[1]},style:{fill:t.get("backgroundColor")},z2:-40})),i.add(new dI({shape:{x:0,y:0,width:e[0],height:e[1]},style:{fill:"transparent"},z2:0,onclick:y(this._onClickPanelClick,this)}))},_renderDataShadow:function(){var t=this._dataShadowInfo=this._prepareDataShadowInfo();if(t){var e=this._size,i=t.series,n=i.getRawData(),r=i.getShadowDim?i.getShadowDim():t.otherDim;if(null!=r){var a=n.getDataExtent(r),o=.3*(a[1]-a[0]);a=[a[0]-o,a[1]+o];var l,h=[0,e[1]],u=[0,e[0]],c=[[e[0],0],[0,0]],d=[],f=u[1]/(n.count()-1),p=0,g=Math.round(n.count()/e[0]);n.each([r],function(t,e){if(g>0&&e%g)return void(p+=f);var i=null==t||isNaN(t)||""===t,n=i?0:fI(t,a,h,!0);i&&!l&&e?(c.push([c[c.length-1][0],0]),d.push([d[d.length-1][0],0])):!i&&l&&(c.push([p,0]),d.push([p,0])),c.push([p,n]),d.push([p,n]),p+=f,l=i});var v=this.dataZoomModel;this._displayables.barGroup.add(new Cy({shape:{points:c},style:s({fill:v.get("dataBackgroundColor")},v.getModel("dataBackground.areaStyle").getAreaStyle()),silent:!0,z2:-20})),this._displayables.barGroup.add(new Ay({shape:{points:d},style:v.getModel("dataBackground.lineStyle").getLineStyle(),silent:!0,z2:-19}))}}},_prepareDataShadowInfo:function(){var t=this.dataZoomModel,e=t.get("showDataShadow");if(e!==!1){var i,n=this.ecModel;return t.eachTargetAxis(function(r,a){var o=t.getAxisProxy(r.name,a).getTargetSeriesModels();f(o,function(t){if(!(i||e!==!0&&h(SI,t.get("type"))<0)){var o,s=n.getComponent(r.axis,a).axis,l=Mp(r.name),u=t.coordinateSystem;null!=l&&u.getOtherAxis&&(o=u.getOtherAxis(s).inverse),l=t.getData().mapDimension(l),i={thisAxis:s,series:t,thisDim:r.name,otherDim:l,otherAxisInverse:o}}},this)},this),i}},_renderHandle:function(){var t=this._displayables,e=t.handles=[],i=t.handleLabels=[],n=this._displayables.barGroup,r=this._size,a=this.dataZoomModel;n.add(t.filler=new dI({draggable:!0,cursor:Ip(this._orient),drift:gI(this._onDragMove,this,"all"),onmousemove:function(t){Ig(t.event)},ondragstart:gI(this._showDataInfo,this,!0),ondragend:gI(this._onDragEnd,this),onmouseover:gI(this._showDataInfo,this,!0),onmouseout:gI(this._showDataInfo,this,!1),style:{fill:a.get("fillerColor"),textPosition:"inside"}})),n.add(new dI(na({silent:!0,shape:{x:0,y:0,width:r[0],height:r[1]},style:{stroke:a.get("dataBackgroundColor")||a.get("borderColor"),lineWidth:yI,fill:"rgba(0,0,0,0)"}}))),vI([0,1],function(t){var r=Va(a.get("handleIcon"),{cursor:Ip(this._orient),draggable:!0,drift:gI(this._onDragMove,this,t),onmousemove:function(t){Ig(t.event) - },ondragend:gI(this._onDragEnd,this),onmouseover:gI(this._showDataInfo,this,!0),onmouseout:gI(this._showDataInfo,this,!1)},{x:-1,y:0,width:2,height:2}),o=r.getBoundingRect();this._handleHeight=Ua(a.get("handleSize"),this._size[1]),this._handleWidth=o.width/o.height*this._handleHeight,r.setStyle(a.getModel("handleStyle").getItemStyle());var s=a.get("handleColor");null!=s&&(r.style.fill=s),n.add(e[t]=r);var l=a.textStyleModel;this.group.add(i[t]=new xy({silent:!0,invisible:!0,style:{x:0,y:0,text:"",textVerticalAlign:"middle",textAlign:"center",textFill:l.getTextColor(),textFont:l.getFont()},z2:10}))},this)},_resetInterval:function(){var t=this._range=this.dataZoomModel.getPercentRange(),e=this._getViewExtent();this._handleEnds=[fI(t[0],[0,100],e,!0),fI(t[1],[0,100],e,!0)]},_updateInterval:function(t,e){var i=this.dataZoomModel,n=this._handleEnds,r=this._getViewExtent(),a=i.findRepresentativeAxisProxy().getMinMaxSpan(),o=[0,100];cI(e,n,r,i.get("zoomLock")?"all":t,null!=a.minSpan?fI(a.minSpan,o,r,!0):null,null!=a.maxSpan?fI(a.maxSpan,o,r,!0):null);var s=this._range,l=this._range=pI([fI(n[0],r,o,!0),fI(n[1],r,o,!0)]);return!s||s[0]!==l[0]||s[1]!==l[1]},_updateView:function(t){var e=this._displayables,i=this._handleEnds,n=pI(i.slice()),r=this._size;vI([0,1],function(t){var n=e.handles[t],a=this._handleHeight;n.attr({scale:[a/2,a/2],position:[i[t],r[1]/2-a/2]})},this),e.filler.setShape({x:n[0],y:0,width:n[1]-n[0],height:r[1]}),this._updateDataInfo(t)},_updateDataInfo:function(t){function e(t){var e=za(n.handles[t].parent,this.group),i=Ra(0===t?"right":"left",e),s=this._handleWidth/2+bI,l=Ea([c[t]+(0===t?-s:s),this._size[1]/2],e);r[t].setStyle({x:l[0],y:l[1],textVerticalAlign:a===_I?"middle":i,textAlign:a===_I?i:"center",text:o[t]})}var i=this.dataZoomModel,n=this._displayables,r=n.handleLabels,a=this._orient,o=["",""];if(i.get("showDetail")){var s=i.findRepresentativeAxisProxy();if(s){var l=s.getAxisModel().axis,h=this._range,u=t?s.calculateDataWindow({start:h[0],end:h[1]}).valueWindow:s.getDataValueWindow();o=[this._formatLabel(u[0],l),this._formatLabel(u[1],l)]}}var c=pI(this._handleEnds.slice());e.call(this,0),e.call(this,1)},_formatLabel:function(t,e){var i=this.dataZoomModel,n=i.get("labelFormatter"),r=i.get("labelPrecision");(null==r||"auto"===r)&&(r=e.getPixelPrecision());var a=null==t||isNaN(t)?"":"category"===e.type||"time"===e.type?e.scale.getLabel(Math.round(t)):t.toFixed(Math.min(r,20));return w(n)?n(t,a):b(n)?n.replace("{value}",a):a},_showDataInfo:function(t){t=this._dragging||t;var e=this._displayables.handleLabels;e[0].attr("invisible",!t),e[1].attr("invisible",!t)},_onDragMove:function(t,e,i){this._dragging=!0;var n=this._displayables.barGroup.getLocalTransform(),r=Ea([e,i],n,!0),a=this._updateInterval(t,r[0]),o=this.dataZoomModel.get("realtime");this._updateView(!o),a&&o&&this._dispatchZoomAction()},_onDragEnd:function(){this._dragging=!1,this._showDataInfo(!1);var t=this.dataZoomModel.get("realtime");!t&&this._dispatchZoomAction()},_onClickPanelClick:function(t){var e=this._size,i=this._displayables.barGroup.transformCoordToLocal(t.offsetX,t.offsetY);if(!(i[0]<0||i[0]>e[0]||i[1]<0||i[1]>e[1])){var n=this._handleEnds,r=(n[0]+n[1])/2,a=this._updateInterval("all",i[0]-r);this._updateView(),a&&this._dispatchZoomAction()}},_dispatchZoomAction:function(){var t=this._range;this.api.dispatchAction({type:"dataZoom",from:this.uid,dataZoomId:this.dataZoomModel.id,start:t[0],end:t[1]})},_findCoordRect:function(){var t;if(vI(this.getTargetCoordInfo(),function(e){if(!t&&e.length){var i=e[0].model.coordinateSystem;t=i.getRect&&i.getRect()}}),!t){var e=this.api.getWidth(),i=this.api.getHeight();t={x:.2*e,y:.2*i,width:.6*e,height:.6*i}}return t}});hI.extend({type:"dataZoom.inside",defaultOption:{disabled:!1,zoomLock:!1,zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!1,preventDefaultMouseMove:!0}});var II="\x00_ec_interaction_mutex";Ul({type:"takeGlobalCursor",event:"globalCursorTaken",update:"update"},function(){}),c(Ap,bg);var TI="\x00_ec_dataZoom_roams",CI=y,AI=uI.extend({type:"dataZoom.inside",init:function(){this._range},render:function(t,e,i){AI.superApply(this,"render",arguments),this._range=t.getPercentRange(),f(this.getTargetCoordInfo(),function(e,n){var r=p(e,function(t){return Fp(t.model)});f(e,function(e){var a=e.model,o={};f(["pan","zoom","scrollMove"],function(t){o[t]=CI(DI[t],this,e,n)},this),Bp(i,{coordId:Fp(a),allCoordIds:r,containsPoint:function(t,e,i){return a.coordinateSystem.containPoint([e,i])},dataZoomId:t.id,dataZoomModel:t,getRange:o})},this)},this)},dispose:function(){Np(this.api,this.dataZoomModel.id),AI.superApply(this,"dispose",arguments),this._range=null}}),DI={zoom:function(t,e,i,n){var r=this._range,a=r.slice(),o=t.axisModels[0];if(o){var s=kI[e](null,[n.originX,n.originY],o,i,t),l=(s.signal>0?s.pixelStart+s.pixelLength-s.pixel:s.pixel-s.pixelStart)/s.pixelLength*(a[1]-a[0])+a[0],h=Math.max(1/n.scale,0);a[0]=(a[0]-l)*h+l,a[1]=(a[1]-l)*h+l;var u=this.dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan();return cI(0,a,[0,100],0,u.minSpan,u.maxSpan),this._range=a,r[0]!==a[0]||r[1]!==a[1]?a:void 0}},pan:Xp(function(t,e,i,n,r,a){var o=kI[n]([a.oldX,a.oldY],[a.newX,a.newY],e,r,i);return o.signal*(t[1]-t[0])*o.pixel/o.pixelLength}),scrollMove:Xp(function(t,e,i,n,r,a){var o=kI[n]([0,0],[a.scrollDelta,a.scrollDelta],e,r,i);return o.signal*(t[1]-t[0])*a.scrollDelta})},kI={grid:function(t,e,i,n,r){var a=i.axis,o={},s=r.model.coordinateSystem.getRect();return t=t||[0,0],"x"===a.dim?(o.pixel=e[0]-t[0],o.pixelLength=s.width,o.pixelStart=s.x,o.signal=a.inverse?1:-1):(o.pixel=e[1]-t[1],o.pixelLength=s.height,o.pixelStart=s.y,o.signal=a.inverse?-1:1),o},polar:function(t,e,i,n,r){var a=i.axis,o={},s=r.model.coordinateSystem,l=s.getRadiusAxis().getExtent(),h=s.getAngleAxis().getExtent();return t=t?s.pointToCoord(t):[0,0],e=s.pointToCoord(e),"radiusAxis"===i.mainType?(o.pixel=e[0]-t[0],o.pixelLength=l[1]-l[0],o.pixelStart=l[0],o.signal=a.inverse?1:-1):(o.pixel=e[1]-t[1],o.pixelLength=h[1]-h[0],o.pixelStart=h[0],o.signal=a.inverse?-1:1),o},singleAxis:function(t,e,i,n,r){var a=i.axis,o=r.model.coordinateSystem.getRect(),s={};return t=t||[0,0],"horizontal"===a.orient?(s.pixel=e[0]-t[0],s.pixelLength=o.width,s.pixelStart=o.x,s.signal=a.inverse?1:-1):(s.pixel=e[1]-t[1],s.pixelLength=o.height,s.pixelStart=o.y,s.signal=a.inverse?-1:1),s}};jl({getTargetSeries:function(t){var e=N();return t.eachComponent("dataZoom",function(t){t.eachTargetAxis(function(t,i,n){var r=n.getAxisProxy(t.name,i);f(r.getTargetSeriesModels(),function(t){e.set(t.uid,t)})})}),e},modifyOutputEnd:!0,overallReset:function(t,e){t.eachComponent("dataZoom",function(t){t.eachTargetAxis(function(t,i,n){n.getAxisProxy(t.name,i).reset(n,e)}),t.eachTargetAxis(function(t,i,n){n.getAxisProxy(t.name,i).filterData(n,e)})}),t.eachComponent("dataZoom",function(t){var e=t.findRepresentativeAxisProxy(),i=e.getDataPercentWindow(),n=e.getDataValueWindow();t.setRawRange({start:i[0],end:i[1],startValue:n[0],endValue:n[1]},!0)})}}),Ul("dataZoom",function(t,e){var i=gp(y(e.eachComponent,e,"dataZoom"),nI,function(t,e){return t.get(e.axisIndex)}),n=[];e.eachComponent({mainType:"dataZoom",query:t},function(t){n.push.apply(n,i(t).nodes)}),f(n,function(e){e.setRawRange({start:t.start,end:t.end,startValue:t.startValue,endValue:t.endValue})})});var PI,LI="urn:schemas-microsoft-com:vml",OI="undefined"==typeof window?null:window,zI=!1,EI=OI&&OI.document;if(EI&&!tg.canvasSupported)try{!EI.namespaces.zrvml&&EI.namespaces.add("zrvml",LI),PI=function(t){return EI.createElement("')}}catch(RI){PI=function(t){return EI.createElement("<"+t+' xmlns="'+LI+'" class="zrvml">')}}var BI=qm.CMD,NI=Math.round,FI=Math.sqrt,VI=Math.abs,WI=Math.cos,GI=Math.sin,HI=Math.max;if(!tg.canvasSupported){var ZI=",",XI="progid:DXImageTransform.Microsoft",YI=21600,jI=YI/2,qI=1e5,UI=1e3,$I=function(t){t.style.cssText="position:absolute;left:0;top:0;width:1px;height:1px;",t.coordsize=YI+","+YI,t.coordorigin="0,0"},KI=function(t){return String(t).replace(/&/g,"&").replace(/"/g,""")},QI=function(t,e,i){return"rgb("+[t,e,i].join(",")+")"},JI=function(t,e){e&&t&&e.parentNode!==t&&t.appendChild(e)},tT=function(t,e){e&&t&&e.parentNode===t&&t.removeChild(e)},eT=function(t,e,i){return(parseFloat(t)||0)*qI+(parseFloat(e)||0)*UI+i},iT=function(t,e){return"string"==typeof t?t.lastIndexOf("%")>=0?parseFloat(t)/100*e:parseFloat(t):t},nT=function(t,e,i){var n=He(e);i=+i,isNaN(i)&&(i=1),n&&(t.color=QI(n[0],n[1],n[2]),t.opacity=i*n[3])},rT=function(t){var e=He(t);return[QI(e[0],e[1],e[2]),e[3]]},aT=function(t,e,i){var n=e.fill;if(null!=n)if(n instanceof Ey){var r,a=0,o=[0,0],s=0,l=1,h=i.getBoundingRect(),u=h.width,c=h.height;if("linear"===n.type){r="gradient";var d=i.transform,f=[n.x*u,n.y*c],p=[n.x2*u,n.y2*c];d&&(ae(f,f,d),ae(p,p,d));var g=p[0]-f[0],v=p[1]-f[1];a=180*Math.atan2(g,v)/Math.PI,0>a&&(a+=360),1e-6>a&&(a=0)}else{r="gradientradial";var f=[n.x*u,n.y*c],d=i.transform,m=i.scale,y=u,x=c;o=[(f[0]-h.x)/y,(f[1]-h.y)/x],d&&ae(f,f,d),y/=m[0]*YI,x/=m[1]*YI;var _=HI(y,x);s=0/_,l=2*n.r/_-s}var w=n.colorStops.slice();w.sort(function(t,e){return t.offset-e.offset});for(var b=w.length,S=[],M=[],I=0;b>I;I++){var T=w[I],C=rT(T.color);M.push(T.offset*l+s+" "+C[0]),(0===I||I===b-1)&&S.push(C)}if(b>=2){var A=S[0][0],D=S[1][0],k=S[0][1]*e.opacity,P=S[1][1]*e.opacity;t.type=r,t.method="none",t.focus="100%",t.angle=a,t.color=A,t.color2=D,t.colors=M.join(","),t.opacity=P,t.opacity2=k}"radial"===r&&(t.focusposition=o.join(","))}else nT(t,n,e.opacity)},oT=function(t,e){null!=e.lineDash&&(t.dashstyle=e.lineDash.join(" ")),null==e.stroke||e.stroke instanceof Ey||nT(t,e.stroke,e.opacity)},sT=function(t,e,i,n){var r="fill"==e,a=t.getElementsByTagName(e)[0];null!=i[e]&&"none"!==i[e]&&(r||!r&&i.lineWidth)?(t[r?"filled":"stroked"]="true",i[e]instanceof Ey&&tT(t,a),a||(a=Yp(e)),r?aT(a,i,n):oT(a,i),JI(t,a)):(t[r?"filled":"stroked"]="false",tT(t,a))},lT=[[],[],[]],hT=function(t,e){var i,n,r,a,o,s,l=BI.M,h=BI.C,u=BI.L,c=BI.A,d=BI.Q,f=[],p=t.data,g=t.len();for(a=0;g>a;){switch(r=p[a++],n="",i=0,r){case l:n=" m ",i=1,o=p[a++],s=p[a++],lT[0][0]=o,lT[0][1]=s;break;case u:n=" l ",i=1,o=p[a++],s=p[a++],lT[0][0]=o,lT[0][1]=s;break;case d:case h:n=" c ",i=3;var v,m,y=p[a++],x=p[a++],_=p[a++],w=p[a++];r===d?(v=_,m=w,_=(_+2*y)/3,w=(w+2*x)/3,y=(o+2*y)/3,x=(s+2*x)/3):(v=p[a++],m=p[a++]),lT[0][0]=y,lT[0][1]=x,lT[1][0]=_,lT[1][1]=w,lT[2][0]=v,lT[2][1]=m,o=v,s=m;break;case c:var b=0,S=0,M=1,I=1,T=0;e&&(b=e[4],S=e[5],M=FI(e[0]*e[0]+e[1]*e[1]),I=FI(e[2]*e[2]+e[3]*e[3]),T=Math.atan2(-e[1]/I,e[0]/M));var C=p[a++],A=p[a++],D=p[a++],k=p[a++],P=p[a++]+T,L=p[a++]+P+T;a++;var O=p[a++],z=C+WI(P)*D,E=A+GI(P)*k,y=C+WI(L)*D,x=A+GI(L)*k,R=O?" wa ":" at ";Math.abs(z-y)<1e-4&&(Math.abs(L-P)>.01?O&&(z+=270/YI):Math.abs(E-A)<1e-4?O&&C>z||!O&&z>C?x-=270/YI:x+=270/YI:O&&A>E||!O&&E>A?y+=270/YI:y-=270/YI),f.push(R,NI(((C-D)*M+b)*YI-jI),ZI,NI(((A-k)*I+S)*YI-jI),ZI,NI(((C+D)*M+b)*YI-jI),ZI,NI(((A+k)*I+S)*YI-jI),ZI,NI((z*M+b)*YI-jI),ZI,NI((E*I+S)*YI-jI),ZI,NI((y*M+b)*YI-jI),ZI,NI((x*I+S)*YI-jI)),o=y,s=x;break;case BI.R:var B=lT[0],N=lT[1];B[0]=p[a++],B[1]=p[a++],N[0]=B[0]+p[a++],N[1]=B[1]+p[a++],e&&(ae(B,B,e),ae(N,N,e)),B[0]=NI(B[0]*YI-jI),N[0]=NI(N[0]*YI-jI),B[1]=NI(B[1]*YI-jI),N[1]=NI(N[1]*YI-jI),f.push(" m ",B[0],ZI,B[1]," l ",N[0],ZI,B[1]," l ",N[0],ZI,N[1]," l ",B[0],ZI,N[1]);break;case BI.Z:f.push(" x ")}if(i>0){f.push(n);for(var F=0;i>F;F++){var V=lT[F];e&&ae(V,V,e),f.push(NI(V[0]*YI-jI),ZI,NI(V[1]*YI-jI),i-1>F?ZI:"")}}}return f.join("")};Fr.prototype.brushVML=function(t){var e=this.style,i=this._vmlEl;i||(i=Yp("shape"),$I(i),this._vmlEl=i),sT(i,"fill",e,this),sT(i,"stroke",e,this);var n=this.transform,r=null!=n,a=i.getElementsByTagName("stroke")[0];if(a){var o=e.lineWidth;if(r&&!e.strokeNoScale){var s=n[0]*n[3]-n[1]*n[2];o*=FI(VI(s))}a.weight=o+"px"}var l=this.path||(this.path=new qm);this.__dirtyPath&&(l.beginPath(),this.buildPath(l,this.shape),l.toStatic(),this.__dirtyPath=!1),i.path=hT(l,this.transform),i.style.zIndex=eT(this.zlevel,this.z,this.z2),JI(t,i),null!=e.text?this.drawRectText(t,this.getBoundingRect()):this.removeRectText(t)},Fr.prototype.onRemove=function(t){tT(t,this._vmlEl),this.removeRectText(t)},Fr.prototype.onAdd=function(t){JI(t,this._vmlEl),this.appendRectText(t)};var uT=function(t){return"object"==typeof t&&t.tagName&&"IMG"===t.tagName.toUpperCase()};yn.prototype.brushVML=function(t){var e,i,n=this.style,r=n.image;if(uT(r)){var a=r.src;if(a===this._imageSrc)e=this._imageWidth,i=this._imageHeight;else{var o=r.runtimeStyle,s=o.width,l=o.height;o.width="auto",o.height="auto",e=r.width,i=r.height,o.width=s,o.height=l,this._imageSrc=a,this._imageWidth=e,this._imageHeight=i}r=a}else r===this._imageSrc&&(e=this._imageWidth,i=this._imageHeight);if(r){var h=n.x||0,u=n.y||0,c=n.width,d=n.height,f=n.sWidth,p=n.sHeight,g=n.sx||0,v=n.sy||0,m=f&&p,y=this._vmlEl;y||(y=EI.createElement("div"),$I(y),this._vmlEl=y);var x,_=y.style,w=!1,b=1,S=1;if(this.transform&&(x=this.transform,b=FI(x[0]*x[0]+x[1]*x[1]),S=FI(x[2]*x[2]+x[3]*x[3]),w=x[1]||x[2]),w){var M=[h,u],I=[h+c,u],T=[h,u+d],C=[h+c,u+d];ae(M,M,x),ae(I,I,x),ae(T,T,x),ae(C,C,x);var A=HI(M[0],I[0],T[0],C[0]),D=HI(M[1],I[1],T[1],C[1]),k=[];k.push("M11=",x[0]/b,ZI,"M12=",x[2]/S,ZI,"M21=",x[1]/b,ZI,"M22=",x[3]/S,ZI,"Dx=",NI(h*b+x[4]),ZI,"Dy=",NI(u*S+x[5])),_.padding="0 "+NI(A)+"px "+NI(D)+"px 0",_.filter=XI+".Matrix("+k.join("")+", SizingMethod=clip)"}else x&&(h=h*b+x[4],u=u*S+x[5]),_.filter="",_.left=NI(h)+"px",_.top=NI(u)+"px";var P=this._imageEl,L=this._cropEl;P||(P=EI.createElement("div"),this._imageEl=P);var O=P.style;if(m){if(e&&i)O.width=NI(b*e*c/f)+"px",O.height=NI(S*i*d/p)+"px";else{var z=new Image,E=this;z.onload=function(){z.onload=null,e=z.width,i=z.height,O.width=NI(b*e*c/f)+"px",O.height=NI(S*i*d/p)+"px",E._imageWidth=e,E._imageHeight=i,E._imageSrc=r},z.src=r}L||(L=EI.createElement("div"),L.style.overflow="hidden",this._cropEl=L);var R=L.style;R.width=NI((c+g*c/f)*b),R.height=NI((d+v*d/p)*S),R.filter=XI+".Matrix(Dx="+-g*c/f*b+",Dy="+-v*d/p*S+")",L.parentNode||y.appendChild(L),P.parentNode!=L&&L.appendChild(P)}else O.width=NI(b*c)+"px",O.height=NI(S*d)+"px",y.appendChild(P),L&&L.parentNode&&(y.removeChild(L),this._cropEl=null);var B="",N=n.opacity;1>N&&(B+=".Alpha(opacity="+NI(100*N)+") "),B+=XI+".AlphaImageLoader(src="+r+", SizingMethod=scale)",O.filter=B,y.style.zIndex=eT(this.zlevel,this.z,this.z2),JI(t,y),null!=n.text&&this.drawRectText(t,this.getBoundingRect())}},yn.prototype.onRemove=function(t){tT(t,this._vmlEl),this._vmlEl=null,this._cropEl=null,this._imageEl=null,this.removeRectText(t)},yn.prototype.onAdd=function(t){JI(t,this._vmlEl),this.appendRectText(t)};var cT,dT="normal",fT={},pT=0,gT=100,vT=document.createElement("div"),mT=function(t){var e=fT[t];if(!e){pT>gT&&(pT=0,fT={});var i,n=vT.style;try{n.font=t,i=n.fontFamily.split(",")[0]}catch(r){}e={style:n.fontStyle||dT,variant:n.fontVariant||dT,weight:n.fontWeight||dT,size:0|parseFloat(n.fontSize||12),family:i||"Microsoft YaHei"},fT[t]=e,pT++}return e};Oi("measureText",function(t,e){var i=EI;cT||(cT=i.createElement("div"),cT.style.cssText="position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;",EI.body.appendChild(cT));try{cT.style.font=e}catch(n){}return cT.innerHTML="",cT.appendChild(i.createTextNode(t)),{width:cT.offsetWidth}});for(var yT=new gi,xT=function(t,e,i,n){var r=this.style;this.__dirty&&Qi(r,!0);var a=r.text;if(null!=a&&(a+=""),a){if(r.rich){var o=qi(a,r);a=[];for(var s=0;s= 11), + domSupported: "undefined" != typeof document + } + } + + function i(t, e) { + "createCanvas" === t && (dg = null), ug[t] = e + } + + function n(t) { + if (null == t || "object" != typeof t) return t; + var e = t, i = ng.call(t); + if ("[object Array]" === i) { + if (!R(t)) { + e = []; + for (var r = 0, a = t.length; a > r; r++) e[r] = n(t[r]) + } + } else if (ig[i]) { + if (!R(t)) { + var o = t.constructor; + if (t.constructor.from) e = o.from(t); else { + e = new o(t.length); + for (var r = 0, a = t.length; a > r; r++) e[r] = n(t[r]) + } + } + } else if (!eg[i] && !R(t) && !T(t)) { + e = {}; + for (var s in t) t.hasOwnProperty(s) && (e[s] = n(t[s])) + } + return e + } + + function r(t, e, i) { + if (!S(e) || !S(t)) return i ? n(e) : t; + for (var a in e) if (e.hasOwnProperty(a)) { + var o = t[a], s = e[a]; + !S(s) || !S(o) || _(s) || _(o) || T(s) || T(o) || M(s) || M(o) || R(s) || R(o) ? !i && a in t || (t[a] = n(e[a], !0)) : r(o, s, i) + } + return t + } + + function a(t, e) { + for (var i = t[0], n = 1, a = t.length; a > n; n++) i = r(i, t[n], e); + return i + } + + function o(t, e) { + for (var i in e) e.hasOwnProperty(i) && (t[i] = e[i]); + return t + } + + function s(t, e, i) { + for (var n in e) e.hasOwnProperty(n) && (i ? null != e[n] : null == t[n]) && (t[n] = e[n]); + return t + } + + function l() { + return dg || (dg = cg().getContext("2d")), dg + } + + function h(t, e) { + if (t) { + if (t.indexOf) return t.indexOf(e); + for (var i = 0, n = t.length; n > i; i++) if (t[i] === e) return i + } + return -1 + } + + function u(t, e) { + function i() { + } + + var n = t.prototype; + i.prototype = e.prototype, t.prototype = new i; + for (var r in n) t.prototype[r] = n[r]; + t.prototype.constructor = t, t.superClass = e + } + + function c(t, e, i) { + t = "prototype" in t ? t.prototype : t, e = "prototype" in e ? e.prototype : e, s(t, e, i) + } + + function d(t) { + return t ? "string" == typeof t ? !1 : "number" == typeof t.length : void 0 + } + + function f(t, e, i) { + if (t && e) if (t.forEach && t.forEach === ag) t.forEach(e, i); else if (t.length === +t.length) for (var n = 0, r = t.length; r > n; n++) e.call(i, t[n], n, t); else for (var a in t) t.hasOwnProperty(a) && e.call(i, t[a], a, t) + } + + function p(t, e, i) { + if (t && e) { + if (t.map && t.map === lg) return t.map(e, i); + for (var n = [], r = 0, a = t.length; a > r; r++) n.push(e.call(i, t[r], r, t)); + return n + } + } + + function g(t, e, i, n) { + if (t && e) { + if (t.reduce && t.reduce === hg) return t.reduce(e, i, n); + for (var r = 0, a = t.length; a > r; r++) i = e.call(n, i, t[r], r, t); + return i + } + } + + function v(t, e, i) { + if (t && e) { + if (t.filter && t.filter === og) return t.filter(e, i); + for (var n = [], r = 0, a = t.length; a > r; r++) e.call(i, t[r], r, t) && n.push(t[r]); + return n + } + } + + function m(t, e, i) { + if (t && e) for (var n = 0, r = t.length; r > n; n++) if (e.call(i, t[n], n, t)) return t[n] + } + + function y(t, e) { + var i = sg.call(arguments, 2); + return function () { + return t.apply(e, i.concat(sg.call(arguments))) + } + } + + function x(t) { + var e = sg.call(arguments, 1); + return function () { + return t.apply(this, e.concat(sg.call(arguments))) + } + } + + function _(t) { + return "[object Array]" === ng.call(t) + } + + function w(t) { + return "function" == typeof t + } + + function b(t) { + return "[object String]" === ng.call(t) + } + + function S(t) { + var e = typeof t; + return "function" === e || !!t && "object" == e + } + + function M(t) { + return !!eg[ng.call(t)] + } + + function I(t) { + return !!ig[ng.call(t)] + } + + function T(t) { + return "object" == typeof t && "number" == typeof t.nodeType && "object" == typeof t.ownerDocument + } + + function C(t) { + return t !== t + } + + function A() { + for (var t = 0, e = arguments.length; e > t; t++) if (null != arguments[t]) return arguments[t] + } + + function D(t, e) { + return null != t ? t : e + } + + function k(t, e, i) { + return null != t ? t : null != e ? e : i + } + + function P() { + return Function.call.apply(sg, arguments) + } + + function L(t) { + if ("number" == typeof t) return [t, t, t, t]; + var e = t.length; + return 2 === e ? [t[0], t[1], t[0], t[1]] : 3 === e ? [t[0], t[1], t[2], t[1]] : t + } + + function O(t, e) { + if (!t) throw new Error(e) + } + + function z(t) { + return null == t ? null : "function" == typeof t.trim ? t.trim() : t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, "") + } + + function E(t) { + t[fg] = !0 + } + + function R(t) { + return t[fg] + } + + function B(t) { + function e(t, e) { + i ? n.set(t, e) : n.set(e, t) + } + + var i = _(t); + this.data = {}; + var n = this; + t instanceof B ? t.each(e) : t && f(t, e) + } + + function N(t) { + return new B(t) + } + + function F(t, e) { + for (var i = new t.constructor(t.length + e.length), n = 0; n < t.length; n++) i[n] = t[n]; + var r = t.length; + for (n = 0; n < e.length; n++) i[n + r] = e[n]; + return i + } + + function V() { + } + + function W(t, e) { + var i = new gg(2); + return null == t && (t = 0), null == e && (e = 0), i[0] = t, i[1] = e, i + } + + function G(t, e) { + return t[0] = e[0], t[1] = e[1], t + } + + function H(t) { + var e = new gg(2); + return e[0] = t[0], e[1] = t[1], e + } + + function Z(t, e, i) { + return t[0] = e, t[1] = i, t + } + + function X(t, e, i) { + return t[0] = e[0] + i[0], t[1] = e[1] + i[1], t + } + + function Y(t, e, i, n) { + return t[0] = e[0] + i[0] * n, t[1] = e[1] + i[1] * n, t + } + + function j(t, e, i) { + return t[0] = e[0] - i[0], t[1] = e[1] - i[1], t + } + + function q(t) { + return Math.sqrt(U(t)) + } + + function U(t) { + return t[0] * t[0] + t[1] * t[1] + } + + function $(t, e, i) { + return t[0] = e[0] * i[0], t[1] = e[1] * i[1], t + } + + function K(t, e, i) { + return t[0] = e[0] / i[0], t[1] = e[1] / i[1], t + } + + function Q(t, e) { + return t[0] * e[0] + t[1] * e[1] + } + + function J(t, e, i) { + return t[0] = e[0] * i, t[1] = e[1] * i, t + } + + function te(t, e) { + var i = q(e); + return 0 === i ? (t[0] = 0, t[1] = 0) : (t[0] = e[0] / i, t[1] = e[1] / i), t + } + + function ee(t, e) { + return Math.sqrt((t[0] - e[0]) * (t[0] - e[0]) + (t[1] - e[1]) * (t[1] - e[1])) + } + + function ie(t, e) { + return (t[0] - e[0]) * (t[0] - e[0]) + (t[1] - e[1]) * (t[1] - e[1]) + } + + function ne(t, e) { + return t[0] = -e[0], t[1] = -e[1], t + } + + function re(t, e, i, n) { + return t[0] = e[0] + n * (i[0] - e[0]), t[1] = e[1] + n * (i[1] - e[1]), t + } + + function ae(t, e, i) { + var n = e[0], r = e[1]; + return t[0] = i[0] * n + i[2] * r + i[4], t[1] = i[1] * n + i[3] * r + i[5], t + } + + function oe(t, e, i) { + return t[0] = Math.min(e[0], i[0]), t[1] = Math.min(e[1], i[1]), t + } + + function se(t, e, i) { + return t[0] = Math.max(e[0], i[0]), t[1] = Math.max(e[1], i[1]), t + } + + function le() { + this.on("mousedown", this._dragStart, this), this.on("mousemove", this._drag, this), this.on("mouseup", this._dragEnd, this), this.on("globalout", this._dragEnd, this) + } + + function he(t, e) { + return {target: t, topTarget: e && e.topTarget} + } + + function ue(t, e) { + var i = t._$eventProcessor; + return null != e && i && i.normalizeQuery && (e = i.normalizeQuery(e)), e + } + + function ce(t) { + return t.getBoundingClientRect ? t.getBoundingClientRect() : {left: 0, top: 0} + } + + function de(t, e, i, n) { + return i = i || {}, n || !tg.canvasSupported ? fe(t, e, i) : tg.browser.firefox && null != e.layerX && e.layerX !== e.offsetX ? (i.zrX = e.layerX, i.zrY = e.layerY) : null != e.offsetX ? (i.zrX = e.offsetX, i.zrY = e.offsetY) : fe(t, e, i), i + } + + function fe(t, e, i) { + var n = ce(t); + i.zrX = e.clientX - n.left, i.zrY = e.clientY - n.top + } + + function pe(t, e, i) { + if (e = e || window.event, null != e.zrX) return e; + var n = e.type, r = n && n.indexOf("touch") >= 0; + if (r) { + var a = "touchend" != n ? e.targetTouches[0] : e.changedTouches[0]; + a && de(t, a, e, i) + } else de(t, e, e, i), e.zrDelta = e.wheelDelta ? e.wheelDelta / 120 : -(e.detail || 0) / 3; + var o = e.button; + return null == e.which && void 0 !== o && Mg.test(e.type) && (e.which = 1 & o ? 1 : 2 & o ? 3 : 4 & o ? 2 : 0), e + } + + function ge(t, e, i) { + Sg ? t.addEventListener(e, i) : t.attachEvent("on" + e, i) + } + + function ve(t, e, i) { + Sg ? t.removeEventListener(e, i) : t.detachEvent("on" + e, i) + } + + function me(t) { + return t.which > 1 + } + + function ye(t, e, i) { + return { + type: t, + event: i, + target: e.target, + topTarget: e.topTarget, + cancelBubble: !1, + offsetX: i.zrX, + offsetY: i.zrY, + gestureEvent: i.gestureEvent, + pinchX: i.pinchX, + pinchY: i.pinchY, + pinchScale: i.pinchScale, + wheelDelta: i.zrDelta, + zrByTouch: i.zrByTouch, + which: i.which, + stop: xe + } + } + + function xe() { + Ig(this.event) + } + + function _e() { + } + + function we(t, e, i) { + if (t[t.rectHover ? "rectContain" : "contain"](e, i)) { + for (var n, r = t; r;) { + if (r.clipPath && !r.clipPath.contain(e, i)) return !1; + r.silent && (n = !0), r = r.parent + } + return n ? Tg : !0 + } + return !1 + } + + function be() { + var t = new Dg(6); + return Se(t), t + } + + function Se(t) { + return t[0] = 1, t[1] = 0, t[2] = 0, t[3] = 1, t[4] = 0, t[5] = 0, t + } + + function Me(t, e) { + return t[0] = e[0], t[1] = e[1], t[2] = e[2], t[3] = e[3], t[4] = e[4], t[5] = e[5], t + } + + function Ie(t, e, i) { + var n = e[0] * i[0] + e[2] * i[1], r = e[1] * i[0] + e[3] * i[1], a = e[0] * i[2] + e[2] * i[3], + o = e[1] * i[2] + e[3] * i[3], s = e[0] * i[4] + e[2] * i[5] + e[4], l = e[1] * i[4] + e[3] * i[5] + e[5]; + return t[0] = n, t[1] = r, t[2] = a, t[3] = o, t[4] = s, t[5] = l, t + } + + function Te(t, e, i) { + return t[0] = e[0], t[1] = e[1], t[2] = e[2], t[3] = e[3], t[4] = e[4] + i[0], t[5] = e[5] + i[1], t + } + + function Ce(t, e, i) { + var n = e[0], r = e[2], a = e[4], o = e[1], s = e[3], l = e[5], h = Math.sin(i), u = Math.cos(i); + return t[0] = n * u + o * h, t[1] = -n * h + o * u, t[2] = r * u + s * h, t[3] = -r * h + u * s, t[4] = u * a + h * l, t[5] = u * l - h * a, t + } + + function Ae(t, e, i) { + var n = i[0], r = i[1]; + return t[0] = e[0] * n, t[1] = e[1] * r, t[2] = e[2] * n, t[3] = e[3] * r, t[4] = e[4] * n, t[5] = e[5] * r, t + } + + function De(t, e) { + var i = e[0], n = e[2], r = e[4], a = e[1], o = e[3], s = e[5], l = i * o - a * n; + return l ? (l = 1 / l, t[0] = o * l, t[1] = -a * l, t[2] = -n * l, t[3] = i * l, t[4] = (n * s - o * r) * l, t[5] = (a * r - i * s) * l, t) : null + } + + function ke(t) { + var e = be(); + return Me(e, t), e + } + + function Pe(t) { + return t > Lg || -Lg > t + } + + function Le(t) { + this._target = t.target, this._life = t.life || 1e3, this._delay = t.delay || 0, this._initialized = !1, this.loop = null == t.loop ? !1 : t.loop, this.gap = t.gap || 0, this.easing = t.easing || "Linear", this.onframe = t.onframe, this.ondestroy = t.ondestroy, this.onrestart = t.onrestart, this._pausedTime = 0, this._paused = !1 + } + + function Oe(t) { + return t = Math.round(t), 0 > t ? 0 : t > 255 ? 255 : t + } + + function ze(t) { + return t = Math.round(t), 0 > t ? 0 : t > 360 ? 360 : t + } + + function Ee(t) { + return 0 > t ? 0 : t > 1 ? 1 : t + } + + function Re(t) { + return Oe(t.length && "%" === t.charAt(t.length - 1) ? parseFloat(t) / 100 * 255 : parseInt(t, 10)) + } + + function Be(t) { + return Ee(t.length && "%" === t.charAt(t.length - 1) ? parseFloat(t) / 100 : parseFloat(t)) + } + + function Ne(t, e, i) { + return 0 > i ? i += 1 : i > 1 && (i -= 1), 1 > 6 * i ? t + (e - t) * i * 6 : 1 > 2 * i ? e : 2 > 3 * i ? t + (e - t) * (2 / 3 - i) * 6 : t + } + + function Fe(t, e, i) { + return t + (e - t) * i + } + + function Ve(t, e, i, n, r) { + return t[0] = e, t[1] = i, t[2] = n, t[3] = r, t + } + + function We(t, e) { + return t[0] = e[0], t[1] = e[1], t[2] = e[2], t[3] = e[3], t + } + + function Ge(t, e) { + Yg && We(Yg, e), Yg = Xg.put(t, Yg || e.slice()) + } + + function He(t, e) { + if (t) { + e = e || []; + var i = Xg.get(t); + if (i) return We(e, i); + t += ""; + var n = t.replace(/ /g, "").toLowerCase(); + if (n in Zg) return We(e, Zg[n]), Ge(t, e), e; + if ("#" !== n.charAt(0)) { + var r = n.indexOf("("), a = n.indexOf(")"); + if (-1 !== r && a + 1 === n.length) { + var o = n.substr(0, r), s = n.substr(r + 1, a - (r + 1)).split(","), l = 1; + switch (o) { + case"rgba": + if (4 !== s.length) return void Ve(e, 0, 0, 0, 1); + l = Be(s.pop()); + case"rgb": + return 3 !== s.length ? void Ve(e, 0, 0, 0, 1) : (Ve(e, Re(s[0]), Re(s[1]), Re(s[2]), l), Ge(t, e), e); + case"hsla": + return 4 !== s.length ? void Ve(e, 0, 0, 0, 1) : (s[3] = Be(s[3]), Ze(s, e), Ge(t, e), e); + case"hsl": + return 3 !== s.length ? void Ve(e, 0, 0, 0, 1) : (Ze(s, e), Ge(t, e), e); + default: + return + } + } + Ve(e, 0, 0, 0, 1) + } else { + if (4 === n.length) { + var h = parseInt(n.substr(1), 16); + return h >= 0 && 4095 >= h ? (Ve(e, (3840 & h) >> 4 | (3840 & h) >> 8, 240 & h | (240 & h) >> 4, 15 & h | (15 & h) << 4, 1), Ge(t, e), e) : void Ve(e, 0, 0, 0, 1) + } + if (7 === n.length) { + var h = parseInt(n.substr(1), 16); + return h >= 0 && 16777215 >= h ? (Ve(e, (16711680 & h) >> 16, (65280 & h) >> 8, 255 & h, 1), Ge(t, e), e) : void Ve(e, 0, 0, 0, 1) + } + } + } + } + + function Ze(t, e) { + var i = (parseFloat(t[0]) % 360 + 360) % 360 / 360, n = Be(t[1]), r = Be(t[2]), + a = .5 >= r ? r * (n + 1) : r + n - r * n, o = 2 * r - a; + return e = e || [], Ve(e, Oe(255 * Ne(o, a, i + 1 / 3)), Oe(255 * Ne(o, a, i)), Oe(255 * Ne(o, a, i - 1 / 3)), 1), 4 === t.length && (e[3] = t[3]), e + } + + function Xe(t) { + if (t) { + var e, i, n = t[0] / 255, r = t[1] / 255, a = t[2] / 255, o = Math.min(n, r, a), s = Math.max(n, r, a), + l = s - o, h = (s + o) / 2; + if (0 === l) e = 0, i = 0; else { + i = .5 > h ? l / (s + o) : l / (2 - s - o); + var u = ((s - n) / 6 + l / 2) / l, c = ((s - r) / 6 + l / 2) / l, d = ((s - a) / 6 + l / 2) / l; + n === s ? e = d - c : r === s ? e = 1 / 3 + u - d : a === s && (e = 2 / 3 + c - u), 0 > e && (e += 1), e > 1 && (e -= 1) + } + var f = [360 * e, i, h]; + return null != t[3] && f.push(t[3]), f + } + } + + function Ye(t, e) { + var i = He(t); + if (i) { + for (var n = 0; 3 > n; n++) i[n] = 0 > e ? i[n] * (1 - e) | 0 : (255 - i[n]) * e + i[n] | 0, i[n] > 255 ? i[n] = 255 : t[n] < 0 && (i[n] = 0); + return Qe(i, 4 === i.length ? "rgba" : "rgb") + } + } + + function je(t) { + var e = He(t); + return e ? ((1 << 24) + (e[0] << 16) + (e[1] << 8) + +e[2]).toString(16).slice(1) : void 0 + } + + function qe(t, e, i) { + if (e && e.length && t >= 0 && 1 >= t) { + i = i || []; + var n = t * (e.length - 1), r = Math.floor(n), a = Math.ceil(n), o = e[r], s = e[a], l = n - r; + return i[0] = Oe(Fe(o[0], s[0], l)), i[1] = Oe(Fe(o[1], s[1], l)), i[2] = Oe(Fe(o[2], s[2], l)), i[3] = Ee(Fe(o[3], s[3], l)), i + } + } + + function Ue(t, e, i) { + if (e && e.length && t >= 0 && 1 >= t) { + var n = t * (e.length - 1), r = Math.floor(n), a = Math.ceil(n), o = He(e[r]), s = He(e[a]), l = n - r, + h = Qe([Oe(Fe(o[0], s[0], l)), Oe(Fe(o[1], s[1], l)), Oe(Fe(o[2], s[2], l)), Ee(Fe(o[3], s[3], l))], "rgba"); + return i ? {color: h, leftIndex: r, rightIndex: a, value: n} : h + } + } + + function $e(t, e, i, n) { + return t = He(t), t ? (t = Xe(t), null != e && (t[0] = ze(e)), null != i && (t[1] = Be(i)), null != n && (t[2] = Be(n)), Qe(Ze(t), "rgba")) : void 0 + } + + function Ke(t, e) { + return t = He(t), t && null != e ? (t[3] = Ee(e), Qe(t, "rgba")) : void 0 + } + + function Qe(t, e) { + if (t && t.length) { + var i = t[0] + "," + t[1] + "," + t[2]; + return ("rgba" === e || "hsva" === e || "hsla" === e) && (i += "," + t[3]), e + "(" + i + ")" + } + } + + function Je(t, e) { + return t[e] + } + + function ti(t, e, i) { + t[e] = i + } + + function ei(t, e, i) { + return (e - t) * i + t + } + + function ii(t, e, i) { + return i > .5 ? e : t + } + + function ni(t, e, i, n, r) { + var a = t.length; + if (1 == r) for (var o = 0; a > o; o++) n[o] = ei(t[o], e[o], i); else for (var s = a && t[0].length, o = 0; a > o; o++) for (var l = 0; s > l; l++) n[o][l] = ei(t[o][l], e[o][l], i) + } + + function ri(t, e, i) { + var n = t.length, r = e.length; + if (n !== r) { + var a = n > r; + if (a) t.length = r; else for (var o = n; r > o; o++) t.push(1 === i ? e[o] : $g.call(e[o])) + } + for (var s = t[0] && t[0].length, o = 0; o < t.length; o++) if (1 === i) isNaN(t[o]) && (t[o] = e[o]); else for (var l = 0; s > l; l++) isNaN(t[o][l]) && (t[o][l] = e[o][l]) + } + + function ai(t, e, i) { + if (t === e) return !0; + var n = t.length; + if (n !== e.length) return !1; + if (1 === i) { + for (var r = 0; n > r; r++) if (t[r] !== e[r]) return !1 + } else for (var a = t[0].length, r = 0; n > r; r++) for (var o = 0; a > o; o++) if (t[r][o] !== e[r][o]) return !1; + return !0 + } + + function oi(t, e, i, n, r, a, o, s, l) { + var h = t.length; + if (1 == l) for (var u = 0; h > u; u++) s[u] = si(t[u], e[u], i[u], n[u], r, a, o); else for (var c = t[0].length, u = 0; h > u; u++) for (var d = 0; c > d; d++) s[u][d] = si(t[u][d], e[u][d], i[u][d], n[u][d], r, a, o) + } + + function si(t, e, i, n, r, a, o) { + var s = .5 * (i - t), l = .5 * (n - e); + return (2 * (e - i) + s + l) * o + (-3 * (e - i) - 2 * s - l) * a + s * r + e + } + + function li(t) { + if (d(t)) { + var e = t.length; + if (d(t[0])) { + for (var i = [], n = 0; e > n; n++) i.push($g.call(t[n])); + return i + } + return $g.call(t) + } + return t + } + + function hi(t) { + return t[0] = Math.floor(t[0]), t[1] = Math.floor(t[1]), t[2] = Math.floor(t[2]), "rgba(" + t.join(",") + ")" + } + + function ui(t) { + var e = t[t.length - 1].value; + return d(e && e[0]) ? 2 : 1 + } + + function ci(t, e, i, n, r, a) { + var o = t._getter, s = t._setter, l = "spline" === e, h = n.length; + if (h) { + var u, c = n[0].value, f = d(c), p = !1, g = !1, v = f ? ui(n) : 0; + n.sort(function (t, e) { + return t.time - e.time + }), u = n[h - 1].time; + for (var m = [], y = [], x = n[0].value, _ = !0, w = 0; h > w; w++) { + m.push(n[w].time / u); + var b = n[w].value; + if (f && ai(b, x, v) || !f && b === x || (_ = !1), x = b, "string" == typeof b) { + var S = He(b); + S ? (b = S, p = !0) : g = !0 + } + y.push(b) + } + if (a || !_) { + for (var M = y[h - 1], w = 0; h - 1 > w; w++) f ? ri(y[w], M, v) : !isNaN(y[w]) || isNaN(M) || g || p || (y[w] = M); + f && ri(o(t._target, r), M, v); + var I, T, C, A, D, k, P = 0, L = 0; + if (p) var O = [0, 0, 0, 0]; + var z = function (t, e) { + var i; + if (0 > e) i = 0; else if (L > e) { + for (I = Math.min(P + 1, h - 1), i = I; i >= 0 && !(m[i] <= e); i--) ; + i = Math.min(i, h - 2) + } else { + for (i = P; h > i && !(m[i] > e); i++) ; + i = Math.min(i - 1, h - 2) + } + P = i, L = e; + var n = m[i + 1] - m[i]; + if (0 !== n) if (T = (e - m[i]) / n, l) if (A = y[i], C = y[0 === i ? i : i - 1], D = y[i > h - 2 ? h - 1 : i + 1], k = y[i > h - 3 ? h - 1 : i + 2], f) oi(C, A, D, k, T, T * T, T * T * T, o(t, r), v); else { + var a; + if (p) a = oi(C, A, D, k, T, T * T, T * T * T, O, 1), a = hi(O); else { + if (g) return ii(A, D, T); + a = si(C, A, D, k, T, T * T, T * T * T) + } + s(t, r, a) + } else if (f) ni(y[i], y[i + 1], T, o(t, r), v); else { + var a; + if (p) ni(y[i], y[i + 1], T, O, 1), a = hi(O); else { + if (g) return ii(y[i], y[i + 1], T); + a = ei(y[i], y[i + 1], T) + } + s(t, r, a) + } + }, E = new Le({target: t._target, life: u, loop: t._loop, delay: t._delay, onframe: z, ondestroy: i}); + return e && "spline" !== e && (E.easing = e), E + } + } + } + + function di(t, e, i, n, r, a, o, s) { + function l() { + u--, u || a && a() + } + + b(n) ? (a = r, r = n, n = 0) : w(r) ? (a = r, r = "linear", n = 0) : w(n) ? (a = n, n = 0) : w(i) ? (a = i, i = 500) : i || (i = 500), t.stopAnimation(), fi(t, "", t, e, i, n, s); + var h = t.animators.slice(), u = h.length; + u || a && a(); + for (var c = 0; c < h.length; c++) h[c].done(l).start(r, o) + } + + function fi(t, e, i, n, r, a, o) { + var s = {}, l = 0; + for (var h in n) n.hasOwnProperty(h) && (null != i[h] ? S(n[h]) && !d(n[h]) ? fi(t, e ? e + "." + h : h, i[h], n[h], r, a, o) : (o ? (s[h] = i[h], pi(t, e, h, n[h])) : s[h] = n[h], l++) : null == n[h] || o || pi(t, e, h, n[h])); + l > 0 && t.animate(e, !1).when(null == r ? 500 : r, s).delay(a || 0) + } + + function pi(t, e, i, n) { + if (e) { + var r = {}; + r[e] = {}, r[e][i] = n, t.attr(r) + } else t.attr(i, n) + } + + function gi(t, e, i, n) { + 0 > i && (t += i, i = -i), 0 > n && (e += n, n = -n), this.x = t, this.y = e, this.width = i, this.height = n + } + + function vi(t) { + for (var e = 0; t >= hv;) e |= 1 & t, t >>= 1; + return t + e + } + + function mi(t, e, i, n) { + var r = e + 1; + if (r === i) return 1; + if (n(t[r++], t[e]) < 0) { + for (; i > r && n(t[r], t[r - 1]) < 0;) r++; + yi(t, e, r) + } else for (; i > r && n(t[r], t[r - 1]) >= 0;) r++; + return r - e + } + + function yi(t, e, i) { + for (i--; i > e;) { + var n = t[e]; + t[e++] = t[i], t[i--] = n + } + } + + function xi(t, e, i, n, r) { + for (n === e && n++; i > n; n++) { + for (var a, o = t[n], s = e, l = n; l > s;) a = s + l >>> 1, r(o, t[a]) < 0 ? l = a : s = a + 1; + var h = n - s; + switch (h) { + case 3: + t[s + 3] = t[s + 2]; + case 2: + t[s + 2] = t[s + 1]; + case 1: + t[s + 1] = t[s]; + break; + default: + for (; h > 0;) t[s + h] = t[s + h - 1], h-- + } + t[s] = o + } + } + + function _i(t, e, i, n, r, a) { + var o = 0, s = 0, l = 1; + if (a(t, e[i + r]) > 0) { + for (s = n - r; s > l && a(t, e[i + r + l]) > 0;) o = l, l = (l << 1) + 1, 0 >= l && (l = s); + l > s && (l = s), o += r, l += r + } else { + for (s = r + 1; s > l && a(t, e[i + r - l]) <= 0;) o = l, l = (l << 1) + 1, 0 >= l && (l = s); + l > s && (l = s); + var h = o; + o = r - l, l = r - h + } + for (o++; l > o;) { + var u = o + (l - o >>> 1); + a(t, e[i + u]) > 0 ? o = u + 1 : l = u + } + return l + } + + function wi(t, e, i, n, r, a) { + var o = 0, s = 0, l = 1; + if (a(t, e[i + r]) < 0) { + for (s = r + 1; s > l && a(t, e[i + r - l]) < 0;) o = l, l = (l << 1) + 1, 0 >= l && (l = s); + l > s && (l = s); + var h = o; + o = r - l, l = r - h + } else { + for (s = n - r; s > l && a(t, e[i + r + l]) >= 0;) o = l, l = (l << 1) + 1, 0 >= l && (l = s); + l > s && (l = s), o += r, l += r + } + for (o++; l > o;) { + var u = o + (l - o >>> 1); + a(t, e[i + u]) < 0 ? l = u : o = u + 1 + } + return l + } + + function bi(t, e) { + function i(t, e) { + l[c] = t, h[c] = e, c += 1 + } + + function n() { + for (; c > 1;) { + var t = c - 2; + if (t >= 1 && h[t - 1] <= h[t] + h[t + 1] || t >= 2 && h[t - 2] <= h[t] + h[t - 1]) h[t - 1] < h[t + 1] && t--; else if (h[t] > h[t + 1]) break; + a(t) + } + } + + function r() { + for (; c > 1;) { + var t = c - 2; + t > 0 && h[t - 1] < h[t + 1] && t--, a(t) + } + } + + function a(i) { + var n = l[i], r = h[i], a = l[i + 1], u = h[i + 1]; + h[i] = r + u, i === c - 3 && (l[i + 1] = l[i + 2], h[i + 1] = h[i + 2]), c--; + var d = wi(t[a], t, n, r, 0, e); + n += d, r -= d, 0 !== r && (u = _i(t[n + r - 1], t, a, u, u - 1, e), 0 !== u && (u >= r ? o(n, r, a, u) : s(n, r, a, u))) + } + + function o(i, n, r, a) { + var o = 0; + for (o = 0; n > o; o++) d[o] = t[i + o]; + var s = 0, l = r, h = i; + if (t[h++] = t[l++], 0 !== --a) { + if (1 === n) { + for (o = 0; a > o; o++) t[h + o] = t[l + o]; + return void (t[h + a] = d[s]) + } + for (var c, f, p, g = u; ;) { + c = 0, f = 0, p = !1; + do if (e(t[l], d[s]) < 0) { + if (t[h++] = t[l++], f++, c = 0, 0 === --a) { + p = !0; + break + } + } else if (t[h++] = d[s++], c++, f = 0, 1 === --n) { + p = !0; + break + } while (g > (c | f)); + if (p) break; + do { + if (c = wi(t[l], d, s, n, 0, e), 0 !== c) { + for (o = 0; c > o; o++) t[h + o] = d[s + o]; + if (h += c, s += c, n -= c, 1 >= n) { + p = !0; + break + } + } + if (t[h++] = t[l++], 0 === --a) { + p = !0; + break + } + if (f = _i(d[s], t, l, a, 0, e), 0 !== f) { + for (o = 0; f > o; o++) t[h + o] = t[l + o]; + if (h += f, l += f, a -= f, 0 === a) { + p = !0; + break + } + } + if (t[h++] = d[s++], 1 === --n) { + p = !0; + break + } + g-- + } while (c >= uv || f >= uv); + if (p) break; + 0 > g && (g = 0), g += 2 + } + if (u = g, 1 > u && (u = 1), 1 === n) { + for (o = 0; a > o; o++) t[h + o] = t[l + o]; + t[h + a] = d[s] + } else { + if (0 === n) throw new Error; + for (o = 0; n > o; o++) t[h + o] = d[s + o] + } + } else for (o = 0; n > o; o++) t[h + o] = d[s + o] + } + + function s(i, n, r, a) { + var o = 0; + for (o = 0; a > o; o++) d[o] = t[r + o]; + var s = i + n - 1, l = a - 1, h = r + a - 1, c = 0, f = 0; + if (t[h--] = t[s--], 0 !== --n) { + if (1 === a) { + for (h -= n, s -= n, f = h + 1, c = s + 1, o = n - 1; o >= 0; o--) t[f + o] = t[c + o]; + return void (t[h] = d[l]) + } + for (var p = u; ;) { + var g = 0, v = 0, m = !1; + do if (e(d[l], t[s]) < 0) { + if (t[h--] = t[s--], g++, v = 0, 0 === --n) { + m = !0; + break + } + } else if (t[h--] = d[l--], v++, g = 0, 1 === --a) { + m = !0; + break + } while (p > (g | v)); + if (m) break; + do { + if (g = n - wi(d[l], t, i, n, n - 1, e), 0 !== g) { + for (h -= g, s -= g, n -= g, f = h + 1, c = s + 1, o = g - 1; o >= 0; o--) t[f + o] = t[c + o]; + if (0 === n) { + m = !0; + break + } + } + if (t[h--] = d[l--], 1 === --a) { + m = !0; + break + } + if (v = a - _i(t[s], d, 0, a, a - 1, e), 0 !== v) { + for (h -= v, l -= v, a -= v, f = h + 1, c = l + 1, o = 0; v > o; o++) t[f + o] = d[c + o]; + if (1 >= a) { + m = !0; + break + } + } + if (t[h--] = t[s--], 0 === --n) { + m = !0; + break + } + p-- + } while (g >= uv || v >= uv); + if (m) break; + 0 > p && (p = 0), p += 2 + } + if (u = p, 1 > u && (u = 1), 1 === a) { + for (h -= n, s -= n, f = h + 1, c = s + 1, o = n - 1; o >= 0; o--) t[f + o] = t[c + o]; + t[h] = d[l] + } else { + if (0 === a) throw new Error; + for (c = h - (a - 1), o = 0; a > o; o++) t[c + o] = d[o] + } + } else for (c = h - (a - 1), o = 0; a > o; o++) t[c + o] = d[o] + } + + var l, h, u = uv, c = 0, d = []; + l = [], h = [], this.mergeRuns = n, this.forceMergeRuns = r, this.pushRun = i + } + + function Si(t, e, i, n) { + i || (i = 0), n || (n = t.length); + var r = n - i; + if (!(2 > r)) { + var a = 0; + if (hv > r) return a = mi(t, i, n, e), void xi(t, i, n, i + a, e); + var o = new bi(t, e), s = vi(r); + do { + if (a = mi(t, i, n, e), s > a) { + var l = r; + l > s && (l = s), xi(t, i, i + l, i + a, e), a = l + } + o.pushRun(i, a), o.mergeRuns(), r -= a, i += a + } while (0 !== r); + o.forceMergeRuns() + } + } + + function Mi(t, e) { + return t.zlevel === e.zlevel ? t.z === e.z ? t.z2 - e.z2 : t.z - e.z : t.zlevel - e.zlevel + } + + function Ii(t, e, i) { + var n = null == e.x ? 0 : e.x, r = null == e.x2 ? 1 : e.x2, a = null == e.y ? 0 : e.y, + o = null == e.y2 ? 0 : e.y2; + e.global || (n = n * i.width + i.x, r = r * i.width + i.x, a = a * i.height + i.y, o = o * i.height + i.y), n = isNaN(n) ? 0 : n, r = isNaN(r) ? 1 : r, a = isNaN(a) ? 0 : a, o = isNaN(o) ? 0 : o; + var s = t.createLinearGradient(n, a, r, o); + return s + } + + function Ti(t, e, i) { + var n = i.width, r = i.height, a = Math.min(n, r), o = null == e.x ? .5 : e.x, s = null == e.y ? .5 : e.y, + l = null == e.r ? .5 : e.r; + e.global || (o = o * n + i.x, s = s * r + i.y, l *= a); + var h = t.createRadialGradient(o, s, 0, o, s, l); + return h + } + + function Ci() { + return !1 + } + + function Ai(t, e, i) { + var n = cg(), r = e.getWidth(), a = e.getHeight(), o = n.style; + return o && (o.position = "absolute", o.left = 0, o.top = 0, o.width = r + "px", o.height = a + "px", n.setAttribute("data-zr-dom-id", t)), n.width = r * i, n.height = a * i, n + } + + function Di(t) { + if ("string" == typeof t) { + var e = bv.get(t); + return e && e.image + } + return t + } + + function ki(t, e, i, n, r) { + if (t) { + if ("string" == typeof t) { + if (e && e.__zrImageSrc === t || !i) return e; + var a = bv.get(t), o = {hostEl: i, cb: n, cbPayload: r}; + return a ? (e = a.image, !Li(e) && a.pending.push(o)) : (!e && (e = new Image), e.onload = e.onerror = Pi, bv.put(t, e.__cachedImgObj = { + image: e, + pending: [o] + }), e.src = e.__zrImageSrc = t), e + } + return t + } + return e + } + + function Pi() { + var t = this.__cachedImgObj; + this.onload = this.onerror = this.__cachedImgObj = null; + for (var e = 0; e < t.pending.length; e++) { + var i = t.pending[e], n = i.cb; + n && n(this, i.cbPayload), i.hostEl.dirty() + } + t.pending.length = 0 + } + + function Li(t) { + return t && t.width && t.height + } + + function Oi(t, e) { + Av[t] = e + } + + function zi(t, e) { + e = e || Cv; + var i = t + ":" + e; + if (Sv[i]) return Sv[i]; + for (var n = (t + "").split("\n"), r = 0, a = 0, o = n.length; o > a; a++) r = Math.max(Yi(n[a], e).width, r); + return Mv > Iv && (Mv = 0, Sv = {}), Mv++, Sv[i] = r, r + } + + function Ei(t, e, i, n, r, a, o) { + return a ? Bi(t, e, i, n, r, a, o) : Ri(t, e, i, n, r, o) + } + + function Ri(t, e, i, n, r, a) { + var o = ji(t, e, r, a), s = zi(t, e); + r && (s += r[1] + r[3]); + var l = o.outerHeight, h = Ni(0, s, i), u = Fi(0, l, n), c = new gi(h, u, s, l); + return c.lineHeight = o.lineHeight, c + } + + function Bi(t, e, i, n, r, a, o) { + var s = qi(t, {rich: a, truncate: o, font: e, textAlign: i, textPadding: r}), l = s.outerWidth, + h = s.outerHeight, u = Ni(0, l, i), c = Fi(0, h, n); + return new gi(u, c, l, h) + } + + function Ni(t, e, i) { + return "right" === i ? t -= e : "center" === i && (t -= e / 2), t + } + + function Fi(t, e, i) { + return "middle" === i ? t -= e / 2 : "bottom" === i && (t -= e), t + } + + function Vi(t, e, i) { + var n = e.x, r = e.y, a = e.height, o = e.width, s = a / 2, l = "left", h = "top"; + switch (t) { + case"left": + n -= i, r += s, l = "right", h = "middle"; + break; + case"right": + n += i + o, r += s, h = "middle"; + break; + case"top": + n += o / 2, r -= i, l = "center", h = "bottom"; + break; + case"bottom": + n += o / 2, r += a + i, l = "center"; + break; + case"inside": + n += o / 2, r += s, l = "center", h = "middle"; + break; + case"insideLeft": + n += i, r += s, h = "middle"; + break; + case"insideRight": + n += o - i, r += s, l = "right", h = "middle"; + break; + case"insideTop": + n += o / 2, r += i, l = "center"; + break; + case"insideBottom": + n += o / 2, r += a - i, l = "center", h = "bottom"; + break; + case"insideTopLeft": + n += i, r += i; + break; + case"insideTopRight": + n += o - i, r += i, l = "right"; + break; + case"insideBottomLeft": + n += i, r += a - i, h = "bottom"; + break; + case"insideBottomRight": + n += o - i, r += a - i, l = "right", h = "bottom" + } + return {x: n, y: r, textAlign: l, textVerticalAlign: h} + } + + function Wi(t, e, i, n, r) { + if (!e) return ""; + var a = (t + "").split("\n"); + r = Gi(e, i, n, r); + for (var o = 0, s = a.length; s > o; o++) a[o] = Hi(a[o], r); + return a.join("\n") + } + + function Gi(t, e, i, n) { + n = o({}, n), n.font = e; + var i = D(i, "..."); + n.maxIterations = D(n.maxIterations, 2); + var r = n.minChar = D(n.minChar, 0); + n.cnCharWidth = zi("国", e); + var a = n.ascCharWidth = zi("a", e); + n.placeholder = D(n.placeholder, ""); + for (var s = t = Math.max(0, t - 1), l = 0; r > l && s >= a; l++) s -= a; + var h = zi(i); + return h > s && (i = "", h = 0), s = t - h, n.ellipsis = i, n.ellipsisWidth = h, n.contentWidth = s, n.containerWidth = t, n + } + + function Hi(t, e) { + var i = e.containerWidth, n = e.font, r = e.contentWidth; + if (!i) return ""; + var a = zi(t, n); + if (i >= a) return t; + for (var o = 0; ; o++) { + if (r >= a || o >= e.maxIterations) { + t += e.ellipsis; + break + } + var s = 0 === o ? Zi(t, r, e.ascCharWidth, e.cnCharWidth) : a > 0 ? Math.floor(t.length * r / a) : 0; + t = t.substr(0, s), a = zi(t, n) + } + return "" === t && (t = e.placeholder), t + } + + function Zi(t, e, i, n) { + for (var r = 0, a = 0, o = t.length; o > a && e > r; a++) { + var s = t.charCodeAt(a); + r += s >= 0 && 127 >= s ? i : n + } + return a + } + + function Xi(t) { + return zi("国", t) + } + + function Yi(t, e) { + return Av.measureText(t, e) + } + + function ji(t, e, i, n) { + null != t && (t += ""); + var r = Xi(e), a = t ? t.split("\n") : [], o = a.length * r, s = o; + if (i && (s += i[0] + i[2]), t && n) { + var l = n.outerHeight, h = n.outerWidth; + if (null != l && s > l) t = "", a = []; else if (null != h) for (var u = Gi(h - (i ? i[1] + i[3] : 0), e, n.ellipsis, { + minChar: n.minChar, + placeholder: n.placeholder + }), c = 0, d = a.length; d > c; c++) a[c] = Hi(a[c], u) + } + return {lines: a, height: o, outerHeight: s, lineHeight: r} + } + + function qi(t, e) { + var i = {lines: [], width: 0, height: 0}; + if (null != t && (t += ""), !t) return i; + for (var n, r = Tv.lastIndex = 0; null != (n = Tv.exec(t));) { + var a = n.index; + a > r && Ui(i, t.substring(r, a)), Ui(i, n[2], n[1]), r = Tv.lastIndex + } + r < t.length && Ui(i, t.substring(r, t.length)); + var o = i.lines, s = 0, l = 0, h = [], u = e.textPadding, c = e.truncate, d = c && c.outerWidth, + f = c && c.outerHeight; + u && (null != d && (d -= u[1] + u[3]), null != f && (f -= u[0] + u[2])); + for (var p = 0; p < o.length; p++) { + for (var g = o[p], v = 0, m = 0, y = 0; y < g.tokens.length; y++) { + var x = g.tokens[y], _ = x.styleName && e.rich[x.styleName] || {}, w = x.textPadding = _.textPadding, + b = x.font = _.font || e.font, S = x.textHeight = D(_.textHeight, Xi(b)); + if (w && (S += w[0] + w[2]), x.height = S, x.lineHeight = k(_.textLineHeight, e.textLineHeight, S), x.textAlign = _ && _.textAlign || e.textAlign, x.textVerticalAlign = _ && _.textVerticalAlign || "middle", null != f && s + x.lineHeight > f) return { + lines: [], + width: 0, + height: 0 + }; + x.textWidth = zi(x.text, b); + var M = _.textWidth, I = null == M || "auto" === M; + if ("string" == typeof M && "%" === M.charAt(M.length - 1)) x.percentWidth = M, h.push(x), M = 0; else { + if (I) { + M = x.textWidth; + var T = _.textBackgroundColor, C = T && T.image; + C && (C = Di(C), Li(C) && (M = Math.max(M, C.width * S / C.height))) + } + var A = w ? w[1] + w[3] : 0; + M += A; + var P = null != d ? d - m : null; + null != P && M > P && (!I || A > P ? (x.text = "", x.textWidth = M = 0) : (x.text = Wi(x.text, P - A, b, c.ellipsis, {minChar: c.minChar}), x.textWidth = zi(x.text, b), M = x.textWidth + A)) + } + m += x.width = M, _ && (v = Math.max(v, x.lineHeight)) + } + g.width = m, g.lineHeight = v, s += v, l = Math.max(l, m) + } + i.outerWidth = i.width = D(e.textWidth, l), i.outerHeight = i.height = D(e.textHeight, s), u && (i.outerWidth += u[1] + u[3], i.outerHeight += u[0] + u[2]); + for (var p = 0; p < h.length; p++) { + var x = h[p], L = x.percentWidth; + x.width = parseInt(L, 10) / 100 * l + } + return i + } + + function Ui(t, e, i) { + for (var n = "" === e, r = e.split("\n"), a = t.lines, o = 0; o < r.length; o++) { + var s = r[o], l = {styleName: i, text: s, isLineHolder: !s && !n}; + if (o) a.push({tokens: [l]}); else { + var h = (a[a.length - 1] || (a[0] = {tokens: []})).tokens, u = h.length; + 1 === u && h[0].isLineHolder ? h[0] = l : (s || !u || n) && h.push(l) + } + } + } + + function $i(t) { + var e = (t.fontSize || t.fontFamily) && [t.fontStyle, t.fontWeight, (t.fontSize || 12) + "px", t.fontFamily || "sans-serif"].join(" "); + return e && z(e) || t.textFont || t.font + } + + function Ki(t, e) { + var i, n, r, a, o = e.x, s = e.y, l = e.width, h = e.height, u = e.r; + 0 > l && (o += l, l = -l), 0 > h && (s += h, h = -h), "number" == typeof u ? i = n = r = a = u : u instanceof Array ? 1 === u.length ? i = n = r = a = u[0] : 2 === u.length ? (i = r = u[0], n = a = u[1]) : 3 === u.length ? (i = u[0], n = a = u[1], r = u[2]) : (i = u[0], n = u[1], r = u[2], a = u[3]) : i = n = r = a = 0; + var c; + i + n > l && (c = i + n, i *= l / c, n *= l / c), r + a > l && (c = r + a, r *= l / c, a *= l / c), n + r > h && (c = n + r, n *= h / c, r *= h / c), i + a > h && (c = i + a, i *= h / c, a *= h / c), t.moveTo(o + i, s), t.lineTo(o + l - n, s), 0 !== n && t.arc(o + l - n, s + n, n, -Math.PI / 2, 0), t.lineTo(o + l, s + h - r), 0 !== r && t.arc(o + l - r, s + h - r, r, 0, Math.PI / 2), t.lineTo(o + a, s + h), 0 !== a && t.arc(o + a, s + h - a, a, Math.PI / 2, Math.PI), t.lineTo(o, s + i), 0 !== i && t.arc(o + i, s + i, i, Math.PI, 1.5 * Math.PI) + } + + function Qi(t) { + return Ji(t), f(t.rich, Ji), t + } + + function Ji(t) { + if (t) { + t.font = $i(t); + var e = t.textAlign; + "middle" === e && (e = "center"), t.textAlign = null == e || Dv[e] ? e : "left"; + var i = t.textVerticalAlign || t.textBaseline; + "center" === i && (i = "middle"), t.textVerticalAlign = null == i || kv[i] ? i : "top"; + var n = t.textPadding; + n && (t.textPadding = L(t.textPadding)) + } + } + + function tn(t, e, i, n, r, a) { + n.rich ? nn(t, e, i, n, r) : en(t, e, i, n, r, a) + } + + function en(t, e, i, n, r, a) { + var o = a && a.style, s = o && "text" === a.type, l = n.font || Cv; + s && l === (o.font || Cv) || (e.font = l); + var h = t.__computedFont; + t.__styleFont !== l && (t.__styleFont = l, h = t.__computedFont = e.font); + var u = n.textPadding, c = t.__textCotentBlock; + (!c || t.__dirtyText) && (c = t.__textCotentBlock = ji(i, h, u, n.truncate)); + var d = c.outerHeight, f = c.lines, p = c.lineHeight, g = un(d, n, r), v = g.baseX, m = g.baseY, + y = g.textAlign || "left", x = g.textVerticalAlign; + an(e, n, r, v, m); + var _ = Fi(m, d, x), w = v, b = _, S = sn(n); + if (S || u) { + var M = zi(i, h), I = M; + u && (I += u[1] + u[3]); + var T = Ni(v, I, y); + S && ln(t, e, n, T, _, I, d), u && (w = gn(v, y, u), b += u[0]) + } + e.textAlign = y, e.textBaseline = "middle"; + for (var C = 0; C < Pv.length; C++) { + var A = Pv[C], D = A[0], k = A[1], P = n[D]; + s && P === o[D] || (e[k] = fv(e, k, P || A[2])) + } + b += p / 2; + var L = n.textStrokeWidth, O = s ? o.textStrokeWidth : null, z = !s || L !== O, + E = !s || z || n.textStroke !== o.textStroke, R = dn(n.textStroke, L), B = fn(n.textFill); + if (R && (z && (e.lineWidth = L), E && (e.strokeStyle = R)), B && (!s || n.textFill !== o.textFill || o.textBackgroundColor) && (e.fillStyle = B), 1 === f.length) R && e.strokeText(f[0], w, b), B && e.fillText(f[0], w, b); else for (var C = 0; C < f.length; C++) R && e.strokeText(f[C], w, b), B && e.fillText(f[C], w, b), b += p + } + + function nn(t, e, i, n, r) { + var a = t.__textCotentBlock; + (!a || t.__dirtyText) && (a = t.__textCotentBlock = qi(i, n)), rn(t, e, a, n, r) + } + + function rn(t, e, i, n, r) { + var a = i.width, o = i.outerWidth, s = i.outerHeight, l = n.textPadding, h = un(s, n, r), u = h.baseX, + c = h.baseY, d = h.textAlign, f = h.textVerticalAlign; + an(e, n, r, u, c); + var p = Ni(u, o, d), g = Fi(c, s, f), v = p, m = g; + l && (v += l[3], m += l[0]); + var y = v + a; + sn(n) && ln(t, e, n, p, g, o, s); + for (var x = 0; x < i.lines.length; x++) { + for (var _, w = i.lines[x], b = w.tokens, S = b.length, M = w.lineHeight, I = w.width, T = 0, C = v, A = y, D = S - 1; S > T && (_ = b[T], !_.textAlign || "left" === _.textAlign);) on(t, e, _, n, M, m, C, "left"), I -= _.width, C += _.width, T++; + for (; D >= 0 && (_ = b[D], "right" === _.textAlign);) on(t, e, _, n, M, m, A, "right"), I -= _.width, A -= _.width, D--; + for (C += (a - (C - v) - (y - A) - I) / 2; D >= T;) _ = b[T], on(t, e, _, n, M, m, C + _.width / 2, "center"), C += _.width, T++; + m += M + } + } + + function an(t, e, i, n, r) { + if (i && e.textRotation) { + var a = e.textOrigin; + "center" === a ? (n = i.width / 2 + i.x, r = i.height / 2 + i.y) : a && (n = a[0] + i.x, r = a[1] + i.y), t.translate(n, r), t.rotate(-e.textRotation), t.translate(-n, -r) + } + } + + function on(t, e, i, n, r, a, o, s) { + var l = n.rich[i.styleName] || {}; + l.text = i.text; + var h = i.textVerticalAlign, u = a + r / 2; + "top" === h ? u = a + i.height / 2 : "bottom" === h && (u = a + r - i.height / 2), !i.isLineHolder && sn(l) && ln(t, e, l, "right" === s ? o - i.width : "center" === s ? o - i.width / 2 : o, u - i.height / 2, i.width, i.height); + var c = i.textPadding; + c && (o = gn(o, s, c), u -= i.height / 2 - c[2] - i.textHeight / 2), cn(e, "shadowBlur", k(l.textShadowBlur, n.textShadowBlur, 0)), cn(e, "shadowColor", l.textShadowColor || n.textShadowColor || "transparent"), cn(e, "shadowOffsetX", k(l.textShadowOffsetX, n.textShadowOffsetX, 0)), cn(e, "shadowOffsetY", k(l.textShadowOffsetY, n.textShadowOffsetY, 0)), cn(e, "textAlign", s), cn(e, "textBaseline", "middle"), cn(e, "font", i.font || Cv); + var d = dn(l.textStroke || n.textStroke, p), f = fn(l.textFill || n.textFill), + p = D(l.textStrokeWidth, n.textStrokeWidth); + d && (cn(e, "lineWidth", p), cn(e, "strokeStyle", d), e.strokeText(i.text, o, u)), f && (cn(e, "fillStyle", f), e.fillText(i.text, o, u)) + } + + function sn(t) { + return t.textBackgroundColor || t.textBorderWidth && t.textBorderColor + } + + function ln(t, e, i, n, r, a, o) { + var s = i.textBackgroundColor, l = i.textBorderWidth, h = i.textBorderColor, u = b(s); + if (cn(e, "shadowBlur", i.textBoxShadowBlur || 0), cn(e, "shadowColor", i.textBoxShadowColor || "transparent"), cn(e, "shadowOffsetX", i.textBoxShadowOffsetX || 0), cn(e, "shadowOffsetY", i.textBoxShadowOffsetY || 0), u || l && h) { + e.beginPath(); + var c = i.textBorderRadius; + c ? Ki(e, {x: n, y: r, width: a, height: o, r: c}) : e.rect(n, r, a, o), e.closePath() + } + if (u) if (cn(e, "fillStyle", s), null != i.fillOpacity) { + var d = e.globalAlpha; + e.globalAlpha = i.fillOpacity * i.opacity, e.fill(), e.globalAlpha = d + } else e.fill(); else if (w(s)) cn(e, "fillStyle", s(i)), e.fill(); else if (S(s)) { + var f = s.image; + f = ki(f, null, t, hn, s), f && Li(f) && e.drawImage(f, n, r, a, o) + } + if (l && h) if (cn(e, "lineWidth", l), cn(e, "strokeStyle", h), null != i.strokeOpacity) { + var d = e.globalAlpha; + e.globalAlpha = i.strokeOpacity * i.opacity, e.stroke(), e.globalAlpha = d + } else e.stroke() + } + + function hn(t, e) { + e.image = t + } + + function un(t, e, i) { + var n = e.x || 0, r = e.y || 0, a = e.textAlign, o = e.textVerticalAlign; + if (i) { + var s = e.textPosition; + if (s instanceof Array) n = i.x + pn(s[0], i.width), r = i.y + pn(s[1], i.height); else { + var l = Vi(s, i, e.textDistance); + n = l.x, r = l.y, a = a || l.textAlign, o = o || l.textVerticalAlign + } + var h = e.textOffset; + h && (n += h[0], r += h[1]) + } + return {baseX: n, baseY: r, textAlign: a, textVerticalAlign: o} + } + + function cn(t, e, i) { + return t[e] = fv(t, e, i), t[e] + } + + function dn(t, e) { + return null == t || 0 >= e || "transparent" === t || "none" === t ? null : t.image || t.colorStops ? "#000" : t + } + + function fn(t) { + return null == t || "none" === t ? null : t.image || t.colorStops ? "#000" : t + } + + function pn(t, e) { + return "string" == typeof t ? t.lastIndexOf("%") >= 0 ? parseFloat(t) / 100 * e : parseFloat(t) : t + } + + function gn(t, e, i) { + return "right" === e ? t - i[1] : "center" === e ? t + i[3] / 2 - i[1] / 2 : t + i[3] + } + + function vn(t, e) { + return null != t && (t || e.textBackgroundColor || e.textBorderWidth && e.textBorderColor || e.textPadding) + } + + function mn(t) { + t = t || {}, rv.call(this, t); + for (var e in t) t.hasOwnProperty(e) && "style" !== e && (this[e] = t[e]); + this.style = new gv(t.style, this), this._rect = null, this.__clipPaths = [] + } + + function yn(t) { + mn.call(this, t) + } + + function xn(t) { + return parseInt(t, 10) + } + + function _n(t) { + return t ? t.__builtin__ ? !0 : "function" != typeof t.resize || "function" != typeof t.refresh ? !1 : !0 : !1 + } + + function wn(t, e, i) { + return Nv.copy(t.getBoundingRect()), t.transform && Nv.applyTransform(t.transform), Fv.width = e, Fv.height = i, !Nv.intersect(Fv) + } + + function bn(t, e) { + if (t == e) return !1; + if (!t || !e || t.length !== e.length) return !0; + for (var i = 0; i < t.length; i++) if (t[i] !== e[i]) return !0 + } + + function Sn(t, e) { + for (var i = 0; i < t.length; i++) { + var n = t[i]; + n.setTransform(e), e.beginPath(), n.buildPath(e, n.shape), e.clip(), n.restoreTransform(e) + } + } + + function Mn(t, e) { + var i = document.createElement("div"); + return i.style.cssText = ["position:relative", "overflow:hidden", "width:" + t + "px", "height:" + e + "px", "padding:0", "margin:0", "border-width:0"].join(";") + ";", i + } + + function In(t) { + var e = t[1][0] - t[0][0], i = t[1][1] - t[0][1]; + return Math.sqrt(e * e + i * i) + } + + function Tn(t) { + return [(t[0][0] + t[1][0]) / 2, (t[0][1] + t[1][1]) / 2] + } + + function Cn(t) { + return "mousewheel" === t && tg.browser.firefox ? "DOMMouseScroll" : t + } + + function An(t, e, i) { + var n = t._gestureMgr; + "start" === i && n.clear(); + var r = n.recognize(e, t.handler.findHover(e.zrX, e.zrY, null).target, t.dom); + if ("end" === i && n.clear(), r) { + var a = r.type; + e.gestureEvent = a, t.handler.dispatchToElement({target: r.target}, a, r.event) + } + } + + function Dn(t) { + t._touching = !0, clearTimeout(t._touchTimer), t._touchTimer = setTimeout(function () { + t._touching = !1 + }, 700) + } + + function kn(t) { + var e = t.pointerType; + return "pen" === e || "touch" === e + } + + function Pn(t) { + function e(t, e) { + return function () { + return e._touching ? void 0 : t.apply(e, arguments) + } + } + + f(Yv, function (e) { + t._handlers[e] = y(Uv[e], t) + }), f(qv, function (e) { + t._handlers[e] = y(Uv[e], t) + }), f(Xv, function (i) { + t._handlers[i] = e(Uv[i], t) + }) + } + + function Ln(t) { + function e(e, i) { + f(e, function (e) { + ge(t, Cn(e), i._handlers[e]) + }, i) + } + + bg.call(this), this.dom = t, this._touching = !1, this._touchTimer, this._gestureMgr = new Gv, this._handlers = {}, Pn(this), tg.pointerEventsSupported ? e(qv, this) : (tg.touchEventsSupported && e(Yv, this), e(Xv, this)) + } + + function On(t, e) { + var i = new em(Qp(), t, e); + return Jv[i.id] = i, i + } + + function zn(t) { + if (t) t.dispose(); else { + for (var e in Jv) Jv.hasOwnProperty(e) && Jv[e].dispose(); + Jv = {} + } + return this + } + + function En(t) { + return Jv[t] + } + + function Rn(t, e) { + Qv[t] = e + } + + function Bn(t) { + delete Jv[t] + } + + function Nn(t) { + return t instanceof Array ? t : null == t ? [] : [t] + } + + function Fn(t, e, i) { + if (t) { + t[e] = t[e] || {}, t.emphasis = t.emphasis || {}, t.emphasis[e] = t.emphasis[e] || {}; + for (var n = 0, r = i.length; r > n; n++) { + var a = i[n]; + !t.emphasis[e].hasOwnProperty(a) && t[e].hasOwnProperty(a) && (t.emphasis[e][a] = t[e][a]) + } + } + } + + function Vn(t) { + return !rm(t) || am(t) || t instanceof Date ? t : t.value + } + + function Wn(t) { + return rm(t) && !(t instanceof Array) + } + + function Gn(t, e) { + e = (e || []).slice(); + var i = p(t || [], function (t) { + return {exist: t} + }); + return nm(e, function (t, n) { + if (rm(t)) { + for (var r = 0; r < i.length; r++) if (!i[r].option && null != t.id && i[r].exist.id === t.id + "") return i[r].option = t, void (e[n] = null); + for (var r = 0; r < i.length; r++) { + var a = i[r].exist; + if (!(i[r].option || null != a.id && null != t.id || null == t.name || Xn(t) || Xn(a) || a.name !== t.name + "")) return i[r].option = t, void (e[n] = null) + } + } + }), nm(e, function (t) { + if (rm(t)) { + for (var e = 0; e < i.length; e++) { + var n = i[e].exist; + if (!i[e].option && !Xn(n) && null == t.id) { + i[e].option = t; + break + } + } + e >= i.length && i.push({option: t}) + } + }), i + } + + function Hn(t) { + var e = N(); + nm(t, function (t) { + var i = t.exist; + i && e.set(i.id, t) + }), nm(t, function (t) { + var i = t.option; + O(!i || null == i.id || !e.get(i.id) || e.get(i.id) === t, "id duplicates: " + (i && i.id)), i && null != i.id && e.set(i.id, t), !t.keyInfo && (t.keyInfo = {}) + }), nm(t, function (t, i) { + var n = t.exist, r = t.option, a = t.keyInfo; + if (rm(r)) { + if (a.name = null != r.name ? r.name + "" : n ? n.name : om + i, n) a.id = n.id; else if (null != r.id) a.id = r.id + ""; else { + var o = 0; + do a.id = "\x00" + a.name + "\x00" + o++; while (e.get(a.id)) + } + e.set(a.id, t) + } + }) + } + + function Zn(t) { + var e = t.name; + return !(!e || !e.indexOf(om)) + } + + function Xn(t) { + return rm(t) && t.id && 0 === (t.id + "").indexOf("\x00_ec_\x00") + } + + function Yn(t, e) { + return null != e.dataIndexInside ? e.dataIndexInside : null != e.dataIndex ? _(e.dataIndex) ? p(e.dataIndex, function (e) { + return t.indexOfRawIndex(e) + }) : t.indexOfRawIndex(e.dataIndex) : null != e.name ? _(e.name) ? p(e.name, function (e) { + return t.indexOfName(e) + }) : t.indexOfName(e.name) : void 0 + } + + function jn() { + var t = "__\x00ec_inner_" + lm++ + "_" + Math.random().toFixed(5); + return function (e) { + return e[t] || (e[t] = {}) + } + } + + function qn(t, e, i) { + if (b(e)) { + var n = {}; + n[e + "Index"] = 0, e = n + } + var r = i && i.defaultMainType; + !r || Un(e, r + "Index") || Un(e, r + "Id") || Un(e, r + "Name") || (e[r + "Index"] = 0); + var a = {}; + return nm(e, function (n, r) { + var n = e[r]; + if ("dataIndex" === r || "dataIndexInside" === r) return void (a[r] = n); + var o = r.match(/^(\w+)(Index|Id|Name)$/) || [], s = o[1], l = (o[2] || "").toLowerCase(); + if (!(!s || !l || null == n || "index" === l && "none" === n || i && i.includeMainTypes && h(i.includeMainTypes, s) < 0)) { + var u = {mainType: s}; + ("index" !== l || "all" !== n) && (u[l] = n); + var c = t.queryComponents(u); + a[s + "Models"] = c, a[s + "Model"] = c[0] + } + }), a + } + + function Un(t, e) { + return t && t.hasOwnProperty(e) + } + + function $n(t, e, i) { + t.setAttribute ? t.setAttribute(e, i) : t[e] = i + } + + function Kn(t, e) { + return t.getAttribute ? t.getAttribute(e) : t[e] + } + + function Qn(t) { + return "auto" === t ? tg.domSupported ? "html" : "richText" : t || "html" + } + + function Jn(t) { + var e = {main: "", sub: ""}; + return t && (t = t.split(hm), e.main = t[0] || "", e.sub = t[1] || ""), e + } + + function tr(t) { + O(/^[a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)?$/.test(t), 'componentType "' + t + '" illegal') + } + + function er(t) { + t.$constructor = t, t.extend = function (t) { + var e = this, i = function () { + t.$constructor ? t.$constructor.apply(this, arguments) : e.apply(this, arguments) + }; + return o(i.prototype, t), i.extend = this.extend, i.superCall = nr, i.superApply = rr, u(i, this), i.superClass = e, i + } + } + + function ir(t) { + var e = ["__\x00is_clz", cm++, Math.random().toFixed(3)].join("_"); + t.prototype[e] = !0, t.isInstance = function (t) { + return !(!t || !t[e]) + } + } + + function nr(t, e) { + var i = P(arguments, 2); + return this.superClass.prototype[e].apply(t, i) + } + + function rr(t, e, i) { + return this.superClass.prototype[e].apply(t, i) + } + + function ar(t, e) { + function i(t) { + var e = n[t.main]; + return e && e[um] || (e = n[t.main] = {}, e[um] = !0), e + } + + e = e || {}; + var n = {}; + if (t.registerClass = function (t, e) { + if (e) if (tr(e), e = Jn(e), e.sub) { + if (e.sub !== um) { + var r = i(e); + r[e.sub] = t + } + } else n[e.main] = t; + return t + }, t.getClass = function (t, e, i) { + var r = n[t]; + if (r && r[um] && (r = e ? r[e] : null), i && !r) throw new Error(e ? "Component " + t + "." + (e || "") + " not exists. Load it first." : t + ".type should be specified."); + return r + }, t.getClassesByMainType = function (t) { + t = Jn(t); + var e = [], i = n[t.main]; + return i && i[um] ? f(i, function (t, i) { + i !== um && e.push(t) + }) : e.push(i), e + }, t.hasClass = function (t) { + return t = Jn(t), !!n[t.main] + }, t.getAllClassMainTypes = function () { + var t = []; + return f(n, function (e, i) { + t.push(i) + }), t + }, t.hasSubTypes = function (t) { + t = Jn(t); + var e = n[t.main]; + return e && e[um] + }, t.parseClassType = Jn, e.registerWhenExtend) { + var r = t.extend; + r && (t.extend = function (e) { + var i = r.call(this, e); + return t.registerClass(i, e.type) + }) + } + return t + } + + function or(t) { + return t > -xm && xm > t + } + + function sr(t) { + return t > xm || -xm > t + } + + function lr(t, e, i, n, r) { + var a = 1 - r; + return a * a * (a * t + 3 * r * e) + r * r * (r * n + 3 * a * i) + } + + function hr(t, e, i, n, r) { + var a = 1 - r; + return 3 * (((e - t) * a + 2 * (i - e) * r) * a + (n - i) * r * r) + } + + function ur(t, e, i, n, r, a) { + var o = n + 3 * (e - i) - t, s = 3 * (i - 2 * e + t), l = 3 * (e - t), h = t - r, u = s * s - 3 * o * l, + c = s * l - 9 * o * h, d = l * l - 3 * s * h, f = 0; + if (or(u) && or(c)) if (or(s)) a[0] = 0; else { + var p = -l / s; + p >= 0 && 1 >= p && (a[f++] = p) + } else { + var g = c * c - 4 * u * d; + if (or(g)) { + var v = c / u, p = -s / o + v, m = -v / 2; + p >= 0 && 1 >= p && (a[f++] = p), m >= 0 && 1 >= m && (a[f++] = m) + } else if (g > 0) { + var y = ym(g), x = u * s + 1.5 * o * (-c + y), _ = u * s + 1.5 * o * (-c - y); + x = 0 > x ? -mm(-x, bm) : mm(x, bm), _ = 0 > _ ? -mm(-_, bm) : mm(_, bm); + var p = (-s - (x + _)) / (3 * o); + p >= 0 && 1 >= p && (a[f++] = p) + } else { + var w = (2 * u * s - 3 * o * c) / (2 * ym(u * u * u)), b = Math.acos(w) / 3, S = ym(u), M = Math.cos(b), + p = (-s - 2 * S * M) / (3 * o), m = (-s + S * (M + wm * Math.sin(b))) / (3 * o), + I = (-s + S * (M - wm * Math.sin(b))) / (3 * o); + p >= 0 && 1 >= p && (a[f++] = p), m >= 0 && 1 >= m && (a[f++] = m), I >= 0 && 1 >= I && (a[f++] = I) + } + } + return f + } + + function cr(t, e, i, n, r) { + var a = 6 * i - 12 * e + 6 * t, o = 9 * e + 3 * n - 3 * t - 9 * i, s = 3 * e - 3 * t, l = 0; + if (or(o)) { + if (sr(a)) { + var h = -s / a; + h >= 0 && 1 >= h && (r[l++] = h) + } + } else { + var u = a * a - 4 * o * s; + if (or(u)) r[0] = -a / (2 * o); else if (u > 0) { + var c = ym(u), h = (-a + c) / (2 * o), d = (-a - c) / (2 * o); + h >= 0 && 1 >= h && (r[l++] = h), d >= 0 && 1 >= d && (r[l++] = d) + } + } + return l + } + + function dr(t, e, i, n, r, a) { + var o = (e - t) * r + t, s = (i - e) * r + e, l = (n - i) * r + i, h = (s - o) * r + o, u = (l - s) * r + s, + c = (u - h) * r + h; + a[0] = t, a[1] = o, a[2] = h, a[3] = c, a[4] = c, a[5] = u, a[6] = l, a[7] = n + } + + function fr(t, e, i, n, r, a, o, s, l, h, u) { + var c, d, f, p, g, v = .005, m = 1 / 0; + Sm[0] = l, Sm[1] = h; + for (var y = 0; 1 > y; y += .05) Mm[0] = lr(t, i, r, o, y), Mm[1] = lr(e, n, a, s, y), p = xg(Sm, Mm), m > p && (c = y, m = p); + m = 1 / 0; + for (var x = 0; 32 > x && !(_m > v); x++) d = c - v, f = c + v, Mm[0] = lr(t, i, r, o, d), Mm[1] = lr(e, n, a, s, d), p = xg(Mm, Sm), d >= 0 && m > p ? (c = d, m = p) : (Im[0] = lr(t, i, r, o, f), Im[1] = lr(e, n, a, s, f), g = xg(Im, Sm), 1 >= f && m > g ? (c = f, m = g) : v *= .5); + return u && (u[0] = lr(t, i, r, o, c), u[1] = lr(e, n, a, s, c)), ym(m) + } + + function pr(t, e, i, n) { + var r = 1 - n; + return r * (r * t + 2 * n * e) + n * n * i + } + + function gr(t, e, i, n) { + return 2 * ((1 - n) * (e - t) + n * (i - e)) + } + + function vr(t, e, i, n, r) { + var a = t - 2 * e + i, o = 2 * (e - t), s = t - n, l = 0; + if (or(a)) { + if (sr(o)) { + var h = -s / o; + h >= 0 && 1 >= h && (r[l++] = h) + } + } else { + var u = o * o - 4 * a * s; + if (or(u)) { + var h = -o / (2 * a); + h >= 0 && 1 >= h && (r[l++] = h) + } else if (u > 0) { + var c = ym(u), h = (-o + c) / (2 * a), d = (-o - c) / (2 * a); + h >= 0 && 1 >= h && (r[l++] = h), d >= 0 && 1 >= d && (r[l++] = d) + } + } + return l + } + + function mr(t, e, i) { + var n = t + i - 2 * e; + return 0 === n ? .5 : (t - e) / n + } + + function yr(t, e, i, n, r) { + var a = (e - t) * n + t, o = (i - e) * n + e, s = (o - a) * n + a; + r[0] = t, r[1] = a, r[2] = s, r[3] = s, r[4] = o, r[5] = i + } + + function xr(t, e, i, n, r, a, o, s, l) { + var h, u = .005, c = 1 / 0; + Sm[0] = o, Sm[1] = s; + for (var d = 0; 1 > d; d += .05) { + Mm[0] = pr(t, i, r, d), Mm[1] = pr(e, n, a, d); + var f = xg(Sm, Mm); + c > f && (h = d, c = f) + } + c = 1 / 0; + for (var p = 0; 32 > p && !(_m > u); p++) { + var g = h - u, v = h + u; + Mm[0] = pr(t, i, r, g), Mm[1] = pr(e, n, a, g); + var f = xg(Mm, Sm); + if (g >= 0 && c > f) h = g, c = f; else { + Im[0] = pr(t, i, r, v), Im[1] = pr(e, n, a, v); + var m = xg(Im, Sm); + 1 >= v && c > m ? (h = v, c = m) : u *= .5 + } + } + return l && (l[0] = pr(t, i, r, h), l[1] = pr(e, n, a, h)), ym(c) + } + + function _r(t, e, i) { + if (0 !== t.length) { + var n, r = t[0], a = r[0], o = r[0], s = r[1], l = r[1]; + for (n = 1; n < t.length; n++) r = t[n], a = Tm(a, r[0]), o = Cm(o, r[0]), s = Tm(s, r[1]), l = Cm(l, r[1]); + e[0] = a, e[1] = s, i[0] = o, i[1] = l + } + } + + function wr(t, e, i, n, r, a) { + r[0] = Tm(t, i), r[1] = Tm(e, n), a[0] = Cm(t, i), a[1] = Cm(e, n) + } + + function br(t, e, i, n, r, a, o, s, l, h) { + var u, c = cr, d = lr, f = c(t, i, r, o, zm); + for (l[0] = 1 / 0, l[1] = 1 / 0, h[0] = -1 / 0, h[1] = -1 / 0, u = 0; f > u; u++) { + var p = d(t, i, r, o, zm[u]); + l[0] = Tm(p, l[0]), h[0] = Cm(p, h[0]) + } + for (f = c(e, n, a, s, Em), u = 0; f > u; u++) { + var g = d(e, n, a, s, Em[u]); + l[1] = Tm(g, l[1]), h[1] = Cm(g, h[1]) + } + l[0] = Tm(t, l[0]), h[0] = Cm(t, h[0]), l[0] = Tm(o, l[0]), h[0] = Cm(o, h[0]), l[1] = Tm(e, l[1]), h[1] = Cm(e, h[1]), l[1] = Tm(s, l[1]), h[1] = Cm(s, h[1]) + } + + function Sr(t, e, i, n, r, a, o, s) { + var l = mr, h = pr, u = Cm(Tm(l(t, i, r), 1), 0), c = Cm(Tm(l(e, n, a), 1), 0), d = h(t, i, r, u), + f = h(e, n, a, c); + o[0] = Tm(t, r, d), o[1] = Tm(e, a, f), s[0] = Cm(t, r, d), s[1] = Cm(e, a, f) + } + + function Mr(t, e, i, n, r, a, o, s, l) { + var h = oe, u = se, c = Math.abs(r - a); + if (1e-4 > c % km && c > 1e-4) return s[0] = t - i, s[1] = e - n, l[0] = t + i, void (l[1] = e + n); + if (Pm[0] = Dm(r) * i + t, Pm[1] = Am(r) * n + e, Lm[0] = Dm(a) * i + t, Lm[1] = Am(a) * n + e, h(s, Pm, Lm), u(l, Pm, Lm), r %= km, 0 > r && (r += km), a %= km, 0 > a && (a += km), r > a && !o ? a += km : a > r && o && (r += km), o) { + var d = a; + a = r, r = d + } + for (var f = 0; a > f; f += Math.PI / 2) f > r && (Om[0] = Dm(f) * i + t, Om[1] = Am(f) * n + e, h(s, Om, s), u(l, Om, l)) + } + + function Ir(t, e, i, n, r, a, o) { + if (0 === r) return !1; + var s = r, l = 0, h = t; + if (o > e + s && o > n + s || e - s > o && n - s > o || a > t + s && a > i + s || t - s > a && i - s > a) return !1; + if (t === i) return Math.abs(a - t) <= s / 2; + l = (e - n) / (t - i), h = (t * n - i * e) / (t - i); + var u = l * a - o + h, c = u * u / (l * l + 1); + return s / 2 * s / 2 >= c + } + + function Tr(t, e, i, n, r, a, o, s, l, h, u) { + if (0 === l) return !1; + var c = l; + if (u > e + c && u > n + c && u > a + c && u > s + c || e - c > u && n - c > u && a - c > u && s - c > u || h > t + c && h > i + c && h > r + c && h > o + c || t - c > h && i - c > h && r - c > h && o - c > h) return !1; + var d = fr(t, e, i, n, r, a, o, s, h, u, null); + return c / 2 >= d + } + + function Cr(t, e, i, n, r, a, o, s, l) { + if (0 === o) return !1; + var h = o; + if (l > e + h && l > n + h && l > a + h || e - h > l && n - h > l && a - h > l || s > t + h && s > i + h && s > r + h || t - h > s && i - h > s && r - h > s) return !1; + var u = xr(t, e, i, n, r, a, s, l, null); + return h / 2 >= u + } + + function Ar(t) { + return t %= Um, 0 > t && (t += Um), t + } + + function Dr(t, e, i, n, r, a, o, s, l) { + if (0 === o) return !1; + var h = o; + s -= t, l -= e; + var u = Math.sqrt(s * s + l * l); + if (u - h > i || i > u + h) return !1; + if (Math.abs(n - r) % $m < 1e-4) return !0; + if (a) { + var c = n; + n = Ar(r), r = Ar(c) + } else n = Ar(n), r = Ar(r); + n > r && (r += $m); + var d = Math.atan2(l, s); + return 0 > d && (d += $m), d >= n && r >= d || d + $m >= n && r >= d + $m + } + + function kr(t, e, i, n, r, a) { + if (a > e && a > n || e > a && n > a) return 0; + if (n === e) return 0; + var o = e > n ? 1 : -1, s = (a - e) / (n - e); + (1 === s || 0 === s) && (o = e > n ? .5 : -.5); + var l = s * (i - t) + t; + return l === r ? 1 / 0 : l > r ? o : 0 + } + + function Pr(t, e) { + return Math.abs(t - e) < Jm + } + + function Lr() { + var t = ey[0]; + ey[0] = ey[1], ey[1] = t + } + + function Or(t, e, i, n, r, a, o, s, l, h) { + if (h > e && h > n && h > a && h > s || e > h && n > h && a > h && s > h) return 0; + var u = ur(e, n, a, s, h, ty); + if (0 === u) return 0; + for (var c, d, f = 0, p = -1, g = 0; u > g; g++) { + var v = ty[g], m = 0 === v || 1 === v ? .5 : 1, y = lr(t, i, r, o, v); + l > y || (0 > p && (p = cr(e, n, a, s, ey), ey[1] < ey[0] && p > 1 && Lr(), c = lr(e, n, a, s, ey[0]), p > 1 && (d = lr(e, n, a, s, ey[1]))), f += 2 == p ? v < ey[0] ? e > c ? m : -m : v < ey[1] ? c > d ? m : -m : d > s ? m : -m : v < ey[0] ? e > c ? m : -m : c > s ? m : -m) + } + return f + } + + function zr(t, e, i, n, r, a, o, s) { + if (s > e && s > n && s > a || e > s && n > s && a > s) return 0; + var l = vr(e, n, a, s, ty); + if (0 === l) return 0; + var h = mr(e, n, a); + if (h >= 0 && 1 >= h) { + for (var u = 0, c = pr(e, n, a, h), d = 0; l > d; d++) { + var f = 0 === ty[d] || 1 === ty[d] ? .5 : 1, p = pr(t, i, r, ty[d]); + o > p || (u += ty[d] < h ? e > c ? f : -f : c > a ? f : -f) + } + return u + } + var f = 0 === ty[0] || 1 === ty[0] ? .5 : 1, p = pr(t, i, r, ty[0]); + return o > p ? 0 : e > a ? f : -f + } + + function Er(t, e, i, n, r, a, o, s) { + if (s -= e, s > i || -i > s) return 0; + var l = Math.sqrt(i * i - s * s); + ty[0] = -l, ty[1] = l; + var h = Math.abs(n - r); + if (1e-4 > h) return 0; + if (1e-4 > h % Qm) { + n = 0, r = Qm; + var u = a ? 1 : -1; + return o >= ty[0] + t && o <= ty[1] + t ? u : 0 + } + if (a) { + var l = n; + n = Ar(r), r = Ar(l) + } else n = Ar(n), r = Ar(r); + n > r && (r += Qm); + for (var c = 0, d = 0; 2 > d; d++) { + var f = ty[d]; + if (f + t > o) { + var p = Math.atan2(s, f), u = a ? 1 : -1; + 0 > p && (p = Qm + p), (p >= n && r >= p || p + Qm >= n && r >= p + Qm) && (p > Math.PI / 2 && p < 1.5 * Math.PI && (u = -u), c += u) + } + } + return c + } + + function Rr(t, e, i, n, r) { + for (var a = 0, o = 0, s = 0, l = 0, h = 0, u = 0; u < t.length;) { + var c = t[u++]; + switch (c === Km.M && u > 1 && (i || (a += kr(o, s, l, h, n, r))), 1 == u && (o = t[u], s = t[u + 1], l = o, h = s), c) { + case Km.M: + l = t[u++], h = t[u++], o = l, s = h; + break; + case Km.L: + if (i) { + if (Ir(o, s, t[u], t[u + 1], e, n, r)) return !0 + } else a += kr(o, s, t[u], t[u + 1], n, r) || 0; + o = t[u++], s = t[u++]; + break; + case Km.C: + if (i) { + if (Tr(o, s, t[u++], t[u++], t[u++], t[u++], t[u], t[u + 1], e, n, r)) return !0 + } else a += Or(o, s, t[u++], t[u++], t[u++], t[u++], t[u], t[u + 1], n, r) || 0; + o = t[u++], s = t[u++]; + break; + case Km.Q: + if (i) { + if (Cr(o, s, t[u++], t[u++], t[u], t[u + 1], e, n, r)) return !0 + } else a += zr(o, s, t[u++], t[u++], t[u], t[u + 1], n, r) || 0; + o = t[u++], s = t[u++]; + break; + case Km.A: + var d = t[u++], f = t[u++], p = t[u++], g = t[u++], v = t[u++], m = t[u++], + y = (t[u++], 1 - t[u++]), x = Math.cos(v) * p + d, _ = Math.sin(v) * g + f; + u > 1 ? a += kr(o, s, x, _, n, r) : (l = x, h = _); + var w = (n - d) * g / p + d; + if (i) { + if (Dr(d, f, g, v, v + m, y, e, w, r)) return !0 + } else a += Er(d, f, g, v, v + m, y, w, r); + o = Math.cos(v + m) * p + d, s = Math.sin(v + m) * g + f; + break; + case Km.R: + l = o = t[u++], h = s = t[u++]; + var b = t[u++], S = t[u++], x = l + b, _ = h + S; + if (i) { + if (Ir(l, h, x, h, e, n, r) || Ir(x, h, x, _, e, n, r) || Ir(x, _, l, _, e, n, r) || Ir(l, _, l, h, e, n, r)) return !0 + } else a += kr(x, h, x, _, n, r), a += kr(l, _, l, h, n, r); + break; + case Km.Z: + if (i) { + if (Ir(o, s, l, h, e, n, r)) return !0 + } else a += kr(o, s, l, h, n, r); + o = l, s = h + } + } + return i || Pr(s, h) || (a += kr(o, s, l, h, n, r) || 0), 0 !== a + } + + function Br(t, e, i) { + return Rr(t, 0, !1, e, i) + } + + function Nr(t, e, i, n) { + return Rr(t, e, !0, i, n) + } + + function Fr(t) { + mn.call(this, t), this.path = null + } + + function Vr(t, e, i, n, r, a, o, s, l, h, u) { + var c = l * (fy / 180), d = dy(c) * (t - i) / 2 + cy(c) * (e - n) / 2, + f = -1 * cy(c) * (t - i) / 2 + dy(c) * (e - n) / 2, p = d * d / (o * o) + f * f / (s * s); + p > 1 && (o *= uy(p), s *= uy(p)); + var g = (r === a ? -1 : 1) * uy((o * o * s * s - o * o * f * f - s * s * d * d) / (o * o * f * f + s * s * d * d)) || 0, + v = g * o * f / s, m = g * -s * d / o, y = (t + i) / 2 + dy(c) * v - cy(c) * m, + x = (e + n) / 2 + cy(c) * v + dy(c) * m, _ = vy([1, 0], [(d - v) / o, (f - m) / s]), + w = [(d - v) / o, (f - m) / s], b = [(-1 * d - v) / o, (-1 * f - m) / s], S = vy(w, b); + gy(w, b) <= -1 && (S = fy), gy(w, b) >= 1 && (S = 0), 0 === a && S > 0 && (S -= 2 * fy), 1 === a && 0 > S && (S += 2 * fy), u.addData(h, y, x, o, s, _, S, c, a) + } + + function Wr(t) { + if (!t) return new qm; + for (var e, i = 0, n = 0, r = i, a = n, o = new qm, s = qm.CMD, l = t.match(my), h = 0; h < l.length; h++) { + for (var u, c = l[h], d = c.charAt(0), f = c.match(yy) || [], p = f.length, g = 0; p > g; g++) f[g] = parseFloat(f[g]); + for (var v = 0; p > v;) { + var m, y, x, _, w, b, S, M = i, I = n; + switch (d) { + case"l": + i += f[v++], n += f[v++], u = s.L, o.addData(u, i, n); + break; + case"L": + i = f[v++], n = f[v++], u = s.L, o.addData(u, i, n); + break; + case"m": + i += f[v++], n += f[v++], u = s.M, o.addData(u, i, n), r = i, a = n, d = "l"; + break; + case"M": + i = f[v++], n = f[v++], u = s.M, o.addData(u, i, n), r = i, a = n, d = "L"; + break; + case"h": + i += f[v++], u = s.L, o.addData(u, i, n); + break; + case"H": + i = f[v++], u = s.L, o.addData(u, i, n); + break; + case"v": + n += f[v++], u = s.L, o.addData(u, i, n); + break; + case"V": + n = f[v++], u = s.L, o.addData(u, i, n); + break; + case"C": + u = s.C, o.addData(u, f[v++], f[v++], f[v++], f[v++], f[v++], f[v++]), i = f[v - 2], n = f[v - 1]; + break; + case"c": + u = s.C, o.addData(u, f[v++] + i, f[v++] + n, f[v++] + i, f[v++] + n, f[v++] + i, f[v++] + n), i += f[v - 2], n += f[v - 1]; + break; + case"S": + m = i, y = n; + var T = o.len(), C = o.data; + e === s.C && (m += i - C[T - 4], y += n - C[T - 3]), u = s.C, M = f[v++], I = f[v++], i = f[v++], n = f[v++], o.addData(u, m, y, M, I, i, n); + break; + case"s": + m = i, y = n; + var T = o.len(), C = o.data; + e === s.C && (m += i - C[T - 4], y += n - C[T - 3]), u = s.C, M = i + f[v++], I = n + f[v++], i += f[v++], n += f[v++], o.addData(u, m, y, M, I, i, n); + break; + case"Q": + M = f[v++], I = f[v++], i = f[v++], n = f[v++], u = s.Q, o.addData(u, M, I, i, n); + break; + case"q": + M = f[v++] + i, I = f[v++] + n, i += f[v++], n += f[v++], u = s.Q, o.addData(u, M, I, i, n); + break; + case"T": + m = i, y = n; + var T = o.len(), C = o.data; + e === s.Q && (m += i - C[T - 4], y += n - C[T - 3]), i = f[v++], n = f[v++], u = s.Q, o.addData(u, m, y, i, n); + break; + case"t": + m = i, y = n; + var T = o.len(), C = o.data; + e === s.Q && (m += i - C[T - 4], y += n - C[T - 3]), i += f[v++], n += f[v++], u = s.Q, o.addData(u, m, y, i, n); + break; + case"A": + x = f[v++], _ = f[v++], w = f[v++], b = f[v++], S = f[v++], M = i, I = n, i = f[v++], n = f[v++], u = s.A, Vr(M, I, i, n, b, S, x, _, w, u, o); + break; + case"a": + x = f[v++], _ = f[v++], w = f[v++], b = f[v++], S = f[v++], M = i, I = n, i += f[v++], n += f[v++], u = s.A, Vr(M, I, i, n, b, S, x, _, w, u, o) + } + } + ("z" === d || "Z" === d) && (u = s.Z, o.addData(u), i = r, n = a), e = u + } + return o.toStatic(), o + } + + function Gr(t, e) { + var i = Wr(t); + return e = e || {}, e.buildPath = function (t) { + if (t.setData) { + t.setData(i.data); + var e = t.getContext(); + e && t.rebuildPath(e) + } else { + var e = t; + i.rebuildPath(e) + } + }, e.applyTransform = function (t) { + hy(i, t), this.dirty(!0) + }, e + } + + function Hr(t, e) { + return new Fr(Gr(t, e)) + } + + function Zr(t, e) { + return Fr.extend(Gr(t, e)) + } + + function Xr(t, e) { + for (var i = [], n = t.length, r = 0; n > r; r++) { + var a = t[r]; + a.path || a.createPathProxy(), a.__dirtyPath && a.buildPath(a.path, a.shape, !0), i.push(a.path) + } + var o = new Fr(e); + return o.createPathProxy(), o.buildPath = function (t) { + t.appendPath(i); + var e = t.getContext(); + e && t.rebuildPath(e) + }, o + } + + function Yr(t, e, i, n, r, a, o) { + var s = .5 * (i - t), l = .5 * (n - e); + return (2 * (e - i) + s + l) * o + (-3 * (e - i) - 2 * s - l) * a + s * r + e + } + + function jr(t, e, i) { + var n = e.points, r = e.smooth; + if (n && n.length >= 2) { + if (r && "spline" !== r) { + var a = Ty(n, r, i, e.smoothConstraint); + t.moveTo(n[0][0], n[0][1]); + for (var o = n.length, s = 0; (i ? o : o - 1) > s; s++) { + var l = a[2 * s], h = a[2 * s + 1], u = n[(s + 1) % o]; + t.bezierCurveTo(l[0], l[1], h[0], h[1], u[0], u[1]) + } + } else { + "spline" === r && (n = Iy(n, i)), t.moveTo(n[0][0], n[0][1]); + for (var s = 1, c = n.length; c > s; s++) t.lineTo(n[s][0], n[s][1]) + } + i && t.closePath() + } + } + + function qr(t, e, i) { + var n = t.cpx2, r = t.cpy2; + return null === n || null === r ? [(i ? hr : lr)(t.x1, t.cpx1, t.cpx2, t.x2, e), (i ? hr : lr)(t.y1, t.cpy1, t.cpy2, t.y2, e)] : [(i ? gr : pr)(t.x1, t.cpx1, t.x2, e), (i ? gr : pr)(t.y1, t.cpy1, t.y2, e)] + } + + function Ur(t) { + mn.call(this, t), this._displayables = [], this._temporaryDisplayables = [], this._cursor = 0, this.notClear = !0 + } + + function $r(t) { + return Fr.extend(t) + } + + function Kr(t, e) { + return Zr(t, e) + } + + function Qr(t, e, i, n) { + var r = Hr(t, e); + return i && ("center" === n && (i = ta(i, r.getBoundingRect())), ea(r, i)), r + } + + function Jr(t, e, i) { + var n = new yn({ + style: {image: t, x: e.x, y: e.y, width: e.width, height: e.height}, onload: function (t) { + if ("center" === i) { + var r = {width: t.width, height: t.height}; + n.setStyle(ta(e, r)) + } + } + }); + return n + } + + function ta(t, e) { + var i, n = e.width / e.height, r = t.height * n; + r <= t.width ? i = t.height : (r = t.width, i = r / n); + var a = t.x + t.width / 2, o = t.y + t.height / 2; + return {x: a - r / 2, y: o - i / 2, width: r, height: i} + } + + function ea(t, e) { + if (t.applyTransform) { + var i = t.getBoundingRect(), n = i.calculateTransform(e); + t.applyTransform(n) + } + } + + function ia(t) { + var e = t.shape, i = t.style.lineWidth; + return Fy(2 * e.x1) === Fy(2 * e.x2) && (e.x1 = e.x2 = ra(e.x1, i, !0)), Fy(2 * e.y1) === Fy(2 * e.y2) && (e.y1 = e.y2 = ra(e.y1, i, !0)), t + } + + function na(t) { + var e = t.shape, i = t.style.lineWidth, n = e.x, r = e.y, a = e.width, o = e.height; + return e.x = ra(e.x, i, !0), e.y = ra(e.y, i, !0), e.width = Math.max(ra(n + a, i, !1) - e.x, 0 === a ? 0 : 1), e.height = Math.max(ra(r + o, i, !1) - e.y, 0 === o ? 0 : 1), t + } + + function ra(t, e, i) { + var n = Fy(2 * t); + return (n + Fy(e)) % 2 === 0 ? n / 2 : (n + (i ? 1 : -1)) / 2 + } + + function aa(t) { + return null != t && "none" !== t + } + + function oa(t) { + if ("string" != typeof t) return t; + var e = Zy.get(t); + return e || (e = Ye(t, -.1), 1e4 > Xy && (Zy.set(t, e), Xy++)), e + } + + function sa(t) { + if (t.__hoverStlDirty) { + t.__hoverStlDirty = !1; + var e = t.__hoverStl; + if (!e) return void (t.__normalStl = null); + var i = t.__normalStl = {}, n = t.style; + for (var r in e) null != e[r] && (i[r] = n[r]); + i.fill = n.fill, i.stroke = n.stroke + } + } + + function la(t) { + var e = t.__hoverStl; + if (e && !t.__highlighted) { + var i = t.useHoverLayer; + t.__highlighted = i ? "layer" : "plain"; + var n = t.__zr; + if (n || !i) { + var r = t, a = t.style; + i && (r = n.addHover(t), a = r.style), Da(a), i || sa(r), a.extendFrom(e), ha(a, e, "fill"), ha(a, e, "stroke"), Aa(a), i || (t.dirty(!1), t.z2 += 1) + } + } + } + + function ha(t, e, i) { + !aa(e[i]) && aa(t[i]) && (t[i] = oa(t[i])) + } + + function ua(t) { + t.__highlighted && (ca(t), t.__highlighted = !1) + } + + function ca(t) { + var e = t.__highlighted; + if ("layer" === e) t.__zr && t.__zr.removeHover(t); else if (e) { + var i = t.style, n = t.__normalStl; + n && (Da(i), t.setStyle(n), Aa(i), t.z2 -= 1) + } + } + + function da(t, e) { + t.isGroup ? t.traverse(function (t) { + !t.isGroup && e(t) + }) : e(t) + } + + function fa(t, e) { + e = t.__hoverStl = e !== !1 && (e || {}), t.__hoverStlDirty = !0, t.__highlighted && (ua(t), la(t)) + } + + function pa(t) { + return t && t.__isEmphasisEntered + } + + function ga(t) { + this.__hoverSilentOnTouch && t.zrByTouch || !this.__isEmphasisEntered && da(this, la) + } + + function va(t) { + this.__hoverSilentOnTouch && t.zrByTouch || !this.__isEmphasisEntered && da(this, ua) + } + + function ma() { + this.__isEmphasisEntered = !0, da(this, la) + } + + function ya() { + this.__isEmphasisEntered = !1, da(this, ua) + } + + function xa(t, e, i) { + t.isGroup ? t.traverse(function (t) { + !t.isGroup && fa(t, t.hoverStyle || e) + }) : fa(t, t.hoverStyle || e), _a(t, i) + } + + function _a(t, e) { + var i = e === !1; + if (t.__hoverSilentOnTouch = null != e && e.hoverSilentOnTouch, !i || t.__hoverStyleTrigger) { + var n = i ? "off" : "on"; + t[n]("mouseover", ga)[n]("mouseout", va), t[n]("emphasis", ma)[n]("normal", ya), t.__hoverStyleTrigger = !i + } + } + + function wa(t, e, i, n, r, a, o) { + r = r || Gy; + var s, l = r.labelFetcher, h = r.labelDataIndex, u = r.labelDimIndex, c = i.getShallow("show"), + d = n.getShallow("show"); + (c || d) && (l && (s = l.getFormattedLabel(h, "normal", null, u)), null == s && (s = w(r.defaultText) ? r.defaultText(h, r) : r.defaultText)); + var f = c ? s : null, p = d ? D(l ? l.getFormattedLabel(h, "emphasis", null, u) : null, s) : null; + (null != f || null != p) && (ba(t, i, a, r), ba(e, n, o, r, !0)), t.text = f, e.text = p + } + + function ba(t, e, i, n, r) { + return Ma(t, e, n, r), i && o(t, i), t + } + + function Sa(t, e, i) { + var n, r = {isRectText: !0}; + i === !1 ? n = !0 : r.autoColor = i, Ma(t, e, r, n) + } + + function Ma(t, e, i, n) { + if (i = i || Gy, i.isRectText) { + var r = e.getShallow("position") || (n ? null : "inside"); + "outside" === r && (r = "top"), t.textPosition = r, t.textOffset = e.getShallow("offset"); + var a = e.getShallow("rotate"); + null != a && (a *= Math.PI / 180), t.textRotation = a, t.textDistance = D(e.getShallow("distance"), n ? null : 5) + } + var o, s = e.ecModel, l = s && s.option.textStyle, h = Ia(e); + if (h) { + o = {}; + for (var u in h) if (h.hasOwnProperty(u)) { + var c = e.getModel(["rich", u]); + Ta(o[u] = {}, c, l, i, n) + } + } + return t.rich = o, Ta(t, e, l, i, n, !0), i.forceRich && !i.textStyle && (i.textStyle = {}), t + } + + function Ia(t) { + for (var e; t && t !== t.ecModel;) { + var i = (t.option || Gy).rich; + if (i) { + e = e || {}; + for (var n in i) i.hasOwnProperty(n) && (e[n] = 1) + } + t = t.parentModel + } + return e + } + + function Ta(t, e, i, n, r, a) { + i = !r && i || Gy, t.textFill = Ca(e.getShallow("color"), n) || i.color, t.textStroke = Ca(e.getShallow("textBorderColor"), n) || i.textBorderColor, t.textStrokeWidth = D(e.getShallow("textBorderWidth"), i.textBorderWidth), t.insideRawTextPosition = t.textPosition, r || (a && (t.insideRollbackOpt = n, Aa(t)), null == t.textFill && (t.textFill = n.autoColor)), t.fontStyle = e.getShallow("fontStyle") || i.fontStyle, t.fontWeight = e.getShallow("fontWeight") || i.fontWeight, t.fontSize = e.getShallow("fontSize") || i.fontSize, t.fontFamily = e.getShallow("fontFamily") || i.fontFamily, t.textAlign = e.getShallow("align"), t.textVerticalAlign = e.getShallow("verticalAlign") || e.getShallow("baseline"), t.textLineHeight = e.getShallow("lineHeight"), t.textWidth = e.getShallow("width"), t.textHeight = e.getShallow("height"), t.textTag = e.getShallow("tag"), a && n.disableBox || (t.textBackgroundColor = Ca(e.getShallow("backgroundColor"), n), t.textPadding = e.getShallow("padding"), t.textBorderColor = Ca(e.getShallow("borderColor"), n), t.textBorderWidth = e.getShallow("borderWidth"), t.textBorderRadius = e.getShallow("borderRadius"), t.textBoxShadowColor = e.getShallow("shadowColor"), t.textBoxShadowBlur = e.getShallow("shadowBlur"), t.textBoxShadowOffsetX = e.getShallow("shadowOffsetX"), t.textBoxShadowOffsetY = e.getShallow("shadowOffsetY")), t.textShadowColor = e.getShallow("textShadowColor") || i.textShadowColor, t.textShadowBlur = e.getShallow("textShadowBlur") || i.textShadowBlur, t.textShadowOffsetX = e.getShallow("textShadowOffsetX") || i.textShadowOffsetX, t.textShadowOffsetY = e.getShallow("textShadowOffsetY") || i.textShadowOffsetY + } + + function Ca(t, e) { + return "auto" !== t ? t : e && e.autoColor ? e.autoColor : null + } + + function Aa(t) { + var e = t.insideRollbackOpt; + if (e && null == t.textFill) { + var i, n = e.useInsideStyle, r = t.insideRawTextPosition, a = e.autoColor; + n !== !1 && (n === !0 || e.isRectText && r && "string" == typeof r && r.indexOf("inside") >= 0) ? (i = { + textFill: null, + textStroke: t.textStroke, + textStrokeWidth: t.textStrokeWidth + }, t.textFill = "#fff", null == t.textStroke && (t.textStroke = a, null == t.textStrokeWidth && (t.textStrokeWidth = 2))) : null != a && (i = {textFill: null}, t.textFill = a), i && (t.insideRollback = i) + } + } + + function Da(t) { + var e = t.insideRollback; + e && (t.textFill = e.textFill, t.textStroke = e.textStroke, t.textStrokeWidth = e.textStrokeWidth, t.insideRollback = null) + } + + function ka(t, e) { + var i = e || e.getModel("textStyle"); + return z([t.fontStyle || i && i.getShallow("fontStyle") || "", t.fontWeight || i && i.getShallow("fontWeight") || "", (t.fontSize || i && i.getShallow("fontSize") || 12) + "px", t.fontFamily || i && i.getShallow("fontFamily") || "sans-serif"].join(" ")) + } + + function Pa(t, e, i, n, r, a) { + "function" == typeof r && (a = r, r = null); + var o = n && n.isAnimationEnabled(); + if (o) { + var s = t ? "Update" : "", l = n.getShallow("animationDuration" + s), + h = n.getShallow("animationEasing" + s), u = n.getShallow("animationDelay" + s); + "function" == typeof u && (u = u(r, n.getAnimationDelayParams ? n.getAnimationDelayParams(e, r) : null)), "function" == typeof l && (l = l(r)), l > 0 ? e.animateTo(i, l, u || 0, h, a, !!a) : (e.stopAnimation(), e.attr(i), a && a()) + } else e.stopAnimation(), e.attr(i), a && a() + } + + function La(t, e, i, n, r) { + Pa(!0, t, e, i, n, r) + } + + function Oa(t, e, i, n, r) { + Pa(!1, t, e, i, n, r) + } + + function za(t, e) { + for (var i = Se([]); t && t !== e;) Ie(i, t.getLocalTransform(), i), t = t.parent; + return i + } + + function Ea(t, e, i) { + return e && !d(e) && (e = Og.getLocalTransform(e)), i && (e = De([], e)), ae([], t, e) + } + + function Ra(t, e, i) { + var n = 0 === e[4] || 0 === e[5] || 0 === e[0] ? 1 : Math.abs(2 * e[4] / e[0]), + r = 0 === e[4] || 0 === e[5] || 0 === e[2] ? 1 : Math.abs(2 * e[4] / e[2]), + a = ["left" === t ? -n : "right" === t ? n : 0, "top" === t ? -r : "bottom" === t ? r : 0]; + return a = Ea(a, e, i), Math.abs(a[0]) > Math.abs(a[1]) ? a[0] > 0 ? "right" : "left" : a[1] > 0 ? "bottom" : "top" + } + + function Ba(t, e, i) { + function n(t) { + var e = {}; + return t.traverse(function (t) { + !t.isGroup && t.anid && (e[t.anid] = t) + }), e + } + + function r(t) { + var e = {position: H(t.position), rotation: t.rotation}; + return t.shape && (e.shape = o({}, t.shape)), e + } + + if (t && e) { + var a = n(t); + e.traverse(function (t) { + if (!t.isGroup && t.anid) { + var e = a[t.anid]; + if (e) { + var n = r(t); + t.attr(r(e)), La(t, n, i, t.dataIndex) + } + } + }) + } + } + + function Na(t, e) { + return p(t, function (t) { + var i = t[0]; + i = Vy(i, e.x), i = Wy(i, e.x + e.width); + var n = t[1]; + return n = Vy(n, e.y), n = Wy(n, e.y + e.height), [i, n] + }) + } + + function Fa(t, e) { + var i = Vy(t.x, e.x), n = Wy(t.x + t.width, e.x + e.width), r = Vy(t.y, e.y), + a = Wy(t.y + t.height, e.y + e.height); + return n >= i && a >= r ? {x: i, y: r, width: n - i, height: a - r} : void 0 + } + + function Va(t, e, i) { + e = o({rectHover: !0}, e); + var n = e.style = {strokeNoScale: !0}; + return i = i || { + x: -1, + y: -1, + width: 2, + height: 2 + }, t ? 0 === t.indexOf("image://") ? (n.image = t.slice(8), s(n, i), new yn(e)) : Qr(t.replace("path://", ""), e, i, "center") : void 0 + } + + function Wa(t, e, i) { + this.parentModel = e, this.ecModel = i, this.option = t + } + + function Ga(t, e, i) { + for (var n = 0; n < e.length && (!e[n] || (t = t && "object" == typeof t ? t[e[n]] : null, null != t)); n++) ; + return null == t && i && (t = i.get(e)), t + } + + function Ha(t, e) { + var i = Qy(t).getParent; + return i ? i.call(t, e) : t.parentModel + } + + function Za(t) { + return [t || "", Jy++, Math.random().toFixed(5)].join("_") + } + + function Xa(t) { + var e = {}; + return t.registerSubTypeDefaulter = function (t, i) { + t = Jn(t), e[t.main] = i + }, t.determineSubType = function (i, n) { + var r = n.type; + if (!r) { + var a = Jn(i).main; + t.hasSubTypes(i) && e[a] && (r = e[a](n)) + } + return r + }, t + } + + function Ya(t, e) { + function i(t) { + var i = {}, a = []; + return f(t, function (o) { + var s = n(i, o), l = s.originalDeps = e(o), u = r(l, t); + s.entryCount = u.length, 0 === s.entryCount && a.push(o), f(u, function (t) { + h(s.predecessor, t) < 0 && s.predecessor.push(t); + var e = n(i, t); + h(e.successor, t) < 0 && e.successor.push(o) + }) + }), {graph: i, noEntryList: a} + } + + function n(t, e) { + return t[e] || (t[e] = {predecessor: [], successor: []}), t[e] + } + + function r(t, e) { + var i = []; + return f(t, function (t) { + h(e, t) >= 0 && i.push(t) + }), i + } + + t.topologicalTravel = function (t, e, n, r) { + function a(t) { + l[t].entryCount--, 0 === l[t].entryCount && h.push(t) + } + + function o(t) { + u[t] = !0, a(t) + } + + if (t.length) { + var s = i(e), l = s.graph, h = s.noEntryList, u = {}; + for (f(t, function (t) { + u[t] = !0 + }); h.length;) { + var c = h.pop(), d = l[c], p = !!u[c]; + p && (n.call(r, c, d.originalDeps.slice()), delete u[c]), f(d.successor, p ? o : a) + } + f(u, function () { + throw new Error("Circle dependency may exists") + }) + } + } + } + + function ja(t) { + return t.replace(/^\s+/, "").replace(/\s+$/, "") + } + + function qa(t, e, i, n) { + var r = e[1] - e[0], a = i[1] - i[0]; + if (0 === r) return 0 === a ? i[0] : (i[0] + i[1]) / 2; + if (n) if (r > 0) { + if (t <= e[0]) return i[0]; + if (t >= e[1]) return i[1] + } else { + if (t >= e[0]) return i[0]; + if (t <= e[1]) return i[1] + } else { + if (t === e[0]) return i[0]; + if (t === e[1]) return i[1] + } + return (t - e[0]) / r * a + i[0] + } + + function Ua(t, e) { + switch (t) { + case"center": + case"middle": + t = "50%"; + break; + case"left": + case"top": + t = "0%"; + break; + case"right": + case"bottom": + t = "100%" + } + return "string" == typeof t ? ja(t).match(/%$/) ? parseFloat(t) / 100 * e : parseFloat(t) : null == t ? 0 / 0 : +t + } + + function $a(t, e, i) { + return null == e && (e = 10), e = Math.min(Math.max(0, e), 20), t = (+t).toFixed(e), i ? t : +t + } + + function Ka(t) { + return t.sort(function (t, e) { + return t - e + }), t + } + + function Qa(t) { + if (t = +t, isNaN(t)) return 0; + for (var e = 1, i = 0; Math.round(t * e) / e !== t;) e *= 10, i++; + return i + } + + function Ja(t) { + var e = t.toString(), i = e.indexOf("e"); + if (i > 0) { + var n = +e.slice(i + 1); + return 0 > n ? -n : 0 + } + var r = e.indexOf("."); + return 0 > r ? 0 : e.length - 1 - r + } + + function to(t, e) { + var i = Math.log, n = Math.LN10, r = Math.floor(i(t[1] - t[0]) / n), + a = Math.round(i(Math.abs(e[1] - e[0])) / n), o = Math.min(Math.max(-r + a, 0), 20); + return isFinite(o) ? o : 20 + } + + function eo(t, e, i) { + if (!t[e]) return 0; + var n = g(t, function (t, e) { + return t + (isNaN(e) ? 0 : e) + }, 0); + if (0 === n) return 0; + for (var r = Math.pow(10, i), a = p(t, function (t) { + return (isNaN(t) ? 0 : t) / n * r * 100 + }), o = 100 * r, s = p(a, function (t) { + return Math.floor(t) + }), l = g(s, function (t, e) { + return t + e + }, 0), h = p(a, function (t, e) { + return t - s[e] + }); o > l;) { + for (var u = Number.NEGATIVE_INFINITY, c = null, d = 0, f = h.length; f > d; ++d) h[d] > u && (u = h[d], c = d); + ++s[c], h[c] = 0, ++l + } + return s[e] / r + } + + function io(t) { + var e = 2 * Math.PI; + return (t % e + e) % e + } + + function no(t) { + return t > -tx && tx > t + } + + function ro(t) { + if (t instanceof Date) return t; + if ("string" == typeof t) { + var e = ix.exec(t); + if (!e) return new Date(0 / 0); + if (e[8]) { + var i = +e[4] || 0; + return "Z" !== e[8].toUpperCase() && (i -= e[8].slice(0, 3)), new Date(Date.UTC(+e[1], +(e[2] || 1) - 1, +e[3] || 1, i, +(e[5] || 0), +e[6] || 0, +e[7] || 0)) + } + return new Date(+e[1], +(e[2] || 1) - 1, +e[3] || 1, +e[4] || 0, +(e[5] || 0), +e[6] || 0, +e[7] || 0) + } + return new Date(null == t ? 0 / 0 : Math.round(t)) + } + + function ao(t) { + return Math.pow(10, oo(t)) + } + + function oo(t) { + return Math.floor(Math.log(t) / Math.LN10) + } + + function so(t, e) { + var i, n = oo(t), r = Math.pow(10, n), a = t / r; + return i = e ? 1.5 > a ? 1 : 2.5 > a ? 2 : 4 > a ? 3 : 7 > a ? 5 : 10 : 1 > a ? 1 : 2 > a ? 2 : 3 > a ? 3 : 5 > a ? 5 : 10, t = i * r, n >= -20 ? +t.toFixed(0 > n ? -n : 0) : t + } + + function lo(t, e) { + var i = (t.length - 1) * e + 1, n = Math.floor(i), r = +t[n - 1], a = i - n; + return a ? r + a * (t[n] - r) : r + } + + function ho(t) { + function e(t, i, n) { + return t.interval[n] < i.interval[n] || t.interval[n] === i.interval[n] && (t.close[n] - i.close[n] === (n ? -1 : 1) || !n && e(t, i, 1)) + } + + t.sort(function (t, i) { + return e(t, i, 0) ? -1 : 1 + }); + for (var i = -1 / 0, n = 1, r = 0; r < t.length;) { + for (var a = t[r].interval, o = t[r].close, s = 0; 2 > s; s++) a[s] <= i && (a[s] = i, o[s] = s ? 1 : 1 - n), i = a[s], n = o[s]; + a[0] === a[1] && o[0] * o[1] !== 1 ? t.splice(r, 1) : r++ + } + return t + } + + function uo(t) { + return t - parseFloat(t) >= 0 + } + + function co(t) { + return isNaN(t) ? "-" : (t = (t + "").split("."), t[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g, "$1,") + (t.length > 1 ? "." + t[1] : "")) + } + + function fo(t, e) { + return t = (t || "").toLowerCase().replace(/-(.)/g, function (t, e) { + return e.toUpperCase() + }), e && t && (t = t.charAt(0).toUpperCase() + t.slice(1)), t + } + + function po(t) { + return null == t ? "" : (t + "").replace(ax, function (t, e) { + return ox[e] + }) + } + + function go(t, e, i) { + _(e) || (e = [e]); + var n = e.length; + if (!n) return ""; + for (var r = e[0].$vars || [], a = 0; a < r.length; a++) { + var o = sx[a]; + t = t.replace(lx(o), lx(o, 0)) + } + for (var s = 0; n > s; s++) for (var l = 0; l < r.length; l++) { + var h = e[s][r[l]]; + t = t.replace(lx(sx[l], s), i ? po(h) : h) + } + return t + } + + function vo(t, e, i) { + return f(e, function (e, n) { + t = t.replace("{" + n + "}", i ? po(e) : e) + }), t + } + + function mo(t, e) { + t = b(t) ? {color: t, extraCssText: e} : t || {}; + var i = t.color, n = t.type, e = t.extraCssText, r = t.renderMode || "html", a = t.markerId || "X"; + return i ? "html" === r ? "subItem" === n ? '' : '' : { + renderMode: r, + content: "{marker" + a + "|} ", + style: {color: i} + } : "" + } + + function yo(t, e) { + return t += "", "0000".substr(0, e - t.length) + t + } + + function xo(t, e, i) { + ("week" === t || "month" === t || "quarter" === t || "half-year" === t || "year" === t) && (t = "MM-dd\nyyyy"); + var n = ro(e), r = i ? "UTC" : "", a = n["get" + r + "FullYear"](), o = n["get" + r + "Month"]() + 1, + s = n["get" + r + "Date"](), l = n["get" + r + "Hours"](), h = n["get" + r + "Minutes"](), + u = n["get" + r + "Seconds"](), c = n["get" + r + "Milliseconds"](); + return t = t.replace("MM", yo(o, 2)).replace("M", o).replace("yyyy", a).replace("yy", a % 100).replace("dd", yo(s, 2)).replace("d", s).replace("hh", yo(l, 2)).replace("h", l).replace("mm", yo(h, 2)).replace("m", h).replace("ss", yo(u, 2)).replace("s", u).replace("SSS", yo(c, 3)) + } + + function _o(t) { + return t ? t.charAt(0).toUpperCase() + t.substr(1) : t + } + + function wo(t, e, i, n, r) { + var a = 0, o = 0; + null == n && (n = 1 / 0), null == r && (r = 1 / 0); + var s = 0; + e.eachChild(function (l, h) { + var u, c, d = l.position, f = l.getBoundingRect(), p = e.childAt(h + 1), g = p && p.getBoundingRect(); + if ("horizontal" === t) { + var v = f.width + (g ? -g.x + f.x : 0); + u = a + v, u > n || l.newline ? (a = 0, u = v, o += s + i, s = f.height) : s = Math.max(s, f.height) + } else { + var m = f.height + (g ? -g.y + f.y : 0); + c = o + m, c > r || l.newline ? (a += s + i, o = 0, c = m, s = f.width) : s = Math.max(s, f.width) + } + l.newline || (d[0] = a, d[1] = o, "horizontal" === t ? a = u + i : o = c + i) + }) + } + + function bo(t, e, i) { + i = rx(i || 0); + var n = e.width, r = e.height, a = Ua(t.left, n), o = Ua(t.top, r), s = Ua(t.right, n), l = Ua(t.bottom, r), + h = Ua(t.width, n), u = Ua(t.height, r), c = i[2] + i[0], d = i[1] + i[3], f = t.aspect; + switch (isNaN(h) && (h = n - s - d - a), isNaN(u) && (u = r - l - c - o), null != f && (isNaN(h) && isNaN(u) && (f > n / r ? h = .8 * n : u = .8 * r), isNaN(h) && (h = f * u), isNaN(u) && (u = h / f)), isNaN(a) && (a = n - s - h - d), isNaN(o) && (o = r - l - u - c), t.left || t.right) { + case"center": + a = n / 2 - h / 2 - i[3]; + break; + case"right": + a = n - h - d + } + switch (t.top || t.bottom) { + case"middle": + case"center": + o = r / 2 - u / 2 - i[0]; + break; + case"bottom": + o = r - u - c + } + a = a || 0, o = o || 0, isNaN(h) && (h = n - d - a - (s || 0)), isNaN(u) && (u = r - c - o - (l || 0)); + var p = new gi(a + i[3], o + i[0], h, u); + return p.margin = i, p + } + + function So(t, e, i) { + function n(i, n) { + var o = {}, l = 0, h = {}, u = 0, c = 2; + if (dx(i, function (e) { + h[e] = t[e] + }), dx(i, function (t) { + r(e, t) && (o[t] = h[t] = e[t]), a(o, t) && l++, a(h, t) && u++ + }), s[n]) return a(e, i[1]) ? h[i[2]] = null : a(e, i[2]) && (h[i[1]] = null), h; + if (u !== c && l) { + if (l >= c) return o; + for (var d = 0; d < i.length; d++) { + var f = i[d]; + if (!r(o, f) && r(t, f)) { + o[f] = t[f]; + break + } + } + return o + } + return h + } + + function r(t, e) { + return t.hasOwnProperty(e) + } + + function a(t, e) { + return null != t[e] && "auto" !== t[e] + } + + function o(t, e, i) { + dx(t, function (t) { + e[t] = i[t] + }) + } + + !S(i) && (i = {}); + var s = i.ignoreSize; + !_(s) && (s = [s, s]); + var l = n(px[0], 0), h = n(px[1], 1); + o(px[0], t, l), o(px[1], t, h) + } + + function Mo(t) { + return Io({}, t) + } + + function Io(t, e) { + return e && t && dx(fx, function (i) { + e.hasOwnProperty(i) && (t[i] = e[i]) + }), t + } + + function To(t) { + var e = []; + return f(yx.getClassesByMainType(t), function (t) { + e = e.concat(t.prototype.dependencies || []) + }), e = p(e, function (t) { + return Jn(t).main + }), "dataset" !== t && h(e, "dataset") <= 0 && e.unshift("dataset"), e + } + + function Co(t, e) { + for (var i = t.length, n = 0; i > n; n++) if (t[n].length > e) return t[n]; + return t[i - 1] + } + + function Ao(t) { + var e = t.get("coordinateSystem"), i = {coordSysName: e, coordSysDims: [], axisMap: N(), categoryAxisMap: N()}, + n = Mx[e]; + return n ? (n(t, i, i.axisMap, i.categoryAxisMap), i) : void 0 + } + + function Do(t) { + return "category" === t.get("type") + } + + function ko(t) { + this.fromDataset = t.fromDataset, this.data = t.data || (t.sourceFormat === Ax ? {} : []), this.sourceFormat = t.sourceFormat || Dx, this.seriesLayoutBy = t.seriesLayoutBy || Px, this.dimensionsDefine = t.dimensionsDefine, this.encodeDefine = t.encodeDefine && N(t.encodeDefine), this.startIndex = t.startIndex || 0, this.dimensionsDetectCount = t.dimensionsDetectCount + } + + function Po(t) { + var e = t.option.source, i = Dx; + if (I(e)) i = kx; else if (_(e)) { + 0 === e.length && (i = Tx); + for (var n = 0, r = e.length; r > n; n++) { + var a = e[n]; + if (null != a) { + if (_(a)) { + i = Tx; + break + } + if (S(a)) { + i = Cx; + break + } + } + } + } else if (S(e)) { + for (var o in e) if (e.hasOwnProperty(o) && d(e[o])) { + i = Ax; + break + } + } else if (null != e) throw new Error("Invalid data"); + Ox(t).sourceFormat = i + } + + function Lo(t) { + return Ox(t).source + } + + function Oo(t) { + Ox(t).datasetMap = N() + } + + function zo(t) { + var e = t.option, i = e.data, n = I(i) ? kx : Ix, r = !1, a = e.seriesLayoutBy, o = e.sourceHeader, + s = e.dimensions, l = Vo(t); + if (l) { + var h = l.option; + i = h.source, n = Ox(l).sourceFormat, r = !0, a = a || h.seriesLayoutBy, null == o && (o = h.sourceHeader), s = s || h.dimensions + } + var u = Eo(i, n, a, o, s), c = e.encode; + !c && l && (c = Fo(t, l, i, n, a, u)), Ox(t).source = new ko({ + data: i, + fromDataset: r, + seriesLayoutBy: a, + sourceFormat: n, + dimensionsDefine: u.dimensionsDefine, + startIndex: u.startIndex, + dimensionsDetectCount: u.dimensionsDetectCount, + encodeDefine: c + }) + } + + function Eo(t, e, i, n, r) { + if (!t) return {dimensionsDefine: Ro(r)}; + var a, o, s; + if (e === Tx) "auto" === n || null == n ? Bo(function (t) { + null != t && "-" !== t && (b(t) ? null == o && (o = 1) : o = 0) + }, i, t, 10) : o = n ? 1 : 0, r || 1 !== o || (r = [], Bo(function (t, e) { + r[e] = null != t ? t : "" + }, i, t)), a = r ? r.length : i === Lx ? t.length : t[0] ? t[0].length : null; else if (e === Cx) r || (r = No(t), s = !0); else if (e === Ax) r || (r = [], s = !0, f(t, function (t, e) { + r.push(e) + })); else if (e === Ix) { + var l = Vn(t[0]); + a = _(l) && l.length || 1 + } + var h; + return s && f(r, function (t, e) { + "name" === (S(t) ? t.name : t) && (h = e) + }), {startIndex: o, dimensionsDefine: Ro(r), dimensionsDetectCount: a, potentialNameDimIndex: h} + } + + function Ro(t) { + if (t) { + var e = N(); + return p(t, function (t) { + if (t = o({}, S(t) ? t : {name: t}), null == t.name) return t; + t.name += "", null == t.displayName && (t.displayName = t.name); + var i = e.get(t.name); + return i ? t.name += "-" + i.count++ : e.set(t.name, {count: 1}), t + }) + } + } + + function Bo(t, e, i, n) { + if (null == n && (n = 1 / 0), e === Lx) for (var r = 0; r < i.length && n > r; r++) t(i[r] ? i[r][0] : null, r); else for (var a = i[0] || [], r = 0; r < a.length && n > r; r++) t(a[r], r) + } + + function No(t) { + for (var e, i = 0; i < t.length && !(e = t[i++]);) ; + if (e) { + var n = []; + return f(e, function (t, e) { + n.push(e) + }), n + } + } + + function Fo(t, e, i, n, r, a) { + var o = Ao(t), s = {}, l = [], h = [], u = t.subType, c = N(["pie", "map", "funnel"]), + d = N(["line", "bar", "pictorialBar", "scatter", "effectScatter", "candlestick", "boxplot"]); + if (o && null != d.get(u)) { + var p = t.ecModel, g = Ox(p).datasetMap, v = e.uid + "_" + r, + m = g.get(v) || g.set(v, {categoryWayDim: 1, valueWayDim: 0}); + f(o.coordSysDims, function (t) { + if (null == o.firstCategoryDimIndex) { + var e = m.valueWayDim++; + s[t] = e, h.push(e) + } else if (o.categoryAxisMap.get(t)) s[t] = 0, l.push(0); else { + var e = m.categoryWayDim++; + s[t] = e, h.push(e) + } + }) + } else if (null != c.get(u)) { + for (var y, x = 0; 5 > x && null == y; x++) Go(i, n, r, a.dimensionsDefine, a.startIndex, x) || (y = x); + if (null != y) { + s.value = y; + var _ = a.potentialNameDimIndex || Math.max(y - 1, 0); + h.push(_), l.push(_) + } + } + return l.length && (s.itemName = l), h.length && (s.seriesName = h), s + } + + function Vo(t) { + var e = t.option, i = e.data; + return i ? void 0 : t.ecModel.getComponent("dataset", e.datasetIndex || 0) + } + + function Wo(t, e) { + return Go(t.data, t.sourceFormat, t.seriesLayoutBy, t.dimensionsDefine, t.startIndex, e) + } + + function Go(t, e, i, n, r, a) { + function o(t) { + return null != t && isFinite(t) && "" !== t ? !1 : b(t) && "-" !== t ? !0 : void 0 + } + + var s, l = 5; + if (I(t)) return !1; + var h; + if (n && (h = n[a], h = S(h) ? h.name : h), e === Tx) if (i === Lx) { + for (var u = t[a], c = 0; c < (u || []).length && l > c; c++) if (null != (s = o(u[r + c]))) return s + } else for (var c = 0; c < t.length && l > c; c++) { + var d = t[r + c]; + if (d && null != (s = o(d[a]))) return s + } else if (e === Cx) { + if (!h) return; + for (var c = 0; c < t.length && l > c; c++) { + var f = t[c]; + if (f && null != (s = o(f[h]))) return s + } + } else if (e === Ax) { + if (!h) return; + var u = t[h]; + if (!u || I(u)) return !1; + for (var c = 0; c < u.length && l > c; c++) if (null != (s = o(u[c]))) return s + } else if (e === Ix) for (var c = 0; c < t.length && l > c; c++) { + var f = t[c], p = Vn(f); + if (!_(p)) return !1; + if (null != (s = o(p[a]))) return s + } + return !1 + } + + function Ho(t, e) { + if (e) { + var i = e.seiresIndex, n = e.seriesId, r = e.seriesName; + return null != i && t.componentIndex !== i || null != n && t.id !== n || null != r && t.name !== r + } + } + + function Zo(t, e) { + var i = t.color && !t.colorLayer; + f(e, function (e, a) { + "colorLayer" === a && i || yx.hasClass(a) || ("object" == typeof e ? t[a] = t[a] ? r(t[a], e, !1) : n(e) : null == t[a] && (t[a] = e)) + }) + } + + function Xo(t) { + t = t, this.option = {}, this.option[zx] = 1, this._componentsMap = N({series: []}), this._seriesIndices, this._seriesIndicesMap, Zo(t, this._theme.option), r(t, _x, !1), this.mergeOption(t) + } + + function Yo(t, e) { + _(e) || (e = e ? [e] : []); + var i = {}; + return f(e, function (e) { + i[e] = (t.get(e) || []).slice() + }), i + } + + function jo(t, e, i) { + var n = e.type ? e.type : i ? i.subType : yx.determineSubType(t, e); + return n + } + + function qo(t, e) { + t._seriesIndicesMap = N(t._seriesIndices = p(e, function (t) { + return t.componentIndex + }) || []) + } + + function Uo(t, e) { + return e.hasOwnProperty("subType") ? v(t, function (t) { + return t.subType === e.subType + }) : t + } + + function $o(t) { + f(Rx, function (e) { + this[e] = y(t[e], t) + }, this) + } + + function Ko() { + this._coordinateSystems = [] + } + + function Qo(t) { + this._api = t, this._timelineOptions = [], this._mediaList = [], this._mediaDefault, this._currentMediaIndices = [], this._optionBackup, this._newBaseOption + } + + function Jo(t, e, i) { + var n, r, a = [], o = [], s = t.timeline; + if (t.baseOption && (r = t.baseOption), (s || t.options) && (r = r || {}, a = (t.options || []).slice()), t.media) { + r = r || {}; + var l = t.media; + Nx(l, function (t) { + t && t.option && (t.query ? o.push(t) : n || (n = t)) + }) + } + return r || (r = t), r.timeline || (r.timeline = s), Nx([r].concat(a).concat(p(o, function (t) { + return t.option + })), function (t) { + Nx(e, function (e) { + e(t, i) + }) + }), {baseOption: r, timelineOptions: a, mediaDefault: n, mediaList: o} + } + + function ts(t, e, i) { + var n = {width: e, height: i, aspectratio: e / i}, r = !0; + return f(t, function (t, e) { + var i = e.match(Gx); + if (i && i[1] && i[2]) { + var a = i[1], o = i[2].toLowerCase(); + es(n[o], t, a) || (r = !1) + } + }), r + } + + function es(t, e, i) { + return "min" === i ? t >= e : "max" === i ? e >= t : t === e + } + + function is(t, e) { + return t.join(",") === e.join(",") + } + + function ns(t, e) { + e = e || {}, Nx(e, function (e, i) { + if (null != e) { + var n = t[i]; + if (yx.hasClass(i)) { + e = Nn(e), n = Nn(n); + var r = Gn(n, e); + t[i] = Vx(r, function (t) { + return t.option && t.exist ? Wx(t.exist, t.option, !0) : t.exist || t.option + }) + } else t[i] = Wx(n, e, !0) + } + }) + } + + function rs(t) { + var e = t && t.itemStyle; + if (e) for (var i = 0, n = Xx.length; n > i; i++) { + var a = Xx[i], o = e.normal, s = e.emphasis; + o && o[a] && (t[a] = t[a] || {}, t[a].normal ? r(t[a].normal, o[a]) : t[a].normal = o[a], o[a] = null), s && s[a] && (t[a] = t[a] || {}, t[a].emphasis ? r(t[a].emphasis, s[a]) : t[a].emphasis = s[a], s[a] = null) + } + } + + function as(t, e, i) { + if (t && t[e] && (t[e].normal || t[e].emphasis)) { + var n = t[e].normal, r = t[e].emphasis; + n && (i ? (t[e].normal = t[e].emphasis = null, s(t[e], n)) : t[e] = n), r && (t.emphasis = t.emphasis || {}, t.emphasis[e] = r) + } + } + + function os(t) { + as(t, "itemStyle"), as(t, "lineStyle"), as(t, "areaStyle"), as(t, "label"), as(t, "labelLine"), as(t, "upperLabel"), as(t, "edgeLabel") + } + + function ss(t, e) { + var i = Zx(t) && t[e], n = Zx(i) && i.textStyle; + if (n) for (var r = 0, a = sm.length; a > r; r++) { + var e = sm[r]; + n.hasOwnProperty(e) && (i[e] = n[e]) + } + } + + function ls(t) { + t && (os(t), ss(t, "label"), t.emphasis && ss(t.emphasis, "label")) + } + + function hs(t) { + if (Zx(t)) { + rs(t), os(t), ss(t, "label"), ss(t, "upperLabel"), ss(t, "edgeLabel"), t.emphasis && (ss(t.emphasis, "label"), ss(t.emphasis, "upperLabel"), ss(t.emphasis, "edgeLabel")); + var e = t.markPoint; + e && (rs(e), ls(e)); + var i = t.markLine; + i && (rs(i), ls(i)); + var n = t.markArea; + n && ls(n); + var r = t.data; + if ("graph" === t.type) { + r = r || t.nodes; + var a = t.links || t.edges; + if (a && !I(a)) for (var o = 0; o < a.length; o++) ls(a[o]); + f(t.categories, function (t) { + os(t) + }) + } + if (r && !I(r)) for (var o = 0; o < r.length; o++) ls(r[o]); + var e = t.markPoint; + if (e && e.data) for (var s = e.data, o = 0; o < s.length; o++) ls(s[o]); + var i = t.markLine; + if (i && i.data) for (var l = i.data, o = 0; o < l.length; o++) _(l[o]) ? (ls(l[o][0]), ls(l[o][1])) : ls(l[o]); + "gauge" === t.type ? (ss(t, "axisLabel"), ss(t, "title"), ss(t, "detail")) : "treemap" === t.type ? (as(t.breadcrumb, "itemStyle"), f(t.levels, function (t) { + os(t) + })) : "tree" === t.type && os(t.leaves) + } + } + + function us(t) { + return _(t) ? t : t ? [t] : [] + } + + function cs(t) { + return (_(t) ? t[0] : t) || {} + } + + function ds(t, e) { + e = e.split(","); + for (var i = t, n = 0; n < e.length && (i = i && i[e[n]], null != i); n++) ; + return i + } + + function fs(t, e, i, n) { + e = e.split(","); + for (var r, a = t, o = 0; o < e.length - 1; o++) r = e[o], null == a[r] && (a[r] = {}), a = a[r]; + (n || null == a[e[o]]) && (a[e[o]] = i) + } + + function ps(t) { + f(jx, function (e) { + e[0] in t && !(e[1] in t) && (t[e[1]] = t[e[0]]) + }) + } + + function gs(t) { + f(t, function (e, i) { + var n = [], r = [0 / 0, 0 / 0], a = [e.stackResultDimension, e.stackedOverDimension], o = e.data, + s = e.isStackedByIndex, l = o.map(a, function (a, l, h) { + var u = o.get(e.stackedDimension, h); + if (isNaN(u)) return r; + var c, d; + s ? d = o.getRawIndex(h) : c = o.get(e.stackedByDimension, h); + for (var f = 0 / 0, p = i - 1; p >= 0; p--) { + var g = t[p]; + if (s || (d = g.data.rawIndexOf(g.stackedByDimension, c)), d >= 0) { + var v = g.data.getByRawIndex(g.stackResultDimension, d); + if (u >= 0 && v > 0 || 0 >= u && 0 > v) { + u += v, f = v; + break + } + } + } + return n[0] = u, n[1] = f, n + }); + o.hostModel.setData(l), e.data = l + }) + } + + function vs(t, e) { + ko.isInstance(t) || (t = ko.seriesDataToSource(t)), this._source = t; + var i = this._data = t.data, n = t.sourceFormat; + n === kx && (this._offset = 0, this._dimSize = e, this._data = i); + var r = Qx[n === Tx ? n + "_" + t.seriesLayoutBy : n]; + o(this, r) + } + + function ms() { + return this._data.length + } + + function ys(t) { + return this._data[t] + } + + function xs(t) { + for (var e = 0; e < t.length; e++) this._data.push(t[e]) + } + + function _s(t, e, i) { + return null != i ? t[i] : t + } + + function ws(t, e, i, n) { + return bs(t[n], this._dimensionInfos[e]) + } + + function bs(t, e) { + var i = e && e.type; + if ("ordinal" === i) { + var n = e && e.ordinalMeta; + return n ? n.parseAndCollect(t) : t + } + return "time" === i && "number" != typeof t && null != t && "-" !== t && (t = +ro(t)), null == t || "" === t ? 0 / 0 : +t + } + + function Ss(t, e, i) { + if (t) { + var n = t.getRawDataItem(e); + if (null != n) { + var r, a, o = t.getProvider().getSource().sourceFormat, s = t.getDimensionInfo(i); + return s && (r = s.name, a = s.index), Jx[o](n, e, a, r) + } + } + } + + function Ms(t, e, i) { + if (t) { + var n = t.getProvider().getSource().sourceFormat; + if (n === Ix || n === Cx) { + var r = t.getRawDataItem(e); + return n !== Ix || S(r) || (r = null), r ? r[i] : void 0 + } + } + } + + function Is(t) { + return new Ts(t) + } + + function Ts(t) { + t = t || {}, this._reset = t.reset, this._plan = t.plan, this._count = t.count, this._onDirty = t.onDirty, this._dirty = !0, this.context + } + + function Cs(t, e, i, n, r, a) { + r_.reset(i, n, r, a), t._callingProgress = e, t._callingProgress({ + start: i, + end: n, + count: n - i, + next: r_.next + }, t.context) + } + + function As(t, e) { + t._dueIndex = t._outputDueEnd = t._dueEnd = 0, t._settedOutputEnd = null; + var i, n; + !e && t._reset && (i = t._reset(t.context), i && i.progress && (n = i.forceFirstProgress, i = i.progress), _(i) && !i.length && (i = null)), t._progress = i, t._modBy = t._modDataCount = null; + var r = t._downstream; + return r && r.dirty(), n + } + + function Ds(t) { + var e = t.name; + Zn(t) || (t.name = ks(t) || e) + } + + function ks(t) { + var e = t.getRawData(), i = e.mapDimension("seriesName", !0), n = []; + return f(i, function (t) { + var i = e.getDimensionInfo(t); + i.displayName && n.push(i.displayName) + }), n.join(" ") + } + + function Ps(t) { + return t.model.getRawData().count() + } + + function Ls(t) { + var e = t.model; + return e.setData(e.getRawData().cloneShallow()), Os + } + + function Os(t, e) { + t.end > e.outputData.count() && e.model.getRawData().cloneShallow(e.outputData) + } + + function zs(t, e) { + f(t.CHANGABLE_METHODS, function (i) { + t.wrapMethod(i, x(Es, e)) + }) + } + + function Es(t) { + var e = Rs(t); + e && e.setOutputEnd(this.count()) + } + + function Rs(t) { + var e = (t.ecModel || {}).scheduler, i = e && e.getPipeline(t.uid); + if (i) { + var n = i.currentTask; + if (n) { + var r = n.agentStubMap; + r && (n = r.get(t.uid)) + } + return n + } + } + + function Bs() { + this.group = new lv, this.uid = Za("viewChart"), this.renderTask = Is({ + plan: Vs, + reset: Ws + }), this.renderTask.context = {view: this} + } + + function Ns(t, e) { + if (t && (t.trigger(e), "group" === t.type)) for (var i = 0; i < t.childCount(); i++) Ns(t.childAt(i), e) + } + + function Fs(t, e, i) { + var n = Yn(t, e); + null != n ? f(Nn(n), function (e) { + Ns(t.getItemGraphicEl(e), i) + }) : t.eachItemGraphicEl(function (t) { + Ns(t, i) + }) + } + + function Vs(t) { + return c_(t.model) + } + + function Ws(t) { + var e = t.model, i = t.ecModel, n = t.api, r = t.payload, a = e.pipelineContext.progressiveRender, o = t.view, + s = r && u_(r).updateMethod, l = a ? "incrementalPrepareRender" : s && o[s] ? s : "render"; + return "render" !== l && o[l](e, i, n, r), f_[l] + } + + function Gs(t, e, i) { + function n() { + u = (new Date).getTime(), c = null, t.apply(o, s || []) + } + + var r, a, o, s, l, h = 0, u = 0, c = null; + e = e || 0; + var d = function () { + r = (new Date).getTime(), o = this, s = arguments; + var t = l || e, d = l || i; + l = null, a = r - (d ? h : u) - t, clearTimeout(c), d ? c = setTimeout(n, t) : a >= 0 ? n() : c = setTimeout(n, -a), h = r + }; + return d.clear = function () { + c && (clearTimeout(c), c = null) + }, d.debounceNextCall = function (t) { + l = t + }, d + } + + function Hs(t, e, i, n) { + var r = t[e]; + if (r) { + var a = r[p_] || r, o = r[v_], s = r[g_]; + if (s !== i || o !== n) { + if (null == i || !n) return t[e] = a; + r = t[e] = Gs(a, i, "debounce" === n), r[p_] = a, r[v_] = n, r[g_] = i + } + return r + } + } + + function Zs(t, e) { + var i = t[e]; + i && i[p_] && (t[e] = i[p_]) + } + + function Xs(t, e, i, n) { + this.ecInstance = t, this.api = e, this.unfinished; + var i = this._dataProcessorHandlers = i.slice(), n = this._visualHandlers = n.slice(); + this._allHandlers = i.concat(n), this._stageTaskMap = N() + } + + function Ys(t, e, i, n, r) { + function a(t, e) { + return t.setDirty && (!t.dirtyMap || t.dirtyMap.get(e.__pipeline.id)) + } + + r = r || {}; + var o; + f(e, function (e) { + if (!r.visualType || r.visualType === e.visualType) { + var s = t._stageTaskMap.get(e.uid), l = s.seriesTaskMap, h = s.overallTask; + if (h) { + var u, c = h.agentStubMap; + c.each(function (t) { + a(r, t) && (t.dirty(), u = !0) + }), u && h.dirty(), S_(h, n); + var d = t.getPerformArgs(h, r.block); + c.each(function (t) { + t.perform(d) + }), o |= h.perform(d) + } else l && l.each(function (s) { + a(r, s) && s.dirty(); + var l = t.getPerformArgs(s, r.block); + l.skip = !e.performRawSeries && i.isSeriesFiltered(s.context.model), S_(s, n), o |= s.perform(l) + }) + } + }), t.unfinished |= o + } + + function js(t, e, i, n, r) { + function a(i) { + var a = i.uid, s = o.get(a) || o.set(a, Is({plan: Js, reset: tl, count: il})); + s.context = { + model: i, + ecModel: n, + api: r, + useClearVisual: e.isVisual && !e.isLayout, + plan: e.plan, + reset: e.reset, + scheduler: t + }, nl(t, i, s) + } + + var o = i.seriesTaskMap || (i.seriesTaskMap = N()), s = e.seriesType, l = e.getTargetSeries; + e.createOnAllSeries ? n.eachRawSeries(a) : s ? n.eachRawSeriesByType(s, a) : l && l(n, r).each(a); + var h = t._pipelineMap; + o.each(function (t, e) { + h.get(e) || (t.dispose(), o.removeKey(e)) + }) + } + + function qs(t, e, i, n, r) { + function a(e) { + var i = e.uid, n = s.get(i); + n || (n = s.set(i, Is({reset: $s, onDirty: Qs})), o.dirty()), n.context = { + model: e, + overallProgress: u, + modifyOutputEnd: c + }, n.agent = o, n.__block = u, nl(t, e, n) + } + + var o = i.overallTask = i.overallTask || Is({reset: Us}); + o.context = {ecModel: n, api: r, overallReset: e.overallReset, scheduler: t}; + var s = o.agentStubMap = o.agentStubMap || N(), l = e.seriesType, h = e.getTargetSeries, u = !0, + c = e.modifyOutputEnd; + l ? n.eachRawSeriesByType(l, a) : h ? h(n, r).each(a) : (u = !1, f(n.getSeries(), a)); + var d = t._pipelineMap; + s.each(function (t, e) { + d.get(e) || (t.dispose(), o.dirty(), s.removeKey(e)) + }) + } + + function Us(t) { + t.overallReset(t.ecModel, t.api, t.payload) + } + + function $s(t) { + return t.overallProgress && Ks + } + + function Ks() { + this.agent.dirty(), this.getDownstream().dirty() + } + + function Qs() { + this.agent && this.agent.dirty() + } + + function Js(t) { + return t.plan && t.plan(t.model, t.ecModel, t.api, t.payload) + } + + function tl(t) { + t.useClearVisual && t.data.clearAllVisual(); + var e = t.resetDefines = Nn(t.reset(t.model, t.ecModel, t.api, t.payload)); + return e.length > 1 ? p(e, function (t, e) { + return el(e) + }) : M_ + } + + function el(t) { + return function (e, i) { + var n = i.data, r = i.resetDefines[t]; + if (r && r.dataEach) for (var a = e.start; a < e.end; a++) r.dataEach(n, a); else r && r.progress && r.progress(e, n) + } + } + + function il(t) { + return t.data.count() + } + + function nl(t, e, i) { + var n = e.uid, r = t._pipelineMap.get(n); + !r.head && (r.head = i), r.tail && r.tail.pipe(i), r.tail = i, i.__idxInPipeline = r.count++, i.__pipeline = r + } + + function rl(t) { + I_ = null; + try { + t(T_, C_) + } catch (e) { + } + return I_ + } + + function al(t, e) { + for (var i in e.prototype) t[i] = V + } + + function ol(t) { + if (b(t)) { + var e = new DOMParser; + t = e.parseFromString(t, "text/xml") + } + for (9 === t.nodeType && (t = t.firstChild); "svg" !== t.nodeName.toLowerCase() || 1 !== t.nodeType;) t = t.nextSibling; + return t + } + + function sl() { + this._defs = {}, this._root = null, this._isDefine = !1, this._isText = !1 + } + + function ll(t, e) { + for (var i = t.firstChild; i;) { + if (1 === i.nodeType) { + var n = i.getAttribute("offset"); + n = n.indexOf("%") > 0 ? parseInt(n, 10) / 100 : n ? parseFloat(n) : 0; + var r = i.getAttribute("stop-color") || "#000000"; + e.addColorStop(n, r) + } + i = i.nextSibling + } + } + + function hl(t, e) { + t && t.__inheritedStyle && (e.__inheritedStyle || (e.__inheritedStyle = {}), s(e.__inheritedStyle, t.__inheritedStyle)) + } + + function ul(t) { + for (var e = z(t).split(E_), i = [], n = 0; n < e.length; n += 2) { + var r = parseFloat(e[n]), a = parseFloat(e[n + 1]); + i.push([r, a]) + } + return i + } + + function cl(t, e, i, n) { + var r = e.__inheritedStyle || {}, a = "text" === e.type; + if (1 === t.nodeType && (fl(t, e), o(r, pl(t)), !n)) for (var s in N_) if (N_.hasOwnProperty(s)) { + var l = t.getAttribute(s); + null != l && (r[N_[s]] = l) + } + var h = a ? "textFill" : "fill", u = a ? "textStroke" : "stroke"; + e.style = e.style || new gv; + var c = e.style; + null != r.fill && c.set(h, dl(r.fill, i)), null != r.stroke && c.set(u, dl(r.stroke, i)), f(["lineWidth", "opacity", "fillOpacity", "strokeOpacity", "miterLimit", "fontSize"], function (t) { + var e = "lineWidth" === t && a ? "textStrokeWidth" : t; + null != r[t] && c.set(e, parseFloat(r[t])) + }), r.textBaseline && "auto" !== r.textBaseline || (r.textBaseline = "alphabetic"), "alphabetic" === r.textBaseline && (r.textBaseline = "bottom"), "start" === r.textAlign && (r.textAlign = "left"), "end" === r.textAlign && (r.textAlign = "right"), f(["lineDashOffset", "lineCap", "lineJoin", "fontWeight", "fontFamily", "fontStyle", "textAlign", "textBaseline"], function (t) { + null != r[t] && c.set(t, r[t]) + }), r.lineDash && (e.style.lineDash = z(r.lineDash).split(E_)), c[u] && "none" !== c[u] && (e[u] = !0), e.__inheritedStyle = r + } + + function dl(t, e) { + var i = e && t && t.match(F_); + if (i) { + var n = z(i[1]), r = e[n]; + return r + } + return t + } + + function fl(t, e) { + var i = t.getAttribute("transform"); + if (i) { + i = i.replace(/,/g, " "); + var n = null, r = []; + i.replace(V_, function (t, e, i) { + r.push(e, i) + }); + for (var a = r.length - 1; a > 0; a -= 2) { + var o = r[a], s = r[a - 1]; + switch (n = n || be(), s) { + case"translate": + o = z(o).split(E_), Te(n, n, [parseFloat(o[0]), parseFloat(o[1] || 0)]); + break; + case"scale": + o = z(o).split(E_), Ae(n, n, [parseFloat(o[0]), parseFloat(o[1] || o[0])]); + break; + case"rotate": + o = z(o).split(E_), Ce(n, n, parseFloat(o[0])); + break; + case"skew": + o = z(o).split(E_), console.warn("Skew transform is not supported yet"); + break; + case"matrix": + var o = z(o).split(E_); + n[0] = parseFloat(o[0]), n[1] = parseFloat(o[1]), n[2] = parseFloat(o[2]), n[3] = parseFloat(o[3]), n[4] = parseFloat(o[4]), n[5] = parseFloat(o[5]) + } + } + } + e.setLocalTransform(n) + } + + function pl(t) { + var e = t.getAttribute("style"), i = {}; + if (!e) return i; + var n = {}; + W_.lastIndex = 0; + for (var r; null != (r = W_.exec(e));) n[r[1]] = r[2]; + for (var a in N_) N_.hasOwnProperty(a) && null != n[a] && (i[N_[a]] = n[a]); + return i + } + + function gl(t, e, i) { + var n = e / t.width, r = i / t.height, a = Math.min(n, r), o = [a, a], + s = [-(t.x + t.width / 2) * a + e / 2, -(t.y + t.height / 2) * a + i / 2]; + return {scale: o, position: s} + } + + function vl(t) { + return function (e, i, n) { + e = e && e.toLowerCase(), bg.prototype[t].call(this, e, i, n) + } + } + + function ml() { + bg.call(this) + } + + function yl(t, e, i) { + function r(t, e) { + return t.__prio - e.__prio + } + + i = i || {}, "string" == typeof e && (e = xw[e]), this.id, this.group, this._dom = t; + var a = "canvas", o = this._zr = On(t, { + renderer: i.renderer || a, + devicePixelRatio: i.devicePixelRatio, + width: i.width, + height: i.height + }); + this._throttledZrFlush = Gs(y(o.flush, o), 17); + var e = n(e); + e && Ux(e, !0), this._theme = e, this._chartsViews = [], this._chartsMap = {}, this._componentsViews = [], this._componentsMap = {}, this._coordSysMgr = new Ko; + var s = this._api = Rl(this); + Si(yw, r), Si(gw, r), this._scheduler = new Xs(this, s, gw, yw), bg.call(this, this._ecEventProcessor = new Bl), this._messageCenter = new ml, this._initEvents(), this.resize = y(this.resize, this), this._pendingActions = [], o.animation.on("frame", this._onframe, this), Tl(o, this), E(this) + } + + function xl(t, e, i) { + var n, r = this._model, a = this._coordSysMgr.getCoordinateSystems(); + e = qn(r, e); + for (var o = 0; o < a.length; o++) { + var s = a[o]; + if (s[t] && null != (n = s[t](r, e, i))) return n + } + } + + function _l(t) { + var e = t._model, i = t._scheduler; + i.restorePipelines(e), i.prepareStageTasks(), Cl(t, "component", e, i), Cl(t, "chart", e, i), i.plan() + } + + function wl(t, e, i, n, r) { + function a(n) { + n && n.__alive && n[e] && n[e](n.__model, o, t._api, i) + } + + var o = t._model; + if (!n) return void Y_(t._componentsViews.concat(t._chartsViews), a); + var s = {}; + s[n + "Id"] = i[n + "Id"], s[n + "Index"] = i[n + "Index"], s[n + "Name"] = i[n + "Name"]; + var l = {mainType: n, query: s}; + r && (l.subType = r); + var h = i.excludeSeriesId; + null != h && (h = N(Nn(h))), o && o.eachComponent(l, function (e) { + h && null != h.get(e.id) || a(t["series" === n ? "_chartsMap" : "_componentsMap"][e.__viewId]) + }, t) + } + + function bl(t, e) { + var i = t._chartsMap, n = t._scheduler; + e.eachSeries(function (t) { + n.updateStreamModes(t, i[t.__viewId]) + }) + } + + function Sl(t, e) { + var i = t.type, n = t.escapeConnect, r = fw[i], a = r.actionInfo, l = (a.update || "update").split(":"), + h = l.pop(); + l = null != l[0] && U_(l[0]), this[sw] = !0; + var u = [t], c = !1; + t.batch && (c = !0, u = p(t.batch, function (e) { + return e = s(o({}, e), t), e.batch = null, e + })); + var d, f = [], g = "highlight" === i || "downplay" === i; + Y_(u, function (t) { + d = r.action(t, this._model, this._api), d = d || o({}, t), d.type = a.event || d.type, f.push(d), g ? wl(this, h, t, "series") : l && wl(this, h, t, l.main, l.sub) + }, this), "none" === h || g || l || (this[lw] ? (_l(this), cw.update.call(this, t), this[lw] = !1) : cw[h].call(this, t)), d = c ? { + type: a.event || i, + escapeConnect: n, + batch: f + } : f[0], this[sw] = !1, !e && this._messageCenter.trigger(d.type, d) + } + + function Ml(t) { + for (var e = this._pendingActions; e.length;) { + var i = e.shift(); + Sl.call(this, i, t) + } + } + + function Il(t) { + !t && this.trigger("updated") + } + + function Tl(t, e) { + t.on("rendered", function () { + e.trigger("rendered"), !t.animation.isFinished() || e[lw] || e._scheduler.unfinished || e._pendingActions.length || e.trigger("finished") + }) + } + + function Cl(t, e, i, n) { + function r(t) { + var e = "_ec_" + t.id + "_" + t.type, r = s[e]; + if (!r) { + var u = U_(t.type), c = a ? s_.getClass(u.main, u.sub) : Bs.getClass(u.sub); + r = new c, r.init(i, h), s[e] = r, o.push(r), l.add(r.group) + } + t.__viewId = r.__id = e, r.__alive = !0, r.__model = t, r.group.__ecComponentInfo = { + mainType: t.mainType, + index: t.componentIndex + }, !a && n.prepareView(r, t, i, h) + } + + for (var a = "component" === e, o = a ? t._componentsViews : t._chartsViews, s = a ? t._componentsMap : t._chartsMap, l = t._zr, h = t._api, u = 0; u < o.length; u++) o[u].__alive = !1; + a ? i.eachComponent(function (t, e) { + "series" !== t && r(e) + }) : i.eachSeries(r); + for (var u = 0; u < o.length;) { + var c = o[u]; + c.__alive ? u++ : (!a && c.renderTask.dispose(), l.remove(c.group), c.dispose(i, h), o.splice(u, 1), delete s[c.__id], c.__id = c.group.__ecComponentInfo = null) + } + } + + function Al(t) { + t.clearColorPalette(), t.eachSeries(function (t) { + t.clearColorPalette() + }) + } + + function Dl(t, e, i, n) { + kl(t, e, i, n), Y_(t._chartsViews, function (t) { + t.__alive = !1 + }), Pl(t, e, i, n), Y_(t._chartsViews, function (t) { + t.__alive || t.remove(e, i) + }) + } + + function kl(t, e, i, n, r) { + Y_(r || t._componentsViews, function (t) { + var r = t.__model; + t.render(r, e, i, n), El(r, t) + }) + } + + function Pl(t, e, i, n, r) { + var a, o = t._scheduler; + e.eachSeries(function (e) { + var i = t._chartsMap[e.__viewId]; + i.__alive = !0; + var s = i.renderTask; + o.updatePayload(s, n), r && r.get(e.uid) && s.dirty(), a |= s.perform(o.getPerformArgs(s)), i.group.silent = !!e.get("silent"), El(e, i), zl(e, i) + }), o.unfinished |= a, Ol(t._zr, e), x_(t._zr.dom, e) + } + + function Ll(t, e) { + Y_(mw, function (i) { + i(t, e) + }) + } + + function Ol(t, e) { + var i = t.storage, n = 0; + i.traverse(function (t) { + t.isGroup || n++ + }), n > e.get("hoverLayerThreshold") && !tg.node && i.traverse(function (t) { + t.isGroup || (t.useHoverLayer = !0) + }) + } + + function zl(t, e) { + var i = t.get("blendMode") || null; + e.group.traverse(function (t) { + t.isGroup || t.style.blend !== i && t.setStyle("blend", i), t.eachPendingDisplayable && t.eachPendingDisplayable(function (t) { + t.setStyle("blend", i) + }) + }) + } + + function El(t, e) { + var i = t.get("z"), n = t.get("zlevel"); + e.group.traverse(function (t) { + "group" !== t.type && (null != i && (t.z = i), null != n && (t.zlevel = n)) + }) + } + + function Rl(t) { + var e = t._coordSysMgr; + return o(new $o(t), { + getCoordinateSystems: y(e.getCoordinateSystems, e), getComponentByElement: function (e) { + for (; e;) { + var i = e.__ecComponentInfo; + if (null != i) return t._model.getComponent(i.mainType, i.index); + e = e.parent + } + } + }) + } + + function Bl() { + this.eventInfo + } + + function Nl(t) { + function e(t, e) { + for (var i = 0; i < t.length; i++) { + var n = t[i]; + n[a] = e + } + } + + var i = 0, n = 1, r = 2, a = "__connectUpdateStatus"; + Y_(pw, function (o, s) { + t._messageCenter.on(s, function (o) { + if (bw[t.group] && t[a] !== i) { + if (o && o.escapeConnect) return; + var s = t.makeActionFromEvent(o), l = []; + Y_(ww, function (e) { + e !== t && e.group === t.group && l.push(e) + }), e(l, i), Y_(l, function (t) { + t[a] !== n && t.dispatchAction(s) + }), e(l, r) + } + }) + }) + } + + function Fl(t, e, i) { + var n = Hl(t); + if (n) return n; + var r = new yl(t, e, i); + return r.id = "ec_" + Sw++, ww[r.id] = r, $n(t, Iw, r.id), Nl(r), r + } + + function Vl(t) { + if (_(t)) { + var e = t; + t = null, Y_(e, function (e) { + null != e.group && (t = e.group) + }), t = t || "g_" + Mw++, Y_(e, function (e) { + e.group = t + }) + } + return bw[t] = !0, t + } + + function Wl(t) { + bw[t] = !1 + } + + function Gl(t) { + "string" == typeof t ? t = ww[t] : t instanceof yl || (t = Hl(t)), t instanceof yl && !t.isDisposed() && t.dispose() + } + + function Hl(t) { + return ww[Kn(t, Iw)] + } + + function Zl(t) { + return ww[t] + } + + function Xl(t, e) { + xw[t] = e + } + + function Yl(t) { + vw.push(t) + } + + function jl(t, e) { + th(gw, t, e, J_) + } + + function ql(t) { + mw.push(t) + } + + function Ul(t, e, i) { + "function" == typeof e && (i = e, e = ""); + var n = q_(t) ? t.type : [t, t = {event: e}][0]; + t.event = (t.event || n).toLowerCase(), e = t.event, X_(hw.test(n) && hw.test(e)), fw[n] || (fw[n] = { + action: i, + actionInfo: t + }), pw[e] = n + } + + function $l(t, e) { + Ko.register(t, e) + } + + function Kl(t) { + var e = Ko.get(t); + return e ? e.getDimensionsInfo ? e.getDimensionsInfo() : e.dimensions.slice() : void 0 + } + + function Ql(t, e) { + th(yw, t, e, ew, "layout") + } + + function Jl(t, e) { + th(yw, t, e, nw, "visual") + } + + function th(t, e, i, n, r) { + (j_(e) || q_(e)) && (i = e, e = n); + var a = Xs.wrapStageHandler(i, r); + return a.__prio = e, a.__raw = i, t.push(a), a + } + + function eh(t, e) { + _w[t] = e + } + + function ih(t) { + return yx.extend(t) + } + + function nh(t) { + return s_.extend(t) + } + + function rh(t) { + return o_.extend(t) + } + + function ah(t) { + return Bs.extend(t) + } + + function oh(t) { + i("createCanvas", t) + } + + function sh(t, e, i) { + H_.registerMap(t, e, i) + } + + function lh(t) { + var e = H_.retrieveMap(t); + return e && e[0] && {geoJson: e[0].geoJSON, specialAreas: e[0].specialAreas} + } + + function hh(t) { + return t + } + + function uh(t, e, i, n, r) { + this._old = t, this._new = e, this._oldKeyGetter = i || hh, this._newKeyGetter = n || hh, this.context = r + } + + function ch(t, e, i, n, r) { + for (var a = 0; a < t.length; a++) { + var o = "_ec_" + r[n](t[a], a), s = e[o]; + null == s ? (i.push(o), e[o] = a) : (s.length || (e[o] = s = [s]), s.push(a)) + } + } + + function dh(t) { + var e = {}, i = e.encode = {}, n = N(), r = [], a = []; + f(t.dimensions, function (e) { + var o = t.getDimensionInfo(e), s = o.coordDim; + if (s) { + var l = i[s]; + i.hasOwnProperty(s) || (l = i[s] = []), l[o.coordDimIndex] = e, o.isExtraCoord || (n.set(s, 1), ph(o.type) && (r[0] = e)), o.defaultTooltip && a.push(e) + } + Aw.each(function (t, e) { + var n = i[e]; + i.hasOwnProperty(e) || (n = i[e] = []); + var r = o.otherDims[e]; + null != r && r !== !1 && (n[r] = o.name) + }) + }); + var o = [], s = {}; + n.each(function (t, e) { + var n = i[e]; + s[e] = n[0], o = o.concat(n) + }), e.dataDimsOnCoord = o, e.encodeFirstDimNotExtra = s; + var l = i.label; + l && l.length && (r = l.slice()); + var h = i.tooltip; + return h && h.length ? a = h.slice() : a.length || (a = r.slice()), i.defaultedLabel = r, i.defaultedTooltip = a, e + } + + function fh(t) { + return "category" === t ? "ordinal" : "time" === t ? "time" : "float" + } + + function ph(t) { + return !("ordinal" === t || "time" === t) + } + + function gh(t) { + return t._rawCount > 65535 ? Ow : zw + } + + function vh(t) { + var e = t.constructor; + return e === Array ? t.slice() : new e(t) + } + + function mh(t, e) { + f(Ew.concat(e.__wrappedMethods || []), function (i) { + e.hasOwnProperty(i) && (t[i] = e[i]) + }), t.__wrappedMethods = e.__wrappedMethods, f(Rw, function (i) { + t[i] = n(e[i]) + }), t._calculationInfo = o(e._calculationInfo) + } + + function yh(t) { + var e = t._invertedIndicesMap; + f(e, function (i, n) { + var r = t._dimensionInfos[n], a = r.ordinalMeta; + if (a) { + i = e[n] = new Ow(a.categories.length); + for (var o = 0; o < i.length; o++) i[o] = 0 / 0; + for (var o = 0; o < t._count; o++) i[t.get(n, o)] = o + } + }) + } + + function xh(t, e, i) { + var n; + if (null != e) { + var r = t._chunkSize, a = Math.floor(i / r), o = i % r, s = t.dimensions[e], l = t._storage[s][a]; + if (l) { + n = l[o]; + var h = t._dimensionInfos[s].ordinalMeta; + h && h.categories.length && (n = h.categories[n]) + } + } + return n + } + + function _h(t) { + return t + } + + function wh(t) { + return t < this._count && t >= 0 ? this._indices[t] : -1 + } + + function bh(t, e) { + var i = t._idList[e]; + return null == i && (i = xh(t, t._idDimIdx, e)), null == i && (i = Pw + e), i + } + + function Sh(t) { + return _(t) || (t = [t]), t + } + + function Mh(t, e) { + var i = t.dimensions, n = new Bw(p(i, t.getDimensionInfo, t), t.hostModel); + mh(n, t); + for (var r = n._storage = {}, a = t._storage, o = 0; o < i.length; o++) { + var s = i[o]; + a[s] && (h(e, s) >= 0 ? (r[s] = Ih(a[s]), n._rawExtent[s] = Th(), n._extent[s] = null) : r[s] = a[s]) + } + return n + } + + function Ih(t) { + for (var e = new Array(t.length), i = 0; i < t.length; i++) e[i] = vh(t[i]); + return e + } + + function Th() { + return [1 / 0, -1 / 0] + } + + function Ch(t, e, i) { + function r(t, e, i) { + null != Aw.get(e) ? t.otherDims[e] = i : (t.coordDim = e, t.coordDimIndex = i, u.set(e, !0)) + } + + ko.isInstance(e) || (e = ko.seriesDataToSource(e)), i = i || {}, t = (t || []).slice(); + for (var a = (i.dimsDef || []).slice(), l = N(i.encodeDef), h = N(), u = N(), c = [], d = Ah(e, t, a, i.dimCount), p = 0; d > p; p++) { + var g = a[p] = o({}, S(a[p]) ? a[p] : {name: a[p]}), v = g.name, m = c[p] = {otherDims: {}}; + null != v && null == h.get(v) && (m.name = m.displayName = v, h.set(v, p)), null != g.type && (m.type = g.type), null != g.displayName && (m.displayName = g.displayName) + } + l.each(function (t, e) { + if (t = Nn(t).slice(), 1 === t.length && t[0] < 0) return void l.set(e, !1); + var i = l.set(e, []); + f(t, function (t, n) { + b(t) && (t = h.get(t)), null != t && d > t && (i[n] = t, r(c[t], e, n)) + }) + }); + var y = 0; + f(t, function (t) { + var e, t, i, a; + if (b(t)) e = t, t = {}; else { + e = t.name; + var o = t.ordinalMeta; + t.ordinalMeta = null, t = n(t), t.ordinalMeta = o, i = t.dimsDef, a = t.otherDims, t.name = t.coordDim = t.coordDimIndex = t.dimsDef = t.otherDims = null + } + var h = l.get(e); + if (h !== !1) { + var h = Nn(h); + if (!h.length) for (var u = 0; u < (i && i.length || 1); u++) { + for (; y < c.length && null != c[y].coordDim;) y++; + y < c.length && h.push(y++) + } + f(h, function (n, o) { + var l = c[n]; + if (r(s(l, t), e, o), null == l.name && i) { + var h = i[o]; + !S(h) && (h = {name: h}), l.name = l.displayName = h.name, l.defaultTooltip = h.defaultTooltip + } + a && s(l.otherDims, a) + }) + } + }); + var x = i.generateCoord, _ = i.generateCoordCount, w = null != _; + _ = x ? _ || 1 : 0; + for (var M = x || "value", I = 0; d > I; I++) { + var m = c[I] = c[I] || {}, T = m.coordDim; + null == T && (m.coordDim = Dh(M, u, w), m.coordDimIndex = 0, (!x || 0 >= _) && (m.isExtraCoord = !0), _--), null == m.name && (m.name = Dh(m.coordDim, h)), null == m.type && Wo(e, I, m.name) && (m.type = "ordinal") + } + return c + } + + function Ah(t, e, i, n) { + var r = Math.max(t.dimensionsDetectCount || 1, e.length, i.length, n || 0); + return f(e, function (t) { + var e = t.dimsDef; + e && (r = Math.max(r, e.length)) + }), r + } + + function Dh(t, e, i) { + if (i || null != e.get(t)) { + for (var n = 0; null != e.get(t + n);) n++; + t += n + } + return e.set(t, !0), t + } + + function kh(t, e, i) { + i = i || {}; + var n, r, a, o, s = i.byIndex, l = i.stackedCoordDimension, h = !(!t || !t.get("stack")); + if (f(e, function (t, i) { + b(t) && (e[i] = t = {name: t}), h && !t.isExtraCoord && (s || n || !t.ordinalMeta || (n = t), r || "ordinal" === t.type || "time" === t.type || l && l !== t.coordDim || (r = t)) + }), !r || s || n || (s = !0), r) { + a = "__\x00ecstackresult", o = "__\x00ecstackedover", n && (n.createInvertedIndices = !0); + var u = r.coordDim, c = r.type, d = 0; + f(e, function (t) { + t.coordDim === u && d++ + }), e.push({ + name: a, + coordDim: u, + coordDimIndex: d, + type: c, + isExtraCoord: !0, + isCalculationCoord: !0 + }), d++, e.push({name: o, coordDim: o, coordDimIndex: d, type: c, isExtraCoord: !0, isCalculationCoord: !0}) + } + return { + stackedDimension: r && r.name, + stackedByDimension: n && n.name, + isStackedByIndex: s, + stackedOverDimension: o, + stackResultDimension: a + } + } + + function Ph(t, e) { + return !!e && e === t.getCalculationInfo("stackedDimension") + } + + function Lh(t, e) { + return Ph(t, e) ? t.getCalculationInfo("stackResultDimension") : e + } + + function Oh(t, e, i) { + i = i || {}, ko.isInstance(t) || (t = ko.seriesDataToSource(t)); + var n, r = e.get("coordinateSystem"), a = Ko.get(r), o = Ao(e); + o && (n = p(o.coordSysDims, function (t) { + var e = {name: t}, i = o.axisMap.get(t); + if (i) { + var n = i.get("type"); + e.type = fh(n) + } + return e + })), n || (n = a && (a.getDimensionsInfo ? a.getDimensionsInfo() : a.dimensions.slice()) || ["x", "y"]); + var s, l, h = Vw(t, {coordDimensions: n, generateCoord: i.generateCoord}); + o && f(h, function (t, e) { + var i = t.coordDim, n = o.categoryAxisMap.get(i); + n && (null == s && (s = e), t.ordinalMeta = n.getOrdinalMeta()), null != t.otherDims.itemName && (l = !0) + }), l || null == s || (h[s].otherDims.itemName = 0); + var u = kh(e, h), c = new Bw(h, e); + c.setCalculationInfo(u); + var d = null != s && zh(t) ? function (t, e, i, n) { + return n === s ? i : this.defaultDimValueGetter(t, e, i, n) + } : null; + return c.hasItemOption = !1, c.initData(t, null, d), c + } + + function zh(t) { + if (t.sourceFormat === Ix) { + var e = Eh(t.data || []); + return null != e && !_(Vn(e)) + } + } + + function Eh(t) { + for (var e = 0; e < t.length && null == t[e];) e++; + return t[e] + } + + function Rh(t) { + this._setting = t || {}, this._extent = [1 / 0, -1 / 0], this._interval = 0, this.init && this.init.apply(this, arguments) + } + + function Bh(t) { + this.categories = t.categories || [], this._needCollect = t.needCollect, this._deduplication = t.deduplication, this._map + } + + function Nh(t) { + return t._map || (t._map = N(t.categories)) + } + + function Fh(t) { + return S(t) && null != t.value ? t.value : t + "" + } + + function Vh(t, e, i, n) { + var r = {}, a = t[1] - t[0], o = r.interval = so(a / e, !0); + null != i && i > o && (o = r.interval = i), null != n && o > n && (o = r.interval = n); + var s = r.intervalPrecision = Wh(o), + l = r.niceTickExtent = [Zw(Math.ceil(t[0] / o) * o, s), Zw(Math.floor(t[1] / o) * o, s)]; + return Hh(l, t), r + } + + function Wh(t) { + return Ja(t) + 2 + } + + function Gh(t, e, i) { + t[e] = Math.max(Math.min(t[e], i[1]), i[0]) + } + + function Hh(t, e) { + !isFinite(t[0]) && (t[0] = e[0]), !isFinite(t[1]) && (t[1] = e[1]), Gh(t, 0, e), Gh(t, 1, e), t[0] > t[1] && (t[0] = t[1]) + } + + function Zh(t, e, i, n) { + var r = []; + if (!t) return r; + var a = 1e4; + e[0] < i[0] && r.push(e[0]); + for (var o = i[0]; o <= i[1] && (r.push(o), o = Zw(o + t, n), o !== r[r.length - 1]);) if (r.length > a) return []; + return e[1] > (r.length ? r[r.length - 1] : i[1]) && r.push(e[1]), r + } + + function Xh(t) { + return t.get("stack") || jw + t.seriesIndex + } + + function Yh(t) { + return t.dim + t.index + } + + function jh(t) { + var e = [], i = t.axis, n = "axis0"; + if ("category" === i.type) { + for (var r = i.getBandWidth(), a = 0; a < t.count; a++) e.push(s({ + bandWidth: r, + axisKey: n, + stackId: jw + a + }, t)); + for (var o = $h(e), l = [], a = 0; a < t.count; a++) { + var h = o[n][jw + a]; + h.offsetCenter = h.offset + h.width / 2, l.push(h) + } + return l + } + } + + function qh(t, e) { + var i = []; + return e.eachSeriesByType(t, function (t) { + Jh(t) && !tu(t) && i.push(t) + }), i + } + + function Uh(t) { + var e = []; + return f(t, function (t) { + var i = t.getData(), n = t.coordinateSystem, r = n.getBaseAxis(), a = r.getExtent(), + o = "category" === r.type ? r.getBandWidth() : Math.abs(a[1] - a[0]) / i.count(), + s = Ua(t.get("barWidth"), o), l = Ua(t.get("barMaxWidth"), o), h = t.get("barGap"), + u = t.get("barCategoryGap"); + e.push({ + bandWidth: o, + barWidth: s, + barMaxWidth: l, + barGap: h, + barCategoryGap: u, + axisKey: Yh(r), + stackId: Xh(t) + }) + }), $h(e) + } + + function $h(t) { + var e = {}; + f(t, function (t) { + var i = t.axisKey, n = t.bandWidth, r = e[i] || { + bandWidth: n, + remainedWidth: n, + autoWidthCount: 0, + categoryGap: "20%", + gap: "30%", + stacks: {} + }, a = r.stacks; + e[i] = r; + var o = t.stackId; + a[o] || r.autoWidthCount++, a[o] = a[o] || {width: 0, maxWidth: 0}; + var s = t.barWidth; + s && !a[o].width && (a[o].width = s, s = Math.min(r.remainedWidth, s), r.remainedWidth -= s); + var l = t.barMaxWidth; + l && (a[o].maxWidth = l); + var h = t.barGap; + null != h && (r.gap = h); + var u = t.barCategoryGap; + null != u && (r.categoryGap = u) + }); + var i = {}; + return f(e, function (t, e) { + i[e] = {}; + var n = t.stacks, r = t.bandWidth, a = Ua(t.categoryGap, r), o = Ua(t.gap, 1), s = t.remainedWidth, + l = t.autoWidthCount, h = (s - a) / (l + (l - 1) * o); + h = Math.max(h, 0), f(n, function (t) { + var e = t.maxWidth; + e && h > e && (e = Math.min(e, s), t.width && (e = Math.min(e, t.width)), s -= e, t.width = e, l--) + }), h = (s - a) / (l + (l - 1) * o), h = Math.max(h, 0); + var u, c = 0; + f(n, function (t) { + t.width || (t.width = h), u = t, c += t.width * (1 + o) + }), u && (c -= u.width * o); + var d = -c / 2; + f(n, function (t, n) { + i[e][n] = i[e][n] || {offset: d, width: t.width}, d += t.width * (1 + o) + }) + }), i + } + + function Kh(t, e, i) { + if (t && e) { + var n = t[Yh(e)]; + return null != n && null != i && (n = n[Xh(i)]), n + } + } + + function Qh(t, e) { + var i = qh(t, e), n = Uh(i), r = {}; + f(i, function (t) { + var e = t.getData(), i = t.coordinateSystem, a = i.getBaseAxis(), o = Xh(t), s = n[Yh(a)][o], l = s.offset, + h = s.width, u = i.getOtherAxis(a), c = t.get("barMinHeight") || 0; + r[o] = r[o] || [], e.setLayout({offset: l, size: h}); + for (var d = e.mapDimension(u.dim), f = e.mapDimension(a.dim), p = Ph(e, d), g = u.isHorizontal(), v = eu(a, u, p), m = 0, y = e.count(); y > m; m++) { + var x = e.get(d, m), _ = e.get(f, m); + if (!isNaN(x)) { + var w = x >= 0 ? "p" : "n", b = v; + p && (r[o][_] || (r[o][_] = {p: v, n: v}), b = r[o][_][w]); + var S, M, I, T; + if (g) { + var C = i.dataToPoint([x, _]); + S = b, M = C[1] + l, I = C[0] - v, T = h, Math.abs(I) < c && (I = (0 > I ? -1 : 1) * c), p && (r[o][_][w] += I) + } else { + var C = i.dataToPoint([_, x]); + S = C[0] + l, M = b, I = h, T = C[1] - v, Math.abs(T) < c && (T = (0 >= T ? -1 : 1) * c), p && (r[o][_][w] += T) + } + e.setItemLayout(m, {x: S, y: M, width: I, height: T}) + } + } + }, this) + } + + function Jh(t) { + return t.coordinateSystem && "cartesian2d" === t.coordinateSystem.type + } + + function tu(t) { + return t.pipelineContext && t.pipelineContext.large + } + + function eu(t, e) { + var i, n, r = e.getGlobalExtent(); + r[0] > r[1] ? (i = r[1], n = r[0]) : (i = r[0], n = r[1]); + var a = e.toGlobalCoord(e.dataToCoord(0)); + return i > a && (a = i), a > n && (a = n), a + } + + function iu(t, e) { + return ub(t, hb(e)) + } + + function nu(t, e) { + var i, n, r, a = t.type, o = e.getMin(), s = e.getMax(), l = null != o, h = null != s, u = t.getExtent(); + "ordinal" === a ? i = e.getCategories().length : (n = e.get("boundaryGap"), _(n) || (n = [n || 0, n || 0]), "boolean" == typeof n[0] && (n = [0, 0]), n[0] = Ua(n[0], 1), n[1] = Ua(n[1], 1), r = u[1] - u[0] || Math.abs(u[0])), null == o && (o = "ordinal" === a ? i ? 0 : 0 / 0 : u[0] - n[0] * r), null == s && (s = "ordinal" === a ? i ? i - 1 : 0 / 0 : u[1] + n[1] * r), "dataMin" === o ? o = u[0] : "function" == typeof o && (o = o({ + min: u[0], + max: u[1] + })), "dataMax" === s ? s = u[1] : "function" == typeof s && (s = s({ + min: u[0], + max: u[1] + })), (null == o || !isFinite(o)) && (o = 0 / 0), (null == s || !isFinite(s)) && (s = 0 / 0), t.setBlank(C(o) || C(s) || "ordinal" === a && !t.getOrdinalMeta().categories.length), e.getNeedCrossZero() && (o > 0 && s > 0 && !l && (o = 0), 0 > o && 0 > s && !h && (s = 0)); + var c = e.ecModel; + if (c && "time" === a) { + var d, p = qh("bar", c); + if (f(p, function (t) { + d |= t.getBaseAxis() === e.axis + }), d) { + var g = Uh(p), v = ru(o, s, e, g); + o = v.min, s = v.max + } + } + return [o, s] + } + + function ru(t, e, i, n) { + var r = i.axis.getExtent(), a = r[1] - r[0], o = Kh(n, i.axis); + if (void 0 === o) return {min: t, max: e}; + var s = 1 / 0; + f(o, function (t) { + s = Math.min(t.offset, s) + }); + var l = -1 / 0; + f(o, function (t) { + l = Math.max(t.offset + t.width, l) + }), s = Math.abs(s), l = Math.abs(l); + var h = s + l, u = e - t, c = 1 - (s + l) / a, d = u / c - u; + return e += d * (l / h), t -= d * (s / h), {min: t, max: e} + } + + function au(t, e) { + var i = nu(t, e), n = null != e.getMin(), r = null != e.getMax(), a = e.get("splitNumber"); + "log" === t.type && (t.base = e.get("logBase")); + var o = t.type; + t.setExtent(i[0], i[1]), t.niceExtent({ + splitNumber: a, + fixMin: n, + fixMax: r, + minInterval: "interval" === o || "time" === o ? e.get("minInterval") : null, + maxInterval: "interval" === o || "time" === o ? e.get("maxInterval") : null + }); + var s = e.get("interval"); + null != s && t.setInterval && t.setInterval(s) + } + + function ou(t, e) { + if (e = e || t.get("type")) switch (e) { + case"category": + return new Hw(t.getOrdinalMeta ? t.getOrdinalMeta() : t.getCategories(), [1 / 0, -1 / 0]); + case"value": + return new Yw; + default: + return (Rh.getClass(e) || Yw).create(t) + } + } + + function su(t) { + var e = t.scale.getExtent(), i = e[0], n = e[1]; + return !(i > 0 && n > 0 || 0 > i && 0 > n) + } + + function lu(t) { + var e = t.getLabelModel().get("formatter"), i = "category" === t.type ? t.scale.getExtent()[0] : null; + return "string" == typeof e ? e = function (e) { + return function (i) { + return i = t.scale.getLabel(i), e.replace("{value}", null != i ? i : "") + } + }(e) : "function" == typeof e ? function (n, r) { + return null != i && (r = n - i), e(hu(t, n), r) + } : function (e) { + return t.scale.getLabel(e) + } + } + + function hu(t, e) { + return "category" === t.type ? t.scale.getLabel(e) : e + } + + function uu(t) { + var e = t.model, i = t.scale; + if (e.get("axisLabel.show") && !i.isBlank()) { + var n, r, a = "category" === t.type, o = i.getExtent(); + a ? r = i.count() : (n = i.getTicks(), r = n.length); + var s, l = t.getLabelModel(), h = lu(t), u = 1; + r > 40 && (u = Math.ceil(r / 40)); + for (var c = 0; r > c; c += u) { + var d = n ? n[c] : o[0] + c, f = h(d), p = l.getTextRect(f), g = cu(p, l.get("rotate") || 0); + s ? s.union(g) : s = g + } + return s + } + } + + function cu(t, e) { + var i = e * Math.PI / 180, n = t.plain(), r = n.width, a = n.height, o = r * Math.cos(i) + a * Math.sin(i), + s = r * Math.sin(i) + a * Math.cos(i), l = new gi(n.x, n.y, o, s); + return l + } + + function du(t, e) { + if ("image" !== this.type) { + var i = this.style, n = this.shape; + n && "line" === n.symbolType ? i.stroke = t : this.__isEmptyBrush ? (i.stroke = t, i.fill = e || "#fff") : (i.fill && (i.fill = t), i.stroke && (i.stroke = t)), this.dirty(!1) + } + } + + function fu(t, e, i, n, r, a, o) { + var s = 0 === t.indexOf("empty"); + s && (t = t.substr(5, 1).toLowerCase() + t.substr(6)); + var l; + return l = 0 === t.indexOf("image://") ? Jr(t.slice(8), new gi(e, i, n, r), o ? "center" : "cover") : 0 === t.indexOf("path://") ? Qr(t.slice(7), {}, new gi(e, i, n, r), o ? "center" : "cover") : new Mb({ + shape: { + symbolType: t, + x: e, + y: i, + width: n, + height: r + } + }), l.__isEmptyBrush = s, l.setColor = du, l.setColor(a), l + } + + function pu(t) { + return Oh(t.getSource(), t) + } + + function gu(t, e) { + var i = e; + Wa.isInstance(e) || (i = new Wa(e), c(i, vb)); + var n = ou(i); + return n.setExtent(t[0], t[1]), au(n, i), n + } + + function vu(t) { + c(t, vb) + } + + function mu(t, e) { + return Math.abs(t - e) < Cb + } + + function yu(t, e, i) { + var n = 0, r = t[0]; + if (!r) return !1; + for (var a = 1; a < t.length; a++) { + var o = t[a]; + n += kr(r[0], r[1], o[0], o[1], e, i), r = o + } + var s = t[0]; + return mu(r[0], s[0]) && mu(r[1], s[1]) || (n += kr(r[0], r[1], s[0], s[1], e, i)), 0 !== n + } + + function xu(t, e, i) { + if (this.name = t, this.geometries = e, i) i = [i[0], i[1]]; else { + var n = this.getBoundingRect(); + i = [n.x + n.width / 2, n.y + n.height / 2] + } + this.center = i + } + + function _u(t) { + if (!t.UTF8Encoding) return t; + var e = t.UTF8Scale; + null == e && (e = 1024); + for (var i = t.features, n = 0; n < i.length; n++) for (var r = i[n], a = r.geometry, o = a.coordinates, s = a.encodeOffsets, l = 0; l < o.length; l++) { + var h = o[l]; + if ("Polygon" === a.type) o[l] = wu(h, s[l], e); else if ("MultiPolygon" === a.type) for (var u = 0; u < h.length; u++) { + var c = h[u]; + h[u] = wu(c, s[l][u], e) + } + } + return t.UTF8Encoding = !1, t + } + + function wu(t, e, i) { + for (var n = [], r = e[0], a = e[1], o = 0; o < t.length; o += 2) { + var s = t.charCodeAt(o) - 64, l = t.charCodeAt(o + 1) - 64; + s = s >> 1 ^ -(1 & s), l = l >> 1 ^ -(1 & l), s += r, l += a, r = s, a = l, n.push([s / i, l / i]) + } + return n + } + + function bu(t) { + return "category" === t.type ? Mu(t) : Cu(t) + } + + function Su(t, e) { + return "category" === t.type ? Tu(t, e) : {ticks: t.scale.getTicks()} + } + + function Mu(t) { + var e = t.getLabelModel(), i = Iu(t, e); + return !e.get("show") || t.scale.isBlank() ? {labels: [], labelCategoryInterval: i.labelCategoryInterval} : i + } + + function Iu(t, e) { + var i = Au(t, "labels"), n = Ru(e), r = Du(i, n); + if (r) return r; + var a, o; + return w(n) ? a = Eu(t, n) : (o = "auto" === n ? Pu(t) : n, a = zu(t, o)), ku(i, n, { + labels: a, + labelCategoryInterval: o + }) + } + + function Tu(t, e) { + var i = Au(t, "ticks"), n = Ru(e), r = Du(i, n); + if (r) return r; + var a, o; + if ((!e.get("show") || t.scale.isBlank()) && (a = []), w(n)) a = Eu(t, n, !0); else if ("auto" === n) { + var s = Iu(t, t.getLabelModel()); + o = s.labelCategoryInterval, a = p(s.labels, function (t) { + return t.tickValue + }) + } else o = n, a = zu(t, o, !0); + return ku(i, n, {ticks: a, tickCategoryInterval: o}) + } + + function Cu(t) { + var e = t.scale.getTicks(), i = lu(t); + return { + labels: p(e, function (e, n) { + return {formattedLabel: i(e, n), rawLabel: t.scale.getLabel(e), tickValue: e} + }) + } + } + + function Au(t, e) { + return Db(t)[e] || (Db(t)[e] = []) + } + + function Du(t, e) { + for (var i = 0; i < t.length; i++) if (t[i].key === e) return t[i].value + } + + function ku(t, e, i) { + return t.push({key: e, value: i}), i + } + + function Pu(t) { + var e = Db(t).autoInterval; + return null != e ? e : Db(t).autoInterval = t.calculateCategoryInterval() + } + + function Lu(t) { + var e = Ou(t), i = lu(t), n = (e.axisRotate - e.labelRotate) / 180 * Math.PI, r = t.scale, a = r.getExtent(), + o = r.count(); + if (a[1] - a[0] < 1) return 0; + var s = 1; + o > 40 && (s = Math.max(1, Math.floor(o / 40))); + for (var l = a[0], h = t.dataToCoord(l + 1) - t.dataToCoord(l), u = Math.abs(h * Math.cos(n)), c = Math.abs(h * Math.sin(n)), d = 0, f = 0; l <= a[1]; l += s) { + var p = 0, g = 0, v = Ei(i(l), e.font, "center", "top"); + p = 1.3 * v.width, g = 1.3 * v.height, d = Math.max(d, p, 7), f = Math.max(f, g, 7) + } + var m = d / u, y = f / c; + isNaN(m) && (m = 1 / 0), isNaN(y) && (y = 1 / 0); + var x = Math.max(0, Math.floor(Math.min(m, y))), _ = Db(t.model), w = _.lastAutoInterval, b = _.lastTickCount; + return null != w && null != b && Math.abs(w - x) <= 1 && Math.abs(b - o) <= 1 && w > x ? x = w : (_.lastTickCount = o, _.lastAutoInterval = x), x + } + + function Ou(t) { + var e = t.getLabelModel(); + return { + axisRotate: t.getRotate ? t.getRotate() : t.isHorizontal && !t.isHorizontal() ? 90 : 0, + labelRotate: e.get("rotate") || 0, + font: e.getFont() + } + } + + function zu(t, e, i) { + function n(t) { + l.push(i ? t : {formattedLabel: r(t), rawLabel: a.getLabel(t), tickValue: t}) + } + + var r = lu(t), a = t.scale, o = a.getExtent(), s = t.getLabelModel(), l = [], h = Math.max((e || 0) + 1, 1), + u = o[0], c = a.count(); + 0 !== u && h > 1 && c / h > 2 && (u = Math.round(Math.ceil(u / h) * h)); + var d = {min: s.get("showMinLabel"), max: s.get("showMaxLabel")}; + d.min && u !== o[0] && n(o[0]); + for (var f = u; f <= o[1]; f += h) n(f); + return d.max && f !== o[1] && n(o[1]), l + } + + function Eu(t, e, i) { + var n = t.scale, r = lu(t), a = []; + return f(n.getTicks(), function (t) { + var o = n.getLabel(t); + e(t, o) && a.push(i ? t : {formattedLabel: r(t), rawLabel: o, tickValue: t}) + }), a + } + + function Ru(t) { + var e = t.get("interval"); + return null == e ? "auto" : e + } + + function Bu(t, e) { + var i = t[1] - t[0], n = e, r = i / n / 2; + t[0] += r, t[1] -= r + } + + function Nu(t, e, i, n, r) { + function a(t, e) { + return u ? t > e : e > t + } + + var o = e.length; + if (t.onBand && !n && o) { + var s, l = t.getExtent(); + if (1 === o) e[0].coord = l[0], s = e[1] = {coord: l[0]}; else { + var h = e[1].coord - e[0].coord; + f(e, function (t) { + t.coord -= h / 2; + var e = e || 0; + e % 2 > 0 && (t.coord -= h / (2 * (e + 1))) + }), s = {coord: e[o - 1].coord + h}, e.push(s) + } + var u = l[0] > l[1]; + a(e[0].coord, l[0]) && (r ? e[0].coord = l[0] : e.shift()), r && a(l[0], e[0].coord) && e.unshift({coord: l[0]}), a(l[1], s.coord) && (r ? s.coord = l[1] : e.pop()), r && a(s.coord, l[1]) && e.push({coord: l[1]}) + } + } + + function Fu(t) { + return this._axes[t] + } + + function Vu(t) { + Eb.call(this, t) + } + + function Wu(t, e) { + return e.type || (e.data ? "category" : "value") + } + + function Gu(t, e) { + return t.getCoordSysModel() === e + } + + function Hu(t, e, i) { + this._coordsMap = {}, this._coordsList = [], this._axesMap = {}, this._axesList = [], this._initCartesian(t, e, i), this.model = t + } + + function Zu(t, e, i, n) { + function r(t) { + return t.dim + "_" + t.index + } + + i.getAxesOnZeroOf = function () { + return a ? [a] : [] + }; + var a, o = t[e], s = i.model, l = s.get("axisLine.onZero"), h = s.get("axisLine.onZeroAxisIndex"); + if (l) { + if (null != h) Xu(o[h]) && (a = o[h]); else for (var u in o) if (o.hasOwnProperty(u) && Xu(o[u]) && !n[r(o[u])]) { + a = o[u]; + break + } + a && (n[r(a)] = !0) + } + } + + function Xu(t) { + return t && "category" !== t.type && "time" !== t.type && su(t) + } + + function Yu(t, e) { + var i = t.getExtent(), n = i[0] + i[1]; + t.toGlobalCoord = "x" === t.dim ? function (t) { + return t + e + } : function (t) { + return n - t + e + }, t.toLocalCoord = "x" === t.dim ? function (t) { + return t - e + } : function (t) { + return n - t + e + } + } + + function ju(t) { + return p(Zb, function (e) { + var i = t.getReferringComponents(e)[0]; + return i + }) + } + + function qu(t) { + return "cartesian2d" === t.get("coordinateSystem") + } + + function Uu(t, e) { + var i = t.mapDimension("defaultedLabel", !0), n = i.length; + if (1 === n) return Ss(t, e, i[0]); + if (n) { + for (var r = [], a = 0; a < i.length; a++) { + var o = Ss(t, e, i[a]); + r.push(o) + } + return r.join(" ") + } + } + + function $u(t, e, i, n, r, a) { + var o = i.getModel("label"), s = i.getModel("emphasis.label"); + wa(t, e, o, s, { + labelFetcher: r, + labelDataIndex: a, + defaultText: Uu(r.getData(), a), + isRectText: !0, + autoColor: n + }), Ku(t), Ku(e) + } + + function Ku(t, e) { + "outside" === t.textPosition && (t.textPosition = e) + } + + function Qu(t, e, i) { + i.style.text = null, La(i, {shape: {width: 0}}, e, t, function () { + i.parent && i.parent.remove(i) + }) + } + + function Ju(t, e, i) { + i.style.text = null, La(i, {shape: {r: i.shape.r0}}, e, t, function () { + i.parent && i.parent.remove(i) + }) + } + + function tc(t, e, i, n, r, a, o, l) { + var h = e.getItemVisual(i, "color"), u = e.getItemVisual(i, "opacity"), c = n.getModel("itemStyle"), + d = n.getModel("emphasis.itemStyle").getBarItemStyle(); + l || t.setShape("r", c.get("barBorderRadius") || 0), t.useStyle(s({fill: h, opacity: u}, c.getBarItemStyle())); + var f = n.getShallow("cursor"); + f && t.attr("cursor", f); + var p = o ? r.height > 0 ? "bottom" : "top" : r.width > 0 ? "left" : "right"; + l || $u(t.style, d, n, h, a, i, p), xa(t, d) + } + + function ec(t, e) { + var i = t.get(qb) || 0; + return Math.min(i, Math.abs(e.width), Math.abs(e.height)) + } + + function ic(t, e, i) { + var n = t.getData(), r = [], a = n.getLayout("valueAxisHorizontal") ? 1 : 0; + r[1 - a] = n.getLayout("valueAxisStart"); + var o = new Kb({shape: {points: n.getLayout("largePoints")}, incremental: !!i, __startPoint: r, __valueIdx: a}); + e.add(o), nc(o, t, n) + } + + function nc(t, e, i) { + var n = i.getVisual("borderColor") || i.getVisual("color"), + r = e.getModel("itemStyle").getItemStyle(["color", "borderColor"]); + t.useStyle(r), t.style.fill = null, t.style.stroke = n, t.style.lineWidth = i.getLayout("barWidth") + } + + function rc(t) { + var e = {componentType: t.mainType, componentIndex: t.componentIndex}; + return e[t.mainType + "Index"] = t.componentIndex, e + } + + function ac(t, e, i, n) { + var r, a, o = io(i - t.rotation), s = n[0] > n[1], l = "start" === e && !s || "start" !== e && s; + return no(o - Qb / 2) ? (a = l ? "bottom" : "top", r = "center") : no(o - 1.5 * Qb) ? (a = l ? "top" : "bottom", r = "center") : (a = "middle", r = 1.5 * Qb > o && o > Qb / 2 ? l ? "left" : "right" : l ? "right" : "left"), { + rotation: o, + textAlign: r, + textVerticalAlign: a + } + } + + function oc(t) { + var e = t.get("tooltip"); + return t.get("silent") || !(t.get("triggerEvent") || e && e.show) + } + + function sc(t, e, i) { + var n = t.get("axisLabel.showMinLabel"), r = t.get("axisLabel.showMaxLabel"); + e = e || [], i = i || []; + var a = e[0], o = e[1], s = e[e.length - 1], l = e[e.length - 2], h = i[0], u = i[1], c = i[i.length - 1], + d = i[i.length - 2]; + n === !1 ? (lc(a), lc(h)) : hc(a, o) && (n ? (lc(o), lc(u)) : (lc(a), lc(h))), r === !1 ? (lc(s), lc(c)) : hc(l, s) && (r ? (lc(l), lc(d)) : (lc(s), lc(c))) + } + + function lc(t) { + t && (t.ignore = !0) + } + + function hc(t, e) { + var i = t && t.getBoundingRect().clone(), n = e && e.getBoundingRect().clone(); + if (i && n) { + var r = Se([]); + return Ce(r, r, -t.rotation), i.applyTransform(Ie([], r, t.getLocalTransform())), n.applyTransform(Ie([], r, e.getLocalTransform())), i.intersect(n) + } + } + + function uc(t) { + return "middle" === t || "center" === t + } + + function cc(t, e, i) { + var n = e.axis; + if (e.get("axisTick.show") && !n.scale.isBlank()) { + for (var r = e.getModel("axisTick"), a = r.getModel("lineStyle"), o = r.get("length"), l = n.getTicksCoords(), h = [], u = [], c = t._transform, d = [], f = 0; f < l.length; f++) { + var p = l[f].coord; + h[0] = p, h[1] = 0, u[0] = p, u[1] = i.tickDirection * o, c && (ae(h, h, c), ae(u, u, c)); + var g = new ky(ia({ + anid: "tick_" + l[f].tickValue, + shape: {x1: h[0], y1: h[1], x2: u[0], y2: u[1]}, + style: s(a.getLineStyle(), {stroke: e.get("axisLine.lineStyle.color")}), + z2: 2, + silent: !0 + })); + t.group.add(g), d.push(g) + } + return d + } + } + + function dc(t, e, i) { + var n = e.axis, r = A(i.axisLabelShow, e.get("axisLabel.show")); + if (r && !n.scale.isBlank()) { + var a = e.getModel("axisLabel"), o = a.get("margin"), s = n.getViewLabels(), + l = (A(i.labelRotate, a.get("rotate")) || 0) * Qb / 180, h = eS(i.rotation, l, i.labelDirection), + u = e.getCategories(!0), c = [], d = oc(e), p = e.get("triggerEvent"); + return f(s, function (r, s) { + var l = r.tickValue, f = r.formattedLabel, g = r.rawLabel, v = a; + u && u[l] && u[l].textStyle && (v = new Wa(u[l].textStyle, a, e.ecModel)); + var m = v.getTextColor() || e.get("axisLine.lineStyle.color"), y = n.dataToCoord(l), + x = [y, i.labelOffset + i.labelDirection * o], + _ = new xy({anid: "label_" + l, position: x, rotation: h.rotation, silent: d, z2: 10}); + ba(_.style, v, { + text: f, + textAlign: v.getShallow("align", !0) || h.textAlign, + textVerticalAlign: v.getShallow("verticalAlign", !0) || v.getShallow("baseline", !0) || h.textVerticalAlign, + textFill: "function" == typeof m ? m("category" === n.type ? g : "value" === n.type ? l + "" : l, s) : m + }), p && (_.eventData = rc(e), _.eventData.targetType = "axisLabel", _.eventData.value = g), t._dumbGroup.add(_), _.updateTransform(), c.push(_), t.group.add(_), _.decomposeTransform() + }), c + } + } + + function fc(t, e) { + var i = {axesInfo: {}, seriesInvolved: !1, coordSysAxesInfo: {}, coordSysMap: {}}; + return pc(i, t, e), i.seriesInvolved && vc(i, t), i + } + + function pc(t, e, i) { + var n = e.getComponent("tooltip"), r = e.getComponent("axisPointer"), a = r.get("link", !0) || [], o = []; + iS(i.getCoordinateSystems(), function (i) { + function s(n, s, l) { + var u = l.model.getModel("axisPointer", r), d = u.get("show"); + if (d && ("auto" !== d || n || bc(u))) { + null == s && (s = u.get("triggerTooltip")), u = n ? gc(l, c, r, e, n, s) : u; + var f = u.get("snap"), p = Sc(l.model), g = s || f || "category" === l.type, v = t.axesInfo[p] = { + key: p, + axis: l, + coordSys: i, + axisPointerModel: u, + triggerTooltip: s, + involveSeries: g, + snap: f, + useHandle: bc(u), + seriesModels: [] + }; + h[p] = v, t.seriesInvolved |= g; + var m = mc(a, l); + if (null != m) { + var y = o[m] || (o[m] = {axesInfo: {}}); + y.axesInfo[p] = v, y.mapper = a[m].mapper, v.linkGroup = y + } + } + } + + if (i.axisPointerEnabled) { + var l = Sc(i.model), h = t.coordSysAxesInfo[l] = {}; + t.coordSysMap[l] = i; + var u = i.model, c = u.getModel("tooltip", n); + if (iS(i.getAxes(), nS(s, !1, null)), i.getTooltipAxes && n && c.get("show")) { + var d = "axis" === c.get("trigger"), f = "cross" === c.get("axisPointer.type"), + p = i.getTooltipAxes(c.get("axisPointer.axis")); + (d || f) && iS(p.baseAxes, nS(s, f ? "cross" : !0, d)), f && iS(p.otherAxes, nS(s, "cross", !1)) + } + } + }) + } + + function gc(t, e, i, r, a, o) { + var l = e.getModel("axisPointer"), h = {}; + iS(["type", "snap", "lineStyle", "shadowStyle", "label", "animation", "animationDurationUpdate", "animationEasingUpdate", "z"], function (t) { + h[t] = n(l.get(t)) + }), h.snap = "category" !== t.type && !!o, "cross" === l.get("type") && (h.type = "line"); + var u = h.label || (h.label = {}); + if (null == u.show && (u.show = !1), "cross" === a) { + var c = l.get("label.show"); + if (u.show = null != c ? c : !0, !o) { + var d = h.lineStyle = l.get("crossStyle"); + d && s(u, d.textStyle) + } + } + return t.model.getModel("axisPointer", new Wa(h, i, r)) + } + + function vc(t, e) { + e.eachSeries(function (e) { + var i = e.coordinateSystem, n = e.get("tooltip.trigger", !0), r = e.get("tooltip.show", !0); + i && "none" !== n && n !== !1 && "item" !== n && r !== !1 && e.get("axisPointer.show", !0) !== !1 && iS(t.coordSysAxesInfo[Sc(i.model)], function (t) { + var n = t.axis; + i.getAxis(n.dim) === n && (t.seriesModels.push(e), null == t.seriesDataCount && (t.seriesDataCount = 0), t.seriesDataCount += e.getData().count()) + }) + }, this) + } + + function mc(t, e) { + for (var i = e.model, n = e.dim, r = 0; r < t.length; r++) { + var a = t[r] || {}; + if (yc(a[n + "AxisId"], i.id) || yc(a[n + "AxisIndex"], i.componentIndex) || yc(a[n + "AxisName"], i.name)) return r + } + } + + function yc(t, e) { + return "all" === t || _(t) && h(t, e) >= 0 || t === e + } + + function xc(t) { + var e = _c(t); + if (e) { + var i = e.axisPointerModel, n = e.axis.scale, r = i.option, a = i.get("status"), o = i.get("value"); + null != o && (o = n.parse(o)); + var s = bc(i); + null == a && (r.status = s ? "show" : "hide"); + var l = n.getExtent().slice(); + l[0] > l[1] && l.reverse(), (null == o || o > l[1]) && (o = l[1]), o < l[0] && (o = l[0]), r.value = o, s && (r.status = e.axis.scale.isBlank() ? "hide" : "show") + } + } + + function _c(t) { + var e = (t.ecModel.getComponent("axisPointer") || {}).coordSysAxesInfo; + return e && e.axesInfo[Sc(t)] + } + + function wc(t) { + var e = _c(t); + return e && e.axisPointerModel + } + + function bc(t) { + return !!t.get("handle.show") + } + + function Sc(t) { + return t.type + "||" + t.id + } + + function Mc(t, e, i, n, r, a) { + var o = rS.getAxisPointerClass(t.axisPointerClass); + if (o) { + var s = wc(e); + s ? (t._axisPointer || (t._axisPointer = new o)).render(e, s, n, a) : Ic(t, n) + } + } + + function Ic(t, e, i) { + var n = t._axisPointer; + n && n.dispose(e, i), t._axisPointer = null + } + + function Tc(t, e, i) { + i = i || {}; + var n = t.coordinateSystem, r = e.axis, a = {}, o = r.getAxesOnZeroOf()[0], s = r.position, + l = o ? "onZero" : s, h = r.dim, u = n.getRect(), c = [u.x, u.x + u.width, u.y, u.y + u.height], + d = {left: 0, right: 1, top: 0, bottom: 1, onZero: 2}, f = e.get("offset") || 0, + p = "x" === h ? [c[2] - f, c[3] + f] : [c[0] - f, c[1] + f]; + if (o) { + var g = o.toGlobalCoord(o.dataToCoord(0)); + p[d.onZero] = Math.max(Math.min(g, p[1]), p[0]) + } + a.position = ["y" === h ? p[d[l]] : c[0], "x" === h ? p[d[l]] : c[3]], a.rotation = Math.PI / 2 * ("x" === h ? 0 : 1); + var v = {top: -1, bottom: 1, left: -1, right: 1}; + a.labelDirection = a.tickDirection = a.nameDirection = v[s], a.labelOffset = o ? p[d[s]] - p[d.onZero] : 0, e.get("axisTick.inside") && (a.tickDirection = -a.tickDirection), A(i.labelInside, e.get("axisLabel.inside")) && (a.labelDirection = -a.labelDirection); + var m = e.get("axisLabel.rotate"); + return a.labelRotate = "top" === l ? -m : m, a.z2 = 1, a + } + + function Cc(t, e, i) { + lv.call(this), this.updateData(t, e, i) + } + + function Ac(t) { + return [t[0] / 2, t[1] / 2] + } + + function Dc(t, e) { + this.parent.drift(t, e) + } + + function kc() { + !pa(this) && Lc.call(this) + } + + function Pc() { + !pa(this) && Oc.call(this) + } + + function Lc() { + if (!this.incremental && !this.useHoverLayer) { + var t = this.__symbolOriginalScale, e = t[1] / t[0]; + this.animateTo({scale: [Math.max(1.1 * t[0], t[0] + 3), Math.max(1.1 * t[1], t[1] + 3 * e)]}, 400, "elasticOut") + } + } + + function Oc() { + this.incremental || this.useHoverLayer || this.animateTo({scale: this.__symbolOriginalScale}, 400, "elasticOut") + } + + function zc(t) { + this.group = new lv, this._symbolCtor = t || Cc + } + + function Ec(t, e, i, n) { + return !(!e || isNaN(e[0]) || isNaN(e[1]) || n.isIgnore && n.isIgnore(i) || n.clipShape && !n.clipShape.contain(e[0], e[1]) || "none" === t.getItemVisual(i, "symbol")) + } + + function Rc(t) { + return null == t || S(t) || (t = {isIgnore: t}), t || {} + } + + function Bc(t) { + var e = t.hostModel; + return { + itemStyle: e.getModel("itemStyle").getItemStyle(["color"]), + hoverItemStyle: e.getModel("emphasis.itemStyle").getItemStyle(), + symbolRotate: e.get("symbolRotate"), + symbolOffset: e.get("symbolOffset"), + hoverAnimation: e.get("hoverAnimation"), + labelModel: e.getModel("label"), + hoverLabelModel: e.getModel("emphasis.label"), + cursorStyle: e.get("cursor") + } + } + + function Nc(t, e, i) { + var n, r = t.getBaseAxis(), a = t.getOtherAxis(r), o = Fc(a, i), s = r.dim, l = a.dim, h = e.mapDimension(l), + u = e.mapDimension(s), c = "x" === l || "radius" === l ? 1 : 0, d = p(t.dimensions, function (t) { + return e.mapDimension(t) + }), f = e.getCalculationInfo("stackResultDimension"); + return (n |= Ph(e, d[0])) && (d[0] = f), (n |= Ph(e, d[1])) && (d[1] = f), { + dataDimsForPoint: d, + valueStart: o, + valueAxisDim: l, + baseAxisDim: s, + stacked: !!n, + valueDim: h, + baseDim: u, + baseDataOffset: c, + stackedOverDimension: e.getCalculationInfo("stackedOverDimension") + } + } + + function Fc(t, e) { + var i = 0, n = t.scale.getExtent(); + return "start" === e ? i = n[0] : "end" === e ? i = n[1] : n[0] > 0 ? i = n[0] : n[1] < 0 && (i = n[1]), i + } + + function Vc(t, e, i, n) { + var r = 0 / 0; + t.stacked && (r = i.get(i.getCalculationInfo("stackedOverDimension"), n)), isNaN(r) && (r = t.valueStart); + var a = t.baseDataOffset, o = []; + return o[a] = i.get(t.baseDim, n), o[1 - a] = r, e.dataToPoint(o) + } + + function Wc(t, e) { + var i = []; + return e.diff(t).add(function (t) { + i.push({cmd: "+", idx: t}) + }).update(function (t, e) { + i.push({cmd: "=", idx: e, idx1: t}) + }).remove(function (t) { + i.push({cmd: "-", idx: t}) + }).execute(), i + } + + function Gc(t) { + return isNaN(t[0]) || isNaN(t[1]) + } + + function Hc(t, e, i, n, r, a, o, s, l, h) { + return "none" !== h && h ? Zc.apply(this, arguments) : Xc.apply(this, arguments) + } + + function Zc(t, e, i, n, r, a, o, s, l, h, u) { + for (var c = 0, d = i, f = 0; n > f; f++) { + var p = e[d]; + if (d >= r || 0 > d) break; + if (Gc(p)) { + if (u) { + d += a; + continue + } + break + } + if (d === i) t[a > 0 ? "moveTo" : "lineTo"](p[0], p[1]); else if (l > 0) { + var g = e[c], v = "y" === h ? 1 : 0, m = (p[v] - g[v]) * l; + _S(bS, g), bS[v] = g[v] + m, _S(SS, p), SS[v] = p[v] - m, t.bezierCurveTo(bS[0], bS[1], SS[0], SS[1], p[0], p[1]) + } else t.lineTo(p[0], p[1]); + c = d, d += a + } + return f + } + + function Xc(t, e, i, n, r, a, o, s, l, h, u) { + for (var c = 0, d = i, f = 0; n > f; f++) { + var p = e[d]; + if (d >= r || 0 > d) break; + if (Gc(p)) { + if (u) { + d += a; + continue + } + break + } + if (d === i) t[a > 0 ? "moveTo" : "lineTo"](p[0], p[1]), _S(bS, p); else if (l > 0) { + var g = d + a, v = e[g]; + if (u) for (; v && Gc(e[g]);) g += a, v = e[g]; + var m = .5, y = e[c], v = e[g]; + if (!v || Gc(v)) _S(SS, p); else { + Gc(v) && !u && (v = p), j(wS, v, y); + var x, _; + if ("x" === h || "y" === h) { + var w = "x" === h ? 0 : 1; + x = Math.abs(p[w] - y[w]), _ = Math.abs(p[w] - v[w]) + } else x = yg(p, y), _ = yg(p, v); + m = _ / (_ + x), xS(SS, p, wS, -l * (1 - m)) + } + mS(bS, bS, s), yS(bS, bS, o), mS(SS, SS, s), yS(SS, SS, o), t.bezierCurveTo(bS[0], bS[1], SS[0], SS[1], p[0], p[1]), xS(bS, p, wS, l * m) + } else t.lineTo(p[0], p[1]); + c = d, d += a + } + return f + } + + function Yc(t, e) { + var i = [1 / 0, 1 / 0], n = [-1 / 0, -1 / 0]; + if (e) for (var r = 0; r < t.length; r++) { + var a = t[r]; + a[0] < i[0] && (i[0] = a[0]), a[1] < i[1] && (i[1] = a[1]), a[0] > n[0] && (n[0] = a[0]), a[1] > n[1] && (n[1] = a[1]) + } + return {min: e ? i : n, max: e ? n : i} + } + + function jc(t, e) { + if (t.length === e.length) { + for (var i = 0; i < t.length; i++) { + var n = t[i], r = e[i]; + if (n[0] !== r[0] || n[1] !== r[1]) return + } + return !0 + } + } + + function qc(t) { + return "number" == typeof t ? t : t ? .5 : 0 + } + + function Uc(t) { + var e = t.getGlobalExtent(); + if (t.onBand) { + var i = t.getBandWidth() / 2 - 1, n = e[1] > e[0] ? 1 : -1; + e[0] += n * i, e[1] -= n * i + } + return e + } + + function $c(t, e, i) { + if (!i.valueDim) return []; + for (var n = [], r = 0, a = e.count(); a > r; r++) n.push(Vc(i, t, e, r)); + return n + } + + function Kc(t, e, i, n) { + var r = Uc(t.getAxis("x")), a = Uc(t.getAxis("y")), o = t.getBaseAxis().isHorizontal(), + s = Math.min(r[0], r[1]), l = Math.min(a[0], a[1]), h = Math.max(r[0], r[1]) - s, + u = Math.max(a[0], a[1]) - l; + if (i) s -= .5, h += .5, l -= .5, u += .5; else { + var c = n.get("lineStyle.width") || 2, d = n.get("clipOverflow") ? c / 2 : Math.max(h, u); + o ? (l -= d, u += 2 * d) : (s -= d, h += 2 * d) + } + var f = new Dy({shape: {x: s, y: l, width: h, height: u}}); + return e && (f.shape[o ? "width" : "height"] = 0, Oa(f, {shape: {width: h, height: u}}, n)), f + } + + function Qc(t, e, i, n) { + var r = t.getAngleAxis(), a = t.getRadiusAxis(), o = a.getExtent().slice(); + o[0] > o[1] && o.reverse(); + var s = r.getExtent(), l = Math.PI / 180; + i && (o[0] -= .5, o[1] += .5); + var h = new Sy({ + shape: { + cx: $a(t.cx, 1), + cy: $a(t.cy, 1), + r0: $a(o[0], 1), + r: $a(o[1], 1), + startAngle: -s[0] * l, + endAngle: -s[1] * l, + clockwise: r.inverse + } + }); + return e && (h.shape.endAngle = -s[0] * l, Oa(h, {shape: {endAngle: -s[1] * l}}, n)), h + } + + function Jc(t, e, i, n) { + return "polar" === t.type ? Qc(t, e, i, n) : Kc(t, e, i, n) + } + + function td(t, e, i) { + for (var n = e.getBaseAxis(), r = "x" === n.dim || "radius" === n.dim ? 0 : 1, a = [], o = 0; o < t.length - 1; o++) { + var s = t[o + 1], l = t[o]; + a.push(l); + var h = []; + switch (i) { + case"end": + h[r] = s[r], h[1 - r] = l[1 - r], a.push(h); + break; + case"middle": + var u = (l[r] + s[r]) / 2, c = []; + h[r] = c[r] = u, h[1 - r] = l[1 - r], c[1 - r] = s[1 - r], a.push(h), a.push(c); + break; + default: + h[r] = l[r], h[1 - r] = s[1 - r], a.push(h) + } + } + return t[o] && a.push(t[o]), a + } + + function ed(t, e) { + var i = t.getVisual("visualMeta"); + if (i && i.length && t.count() && "cartesian2d" === e.type) { + for (var n, r, a = i.length - 1; a >= 0; a--) { + var o = i[a].dimension, s = t.dimensions[o], l = t.getDimensionInfo(s); + if (n = l && l.coordDim, "x" === n || "y" === n) { + r = i[a]; + break + } + } + if (r) { + var h = e.getAxis(n), u = p(r.stops, function (t) { + return {coord: h.toGlobalCoord(h.dataToCoord(t.value)), color: t.color} + }), c = u.length, d = r.outerColors.slice(); + c && u[0].coord > u[c - 1].coord && (u.reverse(), d.reverse()); + var g = 10, v = u[0].coord - g, m = u[c - 1].coord + g, y = m - v; + if (.001 > y) return "transparent"; + f(u, function (t) { + t.offset = (t.coord - v) / y + }), u.push({ + offset: c ? u[c - 1].offset : .5, + color: d[1] || "transparent" + }), u.unshift({offset: c ? u[0].offset : .5, color: d[0] || "transparent"}); + var x = new Ry(0, 0, 0, 0, u, !0); + return x[n] = v, x[n + "2"] = m, x + } + } + } + + function id(t, e, i) { + var n = t.get("showAllSymbol"), r = "auto" === n; + if (!n || r) { + var a = i.getAxesByScale("ordinal")[0]; + if (a && (!r || !nd(a, e))) { + var o = e.mapDimension(a.dim), s = {}; + return f(a.getViewLabels(), function (t) { + s[t.tickValue] = 1 + }), function (t) { + return !s.hasOwnProperty(e.get(o, t)) + } + } + } + } + + function nd(t, e) { + var i = t.getExtent(), n = Math.abs(i[1] - i[0]) / t.scale.count(); + isNaN(n) && (n = 0); + for (var r = e.count(), a = Math.max(1, Math.round(r / 5)), o = 0; r > o; o += a) if (1.5 * Cc.getSymbolSize(e, o)[t.isHorizontal() ? 1 : 0] > n) return !1; + return !0 + } + + function rd(t, e, i, n) { + var r = e.getData(), a = this.dataIndex, o = r.getName(a), s = e.get("selectedOffset"); + n.dispatchAction({type: "pieToggleSelect", from: t, name: o, seriesId: e.id}), r.each(function (t) { + ad(r.getItemGraphicEl(t), r.getItemLayout(t), e.isSelected(r.getName(t)), s, i) + }) + } + + function ad(t, e, i, n, r) { + var a = (e.startAngle + e.endAngle) / 2, o = Math.cos(a), s = Math.sin(a), l = i ? n : 0, h = [o * l, s * l]; + r ? t.animate().when(200, {position: h}).start("bounceOut") : t.attr("position", h) + } + + function od(t, e) { + function i() { + a.ignore = a.hoverIgnore, o.ignore = o.hoverIgnore + } + + function n() { + a.ignore = a.normalIgnore, o.ignore = o.normalIgnore + } + + lv.call(this); + var r = new Sy({z2: 2}), a = new Ay, o = new xy; + this.add(r), this.add(a), this.add(o), this.updateData(t, e, !0), this.on("emphasis", i).on("normal", n).on("mouseover", i).on("mouseout", n) + } + + function sd(t, e, i, n, r, a, o) { + function s(e, i, n) { + for (var r = e; i > r; r++) if (t[r].y += n, r > e && i > r + 1 && t[r + 1].y > t[r].y + t[r].height) return void l(r, n / 2); + l(i - 1, n / 2) + } + + function l(e, i) { + for (var n = e; n >= 0 && (t[n].y -= i, !(n > 0 && t[n].y > t[n - 1].y + t[n - 1].height)); n--) ; + } + + function h(t, e, i, n, r, a) { + for (var o = a > 0 ? e ? Number.MAX_VALUE : 0 : e ? Number.MAX_VALUE : 0, s = 0, l = t.length; l > s; s++) if ("center" !== t[s].position) { + var h = Math.abs(t[s].y - n), u = t[s].len, c = t[s].len2, + d = r + u > h ? Math.sqrt((r + u + c) * (r + u + c) - h * h) : Math.abs(t[s].x - i); + e && d >= o && (d = o - 10), !e && o >= d && (d = o + 10), t[s].x = i + d * a, o = d + } + } + + t.sort(function (t, e) { + return t.y - e.y + }); + for (var u, c = 0, d = t.length, f = [], p = [], g = 0; d > g; g++) u = t[g].y - c, 0 > u && s(g, d, -u, r), c = t[g].y + t[g].height; + 0 > o - c && l(d - 1, c - o); + for (var g = 0; d > g; g++) t[g].y >= i ? p.push(t[g]) : f.push(t[g]); + h(f, !1, e, i, n, r), h(p, !0, e, i, n, r) + } + + function ld(t, e, i, n, r, a) { + for (var o = [], s = [], l = 0; l < t.length; l++) t[l].x < e ? o.push(t[l]) : s.push(t[l]); + sd(s, e, i, n, 1, r, a), sd(o, e, i, n, -1, r, a); + for (var l = 0; l < t.length; l++) { + var h = t[l].linePoints; + if (h) { + var u = h[1][0] - h[2][0]; + h[2][0] = t[l].x < e ? t[l].x + 3 : t[l].x - 3, h[1][1] = h[2][1] = t[l].y, h[1][0] = h[2][0] + u + } + } + } + + function hd(t, e) { + return e = e || [0, 0], p(["x", "y"], function (i, n) { + var r = this.getAxis(i), a = e[n], o = t[n] / 2; + return "category" === r.type ? r.getBandWidth() : Math.abs(r.dataToCoord(a - o) - r.dataToCoord(a + o)) + }, this) + } + + function ud(t, e) { + return e = e || [0, 0], p([0, 1], function (i) { + var n = e[i], r = t[i] / 2, a = [], o = []; + return a[i] = n - r, o[i] = n + r, a[1 - i] = o[1 - i] = e[1 - i], Math.abs(this.dataToPoint(a)[i] - this.dataToPoint(o)[i]) + }, this) + } + + function cd(t, e) { + var i = this.getAxis(), n = e instanceof Array ? e[0] : e, r = (t instanceof Array ? t[0] : t) / 2; + return "category" === i.type ? i.getBandWidth() : Math.abs(i.dataToCoord(n - r) - i.dataToCoord(n + r)) + } + + function dd(t, e) { + return p(["Radius", "Angle"], function (i, n) { + var r = this["get" + i + "Axis"](), a = e[n], o = t[n] / 2, s = "dataTo" + i, + l = "category" === r.type ? r.getBandWidth() : Math.abs(r[s](a - o) - r[s](a + o)); + return "Angle" === i && (l = l * Math.PI / 180), l + }, this) + } + + function fd(t) { + var e, i = t.type; + if ("path" === i) { + var n = t.shape, r = null != n.width && null != n.height ? { + x: n.x || 0, + y: n.y || 0, + width: n.width, + height: n.height + } : null, a = Id(n); + e = Qr(a, null, r, n.layout || "center"), e.__customPathData = a + } else if ("image" === i) e = new yn({}), e.__customImagePath = t.style.image; else if ("text" === i) e = new xy({}), e.__customText = t.style.text; else { + var o = Yy[i.charAt(0).toUpperCase() + i.slice(1)]; + e = new o + } + return e.__customGraphicType = i, e.name = t.name, e + } + + function pd(t, e, i, r, a, o, s) { + var l = {}, h = i.style || {}; + if (i.shape && (l.shape = n(i.shape)), i.position && (l.position = i.position.slice()), i.scale && (l.scale = i.scale.slice()), i.origin && (l.origin = i.origin.slice()), i.rotation && (l.rotation = i.rotation), "image" === t.type && i.style) { + var u = l.style = {}; + f(["x", "y", "width", "height"], function (e) { + gd(e, u, h, t.style, o) + }) + } + if ("text" === t.type && i.style) { + var u = l.style = {}; + f(["x", "y"], function (e) { + gd(e, u, h, t.style, o) + }), !h.hasOwnProperty("textFill") && h.fill && (h.textFill = h.fill), !h.hasOwnProperty("textStroke") && h.stroke && (h.textStroke = h.stroke) + } + if ("group" !== t.type && (t.useStyle(h), o)) { + t.style.opacity = 0; + var c = h.opacity; + null == c && (c = 1), Oa(t, {style: {opacity: c}}, r, e) + } + o ? t.attr(l) : La(t, l, r, e), i.hasOwnProperty("z2") && t.attr("z2", i.z2 || 0), i.hasOwnProperty("silent") && t.attr("silent", i.silent), i.hasOwnProperty("invisible") && t.attr("invisible", i.invisible), i.hasOwnProperty("ignore") && t.attr("ignore", i.ignore), i.hasOwnProperty("info") && t.attr("info", i.info); + var d = i.styleEmphasis, p = d === !1; + t.__cusHasEmphStl && null == d || !t.__cusHasEmphStl && p || (fa(t, d), t.__cusHasEmphStl = !p), s && _a(t, !p) + } + + function gd(t, e, i, n, r) { + null == i[t] || r || (e[t] = i[t], i[t] = n[t]) + } + + function vd(t, e, i, n) { + function r(t) { + null == t && (t = m), M && (y = e.getItemModel(t), x = y.getModel(US), _ = y.getModel($S), w = e.getItemVisual(t, "color"), M = !1) + } + + function a(t, i) { + return null == i && (i = m), e.get(e.getDimension(t || 0), i) + } + + function l(i, n) { + null == n && (n = m), r(n); + var a = y.getModel(jS).getItemStyle(); + null != w && (a.fill = w); + var s = e.getItemVisual(n, "opacity"); + return null != s && (a.opacity = s), ba(a, x, null, { + autoColor: w, + isRectText: !0 + }), a.text = x.getShallow("show") ? D(t.getFormattedLabel(n, "normal"), Uu(e, n)) : null, i && o(a, i), a + } + + function h(i, n) { + null == n && (n = m), r(n); + var a = y.getModel(qS).getItemStyle(); + return ba(a, _, null, {isRectText: !0}, !0), a.text = _.getShallow("show") ? k(t.getFormattedLabel(n, "emphasis"), t.getFormattedLabel(n, "normal"), Uu(e, n)) : null, i && o(a, i), a + } + + function u(t, i) { + return null == i && (i = m), e.getItemVisual(i, t) + } + + function c(t) { + if (g.getBaseAxis) { + var e = g.getBaseAxis(); + return jh(s({axis: e}, t), n) + } + } + + function d() { + return i.getCurrentSeriesIndices() + } + + function f(t) { + return ka(t, i) + } + + var p = t.get("renderItem"), g = t.coordinateSystem, v = {}; + g && (v = g.prepareCustoms ? g.prepareCustoms() : QS[g.type](g)); + var m, y, x, _, w, b = s({ + getWidth: n.getWidth, + getHeight: n.getHeight, + getZr: n.getZr, + getDevicePixelRatio: n.getDevicePixelRatio, + value: a, + style: l, + styleEmphasis: h, + visual: u, + barLayout: c, + currentSeriesIndices: d, + font: f + }, v.api || {}), S = { + context: {}, + seriesId: t.id, + seriesName: t.name, + seriesIndex: t.seriesIndex, + coordSys: v.coordSys, + dataInsideLength: e.count(), + encode: md(t.getData()) + }, M = !0; + return function (t, i) { + return m = t, M = !0, p && p(s({ + dataIndexInside: t, + dataIndex: e.getRawIndex(t), + actionType: i ? i.type : null + }, S), b) + } + } + + function md(t) { + var e = {}; + return f(t.dimensions, function (i, n) { + var r = t.getDimensionInfo(i); + if (!r.isExtraCoord) { + var a = r.coordDim, o = e[a] = e[a] || []; + o[r.coordDimIndex] = n + } + }), e + } + + function yd(t, e, i, n, r, a) { + return t = xd(t, e, i, n, r, a, !0), t && a.setItemGraphicEl(e, t), t + } + + function xd(t, e, i, n, r, a, o) { + var s = !i; + i = i || {}; + var l = i.type, h = i.shape, u = i.style; + if (t && (s || null != l && l !== t.__customGraphicType || "path" === l && Td(h) && Id(h) !== t.__customPathData || "image" === l && Cd(u, "image") && u.image !== t.__customImagePath || "text" === l && Cd(h, "text") && u.text !== t.__customText) && (r.remove(t), t = null), !s) { + var c = !t; + return !t && (t = fd(i)), pd(t, e, i, n, a, c, o), "group" === l && _d(t, e, i, n, a), r.add(t), t + } + } + + function _d(t, e, i, n, r) { + var a = i.children, o = a ? a.length : 0, s = i.$mergeChildren, l = "byName" === s || i.diffChildrenByName, + h = s === !1; + if (o || l || h) { + if (l) return void wd({ + oldChildren: t.children() || [], + newChildren: a || [], + dataIndex: e, + animatableModel: n, + group: t, + data: r + }); + h && t.removeAll(); + for (var u = 0; o > u; u++) a[u] && xd(t.childAt(u), e, a[u], n, t, r) + } + } + + function wd(t) { + new uh(t.oldChildren, t.newChildren, bd, bd, t).add(Sd).update(Sd).remove(Md).execute() + } + + function bd(t, e) { + var i = t && t.name; + return null != i ? i : KS + e + } + + function Sd(t, e) { + var i = this.context, n = null != t ? i.newChildren[t] : null, r = null != e ? i.oldChildren[e] : null; + xd(r, i.dataIndex, n, i.animatableModel, i.group, i.data) + } + + function Md(t) { + var e = this.context, i = e.oldChildren[t]; + i && e.group.remove(i) + } + + function Id(t) { + return t && (t.pathData || t.d) + } + + function Td(t) { + return t && (t.hasOwnProperty("pathData") || t.hasOwnProperty("d")) + } + + function Cd(t, e) { + return t && t.hasOwnProperty(e) + } + + function Ad(t, e, i) { + var n, r = {}, a = "toggleSelected" === t; + return i.eachComponent("legend", function (i) { + a && null != n ? i[n ? "select" : "unSelect"](e.name) : (i[t](e.name), n = i.isSelected(e.name)); + var o = i.getData(); + f(o, function (t) { + var e = t.get("name"); + if ("\n" !== e && "" !== e) { + var n = i.isSelected(e); + r[e] = r.hasOwnProperty(e) ? r[e] && n : n + } + }) + }), {name: e.name, selected: r} + } + + function Dd(t, e) { + var i = rx(e.get("padding")), n = e.getItemStyle(["color", "opacity"]); + n.fill = e.get("backgroundColor"); + var t = new Dy({ + shape: { + x: t.x - i[3], + y: t.y - i[0], + width: t.width + i[1] + i[3], + height: t.height + i[0] + i[2], + r: e.get("borderRadius") + }, style: n, silent: !0, z2: -1 + }); + return t + } + + function kd(t, e) { + e.dispatchAction({type: "legendToggleSelect", name: t}) + } + + function Pd(t, e, i, n) { + var r = i.getZr().storage.getDisplayList()[0]; + r && r.useHoverLayer || i.dispatchAction({type: "highlight", seriesName: t, name: e, excludeSeriesId: n}) + } + + function Ld(t, e, i, n) { + var r = i.getZr().storage.getDisplayList()[0]; + r && r.useHoverLayer || i.dispatchAction({type: "downplay", seriesName: t, name: e, excludeSeriesId: n}) + } + + function Od(t, e, i) { + var n = t.getOrient(), r = [1, 1]; + r[n.index] = 0, So(e, i, {type: "box", ignoreSize: r}) + } + + function zd(t, e, i, n, r) { + var a = t.axis; + if (!a.scale.isBlank() && a.containData(e)) { + if (!t.involveSeries) return void i.showPointer(t, e); + var s = Ed(e, t), l = s.payloadBatch, h = s.snapToValue; + l[0] && null == r.seriesIndex && o(r, l[0]), !n && t.snap && a.containData(h) && null != h && (e = h), i.showPointer(t, e, l, r), i.showTooltip(t, s, h) + } + } + + function Ed(t, e) { + var i = e.axis, n = i.dim, r = t, a = [], o = Number.MAX_VALUE, s = -1; + return cM(e.seriesModels, function (e) { + var l, h, u = e.getData().mapDimension(n, !0); + if (e.getAxisTooltipData) { + var c = e.getAxisTooltipData(u, t, i); + h = c.dataIndices, l = c.nestestValue + } else { + if (h = e.getData().indicesOfNearest(u[0], t, "category" === i.type ? .5 : null), !h.length) return; + l = e.getData().get(u[0], h[0]) + } + if (null != l && isFinite(l)) { + var d = t - l, f = Math.abs(d); + o >= f && ((o > f || d >= 0 && 0 > s) && (o = f, s = d, r = l, a.length = 0), cM(h, function (t) { + a.push({seriesIndex: e.seriesIndex, dataIndexInside: t, dataIndex: e.getData().getRawIndex(t)}) + })) + } + }), {payloadBatch: a, snapToValue: r} + } + + function Rd(t, e, i, n) { + t[e.key] = {value: i, payloadBatch: n} + } + + function Bd(t, e, i, n) { + var r = i.payloadBatch, a = e.axis, o = a.model, s = e.axisPointerModel; + if (e.triggerTooltip && r.length) { + var l = e.coordSys.model, h = Sc(l), u = t.map[h]; + u || (u = t.map[h] = { + coordSysId: l.id, + coordSysIndex: l.componentIndex, + coordSysType: l.type, + coordSysMainType: l.mainType, + dataByAxis: [] + }, t.list.push(u)), u.dataByAxis.push({ + axisDim: a.dim, + axisIndex: o.componentIndex, + axisType: o.type, + axisId: o.id, + value: n, + valueLabelOpt: {precision: s.get("label.precision"), formatter: s.get("label.formatter")}, + seriesDataIndices: r.slice() + }) + } + } + + function Nd(t, e, i) { + var n = i.axesInfo = []; + cM(e, function (e, i) { + var r = e.axisPointerModel.option, a = t[i]; + a ? (!e.useHandle && (r.status = "show"), r.value = a.value, r.seriesDataIndices = (a.payloadBatch || []).slice()) : !e.useHandle && (r.status = "hide"), "show" === r.status && n.push({ + axisDim: e.axis.dim, + axisIndex: e.axis.model.componentIndex, + value: r.value + }) + }) + } + + function Fd(t, e, i, n) { + if (Hd(e) || !t.list.length) return void n({type: "hideTip"}); + var r = ((t.list[0].dataByAxis[0] || {}).seriesDataIndices || [])[0] || {}; + n({ + type: "showTip", + escapeConnect: !0, + x: e[0], + y: e[1], + tooltipOption: i.tooltipOption, + position: i.position, + dataIndexInside: r.dataIndexInside, + dataIndex: r.dataIndex, + seriesIndex: r.seriesIndex, + dataByCoordSys: t.list + }) + } + + function Vd(t, e, i) { + var n = i.getZr(), r = "axisPointerLastHighlights", a = fM(n)[r] || {}, o = fM(n)[r] = {}; + cM(t, function (t) { + var e = t.axisPointerModel.option; + "show" === e.status && cM(e.seriesDataIndices, function (t) { + var e = t.seriesIndex + " | " + t.dataIndex; + o[e] = t + }) + }); + var s = [], l = []; + f(a, function (t, e) { + !o[e] && l.push(t) + }), f(o, function (t, e) { + !a[e] && s.push(t) + }), l.length && i.dispatchAction({ + type: "downplay", + escapeConnect: !0, + batch: l + }), s.length && i.dispatchAction({type: "highlight", escapeConnect: !0, batch: s}) + } + + function Wd(t, e) { + for (var i = 0; i < (t || []).length; i++) { + var n = t[i]; + if (e.axis.dim === n.axisDim && e.axis.model.componentIndex === n.axisIndex) return n + } + } + + function Gd(t) { + var e = t.axis.model, i = {}, n = i.axisDim = t.axis.dim; + return i.axisIndex = i[n + "AxisIndex"] = e.componentIndex, i.axisName = i[n + "AxisName"] = e.name, i.axisId = i[n + "AxisId"] = e.id, i + } + + function Hd(t) { + return !t || null == t[0] || isNaN(t[0]) || null == t[1] || isNaN(t[1]) + } + + function Zd(t, e, i) { + if (!tg.node) { + var n = e.getZr(); + gM(n).records || (gM(n).records = {}), Xd(n, e); + var r = gM(n).records[t] || (gM(n).records[t] = {}); + r.handler = i + } + } + + function Xd(t, e) { + function i(i, n) { + t.on(i, function (i) { + var r = Ud(e); + vM(gM(t).records, function (t) { + t && n(t, i, r.dispatchAction) + }), Yd(r.pendings, e) + }) + } + + gM(t).initialized || (gM(t).initialized = !0, i("click", x(qd, "click")), i("mousemove", x(qd, "mousemove")), i("globalout", jd)) + } + + function Yd(t, e) { + var i, n = t.showTip.length, r = t.hideTip.length; + n ? i = t.showTip[n - 1] : r && (i = t.hideTip[r - 1]), i && (i.dispatchAction = null, e.dispatchAction(i)) + } + + function jd(t, e, i) { + t.handler("leave", null, i) + } + + function qd(t, e, i, n) { + e.handler(t, i, n) + } + + function Ud(t) { + var e = {showTip: [], hideTip: []}, i = function (n) { + var r = e[n.type]; + r ? r.push(n) : (n.dispatchAction = i, t.dispatchAction(n)) + }; + return {dispatchAction: i, pendings: e} + } + + function $d(t, e) { + if (!tg.node) { + var i = e.getZr(), n = (gM(i).records || {})[t]; + n && (gM(i).records[t] = null) + } + } + + function Kd() { + } + + function Qd(t, e, i, n) { + Jd(yM(i).lastProp, n) || (yM(i).lastProp = n, e ? La(i, n, t) : (i.stopAnimation(), i.attr(n))) + } + + function Jd(t, e) { + if (S(t) && S(e)) { + var i = !0; + return f(e, function (e, n) { + i = i && Jd(t[n], e) + }), !!i + } + return t === e + } + + function tf(t, e) { + t[e.get("label.show") ? "show" : "hide"]() + } + + function ef(t) { + return {position: t.position.slice(), rotation: t.rotation || 0} + } + + function nf(t, e, i) { + var n = e.get("z"), r = e.get("zlevel"); + t && t.traverse(function (t) { + "group" !== t.type && (null != n && (t.z = n), null != r && (t.zlevel = r), t.silent = i) + }) + } + + function rf(t) { + var e, i = t.get("type"), n = t.getModel(i + "Style"); + return "line" === i ? (e = n.getLineStyle(), e.fill = null) : "shadow" === i && (e = n.getAreaStyle(), e.stroke = null), e + } + + function af(t, e, i, n, r) { + var a = i.get("value"), o = sf(a, e.axis, e.ecModel, i.get("seriesDataIndices"), { + precision: i.get("label.precision"), + formatter: i.get("label.formatter") + }), s = i.getModel("label"), l = rx(s.get("padding") || 0), h = s.getFont(), u = Ei(o, h), c = r.position, + d = u.width + l[1] + l[3], f = u.height + l[0] + l[2], p = r.align; + "right" === p && (c[0] -= d), "center" === p && (c[0] -= d / 2); + var g = r.verticalAlign; + "bottom" === g && (c[1] -= f), "middle" === g && (c[1] -= f / 2), of(c, d, f, n); + var v = s.get("backgroundColor"); + v && "auto" !== v || (v = e.get("axisLine.lineStyle.color")), t.label = { + shape: { + x: 0, + y: 0, + width: d, + height: f, + r: s.get("borderRadius") + }, + position: c.slice(), + style: { + text: o, + textFont: h, + textFill: s.getTextColor(), + textPosition: "inside", + fill: v, + stroke: s.get("borderColor") || "transparent", + lineWidth: s.get("borderWidth") || 0, + shadowBlur: s.get("shadowBlur"), + shadowColor: s.get("shadowColor"), + shadowOffsetX: s.get("shadowOffsetX"), + shadowOffsetY: s.get("shadowOffsetY") + }, + z2: 10 + } + } + + function of(t, e, i, n) { + var r = n.getWidth(), a = n.getHeight(); + t[0] = Math.min(t[0] + e, r) - e, t[1] = Math.min(t[1] + i, a) - i, t[0] = Math.max(t[0], 0), t[1] = Math.max(t[1], 0) + } + + function sf(t, e, i, n, r) { + t = e.scale.parse(t); + var a = e.scale.getLabel(t, {precision: r.precision}), o = r.formatter; + if (o) { + var s = {value: hu(e, t), seriesData: []}; + f(n, function (t) { + var e = i.getSeriesByIndex(t.seriesIndex), n = t.dataIndexInside, r = e && e.getDataParams(n); + r && s.seriesData.push(r) + }), b(o) ? a = o.replace("{value}", a) : w(o) && (a = o(s)) + } + return a + } + + function lf(t, e, i) { + var n = be(); + return Ce(n, n, i.rotation), Te(n, n, i.position), Ea([t.dataToCoord(e), (i.labelOffset || 0) + (i.labelDirection || 1) * (i.labelMargin || 0)], n) + } + + function hf(t, e, i, n, r, a) { + var o = Jb.innerTextLayout(i.rotation, 0, i.labelDirection); + i.labelMargin = r.get("label.margin"), af(e, n, r, a, { + position: lf(n.axis, t, i), + align: o.textAlign, + verticalAlign: o.textVerticalAlign + }) + } + + function uf(t, e, i) { + return i = i || 0, {x1: t[i], y1: t[1 - i], x2: e[i], y2: e[1 - i]} + } + + function cf(t, e, i) { + return i = i || 0, {x: t[i], y: t[1 - i], width: e[i], height: e[1 - i]} + } + + function df(t, e) { + var i = {}; + return i[e.dim + "AxisIndex"] = e.index, t.getCartesian(i) + } + + function ff(t) { + return "x" === t.dim ? 0 : 1 + } + + function pf(t) { + var e = "cubic-bezier(0.23, 1, 0.32, 1)", i = "left " + t + "s " + e + ",top " + t + "s " + e; + return p(IM, function (t) { + return t + "transition:" + i + }).join(";") + } + + function gf(t) { + var e = [], i = t.get("fontSize"), n = t.getTextColor(); + return n && e.push("color:" + n), e.push("font:" + t.getFont()), i && e.push("line-height:" + Math.round(3 * i / 2) + "px"), SM(["decoration", "align"], function (i) { + var n = t.get(i); + n && e.push("text-" + i + ":" + n) + }), e.join(";") + } + + function vf(t) { + var e = [], i = t.get("transitionDuration"), n = t.get("backgroundColor"), r = t.getModel("textStyle"), + a = t.get("padding"); + return i && e.push(pf(i)), n && (tg.canvasSupported ? e.push("background-Color:" + n) : (e.push("background-Color:#" + je(n)), e.push("filter:alpha(opacity=70)"))), SM(["width", "color", "radius"], function (i) { + var n = "border-" + i, r = MM(n), a = t.get(r); + null != a && e.push(n + ":" + a + ("color" === i ? "" : "px")) + }), e.push(gf(r)), null != a && e.push("padding:" + rx(a).join("px ") + "px"), e.join(";") + ";" + } + + function mf(t, e) { + if (tg.wxa) return null; + var i = document.createElement("div"), n = this._zr = e.getZr(); + this.el = i, this._x = e.getWidth() / 2, this._y = e.getHeight() / 2, t.appendChild(i), this._container = t, this._show = !1, this._hideTimeout; + var r = this; + i.onmouseenter = function () { + r._enterable && (clearTimeout(r._hideTimeout), r._show = !0), r._inContent = !0 + }, i.onmousemove = function (e) { + if (e = e || window.event, !r._enterable) { + var i = n.handler; + pe(t, e, !0), i.dispatch("mousemove", e) + } + }, i.onmouseleave = function () { + r._enterable && r._show && r.hideLater(r._hideDelay), r._inContent = !1 + } + } + + function yf(t) { + this._zr = t.getZr(), this._show = !1, this._hideTimeout + } + + function xf(t) { + for (var e = t.pop(); t.length;) { + var i = t.pop(); + i && (Wa.isInstance(i) && (i = i.get("tooltip", !0)), "string" == typeof i && (i = {formatter: i}), e = new Wa(i, e, e.ecModel)) + } + return e + } + + function _f(t, e) { + return t.dispatchAction || y(e.dispatchAction, e) + } + + function wf(t, e, i, n, r, a, o) { + var s = i.getOuterSize(), l = s.width, h = s.height; + return null != a && (t + l + a > n ? t -= l + a : t += a), null != o && (e + h + o > r ? e -= h + o : e += o), [t, e] + } + + function bf(t, e, i, n, r) { + var a = i.getOuterSize(), o = a.width, s = a.height; + return t = Math.min(t + o, n) - o, e = Math.min(e + s, r) - s, t = Math.max(t, 0), e = Math.max(e, 0), [t, e] + } + + function Sf(t, e, i) { + var n = i[0], r = i[1], a = 5, o = 0, s = 0, l = e.width, h = e.height; + switch (t) { + case"inside": + o = e.x + l / 2 - n / 2, s = e.y + h / 2 - r / 2; + break; + case"top": + o = e.x + l / 2 - n / 2, s = e.y - r - a; + break; + case"bottom": + o = e.x + l / 2 - n / 2, s = e.y + h + a; + break; + case"left": + o = e.x - n - a, s = e.y + h / 2 - r / 2; + break; + case"right": + o = e.x + l + a, s = e.y + h / 2 - r / 2 + } + return [o, s] + } + + function Mf(t) { + return "center" === t || "middle" === t + } + + function If(t) { + Fn(t, "label", ["show"]) + } + + function Tf(t) { + return !(isNaN(parseFloat(t.x)) && isNaN(parseFloat(t.y))) + } + + function Cf(t) { + return !isNaN(parseFloat(t.x)) && !isNaN(parseFloat(t.y)) + } + + function Af(t, e, i, n, r, a) { + var o = [], s = Ph(e, n), l = s ? e.getCalculationInfo("stackResultDimension") : n, h = zf(e, l, t), + u = e.indicesOfNearest(l, h)[0]; + o[r] = e.get(i, u), o[a] = e.get(n, u); + var c = Qa(e.get(n, u)); + return c = Math.min(c, 20), c >= 0 && (o[a] = +o[a].toFixed(c)), o + } + + function Df(t, e) { + var i = t.getData(), r = t.coordinateSystem; + if (e && !Cf(e) && !_(e.coord) && r) { + var a = r.dimensions, o = kf(e, i, r, t); + if (e = n(e), e.type && RM[e.type] && o.baseAxis && o.valueAxis) { + var s = zM(a, o.baseAxis.dim), l = zM(a, o.valueAxis.dim); + e.coord = RM[e.type](i, o.baseDataDim, o.valueDataDim, s, l), e.value = e.coord[l] + } else { + for (var h = [null != e.xAxis ? e.xAxis : e.radiusAxis, null != e.yAxis ? e.yAxis : e.angleAxis], u = 0; 2 > u; u++) RM[h[u]] && (h[u] = zf(i, i.mapDimension(a[u]), h[u])); + e.coord = h + } + } + return e + } + + function kf(t, e, i, n) { + var r = {}; + return null != t.valueIndex || null != t.valueDim ? (r.valueDataDim = null != t.valueIndex ? e.getDimension(t.valueIndex) : t.valueDim, r.valueAxis = i.getAxis(Pf(n, r.valueDataDim)), r.baseAxis = i.getOtherAxis(r.valueAxis), r.baseDataDim = e.mapDimension(r.baseAxis.dim)) : (r.baseAxis = n.getBaseAxis(), r.valueAxis = i.getOtherAxis(r.baseAxis), r.baseDataDim = e.mapDimension(r.baseAxis.dim), r.valueDataDim = e.mapDimension(r.valueAxis.dim)), r + } + + function Pf(t, e) { + var i = t.getData(), n = i.dimensions; + e = i.getDimension(e); + for (var r = 0; r < n.length; r++) { + var a = i.getDimensionInfo(n[r]); + if (a.name === e) return a.coordDim + } + } + + function Lf(t, e) { + return t && t.containData && e.coord && !Tf(e) ? t.containData(e.coord) : !0 + } + + function Of(t, e, i, n) { + return 2 > n ? t.coord && t.coord[n] : t.value + } + + function zf(t, e, i) { + if ("average" === i) { + var n = 0, r = 0; + return t.each(e, function (t) { + isNaN(t) || (n += t, r++) + }), n / r + } + return "median" === i ? t.getMedian(e) : t.getDataExtent(e, !0)["max" === i ? 1 : 0] + } + + function Ef(t, e, i) { + var n = e.coordinateSystem; + t.each(function (r) { + var a, o = t.getItemModel(r), s = Ua(o.get("x"), i.getWidth()), l = Ua(o.get("y"), i.getHeight()); + if (isNaN(s) || isNaN(l)) { + if (e.getMarkerPosition) a = e.getMarkerPosition(t.getValues(t.dimensions, r)); else if (n) { + var h = t.get(n.dimensions[0], r), u = t.get(n.dimensions[1], r); + a = n.dataToPoint([h, u]) + } + } else a = [s, l]; + isNaN(s) || (a[0] = s), isNaN(l) || (a[1] = l), t.setItemLayout(r, a) + }) + } + + function Rf(t, e, i) { + var n; + n = t ? p(t && t.dimensions, function (t) { + var i = e.getData().getDimensionInfo(e.getData().mapDimension(t)) || {}; + return s({name: t}, i) + }) : [{name: "value", type: "float"}]; + var r = new Bw(n, i), a = p(i.get("data"), x(Df, e)); + return t && (a = v(a, x(Lf, t))), r.initData(a, null, t ? Of : function (t) { + return t.value + }), r + } + + function Bf(t) { + return isNaN(+t.cpx1) || isNaN(+t.cpy1) + } + + function Nf(t) { + return "_" + t + "Type" + } + + function Ff(t, e, i) { + var n = e.getItemVisual(i, "color"), r = e.getItemVisual(i, t), a = e.getItemVisual(i, t + "Size"); + if (r && "none" !== r) { + _(a) || (a = [a, a]); + var o = fu(r, -a[0] / 2, -a[1] / 2, a[0], a[1], n); + return o.name = t, o + } + } + + function Vf(t) { + var e = new VM({name: "line"}); + return Wf(e.shape, t), e + } + + function Wf(t, e) { + var i = e[0], n = e[1], r = e[2]; + t.x1 = i[0], t.y1 = i[1], t.x2 = n[0], t.y2 = n[1], t.percent = 1, r ? (t.cpx1 = r[0], t.cpy1 = r[1]) : (t.cpx1 = 0 / 0, t.cpy1 = 0 / 0) + } + + function Gf() { + var t = this, e = t.childOfName("fromSymbol"), i = t.childOfName("toSymbol"), n = t.childOfName("label"); + if (e || i || !n.ignore) { + for (var r = 1, a = this.parent; a;) a.scale && (r /= a.scale[0]), a = a.parent; + var o = t.childOfName("line"); + if (this.__dirty || o.__dirty) { + var s = o.shape.percent, l = o.pointAt(0), h = o.pointAt(s), u = j([], h, l); + if (te(u, u), e) { + e.attr("position", l); + var c = o.tangentAt(0); + e.attr("rotation", Math.PI / 2 - Math.atan2(c[1], c[0])), e.attr("scale", [r * s, r * s]) + } + if (i) { + i.attr("position", h); + var c = o.tangentAt(1); + i.attr("rotation", -Math.PI / 2 - Math.atan2(c[1], c[0])), i.attr("scale", [r * s, r * s]) + } + if (!n.ignore) { + n.attr("position", h); + var d, f, p, g = 5 * r; + if ("end" === n.__position) d = [u[0] * g + h[0], u[1] * g + h[1]], f = u[0] > .8 ? "left" : u[0] < -.8 ? "right" : "center", p = u[1] > .8 ? "top" : u[1] < -.8 ? "bottom" : "middle"; else if ("middle" === n.__position) { + var v = s / 2, c = o.tangentAt(v), m = [c[1], -c[0]], y = o.pointAt(v); + m[1] > 0 && (m[0] = -m[0], m[1] = -m[1]), d = [y[0] + m[0] * g, y[1] + m[1] * g], f = "center", p = "bottom"; + var x = -Math.atan2(c[1], c[0]); + h[0] < l[0] && (x = Math.PI + x), n.attr("rotation", x) + } else d = [-u[0] * g + l[0], -u[1] * g + l[1]], f = u[0] > .8 ? "right" : u[0] < -.8 ? "left" : "center", p = u[1] > .8 ? "bottom" : u[1] < -.8 ? "top" : "middle"; + n.attr({ + style: {textVerticalAlign: n.__verticalAlign || p, textAlign: n.__textAlign || f}, + position: d, + scale: [r, r] + }) + } + } + } + } + + function Hf(t, e, i) { + lv.call(this), this._createLine(t, e, i) + } + + function Zf(t) { + this._ctor = t || Hf, this.group = new lv + } + + function Xf(t, e, i, n) { + var r = e.getItemLayout(i); + if (Uf(r)) { + var a = new t._ctor(e, i, n); + e.setItemGraphicEl(i, a), t.group.add(a) + } + } + + function Yf(t, e, i, n, r, a) { + var o = e.getItemGraphicEl(n); + return Uf(i.getItemLayout(r)) ? (o ? o.updateData(i, r, a) : o = new t._ctor(i, r, a), i.setItemGraphicEl(r, o), void t.group.add(o)) : void t.group.remove(o) + } + + function jf(t) { + var e = t.hostModel; + return { + lineStyle: e.getModel("lineStyle").getLineStyle(), + hoverLineStyle: e.getModel("emphasis.lineStyle").getLineStyle(), + labelModel: e.getModel("label"), + hoverLabelModel: e.getModel("emphasis.label") + } + } + + function qf(t) { + return isNaN(t[0]) || isNaN(t[1]) + } + + function Uf(t) { + return !qf(t[0]) && !qf(t[1]) + } + + function $f(t) { + return !isNaN(t) && !isFinite(t) + } + + function Kf(t, e, i, n) { + var r = 1 - t, a = n.dimensions[t]; + return $f(e[r]) && $f(i[r]) && e[t] === i[t] && n.getAxis(a).containData(e[t]) + } + + function Qf(t, e) { + if ("cartesian2d" === t.type) { + var i = e[0].coord, n = e[1].coord; + if (i && n && (Kf(1, i, n, t) || Kf(0, i, n, t))) return !0 + } + return Lf(t, e[0]) && Lf(t, e[1]) + } + + function Jf(t, e, i, n, r) { + var a, o = n.coordinateSystem, s = t.getItemModel(e), l = Ua(s.get("x"), r.getWidth()), + h = Ua(s.get("y"), r.getHeight()); + if (isNaN(l) || isNaN(h)) { + if (n.getMarkerPosition) a = n.getMarkerPosition(t.getValues(t.dimensions, e)); else { + var u = o.dimensions, c = t.get(u[0], e), d = t.get(u[1], e); + a = o.dataToPoint([c, d]) + } + if ("cartesian2d" === o.type) { + var f = o.getAxis("x"), p = o.getAxis("y"), u = o.dimensions; + $f(t.get(u[0], e)) ? a[0] = f.toGlobalCoord(f.getExtent()[i ? 0 : 1]) : $f(t.get(u[1], e)) && (a[1] = p.toGlobalCoord(p.getExtent()[i ? 0 : 1])) + } + isNaN(l) || (a[0] = l), isNaN(h) || (a[1] = h) + } else a = [l, h]; + t.setItemLayout(e, a) + } + + function tp(t, e, i) { + var n; + n = t ? p(t && t.dimensions, function (t) { + var i = e.getData().getDimensionInfo(e.getData().mapDimension(t)) || {}; + return s({name: t}, i) + }) : [{name: "value", type: "float"}]; + var r = new Bw(n, i), a = new Bw(n, i), o = new Bw([], i), l = p(i.get("data"), x(ZM, e, t, i)); + t && (l = v(l, x(Qf, t))); + var h = t ? Of : function (t) { + return t.value + }; + return r.initData(p(l, function (t) { + return t[0] + }), null, h), a.initData(p(l, function (t) { + return t[1] + }), null, h), o.initData(p(l, function (t) { + return t[2] + })), o.hasItemOption = !0, {from: r, to: a, line: o} + } + + function ep(t) { + return !isNaN(t) && !isFinite(t) + } + + function ip(t, e, i) { + var n = 1 - t; + return ep(e[n]) && ep(i[n]) + } + + function np(t, e) { + var i = e.coord[0], n = e.coord[1]; + return "cartesian2d" === t.type && i && n && (ip(1, i, n, t) || ip(0, i, n, t)) ? !0 : Lf(t, { + coord: i, + x: e.x0, + y: e.y0 + }) || Lf(t, {coord: n, x: e.x1, y: e.y1}) + } + + function rp(t, e, i, n, r) { + var a, o = n.coordinateSystem, s = t.getItemModel(e), l = Ua(s.get(i[0]), r.getWidth()), + h = Ua(s.get(i[1]), r.getHeight()); + if (isNaN(l) || isNaN(h)) { + if (n.getMarkerPosition) a = n.getMarkerPosition(t.getValues(i, e)); else { + var u = t.get(i[0], e), c = t.get(i[1], e), d = [u, c]; + o.clampData && o.clampData(d, d), a = o.dataToPoint(d, !0) + } + if ("cartesian2d" === o.type) { + var f = o.getAxis("x"), p = o.getAxis("y"), u = t.get(i[0], e), c = t.get(i[1], e); + ep(u) ? a[0] = f.toGlobalCoord(f.getExtent()["x0" === i[0] ? 0 : 1]) : ep(c) && (a[1] = p.toGlobalCoord(p.getExtent()["y0" === i[1] ? 0 : 1])) + } + isNaN(l) || (a[0] = l), isNaN(h) || (a[1] = h) + } else a = [l, h]; + return a + } + + function ap(t, e, i) { + var n, r, a = ["x0", "y0", "x1", "y1"]; + t ? (n = p(t && t.dimensions, function (t) { + var i = e.getData(), n = i.getDimensionInfo(i.mapDimension(t)) || {}; + return s({name: t}, n) + }), r = new Bw(p(a, function (t, e) { + return {name: t, type: n[e % 2].type} + }), i)) : (n = [{name: "value", type: "float"}], r = new Bw(n, i)); + var o = p(i.get("data"), x(XM, e, t, i)); + t && (o = v(o, x(np, t))); + var l = t ? function (t, e, i, n) { + return t.coord[Math.floor(n / 2)][n % 2] + } : function (t) { + return t.value + }; + return r.initData(o, null, l), r.hasItemOption = !0, r + } + + function op(t) { + var e = t.type, i = {number: "value", time: "time"}; + if (i[e] && (t.axisType = i[e], delete t.type), sp(t), lp(t, "controlPosition")) { + var n = t.controlStyle || (t.controlStyle = {}); + lp(n, "position") || (n.position = t.controlPosition), "none" !== n.position || lp(n, "show") || (n.show = !1, delete n.position), delete t.controlPosition + } + f(t.data || [], function (t) { + S(t) && !_(t) && (!lp(t, "value") && lp(t, "name") && (t.value = t.name), sp(t)) + }) + } + + function sp(t) { + var e = t.itemStyle || (t.itemStyle = {}), i = e.emphasis || (e.emphasis = {}), n = t.label || t.label || {}, + r = n.normal || (n.normal = {}), a = {normal: 1, emphasis: 1}; + f(n, function (t, e) { + a[e] || lp(r, e) || (r[e] = t) + }), i.label && !lp(n, "emphasis") && (n.emphasis = i.label, delete i.label) + } + + function lp(t, e) { + return t.hasOwnProperty(e) + } + + function hp(t, e) { + return bo(t.getBoxLayoutParams(), {width: e.getWidth(), height: e.getHeight()}, t.get("padding")) + } + + function up(t, e, i, r) { + var a = Qr(t.get(e).replace(/^path:\/\//, ""), n(r || {}), new gi(i[0], i[1], i[2], i[3]), "center"); + return a + } + + function cp(t, e, i, n, a, o) { + var s = e.get("color"); + if (a) a.setColor(s), i.add(a), o && o.onUpdate(a); else { + var l = t.get("symbol"); + a = fu(l, -1, -1, 2, 2, s), a.setStyle("strokeNoScale", !0), i.add(a), o && o.onCreate(a) + } + var h = e.getItemStyle(["color", "symbol", "symbolSize"]); + a.setStyle(h), n = r({rectHover: !0, z2: 100}, n, !0); + var u = t.get("symbolSize"); + u = u instanceof Array ? u.slice() : [+u, +u], u[0] /= 2, u[1] /= 2, n.scale = u; + var c = t.get("symbolOffset"); + if (c) { + var d = n.position = n.position || [0, 0]; + d[0] += Ua(c[0], u[0]), d[1] += Ua(c[1], u[1]) + } + var f = t.get("symbolRotate"); + return n.rotation = (f || 0) * Math.PI / 180 || 0, a.attr(n), a.updateTransform(), a + } + + function dp(t, e, i, n, r) { + if (!t.dragging) { + var a = n.getModel("checkpointStyle"), o = i.dataToCoord(n.getData().get(["value"], e)); + r || !a.get("animation", !0) ? t.attr({position: [o, 0]}) : (t.stopAnimation(!0), t.animateTo({position: [o, 0]}, a.get("animationDuration", !0), a.get("animationEasing", !0))) + } + } + + function fp(t) { + return h(iI, t) >= 0 + } + + function pp(t, e) { + t = t.slice(); + var i = p(t, _o); + e = (e || []).slice(); + var n = p(e, _o); + return function (r, a) { + f(t, function (t, o) { + for (var s = {name: t, capital: i[o]}, l = 0; l < e.length; l++) s[e[l]] = t + n[l]; + r.call(a, s) + }) + } + } + + function gp(t, e, i) { + function n(t, e) { + return h(e.nodes, t) >= 0 + } + + function r(t, n) { + var r = !1; + return e(function (e) { + f(i(t, e) || [], function (t) { + n.records[e.name][t] && (r = !0) + }) + }), r + } + + function a(t, n) { + n.nodes.push(t), e(function (e) { + f(i(t, e) || [], function (t) { + n.records[e.name][t] = !0 + }) + }) + } + + return function (i) { + function o(t) { + !n(t, s) && r(t, s) && (a(t, s), l = !0) + } + + var s = {nodes: [], records: {}}; + if (e(function (t) { + s.records[t.name] = {} + }), !i) return s; + a(i, s); + var l; + do l = !1, t(o); while (l); + return s + } + } + + function vp(t, e, i) { + var n = [1 / 0, -1 / 0]; + return rI(i, function (t) { + var i = t.getData(); + i && rI(i.mapDimension(e, !0), function (t) { + var e = i.getApproximateExtent(t); + e[0] < n[0] && (n[0] = e[0]), e[1] > n[1] && (n[1] = e[1]) + }) + }), n[1] < n[0] && (n = [0 / 0, 0 / 0]), mp(t, n), n + } + + function mp(t, e) { + var i = t.getAxisModel(), n = i.getMin(!0), r = "category" === i.get("type"), a = r && i.getCategories().length; + null != n && "dataMin" !== n && "function" != typeof n ? e[0] = n : r && (e[0] = a > 0 ? 0 : 0 / 0); + var o = i.getMax(!0); + return null != o && "dataMax" !== o && "function" != typeof o ? e[1] = o : r && (e[1] = a > 0 ? a - 1 : 0 / 0), i.get("scale", !0) || (e[0] > 0 && (e[0] = 0), e[1] < 0 && (e[1] = 0)), e + } + + function yp(t, e) { + var i = t.getAxisModel(), n = t._percentWindow, r = t._valueWindow; + if (n) { + var a = to(r, [0, 500]); + a = Math.min(a, 20); + var o = e || 0 === n[0] && 100 === n[1]; + i.setRange(o ? null : +r[0].toFixed(a), o ? null : +r[1].toFixed(a)) + } + } + + function xp(t) { + var e = t._minMaxSpan = {}, i = t._dataZoomModel; + rI(["min", "max"], function (n) { + e[n + "Span"] = i.get(n + "Span"); + var r = i.get(n + "ValueSpan"); + if (null != r && (e[n + "ValueSpan"] = r, r = t.getAxisModel().axis.scale.parse(r), null != r)) { + var a = t._dataExtent; + e[n + "Span"] = qa(a[0] + r, a, [0, 100], !0) + } + }) + } + + function _p(t) { + var e = {}; + return sI(["start", "end", "startValue", "endValue", "throttle"], function (i) { + t.hasOwnProperty(i) && (e[i] = t[i]) + }), e + } + + function wp(t, e) { + var i = t._rangePropMode, n = t.get("rangeMode"); + sI([["start", "startValue"], ["end", "endValue"]], function (t, r) { + var a = null != e[t[0]], o = null != e[t[1]]; + a && !o ? i[r] = "percent" : !a && o ? i[r] = "value" : n ? i[r] = n[r] : a && (i[r] = "percent") + }) + } + + function bp(t, e) { + var i = t[e] - t[1 - e]; + return {span: Math.abs(i), sign: i > 0 ? -1 : 0 > i ? 1 : e ? -1 : 1} + } + + function Sp(t, e) { + return Math.min(e[1], Math.max(e[0], t)) + } + + function Mp(t) { + var e = {x: "y", y: "x", radius: "angle", angle: "radius"}; + return e[t] + } + + function Ip(t) { + return "vertical" === t ? "ns-resize" : "ew-resize" + } + + function Tp(t, e) { + return !!Cp(t)[e] + } + + function Cp(t) { + return t[II] || (t[II] = {}) + } + + function Ap(t) { + this.pointerChecker, this._zr = t, this._opt = {}; + var e = y, i = e(Dp, this), r = e(kp, this), a = e(Pp, this), o = e(Lp, this), l = e(Op, this); + bg.call(this), this.setPointerChecker = function (t) { + this.pointerChecker = t + }, this.enable = function (e, h) { + this.disable(), this._opt = s(n(h) || {}, { + zoomOnMouseWheel: !0, + moveOnMouseMove: !0, + moveOnMouseWheel: !1, + preventDefaultMouseMove: !0 + }), null == e && (e = !0), (e === !0 || "move" === e || "pan" === e) && (t.on("mousedown", i), t.on("mousemove", r), t.on("mouseup", a)), (e === !0 || "scale" === e || "zoom" === e) && (t.on("mousewheel", o), t.on("pinch", l)) + }, this.disable = function () { + t.off("mousedown", i), t.off("mousemove", r), t.off("mouseup", a), t.off("mousewheel", o), t.off("pinch", l) + }, this.dispose = this.disable, this.isDragging = function () { + return this._dragging + }, this.isPinching = function () { + return this._pinching + } + } + + function Dp(t) { + if (!(me(t) || t.target && t.target.draggable)) { + var e = t.offsetX, i = t.offsetY; + this.pointerChecker && this.pointerChecker(t, e, i) && (this._x = e, this._y = i, this._dragging = !0) + } + } + + function kp(t) { + if (!me(t) && Rp("moveOnMouseMove", t, this._opt) && this._dragging && "pinch" !== t.gestureEvent && !Tp(this._zr, "globalPan")) { + var e = t.offsetX, i = t.offsetY, n = this._x, r = this._y, a = e - n, o = i - r; + this._x = e, this._y = i, this._opt.preventDefaultMouseMove && Ig(t.event), Ep(this, "pan", "moveOnMouseMove", t, { + dx: a, + dy: o, + oldX: n, + oldY: r, + newX: e, + newY: i + }) + } + } + + function Pp(t) { + me(t) || (this._dragging = !1) + } + + function Lp(t) { + var e = Rp("zoomOnMouseWheel", t, this._opt), i = Rp("moveOnMouseWheel", t, this._opt), n = t.wheelDelta, + r = Math.abs(n), a = t.offsetX, o = t.offsetY; + if (0 !== n && (e || i)) { + if (e) { + var s = r > 3 ? 1.4 : r > 1 ? 1.2 : 1.1, l = n > 0 ? s : 1 / s; + zp(this, "zoom", "zoomOnMouseWheel", t, {scale: l, originX: a, originY: o}) + } + if (i) { + var h = Math.abs(n), u = (n > 0 ? 1 : -1) * (h > 3 ? .4 : h > 1 ? .15 : .05); + zp(this, "scrollMove", "moveOnMouseWheel", t, {scrollDelta: u, originX: a, originY: o}) + } + } + } + + function Op(t) { + if (!Tp(this._zr, "globalPan")) { + var e = t.pinchScale > 1 ? 1.1 : 1 / 1.1; + zp(this, "zoom", null, t, {scale: e, originX: t.pinchX, originY: t.pinchY}) + } + } + + function zp(t, e, i, n, r) { + t.pointerChecker && t.pointerChecker(n, r.originX, r.originY) && (Ig(n.event), Ep(t, e, i, n, r)) + } + + function Ep(t, e, i, n, r) { + r.isAvailableBehavior = y(Rp, null, i, n), t.trigger(e, r) + } + + function Rp(t, e, i) { + var n = i[t]; + return !t || n && (!b(n) || e.event[n + "Key"]) + } + + function Bp(t, e) { + var i = Vp(t), n = e.dataZoomId, r = e.coordId; + f(i, function (t) { + var i = t.dataZoomInfos; + i[n] && h(e.allCoordIds, r) < 0 && (delete i[n], t.count--) + }), Gp(i); + var a = i[r]; + a || (a = i[r] = { + coordId: r, + dataZoomInfos: {}, + count: 0 + }, a.controller = Wp(t, a), a.dispatchAction = x(Hp, t)), !a.dataZoomInfos[n] && a.count++, a.dataZoomInfos[n] = e; + var o = Zp(a.dataZoomInfos); + a.controller.enable(o.controlType, o.opt), a.controller.setPointerChecker(e.containsPoint), Hs(a, "dispatchAction", e.dataZoomModel.get("throttle", !0), "fixRate") + } + + function Np(t, e) { + var i = Vp(t); + f(i, function (t) { + t.controller.dispose(); + var i = t.dataZoomInfos; + i[e] && (delete i[e], t.count--) + }), Gp(i) + } + + function Fp(t) { + return t.type + "\x00_" + t.id + } + + function Vp(t) { + var e = t.getZr(); + return e[TI] || (e[TI] = {}) + } + + function Wp(t, e) { + var i = new Ap(t.getZr()); + return f(["pan", "zoom", "scrollMove"], function (t) { + i.on(t, function (i) { + var n = []; + f(e.dataZoomInfos, function (r) { + if (i.isAvailableBehavior(r.dataZoomModel.option)) { + var a = (r.getRange || {})[t], o = a && a(e.controller, i); + !r.dataZoomModel.get("disabled", !0) && o && n.push({ + dataZoomId: r.dataZoomId, + start: o[0], + end: o[1] + }) + } + }), n.length && e.dispatchAction(n) + }) + }), i + } + + function Gp(t) { + f(t, function (e, i) { + e.count || (e.controller.dispose(), delete t[i]) + }) + } + + function Hp(t, e) { + t.dispatchAction({type: "dataZoom", batch: e}) + } + + function Zp(t) { + var e, i = "type_", n = {type_true: 2, type_move: 1, type_false: 0, type_undefined: -1}, r = !0; + return f(t, function (t) { + var a = t.dataZoomModel, o = a.get("disabled", !0) ? !1 : a.get("zoomLock", !0) ? "move" : !0; + n[i + o] > n[i + e] && (e = o), r &= a.get("preventDefaultMouseMove", !0) + }), { + controlType: e, + opt: {zoomOnMouseWheel: !0, moveOnMouseMove: !0, moveOnMouseWheel: !0, preventDefaultMouseMove: !!r} + } + } + + function Xp(t) { + return function (e, i, n, r) { + var a = this._range, o = a.slice(), s = e.axisModels[0]; + if (s) { + var l = t(o, s, e, i, n, r); + return cI(l, o, [0, 100], "all"), this._range = o, a[0] !== o[0] || a[1] !== o[1] ? o : void 0 + } + } + } + + function Yp(t) { + return PI(t) + } + + function jp() { + if (!zI && EI) { + zI = !0; + var t = EI.styleSheets; + t.length < 31 ? EI.createStyleSheet().addRule(".zrvml", "behavior:url(#default#VML)") : t[0].addRule(".zrvml", "behavior:url(#default#VML)") + } + } + + function qp(t) { + return parseInt(t, 10) + } + + function Up(t, e) { + jp(), this.root = t, this.storage = e; + var i = document.createElement("div"), n = document.createElement("div"); + i.style.cssText = "display:inline-block;overflow:hidden;position:relative;width:300px;height:150px;", n.style.cssText = "position:absolute;left:0;top:0;", t.appendChild(i), this._vmlRoot = n, this._vmlViewport = i, this.resize(); + var r = e.delFromStorage, a = e.addToStorage; + e.delFromStorage = function (t) { + r.call(e, t), t && t.onRemove && t.onRemove(n) + }, e.addToStorage = function (t) { + t.onAdd && t.onAdd(n), a.call(e, t) + }, this._firstPaint = !0 + } + + function $p(t) { + return function () { + iv('In IE8.0 VML mode painter not support method "' + t + '"') + } + } + + var Kp = 2311, Qp = function () { + return Kp++ + }, Jp = {}; + Jp = "object" == typeof wx && "function" == typeof wx.getSystemInfoSync ? { + browser: {}, + os: {}, + node: !1, + wxa: !0, + canvasSupported: !0, + svgSupported: !1, + touchEventsSupported: !0, + domSupported: !1 + } : "undefined" == typeof document && "undefined" != typeof self ? { + browser: {}, + os: {}, + node: !1, + worker: !0, + canvasSupported: !0, + domSupported: !1 + } : "undefined" == typeof navigator ? { + browser: {}, + os: {}, + node: !0, + worker: !1, + canvasSupported: !0, + svgSupported: !0, + domSupported: !1 + } : e(navigator.userAgent); + var tg = Jp, eg = { + "[object Function]": 1, + "[object RegExp]": 1, + "[object Date]": 1, + "[object Error]": 1, + "[object CanvasGradient]": 1, + "[object CanvasPattern]": 1, + "[object Image]": 1, + "[object Canvas]": 1 + }, ig = { + "[object Int8Array]": 1, + "[object Uint8Array]": 1, + "[object Uint8ClampedArray]": 1, + "[object Int16Array]": 1, + "[object Uint16Array]": 1, + "[object Int32Array]": 1, + "[object Uint32Array]": 1, + "[object Float32Array]": 1, + "[object Float64Array]": 1 + }, ng = Object.prototype.toString, rg = Array.prototype, ag = rg.forEach, og = rg.filter, sg = rg.slice, + lg = rg.map, hg = rg.reduce, ug = {}, cg = function () { + return ug.createCanvas() + }; + ug.createCanvas = function () { + return document.createElement("canvas") + }; + var dg, fg = "__ec_primitive__"; + B.prototype = { + constructor: B, get: function (t) { + return this.data.hasOwnProperty(t) ? this.data[t] : null + }, set: function (t, e) { + return this.data[t] = e + }, each: function (t, e) { + void 0 !== e && (t = y(t, e)); + for (var i in this.data) this.data.hasOwnProperty(i) && t(this.data[i], i) + }, removeKey: function (t) { + delete this.data[t] + } + }; + var pg = (Object.freeze || Object)({ + $override: i, + clone: n, + merge: r, + mergeAll: a, + extend: o, + defaults: s, + createCanvas: cg, + getContext: l, + indexOf: h, + inherits: u, + mixin: c, + isArrayLike: d, + each: f, + map: p, + reduce: g, + filter: v, + find: m, + bind: y, + curry: x, + isArray: _, + isFunction: w, + isString: b, + isObject: S, + isBuiltInObject: M, + isTypedArray: I, + isDom: T, + eqNaN: C, + retrieve: A, + retrieve2: D, + retrieve3: k, + slice: P, + normalizeCssArray: L, + assert: O, + trim: z, + setAsPrimitive: E, + isPrimitive: R, + createHashMap: N, + concatArray: F, + noop: V + }), gg = "undefined" == typeof Float32Array ? Array : Float32Array, vg = q, mg = U, yg = ee, xg = ie, + _g = (Object.freeze || Object)({ + create: W, + copy: G, + clone: H, + set: Z, + add: X, + scaleAndAdd: Y, + sub: j, + len: q, + length: vg, + lenSquare: U, + lengthSquare: mg, + mul: $, + div: K, + dot: Q, + scale: J, + normalize: te, + distance: ee, + dist: yg, + distanceSquare: ie, + distSquare: xg, + negate: ne, + lerp: re, + applyTransform: ae, + min: oe, + max: se + }); + le.prototype = { + constructor: le, _dragStart: function (t) { + var e = t.target; + e && e.draggable && (this._draggingTarget = e, e.dragging = !0, this._x = t.offsetX, this._y = t.offsetY, this.dispatchToElement(he(e, t), "dragstart", t.event)) + }, _drag: function (t) { + var e = this._draggingTarget; + if (e) { + var i = t.offsetX, n = t.offsetY, r = i - this._x, a = n - this._y; + this._x = i, this._y = n, e.drift(r, a, t), this.dispatchToElement(he(e, t), "drag", t.event); + var o = this.findHover(i, n, e).target, s = this._dropTarget; + this._dropTarget = o, e !== o && (s && o !== s && this.dispatchToElement(he(s, t), "dragleave", t.event), o && o !== s && this.dispatchToElement(he(o, t), "dragenter", t.event)) + } + }, _dragEnd: function (t) { + var e = this._draggingTarget; + e && (e.dragging = !1), this.dispatchToElement(he(e, t), "dragend", t.event), this._dropTarget && this.dispatchToElement(he(this._dropTarget, t), "drop", t.event), this._draggingTarget = null, this._dropTarget = null + } + }; + var wg = Array.prototype.slice, bg = function (t) { + this._$handlers = {}, this._$eventProcessor = t + }; + bg.prototype = { + constructor: bg, one: function (t, e, i, n) { + var r = this._$handlers; + if ("function" == typeof e && (n = i, i = e, e = null), !i || !t) return this; + e = ue(this, e), r[t] || (r[t] = []); + for (var a = 0; a < r[t].length; a++) if (r[t][a].h === i) return this; + return r[t].push({h: i, one: !0, query: e, ctx: n || this}), this + }, on: function (t, e, i, n) { + var r = this._$handlers; + if ("function" == typeof e && (n = i, i = e, e = null), !i || !t) return this; + e = ue(this, e), r[t] || (r[t] = []); + for (var a = 0; a < r[t].length; a++) if (r[t][a].h === i) return this; + return r[t].push({h: i, one: !1, query: e, ctx: n || this}), this + }, isSilent: function (t) { + var e = this._$handlers; + return e[t] && e[t].length + }, off: function (t, e) { + var i = this._$handlers; + if (!t) return this._$handlers = {}, this; + if (e) { + if (i[t]) { + for (var n = [], r = 0, a = i[t].length; a > r; r++) i[t][r].h !== e && n.push(i[t][r]); + i[t] = n + } + i[t] && 0 === i[t].length && delete i[t] + } else delete i[t]; + return this + }, trigger: function (t) { + var e = this._$handlers[t], i = this._$eventProcessor; + if (e) { + var n = arguments, r = n.length; + r > 3 && (n = wg.call(n, 1)); + for (var a = e.length, o = 0; a > o;) { + var s = e[o]; + if (i && i.filter && null != s.query && !i.filter(t, s.query)) o++; else { + switch (r) { + case 1: + s.h.call(s.ctx); + break; + case 2: + s.h.call(s.ctx, n[1]); + break; + case 3: + s.h.call(s.ctx, n[1], n[2]); + break; + default: + s.h.apply(s.ctx, n) + } + s.one ? (e.splice(o, 1), a--) : o++ + } + } + } + return i && i.afterTrigger && i.afterTrigger(t), this + }, triggerWithContext: function (t) { + var e = this._$handlers[t], i = this._$eventProcessor; + if (e) { + var n = arguments, r = n.length; + r > 4 && (n = wg.call(n, 1, n.length - 1)); + for (var a = n[n.length - 1], o = e.length, s = 0; o > s;) { + var l = e[s]; + if (i && i.filter && null != l.query && !i.filter(t, l.query)) s++; else { + switch (r) { + case 1: + l.h.call(a); + break; + case 2: + l.h.call(a, n[1]); + break; + case 3: + l.h.call(a, n[1], n[2]); + break; + default: + l.h.apply(a, n) + } + l.one ? (e.splice(s, 1), o--) : s++ + } + } + } + return i && i.afterTrigger && i.afterTrigger(t), this + } + }; + var Sg = "undefined" != typeof window && !!window.addEventListener, + Mg = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, Ig = Sg ? function (t) { + t.preventDefault(), t.stopPropagation(), t.cancelBubble = !0 + } : function (t) { + t.returnValue = !1, t.cancelBubble = !0 + }, Tg = "silent"; + _e.prototype.dispose = function () { + }; + var Cg = ["click", "dblclick", "mousewheel", "mouseout", "mouseup", "mousedown", "mousemove", "contextmenu"], + Ag = function (t, e, i, n) { + bg.call(this), this.storage = t, this.painter = e, this.painterRoot = n, i = i || new _e, this.proxy = null, this._hovered = {}, this._lastTouchMoment, this._lastX, this._lastY, le.call(this), this.setHandlerProxy(i) + }; + Ag.prototype = { + constructor: Ag, setHandlerProxy: function (t) { + this.proxy && this.proxy.dispose(), t && (f(Cg, function (e) { + t.on && t.on(e, this[e], this) + }, this), t.handler = this), this.proxy = t + }, mousemove: function (t) { + var e = t.zrX, i = t.zrY, n = this._hovered, r = n.target; + r && !r.__zr && (n = this.findHover(n.x, n.y), r = n.target); + var a = this._hovered = this.findHover(e, i), o = a.target, s = this.proxy; + s.setCursor && s.setCursor(o ? o.cursor : "default"), r && o !== r && this.dispatchToElement(n, "mouseout", t), this.dispatchToElement(a, "mousemove", t), o && o !== r && this.dispatchToElement(a, "mouseover", t) + }, mouseout: function (t) { + this.dispatchToElement(this._hovered, "mouseout", t); + var e, i = t.toElement || t.relatedTarget; + do i = i && i.parentNode; while (i && 9 != i.nodeType && !(e = i === this.painterRoot)); + !e && this.trigger("globalout", {event: t}) + }, resize: function () { + this._hovered = {} + }, dispatch: function (t, e) { + var i = this[t]; + i && i.call(this, e) + }, dispose: function () { + this.proxy.dispose(), this.storage = this.proxy = this.painter = null + }, setCursorStyle: function (t) { + var e = this.proxy; + e.setCursor && e.setCursor(t) + }, dispatchToElement: function (t, e, i) { + t = t || {}; + var n = t.target; + if (!n || !n.silent) { + for (var r = "on" + e, a = ye(e, t, i); n && (n[r] && (a.cancelBubble = n[r].call(n, a)), n.trigger(e, a), n = n.parent, !a.cancelBubble);) ; + a.cancelBubble || (this.trigger(e, a), this.painter && this.painter.eachOtherLayer(function (t) { + "function" == typeof t[r] && t[r].call(t, a), t.trigger && t.trigger(e, a) + })) + } + }, findHover: function (t, e, i) { + for (var n = this.storage.getDisplayList(), r = {x: t, y: e}, a = n.length - 1; a >= 0; a--) { + var o; + if (n[a] !== i && !n[a].ignore && (o = we(n[a], t, e)) && (!r.topTarget && (r.topTarget = n[a]), o !== Tg)) { + r.target = n[a]; + break + } + } + return r + } + }, f(["click", "mousedown", "mouseup", "mousewheel", "dblclick", "contextmenu"], function (t) { + Ag.prototype[t] = function (e) { + var i = this.findHover(e.zrX, e.zrY), n = i.target; + if ("mousedown" === t) this._downEl = n, this._downPoint = [e.zrX, e.zrY], this._upEl = n; else if ("mouseup" === t) this._upEl = n; else if ("click" === t) { + if (this._downEl !== this._upEl || !this._downPoint || yg(this._downPoint, [e.zrX, e.zrY]) > 4) return; + this._downPoint = null + } + this.dispatchToElement(i, t, e) + } + }), c(Ag, bg), c(Ag, le); + var Dg = "undefined" == typeof Float32Array ? Array : Float32Array, kg = (Object.freeze || Object)({ + create: be, + identity: Se, + copy: Me, + mul: Ie, + translate: Te, + rotate: Ce, + scale: Ae, + invert: De, + clone: ke + }), Pg = Se, Lg = 5e-5, Og = function (t) { + t = t || {}, t.position || (this.position = [0, 0]), null == t.rotation && (this.rotation = 0), t.scale || (this.scale = [1, 1]), this.origin = this.origin || null + }, zg = Og.prototype; + zg.transform = null, zg.needLocalTransform = function () { + return Pe(this.rotation) || Pe(this.position[0]) || Pe(this.position[1]) || Pe(this.scale[0] - 1) || Pe(this.scale[1] - 1) + }; + var Eg = []; + zg.updateTransform = function () { + var t = this.parent, e = t && t.transform, i = this.needLocalTransform(), n = this.transform; + if (!i && !e) return void (n && Pg(n)); + n = n || be(), i ? this.getLocalTransform(n) : Pg(n), e && (i ? Ie(n, t.transform, n) : Me(n, t.transform)), this.transform = n; + var r = this.globalScaleRatio; + if (null != r && 1 !== r) { + this.getGlobalScale(Eg); + var a = Eg[0] < 0 ? -1 : 1, o = Eg[1] < 0 ? -1 : 1, s = ((Eg[0] - a) * r + a) / Eg[0] || 0, + l = ((Eg[1] - o) * r + o) / Eg[1] || 0; + n[0] *= s, n[1] *= s, n[2] *= l, n[3] *= l + } + this.invTransform = this.invTransform || be(), De(this.invTransform, n) + }, zg.getLocalTransform = function (t) { + return Og.getLocalTransform(this, t) + }, zg.setTransform = function (t) { + var e = this.transform, i = t.dpr || 1; + e ? t.setTransform(i * e[0], i * e[1], i * e[2], i * e[3], i * e[4], i * e[5]) : t.setTransform(i, 0, 0, i, 0, 0) + }, zg.restoreTransform = function (t) { + var e = t.dpr || 1; + t.setTransform(e, 0, 0, e, 0, 0) + }; + var Rg = [], Bg = be(); + zg.setLocalTransform = function (t) { + if (t) { + var e = t[0] * t[0] + t[1] * t[1], i = t[2] * t[2] + t[3] * t[3], n = this.position, r = this.scale; + Pe(e - 1) && (e = Math.sqrt(e)), Pe(i - 1) && (i = Math.sqrt(i)), t[0] < 0 && (e = -e), t[3] < 0 && (i = -i), n[0] = t[4], n[1] = t[5], r[0] = e, r[1] = i, this.rotation = Math.atan2(-t[1] / i, t[0] / e) + } + }, zg.decomposeTransform = function () { + if (this.transform) { + var t = this.parent, e = this.transform; + t && t.transform && (Ie(Rg, t.invTransform, e), e = Rg); + var i = this.origin; + i && (i[0] || i[1]) && (Bg[4] = i[0], Bg[5] = i[1], Ie(Rg, e, Bg), Rg[4] -= i[0], Rg[5] -= i[1], e = Rg), this.setLocalTransform(e) + } + }, zg.getGlobalScale = function (t) { + var e = this.transform; + return t = t || [], e ? (t[0] = Math.sqrt(e[0] * e[0] + e[1] * e[1]), t[1] = Math.sqrt(e[2] * e[2] + e[3] * e[3]), e[0] < 0 && (t[0] = -t[0]), e[3] < 0 && (t[1] = -t[1]), t) : (t[0] = 1, t[1] = 1, t) + }, zg.transformCoordToLocal = function (t, e) { + var i = [t, e], n = this.invTransform; + return n && ae(i, i, n), i + }, zg.transformCoordToGlobal = function (t, e) { + var i = [t, e], n = this.transform; + return n && ae(i, i, n), i + }, Og.getLocalTransform = function (t, e) { + e = e || [], Pg(e); + var i = t.origin, n = t.scale || [1, 1], r = t.rotation || 0, a = t.position || [0, 0]; + return i && (e[4] -= i[0], e[5] -= i[1]), Ae(e, e, n), r && Ce(e, e, r), i && (e[4] += i[0], e[5] += i[1]), e[4] += a[0], e[5] += a[1], e + }; + var Ng = { + linear: function (t) { + return t + }, quadraticIn: function (t) { + return t * t + }, quadraticOut: function (t) { + return t * (2 - t) + }, quadraticInOut: function (t) { + return (t *= 2) < 1 ? .5 * t * t : -.5 * (--t * (t - 2) - 1) + }, cubicIn: function (t) { + return t * t * t + }, cubicOut: function (t) { + return --t * t * t + 1 + }, cubicInOut: function (t) { + return (t *= 2) < 1 ? .5 * t * t * t : .5 * ((t -= 2) * t * t + 2) + }, quarticIn: function (t) { + return t * t * t * t + }, quarticOut: function (t) { + return 1 - --t * t * t * t + }, quarticInOut: function (t) { + return (t *= 2) < 1 ? .5 * t * t * t * t : -.5 * ((t -= 2) * t * t * t - 2) + }, quinticIn: function (t) { + return t * t * t * t * t + }, quinticOut: function (t) { + return --t * t * t * t * t + 1 + }, quinticInOut: function (t) { + return (t *= 2) < 1 ? .5 * t * t * t * t * t : .5 * ((t -= 2) * t * t * t * t + 2) + }, sinusoidalIn: function (t) { + return 1 - Math.cos(t * Math.PI / 2) + }, sinusoidalOut: function (t) { + return Math.sin(t * Math.PI / 2) + }, sinusoidalInOut: function (t) { + return .5 * (1 - Math.cos(Math.PI * t)) + }, exponentialIn: function (t) { + return 0 === t ? 0 : Math.pow(1024, t - 1) + }, exponentialOut: function (t) { + return 1 === t ? 1 : 1 - Math.pow(2, -10 * t) + }, exponentialInOut: function (t) { + return 0 === t ? 0 : 1 === t ? 1 : (t *= 2) < 1 ? .5 * Math.pow(1024, t - 1) : .5 * (-Math.pow(2, -10 * (t - 1)) + 2) + }, circularIn: function (t) { + return 1 - Math.sqrt(1 - t * t) + }, circularOut: function (t) { + return Math.sqrt(1 - --t * t) + }, circularInOut: function (t) { + return (t *= 2) < 1 ? -.5 * (Math.sqrt(1 - t * t) - 1) : .5 * (Math.sqrt(1 - (t -= 2) * t) + 1) + }, elasticIn: function (t) { + var e, i = .1, n = .4; + return 0 === t ? 0 : 1 === t ? 1 : (!i || 1 > i ? (i = 1, e = n / 4) : e = n * Math.asin(1 / i) / (2 * Math.PI), -(i * Math.pow(2, 10 * (t -= 1)) * Math.sin(2 * (t - e) * Math.PI / n))) + }, elasticOut: function (t) { + var e, i = .1, n = .4; + return 0 === t ? 0 : 1 === t ? 1 : (!i || 1 > i ? (i = 1, e = n / 4) : e = n * Math.asin(1 / i) / (2 * Math.PI), i * Math.pow(2, -10 * t) * Math.sin(2 * (t - e) * Math.PI / n) + 1) + }, elasticInOut: function (t) { + var e, i = .1, n = .4; + return 0 === t ? 0 : 1 === t ? 1 : (!i || 1 > i ? (i = 1, e = n / 4) : e = n * Math.asin(1 / i) / (2 * Math.PI), (t *= 2) < 1 ? -.5 * i * Math.pow(2, 10 * (t -= 1)) * Math.sin(2 * (t - e) * Math.PI / n) : i * Math.pow(2, -10 * (t -= 1)) * Math.sin(2 * (t - e) * Math.PI / n) * .5 + 1) + }, backIn: function (t) { + var e = 1.70158; + return t * t * ((e + 1) * t - e) + }, backOut: function (t) { + var e = 1.70158; + return --t * t * ((e + 1) * t + e) + 1 + }, backInOut: function (t) { + var e = 2.5949095; + return (t *= 2) < 1 ? .5 * t * t * ((e + 1) * t - e) : .5 * ((t -= 2) * t * ((e + 1) * t + e) + 2) + }, bounceIn: function (t) { + return 1 - Ng.bounceOut(1 - t) + }, bounceOut: function (t) { + return 1 / 2.75 > t ? 7.5625 * t * t : 2 / 2.75 > t ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : 2.5 / 2.75 > t ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375 + }, bounceInOut: function (t) { + return .5 > t ? .5 * Ng.bounceIn(2 * t) : .5 * Ng.bounceOut(2 * t - 1) + .5 + } + }; + Le.prototype = { + constructor: Le, step: function (t, e) { + if (this._initialized || (this._startTime = t + this._delay, this._initialized = !0), this._paused) return void (this._pausedTime += e); + var i = (t - this._startTime - this._pausedTime) / this._life; + if (!(0 > i)) { + i = Math.min(i, 1); + var n = this.easing, r = "string" == typeof n ? Ng[n] : n, a = "function" == typeof r ? r(i) : i; + return this.fire("frame", a), 1 == i ? this.loop ? (this.restart(t), "restart") : (this._needsRemove = !0, "destroy") : null + } + }, restart: function (t) { + var e = (t - this._startTime - this._pausedTime) % this._life; + this._startTime = t - e + this.gap, this._pausedTime = 0, this._needsRemove = !1 + }, fire: function (t, e) { + t = "on" + t, this[t] && this[t](this._target, e) + }, pause: function () { + this._paused = !0 + }, resume: function () { + this._paused = !1 + } + }; + var Fg = function () { + this.head = null, this.tail = null, this._len = 0 + }, Vg = Fg.prototype; + Vg.insert = function (t) { + var e = new Wg(t); + return this.insertEntry(e), e + }, Vg.insertEntry = function (t) { + this.head ? (this.tail.next = t, t.prev = this.tail, t.next = null, this.tail = t) : this.head = this.tail = t, this._len++ + }, Vg.remove = function (t) { + var e = t.prev, i = t.next; + e ? e.next = i : this.head = i, i ? i.prev = e : this.tail = e, t.next = t.prev = null, this._len-- + }, Vg.len = function () { + return this._len + }, Vg.clear = function () { + this.head = this.tail = null, this._len = 0 + }; + var Wg = function (t) { + this.value = t, this.next, this.prev + }, Gg = function (t) { + this._list = new Fg, this._map = {}, this._maxSize = t || 10, this._lastRemovedEntry = null + }, Hg = Gg.prototype; + Hg.put = function (t, e) { + var i = this._list, n = this._map, r = null; + if (null == n[t]) { + var a = i.len(), o = this._lastRemovedEntry; + if (a >= this._maxSize && a > 0) { + var s = i.head; + i.remove(s), delete n[s.key], r = s.value, this._lastRemovedEntry = s + } + o ? o.value = e : o = new Wg(e), o.key = t, i.insertEntry(o), n[t] = o + } + return r + }, Hg.get = function (t) { + var e = this._map[t], i = this._list; + return null != e ? (e !== i.tail && (i.remove(e), i.insertEntry(e)), e.value) : void 0 + }, Hg.clear = function () { + this._list.clear(), this._map = {} + }; + var Zg = { + transparent: [0, 0, 0, 0], + aliceblue: [240, 248, 255, 1], + antiquewhite: [250, 235, 215, 1], + aqua: [0, 255, 255, 1], + aquamarine: [127, 255, 212, 1], + azure: [240, 255, 255, 1], + beige: [245, 245, 220, 1], + bisque: [255, 228, 196, 1], + black: [0, 0, 0, 1], + blanchedalmond: [255, 235, 205, 1], + blue: [0, 0, 255, 1], + blueviolet: [138, 43, 226, 1], + brown: [165, 42, 42, 1], + burlywood: [222, 184, 135, 1], + cadetblue: [95, 158, 160, 1], + chartreuse: [127, 255, 0, 1], + chocolate: [210, 105, 30, 1], + coral: [255, 127, 80, 1], + cornflowerblue: [100, 149, 237, 1], + cornsilk: [255, 248, 220, 1], + crimson: [220, 20, 60, 1], + cyan: [0, 255, 255, 1], + darkblue: [0, 0, 139, 1], + darkcyan: [0, 139, 139, 1], + darkgoldenrod: [184, 134, 11, 1], + darkgray: [169, 169, 169, 1], + darkgreen: [0, 100, 0, 1], + darkgrey: [169, 169, 169, 1], + darkkhaki: [189, 183, 107, 1], + darkmagenta: [139, 0, 139, 1], + darkolivegreen: [85, 107, 47, 1], + darkorange: [255, 140, 0, 1], + darkorchid: [153, 50, 204, 1], + darkred: [139, 0, 0, 1], + darksalmon: [233, 150, 122, 1], + darkseagreen: [143, 188, 143, 1], + darkslateblue: [72, 61, 139, 1], + darkslategray: [47, 79, 79, 1], + darkslategrey: [47, 79, 79, 1], + darkturquoise: [0, 206, 209, 1], + darkviolet: [148, 0, 211, 1], + deeppink: [255, 20, 147, 1], + deepskyblue: [0, 191, 255, 1], + dimgray: [105, 105, 105, 1], + dimgrey: [105, 105, 105, 1], + dodgerblue: [30, 144, 255, 1], + firebrick: [178, 34, 34, 1], + floralwhite: [255, 250, 240, 1], + forestgreen: [34, 139, 34, 1], + fuchsia: [255, 0, 255, 1], + gainsboro: [220, 220, 220, 1], + ghostwhite: [248, 248, 255, 1], + gold: [255, 215, 0, 1], + goldenrod: [218, 165, 32, 1], + gray: [128, 128, 128, 1], + green: [0, 128, 0, 1], + greenyellow: [173, 255, 47, 1], + grey: [128, 128, 128, 1], + honeydew: [240, 255, 240, 1], + hotpink: [255, 105, 180, 1], + indianred: [205, 92, 92, 1], + indigo: [75, 0, 130, 1], + ivory: [255, 255, 240, 1], + khaki: [240, 230, 140, 1], + lavender: [230, 230, 250, 1], + lavenderblush: [255, 240, 245, 1], + lawngreen: [124, 252, 0, 1], + lemonchiffon: [255, 250, 205, 1], + lightblue: [173, 216, 230, 1], + lightcoral: [240, 128, 128, 1], + lightcyan: [224, 255, 255, 1], + lightgoldenrodyellow: [250, 250, 210, 1], + lightgray: [211, 211, 211, 1], + lightgreen: [144, 238, 144, 1], + lightgrey: [211, 211, 211, 1], + lightpink: [255, 182, 193, 1], + lightsalmon: [255, 160, 122, 1], + lightseagreen: [32, 178, 170, 1], + lightskyblue: [135, 206, 250, 1], + lightslategray: [119, 136, 153, 1], + lightslategrey: [119, 136, 153, 1], + lightsteelblue: [176, 196, 222, 1], + lightyellow: [255, 255, 224, 1], + lime: [0, 255, 0, 1], + limegreen: [50, 205, 50, 1], + linen: [250, 240, 230, 1], + magenta: [255, 0, 255, 1], + maroon: [128, 0, 0, 1], + mediumaquamarine: [102, 205, 170, 1], + mediumblue: [0, 0, 205, 1], + mediumorchid: [186, 85, 211, 1], + mediumpurple: [147, 112, 219, 1], + mediumseagreen: [60, 179, 113, 1], + mediumslateblue: [123, 104, 238, 1], + mediumspringgreen: [0, 250, 154, 1], + mediumturquoise: [72, 209, 204, 1], + mediumvioletred: [199, 21, 133, 1], + midnightblue: [25, 25, 112, 1], + mintcream: [245, 255, 250, 1], + mistyrose: [255, 228, 225, 1], + moccasin: [255, 228, 181, 1], + navajowhite: [255, 222, 173, 1], + navy: [0, 0, 128, 1], + oldlace: [253, 245, 230, 1], + olive: [128, 128, 0, 1], + olivedrab: [107, 142, 35, 1], + orange: [255, 165, 0, 1], + orangered: [255, 69, 0, 1], + orchid: [218, 112, 214, 1], + palegoldenrod: [238, 232, 170, 1], + palegreen: [152, 251, 152, 1], + paleturquoise: [175, 238, 238, 1], + palevioletred: [219, 112, 147, 1], + papayawhip: [255, 239, 213, 1], + peachpuff: [255, 218, 185, 1], + peru: [205, 133, 63, 1], + pink: [255, 192, 203, 1], + plum: [221, 160, 221, 1], + powderblue: [176, 224, 230, 1], + purple: [128, 0, 128, 1], + red: [255, 0, 0, 1], + rosybrown: [188, 143, 143, 1], + royalblue: [65, 105, 225, 1], + saddlebrown: [139, 69, 19, 1], + salmon: [250, 128, 114, 1], + sandybrown: [244, 164, 96, 1], + seagreen: [46, 139, 87, 1], + seashell: [255, 245, 238, 1], + sienna: [160, 82, 45, 1], + silver: [192, 192, 192, 1], + skyblue: [135, 206, 235, 1], + slateblue: [106, 90, 205, 1], + slategray: [112, 128, 144, 1], + slategrey: [112, 128, 144, 1], + snow: [255, 250, 250, 1], + springgreen: [0, 255, 127, 1], + steelblue: [70, 130, 180, 1], + tan: [210, 180, 140, 1], + teal: [0, 128, 128, 1], + thistle: [216, 191, 216, 1], + tomato: [255, 99, 71, 1], + turquoise: [64, 224, 208, 1], + violet: [238, 130, 238, 1], + wheat: [245, 222, 179, 1], + white: [255, 255, 255, 1], + whitesmoke: [245, 245, 245, 1], + yellow: [255, 255, 0, 1], + yellowgreen: [154, 205, 50, 1] + }, Xg = new Gg(20), Yg = null, jg = qe, qg = Ue, Ug = (Object.freeze || Object)({ + parse: He, + lift: Ye, + toHex: je, + fastLerp: qe, + fastMapToColor: jg, + lerp: Ue, + mapToColor: qg, + modifyHSL: $e, + modifyAlpha: Ke, + stringify: Qe + }), $g = Array.prototype.slice, Kg = function (t, e, i, n) { + this._tracks = {}, this._target = t, this._loop = e || !1, this._getter = i || Je, this._setter = n || ti, this._clipCount = 0, this._delay = 0, this._doneList = [], this._onframeList = [], this._clipList = [] + }; + Kg.prototype = { + when: function (t, e) { + var i = this._tracks; + for (var n in e) if (e.hasOwnProperty(n)) { + if (!i[n]) { + i[n] = []; + var r = this._getter(this._target, n); + if (null == r) continue; + 0 !== t && i[n].push({time: 0, value: li(r)}) + } + i[n].push({time: t, value: e[n]}) + } + return this + }, during: function (t) { + return this._onframeList.push(t), this + }, pause: function () { + for (var t = 0; t < this._clipList.length; t++) this._clipList[t].pause(); + this._paused = !0 + }, resume: function () { + for (var t = 0; t < this._clipList.length; t++) this._clipList[t].resume(); + this._paused = !1 + }, isPaused: function () { + return !!this._paused + }, _doneCallback: function () { + this._tracks = {}, this._clipList.length = 0; + for (var t = this._doneList, e = t.length, i = 0; e > i; i++) t[i].call(this) + }, start: function (t, e) { + var i, n = this, r = 0, a = function () { + r--, r || n._doneCallback() + }; + for (var o in this._tracks) if (this._tracks.hasOwnProperty(o)) { + var s = ci(this, t, a, this._tracks[o], o, e); + s && (this._clipList.push(s), r++, this.animation && this.animation.addClip(s), i = s) + } + if (i) { + var l = i.onframe; + i.onframe = function (t, e) { + l(t, e); + for (var i = 0; i < n._onframeList.length; i++) n._onframeList[i](t, e) + } + } + return r || this._doneCallback(), this + }, stop: function (t) { + for (var e = this._clipList, i = this.animation, n = 0; n < e.length; n++) { + var r = e[n]; + t && r.onframe(this._target, 1), i && i.removeClip(r) + } + e.length = 0 + }, delay: function (t) { + return this._delay = t, this + }, done: function (t) { + return t && this._doneList.push(t), this + }, getClips: function () { + return this._clipList + } + }; + var Qg = 1; + "undefined" != typeof window && (Qg = Math.max(window.devicePixelRatio || 1, 1)); + var Jg = 0, tv = Qg, ev = function () { + }; + 1 === Jg ? ev = function () { + for (var t in arguments) throw new Error(arguments[t]) + } : Jg > 1 && (ev = function () { + for (var t in arguments) console.log(arguments[t]) + }); + var iv = ev, nv = function () { + this.animators = [] + }; + nv.prototype = { + constructor: nv, animate: function (t, e) { + var i, n = !1, r = this, a = this.__zr; + if (t) { + var o = t.split("."), s = r; + n = "shape" === o[0]; + for (var l = 0, u = o.length; u > l; l++) s && (s = s[o[l]]); + s && (i = s) + } else i = r; + if (!i) return void iv('Property "' + t + '" is not existed in element ' + r.id); + var c = r.animators, d = new Kg(i, e); + return d.during(function () { + r.dirty(n) + }).done(function () { + c.splice(h(c, d), 1) + }), c.push(d), a && a.animation.addAnimator(d), d + }, stopAnimation: function (t) { + for (var e = this.animators, i = e.length, n = 0; i > n; n++) e[n].stop(t); + return e.length = 0, this + }, animateTo: function (t, e, i, n, r, a) { + di(this, t, e, i, n, r, a) + }, animateFrom: function (t, e, i, n, r, a) { + di(this, t, e, i, n, r, a, !0) + } + }; + var rv = function (t) { + Og.call(this, t), bg.call(this, t), nv.call(this, t), this.id = t.id || Qp() + }; + rv.prototype = { + type: "element", name: "", __zr: null, ignore: !1, clipPath: null, isGroup: !1, drift: function (t, e) { + switch (this.draggable) { + case"horizontal": + e = 0; + break; + case"vertical": + t = 0 + } + var i = this.transform; + i || (i = this.transform = [1, 0, 0, 1, 0, 0]), i[4] += t, i[5] += e, this.decomposeTransform(), this.dirty(!1) + }, beforeUpdate: function () { + }, afterUpdate: function () { + }, update: function () { + this.updateTransform() + }, traverse: function () { + }, attrKV: function (t, e) { + if ("position" === t || "scale" === t || "origin" === t) { + if (e) { + var i = this[t]; + i || (i = this[t] = []), i[0] = e[0], i[1] = e[1] + } + } else this[t] = e + }, hide: function () { + this.ignore = !0, this.__zr && this.__zr.refresh() + }, show: function () { + this.ignore = !1, this.__zr && this.__zr.refresh() + }, attr: function (t, e) { + if ("string" == typeof t) this.attrKV(t, e); else if (S(t)) for (var i in t) t.hasOwnProperty(i) && this.attrKV(i, t[i]); + return this.dirty(!1), this + }, setClipPath: function (t) { + var e = this.__zr; + e && t.addSelfToZr(e), this.clipPath && this.clipPath !== t && this.removeClipPath(), this.clipPath = t, t.__zr = e, t.__clipTarget = this, this.dirty(!1) + }, removeClipPath: function () { + var t = this.clipPath; + t && (t.__zr && t.removeSelfFromZr(t.__zr), t.__zr = null, t.__clipTarget = null, this.clipPath = null, this.dirty(!1)) + }, addSelfToZr: function (t) { + this.__zr = t; + var e = this.animators; + if (e) for (var i = 0; i < e.length; i++) t.animation.addAnimator(e[i]); + this.clipPath && this.clipPath.addSelfToZr(t) + }, removeSelfFromZr: function (t) { + this.__zr = null; + var e = this.animators; + if (e) for (var i = 0; i < e.length; i++) t.animation.removeAnimator(e[i]); + this.clipPath && this.clipPath.removeSelfFromZr(t) + } + }, c(rv, nv), c(rv, Og), c(rv, bg); + var av = ae, ov = Math.min, sv = Math.max; + gi.prototype = { + constructor: gi, union: function (t) { + var e = ov(t.x, this.x), i = ov(t.y, this.y); + this.width = sv(t.x + t.width, this.x + this.width) - e, this.height = sv(t.y + t.height, this.y + this.height) - i, this.x = e, this.y = i + }, applyTransform: function () { + var t = [], e = [], i = [], n = []; + return function (r) { + if (r) { + t[0] = i[0] = this.x, t[1] = n[1] = this.y, e[0] = n[0] = this.x + this.width, e[1] = i[1] = this.y + this.height, av(t, t, r), av(e, e, r), av(i, i, r), av(n, n, r), this.x = ov(t[0], e[0], i[0], n[0]), this.y = ov(t[1], e[1], i[1], n[1]); + var a = sv(t[0], e[0], i[0], n[0]), o = sv(t[1], e[1], i[1], n[1]); + this.width = a - this.x, this.height = o - this.y + } + } + }(), calculateTransform: function (t) { + var e = this, i = t.width / e.width, n = t.height / e.height, r = be(); + return Te(r, r, [-e.x, -e.y]), Ae(r, r, [i, n]), Te(r, r, [t.x, t.y]), r + }, intersect: function (t) { + if (!t) return !1; + t instanceof gi || (t = gi.create(t)); + var e = this, i = e.x, n = e.x + e.width, r = e.y, a = e.y + e.height, o = t.x, s = t.x + t.width, l = t.y, + h = t.y + t.height; + return !(o > n || i > s || l > a || r > h) + }, contain: function (t, e) { + var i = this; + return t >= i.x && t <= i.x + i.width && e >= i.y && e <= i.y + i.height + }, clone: function () { + return new gi(this.x, this.y, this.width, this.height) + }, copy: function (t) { + this.x = t.x, this.y = t.y, this.width = t.width, this.height = t.height + }, plain: function () { + return {x: this.x, y: this.y, width: this.width, height: this.height} + } + }, gi.create = function (t) { + return new gi(t.x, t.y, t.width, t.height) + }; + var lv = function (t) { + t = t || {}, rv.call(this, t); + for (var e in t) t.hasOwnProperty(e) && (this[e] = t[e]); + this._children = [], this.__storage = null, this.__dirty = !0 + }; + lv.prototype = { + constructor: lv, isGroup: !0, type: "group", silent: !1, children: function () { + return this._children.slice() + }, childAt: function (t) { + return this._children[t] + }, childOfName: function (t) { + for (var e = this._children, i = 0; i < e.length; i++) if (e[i].name === t) return e[i] + }, childCount: function () { + return this._children.length + }, add: function (t) { + return t && t !== this && t.parent !== this && (this._children.push(t), this._doAdd(t)), this + }, addBefore: function (t, e) { + if (t && t !== this && t.parent !== this && e && e.parent === this) { + var i = this._children, n = i.indexOf(e); + n >= 0 && (i.splice(n, 0, t), this._doAdd(t)) + } + return this + }, _doAdd: function (t) { + t.parent && t.parent.remove(t), t.parent = this; + var e = this.__storage, i = this.__zr; + e && e !== t.__storage && (e.addToStorage(t), t instanceof lv && t.addChildrenToStorage(e)), i && i.refresh() + }, remove: function (t) { + var e = this.__zr, i = this.__storage, n = this._children, r = h(n, t); + return 0 > r ? this : (n.splice(r, 1), t.parent = null, i && (i.delFromStorage(t), t instanceof lv && t.delChildrenFromStorage(i)), e && e.refresh(), this) + }, removeAll: function () { + var t, e, i = this._children, n = this.__storage; + for (e = 0; e < i.length; e++) t = i[e], n && (n.delFromStorage(t), t instanceof lv && t.delChildrenFromStorage(n)), t.parent = null; + return i.length = 0, this + }, eachChild: function (t, e) { + for (var i = this._children, n = 0; n < i.length; n++) { + var r = i[n]; + t.call(e, r, n) + } + return this + }, traverse: function (t, e) { + for (var i = 0; i < this._children.length; i++) { + var n = this._children[i]; + t.call(e, n), "group" === n.type && n.traverse(t, e) + } + return this + }, addChildrenToStorage: function (t) { + for (var e = 0; e < this._children.length; e++) { + var i = this._children[e]; + t.addToStorage(i), i instanceof lv && i.addChildrenToStorage(t) + } + }, delChildrenFromStorage: function (t) { + for (var e = 0; e < this._children.length; e++) { + var i = this._children[e]; + t.delFromStorage(i), i instanceof lv && i.delChildrenFromStorage(t) + } + }, dirty: function () { + return this.__dirty = !0, this.__zr && this.__zr.refresh(), this + }, getBoundingRect: function (t) { + for (var e = null, i = new gi(0, 0, 0, 0), n = t || this._children, r = [], a = 0; a < n.length; a++) { + var o = n[a]; + if (!o.ignore && !o.invisible) { + var s = o.getBoundingRect(), l = o.getLocalTransform(r); + l ? (i.copy(s), i.applyTransform(l), e = e || i.clone(), e.union(i)) : (e = e || s.clone(), e.union(s)) + } + } + return e || i + } + }, u(lv, rv); + var hv = 32, uv = 7, cv = function () { + this._roots = [], this._displayList = [], this._displayListLen = 0 + }; + cv.prototype = { + constructor: cv, traverse: function (t, e) { + for (var i = 0; i < this._roots.length; i++) this._roots[i].traverse(t, e) + }, getDisplayList: function (t, e) { + return e = e || !1, t && this.updateDisplayList(e), this._displayList + }, updateDisplayList: function (t) { + this._displayListLen = 0; + for (var e = this._roots, i = this._displayList, n = 0, r = e.length; r > n; n++) this._updateAndAddDisplayable(e[n], null, t); + i.length = this._displayListLen, tg.canvasSupported && Si(i, Mi) + }, _updateAndAddDisplayable: function (t, e, i) { + if (!t.ignore || i) { + t.beforeUpdate(), t.__dirty && t.update(), t.afterUpdate(); + var n = t.clipPath; + if (n) { + e = e ? e.slice() : []; + for (var r = n, a = t; r;) r.parent = a, r.updateTransform(), e.push(r), a = r, r = r.clipPath + } + if (t.isGroup) { + for (var o = t._children, s = 0; s < o.length; s++) { + var l = o[s]; + t.__dirty && (l.__dirty = !0), this._updateAndAddDisplayable(l, e, i) + } + t.__dirty = !1 + } else t.__clipPaths = e, this._displayList[this._displayListLen++] = t + } + }, addRoot: function (t) { + t.__storage !== this && (t instanceof lv && t.addChildrenToStorage(this), this.addToStorage(t), this._roots.push(t)) + }, delRoot: function (t) { + if (null == t) { + for (var e = 0; e < this._roots.length; e++) { + var i = this._roots[e]; + i instanceof lv && i.delChildrenFromStorage(this) + } + return this._roots = [], this._displayList = [], void (this._displayListLen = 0) + } + if (t instanceof Array) for (var e = 0, n = t.length; n > e; e++) this.delRoot(t[e]); else { + var r = h(this._roots, t); + r >= 0 && (this.delFromStorage(t), this._roots.splice(r, 1), t instanceof lv && t.delChildrenFromStorage(this)) + } + }, addToStorage: function (t) { + return t && (t.__storage = this, t.dirty(!1)), this + }, delFromStorage: function (t) { + return t && (t.__storage = null), this + }, dispose: function () { + this._renderList = this._roots = null + }, displayableSortFunc: Mi + }; + var dv = { + shadowBlur: 1, + shadowOffsetX: 1, + shadowOffsetY: 1, + textShadowBlur: 1, + textShadowOffsetX: 1, + textShadowOffsetY: 1, + textBoxShadowBlur: 1, + textBoxShadowOffsetX: 1, + textBoxShadowOffsetY: 1 + }, fv = function (t, e, i) { + return dv.hasOwnProperty(e) ? i *= t.dpr : i + }, + pv = [["shadowBlur", 0], ["shadowOffsetX", 0], ["shadowOffsetY", 0], ["shadowColor", "#000"], ["lineCap", "butt"], ["lineJoin", "miter"], ["miterLimit", 10]], + gv = function (t) { + this.extendFrom(t, !1) + }; + gv.prototype = { + constructor: gv, + fill: "#000", + stroke: null, + opacity: 1, + fillOpacity: null, + strokeOpacity: null, + lineDash: null, + lineDashOffset: 0, + shadowBlur: 0, + shadowOffsetX: 0, + shadowOffsetY: 0, + lineWidth: 1, + strokeNoScale: !1, + text: null, + font: null, + textFont: null, + fontStyle: null, + fontWeight: null, + fontSize: null, + fontFamily: null, + textTag: null, + textFill: "#000", + textStroke: null, + textWidth: null, + textHeight: null, + textStrokeWidth: 0, + textLineHeight: null, + textPosition: "inside", + textRect: null, + textOffset: null, + textAlign: null, + textVerticalAlign: null, + textDistance: 5, + textShadowColor: "transparent", + textShadowBlur: 0, + textShadowOffsetX: 0, + textShadowOffsetY: 0, + textBoxShadowColor: "transparent", + textBoxShadowBlur: 0, + textBoxShadowOffsetX: 0, + textBoxShadowOffsetY: 0, + transformText: !1, + textRotation: 0, + textOrigin: null, + textBackgroundColor: null, + textBorderColor: null, + textBorderWidth: 0, + textBorderRadius: 0, + textPadding: null, + rich: null, + truncate: null, + blend: null, + bind: function (t, e, i) { + for (var n = this, r = i && i.style, a = !r, o = 0; o < pv.length; o++) { + var s = pv[o], l = s[0]; + (a || n[l] !== r[l]) && (t[l] = fv(t, l, n[l] || s[1])) + } + if ((a || n.fill !== r.fill) && (t.fillStyle = n.fill), (a || n.stroke !== r.stroke) && (t.strokeStyle = n.stroke), (a || n.opacity !== r.opacity) && (t.globalAlpha = null == n.opacity ? 1 : n.opacity), (a || n.blend !== r.blend) && (t.globalCompositeOperation = n.blend || "source-over"), this.hasStroke()) { + var h = n.lineWidth; + t.lineWidth = h / (this.strokeNoScale && e && e.getLineScale ? e.getLineScale() : 1) + } + }, + hasFill: function () { + var t = this.fill; + return null != t && "none" !== t + }, + hasStroke: function () { + var t = this.stroke; + return null != t && "none" !== t && this.lineWidth > 0 + }, + extendFrom: function (t, e) { + if (t) for (var i in t) !t.hasOwnProperty(i) || e !== !0 && (e === !1 ? this.hasOwnProperty(i) : null == t[i]) || (this[i] = t[i]) + }, + set: function (t, e) { + "string" == typeof t ? this[t] = e : this.extendFrom(t, !0) + }, + clone: function () { + var t = new this.constructor; + return t.extendFrom(this, !0), t + }, + getGradient: function (t, e, i) { + for (var n = "radial" === e.type ? Ti : Ii, r = n(t, e, i), a = e.colorStops, o = 0; o < a.length; o++) r.addColorStop(a[o].offset, a[o].color); + return r + } + }; + for (var vv = gv.prototype, mv = 0; mv < pv.length; mv++) { + var yv = pv[mv]; + yv[0] in vv || (vv[yv[0]] = yv[1]) + } + gv.getGradient = vv.getGradient; + var xv = function (t, e) { + this.image = t, this.repeat = e, this.type = "pattern" + }; + xv.prototype.getCanvasPattern = function (t) { + return t.createPattern(this.image, this.repeat || "repeat") + }; + var _v = function (t, e, i) { + var n; + i = i || tv, "string" == typeof t ? n = Ai(t, e, i) : S(t) && (n = t, t = n.id), this.id = t, this.dom = n; + var r = n.style; + r && (n.onselectstart = Ci, r["-webkit-user-select"] = "none", r["user-select"] = "none", r["-webkit-touch-callout"] = "none", r["-webkit-tap-highlight-color"] = "rgba(0,0,0,0)", r.padding = 0, r.margin = 0, r["border-width"] = 0), this.domBack = null, this.ctxBack = null, this.painter = e, this.config = null, this.clearColor = 0, this.motionBlur = !1, this.lastFrameAlpha = .7, this.dpr = i + }; + _v.prototype = { + constructor: _v, + __dirty: !0, + __used: !1, + __drawIndex: 0, + __startIndex: 0, + __endIndex: 0, + incremental: !1, + getElementCount: function () { + return this.__endIndex - this.__startIndex + }, + initContext: function () { + this.ctx = this.dom.getContext("2d"), this.ctx.dpr = this.dpr + }, + createBackBuffer: function () { + var t = this.dpr; + this.domBack = Ai("back-" + this.id, this.painter, t), this.ctxBack = this.domBack.getContext("2d"), 1 != t && this.ctxBack.scale(t, t) + }, + resize: function (t, e) { + var i = this.dpr, n = this.dom, r = n.style, a = this.domBack; + r && (r.width = t + "px", r.height = e + "px"), n.width = t * i, n.height = e * i, a && (a.width = t * i, a.height = e * i, 1 != i && this.ctxBack.scale(i, i)) + }, + clear: function (t, e) { + var i = this.dom, n = this.ctx, r = i.width, a = i.height, e = e || this.clearColor, + o = this.motionBlur && !t, s = this.lastFrameAlpha, l = this.dpr; + if (o && (this.domBack || this.createBackBuffer(), this.ctxBack.globalCompositeOperation = "copy", this.ctxBack.drawImage(i, 0, 0, r / l, a / l)), n.clearRect(0, 0, r, a), e && "transparent" !== e) { + var h; + e.colorStops ? (h = e.__canvasGradient || gv.getGradient(n, e, { + x: 0, + y: 0, + width: r, + height: a + }), e.__canvasGradient = h) : e.image && (h = xv.prototype.getCanvasPattern.call(e, n)), n.save(), n.fillStyle = h || e, n.fillRect(0, 0, r, a), n.restore() + } + if (o) { + var u = this.domBack; + n.save(), n.globalAlpha = s, n.drawImage(u, 0, 0, r, a), n.restore() + } + } + }; + var wv = "undefined" != typeof window && (window.requestAnimationFrame && window.requestAnimationFrame.bind(window) || window.msRequestAnimationFrame && window.msRequestAnimationFrame.bind(window) || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame) || function (t) { + setTimeout(t, 16) + }, bv = new Gg(50), Sv = {}, Mv = 0, Iv = 5e3, Tv = /\{([a-zA-Z0-9_]+)\|([^}]*)\}/g, Cv = "12px sans-serif", + Av = {}; + Av.measureText = function (t, e) { + var i = l(); + return i.font = e || Cv, i.measureText(t) + }; + var Dv = {left: 1, right: 1, center: 1}, kv = {top: 1, bottom: 1, middle: 1}, + Pv = [["textShadowBlur", "shadowBlur", 0], ["textShadowOffsetX", "shadowOffsetX", 0], ["textShadowOffsetY", "shadowOffsetY", 0], ["textShadowColor", "shadowColor", "transparent"]], + Lv = new gi, Ov = function () { + }; + Ov.prototype = { + constructor: Ov, drawRectText: function (t, e) { + var i = this.style; + e = i.textRect || e, this.__dirty && Qi(i, !0); + var n = i.text; + if (null != n && (n += ""), vn(n, i)) { + t.save(); + var r = this.transform; + i.transformText ? this.setTransform(t) : r && (Lv.copy(e), Lv.applyTransform(r), e = Lv), tn(this, t, n, i, e), t.restore() + } + } + }, mn.prototype = { + constructor: mn, + type: "displayable", + __dirty: !0, + invisible: !1, + z: 0, + z2: 0, + zlevel: 0, + draggable: !1, + dragging: !1, + silent: !1, + culling: !1, + cursor: "pointer", + rectHover: !1, + progressive: !1, + incremental: !1, + globalScaleRatio: 1, + beforeBrush: function () { + }, + afterBrush: function () { + }, + brush: function () { + }, + getBoundingRect: function () { + }, + contain: function (t, e) { + return this.rectContain(t, e) + }, + traverse: function (t, e) { + t.call(e, this) + }, + rectContain: function (t, e) { + var i = this.transformCoordToLocal(t, e), n = this.getBoundingRect(); + return n.contain(i[0], i[1]) + }, + dirty: function () { + this.__dirty = this.__dirtyText = !0, this._rect = null, this.__zr && this.__zr.refresh() + }, + animateStyle: function (t) { + return this.animate("style", t) + }, + attrKV: function (t, e) { + "style" !== t ? rv.prototype.attrKV.call(this, t, e) : this.style.set(e) + }, + setStyle: function (t, e) { + return this.style.set(t, e), this.dirty(!1), this + }, + useStyle: function (t) { + return this.style = new gv(t, this), this.dirty(!1), this + } + }, u(mn, rv), c(mn, Ov), yn.prototype = { + constructor: yn, type: "image", brush: function (t, e) { + var i = this.style, n = i.image; + i.bind(t, this, e); + var r = this._image = ki(n, this._image, this, this.onload); + if (r && Li(r)) { + var a = i.x || 0, o = i.y || 0, s = i.width, l = i.height, h = r.width / r.height; + if (null == s && null != l ? s = l * h : null == l && null != s ? l = s / h : null == s && null == l && (s = r.width, l = r.height), this.setTransform(t), i.sWidth && i.sHeight) { + var u = i.sx || 0, c = i.sy || 0; + t.drawImage(r, u, c, i.sWidth, i.sHeight, a, o, s, l) + } else if (i.sx && i.sy) { + var u = i.sx, c = i.sy, d = s - u, f = l - c; + t.drawImage(r, u, c, d, f, a, o, s, l) + } else t.drawImage(r, a, o, s, l); + null != i.text && (this.restoreTransform(t), this.drawRectText(t, this.getBoundingRect())) + } + }, getBoundingRect: function () { + var t = this.style; + return this._rect || (this._rect = new gi(t.x || 0, t.y || 0, t.width || 0, t.height || 0)), this._rect + } + }, u(yn, mn); + var zv = 1e5, Ev = 314159, Rv = .01, Bv = .001, Nv = new gi(0, 0, 0, 0), Fv = new gi(0, 0, 0, 0), + Vv = function (t, e, i) { + this.type = "canvas"; + var n = !t.nodeName || "CANVAS" === t.nodeName.toUpperCase(); + this._opts = i = o({}, i || {}), this.dpr = i.devicePixelRatio || tv, this._singleCanvas = n, this.root = t; + var r = t.style; + r && (r["-webkit-tap-highlight-color"] = "transparent", r["-webkit-user-select"] = r["user-select"] = r["-webkit-touch-callout"] = "none", t.innerHTML = ""), this.storage = e; + var a = this._zlevelList = [], s = this._layers = {}; + if (this._layerConfig = {}, this._needsManuallyCompositing = !1, n) { + var l = t.width, h = t.height; + null != i.width && (l = i.width), null != i.height && (h = i.height), this.dpr = i.devicePixelRatio || 1, t.width = l * this.dpr, t.height = h * this.dpr, this._width = l, this._height = h; + var u = new _v(t, this, this.dpr); + u.__builtin__ = !0, u.initContext(), s[Ev] = u, u.zlevel = Ev, a.push(Ev), this._domRoot = t + } else { + this._width = this._getSize(0), this._height = this._getSize(1); + var c = this._domRoot = Mn(this._width, this._height); + t.appendChild(c) + } + this._hoverlayer = null, this._hoverElements = [] + }; + Vv.prototype = { + constructor: Vv, getType: function () { + return "canvas" + }, isSingleCanvas: function () { + return this._singleCanvas + }, getViewportRoot: function () { + return this._domRoot + }, getViewportRootOffset: function () { + var t = this.getViewportRoot(); + return t ? {offsetLeft: t.offsetLeft || 0, offsetTop: t.offsetTop || 0} : void 0 + }, refresh: function (t) { + var e = this.storage.getDisplayList(!0), i = this._zlevelList; + this._redrawId = Math.random(), this._paintList(e, t, this._redrawId); + for (var n = 0; n < i.length; n++) { + var r = i[n], a = this._layers[r]; + if (!a.__builtin__ && a.refresh) { + var o = 0 === n ? this._backgroundColor : null; + a.refresh(o) + } + } + return this.refreshHover(), this + }, addHover: function (t, e) { + if (!t.__hoverMir) { + var i = new t.constructor({style: t.style, shape: t.shape, z: t.z, z2: t.z2, silent: t.silent}); + return i.__from = t, t.__hoverMir = i, e && i.setStyle(e), this._hoverElements.push(i), i + } + }, removeHover: function (t) { + var e = t.__hoverMir, i = this._hoverElements, n = h(i, e); + n >= 0 && i.splice(n, 1), t.__hoverMir = null + }, clearHover: function () { + for (var t = this._hoverElements, e = 0; e < t.length; e++) { + var i = t[e].__from; + i && (i.__hoverMir = null) + } + t.length = 0 + }, refreshHover: function () { + var t = this._hoverElements, e = t.length, i = this._hoverlayer; + if (i && i.clear(), e) { + Si(t, this.storage.displayableSortFunc), i || (i = this._hoverlayer = this.getLayer(zv)); + var n = {}; + i.ctx.save(); + for (var r = 0; e > r;) { + var a = t[r], o = a.__from; + o && o.__zr ? (r++, o.invisible || (a.transform = o.transform, a.invTransform = o.invTransform, a.__clipPaths = o.__clipPaths, this._doPaintEl(a, i, !0, n))) : (t.splice(r, 1), o.__hoverMir = null, e--) + } + i.ctx.restore() + } + }, getHoverLayer: function () { + return this.getLayer(zv) + }, _paintList: function (t, e, i) { + if (this._redrawId === i) { + e = e || !1, this._updateLayerStatus(t); + var n = this._doPaintList(t, e); + if (this._needsManuallyCompositing && this._compositeManually(), !n) { + var r = this; + wv(function () { + r._paintList(t, e, i) + }) + } + } + }, _compositeManually: function () { + var t = this.getLayer(Ev).ctx, e = this._domRoot.width, i = this._domRoot.height; + t.clearRect(0, 0, e, i), this.eachBuiltinLayer(function (n) { + n.virtual && t.drawImage(n.dom, 0, 0, e, i) + }) + }, _doPaintList: function (t, e) { + for (var i = [], n = 0; n < this._zlevelList.length; n++) { + var r = this._zlevelList[n], a = this._layers[r]; + a.__builtin__ && a !== this._hoverlayer && (a.__dirty || e) && i.push(a) + } + for (var o = !0, s = 0; s < i.length; s++) { + var a = i[s], l = a.ctx, h = {}; + l.save(); + var u = e ? a.__startIndex : a.__drawIndex, c = !e && a.incremental && Date.now, d = c && Date.now(), + p = a.zlevel === this._zlevelList[0] ? this._backgroundColor : null; + if (a.__startIndex === a.__endIndex) a.clear(!1, p); else if (u === a.__startIndex) { + var g = t[u]; + g.incremental && g.notClear && !e || a.clear(!1, p) + } + -1 === u && (console.error("For some unknown reason. drawIndex is -1"), u = a.__startIndex); + for (var v = u; v < a.__endIndex; v++) { + var m = t[v]; + if (this._doPaintEl(m, a, e, h), m.__dirty = m.__dirtyText = !1, c) { + var y = Date.now() - d; + if (y > 15) break + } + } + a.__drawIndex = v, a.__drawIndex < a.__endIndex && (o = !1), h.prevElClipPaths && l.restore(), l.restore() + } + return tg.wxa && f(this._layers, function (t) { + t && t.ctx && t.ctx.draw && t.ctx.draw() + }), o + }, _doPaintEl: function (t, e, i, n) { + var r = e.ctx, a = t.transform; + if (!(!e.__dirty && !i || t.invisible || 0 === t.style.opacity || a && !a[0] && !a[3] || t.culling && wn(t, this._width, this._height))) { + var o = t.__clipPaths; + (!n.prevElClipPaths || bn(o, n.prevElClipPaths)) && (n.prevElClipPaths && (e.ctx.restore(), n.prevElClipPaths = null, n.prevEl = null), o && (r.save(), Sn(o, r), n.prevElClipPaths = o)), t.beforeBrush && t.beforeBrush(r), t.brush(r, n.prevEl || null), n.prevEl = t, t.afterBrush && t.afterBrush(r) + } + }, getLayer: function (t, e) { + this._singleCanvas && !this._needsManuallyCompositing && (t = Ev); + var i = this._layers[t]; + return i || (i = new _v("zr_" + t, this, this.dpr), i.zlevel = t, i.__builtin__ = !0, this._layerConfig[t] && r(i, this._layerConfig[t], !0), e && (i.virtual = e), this.insertLayer(t, i), i.initContext()), i + }, insertLayer: function (t, e) { + var i = this._layers, n = this._zlevelList, r = n.length, a = null, o = -1, s = this._domRoot; + if (i[t]) return void iv("ZLevel " + t + " has been used already"); + if (!_n(e)) return void iv("Layer of zlevel " + t + " is not valid"); + if (r > 0 && t > n[0]) { + for (o = 0; r - 1 > o && !(n[o] < t && n[o + 1] > t); o++) ; + a = i[n[o]] + } + if (n.splice(o + 1, 0, t), i[t] = e, !e.virtual) if (a) { + var l = a.dom; + l.nextSibling ? s.insertBefore(e.dom, l.nextSibling) : s.appendChild(e.dom) + } else s.firstChild ? s.insertBefore(e.dom, s.firstChild) : s.appendChild(e.dom) + }, eachLayer: function (t, e) { + var i, n, r = this._zlevelList; + for (n = 0; n < r.length; n++) i = r[n], t.call(e, this._layers[i], i) + }, eachBuiltinLayer: function (t, e) { + var i, n, r, a = this._zlevelList; + for (r = 0; r < a.length; r++) n = a[r], i = this._layers[n], i.__builtin__ && t.call(e, i, n) + }, eachOtherLayer: function (t, e) { + var i, n, r, a = this._zlevelList; + for (r = 0; r < a.length; r++) n = a[r], i = this._layers[n], i.__builtin__ || t.call(e, i, n) + }, getLayers: function () { + return this._layers + }, _updateLayerStatus: function (t) { + function e(t) { + r && (r.__endIndex !== t && (r.__dirty = !0), r.__endIndex = t) + } + + if (this.eachBuiltinLayer(function (t) { + t.__dirty = t.__used = !1 + }), this._singleCanvas) for (var i = 1; i < t.length; i++) { + var n = t[i]; + if (n.zlevel !== t[i - 1].zlevel || n.incremental) { + this._needsManuallyCompositing = !0; + break + } + } + for (var r = null, a = 0, i = 0; i < t.length; i++) { + var o, n = t[i], s = n.zlevel; + n.incremental ? (o = this.getLayer(s + Bv, this._needsManuallyCompositing), o.incremental = !0, a = 1) : o = this.getLayer(s + (a > 0 ? Rv : 0), this._needsManuallyCompositing), o.__builtin__ || iv("ZLevel " + s + " has been used by unkown layer " + o.id), o !== r && (o.__used = !0, o.__startIndex !== i && (o.__dirty = !0), o.__startIndex = i, o.__drawIndex = o.incremental ? -1 : i, e(i), r = o), n.__dirty && (o.__dirty = !0, o.incremental && o.__drawIndex < 0 && (o.__drawIndex = i)) + } + e(i), this.eachBuiltinLayer(function (t) { + !t.__used && t.getElementCount() > 0 && (t.__dirty = !0, t.__startIndex = t.__endIndex = t.__drawIndex = 0), t.__dirty && t.__drawIndex < 0 && (t.__drawIndex = t.__startIndex) + }) + }, clear: function () { + return this.eachBuiltinLayer(this._clearLayer), this + }, _clearLayer: function (t) { + t.clear() + }, setBackgroundColor: function (t) { + this._backgroundColor = t + }, configLayer: function (t, e) { + if (e) { + var i = this._layerConfig; + i[t] ? r(i[t], e, !0) : i[t] = e; + for (var n = 0; n < this._zlevelList.length; n++) { + var a = this._zlevelList[n]; + if (a === t || a === t + Rv) { + var o = this._layers[a]; + r(o, i[t], !0) + } + } + } + }, delLayer: function (t) { + var e = this._layers, i = this._zlevelList, n = e[t]; + n && (n.dom.parentNode.removeChild(n.dom), delete e[t], i.splice(h(i, t), 1)) + }, resize: function (t, e) { + if (this._domRoot.style) { + var i = this._domRoot; + i.style.display = "none"; + var n = this._opts; + if (null != t && (n.width = t), null != e && (n.height = e), t = this._getSize(0), e = this._getSize(1), i.style.display = "", this._width != t || e != this._height) { + i.style.width = t + "px", i.style.height = e + "px"; + for (var r in this._layers) this._layers.hasOwnProperty(r) && this._layers[r].resize(t, e); + f(this._progressiveLayers, function (i) { + i.resize(t, e) + }), this.refresh(!0) + } + this._width = t, this._height = e + } else { + if (null == t || null == e) return; + this._width = t, this._height = e, this.getLayer(Ev).resize(t, e) + } + return this + }, clearLayer: function (t) { + var e = this._layers[t]; + e && e.clear() + }, dispose: function () { + this.root.innerHTML = "", this.root = this.storage = this._domRoot = this._layers = null + }, getRenderedCanvas: function (t) { + if (t = t || {}, this._singleCanvas && !this._compositeManually) return this._layers[Ev].dom; + var e = new _v("image", this, t.pixelRatio || this.dpr); + if (e.initContext(), e.clear(!1, t.backgroundColor || this._backgroundColor), t.pixelRatio <= this.dpr) { + this.refresh(); + var i = e.dom.width, n = e.dom.height, r = e.ctx; + this.eachLayer(function (t) { + t.__builtin__ ? r.drawImage(t.dom, 0, 0, i, n) : t.renderToCanvas && (e.ctx.save(), t.renderToCanvas(e.ctx), e.ctx.restore()) + }) + } else for (var a = {}, o = this.storage.getDisplayList(!0), s = 0; s < o.length; s++) { + var l = o[s]; + this._doPaintEl(l, e, !0, a) + } + return e.dom + }, getWidth: function () { + return this._width + }, getHeight: function () { + return this._height + }, _getSize: function (t) { + var e = this._opts, i = ["width", "height"][t], n = ["clientWidth", "clientHeight"][t], + r = ["paddingLeft", "paddingTop"][t], a = ["paddingRight", "paddingBottom"][t]; + if (null != e[i] && "auto" !== e[i]) return parseFloat(e[i]); + var o = this.root, s = document.defaultView.getComputedStyle(o); + return (o[n] || xn(s[i]) || xn(o.style[i])) - (xn(s[r]) || 0) - (xn(s[a]) || 0) | 0 + }, pathToImage: function (t, e) { + e = e || this.dpr; + var i = document.createElement("canvas"), n = i.getContext("2d"), r = t.getBoundingRect(), a = t.style, + o = a.shadowBlur * e, s = a.shadowOffsetX * e, l = a.shadowOffsetY * e, + h = a.hasStroke() ? a.lineWidth : 0, u = Math.max(h / 2, -s + o), c = Math.max(h / 2, s + o), + d = Math.max(h / 2, -l + o), f = Math.max(h / 2, l + o), p = r.width + u + c, g = r.height + d + f; + i.width = p * e, i.height = g * e, n.scale(e, e), n.clearRect(0, 0, p, g), n.dpr = e; + var v = {position: t.position, rotation: t.rotation, scale: t.scale}; + t.position = [u - r.x, d - r.y], t.rotation = 0, t.scale = [1, 1], t.updateTransform(), t && t.brush(n); + var m = yn, y = new m({style: {x: 0, y: 0, image: i}}); + return null != v.position && (y.position = t.position = v.position), null != v.rotation && (y.rotation = t.rotation = v.rotation), null != v.scale && (y.scale = t.scale = v.scale), y + } + }; + var Wv = function (t) { + t = t || {}, this.stage = t.stage || {}, this.onframe = t.onframe || function () { + }, this._clips = [], this._running = !1, this._time, this._pausedTime, this._pauseStart, this._paused = !1, bg.call(this) + }; + Wv.prototype = { + constructor: Wv, addClip: function (t) { + this._clips.push(t) + }, addAnimator: function (t) { + t.animation = this; + for (var e = t.getClips(), i = 0; i < e.length; i++) this.addClip(e[i]) + }, removeClip: function (t) { + var e = h(this._clips, t); + e >= 0 && this._clips.splice(e, 1) + }, removeAnimator: function (t) { + for (var e = t.getClips(), i = 0; i < e.length; i++) this.removeClip(e[i]); + t.animation = null + }, _update: function () { + for (var t = (new Date).getTime() - this._pausedTime, e = t - this._time, i = this._clips, n = i.length, r = [], a = [], o = 0; n > o; o++) { + var s = i[o], l = s.step(t, e); + l && (r.push(l), a.push(s)) + } + for (var o = 0; n > o;) i[o]._needsRemove ? (i[o] = i[n - 1], i.pop(), n--) : o++; + n = r.length; + for (var o = 0; n > o; o++) a[o].fire(r[o]); + this._time = t, this.onframe(e), this.trigger("frame", e), this.stage.update && this.stage.update() + }, _startLoop: function () { + function t() { + e._running && (wv(t), !e._paused && e._update()) + } + + var e = this; + this._running = !0, wv(t) + }, start: function () { + this._time = (new Date).getTime(), this._pausedTime = 0, this._startLoop() + }, stop: function () { + this._running = !1 + }, pause: function () { + this._paused || (this._pauseStart = (new Date).getTime(), this._paused = !0) + }, resume: function () { + this._paused && (this._pausedTime += (new Date).getTime() - this._pauseStart, this._paused = !1) + }, clear: function () { + this._clips = [] + }, isFinished: function () { + return !this._clips.length + }, animate: function (t, e) { + e = e || {}; + var i = new Kg(t, e.loop, e.getter, e.setter); + return this.addAnimator(i), i + } + }, c(Wv, bg); + var Gv = function () { + this._track = [] + }; + Gv.prototype = { + constructor: Gv, recognize: function (t, e, i) { + return this._doTrack(t, e, i), this._recognize(t) + }, clear: function () { + return this._track.length = 0, this + }, _doTrack: function (t, e, i) { + var n = t.touches; + if (n) { + for (var r = {points: [], touches: [], target: e, event: t}, a = 0, o = n.length; o > a; a++) { + var s = n[a], l = de(i, s, {}); + r.points.push([l.zrX, l.zrY]), r.touches.push(s) + } + this._track.push(r) + } + }, _recognize: function (t) { + for (var e in Hv) if (Hv.hasOwnProperty(e)) { + var i = Hv[e](this._track, t); + if (i) return i + } + } + }; + var Hv = { + pinch: function (t, e) { + var i = t.length; + if (i) { + var n = (t[i - 1] || {}).points, r = (t[i - 2] || {}).points || n; + if (r && r.length > 1 && n && n.length > 1) { + var a = In(n) / In(r); + !isFinite(a) && (a = 1), e.pinchScale = a; + var o = Tn(n); + return e.pinchX = o[0], e.pinchY = o[1], {type: "pinch", target: t[0].target, event: e} + } + } + } + }, Zv = 300, + Xv = ["click", "dblclick", "mousewheel", "mouseout", "mouseup", "mousedown", "mousemove", "contextmenu"], + Yv = ["touchstart", "touchend", "touchmove"], + jv = {pointerdown: 1, pointerup: 1, pointermove: 1, pointerout: 1}, qv = p(Xv, function (t) { + var e = t.replace("mouse", "pointer"); + return jv[e] ? e : t + }), Uv = { + mousemove: function (t) { + t = pe(this.dom, t), this.trigger("mousemove", t) + }, mouseout: function (t) { + t = pe(this.dom, t); + var e = t.toElement || t.relatedTarget; + if (e != this.dom) for (; e && 9 != e.nodeType;) { + if (e === this.dom) return; + e = e.parentNode + } + this.trigger("mouseout", t) + }, touchstart: function (t) { + t = pe(this.dom, t), t.zrByTouch = !0, this._lastTouchMoment = new Date, An(this, t, "start"), Uv.mousemove.call(this, t), Uv.mousedown.call(this, t), Dn(this) + }, touchmove: function (t) { + t = pe(this.dom, t), t.zrByTouch = !0, An(this, t, "change"), Uv.mousemove.call(this, t), Dn(this) + }, touchend: function (t) { + t = pe(this.dom, t), t.zrByTouch = !0, An(this, t, "end"), Uv.mouseup.call(this, t), +new Date - this._lastTouchMoment < Zv && Uv.click.call(this, t), Dn(this) + }, pointerdown: function (t) { + Uv.mousedown.call(this, t) + }, pointermove: function (t) { + kn(t) || Uv.mousemove.call(this, t) + }, pointerup: function (t) { + Uv.mouseup.call(this, t) + }, pointerout: function (t) { + kn(t) || Uv.mouseout.call(this, t) + } + }; + f(["click", "mousedown", "mouseup", "mousewheel", "dblclick", "contextmenu"], function (t) { + Uv[t] = function (e) { + e = pe(this.dom, e), this.trigger(t, e) + } + }); + var $v = Ln.prototype; + $v.dispose = function () { + for (var t = Xv.concat(Yv), e = 0; e < t.length; e++) { + var i = t[e]; + ve(this.dom, Cn(i), this._handlers[i]) + } + }, $v.setCursor = function (t) { + this.dom.style && (this.dom.style.cursor = t || "default") + }, c(Ln, bg); + var Kv = !tg.canvasSupported, Qv = {canvas: Vv}, Jv = {}, tm = "4.0.5", em = function (t, e, i) { + i = i || {}, this.dom = e, this.id = t; + var n = this, r = new cv, a = i.renderer; + if (Kv) { + if (!Qv.vml) throw new Error("You need to require 'zrender/vml/vml' to support IE8"); + a = "vml" + } else a && Qv[a] || (a = "canvas"); + var o = new Qv[a](e, r, i, t); + this.storage = r, this.painter = o; + var s = tg.node || tg.worker ? null : new Ln(o.getViewportRoot()); + this.handler = new Ag(r, o, s, o.root), this.animation = new Wv({stage: {update: y(this.flush, this)}}), this.animation.start(), this._needsRefresh; + var l = r.delFromStorage, h = r.addToStorage; + r.delFromStorage = function (t) { + l.call(r, t), t && t.removeSelfFromZr(n) + }, r.addToStorage = function (t) { + h.call(r, t), t.addSelfToZr(n) + } + }; + em.prototype = { + constructor: em, getId: function () { + return this.id + }, add: function (t) { + this.storage.addRoot(t), this._needsRefresh = !0 + }, remove: function (t) { + this.storage.delRoot(t), this._needsRefresh = !0 + }, configLayer: function (t, e) { + this.painter.configLayer && this.painter.configLayer(t, e), this._needsRefresh = !0 + }, setBackgroundColor: function (t) { + this.painter.setBackgroundColor && this.painter.setBackgroundColor(t), this._needsRefresh = !0 + }, refreshImmediately: function () { + this._needsRefresh = !1, this.painter.refresh(), this._needsRefresh = !1 + }, refresh: function () { + this._needsRefresh = !0 + }, flush: function () { + var t; + this._needsRefresh && (t = !0, this.refreshImmediately()), this._needsRefreshHover && (t = !0, this.refreshHoverImmediately()), t && this.trigger("rendered") + }, addHover: function (t, e) { + if (this.painter.addHover) { + var i = this.painter.addHover(t, e); + return this.refreshHover(), i + } + }, removeHover: function (t) { + this.painter.removeHover && (this.painter.removeHover(t), this.refreshHover()) + }, clearHover: function () { + this.painter.clearHover && (this.painter.clearHover(), this.refreshHover()) + }, refreshHover: function () { + this._needsRefreshHover = !0 + }, refreshHoverImmediately: function () { + this._needsRefreshHover = !1, this.painter.refreshHover && this.painter.refreshHover() + }, resize: function (t) { + t = t || {}, this.painter.resize(t.width, t.height), this.handler.resize() + }, clearAnimation: function () { + this.animation.clear() + }, getWidth: function () { + return this.painter.getWidth() + }, getHeight: function () { + return this.painter.getHeight() + }, pathToImage: function (t, e) { + return this.painter.pathToImage(t, e) + }, setCursorStyle: function (t) { + this.handler.setCursorStyle(t) + }, findHover: function (t, e) { + return this.handler.findHover(t, e) + }, on: function (t, e, i) { + this.handler.on(t, e, i) + }, off: function (t, e) { + this.handler.off(t, e) + }, trigger: function (t, e) { + this.handler.trigger(t, e) + }, clear: function () { + this.storage.delRoot(), this.painter.clear() + }, dispose: function () { + this.animation.stop(), this.clear(), this.storage.dispose(), this.painter.dispose(), this.handler.dispose(), this.animation = this.storage = this.painter = this.handler = null, Bn(this.id) + } + }; + var im = (Object.freeze || Object)({version: tm, init: On, dispose: zn, getInstance: En, registerPainter: Rn}), + nm = f, rm = S, am = _, om = "series\x00", + sm = ["fontStyle", "fontWeight", "fontSize", "fontFamily", "rich", "tag", "color", "textBorderColor", "textBorderWidth", "width", "height", "lineHeight", "align", "verticalAlign", "baseline", "shadowColor", "shadowBlur", "shadowOffsetX", "shadowOffsetY", "textShadowColor", "textShadowBlur", "textShadowOffsetX", "textShadowOffsetY", "backgroundColor", "borderColor", "borderWidth", "borderRadius", "padding"], + lm = 0, hm = ".", um = "___EC__COMPONENT__CONTAINER___", cm = 0, dm = function (t) { + for (var e = 0; e < t.length; e++) t[e][1] || (t[e][1] = t[e][0]); + return function (e, i, n) { + for (var r = {}, a = 0; a < t.length; a++) { + var o = t[a][1]; + if (!(i && h(i, o) >= 0 || n && h(n, o) < 0)) { + var s = e.getShallow(o); + null != s && (r[t[a][0]] = s) + } + } + return r + } + }, + fm = dm([["lineWidth", "width"], ["stroke", "color"], ["opacity"], ["shadowBlur"], ["shadowOffsetX"], ["shadowOffsetY"], ["shadowColor"]]), + pm = { + getLineStyle: function (t) { + var e = fm(this, t), i = this.getLineDash(e.lineWidth); + return i && (e.lineDash = i), e + }, getLineDash: function (t) { + null == t && (t = 1); + var e = this.get("type"), i = Math.max(t, 2), n = 4 * t; + return "solid" === e || null == e ? null : "dashed" === e ? [n, n] : [i, i] + } + }, + gm = dm([["fill", "color"], ["shadowBlur"], ["shadowOffsetX"], ["shadowOffsetY"], ["opacity"], ["shadowColor"]]), + vm = { + getAreaStyle: function (t, e) { + return gm(this, t, e) + } + }, mm = Math.pow, ym = Math.sqrt, xm = 1e-8, _m = 1e-4, wm = ym(3), bm = 1 / 3, Sm = W(), Mm = W(), Im = W(), + Tm = Math.min, Cm = Math.max, Am = Math.sin, Dm = Math.cos, km = 2 * Math.PI, Pm = W(), Lm = W(), Om = W(), + zm = [], Em = [], Rm = {M: 1, L: 2, C: 3, Q: 4, A: 5, Z: 6, R: 7}, Bm = [], Nm = [], Fm = [], Vm = [], + Wm = Math.min, Gm = Math.max, Hm = Math.cos, Zm = Math.sin, Xm = Math.sqrt, Ym = Math.abs, + jm = "undefined" != typeof Float32Array, qm = function (t) { + this._saveData = !t, this._saveData && (this.data = []), this._ctx = null + }; + qm.prototype = { + constructor: qm, + _xi: 0, + _yi: 0, + _x0: 0, + _y0: 0, + _ux: 0, + _uy: 0, + _len: 0, + _lineDash: null, + _dashOffset: 0, + _dashIdx: 0, + _dashSum: 0, + setScale: function (t, e) { + this._ux = Ym(1 / tv / t) || 0, this._uy = Ym(1 / tv / e) || 0 + }, + getContext: function () { + return this._ctx + }, + beginPath: function (t) { + return this._ctx = t, t && t.beginPath(), t && (this.dpr = t.dpr), this._saveData && (this._len = 0), this._lineDash && (this._lineDash = null, this._dashOffset = 0), this + }, + moveTo: function (t, e) { + return this.addData(Rm.M, t, e), this._ctx && this._ctx.moveTo(t, e), this._x0 = t, this._y0 = e, this._xi = t, this._yi = e, this + }, + lineTo: function (t, e) { + var i = Ym(t - this._xi) > this._ux || Ym(e - this._yi) > this._uy || this._len < 5; + return this.addData(Rm.L, t, e), this._ctx && i && (this._needsDash() ? this._dashedLineTo(t, e) : this._ctx.lineTo(t, e)), i && (this._xi = t, this._yi = e), this + }, + bezierCurveTo: function (t, e, i, n, r, a) { + return this.addData(Rm.C, t, e, i, n, r, a), this._ctx && (this._needsDash() ? this._dashedBezierTo(t, e, i, n, r, a) : this._ctx.bezierCurveTo(t, e, i, n, r, a)), this._xi = r, this._yi = a, this + }, + quadraticCurveTo: function (t, e, i, n) { + return this.addData(Rm.Q, t, e, i, n), this._ctx && (this._needsDash() ? this._dashedQuadraticTo(t, e, i, n) : this._ctx.quadraticCurveTo(t, e, i, n)), this._xi = i, this._yi = n, this + }, + arc: function (t, e, i, n, r, a) { + return this.addData(Rm.A, t, e, i, i, n, r - n, 0, a ? 0 : 1), this._ctx && this._ctx.arc(t, e, i, n, r, a), this._xi = Hm(r) * i + t, this._yi = Zm(r) * i + e, this + }, + arcTo: function (t, e, i, n, r) { + return this._ctx && this._ctx.arcTo(t, e, i, n, r), this + }, + rect: function (t, e, i, n) { + return this._ctx && this._ctx.rect(t, e, i, n), this.addData(Rm.R, t, e, i, n), this + }, + closePath: function () { + this.addData(Rm.Z); + var t = this._ctx, e = this._x0, i = this._y0; + return t && (this._needsDash() && this._dashedLineTo(e, i), t.closePath()), this._xi = e, this._yi = i, this + }, + fill: function (t) { + t && t.fill(), this.toStatic() + }, + stroke: function (t) { + t && t.stroke(), this.toStatic() + }, + setLineDash: function (t) { + if (t instanceof Array) { + this._lineDash = t, this._dashIdx = 0; + for (var e = 0, i = 0; i < t.length; i++) e += t[i]; + this._dashSum = e + } + return this + }, + setLineDashOffset: function (t) { + return this._dashOffset = t, this + }, + len: function () { + return this._len + }, + setData: function (t) { + var e = t.length; + this.data && this.data.length == e || !jm || (this.data = new Float32Array(e)); + for (var i = 0; e > i; i++) this.data[i] = t[i]; + this._len = e + }, + appendPath: function (t) { + t instanceof Array || (t = [t]); + for (var e = t.length, i = 0, n = this._len, r = 0; e > r; r++) i += t[r].len(); + jm && this.data instanceof Float32Array && (this.data = new Float32Array(n + i)); + for (var r = 0; e > r; r++) for (var a = t[r].data, o = 0; o < a.length; o++) this.data[n++] = a[o]; + this._len = n + }, + addData: function (t) { + if (this._saveData) { + var e = this.data; + this._len + arguments.length > e.length && (this._expandData(), e = this.data); + for (var i = 0; i < arguments.length; i++) e[this._len++] = arguments[i]; + this._prevCmd = t + } + }, + _expandData: function () { + if (!(this.data instanceof Array)) { + for (var t = [], e = 0; e < this._len; e++) t[e] = this.data[e]; + this.data = t + } + }, + _needsDash: function () { + return this._lineDash + }, + _dashedLineTo: function (t, e) { + var i, n, r = this._dashSum, a = this._dashOffset, o = this._lineDash, s = this._ctx, l = this._xi, + h = this._yi, u = t - l, c = e - h, d = Xm(u * u + c * c), f = l, p = h, g = o.length; + for (u /= d, c /= d, 0 > a && (a = r + a), a %= r, f -= a * u, p -= a * c; u > 0 && t >= f || 0 > u && f >= t || 0 == u && (c > 0 && e >= p || 0 > c && p >= e);) n = this._dashIdx, i = o[n], f += u * i, p += c * i, this._dashIdx = (n + 1) % g, u > 0 && l > f || 0 > u && f > l || c > 0 && h > p || 0 > c && p > h || s[n % 2 ? "moveTo" : "lineTo"](u >= 0 ? Wm(f, t) : Gm(f, t), c >= 0 ? Wm(p, e) : Gm(p, e)); + u = f - t, c = p - e, this._dashOffset = -Xm(u * u + c * c) + }, + _dashedBezierTo: function (t, e, i, n, r, a) { + var o, s, l, h, u, c = this._dashSum, d = this._dashOffset, f = this._lineDash, p = this._ctx, g = this._xi, + v = this._yi, m = lr, y = 0, x = this._dashIdx, _ = f.length, w = 0; + for (0 > d && (d = c + d), d %= c, o = 0; 1 > o; o += .1) s = m(g, t, i, r, o + .1) - m(g, t, i, r, o), l = m(v, e, n, a, o + .1) - m(v, e, n, a, o), y += Xm(s * s + l * l); + for (; _ > x && (w += f[x], !(w > d)); x++) ; + for (o = (w - d) / y; 1 >= o;) h = m(g, t, i, r, o), u = m(v, e, n, a, o), x % 2 ? p.moveTo(h, u) : p.lineTo(h, u), o += f[x] / y, x = (x + 1) % _; + x % 2 !== 0 && p.lineTo(r, a), s = r - h, l = a - u, this._dashOffset = -Xm(s * s + l * l) + }, + _dashedQuadraticTo: function (t, e, i, n) { + var r = i, a = n; + i = (i + 2 * t) / 3, n = (n + 2 * e) / 3, t = (this._xi + 2 * t) / 3, e = (this._yi + 2 * e) / 3, this._dashedBezierTo(t, e, i, n, r, a) + }, + toStatic: function () { + var t = this.data; + t instanceof Array && (t.length = this._len, jm && (this.data = new Float32Array(t))) + }, + getBoundingRect: function () { + Bm[0] = Bm[1] = Fm[0] = Fm[1] = Number.MAX_VALUE, Nm[0] = Nm[1] = Vm[0] = Vm[1] = -Number.MAX_VALUE; + for (var t = this.data, e = 0, i = 0, n = 0, r = 0, a = 0; a < t.length;) { + var o = t[a++]; + switch (1 == a && (e = t[a], i = t[a + 1], n = e, r = i), o) { + case Rm.M: + n = t[a++], r = t[a++], e = n, i = r, Fm[0] = n, Fm[1] = r, Vm[0] = n, Vm[1] = r; + break; + case Rm.L: + wr(e, i, t[a], t[a + 1], Fm, Vm), e = t[a++], i = t[a++]; + break; + case Rm.C: + br(e, i, t[a++], t[a++], t[a++], t[a++], t[a], t[a + 1], Fm, Vm), e = t[a++], i = t[a++]; + break; + case Rm.Q: + Sr(e, i, t[a++], t[a++], t[a], t[a + 1], Fm, Vm), e = t[a++], i = t[a++]; + break; + case Rm.A: + var s = t[a++], l = t[a++], h = t[a++], u = t[a++], c = t[a++], d = t[a++] + c, + f = (t[a++], 1 - t[a++]); + 1 == a && (n = Hm(c) * h + s, r = Zm(c) * u + l), Mr(s, l, h, u, c, d, f, Fm, Vm), e = Hm(d) * h + s, i = Zm(d) * u + l; + break; + case Rm.R: + n = e = t[a++], r = i = t[a++]; + var p = t[a++], g = t[a++]; + wr(n, r, n + p, r + g, Fm, Vm); + break; + case Rm.Z: + e = n, i = r + } + oe(Bm, Bm, Fm), se(Nm, Nm, Vm) + } + return 0 === a && (Bm[0] = Bm[1] = Nm[0] = Nm[1] = 0), new gi(Bm[0], Bm[1], Nm[0] - Bm[0], Nm[1] - Bm[1]) + }, + rebuildPath: function (t) { + for (var e, i, n, r, a, o, s = this.data, l = this._ux, h = this._uy, u = this._len, c = 0; u > c;) { + var d = s[c++]; + switch (1 == c && (n = s[c], r = s[c + 1], e = n, i = r), d) { + case Rm.M: + e = n = s[c++], i = r = s[c++], t.moveTo(n, r); + break; + case Rm.L: + a = s[c++], o = s[c++], (Ym(a - n) > l || Ym(o - r) > h || c === u - 1) && (t.lineTo(a, o), n = a, r = o); + break; + case Rm.C: + t.bezierCurveTo(s[c++], s[c++], s[c++], s[c++], s[c++], s[c++]), n = s[c - 2], r = s[c - 1]; + break; + case Rm.Q: + t.quadraticCurveTo(s[c++], s[c++], s[c++], s[c++]), n = s[c - 2], r = s[c - 1]; + break; + case Rm.A: + var f = s[c++], p = s[c++], g = s[c++], v = s[c++], m = s[c++], y = s[c++], x = s[c++], + _ = s[c++], w = g > v ? g : v, b = g > v ? 1 : g / v, S = g > v ? v / g : 1, + M = Math.abs(g - v) > .001, I = m + y; + M ? (t.translate(f, p), t.rotate(x), t.scale(b, S), t.arc(0, 0, w, m, I, 1 - _), t.scale(1 / b, 1 / S), t.rotate(-x), t.translate(-f, -p)) : t.arc(f, p, w, m, I, 1 - _), 1 == c && (e = Hm(m) * g + f, i = Zm(m) * v + p), n = Hm(I) * g + f, r = Zm(I) * v + p; + break; + case Rm.R: + e = n = s[c], i = r = s[c + 1], t.rect(s[c++], s[c++], s[c++], s[c++]); + break; + case Rm.Z: + t.closePath(), n = e, r = i + } + } + } + }, qm.CMD = Rm; + var Um = 2 * Math.PI, $m = 2 * Math.PI, Km = qm.CMD, Qm = 2 * Math.PI, Jm = 1e-4, ty = [-1, -1, -1], ey = [-1, -1], + iy = xv.prototype.getCanvasPattern, ny = Math.abs, ry = new qm(!0); + Fr.prototype = { + constructor: Fr, type: "path", __dirtyPath: !0, strokeContainThreshold: 5, brush: function (t, e) { + var i = this.style, n = this.path || ry, r = i.hasStroke(), a = i.hasFill(), o = i.fill, s = i.stroke, + l = a && !!o.colorStops, h = r && !!s.colorStops, u = a && !!o.image, c = r && !!s.image; + if (i.bind(t, this, e), this.setTransform(t), this.__dirty) { + var d; + l && (d = d || this.getBoundingRect(), this._fillGradient = i.getGradient(t, o, d)), h && (d = d || this.getBoundingRect(), this._strokeGradient = i.getGradient(t, s, d)) + } + l ? t.fillStyle = this._fillGradient : u && (t.fillStyle = iy.call(o, t)), h ? t.strokeStyle = this._strokeGradient : c && (t.strokeStyle = iy.call(s, t)); + var f = i.lineDash, p = i.lineDashOffset, g = !!t.setLineDash, v = this.getGlobalScale(); + if (n.setScale(v[0], v[1]), this.__dirtyPath || f && !g && r ? (n.beginPath(t), f && !g && (n.setLineDash(f), n.setLineDashOffset(p)), this.buildPath(n, this.shape, !1), this.path && (this.__dirtyPath = !1)) : (t.beginPath(), this.path.rebuildPath(t)), a) if (null != i.fillOpacity) { + var m = t.globalAlpha; + t.globalAlpha = i.fillOpacity * i.opacity, n.fill(t), t.globalAlpha = m + } else n.fill(t); + if (f && g && (t.setLineDash(f), t.lineDashOffset = p), r) if (null != i.strokeOpacity) { + var m = t.globalAlpha; + t.globalAlpha = i.strokeOpacity * i.opacity, n.stroke(t), t.globalAlpha = m + } else n.stroke(t); + f && g && t.setLineDash([]), null != i.text && (this.restoreTransform(t), this.drawRectText(t, this.getBoundingRect())) + }, buildPath: function () { + }, createPathProxy: function () { + this.path = new qm + }, getBoundingRect: function () { + var t = this._rect, e = this.style, i = !t; + if (i) { + var n = this.path; + n || (n = this.path = new qm), this.__dirtyPath && (n.beginPath(), this.buildPath(n, this.shape, !1)), t = n.getBoundingRect() + } + if (this._rect = t, e.hasStroke()) { + var r = this._rectWithStroke || (this._rectWithStroke = t.clone()); + if (this.__dirty || i) { + r.copy(t); + var a = e.lineWidth, o = e.strokeNoScale ? this.getLineScale() : 1; + e.hasFill() || (a = Math.max(a, this.strokeContainThreshold || 4)), o > 1e-10 && (r.width += a / o, r.height += a / o, r.x -= a / o / 2, r.y -= a / o / 2) + } + return r + } + return t + }, contain: function (t, e) { + var i = this.transformCoordToLocal(t, e), n = this.getBoundingRect(), r = this.style; + if (t = i[0], e = i[1], n.contain(t, e)) { + var a = this.path.data; + if (r.hasStroke()) { + var o = r.lineWidth, s = r.strokeNoScale ? this.getLineScale() : 1; + if (s > 1e-10 && (r.hasFill() || (o = Math.max(o, this.strokeContainThreshold)), Nr(a, o / s, t, e))) return !0 + } + if (r.hasFill()) return Br(a, t, e) + } + return !1 + }, dirty: function (t) { + null == t && (t = !0), t && (this.__dirtyPath = t, this._rect = null), this.__dirty = this.__dirtyText = !0, this.__zr && this.__zr.refresh(), this.__clipTarget && this.__clipTarget.dirty() + }, animateShape: function (t) { + return this.animate("shape", t) + }, attrKV: function (t, e) { + "shape" === t ? (this.setShape(e), this.__dirtyPath = !0, this._rect = null) : mn.prototype.attrKV.call(this, t, e) + }, setShape: function (t, e) { + var i = this.shape; + if (i) { + if (S(t)) for (var n in t) t.hasOwnProperty(n) && (i[n] = t[n]); else i[t] = e; + this.dirty(!0) + } + return this + }, getLineScale: function () { + var t = this.transform; + return t && ny(t[0] - 1) > 1e-10 && ny(t[3] - 1) > 1e-10 ? Math.sqrt(ny(t[0] * t[3] - t[2] * t[1])) : 1 + } + }, Fr.extend = function (t) { + var e = function (e) { + Fr.call(this, e), t.style && this.style.extendFrom(t.style, !1); + var i = t.shape; + if (i) { + this.shape = this.shape || {}; + var n = this.shape; + for (var r in i) !n.hasOwnProperty(r) && i.hasOwnProperty(r) && (n[r] = i[r]) + } + t.init && t.init.call(this, e) + }; + u(e, Fr); + for (var i in t) "style" !== i && "shape" !== i && (e.prototype[i] = t[i]); + return e + }, u(Fr, mn); + var ay = qm.CMD, oy = [[], [], []], sy = Math.sqrt, ly = Math.atan2, hy = function (t, e) { + var i, n, r, a, o, s, l = t.data, h = ay.M, u = ay.C, c = ay.L, d = ay.R, f = ay.A, p = ay.Q; + for (r = 0, a = 0; r < l.length;) { + switch (i = l[r++], a = r, n = 0, i) { + case h: + n = 1; + break; + case c: + n = 1; + break; + case u: + n = 3; + break; + case p: + n = 2; + break; + case f: + var g = e[4], v = e[5], m = sy(e[0] * e[0] + e[1] * e[1]), y = sy(e[2] * e[2] + e[3] * e[3]), + x = ly(-e[1] / y, e[0] / m); + l[r] *= m, l[r++] += g, l[r] *= y, l[r++] += v, l[r++] *= m, l[r++] *= y, l[r++] += x, l[r++] += x, r += 2, a = r; + break; + case d: + s[0] = l[r++], s[1] = l[r++], ae(s, s, e), l[a++] = s[0], l[a++] = s[1], s[0] += l[r++], s[1] += l[r++], ae(s, s, e), l[a++] = s[0], l[a++] = s[1] + } + for (o = 0; n > o; o++) { + var s = oy[o]; + s[0] = l[r++], s[1] = l[r++], ae(s, s, e), l[a++] = s[0], l[a++] = s[1] + } + } + }, uy = Math.sqrt, cy = Math.sin, dy = Math.cos, fy = Math.PI, py = function (t) { + return Math.sqrt(t[0] * t[0] + t[1] * t[1]) + }, gy = function (t, e) { + return (t[0] * e[0] + t[1] * e[1]) / (py(t) * py(e)) + }, vy = function (t, e) { + return (t[0] * e[1] < t[1] * e[0] ? -1 : 1) * Math.acos(gy(t, e)) + }, my = /([mlvhzcqtsa])([^mlvhzcqtsa]*)/gi, yy = /-?([0-9]*\.)?[0-9]+([eE]-?[0-9]+)?/g, xy = function (t) { + mn.call(this, t) + }; + xy.prototype = { + constructor: xy, type: "text", brush: function (t, e) { + var i = this.style; + this.__dirty && Qi(i, !0), i.fill = i.stroke = i.shadowBlur = i.shadowColor = i.shadowOffsetX = i.shadowOffsetY = null; + var n = i.text; + null != n && (n += ""), vn(n, i) && (this.setTransform(t), tn(this, t, n, i, null, e), this.restoreTransform(t)) + }, getBoundingRect: function () { + var t = this.style; + if (this.__dirty && Qi(t, !0), !this._rect) { + var e = t.text; + null != e ? e += "" : e = ""; + var i = Ei(t.text + "", t.font, t.textAlign, t.textVerticalAlign, t.textPadding, t.rich); + if (i.x += t.x || 0, i.y += t.y || 0, dn(t.textStroke, t.textStrokeWidth)) { + var n = t.textStrokeWidth; + i.x -= n / 2, i.y -= n / 2, i.width += n, i.height += n + } + this._rect = i + } + return this._rect + } + }, u(xy, mn); + var _y = Fr.extend({ + type: "circle", shape: {cx: 0, cy: 0, r: 0}, buildPath: function (t, e, i) { + i && t.moveTo(e.cx + e.r, e.cy), t.arc(e.cx, e.cy, e.r, 0, 2 * Math.PI, !0) + } + }), wy = [["shadowBlur", 0], ["shadowColor", "#000"], ["shadowOffsetX", 0], ["shadowOffsetY", 0]], + by = function (t) { + return tg.browser.ie && tg.browser.version >= 11 ? function () { + var e, i = this.__clipPaths, n = this.style; + if (i) for (var r = 0; r < i.length; r++) { + var a = i[r], o = a && a.shape, s = a && a.type; + if (o && ("sector" === s && o.startAngle === o.endAngle || "rect" === s && (!o.width || !o.height))) { + for (var l = 0; l < wy.length; l++) wy[l][2] = n[wy[l][0]], n[wy[l][0]] = wy[l][1]; + e = !0; + break + } + } + if (t.apply(this, arguments), e) for (var l = 0; l < wy.length; l++) n[wy[l][0]] = wy[l][2] + } : t + }, Sy = Fr.extend({ + type: "sector", + shape: {cx: 0, cy: 0, r0: 0, r: 0, startAngle: 0, endAngle: 2 * Math.PI, clockwise: !0}, + brush: by(Fr.prototype.brush), + buildPath: function (t, e) { + var i = e.cx, n = e.cy, r = Math.max(e.r0 || 0, 0), a = Math.max(e.r, 0), o = e.startAngle, s = e.endAngle, + l = e.clockwise, h = Math.cos(o), u = Math.sin(o); + t.moveTo(h * r + i, u * r + n), t.lineTo(h * a + i, u * a + n), t.arc(i, n, a, o, s, !l), t.lineTo(Math.cos(s) * r + i, Math.sin(s) * r + n), 0 !== r && t.arc(i, n, r, s, o, l), t.closePath() + } + }), My = Fr.extend({ + type: "ring", shape: {cx: 0, cy: 0, r: 0, r0: 0}, buildPath: function (t, e) { + var i = e.cx, n = e.cy, r = 2 * Math.PI; + t.moveTo(i + e.r, n), t.arc(i, n, e.r, 0, r, !1), t.moveTo(i + e.r0, n), t.arc(i, n, e.r0, 0, r, !0) + } + }), Iy = function (t, e) { + for (var i = t.length, n = [], r = 0, a = 1; i > a; a++) r += ee(t[a - 1], t[a]); + var o = r / 2; + o = i > o ? i : o; + for (var a = 0; o > a; a++) { + var s, l, h, u = a / (o - 1) * (e ? i : i - 1), c = Math.floor(u), d = u - c, f = t[c % i]; + e ? (s = t[(c - 1 + i) % i], l = t[(c + 1) % i], h = t[(c + 2) % i]) : (s = t[0 === c ? c : c - 1], l = t[c > i - 2 ? i - 1 : c + 1], h = t[c > i - 3 ? i - 1 : c + 2]); + var p = d * d, g = d * p; + n.push([Yr(s[0], f[0], l[0], h[0], d, p, g), Yr(s[1], f[1], l[1], h[1], d, p, g)]) + } + return n + }, Ty = function (t, e, i, n) { + var r, a, o, s, l = [], h = [], u = [], c = []; + if (n) { + o = [1 / 0, 1 / 0], s = [-1 / 0, -1 / 0]; + for (var d = 0, f = t.length; f > d; d++) oe(o, o, t[d]), se(s, s, t[d]); + oe(o, o, n[0]), se(s, s, n[1]) + } + for (var d = 0, f = t.length; f > d; d++) { + var p = t[d]; + if (i) r = t[d ? d - 1 : f - 1], a = t[(d + 1) % f]; else { + if (0 === d || d === f - 1) { + l.push(H(t[d])); + continue + } + r = t[d - 1], a = t[d + 1] + } + j(h, a, r), J(h, h, e); + var g = ee(p, r), v = ee(p, a), m = g + v; + 0 !== m && (g /= m, v /= m), J(u, h, -g), J(c, h, v); + var y = X([], p, u), x = X([], p, c); + n && (se(y, y, o), oe(y, y, s), se(x, x, o), oe(x, x, s)), l.push(y), l.push(x) + } + return i && l.push(l.shift()), l + }, Cy = Fr.extend({ + type: "polygon", + shape: {points: null, smooth: !1, smoothConstraint: null}, + buildPath: function (t, e) { + jr(t, e, !0) + } + }), Ay = Fr.extend({ + type: "polyline", + shape: {points: null, smooth: !1, smoothConstraint: null}, + style: {stroke: "#000", fill: null}, + buildPath: function (t, e) { + jr(t, e, !1) + } + }), Dy = Fr.extend({ + type: "rect", shape: {r: 0, x: 0, y: 0, width: 0, height: 0}, buildPath: function (t, e) { + var i = e.x, n = e.y, r = e.width, a = e.height; + e.r ? Ki(t, e) : t.rect(i, n, r, a), t.closePath() + } + }), ky = Fr.extend({ + type: "line", + shape: {x1: 0, y1: 0, x2: 0, y2: 0, percent: 1}, + style: {stroke: "#000", fill: null}, + buildPath: function (t, e) { + var i = e.x1, n = e.y1, r = e.x2, a = e.y2, o = e.percent; + 0 !== o && (t.moveTo(i, n), 1 > o && (r = i * (1 - o) + r * o, a = n * (1 - o) + a * o), t.lineTo(r, a)) + }, + pointAt: function (t) { + var e = this.shape; + return [e.x1 * (1 - t) + e.x2 * t, e.y1 * (1 - t) + e.y2 * t] + } + }), Py = [], Ly = Fr.extend({ + type: "bezier-curve", + shape: {x1: 0, y1: 0, x2: 0, y2: 0, cpx1: 0, cpy1: 0, percent: 1}, + style: {stroke: "#000", fill: null}, + buildPath: function (t, e) { + var i = e.x1, n = e.y1, r = e.x2, a = e.y2, o = e.cpx1, s = e.cpy1, l = e.cpx2, h = e.cpy2, u = e.percent; + 0 !== u && (t.moveTo(i, n), null == l || null == h ? (1 > u && (yr(i, o, r, u, Py), o = Py[1], r = Py[2], yr(n, s, a, u, Py), s = Py[1], a = Py[2]), t.quadraticCurveTo(o, s, r, a)) : (1 > u && (dr(i, o, l, r, u, Py), o = Py[1], l = Py[2], r = Py[3], dr(n, s, h, a, u, Py), s = Py[1], h = Py[2], a = Py[3]), t.bezierCurveTo(o, s, l, h, r, a))) + }, + pointAt: function (t) { + return qr(this.shape, t, !1) + }, + tangentAt: function (t) { + var e = qr(this.shape, t, !0); + return te(e, e) + } + }), Oy = Fr.extend({ + type: "arc", + shape: {cx: 0, cy: 0, r: 0, startAngle: 0, endAngle: 2 * Math.PI, clockwise: !0}, + style: {stroke: "#000", fill: null}, + buildPath: function (t, e) { + var i = e.cx, n = e.cy, r = Math.max(e.r, 0), a = e.startAngle, o = e.endAngle, s = e.clockwise, + l = Math.cos(a), h = Math.sin(a); + t.moveTo(l * r + i, h * r + n), t.arc(i, n, r, a, o, !s) + } + }), zy = Fr.extend({ + type: "compound", shape: {paths: null}, _updatePathDirty: function () { + for (var t = this.__dirtyPath, e = this.shape.paths, i = 0; i < e.length; i++) t = t || e[i].__dirtyPath; + this.__dirtyPath = t, this.__dirty = this.__dirty || t + }, beforeBrush: function () { + this._updatePathDirty(); + for (var t = this.shape.paths || [], e = this.getGlobalScale(), i = 0; i < t.length; i++) t[i].path || t[i].createPathProxy(), t[i].path.setScale(e[0], e[1]) + }, buildPath: function (t, e) { + for (var i = e.paths || [], n = 0; n < i.length; n++) i[n].buildPath(t, i[n].shape, !0) + }, afterBrush: function () { + for (var t = this.shape.paths || [], e = 0; e < t.length; e++) t[e].__dirtyPath = !1 + }, getBoundingRect: function () { + return this._updatePathDirty(), Fr.prototype.getBoundingRect.call(this) + } + }), Ey = function (t) { + this.colorStops = t || [] + }; + Ey.prototype = { + constructor: Ey, addColorStop: function (t, e) { + this.colorStops.push({offset: t, color: e}) + } + }; + var Ry = function (t, e, i, n, r, a) { + this.x = null == t ? 0 : t, this.y = null == e ? 0 : e, this.x2 = null == i ? 1 : i, this.y2 = null == n ? 0 : n, this.type = "linear", this.global = a || !1, Ey.call(this, r) + }; + Ry.prototype = {constructor: Ry}, u(Ry, Ey); + var By = function (t, e, i, n, r) { + this.x = null == t ? .5 : t, this.y = null == e ? .5 : e, this.r = null == i ? .5 : i, this.type = "radial", this.global = r || !1, Ey.call(this, n) + }; + By.prototype = {constructor: By}, u(By, Ey), Ur.prototype.incremental = !0, Ur.prototype.clearDisplaybles = function () { + this._displayables = [], this._temporaryDisplayables = [], this._cursor = 0, this.dirty(), this.notClear = !1 + }, Ur.prototype.addDisplayable = function (t, e) { + e ? this._temporaryDisplayables.push(t) : this._displayables.push(t), this.dirty() + }, Ur.prototype.addDisplayables = function (t, e) { + e = e || !1; + for (var i = 0; i < t.length; i++) this.addDisplayable(t[i], e) + }, Ur.prototype.eachPendingDisplayable = function (t) { + for (var e = this._cursor; e < this._displayables.length; e++) t && t(this._displayables[e]); + for (var e = 0; e < this._temporaryDisplayables.length; e++) t && t(this._temporaryDisplayables[e]) + }, Ur.prototype.update = function () { + this.updateTransform(); + for (var t = this._cursor; t < this._displayables.length; t++) { + var e = this._displayables[t]; + e.parent = this, e.update(), e.parent = null + } + for (var t = 0; t < this._temporaryDisplayables.length; t++) { + var e = this._temporaryDisplayables[t]; + e.parent = this, e.update(), e.parent = null + } + }, Ur.prototype.brush = function (t) { + for (var e = this._cursor; e < this._displayables.length; e++) { + var i = this._displayables[e]; + i.beforeBrush && i.beforeBrush(t), i.brush(t, e === this._cursor ? null : this._displayables[e - 1]), i.afterBrush && i.afterBrush(t) + } + this._cursor = e; + for (var e = 0; e < this._temporaryDisplayables.length; e++) { + var i = this._temporaryDisplayables[e]; + i.beforeBrush && i.beforeBrush(t), i.brush(t, 0 === e ? null : this._temporaryDisplayables[e - 1]), i.afterBrush && i.afterBrush(t) + } + this._temporaryDisplayables = [], this.notClear = !0 + }; + var Ny = []; + Ur.prototype.getBoundingRect = function () { + if (!this._rect) { + for (var t = new gi(1 / 0, 1 / 0, -1 / 0, -1 / 0), e = 0; e < this._displayables.length; e++) { + var i = this._displayables[e], n = i.getBoundingRect().clone(); + i.needLocalTransform() && n.applyTransform(i.getLocalTransform(Ny)), t.union(n) + } + this._rect = t + } + return this._rect + }, Ur.prototype.contain = function (t, e) { + var i = this.transformCoordToLocal(t, e), n = this.getBoundingRect(); + if (n.contain(i[0], i[1])) for (var r = 0; r < this._displayables.length; r++) { + var a = this._displayables[r]; + if (a.contain(t, e)) return !0 + } + return !1 + }, u(Ur, mn); + var Fy = Math.round, Vy = Math.max, Wy = Math.min, Gy = {}, Hy = Xr, Zy = N(), Xy = 0, + Yy = (Object.freeze || Object)({ + extendShape: $r, + extendPath: Kr, + makePath: Qr, + makeImage: Jr, + mergePath: Hy, + resizePath: ea, + subPixelOptimizeLine: ia, + subPixelOptimizeRect: na, + subPixelOptimize: ra, + setElementHoverStyle: fa, + isInEmphasis: pa, + setHoverStyle: xa, + setAsHoverStyleTrigger: _a, + setLabelStyle: wa, + setTextStyle: ba, + setText: Sa, + getFont: ka, + updateProps: La, + initProps: Oa, + getTransform: za, + applyTransform: Ea, + transformDirection: Ra, + groupTransition: Ba, + clipPointsByRect: Na, + clipRectByRect: Fa, + createIcon: Va, + Group: lv, + Image: yn, + Text: xy, + Circle: _y, + Sector: Sy, + Ring: My, + Polygon: Cy, + Polyline: Ay, + Rect: Dy, + Line: ky, + BezierCurve: Ly, + Arc: Oy, + IncrementalDisplayable: Ur, + CompoundPath: zy, + LinearGradient: Ry, + RadialGradient: By, + BoundingRect: gi + }), jy = ["textStyle", "color"], qy = { + getTextColor: function (t) { + var e = this.ecModel; + return this.getShallow("color") || (!t && e ? e.get(jy) : null) + }, getFont: function () { + return ka({ + fontStyle: this.getShallow("fontStyle"), + fontWeight: this.getShallow("fontWeight"), + fontSize: this.getShallow("fontSize"), + fontFamily: this.getShallow("fontFamily") + }, this.ecModel) + }, getTextRect: function (t) { + return Ei(t, this.getFont(), this.getShallow("align"), this.getShallow("verticalAlign") || this.getShallow("baseline"), this.getShallow("padding"), this.getShallow("rich"), this.getShallow("truncateText")) + } + }, + Uy = dm([["fill", "color"], ["stroke", "borderColor"], ["lineWidth", "borderWidth"], ["opacity"], ["shadowBlur"], ["shadowOffsetX"], ["shadowOffsetY"], ["shadowColor"], ["textPosition"], ["textAlign"]]), + $y = { + getItemStyle: function (t, e) { + var i = Uy(this, t, e), n = this.getBorderLineDash(); + return n && (i.lineDash = n), i + }, getBorderLineDash: function () { + var t = this.get("borderType"); + return "solid" === t || null == t ? null : "dashed" === t ? [5, 5] : [1, 1] + } + }, Ky = c, Qy = jn(); + Wa.prototype = { + constructor: Wa, init: null, mergeOption: function (t) { + r(this.option, t, !0) + }, get: function (t, e) { + return null == t ? this.option : Ga(this.option, this.parsePath(t), !e && Ha(this, t)) + }, getShallow: function (t, e) { + var i = this.option, n = null == i ? i : i[t], r = !e && Ha(this, t); + return null == n && r && (n = r.getShallow(t)), n + }, getModel: function (t, e) { + var i, n = null == t ? this.option : Ga(this.option, t = this.parsePath(t)); + return e = e || (i = Ha(this, t)) && i.getModel(t), new Wa(n, e, this.ecModel) + }, isEmpty: function () { + return null == this.option + }, restoreData: function () { + }, clone: function () { + var t = this.constructor; + return new t(n(this.option)) + }, setReadOnly: function () { + }, parsePath: function (t) { + return "string" == typeof t && (t = t.split(".")), t + }, customizeGetParent: function (t) { + Qy(this).getParent = t + }, isAnimationEnabled: function () { + if (!tg.node) { + if (null != this.option.animation) return !!this.option.animation; + if (this.parentModel) return this.parentModel.isAnimationEnabled() + } + } + }, er(Wa), ir(Wa), Ky(Wa, pm), Ky(Wa, vm), Ky(Wa, qy), Ky(Wa, $y); + var Jy = 0, tx = 1e-4, ex = 9007199254740991, + ix = /^(?:(\d{4})(?:[-\/](\d{1,2})(?:[-\/](\d{1,2})(?:[T ](\d{1,2})(?::(\d\d)(?::(\d\d)(?:[.,](\d+))?)?)?(Z|[\+\-]\d\d:?\d\d)?)?)?)?)?$/, + nx = (Object.freeze || Object)({ + linearMap: qa, + parsePercent: Ua, + round: $a, + asc: Ka, + getPrecision: Qa, + getPrecisionSafe: Ja, + getPixelPrecision: to, + getPercentWithPrecision: eo, + MAX_SAFE_INTEGER: ex, + remRadian: io, + isRadianAroundZero: no, + parseDate: ro, + quantity: ao, + nice: so, + quantile: lo, + reformIntervals: ho, + isNumeric: uo + }), rx = L, ax = /([&<>"'])/g, ox = {"&": "&", "<": "<", ">": ">", '"': """, "'": "'"}, + sx = ["a", "b", "c", "d", "e", "f", "g"], lx = function (t, e) { + return "{" + t + (null == e ? "" : e) + "}" + }, hx = Wi, ux = Ei, cx = (Object.freeze || Object)({ + addCommas: co, + toCamelCase: fo, + normalizeCssArray: rx, + encodeHTML: po, + formatTpl: go, + formatTplSimple: vo, + getTooltipMarker: mo, + formatTime: xo, + capitalFirst: _o, + truncateText: hx, + getTextRect: ux + }), dx = f, fx = ["left", "right", "top", "bottom", "width", "height"], + px = [["width", "left", "right"], ["height", "top", "bottom"]], gx = wo, + vx = (x(wo, "vertical"), x(wo, "horizontal"), { + getBoxLayoutParams: function () { + return { + left: this.get("left"), + top: this.get("top"), + right: this.get("right"), + bottom: this.get("bottom"), + width: this.get("width"), + height: this.get("height") + } + } + }), mx = jn(), yx = Wa.extend({ + type: "component", + id: "", + name: "", + mainType: "", + subType: "", + componentIndex: 0, + defaultOption: null, + ecModel: null, + dependentModels: [], + uid: null, + layoutMode: null, + $constructor: function (t, e, i, n) { + Wa.call(this, t, e, i, n), this.uid = Za("ec_cpt_model") + }, + init: function (t, e, i) { + this.mergeDefaultAndTheme(t, i) + }, + mergeDefaultAndTheme: function (t, e) { + var i = this.layoutMode, n = i ? Mo(t) : {}, a = e.getTheme(); + r(t, a.get(this.mainType)), r(t, this.getDefaultOption()), i && So(t, n, i) + }, + mergeOption: function (t) { + r(this.option, t, !0); + var e = this.layoutMode; + e && So(this.option, t, e) + }, + optionUpdated: function () { + }, + getDefaultOption: function () { + var t = mx(this); + if (!t.defaultOption) { + for (var e = [], i = this.constructor; i;) { + var n = i.prototype.defaultOption; + n && e.push(n), i = i.superClass + } + for (var a = {}, o = e.length - 1; o >= 0; o--) a = r(a, e[o], !0); + t.defaultOption = a + } + return t.defaultOption + }, + getReferringComponents: function (t) { + return this.ecModel.queryComponents({ + mainType: t, + index: this.get(t + "Index", !0), + id: this.get(t + "Id", !0) + }) + } + }); + ar(yx, {registerWhenExtend: !0}), Xa(yx), Ya(yx, To), c(yx, vx); + var xx = ""; + "undefined" != typeof navigator && (xx = navigator.platform || ""); + var _x = { + color: ["#c23531", "#2f4554", "#61a0a8", "#d48265", "#91c7ae", "#749f83", "#ca8622", "#bda29a", "#6e7074", "#546570", "#c4ccd3"], + gradientColor: ["#f6efa6", "#d88273", "#bf444c"], + textStyle: { + fontFamily: xx.match(/^Win/) ? "Microsoft YaHei" : "sans-serif", + fontSize: 12, + fontStyle: "normal", + fontWeight: "normal" + }, + blendMode: null, + animation: "auto", + animationDuration: 1e3, + animationDurationUpdate: 300, + animationEasing: "exponentialOut", + animationEasingUpdate: "cubicOut", + animationThreshold: 2e3, + progressiveThreshold: 3e3, + progressive: 400, + hoverLayerThreshold: 3e3, + useUTC: !1 + }, bx = jn(), Sx = { + clearColorPalette: function () { + bx(this).colorIdx = 0, bx(this).colorNameMap = {} + }, getColorFromPalette: function (t, e, i) { + e = e || this; + var n = bx(e), r = n.colorIdx || 0, a = n.colorNameMap = n.colorNameMap || {}; + if (a.hasOwnProperty(t)) return a[t]; + var o = Nn(this.get("color", !0)), s = this.get("colorLayer", !0), l = null != i && s ? Co(s, i) : o; + if (l = l || o, l && l.length) { + var h = l[r]; + return t && (a[t] = h), n.colorIdx = (r + 1) % l.length, h + } + } + }, Mx = { + cartesian2d: function (t, e, i, n) { + var r = t.getReferringComponents("xAxis")[0], a = t.getReferringComponents("yAxis")[0]; + e.coordSysDims = ["x", "y"], i.set("x", r), i.set("y", a), Do(r) && (n.set("x", r), e.firstCategoryDimIndex = 0), Do(a) && (n.set("y", a), e.firstCategoryDimIndex = 1) + }, singleAxis: function (t, e, i, n) { + var r = t.getReferringComponents("singleAxis")[0]; + e.coordSysDims = ["single"], i.set("single", r), Do(r) && (n.set("single", r), e.firstCategoryDimIndex = 0) + }, polar: function (t, e, i, n) { + var r = t.getReferringComponents("polar")[0], a = r.findAxisModel("radiusAxis"), + o = r.findAxisModel("angleAxis"); + e.coordSysDims = ["radius", "angle"], i.set("radius", a), i.set("angle", o), Do(a) && (n.set("radius", a), e.firstCategoryDimIndex = 0), Do(o) && (n.set("angle", o), e.firstCategoryDimIndex = 1) + }, geo: function (t, e) { + e.coordSysDims = ["lng", "lat"] + }, parallel: function (t, e, i, n) { + var r = t.ecModel, a = r.getComponent("parallel", t.get("parallelIndex")), + o = e.coordSysDims = a.dimensions.slice(); + f(a.parallelAxisIndex, function (t, a) { + var s = r.getComponent("parallelAxis", t), l = o[a]; + i.set(l, s), Do(s) && null == e.firstCategoryDimIndex && (n.set(l, s), e.firstCategoryDimIndex = a) + }) + } + }, Ix = "original", Tx = "arrayRows", Cx = "objectRows", Ax = "keyedColumns", Dx = "unknown", kx = "typedArray", + Px = "column", Lx = "row"; + ko.seriesDataToSource = function (t) { + return new ko({data: t, sourceFormat: I(t) ? kx : Ix, fromDataset: !1}) + }, ir(ko); + var Ox = jn(), zx = "\x00_ec_inner", Ex = Wa.extend({ + init: function (t, e, i, n) { + i = i || {}, this.option = null, this._theme = new Wa(i), this._optionManager = n + }, setOption: function (t, e) { + O(!(zx in t), "please use chart.getOption()"), this._optionManager.setOption(t, e), this.resetOption(null) + }, resetOption: function (t) { + var e = !1, i = this._optionManager; + if (!t || "recreate" === t) { + var n = i.mountOption("recreate" === t); + this.option && "recreate" !== t ? (this.restoreData(), this.mergeOption(n)) : Xo.call(this, n), e = !0 + } + if (("timeline" === t || "media" === t) && this.restoreData(), !t || "recreate" === t || "timeline" === t) { + var r = i.getTimelineOption(this); + r && (this.mergeOption(r), e = !0) + } + if (!t || "recreate" === t || "media" === t) { + var a = i.getMediaOption(this, this._api); + a.length && f(a, function (t) { + this.mergeOption(t, e = !0) + }, this) + } + return e + }, mergeOption: function (t) { + function e(e, n) { + var r = Nn(t[e]), s = Gn(a.get(e), r); + Hn(s), f(s, function (t) { + var i = t.option; + S(i) && (t.keyInfo.mainType = e, t.keyInfo.subType = jo(e, i, t.exist)) + }); + var l = Yo(a, n); + i[e] = [], a.set(e, []), f(s, function (t, n) { + var r = t.exist, s = t.option; + if (O(S(s) || r, "Empty component definition"), s) { + var h = yx.getClass(e, t.keyInfo.subType, !0); + if (r && r instanceof h) r.name = t.keyInfo.name, r.mergeOption(s, this), r.optionUpdated(s, !1); else { + var u = o({dependentModels: l, componentIndex: n}, t.keyInfo); + r = new h(s, this, this, u), o(r, u), r.init(s, this, this, u), r.optionUpdated(null, !0) + } + } else r.mergeOption({}, this), r.optionUpdated({}, !1); + a.get(e)[n] = r, i[e][n] = r.option + }, this), "series" === e && qo(this, a.get("series")) + } + + var i = this.option, a = this._componentsMap, s = []; + Oo(this), f(t, function (t, e) { + null != t && (yx.hasClass(e) ? e && s.push(e) : i[e] = null == i[e] ? n(t) : r(i[e], t, !0)) + }), yx.topologicalTravel(s, yx.getAllClassMainTypes(), e, this), this._seriesIndicesMap = N(this._seriesIndices = this._seriesIndices || []) + }, getOption: function () { + var t = n(this.option); + return f(t, function (e, i) { + if (yx.hasClass(i)) { + for (var e = Nn(e), n = e.length - 1; n >= 0; n--) Xn(e[n]) && e.splice(n, 1); + t[i] = e + } + }), delete t[zx], t + }, getTheme: function () { + return this._theme + }, getComponent: function (t, e) { + var i = this._componentsMap.get(t); + return i ? i[e || 0] : void 0 + }, queryComponents: function (t) { + var e = t.mainType; + if (!e) return []; + var i = t.index, n = t.id, r = t.name, a = this._componentsMap.get(e); + if (!a || !a.length) return []; + var o; + if (null != i) _(i) || (i = [i]), o = v(p(i, function (t) { + return a[t] + }), function (t) { + return !!t + }); else if (null != n) { + var s = _(n); + o = v(a, function (t) { + return s && h(n, t.id) >= 0 || !s && t.id === n + }) + } else if (null != r) { + var l = _(r); + o = v(a, function (t) { + return l && h(r, t.name) >= 0 || !l && t.name === r + }) + } else o = a.slice(); + return Uo(o, t) + }, findComponents: function (t) { + function e(t) { + var e = r + "Index", i = r + "Id", n = r + "Name"; + return !t || null == t[e] && null == t[i] && null == t[n] ? null : { + mainType: r, + index: t[e], + id: t[i], + name: t[n] + } + } + + function i(e) { + return t.filter ? v(e, t.filter) : e + } + + var n = t.query, r = t.mainType, a = e(n), o = a ? this.queryComponents(a) : this._componentsMap.get(r); + return i(Uo(o, t)) + }, eachComponent: function (t, e, i) { + var n = this._componentsMap; + if ("function" == typeof t) i = e, e = t, n.each(function (t, n) { + f(t, function (t, r) { + e.call(i, n, t, r) + }) + }); else if (b(t)) f(n.get(t), e, i); else if (S(t)) { + var r = this.findComponents(t); + f(r, e, i) + } + }, getSeriesByName: function (t) { + var e = this._componentsMap.get("series"); + return v(e, function (e) { + return e.name === t + }) + }, getSeriesByIndex: function (t) { + return this._componentsMap.get("series")[t] + }, getSeriesByType: function (t) { + var e = this._componentsMap.get("series"); + return v(e, function (e) { + return e.subType === t + }) + }, getSeries: function () { + return this._componentsMap.get("series").slice() + }, getSeriesCount: function () { + return this._componentsMap.get("series").length + }, eachSeries: function (t, e) { + f(this._seriesIndices, function (i) { + var n = this._componentsMap.get("series")[i]; + t.call(e, n, i) + }, this) + }, eachRawSeries: function (t, e) { + f(this._componentsMap.get("series"), t, e) + }, eachSeriesByType: function (t, e, i) { + f(this._seriesIndices, function (n) { + var r = this._componentsMap.get("series")[n]; + r.subType === t && e.call(i, r, n) + }, this) + }, eachRawSeriesByType: function (t, e, i) { + return f(this.getSeriesByType(t), e, i) + }, isSeriesFiltered: function (t) { + return null == this._seriesIndicesMap.get(t.componentIndex) + }, getCurrentSeriesIndices: function () { + return (this._seriesIndices || []).slice() + }, filterSeries: function (t, e) { + var i = v(this._componentsMap.get("series"), t, e); + qo(this, i) + }, restoreData: function (t) { + var e = this._componentsMap; + qo(this, e.get("series")); + var i = []; + e.each(function (t, e) { + i.push(e) + }), yx.topologicalTravel(i, yx.getAllClassMainTypes(), function (i) { + f(e.get(i), function (e) { + ("series" !== i || !Ho(e, t)) && e.restoreData() + }) + }) + } + }); + c(Ex, Sx); + var Rx = ["getDom", "getZr", "getWidth", "getHeight", "getDevicePixelRatio", "dispatchAction", "isDisposed", "on", "off", "getDataURL", "getConnectedDataURL", "getModel", "getOption", "getViewOfComponentModel", "getViewOfSeriesModel"], + Bx = {}; + Ko.prototype = { + constructor: Ko, create: function (t, e) { + var i = []; + f(Bx, function (n) { + var r = n.create(t, e); + i = i.concat(r || []) + }), this._coordinateSystems = i + }, update: function (t, e) { + f(this._coordinateSystems, function (i) { + i.update && i.update(t, e) + }) + }, getCoordinateSystems: function () { + return this._coordinateSystems.slice() + } + }, Ko.register = function (t, e) { + Bx[t] = e + }, Ko.get = function (t) { + return Bx[t] + }; + var Nx = f, Fx = n, Vx = p, Wx = r, Gx = /^(min|max)?(.+)$/; + Qo.prototype = { + constructor: Qo, setOption: function (t, e) { + t && f(Nn(t.series), function (t) { + t && t.data && I(t.data) && E(t.data) + }), t = Fx(t, !0); + var i = this._optionBackup, n = Jo.call(this, t, e, !i); + this._newBaseOption = n.baseOption, i ? (ns(i.baseOption, n.baseOption), n.timelineOptions.length && (i.timelineOptions = n.timelineOptions), n.mediaList.length && (i.mediaList = n.mediaList), n.mediaDefault && (i.mediaDefault = n.mediaDefault)) : this._optionBackup = n + }, mountOption: function (t) { + var e = this._optionBackup; + return this._timelineOptions = Vx(e.timelineOptions, Fx), this._mediaList = Vx(e.mediaList, Fx), this._mediaDefault = Fx(e.mediaDefault), this._currentMediaIndices = [], Fx(t ? e.baseOption : this._newBaseOption) + }, getTimelineOption: function (t) { + var e, i = this._timelineOptions; + if (i.length) { + var n = t.getComponent("timeline"); + n && (e = Fx(i[n.getCurrentIndex()], !0)) + } + return e + }, getMediaOption: function () { + var t = this._api.getWidth(), e = this._api.getHeight(), i = this._mediaList, n = this._mediaDefault, + r = [], a = []; + if (!i.length && !n) return a; + for (var o = 0, s = i.length; s > o; o++) ts(i[o].query, t, e) && r.push(o); + return !r.length && n && (r = [-1]), r.length && !is(r, this._currentMediaIndices) && (a = Vx(r, function (t) { + return Fx(-1 === t ? n.option : i[t].option) + })), this._currentMediaIndices = r, a + } + }; + var Hx = f, Zx = S, Xx = ["areaStyle", "lineStyle", "nodeStyle", "linkStyle", "chordStyle", "label", "labelLine"], + Yx = function (t, e) { + Hx(us(t.series), function (t) { + Zx(t) && hs(t) + }); + var i = ["xAxis", "yAxis", "radiusAxis", "angleAxis", "singleAxis", "parallelAxis", "radar"]; + e && i.push("valueAxis", "categoryAxis", "logAxis", "timeAxis"), Hx(i, function (e) { + Hx(us(t[e]), function (t) { + t && (ss(t, "axisLabel"), ss(t.axisPointer, "label")) + }) + }), Hx(us(t.parallel), function (t) { + var e = t && t.parallelAxisDefault; + ss(e, "axisLabel"), ss(e && e.axisPointer, "label") + }), Hx(us(t.calendar), function (t) { + as(t, "itemStyle"), ss(t, "dayLabel"), ss(t, "monthLabel"), ss(t, "yearLabel") + }), Hx(us(t.radar), function (t) { + ss(t, "name") + }), Hx(us(t.geo), function (t) { + Zx(t) && (ls(t), Hx(us(t.regions), function (t) { + ls(t) + })) + }), Hx(us(t.timeline), function (t) { + ls(t), as(t, "label"), as(t, "itemStyle"), as(t, "controlStyle", !0); + var e = t.data; + _(e) && f(e, function (t) { + S(t) && (as(t, "label"), as(t, "itemStyle")) + }) + }), Hx(us(t.toolbox), function (t) { + as(t, "iconStyle"), Hx(t.feature, function (t) { + as(t, "iconStyle") + }) + }), ss(cs(t.axisPointer), "label"), ss(cs(t.tooltip).axisPointer, "label") + }, jx = [["x", "left"], ["y", "top"], ["x2", "right"], ["y2", "bottom"]], + qx = ["grid", "geo", "parallel", "legend", "toolbox", "title", "visualMap", "dataZoom", "timeline"], + Ux = function (t, e) { + Yx(t, e), t.series = Nn(t.series), f(t.series, function (t) { + if (S(t)) { + var e = t.type; + if (("pie" === e || "gauge" === e) && null != t.clockWise && (t.clockwise = t.clockWise), "gauge" === e) { + var i = ds(t, "pointer.color"); + null != i && fs(t, "itemStyle.normal.color", i) + } + ps(t) + } + }), t.dataRange && (t.visualMap = t.dataRange), f(qx, function (e) { + var i = t[e]; + i && (_(i) || (i = [i]), f(i, function (t) { + ps(t) + })) + }) + }, $x = function (t) { + var e = N(); + t.eachSeries(function (t) { + var i = t.get("stack"); + if (i) { + var n = e.get(i) || e.set(i, []), r = t.getData(), a = { + stackResultDimension: r.getCalculationInfo("stackResultDimension"), + stackedOverDimension: r.getCalculationInfo("stackedOverDimension"), + stackedDimension: r.getCalculationInfo("stackedDimension"), + stackedByDimension: r.getCalculationInfo("stackedByDimension"), + isStackedByIndex: r.getCalculationInfo("isStackedByIndex"), + data: r, + seriesModel: t + }; + if (!a.stackedDimension || !a.isStackedByIndex && !a.stackedByDimension) return; + n.length && r.setCalculationInfo("stackedOnSeries", n[n.length - 1].seriesModel), n.push(a) + } + }), e.each(gs) + }, Kx = vs.prototype; + Kx.pure = !1, Kx.persistent = !0, Kx.getSource = function () { + return this._source + }; + var Qx = { + arrayRows_column: { + pure: !0, count: function () { + return Math.max(0, this._data.length - this._source.startIndex) + }, getItem: function (t) { + return this._data[t + this._source.startIndex] + }, appendData: xs + }, + arrayRows_row: { + pure: !0, count: function () { + var t = this._data[0]; + return t ? Math.max(0, t.length - this._source.startIndex) : 0 + }, getItem: function (t) { + t += this._source.startIndex; + for (var e = [], i = this._data, n = 0; n < i.length; n++) { + var r = i[n]; + e.push(r ? r[t] : null) + } + return e + }, appendData: function () { + throw new Error('Do not support appendData when set seriesLayoutBy: "row".') + } + }, + objectRows: {pure: !0, count: ms, getItem: ys, appendData: xs}, + keyedColumns: { + pure: !0, count: function () { + var t = this._source.dimensionsDefine[0].name, e = this._data[t]; + return e ? e.length : 0 + }, getItem: function (t) { + for (var e = [], i = this._source.dimensionsDefine, n = 0; n < i.length; n++) { + var r = this._data[i[n].name]; + e.push(r ? r[t] : null) + } + return e + }, appendData: function (t) { + var e = this._data; + f(t, function (t, i) { + for (var n = e[i] || (e[i] = []), r = 0; r < (t || []).length; r++) n.push(t[r]) + }) + } + }, + original: {count: ms, getItem: ys, appendData: xs}, + typedArray: { + persistent: !1, pure: !0, count: function () { + return this._data ? this._data.length / this._dimSize : 0 + }, getItem: function (t, e) { + t -= this._offset, e = e || []; + for (var i = this._dimSize * t, n = 0; n < this._dimSize; n++) e[n] = this._data[i + n]; + return e + }, appendData: function (t) { + this._data = t + }, clean: function () { + this._offset += this.count(), this._data = null + } + } + }, Jx = { + arrayRows: _s, objectRows: function (t, e, i, n) { + return null != i ? t[n] : t + }, keyedColumns: _s, original: function (t, e, i) { + var n = Vn(t); + return null != i && n instanceof Array ? n[i] : n + }, typedArray: _s + }, t_ = { + arrayRows: ws, objectRows: function (t, e) { + return bs(t[e], this._dimensionInfos[e]) + }, keyedColumns: ws, original: function (t, e, i, n) { + var r = t && (null == t.value ? t : t.value); + return !this._rawData.pure && Wn(t) && (this.hasItemOption = !0), bs(r instanceof Array ? r[n] : r, this._dimensionInfos[e]) + }, typedArray: function (t, e, i, n) { + return t[n] + } + }, e_ = /\{@(.+?)\}/g, i_ = { + getDataParams: function (t, e) { + var i = this.getData(e), n = this.getRawValue(t, e), r = i.getRawIndex(t), a = i.getName(t), + o = i.getRawDataItem(t), s = i.getItemVisual(t, "color"), l = this.ecModel.getComponent("tooltip"), + h = l && l.get("renderMode"), u = Qn(h), c = this.mainType, d = "series" === c; + return { + componentType: c, + componentSubType: this.subType, + componentIndex: this.componentIndex, + seriesType: d ? this.subType : null, + seriesIndex: this.seriesIndex, + seriesId: d ? this.id : null, + seriesName: d ? this.name : null, + name: a, + dataIndex: r, + data: o, + dataType: e, + value: n, + color: s, + marker: mo({color: s, renderMode: u}), + $vars: ["seriesName", "name", "value"] + } + }, getFormattedLabel: function (t, e, i, n, r) { + e = e || "normal"; + var a = this.getData(i), o = a.getItemModel(t), s = this.getDataParams(t, i); + null != n && s.value instanceof Array && (s.value = s.value[n]); + var l = o.get("normal" === e ? [r || "label", "formatter"] : [e, r || "label", "formatter"]); + if ("function" == typeof l) return s.status = e, l(s); + if ("string" == typeof l) { + var h = go(l, s); + return h.replace(e_, function (e, i) { + var n = i.length; + return "[" === i.charAt(0) && "]" === i.charAt(n - 1) && (i = +i.slice(1, n - 1)), Ss(a, t, i) + }) + } + }, getRawValue: function (t, e) { + return Ss(this.getData(e), t) + }, formatTooltip: function () { + } + }, n_ = Ts.prototype; + n_.perform = function (t) { + function e(t) { + return !(t >= 1) && (t = 1), t + } + + var i = this._upstream, n = t && t.skip; + if (this._dirty && i) { + var r = this.context; + r.data = r.outputData = i.context.outputData + } + this.__pipeline && (this.__pipeline.currentTask = this); + var a; + this._plan && !n && (a = this._plan(this.context)); + var o = e(this._modBy), s = this._modDataCount || 0, l = e(t && t.modBy), h = t && t.modDataCount || 0; + (o !== l || s !== h) && (a = "reset"); + var u; + (this._dirty || "reset" === a) && (this._dirty = !1, u = As(this, n)), this._modBy = l, this._modDataCount = h; + var c = t && t.step; + if (this._dueEnd = i ? i._outputDueEnd : this._count ? this._count(this.context) : 1 / 0, this._progress) { + var d = this._dueIndex, f = Math.min(null != c ? this._dueIndex + c : 1 / 0, this._dueEnd); + if (!n && (u || f > d)) { + var p = this._progress; + if (_(p)) for (var g = 0; g < p.length; g++) Cs(this, p[g], d, f, l, h); else Cs(this, p, d, f, l, h) + } + this._dueIndex = f; + var v = null != this._settedOutputEnd ? this._settedOutputEnd : f; + this._outputDueEnd = v + } else this._dueIndex = this._outputDueEnd = null != this._settedOutputEnd ? this._settedOutputEnd : this._dueEnd; + return this.unfinished() + }; + var r_ = function () { + function t() { + return i > n ? n++ : null + } + + function e() { + var t = n % o * r + Math.ceil(n / o), e = n >= i ? null : a > t ? t : n; + return n++, e + } + + var i, n, r, a, o, s = { + reset: function (l, h, u, c) { + n = l, i = h, r = u, a = c, o = Math.ceil(a / r), s.next = r > 1 && a > 0 ? e : t + } + }; + return s + }(); + n_.dirty = function () { + this._dirty = !0, this._onDirty && this._onDirty(this.context) + }, n_.unfinished = function () { + return this._progress && this._dueIndex < this._dueEnd + }, n_.pipe = function (t) { + (this._downstream !== t || this._dirty) && (this._downstream = t, t._upstream = this, t.dirty()) + }, n_.dispose = function () { + this._disposed || (this._upstream && (this._upstream._downstream = null), this._downstream && (this._downstream._upstream = null), this._dirty = !1, this._disposed = !0) + }, n_.getUpstream = function () { + return this._upstream + }, n_.getDownstream = function () { + return this._downstream + }, n_.setOutputEnd = function (t) { + this._outputDueEnd = this._settedOutputEnd = t + }; + var a_ = jn(), o_ = yx.extend({ + type: "series.__base__", + seriesIndex: 0, + coordinateSystem: null, + defaultOption: null, + legendDataProvider: null, + visualColorAccessPath: "itemStyle.color", + layoutMode: null, + init: function (t, e, i) { + this.seriesIndex = this.componentIndex, this.dataTask = Is({ + count: Ps, + reset: Ls + }), this.dataTask.context = {model: this}, this.mergeDefaultAndTheme(t, i), zo(this); + var n = this.getInitialData(t, i); + zs(n, this), this.dataTask.context.data = n, a_(this).dataBeforeProcessed = n, Ds(this) + }, + mergeDefaultAndTheme: function (t, e) { + var i = this.layoutMode, n = i ? Mo(t) : {}, a = this.subType; + yx.hasClass(a) && (a += "Series"), r(t, e.getTheme().get(this.subType)), r(t, this.getDefaultOption()), Fn(t, "label", ["show"]), this.fillDataTextStyle(t.data), i && So(t, n, i) + }, + mergeOption: function (t, e) { + t = r(this.option, t, !0), this.fillDataTextStyle(t.data); + var i = this.layoutMode; + i && So(this.option, t, i), zo(this); + var n = this.getInitialData(t, e); + zs(n, this), this.dataTask.dirty(), this.dataTask.context.data = n, a_(this).dataBeforeProcessed = n, Ds(this) + }, + fillDataTextStyle: function (t) { + if (t && !I(t)) for (var e = ["show"], i = 0; i < t.length; i++) t[i] && t[i].label && Fn(t[i], "label", e) + }, + getInitialData: function () { + }, + appendData: function (t) { + var e = this.getRawData(); + e.appendData(t.data) + }, + getData: function (t) { + var e = Rs(this); + if (e) { + var i = e.context.data; + return null == t ? i : i.getLinkedData(t) + } + return a_(this).data + }, + setData: function (t) { + var e = Rs(this); + if (e) { + var i = e.context; + i.data !== t && e.modifyOutputEnd && e.setOutputEnd(t.count()), i.outputData = t, e !== this.dataTask && (i.data = t) + } + a_(this).data = t + }, + getSource: function () { + return Lo(this) + }, + getRawData: function () { + return a_(this).dataBeforeProcessed + }, + getBaseAxis: function () { + var t = this.coordinateSystem; + return t && t.getBaseAxis && t.getBaseAxis() + }, + formatTooltip: function (t, e, i, n) { + function r(i) { + function r(t, i) { + var r = c.getDimensionInfo(i); + if (r && r.otherDims.tooltip !== !1) { + var d = r.type, f = "sub" + o.seriesIndex + "at" + u, + p = mo({color: y, type: "subItem", renderMode: n, markerId: f}), + g = "string" == typeof p ? p : p.content, + v = (a ? g + po(r.displayName || "-") + ": " : "") + po("ordinal" === d ? t + "" : "time" === d ? e ? "" : xo("yyyy/MM/dd hh:mm:ss", t) : co(t)); + v && s.push(v), l && (h[f] = y, ++u) + } + } + + var a = g(i, function (t, e, i) { + var n = c.getDimensionInfo(i); + return t |= n && n.tooltip !== !1 && null != n.displayName + }, 0), s = []; + d.length ? f(d, function (e) { + r(Ss(c, t, e), e) + }) : f(i, r); + var p = a ? l ? "\n" : "
" : "", v = p + s.join(p || ", "); + return {renderMode: n, content: v, style: h} + } + + function a(t) { + return {renderMode: n, content: po(co(t)), style: h} + } + + var o = this; + n = n || "html"; + var s = "html" === n ? "
" : "\n", l = "richText" === n, h = {}, u = 0, c = this.getData(), + d = c.mapDimension("defaultedTooltip", !0), p = d.length, v = this.getRawValue(t), m = _(v), + y = c.getItemVisual(t, "color"); + S(y) && y.colorStops && (y = (y.colorStops[0] || {}).color), y = y || "transparent"; + var x = p > 1 || m && !p ? r(v) : a(p ? Ss(c, t, d[0]) : m ? v[0] : v), w = x.content, + b = o.seriesIndex + "at" + u, M = mo({color: y, type: "item", renderMode: n, markerId: b}); + h[b] = y, ++u; + var I = c.getName(t), T = this.name; + Zn(this) || (T = ""), T = T ? po(T) + (e ? ": " : s) : ""; + var C = "string" == typeof M ? M : M.content, A = e ? C + T + w : T + C + (I ? po(I) + ": " + w : w); + return {html: A, markers: h} + }, + isAnimationEnabled: function () { + if (tg.node) return !1; + var t = this.getShallow("animation"); + return t && this.getData().count() > this.getShallow("animationThreshold") && (t = !1), t + }, + restoreData: function () { + this.dataTask.dirty() + }, + getColorFromPalette: function (t, e, i) { + var n = this.ecModel, r = Sx.getColorFromPalette.call(this, t, e, i); + return r || (r = n.getColorFromPalette(t, e, i)), r + }, + coordDimToDataDim: function (t) { + return this.getRawData().mapDimension(t, !0) + }, + getProgressive: function () { + return this.get("progressive") + }, + getProgressiveThreshold: function () { + return this.get("progressiveThreshold") + }, + getAxisTooltipData: null, + getTooltipPosition: null, + pipeTask: null, + preventIncremental: null, + pipelineContext: null + }); + c(o_, i_), c(o_, Sx); + var s_ = function () { + this.group = new lv, this.uid = Za("viewComponent") + }; + s_.prototype = { + constructor: s_, init: function () { + }, render: function () { + }, dispose: function () { + }, filterForExposedEvent: null + }; + var l_ = s_.prototype; + l_.updateView = l_.updateLayout = l_.updateVisual = function () { + }, er(s_), ar(s_, {registerWhenExtend: !0}); + var h_ = function () { + var t = jn(); + return function (e) { + var i = t(e), n = e.pipelineContext, r = i.large, a = i.progressiveRender, o = i.large = n.large, + s = i.progressiveRender = n.progressiveRender; + return !!(r ^ o || a ^ s) && "reset" + } + }, u_ = jn(), c_ = h_(); + Bs.prototype = { + type: "chart", init: function () { + }, render: function () { + }, highlight: function (t, e, i, n) { + Fs(t.getData(), n, "emphasis") + }, downplay: function (t, e, i, n) { + Fs(t.getData(), n, "normal") + }, remove: function () { + this.group.removeAll() + }, dispose: function () { + }, incrementalPrepareRender: null, incrementalRender: null, updateTransform: null, filterForExposedEvent: null + }; + var d_ = Bs.prototype; + d_.updateView = d_.updateLayout = d_.updateVisual = function (t, e, i, n) { + this.render(t, e, i, n) + }, er(Bs, ["dispose"]), ar(Bs, {registerWhenExtend: !0}), Bs.markUpdateMethod = function (t, e) { + u_(t).updateMethod = e + }; + var f_ = { + incrementalPrepareRender: { + progress: function (t, e) { + e.view.incrementalRender(t, e.model, e.ecModel, e.api, e.payload) + } + }, render: { + forceFirstProgress: !0, progress: function (t, e) { + e.view.render(e.model, e.ecModel, e.api, e.payload) + } + } + }, p_ = "\x00__throttleOriginMethod", g_ = "\x00__throttleRate", v_ = "\x00__throttleType", m_ = { + createOnAllSeries: !0, performRawSeries: !0, reset: function (t, e) { + var i = t.getData(), n = (t.visualColorAccessPath || "itemStyle.color").split("."), + r = t.get(n) || t.getColorFromPalette(t.name, null, e.getSeriesCount()); + if (i.setVisual("color", r), !e.isSeriesFiltered(t)) { + "function" != typeof r || r instanceof Ey || i.each(function (e) { + i.setItemVisual(e, "color", r(t.getDataParams(e))) + }); + var a = function (t, e) { + var i = t.getItemModel(e), r = i.get(n, !0); + null != r && t.setItemVisual(e, "color", r) + }; + return {dataEach: i.hasItemOption ? a : null} + } + } + }, y_ = { + toolbox: { + brush: { + title: { + rect: "矩形选择", + polygon: "圈选", + lineX: "横向选择", + lineY: "纵向选择", + keep: "保持选择", + clear: "清除选择" + } + }, + dataView: {title: "数据视图", lang: ["数据视图", "关闭", "刷新"]}, + dataZoom: {title: {zoom: "区域缩放", back: "区域缩放还原"}}, + magicType: {title: {line: "切换为折线图", bar: "切换为柱状图", stack: "切换为堆叠", tiled: "切换为平铺"}}, + restore: {title: "还原"}, + saveAsImage: {title: "保存为图片", lang: ["右键另存为图片"]} + }, + series: { + typeNames: { + pie: "饼图", + bar: "柱状图", + line: "折线图", + scatter: "散点图", + effectScatter: "涟漪散点图", + radar: "雷达图", + tree: "树图", + treemap: "矩形树图", + boxplot: "箱型图", + candlestick: "K线图", + k: "K线图", + heatmap: "热力图", + map: "地图", + parallel: "平行坐标图", + lines: "线图", + graph: "关系图", + sankey: "桑基图", + funnel: "漏斗图", + gauge: "仪表盘图", + pictorialBar: "象形柱图", + themeRiver: "主题河流图", + sunburst: "旭日图" + } + }, + aria: { + general: {withTitle: "这是一个关于“{title}”的图表。", withoutTitle: "这是一个图表,"}, + series: { + single: { + prefix: "", + withName: "图表类型是{seriesType},表示{seriesName}。", + withoutName: "图表类型是{seriesType}。" + }, + multiple: { + prefix: "它由{seriesCount}个图表系列组成。", + withName: "第{seriesId}个系列是一个表示{seriesName}的{seriesType},", + withoutName: "第{seriesId}个系列是一个{seriesType},", + separator: {middle: ";", end: "。"} + } + }, + data: { + allData: "其数据是——", + partialData: "其中,前{displayCnt}项是——", + withName: "{name}的数据是{value}", + withoutName: "{value}", + separator: {middle: ",", end: ""} + } + } + }, x_ = function (t, e) { + function i(t, e) { + if ("string" != typeof t) return t; + var i = t; + return f(e, function (t, e) { + i = i.replace(new RegExp("\\{\\s*" + e + "\\s*\\}", "g"), t) + }), i + } + + function n(t) { + var e = o.get(t); + if (null == e) { + for (var i = t.split("."), n = y_.aria, r = 0; r < i.length; ++r) n = n[i[r]]; + return n + } + return e + } + + function r() { + var t = e.getModel("title").option; + return t && t.length && (t = t[0]), t && t.text + } + + function a(t) { + return y_.series.typeNames[t] || "自定义图" + } + + var o = e.getModel("aria"); + if (o.get("show")) { + if (o.get("description")) return void t.setAttribute("aria-label", o.get("description")); + var s = 0; + e.eachSeries(function () { + ++s + }, this); + var l, h = o.get("data.maxCount") || 10, u = o.get("series.maxCount") || 10, c = Math.min(s, u); + if (!(1 > s)) { + var d = r(); + l = d ? i(n("general.withTitle"), {title: d}) : n("general.withoutTitle"); + var p = [], g = s > 1 ? "series.multiple.prefix" : "series.single.prefix"; + l += i(n(g), {seriesCount: s}), e.eachSeries(function (t, e) { + if (c > e) { + var r, o = t.get("name"), l = "series." + (s > 1 ? "multiple" : "single") + "."; + r = n(o ? l + "withName" : l + "withoutName"), r = i(r, { + seriesId: t.seriesIndex, + seriesName: t.get("name"), + seriesType: a(t.subType) + }); + var u = t.getData(); + window.data = u, r += u.count() > h ? i(n("data.partialData"), {displayCnt: h}) : n("data.allData"); + for (var d = [], f = 0; f < u.count(); f++) if (h > f) { + var g = u.getName(f), v = Ss(u, f); + d.push(i(n(g ? "data.withName" : "data.withoutName"), {name: g, value: v})) + } + r += d.join(n("data.separator.middle")) + n("data.separator.end"), p.push(r) + } + }), l += p.join(n("series.multiple.separator.middle")) + n("series.multiple.separator.end"), t.setAttribute("aria-label", l) + } + } + }, __ = Math.PI, w_ = function (t, e) { + e = e || {}, s(e, { + text: "loading", + color: "#c23531", + textColor: "#000", + maskColor: "rgba(255, 255, 255, 0.8)", + zlevel: 0 + }); + var i = new Dy({style: {fill: e.maskColor}, zlevel: e.zlevel, z: 1e4}), n = new Oy({ + shape: {startAngle: -__ / 2, endAngle: -__ / 2 + .1, r: 10}, + style: {stroke: e.color, lineCap: "round", lineWidth: 5}, + zlevel: e.zlevel, + z: 10001 + }), r = new Dy({ + style: { + fill: "none", + text: e.text, + textPosition: "right", + textDistance: 10, + textFill: e.textColor + }, zlevel: e.zlevel, z: 10001 + }); + n.animateShape(!0).when(1e3, {endAngle: 3 * __ / 2}).start("circularInOut"), n.animateShape(!0).when(1e3, {startAngle: 3 * __ / 2}).delay(300).start("circularInOut"); + var a = new lv; + return a.add(n), a.add(r), a.add(i), a.resize = function () { + var e = t.getWidth() / 2, a = t.getHeight() / 2; + n.setShape({cx: e, cy: a}); + var o = n.shape.r; + r.setShape({x: e - o, y: a - o, width: 2 * o, height: 2 * o}), i.setShape({ + x: 0, + y: 0, + width: t.getWidth(), + height: t.getHeight() + }) + }, a.resize(), a + }, b_ = Xs.prototype; + b_.restoreData = function (t, e) { + t.restoreData(e), this._stageTaskMap.each(function (t) { + var e = t.overallTask; + e && e.dirty() + }) + }, b_.getPerformArgs = function (t, e) { + if (t.__pipeline) { + var i = this._pipelineMap.get(t.__pipeline.id), n = i.context, + r = !e && i.progressiveEnabled && (!n || n.progressiveRender) && t.__idxInPipeline > i.blockIndex, + a = r ? i.step : null, o = n && n.modDataCount, s = null != o ? Math.ceil(o / a) : null; + return {step: a, modBy: s, modDataCount: o} + } + }, b_.getPipeline = function (t) { + return this._pipelineMap.get(t) + }, b_.updateStreamModes = function (t, e) { + var i = this._pipelineMap.get(t.uid), n = t.getData(), r = n.count(), + a = i.progressiveEnabled && e.incrementalPrepareRender && r >= i.threshold, + o = t.get("large") && r >= t.get("largeThreshold"), s = "mod" === t.get("progressiveChunkMode") ? r : null; + t.pipelineContext = i.context = {progressiveRender: a, modDataCount: s, large: o} + }, b_.restorePipelines = function (t) { + var e = this, i = e._pipelineMap = N(); + t.eachSeries(function (t) { + var n = t.getProgressive(), r = t.uid; + i.set(r, { + id: r, + head: null, + tail: null, + threshold: t.getProgressiveThreshold(), + progressiveEnabled: n && !(t.preventIncremental && t.preventIncremental()), + blockIndex: -1, + step: Math.round(n || 700), + count: 0 + }), nl(e, t, t.dataTask) + }) + }, b_.prepareStageTasks = function () { + var t = this._stageTaskMap, e = this.ecInstance.getModel(), i = this.api; + f(this._allHandlers, function (n) { + var r = t.get(n.uid) || t.set(n.uid, []); + n.reset && js(this, n, r, e, i), n.overallReset && qs(this, n, r, e, i) + }, this) + }, b_.prepareView = function (t, e, i, n) { + var r = t.renderTask, a = r.context; + a.model = e, a.ecModel = i, a.api = n, r.__block = !t.incrementalPrepareRender, nl(this, e, r) + }, b_.performDataProcessorTasks = function (t, e) { + Ys(this, this._dataProcessorHandlers, t, e, {block: !0}) + }, b_.performVisualTasks = function (t, e, i) { + Ys(this, this._visualHandlers, t, e, i) + }, b_.performSeriesTasks = function (t) { + var e; + t.eachSeries(function (t) { + e |= t.dataTask.perform() + }), this.unfinished |= e + }, b_.plan = function () { + this._pipelineMap.each(function (t) { + var e = t.tail; + do { + if (e.__block) { + t.blockIndex = e.__idxInPipeline; + break + } + e = e.getUpstream() + } while (e) + }) + }; + var S_ = b_.updatePayload = function (t, e) { + "remain" !== e && (t.context.payload = e) + }, M_ = el(0); + Xs.wrapStageHandler = function (t, e) { + return w(t) && (t = { + overallReset: t, + seriesType: rl(t) + }), t.uid = Za("stageHandler"), e && (t.visualType = e), t + }; + var I_, T_ = {}, C_ = {}; + al(T_, Ex), al(C_, $o), T_.eachSeriesByType = T_.eachRawSeriesByType = function (t) { + I_ = t + }, T_.eachComponent = function (t) { + "series" === t.mainType && t.subType && (I_ = t.subType) + }; + var A_ = ["#37A2DA", "#32C5E9", "#67E0E3", "#9FE6B8", "#FFDB5C", "#ff9f7f", "#fb7293", "#E062AE", "#E690D1", "#e7bcf3", "#9d96f5", "#8378EA", "#96BFFF"], + D_ = { + color: A_, + colorLayer: [["#37A2DA", "#ffd85c", "#fd7b5f"], ["#37A2DA", "#67E0E3", "#FFDB5C", "#ff9f7f", "#E062AE", "#9d96f5"], ["#37A2DA", "#32C5E9", "#9FE6B8", "#FFDB5C", "#ff9f7f", "#fb7293", "#e7bcf3", "#8378EA", "#96BFFF"], A_] + }, k_ = "#eee", P_ = function () { + return { + axisLine: {lineStyle: {color: k_}}, + axisTick: {lineStyle: {color: k_}}, + axisLabel: {textStyle: {color: k_}}, + splitLine: {lineStyle: {type: "dashed", color: "#aaa"}}, + splitArea: {areaStyle: {color: k_}} + } + }, + L_ = ["#dd6b66", "#759aa0", "#e69d87", "#8dc1a9", "#ea7e53", "#eedd78", "#73a373", "#73b9bc", "#7289ab", "#91ca8c", "#f49f42"], + O_ = { + color: L_, + backgroundColor: "#333", + tooltip: {axisPointer: {lineStyle: {color: k_}, crossStyle: {color: k_}}}, + legend: {textStyle: {color: k_}}, + textStyle: {color: k_}, + title: {textStyle: {color: k_}}, + toolbox: {iconStyle: {normal: {borderColor: k_}}}, + dataZoom: {textStyle: {color: k_}}, + visualMap: {textStyle: {color: k_}}, + timeline: { + lineStyle: {color: k_}, + itemStyle: {normal: {color: L_[1]}}, + label: {normal: {textStyle: {color: k_}}}, + controlStyle: {normal: {color: k_, borderColor: k_}} + }, + timeAxis: P_(), + logAxis: P_(), + valueAxis: P_(), + categoryAxis: P_(), + line: {symbol: "circle"}, + graph: {color: L_}, + gauge: {title: {textStyle: {color: k_}}}, + candlestick: { + itemStyle: { + normal: { + color: "#FD1050", + color0: "#0CF49B", + borderColor: "#FD1050", + borderColor0: "#0CF49B" + } + } + } + }; + O_.categoryAxis.splitLine.show = !1, yx.extend({ + type: "dataset", + defaultOption: {seriesLayoutBy: Px, sourceHeader: null, dimensions: null, source: null}, + optionUpdated: function () { + Po(this) + } + }), s_.extend({type: "dataset"}); + var z_ = Fr.extend({ + type: "ellipse", shape: {cx: 0, cy: 0, rx: 0, ry: 0}, buildPath: function (t, e) { + var i = .5522848, n = e.cx, r = e.cy, a = e.rx, o = e.ry, s = a * i, l = o * i; + t.moveTo(n - a, r), t.bezierCurveTo(n - a, r - l, n - s, r - o, n, r - o), t.bezierCurveTo(n + s, r - o, n + a, r - l, n + a, r), t.bezierCurveTo(n + a, r + l, n + s, r + o, n, r + o), t.bezierCurveTo(n - s, r + o, n - a, r + l, n - a, r), t.closePath() + } + }), E_ = /[\s,]+/; + sl.prototype.parse = function (t, e) { + e = e || {}; + var i = ol(t); + if (!i) throw new Error("Illegal svg"); + var n = new lv; + this._root = n; + var r = i.getAttribute("viewBox") || "", a = parseFloat(i.getAttribute("width") || e.width), + o = parseFloat(i.getAttribute("height") || e.height); + isNaN(a) && (a = null), isNaN(o) && (o = null), cl(i, n, null, !0); + for (var s = i.firstChild; s;) this._parseNode(s, n), s = s.nextSibling; + var l, h; + if (r) { + var u = z(r).split(E_); + u.length >= 4 && (l = { + x: parseFloat(u[0] || 0), + y: parseFloat(u[1] || 0), + width: parseFloat(u[2]), + height: parseFloat(u[3]) + }) + } + if (l && null != a && null != o && (h = gl(l, a, o), !e.ignoreViewBox)) { + var c = n; + n = new lv, n.add(c), c.scale = h.scale.slice(), c.position = h.position.slice() + } + return e.ignoreRootClip || null == a || null == o || n.setClipPath(new Dy({ + shape: { + x: 0, + y: 0, + width: a, + height: o + } + })), {root: n, width: a, height: o, viewBoxRect: l, viewBoxTransform: h} + }, sl.prototype._parseNode = function (t, e) { + var i = t.nodeName.toLowerCase(); + "defs" === i ? this._isDefine = !0 : "text" === i && (this._isText = !0); + var n; + if (this._isDefine) { + var r = B_[i]; + if (r) { + var a = r.call(this, t), o = t.getAttribute("id"); + o && (this._defs[o] = a) + } + } else { + var r = R_[i]; + r && (n = r.call(this, t, e), e.add(n)) + } + for (var s = t.firstChild; s;) 1 === s.nodeType && this._parseNode(s, n), 3 === s.nodeType && this._isText && this._parseText(s, n), s = s.nextSibling; + "defs" === i ? this._isDefine = !1 : "text" === i && (this._isText = !1) + }, sl.prototype._parseText = function (t, e) { + if (1 === t.nodeType) { + var i = t.getAttribute("dx") || 0, n = t.getAttribute("dy") || 0; + this._textX += parseFloat(i), this._textY += parseFloat(n) + } + var r = new xy({ + style: {text: t.textContent, transformText: !0}, + position: [this._textX || 0, this._textY || 0] + }); + hl(e, r), cl(t, r, this._defs); + var a = r.style.fontSize; + a && 9 > a && (r.style.fontSize = 9, r.scale = r.scale || [1, 1], r.scale[0] *= a / 9, r.scale[1] *= a / 9); + var o = r.getBoundingRect(); + return this._textX += o.width, e.add(r), r + }; + var R_ = { + g: function (t, e) { + var i = new lv; + return hl(e, i), cl(t, i, this._defs), i + }, rect: function (t, e) { + var i = new Dy; + return hl(e, i), cl(t, i, this._defs), i.setShape({ + x: parseFloat(t.getAttribute("x") || 0), + y: parseFloat(t.getAttribute("y") || 0), + width: parseFloat(t.getAttribute("width") || 0), + height: parseFloat(t.getAttribute("height") || 0) + }), i + }, circle: function (t, e) { + var i = new _y; + return hl(e, i), cl(t, i, this._defs), i.setShape({ + cx: parseFloat(t.getAttribute("cx") || 0), + cy: parseFloat(t.getAttribute("cy") || 0), + r: parseFloat(t.getAttribute("r") || 0) + }), i + }, line: function (t, e) { + var i = new ky; + return hl(e, i), cl(t, i, this._defs), i.setShape({ + x1: parseFloat(t.getAttribute("x1") || 0), + y1: parseFloat(t.getAttribute("y1") || 0), + x2: parseFloat(t.getAttribute("x2") || 0), + y2: parseFloat(t.getAttribute("y2") || 0) + }), i + }, ellipse: function (t, e) { + var i = new z_; + return hl(e, i), cl(t, i, this._defs), i.setShape({ + cx: parseFloat(t.getAttribute("cx") || 0), + cy: parseFloat(t.getAttribute("cy") || 0), + rx: parseFloat(t.getAttribute("rx") || 0), + ry: parseFloat(t.getAttribute("ry") || 0) + }), i + }, polygon: function (t, e) { + var i = t.getAttribute("points"); + i && (i = ul(i)); + var n = new Cy({shape: {points: i || []}}); + return hl(e, n), cl(t, n, this._defs), n + }, polyline: function (t, e) { + var i = new Fr; + hl(e, i), cl(t, i, this._defs); + var n = t.getAttribute("points"); + n && (n = ul(n)); + var r = new Ay({shape: {points: n || []}}); + return r + }, image: function (t, e) { + var i = new yn; + return hl(e, i), cl(t, i, this._defs), i.setStyle({ + image: t.getAttribute("xlink:href"), + x: t.getAttribute("x"), + y: t.getAttribute("y"), + width: t.getAttribute("width"), + height: t.getAttribute("height") + }), i + }, text: function (t, e) { + var i = t.getAttribute("x") || 0, n = t.getAttribute("y") || 0, r = t.getAttribute("dx") || 0, + a = t.getAttribute("dy") || 0; + this._textX = parseFloat(i) + parseFloat(r), this._textY = parseFloat(n) + parseFloat(a); + var o = new lv; + return hl(e, o), cl(t, o, this._defs), o + }, tspan: function (t, e) { + var i = t.getAttribute("x"), n = t.getAttribute("y"); + null != i && (this._textX = parseFloat(i)), null != n && (this._textY = parseFloat(n)); + var r = t.getAttribute("dx") || 0, a = t.getAttribute("dy") || 0, o = new lv; + return hl(e, o), cl(t, o, this._defs), this._textX += r, this._textY += a, o + }, path: function (t, e) { + var i = t.getAttribute("d") || "", n = Hr(i); + return hl(e, n), cl(t, n, this._defs), n + } + }, B_ = { + lineargradient: function (t) { + var e = parseInt(t.getAttribute("x1") || 0, 10), i = parseInt(t.getAttribute("y1") || 0, 10), + n = parseInt(t.getAttribute("x2") || 10, 10), r = parseInt(t.getAttribute("y2") || 0, 10), + a = new Ry(e, i, n, r); + return ll(t, a), a + }, radialgradient: function () { + } + }, N_ = { + fill: "fill", + stroke: "stroke", + "stroke-width": "lineWidth", + opacity: "opacity", + "fill-opacity": "fillOpacity", + "stroke-opacity": "strokeOpacity", + "stroke-dasharray": "lineDash", + "stroke-dashoffset": "lineDashOffset", + "stroke-linecap": "lineCap", + "stroke-linejoin": "lineJoin", + "stroke-miterlimit": "miterLimit", + "font-family": "fontFamily", + "font-size": "fontSize", + "font-style": "fontStyle", + "font-weight": "fontWeight", + "text-align": "textAlign", + "alignment-baseline": "textBaseline" + }, F_ = /url\(\s*#(.*?)\)/, V_ = /(translate|scale|rotate|skewX|skewY|matrix)\(([\-\s0-9\.e,]*)\)/g, + W_ = /([^\s:;]+)\s*:\s*([^:;]+)/g, G_ = N(), H_ = { + registerMap: function (t, e, i) { + var n; + return _(e) ? n = e : e.svg ? n = [{ + type: "svg", + source: e.svg, + specialAreas: e.specialAreas + }] : (e.geoJson && !e.features && (i = e.specialAreas, e = e.geoJson), n = [{ + type: "geoJSON", + source: e, + specialAreas: i + }]), f(n, function (t) { + var e = t.type; + "geoJson" === e && (e = t.type = "geoJSON"); + var i = Z_[e]; + i(t) + }), G_.set(t, n) + }, retrieveMap: function (t) { + return G_.get(t) + } + }, Z_ = { + geoJSON: function (t) { + var e = t.source; + t.geoJSON = b(e) ? "undefined" != typeof JSON && JSON.parse ? JSON.parse(e) : new Function("return (" + e + ");")() : e + }, svg: function (t) { + t.svgXML = ol(t.source) + } + }, X_ = O, Y_ = f, j_ = w, q_ = S, U_ = yx.parseClassType, $_ = "4.2.0", K_ = {zrender: "4.0.5"}, Q_ = 1, J_ = 1e3, + tw = 5e3, ew = 1e3, iw = 2e3, nw = 3e3, rw = 4e3, aw = 5e3, ow = { + PROCESSOR: {FILTER: J_, STATISTIC: tw}, + VISUAL: {LAYOUT: ew, GLOBAL: iw, CHART: nw, COMPONENT: rw, BRUSH: aw} + }, sw = "__flagInMainProcess", lw = "__optionUpdated", hw = /^[a-zA-Z0-9_]+$/; + ml.prototype.on = vl("on"), ml.prototype.off = vl("off"), ml.prototype.one = vl("one"), c(ml, bg); + var uw = yl.prototype; + uw._onframe = function () { + if (!this._disposed) { + var t = this._scheduler; + if (this[lw]) { + var e = this[lw].silent; + this[sw] = !0, _l(this), cw.update.call(this), this[sw] = !1, this[lw] = !1, Ml.call(this, e), Il.call(this, e) + } else if (t.unfinished) { + var i = Q_, n = this._model, r = this._api; + t.unfinished = !1; + do { + var a = +new Date; + t.performSeriesTasks(n), t.performDataProcessorTasks(n), bl(this, n), t.performVisualTasks(n), Pl(this, this._model, r, "remain"), i -= +new Date - a + } while (i > 0 && t.unfinished); + t.unfinished || this._zr.flush() + } + } + }, uw.getDom = function () { + return this._dom + }, uw.getZr = function () { + return this._zr + }, uw.setOption = function (t, e, i) { + var n; + if (q_(e) && (i = e.lazyUpdate, n = e.silent, e = e.notMerge), this[sw] = !0, !this._model || e) { + var r = new Qo(this._api), a = this._theme, o = this._model = new Ex(null, null, a, r); + o.scheduler = this._scheduler, o.init(null, null, a, r) + } + this._model.setOption(t, vw), i ? (this[lw] = {silent: n}, this[sw] = !1) : (_l(this), cw.update.call(this), this._zr.flush(), this[lw] = !1, this[sw] = !1, Ml.call(this, n), Il.call(this, n)) + }, uw.setTheme = function () { + console.error("ECharts#setTheme() is DEPRECATED in ECharts 3.0") + }, uw.getModel = function () { + return this._model + }, uw.getOption = function () { + return this._model && this._model.getOption() + }, uw.getWidth = function () { + return this._zr.getWidth() + }, uw.getHeight = function () { + return this._zr.getHeight() + }, uw.getDevicePixelRatio = function () { + return this._zr.painter.dpr || window.devicePixelRatio || 1 + }, uw.getRenderedCanvas = function (t) { + if (tg.canvasSupported) { + t = t || {}, t.pixelRatio = t.pixelRatio || 1, t.backgroundColor = t.backgroundColor || this._model.get("backgroundColor"); + var e = this._zr; + return e.painter.getRenderedCanvas(t) + } + }, uw.getSvgDataUrl = function () { + if (tg.svgSupported) { + var t = this._zr, e = t.storage.getDisplayList(); + return f(e, function (t) { + t.stopAnimation(!0) + }), t.painter.pathToDataUrl() + } + }, uw.getDataURL = function (t) { + t = t || {}; + var e = t.excludeComponents, i = this._model, n = [], r = this; + Y_(e, function (t) { + i.eachComponent({mainType: t}, function (t) { + var e = r._componentsMap[t.__viewId]; + e.group.ignore || (n.push(e), e.group.ignore = !0) + }) + }); + var a = "svg" === this._zr.painter.getType() ? this.getSvgDataUrl() : this.getRenderedCanvas(t).toDataURL("image/" + (t && t.type || "png")); + return Y_(n, function (t) { + t.group.ignore = !1 + }), a + }, uw.getConnectedDataURL = function (t) { + if (tg.canvasSupported) { + var e = this.group, i = Math.min, r = Math.max, a = 1 / 0; + if (bw[e]) { + var o = a, s = a, l = -a, h = -a, u = [], c = t && t.pixelRatio || 1; + f(ww, function (a) { + if (a.group === e) { + var c = a.getRenderedCanvas(n(t)), d = a.getDom().getBoundingClientRect(); + o = i(d.left, o), s = i(d.top, s), l = r(d.right, l), h = r(d.bottom, h), u.push({ + dom: c, + left: d.left, + top: d.top + }) + } + }), o *= c, s *= c, l *= c, h *= c; + var d = l - o, p = h - s, g = cg(); + g.width = d, g.height = p; + var v = On(g); + return Y_(u, function (t) { + var e = new yn({style: {x: t.left * c - o, y: t.top * c - s, image: t.dom}}); + v.add(e) + }), v.refreshImmediately(), g.toDataURL("image/" + (t && t.type || "png")) + } + return this.getDataURL(t) + } + }, uw.convertToPixel = x(xl, "convertToPixel"), uw.convertFromPixel = x(xl, "convertFromPixel"), uw.containPixel = function (t, e) { + var i, n = this._model; + return t = qn(n, t), f(t, function (t, n) { + n.indexOf("Models") >= 0 && f(t, function (t) { + var r = t.coordinateSystem; + if (r && r.containPoint) i |= !!r.containPoint(e); else if ("seriesModels" === n) { + var a = this._chartsMap[t.__viewId]; + a && a.containPoint && (i |= a.containPoint(e, t)) + } + }, this) + }, this), !!i + }, uw.getVisual = function (t, e) { + var i = this._model; + t = qn(i, t, {defaultMainType: "series"}); + var n = t.seriesModel, r = n.getData(), + a = t.hasOwnProperty("dataIndexInside") ? t.dataIndexInside : t.hasOwnProperty("dataIndex") ? r.indexOfRawIndex(t.dataIndex) : null; + return null != a ? r.getItemVisual(a, e) : r.getVisual(e) + }, uw.getViewOfComponentModel = function (t) { + return this._componentsMap[t.__viewId] + }, uw.getViewOfSeriesModel = function (t) { + return this._chartsMap[t.__viewId] + }; + var cw = { + prepareAndUpdate: function (t) { + _l(this), cw.update.call(this, t) + }, update: function (t) { + var e = this._model, i = this._api, n = this._zr, r = this._coordSysMgr, a = this._scheduler; + if (e) { + a.restoreData(e, t), a.performSeriesTasks(e), r.create(e, i), a.performDataProcessorTasks(e, t), bl(this, e), r.update(e, i), Al(e), a.performVisualTasks(e, t), Dl(this, e, i, t); + var o = e.get("backgroundColor") || "transparent"; + if (tg.canvasSupported) n.setBackgroundColor(o); else { + var s = He(o); + o = Qe(s, "rgb"), 0 === s[3] && (o = "transparent") + } + Ll(e, i) + } + }, updateTransform: function (t) { + var e = this._model, i = this, n = this._api; + if (e) { + var r = []; + e.eachComponent(function (a, o) { + var s = i.getViewOfComponentModel(o); + if (s && s.__alive) if (s.updateTransform) { + var l = s.updateTransform(o, e, n, t); + l && l.update && r.push(s) + } else r.push(s) + }); + var a = N(); + e.eachSeries(function (r) { + var o = i._chartsMap[r.__viewId]; + if (o.updateTransform) { + var s = o.updateTransform(r, e, n, t); + s && s.update && a.set(r.uid, 1) + } else a.set(r.uid, 1) + }), Al(e), this._scheduler.performVisualTasks(e, t, { + setDirty: !0, + dirtyMap: a + }), Pl(i, e, n, t, a), Ll(e, this._api) + } + }, updateView: function (t) { + var e = this._model; + e && (Bs.markUpdateMethod(t, "updateView"), Al(e), this._scheduler.performVisualTasks(e, t, {setDirty: !0}), Dl(this, this._model, this._api, t), Ll(e, this._api)) + }, updateVisual: function (t) { + cw.update.call(this, t) + }, updateLayout: function (t) { + cw.update.call(this, t) + } + }; + uw.resize = function (t) { + this._zr.resize(t); + var e = this._model; + if (this._loadingFX && this._loadingFX.resize(), e) { + var i = e.resetOption("media"), n = t && t.silent; + this[sw] = !0, i && _l(this), cw.update.call(this), this[sw] = !1, Ml.call(this, n), Il.call(this, n) + } + }, uw.showLoading = function (t, e) { + if (q_(t) && (e = t, t = ""), t = t || "default", this.hideLoading(), _w[t]) { + var i = _w[t](this._api, e), n = this._zr; + this._loadingFX = i, n.add(i) + } + }, uw.hideLoading = function () { + this._loadingFX && this._zr.remove(this._loadingFX), this._loadingFX = null + }, uw.makeActionFromEvent = function (t) { + var e = o({}, t); + return e.type = pw[t.type], e + }, uw.dispatchAction = function (t, e) { + if (q_(e) || (e = {silent: !!e}), fw[t.type] && this._model) { + if (this[sw]) return void this._pendingActions.push(t); + Sl.call(this, t, e.silent), e.flush ? this._zr.flush(!0) : e.flush !== !1 && tg.browser.weChat && this._throttledZrFlush(), Ml.call(this, e.silent), Il.call(this, e.silent) + } + }, uw.appendData = function (t) { + var e = t.seriesIndex, i = this.getModel(), n = i.getSeriesByIndex(e); + n.appendData(t), this._scheduler.unfinished = !0 + }, uw.on = vl("on"), uw.off = vl("off"), uw.one = vl("one"); + var dw = ["click", "dblclick", "mouseover", "mouseout", "mousemove", "mousedown", "mouseup", "globalout", "contextmenu"]; + uw._initEvents = function () { + Y_(dw, function (t) { + this._zr.on(t, function (e) { + var i, n = this.getModel(), r = e.target, a = "globalout" === t; + if (a) i = {}; else if (r && null != r.dataIndex) { + var s = r.dataModel || n.getSeriesByIndex(r.seriesIndex); + i = s && s.getDataParams(r.dataIndex, r.dataType, r) || {} + } else r && r.eventData && (i = o({}, r.eventData)); + if (i) { + var l = i.componentType, h = i.componentIndex; + ("markLine" === l || "markPoint" === l || "markArea" === l) && (l = "series", h = i.seriesIndex); + var u = l && null != h && n.getComponent(l, h), + c = u && this["series" === u.mainType ? "_chartsMap" : "_componentsMap"][u.__viewId]; + i.event = e, i.type = t, this._ecEventProcessor.eventInfo = { + targetEl: r, + packedEvent: i, + model: u, + view: c + }, this.trigger(t, i) + } + }, this) + }, this), Y_(pw, function (t, e) { + this._messageCenter.on(e, function (t) { + this.trigger(e, t) + }, this) + }, this) + }, uw.isDisposed = function () { + return this._disposed + }, uw.clear = function () { + this.setOption({series: []}, !0) + }, uw.dispose = function () { + if (!this._disposed) { + this._disposed = !0, $n(this.getDom(), Iw, ""); + var t = this._api, e = this._model; + Y_(this._componentsViews, function (i) { + i.dispose(e, t) + }), Y_(this._chartsViews, function (i) { + i.dispose(e, t) + }), this._zr.dispose(), delete ww[this.id] + } + }, c(yl, bg), Bl.prototype = { + constructor: Bl, normalizeQuery: function (t) { + var e = {}, i = {}, n = {}; + if (b(t)) { + var r = U_(t); + e.mainType = r.main || null, e.subType = r.sub || null + } else { + var a = ["Index", "Name", "Id"], o = {name: 1, dataIndex: 1, dataType: 1}; + f(t, function (t, r) { + for (var s = !1, l = 0; l < a.length; l++) { + var h = a[l], u = r.lastIndexOf(h); + if (u > 0 && u === r.length - h.length) { + var c = r.slice(0, u); + "data" !== c && (e.mainType = c, e[h.toLowerCase()] = t, s = !0) + } + } + o.hasOwnProperty(r) && (i[r] = t, s = !0), s || (n[r] = t) + }) + } + return {cptQuery: e, dataQuery: i, otherQuery: n} + }, filter: function (t, e) { + function i(t, e, i, n) { + return null == t[i] || e[n || i] === t[i] + } + + var n = this.eventInfo; + if (!n) return !0; + var r = n.targetEl, a = n.packedEvent, o = n.model, s = n.view; + if (!o || !s) return !0; + var l = e.cptQuery, h = e.dataQuery; + return i(l, o, "mainType") && i(l, o, "subType") && i(l, o, "index", "componentIndex") && i(l, o, "name") && i(l, o, "id") && i(h, a, "name") && i(h, a, "dataIndex") && i(h, a, "dataType") && (!s.filterForExposedEvent || s.filterForExposedEvent(t, e.otherQuery, r, a)) + }, afterTrigger: function () { + this.eventInfo = null + } + }; + var fw = {}, pw = {}, gw = [], vw = [], mw = [], yw = [], xw = {}, _w = {}, ww = {}, bw = {}, Sw = new Date - 0, + Mw = new Date - 0, Iw = "_echarts_instance_", Tw = Wl; + Jl(iw, m_), Yl(Ux), jl(tw, $x), eh("default", w_), Ul({ + type: "highlight", + event: "highlight", + update: "highlight" + }, V), Ul({type: "downplay", event: "downplay", update: "downplay"}, V), Xl("light", D_), Xl("dark", O_); + var Cw = {}; + uh.prototype = { + constructor: uh, add: function (t) { + return this._add = t, this + }, update: function (t) { + return this._update = t, this + }, remove: function (t) { + return this._remove = t, this + }, execute: function () { + var t, e = this._old, i = this._new, n = {}, r = {}, a = [], o = []; + for (ch(e, n, a, "_oldKeyGetter", this), ch(i, r, o, "_newKeyGetter", this), t = 0; t < e.length; t++) { + var s = a[t], l = r[s]; + if (null != l) { + var h = l.length; + h ? (1 === h && (r[s] = null), l = l.unshift()) : r[s] = null, this._update && this._update(l, t) + } else this._remove && this._remove(t) + } + for (var t = 0; t < o.length; t++) { + var s = o[t]; + if (r.hasOwnProperty(s)) { + var l = r[s]; + if (null == l) continue; + if (l.length) for (var u = 0, h = l.length; h > u; u++) this._add && this._add(l[u]); else this._add && this._add(l) + } + } + } + }; + var Aw = N(["tooltip", "label", "itemName", "itemId", "seriesName"]), Dw = S, kw = "undefined", Pw = "e\x00\x00", + Lw = { + "float": typeof Float64Array === kw ? Array : Float64Array, + "int": typeof Int32Array === kw ? Array : Int32Array, + ordinal: Array, + number: Array, + time: Array + }, Ow = typeof Uint32Array === kw ? Array : Uint32Array, zw = typeof Uint16Array === kw ? Array : Uint16Array, + Ew = ["hasItemOption", "_nameList", "_idList", "_invertedIndicesMap", "_rawData", "_chunkSize", "_chunkCount", "_dimValueGetter", "_count", "_rawCount", "_nameDimIdx", "_idDimIdx"], + Rw = ["_extent", "_approximateExtent", "_rawExtent"], Bw = function (t, e) { + t = t || ["x", "y"]; + for (var i = {}, n = [], r = {}, a = 0; a < t.length; a++) { + var o = t[a]; + b(o) && (o = {name: o}); + var s = o.name; + o.type = o.type || "float", o.coordDim || (o.coordDim = s, o.coordDimIndex = 0), o.otherDims = o.otherDims || {}, n.push(s), i[s] = o, o.index = a, o.createInvertedIndices && (r[s] = []) + } + this.dimensions = n, this._dimensionInfos = i, this.hostModel = e, this.dataType, this._indices = null, this._count = 0, this._rawCount = 0, this._storage = {}, this._nameList = [], this._idList = [], this._optionModels = [], this._visual = {}, this._layout = {}, this._itemVisuals = [], this.hasItemVisual = {}, this._itemLayouts = [], this._graphicEls = [], this._chunkSize = 1e5, this._chunkCount = 0, this._rawData, this._rawExtent = {}, this._extent = {}, this._approximateExtent = {}, this._dimensionsSummary = dh(this), this._invertedIndicesMap = r, this._calculationInfo = {} + }, Nw = Bw.prototype; + Nw.type = "list", Nw.hasItemOption = !0, Nw.getDimension = function (t) { + return isNaN(t) || (t = this.dimensions[t] || t), t + }, Nw.getDimensionInfo = function (t) { + return this._dimensionInfos[this.getDimension(t)] + }, Nw.getDimensionsOnCoord = function () { + return this._dimensionsSummary.dataDimsOnCoord.slice() + }, Nw.mapDimension = function (t, e) { + var i = this._dimensionsSummary; + if (null == e) return i.encodeFirstDimNotExtra[t]; + var n = i.encode[t]; + return e === !0 ? (n || []).slice() : n && n[e] + }, Nw.initData = function (t, e, i) { + var n = ko.isInstance(t) || d(t); + n && (t = new vs(t, this.dimensions.length)), this._rawData = t, this._storage = {}, this._indices = null, this._nameList = e || [], this._idList = [], this._nameRepeatCount = {}, i || (this.hasItemOption = !1), this.defaultDimValueGetter = t_[this._rawData.getSource().sourceFormat], this._dimValueGetter = i = i || this.defaultDimValueGetter, this._rawExtent = {}, this._initDataFromProvider(0, t.count()), t.pure && (this.hasItemOption = !1) + }, Nw.getProvider = function () { + return this._rawData + }, Nw.appendData = function (t) { + var e = this._rawData, i = this.count(); + e.appendData(t); + var n = e.count(); + e.persistent || (n += i), this._initDataFromProvider(i, n) + }, Nw._initDataFromProvider = function (t, e) { + if (!(t >= e)) { + for (var i, n = this._chunkSize, r = this._rawData, a = this._storage, o = this.dimensions, s = o.length, l = this._dimensionInfos, h = this._nameList, u = this._idList, c = this._rawExtent, d = this._nameRepeatCount = {}, f = this._chunkCount, p = f - 1, g = 0; s > g; g++) { + var v = o[g]; + c[v] || (c[v] = Th()); + var m = l[v]; + 0 === m.otherDims.itemName && (i = this._nameDimIdx = g), 0 === m.otherDims.itemId && (this._idDimIdx = g); + var y = Lw[m.type]; + a[v] || (a[v] = []); + var x = a[v][p]; + if (x && x.length < n) { + for (var _ = new y(Math.min(e - p * n, n)), w = 0; w < x.length; w++) _[w] = x[w]; + a[v][p] = _ + } + for (var b = f * n; e > b; b += n) a[v].push(new y(Math.min(e - b, n))); + this._chunkCount = a[v].length + } + for (var S = new Array(s), M = t; e > M; M++) { + S = r.getItem(M, S); + for (var I = Math.floor(M / n), T = M % n, b = 0; s > b; b++) { + var v = o[b], C = a[v][I], A = this._dimValueGetter(S, v, M, b); + C[T] = A; + var D = c[v]; + A < D[0] && (D[0] = A), A > D[1] && (D[1] = A) + } + if (!r.pure) { + var k = h[M]; + if (S && null == k) if (null != S.name) h[M] = k = S.name; else if (null != i) { + var P = o[i], L = a[P][I]; + if (L) { + k = L[T]; + var O = l[P].ordinalMeta; + O && O.categories.length && (k = O.categories[k]) + } + } + var z = null == S ? null : S.id; + null == z && null != k && (d[k] = d[k] || 0, z = k, d[k] > 0 && (z += "__ec__" + d[k]), d[k]++), null != z && (u[M] = z) + } + } + !r.persistent && r.clean && r.clean(), this._rawCount = this._count = e, this._extent = {}, yh(this) + } + }, Nw.count = function () { + return this._count + }, Nw.getIndices = function () { + var t, e = this._indices; + if (e) { + var i = e.constructor, n = this._count; + if (i === Array) { + t = new i(n); + for (var r = 0; n > r; r++) t[r] = e[r] + } else t = new i(e.buffer, 0, n) + } else for (var i = gh(this), t = new i(this.count()), r = 0; r < t.length; r++) t[r] = r; + return t + }, Nw.get = function (t, e) { + if (!(e >= 0 && e < this._count)) return 0 / 0; + var i = this._storage; + if (!i[t]) return 0 / 0; + e = this.getRawIndex(e); + var n = Math.floor(e / this._chunkSize), r = e % this._chunkSize, a = i[t][n], o = a[r]; + return o + }, Nw.getByRawIndex = function (t, e) { + if (!(e >= 0 && e < this._rawCount)) return 0 / 0; + var i = this._storage[t]; + if (!i) return 0 / 0; + var n = Math.floor(e / this._chunkSize), r = e % this._chunkSize, a = i[n]; + return a[r] + }, Nw._getFast = function (t, e) { + var i = Math.floor(e / this._chunkSize), n = e % this._chunkSize, r = this._storage[t][i]; + return r[n] + }, Nw.getValues = function (t, e) { + var i = []; + _(t) || (e = t, t = this.dimensions); + for (var n = 0, r = t.length; r > n; n++) i.push(this.get(t[n], e)); + return i + }, Nw.hasValue = function (t) { + for (var e = this._dimensionsSummary.dataDimsOnCoord, i = this._dimensionInfos, n = 0, r = e.length; r > n; n++) if ("ordinal" !== i[e[n]].type && isNaN(this.get(e[n], t))) return !1; + return !0 + }, Nw.getDataExtent = function (t) { + t = this.getDimension(t); + var e = this._storage[t], i = Th(); + if (!e) return i; + var n, r = this.count(), a = !this._indices; + if (a) return this._rawExtent[t].slice(); + if (n = this._extent[t]) return n.slice(); + n = i; + for (var o = n[0], s = n[1], l = 0; r > l; l++) { + var h = this._getFast(t, this.getRawIndex(l)); + o > h && (o = h), h > s && (s = h) + } + return n = [o, s], this._extent[t] = n, n + }, Nw.getApproximateExtent = function (t) { + return t = this.getDimension(t), this._approximateExtent[t] || this.getDataExtent(t) + }, Nw.setApproximateExtent = function (t, e) { + e = this.getDimension(e), this._approximateExtent[e] = t.slice() + }, Nw.getCalculationInfo = function (t) { + return this._calculationInfo[t] + }, Nw.setCalculationInfo = function (t, e) { + Dw(t) ? o(this._calculationInfo, t) : this._calculationInfo[t] = e + }, Nw.getSum = function (t) { + var e = this._storage[t], i = 0; + if (e) for (var n = 0, r = this.count(); r > n; n++) { + var a = this.get(t, n); + isNaN(a) || (i += a) + } + return i + }, Nw.getMedian = function (t) { + var e = []; + this.each(t, function (t) { + isNaN(t) || e.push(t) + }); + var i = [].concat(e).sort(function (t, e) { + return t - e + }), n = this.count(); + return 0 === n ? 0 : n % 2 === 1 ? i[(n - 1) / 2] : (i[n / 2] + i[n / 2 - 1]) / 2 + }, Nw.rawIndexOf = function (t, e) { + var i = t && this._invertedIndicesMap[t], n = i[e]; + return null == n || isNaN(n) ? -1 : n + }, Nw.indexOfName = function (t) { + for (var e = 0, i = this.count(); i > e; e++) if (this.getName(e) === t) return e; + return -1 + }, Nw.indexOfRawIndex = function (t) { + if (!this._indices) return t; + if (t >= this._rawCount || 0 > t) return -1; + var e = this._indices, i = e[t]; + if (null != i && i < this._count && i === t) return t; + for (var n = 0, r = this._count - 1; r >= n;) { + var a = (n + r) / 2 | 0; + if (e[a] < t) n = a + 1; else { + if (!(e[a] > t)) return a; + r = a - 1 + } + } + return -1 + }, Nw.indicesOfNearest = function (t, e, i) { + var n = this._storage, r = n[t], a = []; + if (!r) return a; + null == i && (i = 1 / 0); + for (var o = Number.MAX_VALUE, s = -1, l = 0, h = this.count(); h > l; l++) { + var u = e - this.get(t, l), c = Math.abs(u); + i >= u && o >= c && ((o > c || u >= 0 && 0 > s) && (o = c, s = u, a.length = 0), a.push(l)) + } + return a + }, Nw.getRawIndex = _h, Nw.getRawDataItem = function (t) { + if (this._rawData.persistent) return this._rawData.getItem(this.getRawIndex(t)); + for (var e = [], i = 0; i < this.dimensions.length; i++) { + var n = this.dimensions[i]; + e.push(this.get(n, t)) + } + return e + }, Nw.getName = function (t) { + var e = this.getRawIndex(t); + return this._nameList[e] || xh(this, this._nameDimIdx, e) || "" + }, Nw.getId = function (t) { + return bh(this, this.getRawIndex(t)) + }, Nw.each = function (t, e, i, n) { + if (this._count) { + "function" == typeof t && (n = i, i = e, e = t, t = []), i = i || n || this, t = p(Sh(t), this.getDimension, this); + for (var r = t.length, a = 0; a < this.count(); a++) switch (r) { + case 0: + e.call(i, a); + break; + case 1: + e.call(i, this.get(t[0], a), a); + break; + case 2: + e.call(i, this.get(t[0], a), this.get(t[1], a), a); + break; + default: + for (var o = 0, s = []; r > o; o++) s[o] = this.get(t[o], a); + s[o] = a, e.apply(i, s) + } + } + }, Nw.filterSelf = function (t, e, i, n) { + if (this._count) { + "function" == typeof t && (n = i, i = e, e = t, t = []), i = i || n || this, t = p(Sh(t), this.getDimension, this); + for (var r = this.count(), a = gh(this), o = new a(r), s = [], l = t.length, h = 0, u = t[0], c = 0; r > c; c++) { + var d, f = this.getRawIndex(c); + if (0 === l) d = e.call(i, c); else if (1 === l) { + var g = this._getFast(u, f); + d = e.call(i, g, c) + } else { + for (var v = 0; l > v; v++) s[v] = this._getFast(u, f); + s[v] = c, d = e.apply(i, s) + } + d && (o[h++] = f) + } + return r > h && (this._indices = o), this._count = h, this._extent = {}, this.getRawIndex = this._indices ? wh : _h, this + } + }, Nw.selectRange = function (t) { + if (this._count) { + var e = []; + for (var i in t) t.hasOwnProperty(i) && e.push(i); + var n = e.length; + if (n) { + var r = this.count(), a = gh(this), o = new a(r), s = 0, l = e[0], h = t[l][0], u = t[l][1], c = !1; + if (!this._indices) { + var d = 0; + if (1 === n) { + for (var f = this._storage[e[0]], p = 0; p < this._chunkCount; p++) for (var g = f[p], v = Math.min(this._count - p * this._chunkSize, this._chunkSize), m = 0; v > m; m++) { + var y = g[m]; + (y >= h && u >= y || isNaN(y)) && (o[s++] = d), d++ + } + c = !0 + } else if (2 === n) { + for (var f = this._storage[l], x = this._storage[e[1]], _ = t[e[1]][0], w = t[e[1]][1], p = 0; p < this._chunkCount; p++) for (var g = f[p], b = x[p], v = Math.min(this._count - p * this._chunkSize, this._chunkSize), m = 0; v > m; m++) { + var y = g[m], S = b[m]; + (y >= h && u >= y || isNaN(y)) && (S >= _ && w >= S || isNaN(S)) && (o[s++] = d), d++ + } + c = !0 + } + } + if (!c) if (1 === n) for (var m = 0; r > m; m++) { + var M = this.getRawIndex(m), y = this._getFast(l, M); + (y >= h && u >= y || isNaN(y)) && (o[s++] = M) + } else for (var m = 0; r > m; m++) { + for (var I = !0, M = this.getRawIndex(m), p = 0; n > p; p++) { + var T = e[p], y = this._getFast(i, M); + (y < t[T][0] || y > t[T][1]) && (I = !1) + } + I && (o[s++] = this.getRawIndex(m)) + } + return r > s && (this._indices = o), this._count = s, this._extent = {}, this.getRawIndex = this._indices ? wh : _h, this + } + } + }, Nw.mapArray = function (t, e, i, n) { + "function" == typeof t && (n = i, i = e, e = t, t = []), i = i || n || this; + var r = []; + return this.each(t, function () { + r.push(e && e.apply(this, arguments)) + }, i), r + }, Nw.map = function (t, e, i, n) { + i = i || n || this, t = p(Sh(t), this.getDimension, this); + var r = Mh(this, t); + r._indices = this._indices, r.getRawIndex = r._indices ? wh : _h; + for (var a = r._storage, o = [], s = this._chunkSize, l = t.length, h = this.count(), u = [], c = r._rawExtent, d = 0; h > d; d++) { + for (var f = 0; l > f; f++) u[f] = this.get(t[f], d); + u[l] = d; + var g = e && e.apply(i, u); + if (null != g) { + "object" != typeof g && (o[0] = g, g = o); + for (var v = this.getRawIndex(d), m = Math.floor(v / s), y = v % s, x = 0; x < g.length; x++) { + var _ = t[x], w = g[x], b = c[_], S = a[_]; + S && (S[m][y] = w), w < b[0] && (b[0] = w), w > b[1] && (b[1] = w) + } + } + } + return r + }, Nw.downSample = function (t, e, i, n) { + for (var r = Mh(this, [t]), a = r._storage, o = [], s = Math.floor(1 / e), l = a[t], h = this.count(), u = this._chunkSize, c = r._rawExtent[t], d = new (gh(this))(h), f = 0, p = 0; h > p; p += s) { + s > h - p && (s = h - p, o.length = s); + for (var g = 0; s > g; g++) { + var v = this.getRawIndex(p + g), m = Math.floor(v / u), y = v % u; + o[g] = l[m][y] + } + var x = i(o), _ = this.getRawIndex(Math.min(p + n(o, x) || 0, h - 1)), w = Math.floor(_ / u), b = _ % u; + l[w][b] = x, x < c[0] && (c[0] = x), x > c[1] && (c[1] = x), d[f++] = _ + } + return r._count = f, r._indices = d, r.getRawIndex = wh, r + }, Nw.getItemModel = function (t) { + var e = this.hostModel; + return new Wa(this.getRawDataItem(t), e, e && e.ecModel) + }, Nw.diff = function (t) { + var e = this; + return new uh(t ? t.getIndices() : [], this.getIndices(), function (e) { + return bh(t, e) + }, function (t) { + return bh(e, t) + }) + }, Nw.getVisual = function (t) { + var e = this._visual; + return e && e[t] + }, Nw.setVisual = function (t, e) { + if (Dw(t)) for (var i in t) t.hasOwnProperty(i) && this.setVisual(i, t[i]); else this._visual = this._visual || {}, this._visual[t] = e + }, Nw.setLayout = function (t, e) { + if (Dw(t)) for (var i in t) t.hasOwnProperty(i) && this.setLayout(i, t[i]); else this._layout[t] = e + }, Nw.getLayout = function (t) { + return this._layout[t] + }, Nw.getItemLayout = function (t) { + return this._itemLayouts[t] + }, Nw.setItemLayout = function (t, e, i) { + this._itemLayouts[t] = i ? o(this._itemLayouts[t] || {}, e) : e + }, Nw.clearItemLayouts = function () { + this._itemLayouts.length = 0 + }, Nw.getItemVisual = function (t, e, i) { + var n = this._itemVisuals[t], r = n && n[e]; + return null != r || i ? r : this.getVisual(e) + }, Nw.setItemVisual = function (t, e, i) { + var n = this._itemVisuals[t] || {}, r = this.hasItemVisual; + if (this._itemVisuals[t] = n, Dw(e)) for (var a in e) e.hasOwnProperty(a) && (n[a] = e[a], r[a] = !0); else n[e] = i, r[e] = !0 + }, Nw.clearAllVisual = function () { + this._visual = {}, this._itemVisuals = [], this.hasItemVisual = {} + }; + var Fw = function (t) { + t.seriesIndex = this.seriesIndex, t.dataIndex = this.dataIndex, t.dataType = this.dataType + }; + Nw.setItemGraphicEl = function (t, e) { + var i = this.hostModel; + e && (e.dataIndex = t, e.dataType = this.dataType, e.seriesIndex = i && i.seriesIndex, "group" === e.type && e.traverse(Fw, e)), this._graphicEls[t] = e + }, Nw.getItemGraphicEl = function (t) { + return this._graphicEls[t] + }, Nw.eachItemGraphicEl = function (t, e) { + f(this._graphicEls, function (i, n) { + i && t && t.call(e, i, n) + }) + }, Nw.cloneShallow = function (t) { + if (!t) { + var e = p(this.dimensions, this.getDimensionInfo, this); + t = new Bw(e, this.hostModel) + } + if (t._storage = this._storage, mh(t, this), this._indices) { + var i = this._indices.constructor; + t._indices = new i(this._indices) + } else t._indices = null; + return t.getRawIndex = t._indices ? wh : _h, t + }, Nw.wrapMethod = function (t, e) { + var i = this[t]; + "function" == typeof i && (this.__wrappedMethods = this.__wrappedMethods || [], this.__wrappedMethods.push(t), this[t] = function () { + var t = i.apply(this, arguments); + return e.apply(this, [t].concat(P(arguments))) + }) + }, Nw.TRANSFERABLE_METHODS = ["cloneShallow", "downSample", "map"], Nw.CHANGABLE_METHODS = ["filterSelf", "selectRange"]; + var Vw = function (t, e) { + return e = e || {}, Ch(e.coordDimensions || [], t, { + dimsDef: e.dimensionsDefine || t.dimensionsDefine, + encodeDef: e.encodeDefine || t.encodeDefine, + dimCount: e.dimensionsCount, + generateCoord: e.generateCoord, + generateCoordCount: e.generateCoordCount + }) + }; + Rh.prototype.parse = function (t) { + return t + }, Rh.prototype.getSetting = function (t) { + return this._setting[t] + }, Rh.prototype.contain = function (t) { + var e = this._extent; + return t >= e[0] && t <= e[1] + }, Rh.prototype.normalize = function (t) { + var e = this._extent; + return e[1] === e[0] ? .5 : (t - e[0]) / (e[1] - e[0]) + }, Rh.prototype.scale = function (t) { + var e = this._extent; + return t * (e[1] - e[0]) + e[0] + }, Rh.prototype.unionExtent = function (t) { + var e = this._extent; + t[0] < e[0] && (e[0] = t[0]), t[1] > e[1] && (e[1] = t[1]) + }, Rh.prototype.unionExtentFromData = function (t, e) { + this.unionExtent(t.getApproximateExtent(e)) + }, Rh.prototype.getExtent = function () { + return this._extent.slice() + }, Rh.prototype.setExtent = function (t, e) { + var i = this._extent; + isNaN(t) || (i[0] = t), isNaN(e) || (i[1] = e) + }, Rh.prototype.isBlank = function () { + return this._isBlank + }, Rh.prototype.setBlank = function (t) { + this._isBlank = t + }, Rh.prototype.getLabel = null, er(Rh), ar(Rh, {registerWhenExtend: !0}), Bh.createByAxisModel = function (t) { + var e = t.option, i = e.data, n = i && p(i, Fh); + return new Bh({categories: n, needCollect: !n, deduplication: e.dedplication !== !1}) + }; + var Ww = Bh.prototype; + Ww.getOrdinal = function (t) { + return Nh(this).get(t) + }, Ww.parseAndCollect = function (t) { + var e, i = this._needCollect; + if ("string" != typeof t && !i) return t; + if (i && !this._deduplication) return e = this.categories.length, this.categories[e] = t, e; + var n = Nh(this); + return e = n.get(t), null == e && (i ? (e = this.categories.length, this.categories[e] = t, n.set(t, e)) : e = 0 / 0), e + }; + var Gw = Rh.prototype, Hw = Rh.extend({ + type: "ordinal", init: function (t, e) { + (!t || _(t)) && (t = new Bh({categories: t})), this._ordinalMeta = t, this._extent = e || [0, t.categories.length - 1] + }, parse: function (t) { + return "string" == typeof t ? this._ordinalMeta.getOrdinal(t) : Math.round(t) + }, contain: function (t) { + return t = this.parse(t), Gw.contain.call(this, t) && null != this._ordinalMeta.categories[t] + }, normalize: function (t) { + return Gw.normalize.call(this, this.parse(t)) + }, scale: function (t) { + return Math.round(Gw.scale.call(this, t)) + }, getTicks: function () { + for (var t = [], e = this._extent, i = e[0]; i <= e[1];) t.push(i), i++; + return t + }, getLabel: function (t) { + return this.isBlank() ? void 0 : this._ordinalMeta.categories[t] + }, count: function () { + return this._extent[1] - this._extent[0] + 1 + }, unionExtentFromData: function (t, e) { + this.unionExtent(t.getApproximateExtent(e)) + }, getOrdinalMeta: function () { + return this._ordinalMeta + }, niceTicks: V, niceExtent: V + }); + Hw.create = function () { + return new Hw + }; + var Zw = $a, Xw = $a, Yw = Rh.extend({ + type: "interval", _interval: 0, _intervalPrecision: 2, setExtent: function (t, e) { + var i = this._extent; + isNaN(t) || (i[0] = parseFloat(t)), isNaN(e) || (i[1] = parseFloat(e)) + }, unionExtent: function (t) { + var e = this._extent; + t[0] < e[0] && (e[0] = t[0]), t[1] > e[1] && (e[1] = t[1]), Yw.prototype.setExtent.call(this, e[0], e[1]) + }, getInterval: function () { + return this._interval + }, setInterval: function (t) { + this._interval = t, this._niceExtent = this._extent.slice(), this._intervalPrecision = Wh(t) + }, getTicks: function () { + return Zh(this._interval, this._extent, this._niceExtent, this._intervalPrecision) + }, getLabel: function (t, e) { + if (null == t) return ""; + var i = e && e.precision; + return null == i ? i = Ja(t) || 0 : "auto" === i && (i = this._intervalPrecision), t = Xw(t, i, !0), co(t) + }, niceTicks: function (t, e, i) { + t = t || 5; + var n = this._extent, r = n[1] - n[0]; + if (isFinite(r)) { + 0 > r && (r = -r, n.reverse()); + var a = Vh(n, t, e, i); + this._intervalPrecision = a.intervalPrecision, this._interval = a.interval, this._niceExtent = a.niceTickExtent + } + }, niceExtent: function (t) { + var e = this._extent; + if (e[0] === e[1]) if (0 !== e[0]) { + var i = e[0]; + t.fixMax ? e[0] -= i / 2 : (e[1] += i / 2, e[0] -= i / 2) + } else e[1] = 1; + var n = e[1] - e[0]; + isFinite(n) || (e[0] = 0, e[1] = 1), this.niceTicks(t.splitNumber, t.minInterval, t.maxInterval); + var r = this._interval; + t.fixMin || (e[0] = Xw(Math.floor(e[0] / r) * r)), t.fixMax || (e[1] = Xw(Math.ceil(e[1] / r) * r)) + } + }); + Yw.create = function () { + return new Yw + }; + var jw = "__ec_stack_", qw = .5, Uw = "undefined" != typeof Float32Array ? Float32Array : Array, $w = { + seriesType: "bar", plan: h_(), reset: function (t) { + function e(t, e) { + for (var i, c = new Uw(2 * t.count), d = [], f = [], p = 0; null != (i = t.next());) f[h] = e.get(o, i), f[1 - h] = e.get(s, i), d = n.dataToPoint(f, null, d), c[p++] = d[0], c[p++] = d[1]; + e.setLayout({largePoints: c, barWidth: u, valueAxisStart: eu(r, a, !1), valueAxisHorizontal: l}) + } + + if (Jh(t) && tu(t)) { + var i = t.getData(), n = t.coordinateSystem, r = n.getBaseAxis(), a = n.getOtherAxis(r), + o = i.mapDimension(a.dim), s = i.mapDimension(r.dim), l = a.isHorizontal(), h = l ? 0 : 1, + u = Kh(Uh([t]), r, t).width; + return u > qw || (u = qw), {progress: e} + } + } + }, Kw = Yw.prototype, Qw = Math.ceil, Jw = Math.floor, tb = 1e3, eb = 60 * tb, ib = 60 * eb, nb = 24 * ib, + rb = function (t, e, i, n) { + for (; n > i;) { + var r = i + n >>> 1; + t[r][1] < e ? i = r + 1 : n = r + } + return i + }, ab = Yw.extend({ + type: "time", getLabel: function (t) { + var e = this._stepLvl, i = new Date(t); + return xo(e[0], i, this.getSetting("useUTC")) + }, niceExtent: function (t) { + var e = this._extent; + if (e[0] === e[1] && (e[0] -= nb, e[1] += nb), e[1] === -1 / 0 && 1 / 0 === e[0]) { + var i = new Date; + e[1] = +new Date(i.getFullYear(), i.getMonth(), i.getDate()), e[0] = e[1] - nb + } + this.niceTicks(t.splitNumber, t.minInterval, t.maxInterval); + var n = this._interval; + t.fixMin || (e[0] = $a(Jw(e[0] / n) * n)), t.fixMax || (e[1] = $a(Qw(e[1] / n) * n)) + }, niceTicks: function (t, e, i) { + t = t || 10; + var n = this._extent, r = n[1] - n[0], a = r / t; + null != e && e > a && (a = e), null != i && a > i && (a = i); + var o = ob.length, s = rb(ob, a, 0, o), l = ob[Math.min(s, o - 1)], h = l[1]; + if ("year" === l[0]) { + var u = r / h, c = so(u / t, !0); + h *= c + } + var d = this.getSetting("useUTC") ? 0 : 60 * new Date(+n[0] || +n[1]).getTimezoneOffset() * 1e3, + f = [Math.round(Qw((n[0] - d) / h) * h + d), Math.round(Jw((n[1] - d) / h) * h + d)]; + Hh(f, n), this._stepLvl = l, this._interval = h, this._niceExtent = f + }, parse: function (t) { + return +ro(t) + } + }); + f(["contain", "normalize"], function (t) { + ab.prototype[t] = function (e) { + return Kw[t].call(this, this.parse(e)) + } + }); + var ob = [["hh:mm:ss", tb], ["hh:mm:ss", 5 * tb], ["hh:mm:ss", 10 * tb], ["hh:mm:ss", 15 * tb], ["hh:mm:ss", 30 * tb], ["hh:mm\nMM-dd", eb], ["hh:mm\nMM-dd", 5 * eb], ["hh:mm\nMM-dd", 10 * eb], ["hh:mm\nMM-dd", 15 * eb], ["hh:mm\nMM-dd", 30 * eb], ["hh:mm\nMM-dd", ib], ["hh:mm\nMM-dd", 2 * ib], ["hh:mm\nMM-dd", 6 * ib], ["hh:mm\nMM-dd", 12 * ib], ["MM-dd\nyyyy", nb], ["MM-dd\nyyyy", 2 * nb], ["MM-dd\nyyyy", 3 * nb], ["MM-dd\nyyyy", 4 * nb], ["MM-dd\nyyyy", 5 * nb], ["MM-dd\nyyyy", 6 * nb], ["week", 7 * nb], ["MM-dd\nyyyy", 10 * nb], ["week", 14 * nb], ["week", 21 * nb], ["month", 31 * nb], ["week", 42 * nb], ["month", 62 * nb], ["week", 70 * nb], ["quarter", 95 * nb], ["month", 31 * nb * 4], ["month", 31 * nb * 5], ["half-year", 380 * nb / 2], ["month", 31 * nb * 8], ["month", 31 * nb * 10], ["year", 380 * nb]]; + ab.create = function (t) { + return new ab({useUTC: t.ecModel.get("useUTC")}) + }; + var sb = Rh.prototype, lb = Yw.prototype, hb = Ja, ub = $a, cb = Math.floor, db = Math.ceil, fb = Math.pow, + pb = Math.log, gb = Rh.extend({ + type: "log", base: 10, $constructor: function () { + Rh.apply(this, arguments), this._originalScale = new Yw + }, getTicks: function () { + var t = this._originalScale, e = this._extent, i = t.getExtent(); + return p(lb.getTicks.call(this), function (n) { + var r = $a(fb(this.base, n)); + return r = n === e[0] && t.__fixMin ? iu(r, i[0]) : r, r = n === e[1] && t.__fixMax ? iu(r, i[1]) : r + }, this) + }, getLabel: lb.getLabel, scale: function (t) { + return t = sb.scale.call(this, t), fb(this.base, t) + }, setExtent: function (t, e) { + var i = this.base; + t = pb(t) / pb(i), e = pb(e) / pb(i), lb.setExtent.call(this, t, e) + }, getExtent: function () { + var t = this.base, e = sb.getExtent.call(this); + e[0] = fb(t, e[0]), e[1] = fb(t, e[1]); + var i = this._originalScale, n = i.getExtent(); + return i.__fixMin && (e[0] = iu(e[0], n[0])), i.__fixMax && (e[1] = iu(e[1], n[1])), e + }, unionExtent: function (t) { + this._originalScale.unionExtent(t); + var e = this.base; + t[0] = pb(t[0]) / pb(e), t[1] = pb(t[1]) / pb(e), sb.unionExtent.call(this, t) + }, unionExtentFromData: function (t, e) { + this.unionExtent(t.getApproximateExtent(e)) + }, niceTicks: function (t) { + t = t || 10; + var e = this._extent, i = e[1] - e[0]; + if (!(1 / 0 === i || 0 >= i)) { + var n = ao(i), r = t / i * n; + for (.5 >= r && (n *= 10); !isNaN(n) && Math.abs(n) < 1 && Math.abs(n) > 0;) n *= 10; + var a = [$a(db(e[0] / n) * n), $a(cb(e[1] / n) * n)]; + this._interval = n, this._niceExtent = a + } + }, niceExtent: function (t) { + lb.niceExtent.call(this, t); + var e = this._originalScale; + e.__fixMin = t.fixMin, e.__fixMax = t.fixMax + } + }); + f(["contain", "normalize"], function (t) { + gb.prototype[t] = function (e) { + return e = pb(e) / pb(this.base), sb[t].call(this, e) + } + }), gb.create = function () { + return new gb + }; + var vb = { + getMin: function (t) { + var e = this.option, i = t || null == e.rangeStart ? e.min : e.rangeStart; + return this.axis && null != i && "dataMin" !== i && "function" != typeof i && !C(i) && (i = this.axis.scale.parse(i)), i + }, getMax: function (t) { + var e = this.option, i = t || null == e.rangeEnd ? e.max : e.rangeEnd; + return this.axis && null != i && "dataMax" !== i && "function" != typeof i && !C(i) && (i = this.axis.scale.parse(i)), i + }, getNeedCrossZero: function () { + var t = this.option; + return null != t.rangeStart || null != t.rangeEnd ? !1 : !t.scale + }, getCoordSysModel: V, setRange: function (t, e) { + this.option.rangeStart = t, this.option.rangeEnd = e + }, resetRange: function () { + this.option.rangeStart = this.option.rangeEnd = null + } + }, mb = $r({ + type: "triangle", shape: {cx: 0, cy: 0, width: 0, height: 0}, buildPath: function (t, e) { + var i = e.cx, n = e.cy, r = e.width / 2, a = e.height / 2; + t.moveTo(i, n - a), t.lineTo(i + r, n + a), t.lineTo(i - r, n + a), t.closePath() + } + }), yb = $r({ + type: "diamond", shape: {cx: 0, cy: 0, width: 0, height: 0}, buildPath: function (t, e) { + var i = e.cx, n = e.cy, r = e.width / 2, a = e.height / 2; + t.moveTo(i, n - a), t.lineTo(i + r, n), t.lineTo(i, n + a), t.lineTo(i - r, n), t.closePath() + } + }), xb = $r({ + type: "pin", shape: {x: 0, y: 0, width: 0, height: 0}, buildPath: function (t, e) { + var i = e.x, n = e.y, r = e.width / 5 * 3, a = Math.max(r, e.height), o = r / 2, s = o * o / (a - o), + l = n - a + o + s, h = Math.asin(s / o), u = Math.cos(h) * o, c = Math.sin(h), d = Math.cos(h), + f = .6 * o, p = .7 * o; + t.moveTo(i - u, l + s), t.arc(i, l, o, Math.PI - h, 2 * Math.PI + h), t.bezierCurveTo(i + u - c * f, l + s + d * f, i, n - p, i, n), t.bezierCurveTo(i, n - p, i - u + c * f, l + s + d * f, i - u, l + s), t.closePath() + } + }), _b = $r({ + type: "arrow", shape: {x: 0, y: 0, width: 0, height: 0}, buildPath: function (t, e) { + var i = e.height, n = e.width, r = e.x, a = e.y, o = n / 3 * 2; + t.moveTo(r, a), t.lineTo(r + o, a + i), t.lineTo(r, a + i / 4 * 3), t.lineTo(r - o, a + i), t.lineTo(r, a), t.closePath() + } + }), wb = {line: ky, rect: Dy, roundRect: Dy, square: Dy, circle: _y, diamond: yb, pin: xb, arrow: _b, triangle: mb}, + bb = { + line: function (t, e, i, n, r) { + r.x1 = t, r.y1 = e + n / 2, r.x2 = t + i, r.y2 = e + n / 2 + }, rect: function (t, e, i, n, r) { + r.x = t, r.y = e, r.width = i, r.height = n + }, roundRect: function (t, e, i, n, r) { + r.x = t, r.y = e, r.width = i, r.height = n, r.r = Math.min(i, n) / 4 + }, square: function (t, e, i, n, r) { + var a = Math.min(i, n); + r.x = t, r.y = e, r.width = a, r.height = a + }, circle: function (t, e, i, n, r) { + r.cx = t + i / 2, r.cy = e + n / 2, r.r = Math.min(i, n) / 2 + }, diamond: function (t, e, i, n, r) { + r.cx = t + i / 2, r.cy = e + n / 2, r.width = i, r.height = n + }, pin: function (t, e, i, n, r) { + r.x = t + i / 2, r.y = e + n / 2, r.width = i, r.height = n + }, arrow: function (t, e, i, n, r) { + r.x = t + i / 2, r.y = e + n / 2, r.width = i, r.height = n + }, triangle: function (t, e, i, n, r) { + r.cx = t + i / 2, r.cy = e + n / 2, r.width = i, r.height = n + } + }, Sb = {}; + f(wb, function (t, e) { + Sb[e] = new t + }); + var Mb = $r({ + type: "symbol", shape: {symbolType: "", x: 0, y: 0, width: 0, height: 0}, beforeBrush: function () { + var t = this.style, e = this.shape; + "pin" === e.symbolType && "inside" === t.textPosition && (t.textPosition = ["50%", "40%"], t.textAlign = "center", t.textVerticalAlign = "middle") + }, buildPath: function (t, e, i) { + var n = e.symbolType, r = Sb[n]; + "none" !== e.symbolType && (r || (n = "rect", r = Sb[n]), bb[n](e.x, e.y, e.width, e.height, r.shape), r.buildPath(t, r.shape, i)) + } + }), Ib = {isDimensionStacked: Ph, enableDataStack: kh, getStackedDimension: Lh}, Tb = (Object.freeze || Object)({ + createList: pu, + getLayoutRect: bo, + dataStack: Ib, + createScale: gu, + mixinAxisModelCommonMethods: vu, + completeDimensions: Ch, + createDimensions: Vw, + createSymbol: fu + }), Cb = 1e-8; + xu.prototype = { + constructor: xu, properties: null, getBoundingRect: function () { + var t = this._rect; + if (t) return t; + for (var e = Number.MAX_VALUE, i = [e, e], n = [-e, -e], r = [], a = [], o = this.geometries, s = 0; s < o.length; s++) if ("polygon" === o[s].type) { + var l = o[s].exterior; + _r(l, r, a), oe(i, i, r), se(n, n, a) + } + return 0 === s && (i[0] = i[1] = n[0] = n[1] = 0), this._rect = new gi(i[0], i[1], n[0] - i[0], n[1] - i[1]) + }, contain: function (t) { + var e = this.getBoundingRect(), i = this.geometries; + if (!e.contain(t[0], t[1])) return !1; + t:for (var n = 0, r = i.length; r > n; n++) if ("polygon" === i[n].type) { + var a = i[n].exterior, o = i[n].interiors; + if (yu(a, t[0], t[1])) { + for (var s = 0; s < (o ? o.length : 0); s++) if (yu(o[s])) continue t; + return !0 + } + } + return !1 + }, transformTo: function (t, e, i, n) { + var r = this.getBoundingRect(), a = r.width / r.height; + i ? n || (n = i / a) : i = a * n; + for (var o = new gi(t, e, i, n), s = r.calculateTransform(o), l = this.geometries, h = 0; h < l.length; h++) if ("polygon" === l[h].type) { + for (var u = l[h].exterior, c = l[h].interiors, d = 0; d < u.length; d++) ae(u[d], u[d], s); + for (var f = 0; f < (c ? c.length : 0); f++) for (var d = 0; d < c[f].length; d++) ae(c[f][d], c[f][d], s) + } + r = this._rect, r.copy(o), this.center = [r.x + r.width / 2, r.y + r.height / 2] + }, cloneShallow: function (t) { + null == t && (t = this.name); + var e = new xu(t, this.geometries, this.center); + return e._rect = this._rect, e.transformTo = null, e + } + }; + var Ab = function (t) { + return _u(t), p(v(t.features, function (t) { + return t.geometry && t.properties && t.geometry.coordinates.length > 0 + }), function (t) { + var e = t.properties, i = t.geometry, n = i.coordinates, r = []; + "Polygon" === i.type && r.push({ + type: "polygon", + exterior: n[0], + interiors: n.slice(1) + }), "MultiPolygon" === i.type && f(n, function (t) { + t[0] && r.push({type: "polygon", exterior: t[0], interiors: t.slice(1)}) + }); + var a = new xu(e.name, r, e.cp); + return a.properties = e, a + }) + }, Db = jn(), kb = [0, 1], Pb = function (t, e, i) { + this.dim = t, this.scale = e, this._extent = i || [0, 0], this.inverse = !1, this.onBand = !1 + }; + Pb.prototype = { + constructor: Pb, contain: function (t) { + var e = this._extent, i = Math.min(e[0], e[1]), n = Math.max(e[0], e[1]); + return t >= i && n >= t + }, containData: function (t) { + return this.contain(this.dataToCoord(t)) + }, getExtent: function () { + return this._extent.slice() + }, getPixelPrecision: function (t) { + return to(t || this.scale.getExtent(), this._extent) + }, setExtent: function (t, e) { + var i = this._extent; + i[0] = t, i[1] = e + }, dataToCoord: function (t, e) { + var i = this._extent, n = this.scale; + return t = n.normalize(t), this.onBand && "ordinal" === n.type && (i = i.slice(), Bu(i, n.count())), qa(t, kb, i, e) + }, coordToData: function (t, e) { + var i = this._extent, n = this.scale; + this.onBand && "ordinal" === n.type && (i = i.slice(), Bu(i, n.count())); + var r = qa(t, i, kb, e); + return this.scale.scale(r) + }, pointToData: function () { + }, getTicksCoords: function (t) { + t = t || {}; + var e = t.tickModel || this.getTickModel(), i = Su(this, e), n = i.ticks, r = p(n, function (t) { + return {coord: this.dataToCoord(t), tickValue: t} + }, this), a = e.get("alignWithLabel"); + return Nu(this, r, i.tickCategoryInterval, a, t.clamp), r + }, getViewLabels: function () { + return bu(this).labels + }, getLabelModel: function () { + return this.model.getModel("axisLabel") + }, getTickModel: function () { + return this.model.getModel("axisTick") + }, getBandWidth: function () { + var t = this._extent, e = this.scale.getExtent(), i = e[1] - e[0] + (this.onBand ? 1 : 0); + 0 === i && (i = 1); + var n = Math.abs(t[1] - t[0]); + return Math.abs(n) / i + }, isHorizontal: null, getRotate: null, calculateCategoryInterval: function () { + return Lu(this) + } + }; + var Lb = Ab, Ob = {}; + f(["map", "each", "filter", "indexOf", "inherits", "reduce", "filter", "bind", "curry", "isArray", "isString", "isObject", "isFunction", "extend", "defaults", "clone", "merge"], function (t) { + Ob[t] = pg[t] + }); + var zb = {}; + f(["extendShape", "extendPath", "makePath", "makeImage", "mergePath", "resizePath", "createIcon", "setHoverStyle", "setLabelStyle", "setTextStyle", "setText", "getFont", "updateProps", "initProps", "getTransform", "clipPointsByRect", "clipRectByRect", "Group", "Image", "Text", "Circle", "Sector", "Ring", "Polygon", "Polyline", "Rect", "Line", "BezierCurve", "Arc", "IncrementalDisplayable", "CompoundPath", "LinearGradient", "RadialGradient", "BoundingRect"], function (t) { + zb[t] = Yy[t] + }); + var Eb = function (t) { + this._axes = {}, this._dimList = [], this.name = t || "" + }; + Eb.prototype = { + constructor: Eb, type: "cartesian", getAxis: function (t) { + return this._axes[t] + }, getAxes: function () { + return p(this._dimList, Fu, this) + }, getAxesByScale: function (t) { + return t = t.toLowerCase(), v(this.getAxes(), function (e) { + return e.scale.type === t + }) + }, addAxis: function (t) { + var e = t.dim; + this._axes[e] = t, this._dimList.push(e) + }, dataToCoord: function (t) { + return this._dataCoordConvert(t, "dataToCoord") + }, coordToData: function (t) { + return this._dataCoordConvert(t, "coordToData") + }, _dataCoordConvert: function (t, e) { + for (var i = this._dimList, n = t instanceof Array ? [] : {}, r = 0; r < i.length; r++) { + var a = i[r], o = this._axes[a]; + n[a] = o[e](t[a]) + } + return n + } + }, Vu.prototype = { + constructor: Vu, type: "cartesian2d", dimensions: ["x", "y"], getBaseAxis: function () { + return this.getAxesByScale("ordinal")[0] || this.getAxesByScale("time")[0] || this.getAxis("x") + }, containPoint: function (t) { + var e = this.getAxis("x"), i = this.getAxis("y"); + return e.contain(e.toLocalCoord(t[0])) && i.contain(i.toLocalCoord(t[1])) + }, containData: function (t) { + return this.getAxis("x").containData(t[0]) && this.getAxis("y").containData(t[1]) + }, dataToPoint: function (t, e, i) { + var n = this.getAxis("x"), r = this.getAxis("y"); + return i = i || [], i[0] = n.toGlobalCoord(n.dataToCoord(t[0])), i[1] = r.toGlobalCoord(r.dataToCoord(t[1])), i + }, clampData: function (t, e) { + var i = this.getAxis("x").scale, n = this.getAxis("y").scale, r = i.getExtent(), a = n.getExtent(), + o = i.parse(t[0]), s = n.parse(t[1]); + return e = e || [], e[0] = Math.min(Math.max(Math.min(r[0], r[1]), o), Math.max(r[0], r[1])), e[1] = Math.min(Math.max(Math.min(a[0], a[1]), s), Math.max(a[0], a[1])), e + }, pointToData: function (t, e) { + var i = this.getAxis("x"), n = this.getAxis("y"); + return e = e || [], e[0] = i.coordToData(i.toLocalCoord(t[0])), e[1] = n.coordToData(n.toLocalCoord(t[1])), e + }, getOtherAxis: function (t) { + return this.getAxis("x" === t.dim ? "y" : "x") + } + }, u(Vu, Eb); + var Rb = function (t, e, i, n, r) { + Pb.call(this, t, e, i), this.type = n || "value", this.position = r || "bottom" + }; + Rb.prototype = { + constructor: Rb, index: 0, getAxesOnZeroOf: null, model: null, isHorizontal: function () { + var t = this.position; + return "top" === t || "bottom" === t + }, getGlobalExtent: function (t) { + var e = this.getExtent(); + return e[0] = this.toGlobalCoord(e[0]), e[1] = this.toGlobalCoord(e[1]), t && e[0] > e[1] && e.reverse(), e + }, getOtherAxis: function () { + this.grid.getOtherAxis() + }, pointToData: function (t, e) { + return this.coordToData(this.toLocalCoord(t["x" === this.dim ? 0 : 1]), e) + }, toLocalCoord: null, toGlobalCoord: null + }, u(Rb, Pb); + var Bb = { + show: !0, + zlevel: 0, + z: 0, + inverse: !1, + name: "", + nameLocation: "end", + nameRotate: null, + nameTruncate: {maxWidth: null, ellipsis: "...", placeholder: "."}, + nameTextStyle: {}, + nameGap: 15, + silent: !1, + triggerEvent: !1, + tooltip: {show: !1}, + axisPointer: {}, + axisLine: { + show: !0, + onZero: !0, + onZeroAxisIndex: null, + lineStyle: {color: "#333", width: 1, type: "solid"}, + symbol: ["none", "none"], + symbolSize: [10, 15] + }, + axisTick: {show: !0, inside: !1, length: 5, lineStyle: {width: 1}}, + axisLabel: {show: !0, inside: !1, rotate: 0, showMinLabel: null, showMaxLabel: null, margin: 8, fontSize: 12}, + splitLine: {show: !0, lineStyle: {color: ["#ccc"], width: 1, type: "solid"}}, + splitArea: {show: !1, areaStyle: {color: ["rgba(250,250,250,0.3)", "rgba(200,200,200,0.3)"]}} + }, Nb = {}; + Nb.categoryAxis = r({ + boundaryGap: !0, + deduplication: null, + splitLine: {show: !1}, + axisTick: {alignWithLabel: !1, interval: "auto"}, + axisLabel: {interval: "auto"} + }, Bb), Nb.valueAxis = r({boundaryGap: [0, 0], splitNumber: 5}, Bb), Nb.timeAxis = s({ + scale: !0, + min: "dataMin", + max: "dataMax" + }, Nb.valueAxis), Nb.logAxis = s({scale: !0, logBase: 10}, Nb.valueAxis); + var Fb = ["value", "category", "time", "log"], Vb = function (t, e, i, n) { + f(Fb, function (o) { + e.extend({ + type: t + "Axis." + o, mergeDefaultAndTheme: function (e, n) { + var a = this.layoutMode, s = a ? Mo(e) : {}, l = n.getTheme(); + r(e, l.get(o + "Axis")), r(e, this.getDefaultOption()), e.type = i(t, e), a && So(e, s, a) + }, optionUpdated: function () { + var t = this.option; + "category" === t.type && (this.__ordinalMeta = Bh.createByAxisModel(this)) + }, getCategories: function (t) { + var e = this.option; + return "category" === e.type ? t ? e.data : this.__ordinalMeta.categories : void 0 + }, getOrdinalMeta: function () { + return this.__ordinalMeta + }, defaultOption: a([{}, Nb[o + "Axis"], n], !0) + }) + }), yx.registerSubTypeDefaulter(t + "Axis", x(i, t)) + }, Wb = yx.extend({ + type: "cartesian2dAxis", axis: null, init: function () { + Wb.superApply(this, "init", arguments), this.resetRange() + }, mergeOption: function () { + Wb.superApply(this, "mergeOption", arguments), this.resetRange() + }, restoreData: function () { + Wb.superApply(this, "restoreData", arguments), this.resetRange() + }, getCoordSysModel: function () { + return this.ecModel.queryComponents({ + mainType: "grid", + index: this.option.gridIndex, + id: this.option.gridId + })[0] + } + }); + r(Wb.prototype, vb); + var Gb = {offset: 0}; + Vb("x", Wb, Wu, Gb), Vb("y", Wb, Wu, Gb), yx.extend({ + type: "grid", + dependencies: ["xAxis", "yAxis"], + layoutMode: "box", + coordinateSystem: null, + defaultOption: { + show: !1, + zlevel: 0, + z: 0, + left: "10%", + top: 60, + right: "10%", + bottom: 60, + containLabel: !1, + backgroundColor: "rgba(0,0,0,0)", + borderWidth: 1, + borderColor: "#ccc" + } + }); + var Hb = Hu.prototype; + Hb.type = "grid", Hb.axisPointerEnabled = !0, Hb.getRect = function () { + return this._rect + }, Hb.update = function (t, e) { + var i = this._axesMap; + this._updateScale(t, this.model), f(i.x, function (t) { + au(t.scale, t.model) + }), f(i.y, function (t) { + au(t.scale, t.model) + }); + var n = {}; + f(i.x, function (t) { + Zu(i, "y", t, n) + }), f(i.y, function (t) { + Zu(i, "x", t, n) + }), this.resize(this.model, e) + }, Hb.resize = function (t, e, i) { + function n() { + f(a, function (t) { + var e = t.isHorizontal(), i = e ? [0, r.width] : [0, r.height], n = t.inverse ? 1 : 0; + t.setExtent(i[n], i[1 - n]), Yu(t, e ? r.x : r.y) + }) + } + + var r = bo(t.getBoxLayoutParams(), {width: e.getWidth(), height: e.getHeight()}); + this._rect = r; + var a = this._axesList; + n(), !i && t.get("containLabel") && (f(a, function (t) { + if (!t.model.get("axisLabel.inside")) { + var e = uu(t); + if (e) { + var i = t.isHorizontal() ? "height" : "width", n = t.model.get("axisLabel.margin"); + r[i] -= e[i] + n, "top" === t.position ? r.y += e.height + n : "left" === t.position && (r.x += e.width + n) + } + } + }), n()) + }, Hb.getAxis = function (t, e) { + var i = this._axesMap[t]; + if (null != i) { + if (null == e) for (var n in i) if (i.hasOwnProperty(n)) return i[n]; + return i[e] + } + }, Hb.getAxes = function () { + return this._axesList.slice() + }, Hb.getCartesian = function (t, e) { + if (null != t && null != e) { + var i = "x" + t + "y" + e; + return this._coordsMap[i] + } + S(t) && (e = t.yAxisIndex, t = t.xAxisIndex); + for (var n = 0, r = this._coordsList; n < r.length; n++) if (r[n].getAxis("x").index === t || r[n].getAxis("y").index === e) return r[n] + }, Hb.getCartesians = function () { + return this._coordsList.slice() + }, Hb.convertToPixel = function (t, e, i) { + var n = this._findConvertTarget(t, e); + return n.cartesian ? n.cartesian.dataToPoint(i) : n.axis ? n.axis.toGlobalCoord(n.axis.dataToCoord(i)) : null + }, Hb.convertFromPixel = function (t, e, i) { + var n = this._findConvertTarget(t, e); + return n.cartesian ? n.cartesian.pointToData(i) : n.axis ? n.axis.coordToData(n.axis.toLocalCoord(i)) : null + }, Hb._findConvertTarget = function (t, e) { + var i, n, r = e.seriesModel, a = e.xAxisModel || r && r.getReferringComponents("xAxis")[0], + o = e.yAxisModel || r && r.getReferringComponents("yAxis")[0], s = e.gridModel, l = this._coordsList; + if (r) i = r.coordinateSystem, h(l, i) < 0 && (i = null); else if (a && o) i = this.getCartesian(a.componentIndex, o.componentIndex); else if (a) n = this.getAxis("x", a.componentIndex); else if (o) n = this.getAxis("y", o.componentIndex); else if (s) { + var u = s.coordinateSystem; + u === this && (i = this._coordsList[0]) + } + return {cartesian: i, axis: n} + }, Hb.containPoint = function (t) { + var e = this._coordsList[0]; + return e ? e.containPoint(t) : void 0 + }, Hb._initCartesian = function (t, e) { + function i(i) { + return function (o, s) { + if (Gu(o, t, e)) { + var l = o.get("position"); + "x" === i ? "top" !== l && "bottom" !== l && (l = "bottom", n[l] && (l = "top" === l ? "bottom" : "top")) : "left" !== l && "right" !== l && (l = "left", n[l] && (l = "left" === l ? "right" : "left")), n[l] = !0; + var h = new Rb(i, ou(o), [0, 0], o.get("type"), l), u = "category" === h.type; + h.onBand = u && o.get("boundaryGap"), h.inverse = o.get("inverse"), o.axis = h, h.model = o, h.grid = this, h.index = s, this._axesList.push(h), r[i][s] = h, a[i]++ + } + } + } + + var n = {left: !1, right: !1, top: !1, bottom: !1}, r = {x: {}, y: {}}, a = {x: 0, y: 0}; + return e.eachComponent("xAxis", i("x"), this), e.eachComponent("yAxis", i("y"), this), a.x && a.y ? (this._axesMap = r, void f(r.x, function (e, i) { + f(r.y, function (n, r) { + var a = "x" + i + "y" + r, o = new Vu(a); + o.grid = this, o.model = t, this._coordsMap[a] = o, this._coordsList.push(o), o.addAxis(e), o.addAxis(n) + }, this) + }, this)) : (this._axesMap = {}, void (this._axesList = [])) + }, Hb._updateScale = function (t, e) { + function i(t, e) { + f(t.mapDimension(e.dim, !0), function (i) { + e.scale.unionExtentFromData(t, Lh(t, i)) + }) + } + + f(this._axesList, function (t) { + t.scale.setExtent(1 / 0, -1 / 0) + }), t.eachSeries(function (n) { + if (qu(n)) { + var r = ju(n, t), a = r[0], o = r[1]; + if (!Gu(a, e, t) || !Gu(o, e, t)) return; + var s = this.getCartesian(a.componentIndex, o.componentIndex), l = n.getData(), h = s.getAxis("x"), + u = s.getAxis("y"); + "list" === l.type && (i(l, h, n), i(l, u, n)) + } + }, this) + }, Hb.getTooltipAxes = function (t) { + var e = [], i = []; + return f(this.getCartesians(), function (n) { + var r = null != t && "auto" !== t ? n.getAxis(t) : n.getBaseAxis(), a = n.getOtherAxis(r); + h(e, r) < 0 && e.push(r), h(i, a) < 0 && i.push(a) + }), {baseAxes: e, otherAxes: i} + }; + var Zb = ["xAxis", "yAxis"]; + Hu.create = function (t, e) { + var i = []; + return t.eachComponent("grid", function (n, r) { + var a = new Hu(n, t, e); + a.name = "grid_" + r, a.resize(n, e, !0), n.coordinateSystem = a, i.push(a) + }), t.eachSeries(function (e) { + if (qu(e)) { + var i = ju(e, t), n = i[0], r = i[1], a = n.getCoordSysModel(), o = a.coordinateSystem; + e.coordinateSystem = o.getCartesian(n.componentIndex, r.componentIndex) + } + }), i + }, Hu.dimensions = Hu.prototype.dimensions = Vu.prototype.dimensions, Ko.register("cartesian2d", Hu); + var Xb = o_.extend({ + type: "series.__base_bar__", + getInitialData: function () { + return Oh(this.getSource(), this) + }, + getMarkerPosition: function (t) { + var e = this.coordinateSystem; + if (e) { + var i = e.dataToPoint(e.clampData(t)), n = this.getData(), r = n.getLayout("offset"), + a = n.getLayout("size"), o = e.getBaseAxis().isHorizontal() ? 0 : 1; + return i[o] += r + a / 2, i + } + return [0 / 0, 0 / 0] + }, + defaultOption: { + zlevel: 0, + z: 2, + coordinateSystem: "cartesian2d", + legendHoverLink: !0, + barMinHeight: 0, + barMinAngle: 0, + large: !1, + largeThreshold: 400, + progressive: 3e3, + progressiveChunkMode: "mod", + itemStyle: {}, + emphasis: {} + } + }); + Xb.extend({ + type: "series.bar", dependencies: ["grid", "polar"], brushSelector: "rect", getProgressive: function () { + return this.get("large") ? this.get("progressive") : !1 + }, getProgressiveThreshold: function () { + var t = this.get("progressiveThreshold"), e = this.get("largeThreshold"); + return e > t && (t = e), t + } + }); + var Yb = dm([["fill", "color"], ["stroke", "borderColor"], ["lineWidth", "borderWidth"], ["stroke", "barBorderColor"], ["lineWidth", "barBorderWidth"], ["opacity"], ["shadowBlur"], ["shadowOffsetX"], ["shadowOffsetY"], ["shadowColor"]]), + jb = { + getBarItemStyle: function (t) { + var e = Yb(this, t); + if (this.getBorderLineDash) { + var i = this.getBorderLineDash(); + i && (e.lineDash = i) + } + return e + } + }, qb = ["itemStyle", "barBorderWidth"]; + o(Wa.prototype, jb), ah({ + type: "bar", render: function (t, e, i) { + this._updateDrawMode(t); + var n = t.get("coordinateSystem"); + return ("cartesian2d" === n || "polar" === n) && (this._isLargeDraw ? this._renderLarge(t, e, i) : this._renderNormal(t, e, i)), this.group + }, incrementalPrepareRender: function (t) { + this._clear(), this._updateDrawMode(t) + }, incrementalRender: function (t, e) { + this._incrementalRenderLarge(t, e) + }, _updateDrawMode: function (t) { + var e = t.pipelineContext.large; + (null == this._isLargeDraw || e ^ this._isLargeDraw) && (this._isLargeDraw = e, this._clear()) + }, _renderNormal: function (t) { + var e, i = this.group, n = t.getData(), r = this._data, a = t.coordinateSystem, o = a.getBaseAxis(); + "cartesian2d" === a.type ? e = o.isHorizontal() : "polar" === a.type && (e = "angle" === o.dim); + var s = t.isAnimationEnabled() ? t : null; + n.diff(r).add(function (r) { + if (n.hasValue(r)) { + var o = n.getItemModel(r), l = $b[a.type](n, r, o), h = Ub[a.type](n, r, o, l, e, s); + n.setItemGraphicEl(r, h), i.add(h), tc(h, n, r, o, l, t, e, "polar" === a.type) + } + }).update(function (o, l) { + var h = r.getItemGraphicEl(l); + if (!n.hasValue(o)) return void i.remove(h); + var u = n.getItemModel(o), c = $b[a.type](n, o, u); + h ? La(h, {shape: c}, s, o) : h = Ub[a.type](n, o, u, c, e, s, !0), n.setItemGraphicEl(o, h), i.add(h), tc(h, n, o, u, c, t, e, "polar" === a.type) + }).remove(function (t) { + var e = r.getItemGraphicEl(t); + "cartesian2d" === a.type ? e && Qu(t, s, e) : e && Ju(t, s, e) + }).execute(), this._data = n + }, _renderLarge: function (t) { + this._clear(), ic(t, this.group) + }, _incrementalRenderLarge: function (t, e) { + ic(e, this.group, !0) + }, dispose: V, remove: function (t) { + this._clear(t) + }, _clear: function (t) { + var e = this.group, i = this._data; + t && t.get("animation") && i && !this._isLargeDraw ? i.eachItemGraphicEl(function (e) { + "sector" === e.type ? Ju(e.dataIndex, t, e) : Qu(e.dataIndex, t, e) + }) : e.removeAll(), this._data = null + } + }); + var Ub = { + cartesian2d: function (t, e, i, n, r, a, s) { + var l = new Dy({shape: o({}, n)}); + if (a) { + var h = l.shape, u = r ? "height" : "width", c = {}; + h[u] = 0, c[u] = n[u], Yy[s ? "updateProps" : "initProps"](l, {shape: c}, a, e) + } + return l + }, polar: function (t, e, i, n, r, a, o) { + var l = n.startAngle < n.endAngle, h = new Sy({shape: s({clockwise: l}, n)}); + if (a) { + var u = h.shape, c = r ? "r" : "endAngle", d = {}; + u[c] = r ? 0 : n.startAngle, d[c] = n[c], Yy[o ? "updateProps" : "initProps"](h, {shape: d}, a, e) + } + return h + } + }, $b = { + cartesian2d: function (t, e, i) { + var n = t.getItemLayout(e), r = ec(i, n), a = n.width > 0 ? 1 : -1, o = n.height > 0 ? 1 : -1; + return {x: n.x + a * r / 2, y: n.y + o * r / 2, width: n.width - a * r, height: n.height - o * r} + }, polar: function (t, e) { + var i = t.getItemLayout(e); + return {cx: i.cx, cy: i.cy, r0: i.r0, r: i.r, startAngle: i.startAngle, endAngle: i.endAngle} + } + }, Kb = Fr.extend({ + type: "largeBar", shape: {points: []}, buildPath: function (t, e) { + for (var i = e.points, n = this.__startPoint, r = this.__valueIdx, a = 0; a < i.length; a += 2) n[this.__valueIdx] = i[a + r], t.moveTo(n[0], n[1]), t.lineTo(i[a], i[a + 1]) + } + }), Qb = Math.PI, Jb = function (t, e) { + this.opt = e, this.axisModel = t, s(e, { + labelOffset: 0, + nameDirection: 1, + tickDirection: 1, + labelDirection: 1, + silent: !0 + }), this.group = new lv; + var i = new lv({position: e.position.slice(), rotation: e.rotation}); + i.updateTransform(), this._transform = i.transform, this._dumbGroup = i + }; + Jb.prototype = { + constructor: Jb, hasBuilder: function (t) { + return !!tS[t] + }, add: function (t) { + tS[t].call(this) + }, getGroup: function () { + return this.group + } + }; + var tS = { + axisLine: function () { + var t = this.opt, e = this.axisModel; + if (e.get("axisLine.show")) { + var i = this.axisModel.axis.getExtent(), n = this._transform, r = [i[0], 0], a = [i[1], 0]; + n && (ae(r, r, n), ae(a, a, n)); + var s = o({lineCap: "round"}, e.getModel("axisLine.lineStyle").getLineStyle()); + this.group.add(new ky(ia({ + anid: "line", + shape: {x1: r[0], y1: r[1], x2: a[0], y2: a[1]}, + style: s, + strokeContainThreshold: t.strokeContainThreshold || 5, + silent: !0, + z2: 1 + }))); + var l = e.get("axisLine.symbol"), h = e.get("axisLine.symbolSize"), + u = e.get("axisLine.symbolOffset") || 0; + if ("number" == typeof u && (u = [u, u]), null != l) { + "string" == typeof l && (l = [l, l]), ("string" == typeof h || "number" == typeof h) && (h = [h, h]); + var c = h[0], d = h[1]; + f([{rotate: t.rotation + Math.PI / 2, offset: u[0], r: 0}, { + rotate: t.rotation - Math.PI / 2, + offset: u[1], + r: Math.sqrt((r[0] - a[0]) * (r[0] - a[0]) + (r[1] - a[1]) * (r[1] - a[1])) + }], function (e, i) { + if ("none" !== l[i] && null != l[i]) { + var n = fu(l[i], -c / 2, -d / 2, c, d, s.stroke, !0), a = e.r + e.offset, + o = [r[0] + a * Math.cos(t.rotation), r[1] - a * Math.sin(t.rotation)]; + n.attr({rotation: e.rotate, position: o, silent: !0}), this.group.add(n) + } + }, this) + } + } + }, axisTickLabel: function () { + var t = this.axisModel, e = this.opt, i = cc(this, t, e), n = dc(this, t, e); + sc(t, n, i) + }, axisName: function () { + var t = this.opt, e = this.axisModel, i = A(t.axisName, e.get("name")); + if (i) { + var n, r = e.get("nameLocation"), a = t.nameDirection, s = e.getModel("nameTextStyle"), + l = e.get("nameGap") || 0, h = this.axisModel.axis.getExtent(), u = h[0] > h[1] ? -1 : 1, + c = ["start" === r ? h[0] - u * l : "end" === r ? h[1] + u * l : (h[0] + h[1]) / 2, uc(r) ? t.labelOffset + a * l : 0], + d = e.get("nameRotate"); + null != d && (d = d * Qb / 180); + var f; + uc(r) ? n = eS(t.rotation, null != d ? d : t.rotation, a) : (n = ac(t, r, d || 0, h), f = t.axisNameAvailableWidth, null != f && (f = Math.abs(f / Math.sin(n.rotation)), !isFinite(f) && (f = null))); + var p = s.getFont(), g = e.get("nameTruncate", !0) || {}, v = g.ellipsis, + m = A(t.nameTruncateMaxWidth, g.maxWidth, f), + y = null != v && null != m ? hx(i, m, p, v, {minChar: 2, placeholder: g.placeholder}) : i, + x = e.get("tooltip", !0), _ = e.mainType, w = {componentType: _, name: i, $vars: ["name"]}; + w[_ + "Index"] = e.componentIndex; + var b = new xy({ + anid: "name", + __fullText: i, + __truncatedText: y, + position: c, + rotation: n.rotation, + silent: oc(e), + z2: 1, + tooltip: x && x.show ? o({ + content: i, formatter: function () { + return i + }, formatterParams: w + }, x) : null + }); + ba(b.style, s, { + text: y, + textFont: p, + textFill: s.getTextColor() || e.get("axisLine.lineStyle.color"), + textAlign: n.textAlign, + textVerticalAlign: n.textVerticalAlign + }), e.get("triggerEvent") && (b.eventData = rc(e), b.eventData.targetType = "axisName", b.eventData.name = i), this._dumbGroup.add(b), b.updateTransform(), this.group.add(b), b.decomposeTransform() + } + } + }, eS = Jb.innerTextLayout = function (t, e, i) { + var n, r, a = io(e - t); + return no(a) ? (r = i > 0 ? "top" : "bottom", n = "center") : no(a - Qb) ? (r = i > 0 ? "bottom" : "top", n = "center") : (r = "middle", n = a > 0 && Qb > a ? i > 0 ? "right" : "left" : i > 0 ? "left" : "right"), { + rotation: a, + textAlign: n, + textVerticalAlign: r + } + }, iS = f, nS = x, rS = nh({ + type: "axis", _axisPointer: null, axisPointerClass: null, render: function (t, e, i, n) { + this.axisPointerClass && xc(t), rS.superApply(this, "render", arguments), Mc(this, t, e, i, n, !0) + }, updateAxisPointer: function (t, e, i, n) { + Mc(this, t, e, i, n, !1) + }, remove: function (t, e) { + var i = this._axisPointer; + i && i.remove(e), rS.superApply(this, "remove", arguments) + }, dispose: function (t, e) { + Ic(this, e), rS.superApply(this, "dispose", arguments) + } + }), aS = []; + rS.registerAxisPointerClass = function (t, e) { + aS[t] = e + }, rS.getAxisPointerClass = function (t) { + return t && aS[t] + }; + var oS = ["axisLine", "axisTickLabel", "axisName"], sS = ["splitArea", "splitLine"], lS = rS.extend({ + type: "cartesianAxis", axisPointerClass: "CartesianAxisPointer", render: function (t, e, i, n) { + this.group.removeAll(); + var r = this._axisGroup; + if (this._axisGroup = new lv, this.group.add(this._axisGroup), t.get("show")) { + var a = t.getCoordSysModel(), o = Tc(a, t), s = new Jb(t, o); + f(oS, s.add, s), this._axisGroup.add(s.getGroup()), f(sS, function (e) { + t.get(e + ".show") && this["_" + e](t, a) + }, this), Ba(r, this._axisGroup, t), lS.superCall(this, "render", t, e, i, n) + } + }, remove: function () { + this._splitAreaColors = null + }, _splitLine: function (t, e) { + var i = t.axis; + if (!i.scale.isBlank()) { + var n = t.getModel("splitLine"), r = n.getModel("lineStyle"), a = r.get("color"); + a = _(a) ? a : [a]; + for (var o = e.coordinateSystem.getRect(), l = i.isHorizontal(), h = 0, u = i.getTicksCoords({tickModel: n}), c = [], d = [], f = r.getLineStyle(), p = 0; p < u.length; p++) { + var g = i.toGlobalCoord(u[p].coord); + l ? (c[0] = g, c[1] = o.y, d[0] = g, d[1] = o.y + o.height) : (c[0] = o.x, c[1] = g, d[0] = o.x + o.width, d[1] = g); + var v = h++ % a.length, m = u[p].tickValue; + this._axisGroup.add(new ky(ia({ + anid: null != m ? "line_" + u[p].tickValue : null, + shape: {x1: c[0], y1: c[1], x2: d[0], y2: d[1]}, + style: s({stroke: a[v]}, f), + silent: !0 + }))) + } + } + }, _splitArea: function (t, e) { + var i = t.axis; + if (!i.scale.isBlank()) { + var n = t.getModel("splitArea"), r = n.getModel("areaStyle"), a = r.get("color"), + o = e.coordinateSystem.getRect(), l = i.getTicksCoords({tickModel: n, clamp: !0}); + if (l.length) { + var h = a.length, u = this._splitAreaColors, c = N(), d = 0; + if (u) for (var f = 0; f < l.length; f++) { + var p = u.get(l[f].tickValue); + if (null != p) { + d = (p + (h - 1) * f) % h; + break + } + } + var g = i.toGlobalCoord(l[0].coord), v = r.getAreaStyle(); + a = _(a) ? a : [a]; + for (var f = 1; f < l.length; f++) { + var m, y, x, w, b = i.toGlobalCoord(l[f].coord); + i.isHorizontal() ? (m = g, y = o.y, x = b - m, w = o.height, g = m + x) : (m = o.x, y = g, x = o.width, w = b - y, g = y + w); + var S = l[f - 1].tickValue; + null != S && c.set(S, d), this._axisGroup.add(new Dy({ + anid: null != S ? "area_" + S : null, + shape: {x: m, y: y, width: x, height: w}, + style: s({fill: a[d]}, v), + silent: !0 + })), d = (d + 1) % h + } + this._splitAreaColors = c + } + } + } + }); + lS.extend({type: "xAxis"}), lS.extend({type: "yAxis"}), nh({ + type: "grid", render: function (t) { + this.group.removeAll(), t.get("show") && this.group.add(new Dy({ + shape: t.coordinateSystem.getRect(), + style: s({fill: t.get("backgroundColor")}, t.getItemStyle()), + silent: !0, + z2: -1 + })) + } + }), Yl(function (t) { + t.xAxis && t.yAxis && !t.grid && (t.grid = {}) + }), Ql(x(Qh, "bar")), Ql($w), Jl({ + seriesType: "bar", reset: function (t) { + t.getData().setVisual("legendSymbol", "roundRect") + } + }), o_.extend({ + type: "series.line", + dependencies: ["grid", "polar"], + getInitialData: function () { + return Oh(this.getSource(), this) + }, + defaultOption: { + zlevel: 0, + z: 2, + coordinateSystem: "cartesian2d", + legendHoverLink: !0, + hoverAnimation: !0, + clipOverflow: !0, + label: {position: "top"}, + lineStyle: {width: 2, type: "solid"}, + step: !1, + smooth: !1, + smoothMonotone: null, + symbol: "emptyCircle", + symbolSize: 4, + symbolRotate: null, + showSymbol: !0, + showAllSymbol: "auto", + connectNulls: !1, + sampling: "none", + animationEasing: "linear", + progressive: 0, + hoverLayerThreshold: 1 / 0 + } + }); + var hS = Cc.prototype, uS = Cc.getSymbolSize = function (t, e) { + var i = t.getItemVisual(e, "symbolSize"); + return i instanceof Array ? i.slice() : [+i, +i] + }; + hS._createSymbol = function (t, e, i, n, r) { + this.removeAll(); + var a = e.getItemVisual(i, "color"), o = fu(t, -1, -1, 2, 2, a, r); + o.attr({z2: 100, culling: !0, scale: Ac(n)}), o.drift = Dc, this._symbolType = t, this.add(o) + }, hS.stopSymbolAnimation = function (t) { + this.childAt(0).stopAnimation(t) + }, hS.getSymbolPath = function () { + return this.childAt(0) + }, hS.getScale = function () { + return this.childAt(0).scale + }, hS.highlight = function () { + this.childAt(0).trigger("emphasis") + }, hS.downplay = function () { + this.childAt(0).trigger("normal") + }, hS.setZ = function (t, e) { + var i = this.childAt(0); + i.zlevel = t, i.z = e + }, hS.setDraggable = function (t) { + var e = this.childAt(0); + e.draggable = t, e.cursor = t ? "move" : "pointer" + }, hS.updateData = function (t, e, i) { + this.silent = !1; + var n = t.getItemVisual(e, "symbol") || "circle", r = t.hostModel, a = uS(t, e), o = n !== this._symbolType; + if (o) { + var s = t.getItemVisual(e, "symbolKeepAspect"); + this._createSymbol(n, t, e, a, s) + } else { + var l = this.childAt(0); + l.silent = !1, La(l, {scale: Ac(a)}, r, e) + } + if (this._updateCommon(t, e, a, i), o) { + var l = this.childAt(0), h = i && i.fadeIn, u = {scale: l.scale.slice()}; + h && (u.style = {opacity: l.style.opacity}), l.scale = [0, 0], h && (l.style.opacity = 0), Oa(l, u, r, e) + } + this._seriesModel = r + }; + var cS = ["itemStyle"], dS = ["emphasis", "itemStyle"], fS = ["label"], pS = ["emphasis", "label"]; + hS._updateCommon = function (t, e, i, n) { + function r(e) { + return b ? t.getName(e) : Uu(t, e) + } + + var a = this.childAt(0), s = t.hostModel, l = t.getItemVisual(e, "color"); + "image" !== a.type && a.useStyle({strokeNoScale: !0}); + var h = n && n.itemStyle, u = n && n.hoverItemStyle, c = n && n.symbolRotate, d = n && n.symbolOffset, + f = n && n.labelModel, p = n && n.hoverLabelModel, g = n && n.hoverAnimation, v = n && n.cursorStyle; + if (!n || t.hasItemOption) { + var m = n && n.itemModel ? n.itemModel : t.getItemModel(e); + h = m.getModel(cS).getItemStyle(["color"]), u = m.getModel(dS).getItemStyle(), c = m.getShallow("symbolRotate"), d = m.getShallow("symbolOffset"), f = m.getModel(fS), p = m.getModel(pS), g = m.getShallow("hoverAnimation"), v = m.getShallow("cursor") + } else u = o({}, u); + var y = a.style; + a.attr("rotation", (c || 0) * Math.PI / 180 || 0), d && a.attr("position", [Ua(d[0], i[0]), Ua(d[1], i[1])]), v && a.attr("cursor", v), a.setColor(l, n && n.symbolInnerColor), a.setStyle(h); + var x = t.getItemVisual(e, "opacity"); + null != x && (y.opacity = x); + var _ = t.getItemVisual(e, "liftZ"), w = a.__z2Origin; + null != _ ? null == w && (a.__z2Origin = a.z2, a.z2 += _) : null != w && (a.z2 = w, a.__z2Origin = null); + var b = n && n.useNameLabel; + wa(y, u, f, p, { + labelFetcher: s, + labelDataIndex: e, + defaultText: r, + isRectText: !0, + autoColor: l + }), a.off("mouseover").off("mouseout").off("emphasis").off("normal"), a.hoverStyle = u, xa(a), a.__symbolOriginalScale = Ac(i), g && s.isAnimationEnabled() && a.on("mouseover", kc).on("mouseout", Pc).on("emphasis", Lc).on("normal", Oc) + }, hS.fadeOut = function (t, e) { + var i = this.childAt(0); + this.silent = i.silent = !0, !(e && e.keepLabel) && (i.style.text = null), La(i, { + style: {opacity: 0}, + scale: [0, 0] + }, this._seriesModel, this.dataIndex, t) + }, u(Cc, lv); + var gS = zc.prototype; + gS.updateData = function (t, e) { + e = Rc(e); + var i = this.group, n = t.hostModel, r = this._data, a = this._symbolCtor, o = Bc(t); + r || i.removeAll(), t.diff(r).add(function (n) { + var r = t.getItemLayout(n); + if (Ec(t, r, n, e)) { + var s = new a(t, n, o); + s.attr("position", r), t.setItemGraphicEl(n, s), i.add(s) + } + }).update(function (s, l) { + var h = r.getItemGraphicEl(l), u = t.getItemLayout(s); + return Ec(t, u, s, e) ? (h ? (h.updateData(t, s, o), La(h, {position: u}, n)) : (h = new a(t, s), h.attr("position", u)), i.add(h), void t.setItemGraphicEl(s, h)) : void i.remove(h) + }).remove(function (t) { + var e = r.getItemGraphicEl(t); + e && e.fadeOut(function () { + i.remove(e) + }) + }).execute(), this._data = t + }, gS.isPersistent = function () { + return !0 + }, gS.updateLayout = function () { + var t = this._data; + t && t.eachItemGraphicEl(function (e, i) { + var n = t.getItemLayout(i); + e.attr("position", n) + }) + }, gS.incrementalPrepareUpdate = function (t) { + this._seriesScope = Bc(t), this._data = null, this.group.removeAll() + }, gS.incrementalUpdate = function (t, e, i) { + function n(t) { + t.isGroup || (t.incremental = t.useHoverLayer = !0) + } + + i = Rc(i); + for (var r = t.start; r < t.end; r++) { + var a = e.getItemLayout(r); + if (Ec(e, a, r, i)) { + var o = new this._symbolCtor(e, r, this._seriesScope); + o.traverse(n), o.attr("position", a), this.group.add(o), e.setItemGraphicEl(r, o) + } + } + }, gS.remove = function (t) { + var e = this.group, i = this._data; + i && t ? i.eachItemGraphicEl(function (t) { + t.fadeOut(function () { + e.remove(t) + }) + }) : e.removeAll() + }; + var vS = function (t, e, i, n, r, a, o, s) { + for (var l = Wc(t, e), h = [], u = [], c = [], d = [], f = [], p = [], g = [], v = Nc(r, e, o), m = Nc(a, t, s), y = 0; y < l.length; y++) { + var x = l[y], _ = !0; + switch (x.cmd) { + case"=": + var w = t.getItemLayout(x.idx), b = e.getItemLayout(x.idx1); + (isNaN(w[0]) || isNaN(w[1])) && (w = b.slice()), h.push(w), u.push(b), c.push(i[x.idx]), d.push(n[x.idx1]), g.push(e.getRawIndex(x.idx1)); + break; + case"+": + var S = x.idx; + h.push(r.dataToPoint([e.get(v.dataDimsForPoint[0], S), e.get(v.dataDimsForPoint[1], S)])), u.push(e.getItemLayout(S).slice()), c.push(Vc(v, r, e, S)), d.push(n[S]), g.push(e.getRawIndex(S)); + break; + case"-": + var S = x.idx, M = t.getRawIndex(S); + M !== S ? (h.push(t.getItemLayout(S)), u.push(a.dataToPoint([t.get(m.dataDimsForPoint[0], S), t.get(m.dataDimsForPoint[1], S)])), c.push(i[S]), d.push(Vc(m, a, t, S)), g.push(M)) : _ = !1 + } + _ && (f.push(x), p.push(p.length)) + } + p.sort(function (t, e) { + return g[t] - g[e] + }); + for (var I = [], T = [], C = [], A = [], D = [], y = 0; y < p.length; y++) { + var S = p[y]; + I[y] = h[S], T[y] = u[S], C[y] = c[S], A[y] = d[S], D[y] = f[S] + } + return {current: I, next: T, stackedOnCurrent: C, stackedOnNext: A, status: D} + }, mS = oe, yS = se, xS = Y, _S = G, wS = [], bS = [], SS = [], MS = Fr.extend({ + type: "ec-polyline", + shape: {points: [], smooth: 0, smoothConstraint: !0, smoothMonotone: null, connectNulls: !1}, + style: {fill: null, stroke: "#000"}, + brush: by(Fr.prototype.brush), + buildPath: function (t, e) { + var i = e.points, n = 0, r = i.length, a = Yc(i, e.smoothConstraint); + if (e.connectNulls) { + for (; r > 0 && Gc(i[r - 1]); r--) ; + for (; r > n && Gc(i[n]); n++) ; + } + for (; r > n;) n += Hc(t, i, n, r, r, 1, a.min, a.max, e.smooth, e.smoothMonotone, e.connectNulls) + 1 + } + }), IS = Fr.extend({ + type: "ec-polygon", + shape: { + points: [], + stackedOnPoints: [], + smooth: 0, + stackedOnSmooth: 0, + smoothConstraint: !0, + smoothMonotone: null, + connectNulls: !1 + }, + brush: by(Fr.prototype.brush), + buildPath: function (t, e) { + var i = e.points, n = e.stackedOnPoints, r = 0, a = i.length, o = e.smoothMonotone, + s = Yc(i, e.smoothConstraint), l = Yc(n, e.smoothConstraint); + if (e.connectNulls) { + for (; a > 0 && Gc(i[a - 1]); a--) ; + for (; a > r && Gc(i[r]); r++) ; + } + for (; a > r;) { + var h = Hc(t, i, r, a, a, 1, s.min, s.max, e.smooth, o, e.connectNulls); + Hc(t, n, r + h - 1, h, a, -1, l.min, l.max, e.stackedOnSmooth, o, e.connectNulls), r += h + 1, t.closePath() + } + } + }); + Bs.extend({ + type: "line", init: function () { + var t = new lv, e = new zc; + this.group.add(e.group), this._symbolDraw = e, this._lineGroup = t + }, render: function (t, e, i) { + var n = t.coordinateSystem, r = this.group, a = t.getData(), o = t.getModel("lineStyle"), + l = t.getModel("areaStyle"), h = a.mapArray(a.getItemLayout), u = "polar" === n.type, + c = this._coordSys, d = this._symbolDraw, f = this._polyline, p = this._polygon, g = this._lineGroup, + v = t.get("animation"), m = !l.isEmpty(), y = l.get("origin"), x = Nc(n, a, y), _ = $c(n, a, x), + w = t.get("showSymbol"), b = w && !u && id(t, a, n), S = this._data; + S && S.eachItemGraphicEl(function (t, e) { + t.__temp && (r.remove(t), S.setItemGraphicEl(e, null)) + }), w || d.remove(), r.add(g); + var M = !u && t.get("step"); + f && c.type === n.type && M === this._step ? (m && !p ? p = this._newPolygon(h, _, n, v) : p && !m && (g.remove(p), p = this._polygon = null), g.setClipPath(Jc(n, !1, !1, t)), w && d.updateData(a, { + isIgnore: b, + clipShape: Jc(n, !1, !0, t) + }), a.eachItemGraphicEl(function (t) { + t.stopAnimation(!0) + }), jc(this._stackedOnPoints, _) && jc(this._points, h) || (v ? this._updateAnimation(a, _, n, i, M, y) : (M && (h = td(h, n, M), _ = td(_, n, M)), f.setShape({points: h}), p && p.setShape({ + points: h, + stackedOnPoints: _ + })))) : (w && d.updateData(a, { + isIgnore: b, + clipShape: Jc(n, !1, !0, t) + }), M && (h = td(h, n, M), _ = td(_, n, M)), f = this._newPolyline(h, n, v), m && (p = this._newPolygon(h, _, n, v)), g.setClipPath(Jc(n, !0, !1, t))); + var I = ed(a, n) || a.getVisual("color"); + f.useStyle(s(o.getLineStyle(), {fill: "none", stroke: I, lineJoin: "bevel"})); + var T = t.get("smooth"); + if (T = qc(t.get("smooth")), f.setShape({ + smooth: T, + smoothMonotone: t.get("smoothMonotone"), + connectNulls: t.get("connectNulls") + }), p) { + var C = a.getCalculationInfo("stackedOnSeries"), A = 0; + p.useStyle(s(l.getAreaStyle(), { + fill: I, + opacity: .7, + lineJoin: "bevel" + })), C && (A = qc(C.get("smooth"))), p.setShape({ + smooth: T, + stackedOnSmooth: A, + smoothMonotone: t.get("smoothMonotone"), + connectNulls: t.get("connectNulls") + }) + } + this._data = a, this._coordSys = n, this._stackedOnPoints = _, this._points = h, this._step = M, this._valueOrigin = y + }, dispose: function () { + }, highlight: function (t, e, i, n) { + var r = t.getData(), a = Yn(r, n); + if (!(a instanceof Array) && null != a && a >= 0) { + var o = r.getItemGraphicEl(a); + if (!o) { + var s = r.getItemLayout(a); + if (!s) return; + o = new Cc(r, a), o.position = s, o.setZ(t.get("zlevel"), t.get("z")), o.ignore = isNaN(s[0]) || isNaN(s[1]), o.__temp = !0, r.setItemGraphicEl(a, o), o.stopSymbolAnimation(!0), this.group.add(o) + } + o.highlight() + } else Bs.prototype.highlight.call(this, t, e, i, n) + }, downplay: function (t, e, i, n) { + var r = t.getData(), a = Yn(r, n); + if (null != a && a >= 0) { + var o = r.getItemGraphicEl(a); + o && (o.__temp ? (r.setItemGraphicEl(a, null), this.group.remove(o)) : o.downplay()) + } else Bs.prototype.downplay.call(this, t, e, i, n) + }, _newPolyline: function (t) { + var e = this._polyline; + return e && this._lineGroup.remove(e), e = new MS({ + shape: {points: t}, + silent: !0, + z2: 10 + }), this._lineGroup.add(e), this._polyline = e, e + }, _newPolygon: function (t, e) { + var i = this._polygon; + return i && this._lineGroup.remove(i), i = new IS({ + shape: {points: t, stackedOnPoints: e}, + silent: !0 + }), this._lineGroup.add(i), this._polygon = i, i + }, _updateAnimation: function (t, e, i, n, r, a) { + var o = this._polyline, s = this._polygon, l = t.hostModel, + h = vS(this._data, t, this._stackedOnPoints, e, this._coordSys, i, this._valueOrigin, a), u = h.current, + c = h.stackedOnCurrent, d = h.next, f = h.stackedOnNext; + r && (u = td(h.current, i, r), c = td(h.stackedOnCurrent, i, r), d = td(h.next, i, r), f = td(h.stackedOnNext, i, r)), o.shape.__points = h.current, o.shape.points = u, La(o, {shape: {points: d}}, l), s && (s.setShape({ + points: u, + stackedOnPoints: c + }), La(s, {shape: {points: d, stackedOnPoints: f}}, l)); + for (var p = [], g = h.status, v = 0; v < g.length; v++) { + var m = g[v].cmd; + if ("=" === m) { + var y = t.getItemGraphicEl(g[v].idx1); + y && p.push({el: y, ptIdx: v}) + } + } + o.animators && o.animators.length && o.animators[0].during(function () { + for (var t = 0; t < p.length; t++) { + var e = p[t].el; + e.attr("position", o.shape.__points[p[t].ptIdx]) + } + }) + }, remove: function () { + var t = this.group, e = this._data; + this._lineGroup.removeAll(), this._symbolDraw.remove(!0), e && e.eachItemGraphicEl(function (i, n) { + i.__temp && (t.remove(i), e.setItemGraphicEl(n, null)) + }), this._polyline = this._polygon = this._coordSys = this._points = this._stackedOnPoints = this._data = null + } + }); + var TS = function (t, e, i) { + return { + seriesType: t, performRawSeries: !0, reset: function (t, n) { + function r(e, i) { + if ("function" == typeof s) { + var n = t.getRawValue(i), r = t.getDataParams(i); + e.setItemVisual(i, "symbolSize", s(n, r)) + } + if (e.hasItemOption) { + var a = e.getItemModel(i), o = a.getShallow("symbol", !0), l = a.getShallow("symbolSize", !0), + h = a.getShallow("symbolKeepAspect", !0); + null != o && e.setItemVisual(i, "symbol", o), null != l && e.setItemVisual(i, "symbolSize", l), null != h && e.setItemVisual(i, "symbolKeepAspect", h) + } + } + + var a = t.getData(), o = t.get("symbol") || e, s = t.get("symbolSize"), l = t.get("symbolKeepAspect"); + if (a.setVisual({ + legendSymbol: i || o, + symbol: o, + symbolSize: s, + symbolKeepAspect: l + }), !n.isSeriesFiltered(t)) { + var h = "function" == typeof s; + return {dataEach: a.hasItemOption || h ? r : null} + } + } + } + }, CS = function (t) { + return { + seriesType: t, plan: h_(), reset: function (t) { + function e(t, e) { + for (var i = t.end - t.start, r = a && new Float32Array(i * s), l = t.start, h = 0, u = [], c = []; l < t.end; l++) { + var d; + if (1 === s) { + var f = e.get(o[0], l); + d = !isNaN(f) && n.dataToPoint(f, null, c) + } else { + var f = u[0] = e.get(o[0], l), p = u[1] = e.get(o[1], l); + d = !isNaN(f) && !isNaN(p) && n.dataToPoint(u, null, c) + } + a ? (r[h++] = d ? d[0] : 0 / 0, r[h++] = d ? d[1] : 0 / 0) : e.setItemLayout(l, d && d.slice() || [0 / 0, 0 / 0]) + } + a && e.setLayout("symbolPoints", r) + } + + var i = t.getData(), n = t.coordinateSystem, r = t.pipelineContext, a = r.large; + if (n) { + var o = p(n.dimensions, function (t) { + return i.mapDimension(t) + }).slice(0, 2), s = o.length, l = i.getCalculationInfo("stackResultDimension"); + return Ph(i, o[0]) && (o[0] = l), Ph(i, o[1]) && (o[1] = l), s && {progress: e} + } + } + } + }, AS = { + average: function (t) { + for (var e = 0, i = 0, n = 0; n < t.length; n++) isNaN(t[n]) || (e += t[n], i++); + return 0 === i ? 0 / 0 : e / i + }, sum: function (t) { + for (var e = 0, i = 0; i < t.length; i++) e += t[i] || 0; + return e + }, max: function (t) { + for (var e = -1 / 0, i = 0; i < t.length; i++) t[i] > e && (e = t[i]); + return isFinite(e) ? e : 0 / 0 + }, min: function (t) { + for (var e = 1 / 0, i = 0; i < t.length; i++) t[i] < e && (e = t[i]); + return isFinite(e) ? e : 0 / 0 + }, nearest: function (t) { + return t[0] + } + }, DS = function (t) { + return Math.round(t.length / 2) + }, kS = function (t) { + return { + seriesType: t, modifyOutputEnd: !0, reset: function (t) { + var e = t.getData(), i = t.get("sampling"), n = t.coordinateSystem; + if ("cartesian2d" === n.type && i) { + var r = n.getBaseAxis(), a = n.getOtherAxis(r), o = r.getExtent(), s = o[1] - o[0], + l = Math.round(e.count() / s); + if (l > 1) { + var h; + "string" == typeof i ? h = AS[i] : "function" == typeof i && (h = i), h && t.setData(e.downSample(e.mapDimension(a.dim), 1 / l, h, DS)) + } + } + } + } + }; + Jl(TS("line", "circle", "line")), Ql(CS("line")), jl(ow.PROCESSOR.STATISTIC, kS("line")); + var PS = function (t, e, i) { + e = _(e) && {coordDimensions: e} || o({}, e); + var n = t.getSource(), r = Vw(n, e), a = new Bw(r, t); + return a.initData(n, i), a + }, LS = { + updateSelectedMap: function (t) { + this._targetList = _(t) ? t.slice() : [], this._selectTargetMap = g(t || [], function (t, e) { + return t.set(e.name, e), t + }, N()) + }, select: function (t, e) { + var i = null != e ? this._targetList[e] : this._selectTargetMap.get(t), n = this.get("selectedMode"); + "single" === n && this._selectTargetMap.each(function (t) { + t.selected = !1 + }), i && (i.selected = !0) + }, unSelect: function (t, e) { + var i = null != e ? this._targetList[e] : this._selectTargetMap.get(t); + i && (i.selected = !1) + }, toggleSelected: function (t, e) { + var i = null != e ? this._targetList[e] : this._selectTargetMap.get(t); + return null != i ? (this[i.selected ? "unSelect" : "select"](t, e), i.selected) : void 0 + }, isSelected: function (t, e) { + var i = null != e ? this._targetList[e] : this._selectTargetMap.get(t); + return i && i.selected + } + }, OS = rh({ + type: "series.pie", + init: function (t) { + OS.superApply(this, "init", arguments), this.legendDataProvider = function () { + return this.getRawData() + }, this.updateSelectedMap(this._createSelectableList()), this._defaultLabelLine(t) + }, + mergeOption: function (t) { + OS.superCall(this, "mergeOption", t), this.updateSelectedMap(this._createSelectableList()) + }, + getInitialData: function () { + return PS(this, ["value"]) + }, + _createSelectableList: function () { + for (var t = this.getRawData(), e = t.mapDimension("value"), i = [], n = 0, r = t.count(); r > n; n++) i.push({ + name: t.getName(n), + value: t.get(e, n), + selected: Ms(t, n, "selected") + }); + return i + }, + getDataParams: function (t) { + var e = this.getData(), i = OS.superCall(this, "getDataParams", t), n = []; + return e.each(e.mapDimension("value"), function (t) { + n.push(t) + }), i.percent = eo(n, t, e.hostModel.get("percentPrecision")), i.$vars.push("percent"), i + }, + _defaultLabelLine: function (t) { + Fn(t, "labelLine", ["show"]); + var e = t.labelLine, i = t.emphasis.labelLine; + e.show = e.show && t.label.show, i.show = i.show && t.emphasis.label.show + }, + defaultOption: { + zlevel: 0, + z: 2, + legendHoverLink: !0, + hoverAnimation: !0, + center: ["50%", "50%"], + radius: [0, "75%"], + clockwise: !0, + startAngle: 90, + minAngle: 0, + selectedOffset: 10, + hoverOffset: 10, + avoidLabelOverlap: !0, + percentPrecision: 2, + stillShowZeroSum: !0, + label: {rotate: !1, show: !0, position: "outer"}, + labelLine: {show: !0, length: 15, length2: 15, smooth: !1, lineStyle: {width: 1, type: "solid"}}, + itemStyle: {borderWidth: 1}, + animationType: "expansion", + animationEasing: "cubicOut" + } + }); + c(OS, LS); + var zS = od.prototype; + zS.updateData = function (t, e, i) { + function n() { + a.stopAnimation(!0), a.animateTo({shape: {r: u.r + l.get("hoverOffset")}}, 300, "elasticOut") + } + + function r() { + a.stopAnimation(!0), a.animateTo({shape: {r: u.r}}, 300, "elasticOut") + } + + var a = this.childAt(0), l = t.hostModel, h = t.getItemModel(e), u = t.getItemLayout(e), c = o({}, u); + if (c.label = null, i) { + a.setShape(c); + var d = l.getShallow("animationType"); + "scale" === d ? (a.shape.r = u.r0, Oa(a, {shape: {r: u.r}}, l, e)) : (a.shape.endAngle = u.startAngle, La(a, {shape: {endAngle: u.endAngle}}, l, e)) + } else La(a, {shape: c}, l, e); + var f = t.getItemVisual(e, "color"); + a.useStyle(s({ + lineJoin: "bevel", + fill: f + }, h.getModel("itemStyle").getItemStyle())), a.hoverStyle = h.getModel("emphasis.itemStyle").getItemStyle(); + var p = h.getShallow("cursor"); + p && a.attr("cursor", p), ad(this, t.getItemLayout(e), l.isSelected(null, e), l.get("selectedOffset"), l.get("animation")), a.off("mouseover").off("mouseout").off("emphasis").off("normal"), h.get("hoverAnimation") && l.isAnimationEnabled() && a.on("mouseover", n).on("mouseout", r).on("emphasis", n).on("normal", r), this._updateLabel(t, e), xa(this) + }, zS._updateLabel = function (t, e) { + var i = this.childAt(1), n = this.childAt(2), r = t.hostModel, a = t.getItemModel(e), o = t.getItemLayout(e), + s = o.label, l = t.getItemVisual(e, "color"); + La(i, {shape: {points: s.linePoints || [[s.x, s.y], [s.x, s.y], [s.x, s.y]]}}, r, e), La(n, { + style: { + x: s.x, + y: s.y + } + }, r, e), n.attr({rotation: s.rotation, origin: [s.x, s.y], z2: 10}); + var h = a.getModel("label"), u = a.getModel("emphasis.label"), c = a.getModel("labelLine"), + d = a.getModel("emphasis.labelLine"), l = t.getItemVisual(e, "color"); + wa(n.style, n.hoverStyle = {}, h, u, { + labelFetcher: t.hostModel, + labelDataIndex: e, + defaultText: t.getName(e), + autoColor: l, + useInsideStyle: !!s.inside + }, { + textAlign: s.textAlign, + textVerticalAlign: s.verticalAlign, + opacity: t.getItemVisual(e, "opacity") + }), n.ignore = n.normalIgnore = !h.get("show"), n.hoverIgnore = !u.get("show"), i.ignore = i.normalIgnore = !c.get("show"), i.hoverIgnore = !d.get("show"), i.setStyle({ + stroke: l, + opacity: t.getItemVisual(e, "opacity") + }), i.setStyle(c.getModel("lineStyle").getLineStyle()), i.hoverStyle = d.getModel("lineStyle").getLineStyle(); + var f = c.get("smooth"); + f && f === !0 && (f = .4), i.setShape({smooth: f}) + }, u(od, lv); + var ES = (Bs.extend({ + type: "pie", init: function () { + var t = new lv; + this._sectorGroup = t + }, render: function (t, e, i, n) { + if (!n || n.from !== this.uid) { + var r = t.getData(), a = this._data, o = this.group, s = e.get("animation"), l = !a, + h = t.get("animationType"), u = x(rd, this.uid, t, s, i), c = t.get("selectedMode"); + if (r.diff(a).add(function (t) { + var e = new od(r, t); + l && "scale" !== h && e.eachChild(function (t) { + t.stopAnimation(!0) + }), c && e.on("click", u), r.setItemGraphicEl(t, e), o.add(e) + }).update(function (t, e) { + var i = a.getItemGraphicEl(e); + i.updateData(r, t), i.off("click"), c && i.on("click", u), o.add(i), r.setItemGraphicEl(t, i) + }).remove(function (t) { + var e = a.getItemGraphicEl(t); + o.remove(e) + }).execute(), s && l && r.count() > 0 && "scale" !== h) { + var d = r.getItemLayout(0), f = Math.max(i.getWidth(), i.getHeight()) / 2, + p = y(o.removeClipPath, o); + o.setClipPath(this._createClipPath(d.cx, d.cy, f, d.startAngle, d.clockwise, p, t)) + } else o.removeClipPath(); + this._data = r + } + }, dispose: function () { + }, _createClipPath: function (t, e, i, n, r, a, o) { + var s = new Sy({shape: {cx: t, cy: e, r0: 0, r: i, startAngle: n, endAngle: n, clockwise: r}}); + return Oa(s, {shape: {endAngle: n + (r ? 1 : -1) * Math.PI * 2}}, o, a), s + }, containPoint: function (t, e) { + var i = e.getData(), n = i.getItemLayout(0); + if (n) { + var r = t[0] - n.cx, a = t[1] - n.cy, o = Math.sqrt(r * r + a * a); + return o <= n.r && o >= n.r0 + } + } + }), function (t, e) { + f(e, function (e) { + e.update = "updateView", Ul(e, function (i, n) { + var r = {}; + return n.eachComponent({mainType: "series", subType: t, query: i}, function (t) { + t[e.method] && t[e.method](i.name, i.dataIndex); + var n = t.getData(); + n.each(function (e) { + var i = n.getName(e); + r[i] = t.isSelected(i) || !1 + }) + }), {name: i.name, selected: r} + }) + }) + }), RS = function (t) { + return { + getTargetSeries: function (e) { + var i = {}, n = N(); + return e.eachSeriesByType(t, function (t) { + t.__paletteScope = i, n.set(t.uid, t) + }), n + }, reset: function (t) { + var e = t.getRawData(), i = {}, n = t.getData(); + n.each(function (t) { + var e = n.getRawIndex(t); + i[e] = t + }), e.each(function (r) { + var a = i[r], o = null != a && n.getItemVisual(a, "color", !0); + if (o) e.setItemVisual(r, "color", o); else { + var s = e.getItemModel(r), + l = s.get("itemStyle.color") || t.getColorFromPalette(e.getName(r) || r + "", t.__paletteScope, e.count()); + e.setItemVisual(r, "color", l), null != a && n.setItemVisual(a, "color", l) + } + }) + } + } + }, BS = function (t, e, i, n) { + var r, a, o = t.getData(), s = [], l = !1; + o.each(function (i) { + var n, h, u, c, d = o.getItemLayout(i), f = o.getItemModel(i), p = f.getModel("label"), + g = p.get("position") || f.get("emphasis.label.position"), v = f.getModel("labelLine"), + m = v.get("length"), y = v.get("length2"), x = (d.startAngle + d.endAngle) / 2, _ = Math.cos(x), + w = Math.sin(x); + r = d.cx, a = d.cy; + var b = "inside" === g || "inner" === g; + if ("center" === g) n = d.cx, h = d.cy, c = "center"; else { + var S = (b ? (d.r + d.r0) / 2 * _ : d.r * _) + r, M = (b ? (d.r + d.r0) / 2 * w : d.r * w) + a; + if (n = S + 3 * _, h = M + 3 * w, !b) { + var I = S + _ * (m + e - d.r), T = M + w * (m + e - d.r), C = I + (0 > _ ? -1 : 1) * y, A = T; + n = C + (0 > _ ? -5 : 5), h = A, u = [[S, M], [I, T], [C, A]] + } + c = b ? "center" : _ > 0 ? "left" : "right" + } + var D = p.getFont(), k = p.get("rotate") ? 0 > _ ? -x + Math.PI : -x : 0, + P = t.getFormattedLabel(i, "normal") || o.getName(i), L = Ei(P, D, c, "top"); + l = !!k, d.label = { + x: n, + y: h, + position: g, + height: L.height, + len: m, + len2: y, + linePoints: u, + textAlign: c, + verticalAlign: "middle", + rotation: k, + inside: b + }, b || s.push(d.label) + }), !l && t.get("avoidLabelOverlap") && ld(s, r, a, e, i, n) + }, NS = 2 * Math.PI, FS = Math.PI / 180, VS = function (t, e, i) { + e.eachSeriesByType(t, function (t) { + var e = t.getData(), n = e.mapDimension("value"), r = t.get("center"), a = t.get("radius"); + _(a) || (a = [0, a]), _(r) || (r = [r, r]); + var o = i.getWidth(), s = i.getHeight(), l = Math.min(o, s), h = Ua(r[0], o), u = Ua(r[1], s), + c = Ua(a[0], l / 2), d = Ua(a[1], l / 2), f = -t.get("startAngle") * FS, p = t.get("minAngle") * FS, + g = 0; + e.each(n, function (t) { + !isNaN(t) && g++ + }); + var v = e.getSum(n), m = Math.PI / (v || g) * 2, y = t.get("clockwise"), x = t.get("roseType"), + w = t.get("stillShowZeroSum"), b = e.getDataExtent(n); + b[0] = 0; + var S = NS, M = 0, I = f, T = y ? 1 : -1; + if (e.each(n, function (t, i) { + var n; + if (isNaN(t)) return void e.setItemLayout(i, { + angle: 0 / 0, + startAngle: 0 / 0, + endAngle: 0 / 0, + clockwise: y, + cx: h, + cy: u, + r0: c, + r: x ? 0 / 0 : d + }); + n = "area" !== x ? 0 === v && w ? m : t * m : NS / g, p > n ? (n = p, S -= p) : M += t; + var r = I + T * n; + e.setItemLayout(i, { + angle: n, + startAngle: I, + endAngle: r, + clockwise: y, + cx: h, + cy: u, + r0: c, + r: x ? qa(t, b, [c, d]) : d + }), I = r + }), NS > S && g) if (.001 >= S) { + var C = NS / g; + e.each(n, function (t, i) { + if (!isNaN(t)) { + var n = e.getItemLayout(i); + n.angle = C, n.startAngle = f + T * i * C, n.endAngle = f + T * (i + 1) * C + } + }) + } else m = S / M, I = f, e.each(n, function (t, i) { + if (!isNaN(t)) { + var n = e.getItemLayout(i), r = n.angle === p ? p : t * m; + n.startAngle = I, n.endAngle = I + T * r, I += T * r + } + }); + BS(t, d, o, s) + }) + }, WS = function (t) { + return { + seriesType: t, reset: function (t, e) { + var i = e.findComponents({mainType: "legend"}); + if (i && i.length) { + var n = t.getData(); + n.filterSelf(function (t) { + for (var e = n.getName(t), r = 0; r < i.length; r++) if (!i[r].isSelected(e)) return !1; + return !0 + }) + } + } + } + }; + ES("pie", [{type: "pieToggleSelect", event: "pieselectchanged", method: "toggleSelected"}, { + type: "pieSelect", + event: "pieselected", + method: "select" + }, { + type: "pieUnSelect", + event: "pieunselected", + method: "unSelect" + }]), Jl(RS("pie")), Ql(x(VS, "pie")), jl(WS("pie")); + var GS = function (t) { + var e = t.grid.getRect(); + return { + coordSys: {type: "cartesian2d", x: e.x, y: e.y, width: e.width, height: e.height}, + api: { + coord: function (e) { + return t.dataToPoint(e) + }, size: y(hd, t) + } + } + }, HS = function (t) { + var e = t.getBoundingRect(); + return { + coordSys: {type: "geo", x: e.x, y: e.y, width: e.width, height: e.height, zoom: t.getZoom()}, + api: { + coord: function (e) { + return t.dataToPoint(e) + }, size: y(ud, t) + } + } + }, ZS = function (t) { + var e = t.getRect(); + return { + coordSys: {type: "singleAxis", x: e.x, y: e.y, width: e.width, height: e.height}, + api: { + coord: function (e) { + return t.dataToPoint(e) + }, size: y(cd, t) + } + } + }, XS = function (t) { + var e = t.getRadiusAxis(), i = t.getAngleAxis(), n = e.getExtent(); + return n[0] > n[1] && n.reverse(), { + coordSys: {type: "polar", cx: t.cx, cy: t.cy, r: n[1], r0: n[0]}, + api: { + coord: y(function (n) { + var r = e.dataToRadius(n[0]), a = i.dataToAngle(n[1]), o = t.coordToPoint([r, a]); + return o.push(r, a * Math.PI / 180), o + }), size: y(dd, t) + } + } + }, YS = function (t) { + var e = t.getRect(), i = t.getRangeInfo(); + return { + coordSys: { + type: "calendar", + x: e.x, + y: e.y, + width: e.width, + height: e.height, + cellWidth: t.getCellWidth(), + cellHeight: t.getCellHeight(), + rangeInfo: {start: i.start, end: i.end, weeks: i.weeks, dayCount: i.allDay} + }, api: { + coord: function (e, i) { + return t.dataToPoint(e, i) + } + } + } + }, jS = ["itemStyle"], qS = ["emphasis", "itemStyle"], US = ["label"], $S = ["emphasis", "label"], KS = "e\x00\x00", + QS = {cartesian2d: GS, geo: HS, singleAxis: ZS, polar: XS, calendar: YS}; + o_.extend({ + type: "series.custom", + dependencies: ["grid", "polar", "geo", "singleAxis", "calendar"], + defaultOption: {coordinateSystem: "cartesian2d", zlevel: 0, z: 2, legendHoverLink: !0, useTransform: !0}, + getInitialData: function () { + return Oh(this.getSource(), this) + }, + getDataParams: function (t, e, i) { + var n = o_.prototype.getDataParams.apply(this, arguments); + return i && (n.info = i.info), n + } + }), Bs.extend({ + type: "custom", _data: null, render: function (t, e, i, n) { + var r = this._data, a = t.getData(), o = this.group, s = vd(t, a, e, i); + a.diff(r).add(function (e) { + yd(null, e, s(e, n), t, o, a) + }).update(function (e, i) { + var l = r.getItemGraphicEl(i); + yd(l, e, s(e, n), t, o, a) + }).remove(function (t) { + var e = r.getItemGraphicEl(t); + e && o.remove(e) + }).execute(), this._data = a + }, incrementalPrepareRender: function () { + this.group.removeAll(), this._data = null + }, incrementalRender: function (t, e, i, n, r) { + function a(t) { + t.isGroup || (t.incremental = !0, t.useHoverLayer = !0) + } + + for (var o = e.getData(), s = vd(e, o, i, n), l = t.start; l < t.end; l++) { + var h = yd(null, l, s(l, r), e, this.group, o); + h.traverse(a) + } + }, dispose: V, filterForExposedEvent: function (t, e, i) { + var n = e.element; + if (null == n || i.name === n) return !0; + for (; (i = i.parent) && i !== this.group;) if (i.name === n) return !0; + return !1 + } + }), ih({ + type: "title", + layoutMode: {type: "box", ignoreSize: !0}, + defaultOption: { + zlevel: 0, + z: 6, + show: !0, + text: "", + target: "blank", + subtext: "", + subtarget: "blank", + left: 0, + top: 0, + backgroundColor: "rgba(0,0,0,0)", + borderColor: "#ccc", + borderWidth: 0, + padding: 5, + itemGap: 10, + textStyle: {fontSize: 18, fontWeight: "bolder", color: "#333"}, + subtextStyle: {color: "#aaa"} + } + }), nh({ + type: "title", render: function (t, e, i) { + if (this.group.removeAll(), t.get("show")) { + var n = this.group, r = t.getModel("textStyle"), a = t.getModel("subtextStyle"), o = t.get("textAlign"), + s = t.get("textBaseline"), l = new xy({ + style: ba({}, r, {text: t.get("text"), textFill: r.getTextColor()}, {disableBox: !0}), + z2: 10 + }), h = l.getBoundingRect(), u = t.get("subtext"), c = new xy({ + style: ba({}, a, { + text: u, + textFill: a.getTextColor(), + y: h.height + t.get("itemGap"), + textVerticalAlign: "top" + }, {disableBox: !0}), z2: 10 + }), d = t.get("link"), f = t.get("sublink"), p = t.get("triggerEvent", !0); + l.silent = !d && !p, c.silent = !f && !p, d && l.on("click", function () { + window.open(d, "_" + t.get("target")) + }), f && c.on("click", function () { + window.open(f, "_" + t.get("subtarget")) + }), l.eventData = c.eventData = p ? { + componentType: "title", + componentIndex: t.componentIndex + } : null, n.add(l), u && n.add(c); + var g = n.getBoundingRect(), v = t.getBoxLayoutParams(); + v.width = g.width, v.height = g.height; + var m = bo(v, {width: i.getWidth(), height: i.getHeight()}, t.get("padding")); + o || (o = t.get("left") || t.get("right"), "middle" === o && (o = "center"), "right" === o ? m.x += m.width : "center" === o && (m.x += m.width / 2)), s || (s = t.get("top") || t.get("bottom"), "center" === s && (s = "middle"), "bottom" === s ? m.y += m.height : "middle" === s && (m.y += m.height / 2), s = s || "top"), n.attr("position", [m.x, m.y]); + var y = {textAlign: o, textVerticalAlign: s}; + l.setStyle(y), c.setStyle(y), g = n.getBoundingRect(); + var x = m.margin, _ = t.getItemStyle(["color", "opacity"]); + _.fill = t.get("backgroundColor"); + var w = new Dy({ + shape: { + x: g.x - x[3], + y: g.y - x[0], + width: g.width + x[1] + x[3], + height: g.height + x[0] + x[2], + r: t.get("borderRadius") + }, style: _, silent: !0 + }); + na(w), n.add(w) + } + } + }); + var JS = ih({ + type: "legend.plain", + dependencies: ["series"], + layoutMode: {type: "box", ignoreSize: !0}, + init: function (t, e, i) { + this.mergeDefaultAndTheme(t, i), t.selected = t.selected || {} + }, + mergeOption: function (t) { + JS.superCall(this, "mergeOption", t) + }, + optionUpdated: function () { + this._updateData(this.ecModel); + var t = this._data; + if (t[0] && "single" === this.get("selectedMode")) { + for (var e = !1, i = 0; i < t.length; i++) { + var n = t[i].get("name"); + if (this.isSelected(n)) { + this.select(n), e = !0; + break + } + } + !e && this.select(t[0].get("name")) + } + }, + _updateData: function (t) { + var e = [], i = []; + t.eachRawSeries(function (n) { + var r = n.name; + i.push(r); + var a; + if (n.legendDataProvider) { + var o = n.legendDataProvider(), s = o.mapArray(o.getName); + t.isSeriesFiltered(n) || (i = i.concat(s)), s.length ? e = e.concat(s) : a = !0 + } else a = !0; + a && Zn(n) && e.push(n.name) + }), this._availableNames = i; + var n = this.get("data") || e, r = p(n, function (t) { + return ("string" == typeof t || "number" == typeof t) && (t = {name: t}), new Wa(t, this, this.ecModel) + }, this); + this._data = r + }, + getData: function () { + return this._data + }, + select: function (t) { + var e = this.option.selected, i = this.get("selectedMode"); + if ("single" === i) { + var n = this._data; + f(n, function (t) { + e[t.get("name")] = !1 + }) + } + e[t] = !0 + }, + unSelect: function (t) { + "single" !== this.get("selectedMode") && (this.option.selected[t] = !1) + }, + toggleSelected: function (t) { + var e = this.option.selected; + e.hasOwnProperty(t) || (e[t] = !0), this[e[t] ? "unSelect" : "select"](t) + }, + isSelected: function (t) { + var e = this.option.selected; + return !(e.hasOwnProperty(t) && !e[t]) && h(this._availableNames, t) >= 0 + }, + defaultOption: { + zlevel: 0, + z: 4, + show: !0, + orient: "horizontal", + left: "center", + top: 0, + align: "auto", + backgroundColor: "rgba(0,0,0,0)", + borderColor: "#ccc", + borderRadius: 0, + borderWidth: 0, + padding: 5, + itemGap: 10, + itemWidth: 25, + itemHeight: 14, + inactiveColor: "#ccc", + textStyle: {color: "#333"}, + selectedMode: !0, + tooltip: {show: !1} + } + }); + Ul("legendToggleSelect", "legendselectchanged", x(Ad, "toggleSelected")), Ul("legendSelect", "legendselected", x(Ad, "select")), Ul("legendUnSelect", "legendunselected", x(Ad, "unSelect")); + var tM = x, eM = f, iM = lv, nM = nh({ + type: "legend.plain", newlineDisabled: !1, init: function () { + this.group.add(this._contentGroup = new iM), this._backgroundEl + }, getContentGroup: function () { + return this._contentGroup + }, render: function (t, e, i) { + if (this.resetInner(), t.get("show", !0)) { + var n = t.get("align"); + n && "auto" !== n || (n = "right" === t.get("left") && "vertical" === t.get("orient") ? "right" : "left"), this.renderInner(n, t, e, i); + var r = t.getBoxLayoutParams(), a = {width: i.getWidth(), height: i.getHeight()}, o = t.get("padding"), + l = bo(r, a, o), h = this.layoutInner(t, n, l), + u = bo(s({width: h.width, height: h.height}, r), a, o); + this.group.attr("position", [u.x - h.x, u.y - h.y]), this.group.add(this._backgroundEl = Dd(h, t)) + } + }, resetInner: function () { + this.getContentGroup().removeAll(), this._backgroundEl && this.group.remove(this._backgroundEl) + }, renderInner: function (t, e, i, n) { + var r = this.getContentGroup(), a = N(), o = e.get("selectedMode"), s = []; + i.eachRawSeries(function (t) { + !t.get("legendHoverLink") && s.push(t.id) + }), eM(e.getData(), function (l, h) { + var u = l.get("name"); + if (!this.newlineDisabled && ("" === u || "\n" === u)) return void r.add(new iM({newline: !0})); + var c = i.getSeriesByName(u)[0]; + if (!a.get(u)) if (c) { + var d = c.getData(), f = d.getVisual("color"); + "function" == typeof f && (f = f(c.getDataParams(0))); + var p = d.getVisual("legendSymbol") || "roundRect", g = d.getVisual("symbol"), + v = this._createItem(u, h, l, e, p, g, t, f, o); + v.on("click", tM(kd, u, n)).on("mouseover", tM(Pd, c.name, null, n, s)).on("mouseout", tM(Ld, c.name, null, n, s)), a.set(u, !0) + } else i.eachRawSeries(function (i) { + if (!a.get(u) && i.legendDataProvider) { + var r = i.legendDataProvider(), c = r.indexOfName(u); + if (0 > c) return; + var d = r.getItemVisual(c, "color"), f = "roundRect", + p = this._createItem(u, h, l, e, f, null, t, d, o); + p.on("click", tM(kd, u, n)).on("mouseover", tM(Pd, null, u, n, s)).on("mouseout", tM(Ld, null, u, n, s)), a.set(u, !0) + } + }, this) + }, this) + }, _createItem: function (t, e, i, n, r, a, s, l, h) { + var u = n.get("itemWidth"), c = n.get("itemHeight"), d = n.get("inactiveColor"), + f = n.get("symbolKeepAspect"), p = n.isSelected(t), g = new iM, v = i.getModel("textStyle"), + m = i.get("icon"), y = i.getModel("tooltip"), x = y.parentModel; + if (r = m || r, g.add(fu(r, 0, 0, u, c, p ? l : d, null == f ? !0 : f)), !m && a && (a !== r || "none" === a)) { + var _ = .8 * c; + "none" === a && (a = "circle"), g.add(fu(a, (u - _) / 2, (c - _) / 2, _, _, p ? l : d, null == f ? !0 : f)) + } + var w = "left" === s ? u + 5 : -5, b = s, S = n.get("formatter"), M = t; + "string" == typeof S && S ? M = S.replace("{name}", null != t ? t : "") : "function" == typeof S && (M = S(t)), g.add(new xy({ + style: ba({}, v, { + text: M, + x: w, + y: c / 2, + textFill: p ? v.getTextColor() : d, + textAlign: b, + textVerticalAlign: "middle" + }) + })); + var I = new Dy({ + shape: g.getBoundingRect(), + invisible: !0, + tooltip: y.get("show") ? o({ + content: t, + formatter: x.get("formatter", !0) || function () { + return t + }, + formatterParams: {componentType: "legend", legendIndex: n.componentIndex, name: t, $vars: ["name"]} + }, y.option) : null + }); + return g.add(I), g.eachChild(function (t) { + t.silent = !0 + }), I.silent = !h, this.getContentGroup().add(g), xa(g), g.__legendDataIndex = e, g + }, layoutInner: function (t, e, i) { + var n = this.getContentGroup(); + gx(t.get("orient"), n, t.get("itemGap"), i.width, i.height); + var r = n.getBoundingRect(); + return n.attr("position", [-r.x, -r.y]), this.group.getBoundingRect() + } + }), rM = function (t) { + var e = t.findComponents({mainType: "legend"}); + e && e.length && t.filterSeries(function (t) { + for (var i = 0; i < e.length; i++) if (!e[i].isSelected(t.name)) return !1; + return !0 + }) + }; + jl(rM), yx.registerSubTypeDefaulter("legend", function () { + return "plain" + }); + var aM = JS.extend({ + type: "legend.scroll", + setScrollDataIndex: function (t) { + this.option.scrollDataIndex = t + }, + defaultOption: { + scrollDataIndex: 0, + pageButtonItemGap: 5, + pageButtonGap: null, + pageButtonPosition: "end", + pageFormatter: "{current}/{total}", + pageIcons: { + horizontal: ["M0,0L12,-10L12,10z", "M0,0L-12,-10L-12,10z"], + vertical: ["M0,0L20,0L10,-20z", "M0,0L20,0L10,20z"] + }, + pageIconColor: "#2f4554", + pageIconInactiveColor: "#aaa", + pageIconSize: 15, + pageTextStyle: {color: "#333"}, + animationDurationUpdate: 800 + }, + init: function (t, e, i, n) { + var r = Mo(t); + aM.superCall(this, "init", t, e, i, n), Od(this, t, r) + }, + mergeOption: function (t, e) { + aM.superCall(this, "mergeOption", t, e), Od(this, this.option, t) + }, + getOrient: function () { + return "vertical" === this.get("orient") ? {index: 1, name: "vertical"} : {index: 0, name: "horizontal"} + } + }), oM = lv, sM = ["width", "height"], lM = ["x", "y"], hM = nM.extend({ + type: "legend.scroll", newlineDisabled: !0, init: function () { + hM.superCall(this, "init"), this._currentIndex = 0, this.group.add(this._containerGroup = new oM), this._containerGroup.add(this.getContentGroup()), this.group.add(this._controllerGroup = new oM), this._showController + }, resetInner: function () { + hM.superCall(this, "resetInner"), this._controllerGroup.removeAll(), this._containerGroup.removeClipPath(), this._containerGroup.__rectSize = null + }, renderInner: function (t, e, i, n) { + function r(t, i) { + var r = t + "DataIndex", + l = Va(e.get("pageIcons", !0)[e.getOrient().name][i], {onclick: y(a._pageGo, a, r, e, n)}, { + x: -s[0] / 2, + y: -s[1] / 2, + width: s[0], + height: s[1] + }); + l.name = t, o.add(l) + } + + var a = this; + hM.superCall(this, "renderInner", t, e, i, n); + var o = this._controllerGroup, s = e.get("pageIconSize", !0); + _(s) || (s = [s, s]), r("pagePrev", 0); + var l = e.getModel("pageTextStyle"); + o.add(new xy({ + name: "pageText", + style: { + textFill: l.getTextColor(), + font: l.getFont(), + textVerticalAlign: "middle", + textAlign: "center" + }, + silent: !0 + })), r("pageNext", 1) + }, layoutInner: function (t, e, i) { + var n = this.getContentGroup(), r = this._containerGroup, a = this._controllerGroup, + o = t.getOrient().index, s = sM[o], l = sM[1 - o], h = lM[1 - o]; + gx(t.get("orient"), n, t.get("itemGap"), o ? i.width : null, o ? null : i.height), gx("horizontal", a, t.get("pageButtonItemGap", !0)); + var u = n.getBoundingRect(), c = a.getBoundingRect(), d = this._showController = u[s] > i[s], + f = [-u.x, -u.y]; + f[o] = n.position[o]; + var p = [0, 0], g = [-c.x, -c.y], v = D(t.get("pageButtonGap", !0), t.get("itemGap", !0)); + if (d) { + var m = t.get("pageButtonPosition", !0); + "end" === m ? g[o] += i[s] - c[s] : p[o] += c[s] + v + } + g[1 - o] += u[l] / 2 - c[l] / 2, n.attr("position", f), r.attr("position", p), a.attr("position", g); + var y = this.group.getBoundingRect(), y = {x: 0, y: 0}; + if (y[s] = d ? i[s] : u[s], y[l] = Math.max(u[l], c[l]), y[h] = Math.min(0, c[h] + g[1 - o]), r.__rectSize = i[s], d) { + var x = {x: 0, y: 0}; + x[s] = Math.max(i[s] - c[s] - v, 0), x[l] = y[l], r.setClipPath(new Dy({shape: x})), r.__rectSize = x[s] + } else a.eachChild(function (t) { + t.attr({invisible: !0, silent: !0}) + }); + var _ = this._getPageInfo(t); + return null != _.pageIndex && La(n, {position: _.contentPosition}, d ? t : !1), this._updatePageInfoView(t, _), y + }, _pageGo: function (t, e, i) { + var n = this._getPageInfo(e)[t]; + null != n && i.dispatchAction({type: "legendScroll", scrollDataIndex: n, legendId: e.id}) + }, _updatePageInfoView: function (t, e) { + var i = this._controllerGroup; + f(["pagePrev", "pageNext"], function (n) { + var r = null != e[n + "DataIndex"], a = i.childOfName(n); + a && (a.setStyle("fill", r ? t.get("pageIconColor", !0) : t.get("pageIconInactiveColor", !0)), a.cursor = r ? "pointer" : "default") + }); + var n = i.childOfName("pageText"), r = t.get("pageFormatter"), a = e.pageIndex, o = null != a ? a + 1 : 0, + s = e.pageCount; + n && r && n.setStyle("text", b(r) ? r.replace("{current}", o).replace("{total}", s) : r({ + current: o, + total: s + })) + }, _getPageInfo: function (t) { + function e(t) { + var e = t.getBoundingRect().clone(); + return e[f] += t.position[u], e + } + + var i, n, r, a, o = t.get("scrollDataIndex", !0), s = this.getContentGroup(), l = s.getBoundingRect(), + h = this._containerGroup.__rectSize, u = t.getOrient().index, c = sM[u], d = sM[1 - u], f = lM[u], + p = s.position.slice(); + this._showController ? s.eachChild(function (t) { + t.__legendDataIndex === o && (a = t) + }) : a = s.childAt(0); + var g = h ? Math.ceil(l[c] / h) : 0; + if (a) { + var v = a.getBoundingRect(), m = a.position[u] + v[f]; + p[u] = -m - l[f], i = Math.floor(g * (m + v[f] + h / 2) / l[c]), i = l[c] && g ? Math.max(0, Math.min(g - 1, i)) : -1; + var y = {x: 0, y: 0}; + y[c] = h, y[d] = l[d], y[f] = -p[u] - l[f]; + var x, _ = s.children(); + if (s.eachChild(function (t, i) { + var n = e(t); + n.intersect(y) && (null == x && (x = i), r = t.__legendDataIndex), i === _.length - 1 && n[f] + n[c] <= y[f] + y[c] && (r = null) + }), null != x) { + var w = _[x], b = e(w); + if (y[f] = b[f] + b[c] - y[c], 0 >= x && b[f] >= y[f]) n = null; else { + for (; x > 0 && e(_[x - 1]).intersect(y);) x--; + n = _[x].__legendDataIndex + } + } + } + return {contentPosition: p, pageIndex: i, pageCount: g, pagePrevDataIndex: n, pageNextDataIndex: r} + } + }); + Ul("legendScroll", "legendscroll", function (t, e) { + var i = t.scrollDataIndex; + null != i && e.eachComponent({mainType: "legend", subType: "scroll", query: t}, function (t) { + t.setScrollDataIndex(i) + }) + }); + var uM = function (t, e) { + var i, n = [], r = t.seriesIndex; + if (null == r || !(i = e.getSeriesByIndex(r))) return {point: []}; + var a = i.getData(), o = Yn(a, t); + if (null == o || 0 > o || _(o)) return {point: []}; + var s = a.getItemGraphicEl(o), l = i.coordinateSystem; + if (i.getTooltipPosition) n = i.getTooltipPosition(o) || []; else if (l && l.dataToPoint) n = l.dataToPoint(a.getValues(p(l.dimensions, function (t) { + return a.mapDimension(t) + }), o, !0)) || []; else if (s) { + var h = s.getBoundingRect().clone(); + h.applyTransform(s.transform), n = [h.x + h.width / 2, h.y + h.height / 2] + } + return {point: n, el: s} + }, cM = f, dM = x, fM = jn(), pM = function (t, e, i) { + var n = t.currTrigger, r = [t.x, t.y], a = t, o = t.dispatchAction || y(i.dispatchAction, i), + s = e.getComponent("axisPointer").coordSysAxesInfo; + if (s) { + Hd(r) && (r = uM({seriesIndex: a.seriesIndex, dataIndex: a.dataIndex}, e).point); + var l = Hd(r), h = a.axesInfo, u = s.axesInfo, c = "leave" === n || Hd(r), d = {}, f = {}, + p = {list: [], map: {}}, g = {showPointer: dM(Rd, f), showTooltip: dM(Bd, p)}; + cM(s.coordSysMap, function (t, e) { + var i = l || t.containPoint(r); + cM(s.coordSysAxesInfo[e], function (t) { + var e = t.axis, n = Wd(h, t); + if (!c && i && (!h || n)) { + var a = n && n.value; + null != a || l || (a = e.pointToData(r)), null != a && zd(t, a, g, !1, d) + } + }) + }); + var v = {}; + return cM(u, function (t, e) { + var i = t.linkGroup; + i && !f[e] && cM(i.axesInfo, function (e, n) { + var r = f[n]; + if (e !== t && r) { + var a = r.value; + i.mapper && (a = t.axis.scale.parse(i.mapper(a, Gd(e), Gd(t)))), v[t.key] = a + } + }) + }), cM(v, function (t, e) { + zd(u[e], t, g, !0, d) + }), Nd(f, u, d), Fd(p, r, t, o), Vd(u, o, i), d + } + }, gM = (ih({ + type: "axisPointer", + coordSysAxesInfo: null, + defaultOption: { + show: "auto", + triggerOn: null, + zlevel: 0, + z: 50, + type: "line", + snap: !1, + triggerTooltip: !0, + value: null, + status: null, + link: [], + animation: null, + animationDurationUpdate: 200, + lineStyle: {color: "#aaa", width: 1, type: "solid"}, + shadowStyle: {color: "rgba(150,150,150,0.3)"}, + label: { + show: !0, + formatter: null, + precision: "auto", + margin: 3, + color: "#fff", + padding: [5, 7, 5, 7], + backgroundColor: "auto", + borderColor: null, + borderWidth: 0, + shadowBlur: 3, + shadowColor: "#aaa" + }, + handle: { + show: !1, + icon: "M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4h1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7v-1.2h6.6z M13.3,22H6.7v-1.2h6.6z M13.3,19.6H6.7v-1.2h6.6z", + size: 45, + margin: 50, + color: "#333", + shadowBlur: 3, + shadowColor: "#aaa", + shadowOffsetX: 0, + shadowOffsetY: 2, + throttle: 40 + } + } + }), jn()), vM = f, mM = nh({ + type: "axisPointer", render: function (t, e, i) { + var n = e.getComponent("tooltip"), r = t.get("triggerOn") || n && n.get("triggerOn") || "mousemove|click"; + Zd("axisPointer", i, function (t, e, i) { + "none" !== r && ("leave" === t || r.indexOf(t) >= 0) && i({ + type: "updateAxisPointer", + currTrigger: t, + x: e && e.offsetX, + y: e && e.offsetY + }) + }) + }, remove: function (t, e) { + $d(e.getZr(), "axisPointer"), mM.superApply(this._model, "remove", arguments) + }, dispose: function (t, e) { + $d("axisPointer", e), mM.superApply(this._model, "dispose", arguments) + } + }), yM = jn(), xM = n, _M = y; + Kd.prototype = { + _group: null, + _lastGraphicKey: null, + _handle: null, + _dragging: !1, + _lastValue: null, + _lastStatus: null, + _payloadInfo: null, + animationThreshold: 15, + render: function (t, e, i, n) { + var r = e.get("value"), a = e.get("status"); + if (this._axisModel = t, this._axisPointerModel = e, this._api = i, n || this._lastValue !== r || this._lastStatus !== a) { + this._lastValue = r, this._lastStatus = a; + var o = this._group, s = this._handle; + if (!a || "hide" === a) return o && o.hide(), void (s && s.hide()); + o && o.show(), s && s.show(); + var l = {}; + this.makeElOption(l, r, t, e, i); + var h = l.graphicKey; + h !== this._lastGraphicKey && this.clear(i), this._lastGraphicKey = h; + var u = this._moveAnimation = this.determineAnimation(t, e); + if (o) { + var c = x(Qd, e, u); + this.updatePointerEl(o, l, c, e), this.updateLabelEl(o, l, c, e) + } else o = this._group = new lv, this.createPointerEl(o, l, t, e), this.createLabelEl(o, l, t, e), i.getZr().add(o); + nf(o, e, !0), this._renderHandle(r) + } + }, + remove: function (t) { + this.clear(t) + }, + dispose: function (t) { + this.clear(t) + }, + determineAnimation: function (t, e) { + var i = e.get("animation"), n = t.axis, r = "category" === n.type, a = e.get("snap"); + if (!a && !r) return !1; + if ("auto" === i || null == i) { + var o = this.animationThreshold; + if (r && n.getBandWidth() > o) return !0; + if (a) { + var s = _c(t).seriesDataCount, l = n.getExtent(); + return Math.abs(l[0] - l[1]) / s > o + } + return !1 + } + return i === !0 + }, + makeElOption: function () { + }, + createPointerEl: function (t, e) { + var i = e.pointer; + if (i) { + var n = yM(t).pointerEl = new Yy[i.type](xM(e.pointer)); + t.add(n) + } + }, + createLabelEl: function (t, e, i, n) { + if (e.label) { + var r = yM(t).labelEl = new Dy(xM(e.label)); + t.add(r), tf(r, n) + } + }, + updatePointerEl: function (t, e, i) { + var n = yM(t).pointerEl; + n && (n.setStyle(e.pointer.style), i(n, {shape: e.pointer.shape})) + }, + updateLabelEl: function (t, e, i, n) { + var r = yM(t).labelEl; + r && (r.setStyle(e.label.style), i(r, {shape: e.label.shape, position: e.label.position}), tf(r, n)) + }, + _renderHandle: function (t) { + if (!this._dragging && this.updateHandleTransform) { + var e = this._axisPointerModel, i = this._api.getZr(), n = this._handle, r = e.getModel("handle"), + a = e.get("status"); + if (!r.get("show") || !a || "hide" === a) return n && i.remove(n), void (this._handle = null); + var o; + this._handle || (o = !0, n = this._handle = Va(r.get("icon"), { + cursor: "move", + draggable: !0, + onmousemove: function (t) { + Ig(t.event) + }, + onmousedown: _M(this._onHandleDragMove, this, 0, 0), + drift: _M(this._onHandleDragMove, this), + ondragend: _M(this._onHandleDragEnd, this) + }), i.add(n)), nf(n, e, !1); + var s = ["color", "borderColor", "borderWidth", "opacity", "shadowColor", "shadowBlur", "shadowOffsetX", "shadowOffsetY"]; + n.setStyle(r.getItemStyle(null, s)); + var l = r.get("size"); + _(l) || (l = [l, l]), n.attr("scale", [l[0] / 2, l[1] / 2]), Hs(this, "_doDispatchAxisPointer", r.get("throttle") || 0, "fixRate"), this._moveHandleToValue(t, o) + } + }, + _moveHandleToValue: function (t, e) { + Qd(this._axisPointerModel, !e && this._moveAnimation, this._handle, ef(this.getHandleTransform(t, this._axisModel, this._axisPointerModel))) + }, + _onHandleDragMove: function (t, e) { + var i = this._handle; + if (i) { + this._dragging = !0; + var n = this.updateHandleTransform(ef(i), [t, e], this._axisModel, this._axisPointerModel); + this._payloadInfo = n, i.stopAnimation(), i.attr(ef(n)), yM(i).lastProp = null, this._doDispatchAxisPointer() + } + }, + _doDispatchAxisPointer: function () { + var t = this._handle; + if (t) { + var e = this._payloadInfo, i = this._axisModel; + this._api.dispatchAction({ + type: "updateAxisPointer", + x: e.cursorPoint[0], + y: e.cursorPoint[1], + tooltipOption: e.tooltipOption, + axesInfo: [{axisDim: i.axis.dim, axisIndex: i.componentIndex}] + }) + } + }, + _onHandleDragEnd: function () { + this._dragging = !1; + var t = this._handle; + if (t) { + var e = this._axisPointerModel.get("value"); + this._moveHandleToValue(e), this._api.dispatchAction({type: "hideTip"}) + } + }, + getHandleTransform: null, + updateHandleTransform: null, + clear: function (t) { + this._lastValue = null, this._lastStatus = null; + var e = t.getZr(), i = this._group, n = this._handle; + e && i && (this._lastGraphicKey = null, i && e.remove(i), n && e.remove(n), this._group = null, this._handle = null, this._payloadInfo = null) + }, + doClear: function () { + }, + buildLabel: function (t, e, i) { + return i = i || 0, {x: t[i], y: t[1 - i], width: e[i], height: e[1 - i]} + } + }, Kd.prototype.constructor = Kd, er(Kd); + var wM = Kd.extend({ + makeElOption: function (t, e, i, n, r) { + var a = i.axis, o = a.grid, s = n.get("type"), l = df(o, a).getOtherAxis(a).getGlobalExtent(), + h = a.toGlobalCoord(a.dataToCoord(e, !0)); + if (s && "none" !== s) { + var u = rf(n), c = bM[s](a, h, l, u); + c.style = u, t.graphicKey = c.type, t.pointer = c + } + var d = Tc(o.model, i); + hf(e, t, d, i, n, r) + }, getHandleTransform: function (t, e, i) { + var n = Tc(e.axis.grid.model, e, {labelInside: !1}); + return n.labelMargin = i.get("handle.margin"), { + position: lf(e.axis, t, n), + rotation: n.rotation + (n.labelDirection < 0 ? Math.PI : 0) + } + }, updateHandleTransform: function (t, e, i) { + var n = i.axis, r = n.grid, a = n.getGlobalExtent(!0), o = df(r, n).getOtherAxis(n).getGlobalExtent(), + s = "x" === n.dim ? 0 : 1, l = t.position; + l[s] += e[s], l[s] = Math.min(a[1], l[s]), l[s] = Math.max(a[0], l[s]); + var h = (o[1] + o[0]) / 2, u = [h, h]; + u[s] = l[s]; + var c = [{verticalAlign: "middle"}, {align: "center"}]; + return {position: l, rotation: t.rotation, cursorPoint: u, tooltipOption: c[s]} + } + }), bM = { + line: function (t, e, i, n) { + var r = uf([e, i[0]], [e, i[1]], ff(t)); + return ia({shape: r, style: n}), {type: "Line", shape: r} + }, shadow: function (t, e, i) { + var n = Math.max(1, t.getBandWidth()), r = i[1] - i[0]; + return {type: "Rect", shape: cf([e - n / 2, i[0]], [n, r], ff(t))} + } + }; + rS.registerAxisPointerClass("CartesianAxisPointer", wM), Yl(function (t) { + if (t) { + (!t.axisPointer || 0 === t.axisPointer.length) && (t.axisPointer = {}); + var e = t.axisPointer.link; + e && !_(e) && (t.axisPointer.link = [e]) + } + }), jl(ow.PROCESSOR.STATISTIC, function (t, e) { + t.getComponent("axisPointer").coordSysAxesInfo = fc(t, e) + }), Ul({ + type: "updateAxisPointer", + event: "updateAxisPointer", + update: ":updateAxisPointer" + }, pM), ih({ + type: "tooltip", + dependencies: ["axisPointer"], + defaultOption: { + zlevel: 0, + z: 60, + show: !0, + showContent: !0, + trigger: "item", + triggerOn: "mousemove|click", + alwaysShowContent: !1, + displayMode: "single", + renderMode: "auto", + confine: !1, + showDelay: 0, + hideDelay: 100, + transitionDuration: .4, + enterable: !1, + backgroundColor: "rgba(50,50,50,0.7)", + borderColor: "#333", + borderRadius: 4, + borderWidth: 0, + padding: 5, + extraCssText: "", + axisPointer: { + type: "line", + axis: "auto", + animation: "auto", + animationDurationUpdate: 200, + animationEasingUpdate: "exponentialOut", + crossStyle: {color: "#999", width: 1, type: "dashed", textStyle: {}} + }, + textStyle: {color: "#fff", fontSize: 14} + } + }); + var SM = f, MM = fo, IM = ["", "-webkit-", "-moz-", "-o-"], + TM = "position:absolute;display:block;border-style:solid;white-space:nowrap;z-index:9999999;"; + mf.prototype = { + constructor: mf, _enterable: !0, update: function () { + var t = this._container, e = t.currentStyle || document.defaultView.getComputedStyle(t), i = t.style; + "absolute" !== i.position && "absolute" !== e.position && (i.position = "relative") + }, show: function (t) { + clearTimeout(this._hideTimeout); + var e = this.el; + e.style.cssText = TM + vf(t) + ";left:" + this._x + "px;top:" + this._y + "px;" + (t.get("extraCssText") || ""), e.style.display = e.innerHTML ? "block" : "none", e.style.pointerEvents = this._enterable ? "auto" : "none", this._show = !0 + }, setContent: function (t) { + this.el.innerHTML = null == t ? "" : t + }, setEnterable: function (t) { + this._enterable = t + }, getSize: function () { + var t = this.el; + return [t.clientWidth, t.clientHeight] + }, moveTo: function (t, e) { + var i, n = this._zr; + n && n.painter && (i = n.painter.getViewportRootOffset()) && (t += i.offsetLeft, e += i.offsetTop); + var r = this.el.style; + r.left = t + "px", r.top = e + "px", this._x = t, this._y = e + }, hide: function () { + this.el.style.display = "none", this._show = !1 + }, hideLater: function (t) { + !this._show || this._inContent && this._enterable || (t ? (this._hideDelay = t, this._show = !1, this._hideTimeout = setTimeout(y(this.hide, this), t)) : this.hide()) + }, isShow: function () { + return this._show + }, getOuterSize: function () { + var t = this.el.clientWidth, e = this.el.clientHeight; + if (document.defaultView && document.defaultView.getComputedStyle) { + var i = document.defaultView.getComputedStyle(this.el); + i && (t += parseInt(i.paddingLeft, 10) + parseInt(i.paddingRight, 10) + parseInt(i.borderLeftWidth, 10) + parseInt(i.borderRightWidth, 10), e += parseInt(i.paddingTop, 10) + parseInt(i.paddingBottom, 10) + parseInt(i.borderTopWidth, 10) + parseInt(i.borderBottomWidth, 10)) + } + return {width: t, height: e} + } + }, yf.prototype = { + constructor: yf, _enterable: !0, update: function () { + }, show: function () { + this._hideTimeout && clearTimeout(this._hideTimeout), this.el.attr("show", !0), this._show = !0 + }, setContent: function (t, e, i) { + this.el && this._zr.remove(this.el); + for (var n = {}, r = t, a = "{marker", o = "|}", s = r.indexOf(a); s >= 0;) { + var l = r.indexOf(o), h = r.substr(s + a.length, l - s - a.length); + n["marker" + h] = h.indexOf("sub") > -1 ? { + textWidth: 4, + textHeight: 4, + textBorderRadius: 2, + textBackgroundColor: e[h], + textOffset: [3, 0] + } : { + textWidth: 10, + textHeight: 10, + textBorderRadius: 5, + textBackgroundColor: e[h] + }, r = r.substr(l + 1), s = r.indexOf("{marker") + } + this.el = new xy({ + style: { + rich: n, + text: t, + textLineHeight: 20, + textBackgroundColor: i.get("backgroundColor"), + textBorderRadius: i.get("borderRadius"), + textFill: i.get("textStyle.color"), + textPadding: i.get("padding") + }, z: i.get("z") + }), this._zr.add(this.el); + var u = this; + this.el.on("mouseover", function () { + u._enterable && (clearTimeout(u._hideTimeout), u._show = !0), u._inContent = !0 + }), this.el.on("mouseout", function () { + u._enterable && u._show && u.hideLater(u._hideDelay), u._inContent = !1 + }) + }, setEnterable: function (t) { + this._enterable = t + }, getSize: function () { + var t = this.el.getBoundingRect(); + return [t.width, t.height] + }, moveTo: function (t, e) { + this.el && this.el.attr("position", [t, e]) + }, hide: function () { + this.el.hide(), this._show = !1 + }, hideLater: function (t) { + !this._show || this._inContent && this._enterable || (t ? (this._hideDelay = t, this._show = !1, this._hideTimeout = setTimeout(y(this.hide, this), t)) : this.hide()) + }, isShow: function () { + return this._show + }, getOuterSize: function () { + return this.getSize() + } + }; + var CM = y, AM = f, DM = Ua, kM = new Dy({shape: {x: -1, y: -1, width: 2, height: 2}}); + nh({ + type: "tooltip", init: function (t, e) { + if (!tg.node) { + var i = t.getComponent("tooltip"), n = i.get("renderMode"); + this._renderMode = Qn(n); + var r; + "html" === this._renderMode ? (r = new mf(e.getDom(), e), this._newLine = "
") : (r = new yf(e), this._newLine = "\n"), this._tooltipContent = r + } + }, render: function (t, e, i) { + if (!tg.node) { + this.group.removeAll(), this._tooltipModel = t, this._ecModel = e, this._api = i, this._lastDataByCoordSys = null, this._alwaysShowContent = t.get("alwaysShowContent"); + var n = this._tooltipContent; + n.update(), n.setEnterable(t.get("enterable")), this._initGlobalListener(), this._keepShow() + } + }, _initGlobalListener: function () { + var t = this._tooltipModel, e = t.get("triggerOn"); + Zd("itemTooltip", this._api, CM(function (t, i, n) { + "none" !== e && (e.indexOf(t) >= 0 ? this._tryShow(i, n) : "leave" === t && this._hide(n)) + }, this)) + }, _keepShow: function () { + var t = this._tooltipModel, e = this._ecModel, i = this._api; + if (null != this._lastX && null != this._lastY && "none" !== t.get("triggerOn")) { + var n = this; + clearTimeout(this._refreshUpdateTimeout), this._refreshUpdateTimeout = setTimeout(function () { + n.manuallyShowTip(t, e, i, {x: n._lastX, y: n._lastY}) + }) + } + }, manuallyShowTip: function (t, e, i, n) { + if (n.from !== this.uid && !tg.node) { + var r = _f(n, i); + this._ticket = ""; + var a = n.dataByCoordSys; + if (n.tooltip && null != n.x && null != n.y) { + var o = kM; + o.position = [n.x, n.y], o.update(), o.tooltip = n.tooltip, this._tryShow({ + offsetX: n.x, + offsetY: n.y, + target: o + }, r) + } else if (a) this._tryShow({ + offsetX: n.x, + offsetY: n.y, + position: n.position, + event: {}, + dataByCoordSys: n.dataByCoordSys, + tooltipOption: n.tooltipOption + }, r); else if (null != n.seriesIndex) { + if (this._manuallyAxisShowTip(t, e, i, n)) return; + var s = uM(n, e), l = s.point[0], h = s.point[1]; + null != l && null != h && this._tryShow({ + offsetX: l, + offsetY: h, + position: n.position, + target: s.el, + event: {} + }, r) + } else null != n.x && null != n.y && (i.dispatchAction({ + type: "updateAxisPointer", + x: n.x, + y: n.y + }), this._tryShow({ + offsetX: n.x, + offsetY: n.y, + position: n.position, + target: i.getZr().findHover(n.x, n.y).target, + event: {} + }, r)) + } + }, manuallyHideTip: function (t, e, i, n) { + var r = this._tooltipContent; + !this._alwaysShowContent && this._tooltipModel && r.hideLater(this._tooltipModel.get("hideDelay")), this._lastX = this._lastY = null, n.from !== this.uid && this._hide(_f(n, i)) + }, _manuallyAxisShowTip: function (t, e, i, n) { + var r = n.seriesIndex, a = n.dataIndex, o = e.getComponent("axisPointer").coordSysAxesInfo; + if (null != r && null != a && null != o) { + var s = e.getSeriesByIndex(r); + if (s) { + var l = s.getData(), t = xf([l.getItemModel(a), s, (s.coordinateSystem || {}).model, t]); + if ("axis" === t.get("trigger")) return i.dispatchAction({ + type: "updateAxisPointer", + seriesIndex: r, + dataIndex: a, + position: n.position + }), !0 + } + } + }, _tryShow: function (t, e) { + var i = t.target, n = this._tooltipModel; + if (n) { + this._lastX = t.offsetX, this._lastY = t.offsetY; + var r = t.dataByCoordSys; + r && r.length ? this._showAxisTooltip(r, t) : i && null != i.dataIndex ? (this._lastDataByCoordSys = null, this._showSeriesItemTooltip(t, i, e)) : i && i.tooltip ? (this._lastDataByCoordSys = null, this._showComponentItemTooltip(t, i, e)) : (this._lastDataByCoordSys = null, this._hide(e)) + } + }, _showOrMove: function (t, e) { + var i = t.get("showDelay"); + e = y(e, this), clearTimeout(this._showTimout), i > 0 ? this._showTimout = setTimeout(e, i) : e() + }, _showAxisTooltip: function (t, e) { + var i = this._ecModel, n = this._tooltipModel, a = [e.offsetX, e.offsetY], o = [], s = [], + l = xf([e.tooltipOption, n]), h = this._renderMode, u = this._newLine, c = {}; + AM(t, function (t) { + AM(t.dataByAxis, function (t) { + var e = i.getComponent(t.axisDim + "Axis", t.axisIndex), n = t.value, a = []; + if (e && null != n) { + var l = sf(n, e.axis, i, t.seriesDataIndices, t.valueLabelOpt); + f(t.seriesDataIndices, function (o) { + var u = i.getSeriesByIndex(o.seriesIndex), d = o.dataIndexInside, + f = u && u.getDataParams(d); + if (f.axisDim = t.axisDim, f.axisIndex = t.axisIndex, f.axisType = t.axisType, f.axisId = t.axisId, f.axisValue = hu(e.axis, n), f.axisValueLabel = l, f) { + s.push(f); + var p, g = u.formatTooltip(d, !0, null, h); + if (S(g)) { + p = g.html; + var v = g.markers; + r(c, v) + } else p = g; + a.push(p) + } + }); + var d = l; + o.push("html" !== h ? a.join(u) : (d ? po(d) + u : "") + a.join(u)) + } + }) + }, this), o.reverse(), o = o.join(this._newLine + this._newLine); + var d = e.position; + this._showOrMove(l, function () { + this._updateContentNotChangedOnAxis(t) ? this._updatePosition(l, d, a[0], a[1], this._tooltipContent, s) : this._showTooltipContent(l, o, s, Math.random(), a[0], a[1], d, void 0, c) + }) + }, _showSeriesItemTooltip: function (t, e, i) { + var n = this._ecModel, r = e.seriesIndex, a = n.getSeriesByIndex(r), o = e.dataModel || a, s = e.dataIndex, + l = e.dataType, h = o.getData(), + u = xf([h.getItemModel(s), o, a && (a.coordinateSystem || {}).model, this._tooltipModel]), + c = u.get("trigger"); + if (null == c || "item" === c) { + var d, f, p = o.getDataParams(s, l), g = o.formatTooltip(s, !1, l, this._renderMode); + S(g) ? (d = g.html, f = g.markers) : (d = g, f = null); + var v = "item_" + o.name + "_" + s; + this._showOrMove(u, function () { + this._showTooltipContent(u, d, p, v, t.offsetX, t.offsetY, t.position, t.target, f) + }), i({ + type: "showTip", + dataIndexInside: s, + dataIndex: h.getRawIndex(s), + seriesIndex: r, + from: this.uid + }) + } + }, _showComponentItemTooltip: function (t, e, i) { + var n = e.tooltip; + if ("string" == typeof n) { + var r = n; + n = {content: r, formatter: r} + } + var a = new Wa(n, this._tooltipModel, this._ecModel), o = a.get("content"), s = Math.random(); + this._showOrMove(a, function () { + this._showTooltipContent(a, o, a.get("formatterParams") || {}, s, t.offsetX, t.offsetY, t.position, e) + }), i({type: "showTip", from: this.uid}) + }, _showTooltipContent: function (t, e, i, n, r, a, o, s, l) { + if (this._ticket = "", t.get("showContent") && t.get("show")) { + var h = this._tooltipContent, u = t.get("formatter"); + o = o || t.get("position"); + var c = e; + if (u && "string" == typeof u) c = go(u, i, !0); else if ("function" == typeof u) { + var d = CM(function (e, n) { + e === this._ticket && (h.setContent(n, l, t), this._updatePosition(t, o, r, a, h, i, s)) + }, this); + this._ticket = n, c = u(i, n, d) + } + h.setContent(c, l, t), h.show(t), this._updatePosition(t, o, r, a, h, i, s) + } + }, _updatePosition: function (t, e, i, n, r, a, o) { + var s = this._api.getWidth(), l = this._api.getHeight(); + e = e || t.get("position"); + var h = r.getSize(), u = t.get("align"), c = t.get("verticalAlign"), d = o && o.getBoundingRect().clone(); + if (o && d.applyTransform(o.transform), "function" == typeof e && (e = e([i, n], a, r.el, d, { + viewSize: [s, l], + contentSize: h.slice() + })), _(e)) i = DM(e[0], s), n = DM(e[1], l); else if (S(e)) { + e.width = h[0], e.height = h[1]; + var f = bo(e, {width: s, height: l}); + i = f.x, n = f.y, u = null, c = null + } else if ("string" == typeof e && o) { + var p = Sf(e, d, h); + i = p[0], n = p[1] + } else { + var p = wf(i, n, r, s, l, u ? null : 20, c ? null : 20); + i = p[0], n = p[1] + } + if (u && (i -= Mf(u) ? h[0] / 2 : "right" === u ? h[0] : 0), c && (n -= Mf(c) ? h[1] / 2 : "bottom" === c ? h[1] : 0), t.get("confine")) { + var p = bf(i, n, r, s, l); + i = p[0], n = p[1] + } + r.moveTo(i, n) + }, _updateContentNotChangedOnAxis: function (t) { + var e = this._lastDataByCoordSys, i = !!e && e.length === t.length; + return i && AM(e, function (e, n) { + var r = e.dataByAxis || {}, a = t[n] || {}, o = a.dataByAxis || []; + i &= r.length === o.length, i && AM(r, function (t, e) { + var n = o[e] || {}, r = t.seriesDataIndices || [], a = n.seriesDataIndices || []; + i &= t.value === n.value && t.axisType === n.axisType && t.axisId === n.axisId && r.length === a.length, i && AM(r, function (t, e) { + var n = a[e]; + i &= t.seriesIndex === n.seriesIndex && t.dataIndex === n.dataIndex + }) + }) + }), this._lastDataByCoordSys = t, !!i + }, _hide: function (t) { + this._lastDataByCoordSys = null, t({type: "hideTip", from: this.uid}) + }, dispose: function (t, e) { + tg.node || (this._tooltipContent.hide(), $d("itemTooltip", e)) + } + }), Ul({type: "showTip", event: "showTip", update: "tooltip:manuallyShowTip"}, function () { + }), Ul({type: "hideTip", event: "hideTip", update: "tooltip:manuallyHideTip"}, function () { + }); + var PM = co, LM = po, OM = ih({ + type: "marker", dependencies: ["series", "grid", "polar", "geo"], init: function (t, e, i, n) { + this.mergeDefaultAndTheme(t, i), this.mergeOption(t, i, n.createdBySelf, !0) + }, isAnimationEnabled: function () { + if (tg.node) return !1; + var t = this.__hostSeries; + return this.getShallow("animation") && t && t.isAnimationEnabled() + }, mergeOption: function (t, e, i, n) { + var r = this.constructor, a = this.mainType + "Model"; + i || e.eachSeries(function (t) { + var i = t.get(this.mainType, !0), s = t[a]; + return i && i.data ? (s ? s.mergeOption(i, e, !0) : (n && If(i), f(i.data, function (t) { + t instanceof Array ? (If(t[0]), If(t[1])) : If(t) + }), s = new r(i, this, e), o(s, { + mainType: this.mainType, + seriesIndex: t.seriesIndex, + name: t.name, + createdBySelf: !0 + }), s.__hostSeries = t), void (t[a] = s)) : void (t[a] = null) + }, this) + }, formatTooltip: function (t) { + var e = this.getData(), i = this.getRawValue(t), n = _(i) ? p(i, PM).join(", ") : PM(i), r = e.getName(t), + a = LM(this.name); + return (null != i || r) && (a += "
"), r && (a += LM(r), null != i && (a += " : ")), null != i && (a += LM(n)), a + }, getData: function () { + return this._data + }, setData: function (t) { + this._data = t + } + }); + c(OM, i_), OM.extend({ + type: "markPoint", + defaultOption: { + zlevel: 0, + z: 5, + symbol: "pin", + symbolSize: 50, + tooltip: {trigger: "item"}, + label: {show: !0, position: "inside"}, + itemStyle: {borderWidth: 2}, + emphasis: {label: {show: !0}} + } + }); + var zM = h, EM = x, RM = {min: EM(Af, "min"), max: EM(Af, "max"), average: EM(Af, "average")}, BM = nh({ + type: "marker", init: function () { + this.markerGroupMap = N() + }, render: function (t, e, i) { + var n = this.markerGroupMap; + n.each(function (t) { + t.__keep = !1 + }); + var r = this.type + "Model"; + e.eachSeries(function (t) { + var n = t[r]; + n && this.renderSeries(t, n, e, i) + }, this), n.each(function (t) { + !t.__keep && this.group.remove(t.group) + }, this) + }, renderSeries: function () { + } + }); + BM.extend({ + type: "markPoint", updateTransform: function (t, e, i) { + e.eachSeries(function (t) { + var e = t.markPointModel; + e && (Ef(e.getData(), t, i), this.markerGroupMap.get(t.id).updateLayout(e)) + }, this) + }, renderSeries: function (t, e, i, n) { + var r = t.coordinateSystem, a = t.id, o = t.getData(), s = this.markerGroupMap, + l = s.get(a) || s.set(a, new zc), h = Rf(r, t, e); + e.setData(h), Ef(e.getData(), t, n), h.each(function (t) { + var i = h.getItemModel(t), n = i.getShallow("symbolSize"); + "function" == typeof n && (n = n(e.getRawValue(t), e.getDataParams(t))), h.setItemVisual(t, { + symbolSize: n, + color: i.get("itemStyle.color") || o.getVisual("color"), + symbol: i.getShallow("symbol") + }) + }), l.updateData(h), this.group.add(l.group), h.eachItemGraphicEl(function (t) { + t.traverse(function (t) { + t.dataModel = e + }) + }), l.__keep = !0, l.group.silent = e.get("silent") || t.get("silent") + } + }), Yl(function (t) { + t.markPoint = t.markPoint || {} + }), OM.extend({ + type: "markLine", + defaultOption: { + zlevel: 0, + z: 5, + symbol: ["circle", "arrow"], + symbolSize: [8, 16], + precision: 2, + tooltip: {trigger: "item"}, + label: {show: !0, position: "end"}, + lineStyle: {type: "dashed"}, + emphasis: {label: {show: !0}, lineStyle: {width: 3}}, + animationEasing: "linear" + } + }); + var NM = ky.prototype, FM = Ly.prototype, VM = $r({ + type: "ec-line", + style: {stroke: "#000", fill: null}, + shape: {x1: 0, y1: 0, x2: 0, y2: 0, percent: 1, cpx1: null, cpy1: null}, + buildPath: function (t, e) { + (Bf(e) ? NM : FM).buildPath(t, e) + }, + pointAt: function (t) { + return Bf(this.shape) ? NM.pointAt.call(this, t) : FM.pointAt.call(this, t) + }, + tangentAt: function (t) { + var e = this.shape, i = Bf(e) ? [e.x2 - e.x1, e.y2 - e.y1] : FM.tangentAt.call(this, t); + return te(i, i) + } + }), WM = ["fromSymbol", "toSymbol"], GM = Hf.prototype; + GM.beforeUpdate = Gf, GM._createLine = function (t, e, i) { + var n = t.hostModel, r = t.getItemLayout(e), a = Vf(r); + a.shape.percent = 0, Oa(a, {shape: {percent: 1}}, n, e), this.add(a); + var o = new xy({name: "label"}); + this.add(o), f(WM, function (i) { + var n = Ff(i, t, e); + this.add(n), this[Nf(i)] = t.getItemVisual(e, i) + }, this), this._updateCommonStl(t, e, i) + }, GM.updateData = function (t, e, i) { + var n = t.hostModel, r = this.childOfName("line"), a = t.getItemLayout(e), o = {shape: {}}; + Wf(o.shape, a), La(r, o, n, e), f(WM, function (i) { + var n = t.getItemVisual(e, i), r = Nf(i); + if (this[r] !== n) { + this.remove(this.childOfName(i)); + var a = Ff(i, t, e); + this.add(a) + } + this[r] = n + }, this), this._updateCommonStl(t, e, i) + }, GM._updateCommonStl = function (t, e, i) { + var n = t.hostModel, r = this.childOfName("line"), a = i && i.lineStyle, o = i && i.hoverLineStyle, + l = i && i.labelModel, h = i && i.hoverLabelModel; + if (!i || t.hasItemOption) { + var u = t.getItemModel(e); + a = u.getModel("lineStyle").getLineStyle(), o = u.getModel("emphasis.lineStyle").getLineStyle(), l = u.getModel("label"), h = u.getModel("emphasis.label") + } + var c = t.getItemVisual(e, "color"), d = k(t.getItemVisual(e, "opacity"), a.opacity, 1); + r.useStyle(s({ + strokeNoScale: !0, + fill: "none", + stroke: c, + opacity: d + }, a)), r.hoverStyle = o, f(WM, function (t) { + var e = this.childOfName(t); + e && (e.setColor(c), e.setStyle({opacity: d})) + }, this); + var p, g, v = l.getShallow("show"), m = h.getShallow("show"), y = this.childOfName("label"); + if ((v || m) && (p = c || "#000", g = n.getFormattedLabel(e, "normal", t.dataType), null == g)) { + var x = n.getRawValue(e); + g = null == x ? t.getName(e) : isFinite(x) ? $a(x) : x + } + var _ = v ? g : null, w = m ? D(n.getFormattedLabel(e, "emphasis", t.dataType), g) : null, b = y.style; + (null != _ || null != w) && (ba(y.style, l, {text: _}, {autoColor: p}), y.__textAlign = b.textAlign, y.__verticalAlign = b.textVerticalAlign, y.__position = l.get("position") || "middle"), y.hoverStyle = null != w ? { + text: w, + textFill: h.getTextColor(!0), + fontStyle: h.getShallow("fontStyle"), + fontWeight: h.getShallow("fontWeight"), + fontSize: h.getShallow("fontSize"), + fontFamily: h.getShallow("fontFamily") + } : {text: null}, y.ignore = !v && !m, xa(this) + }, GM.highlight = function () { + this.trigger("emphasis") + }, GM.downplay = function () { + this.trigger("normal") + }, GM.updateLayout = function (t, e) { + this.setLinePoints(t.getItemLayout(e)) + }, GM.setLinePoints = function (t) { + var e = this.childOfName("line"); + Wf(e.shape, t), e.dirty() + }, u(Hf, lv); + var HM = Zf.prototype; + HM.isPersistent = function () { + return !0 + }, HM.updateData = function (t) { + var e = this, i = e.group, n = e._lineData; + e._lineData = t, n || i.removeAll(); + var r = jf(t); + t.diff(n).add(function (i) { + Xf(e, t, i, r) + }).update(function (i, a) { + Yf(e, n, t, a, i, r) + }).remove(function (t) { + i.remove(n.getItemGraphicEl(t)) + }).execute() + }, HM.updateLayout = function () { + var t = this._lineData; + t && t.eachItemGraphicEl(function (e, i) { + e.updateLayout(t, i) + }, this) + }, HM.incrementalPrepareUpdate = function (t) { + this._seriesScope = jf(t), this._lineData = null, this.group.removeAll() + }, HM.incrementalUpdate = function (t, e) { + function i(t) { + t.isGroup || (t.incremental = t.useHoverLayer = !0) + } + + for (var n = t.start; n < t.end; n++) { + var r = e.getItemLayout(n); + if (Uf(r)) { + var a = new this._ctor(e, n, this._seriesScope); + a.traverse(i), this.group.add(a), e.setItemGraphicEl(n, a) + } + } + }, HM.remove = function () { + this._clearIncremental(), this._incremental = null, this.group.removeAll() + }, HM._clearIncremental = function () { + var t = this._incremental; + t && t.clearDisplaybles() + }; + var ZM = function (t, e, i, a) { + var s = t.getData(), l = a.type; + if (!_(a) && ("min" === l || "max" === l || "average" === l || "median" === l || null != a.xAxis || null != a.yAxis)) { + var h, u, c; + if (null != a.yAxis || null != a.xAxis) u = null != a.yAxis ? "y" : "x", h = e.getAxis(u), c = A(a.yAxis, a.xAxis); else { + var d = kf(a, s, e, t); + u = d.valueDataDim, h = d.valueAxis, c = zf(s, u, l) + } + var f = "x" === u ? 0 : 1, p = 1 - f, g = n(a), v = {}; + g.type = null, g.coord = [], v.coord = [], g.coord[p] = -1 / 0, v.coord[p] = 1 / 0; + var m = i.get("precision"); + m >= 0 && "number" == typeof c && (c = +c.toFixed(Math.min(m, 20))), g.coord[f] = v.coord[f] = c, a = [g, v, { + type: l, + valueIndex: a.valueIndex, + value: c + }] + } + return a = [Df(t, a[0]), Df(t, a[1]), o({}, a[2])], a[2].type = a[2].type || "", r(a[2], a[0]), r(a[2], a[1]), a + }; + BM.extend({ + type: "markLine", updateTransform: function (t, e, i) { + e.eachSeries(function (t) { + var e = t.markLineModel; + if (e) { + var n = e.getData(), r = e.__from, a = e.__to; + r.each(function (e) { + Jf(r, e, !0, t, i), Jf(a, e, !1, t, i) + }), n.each(function (t) { + n.setItemLayout(t, [r.getItemLayout(t), a.getItemLayout(t)]) + }), this.markerGroupMap.get(t.id).updateLayout() + } + }, this) + }, renderSeries: function (t, e, i, n) { + function r(e, i, r) { + var a = e.getItemModel(i); + Jf(e, i, r, t, n), e.setItemVisual(i, { + symbolSize: a.get("symbolSize") || g[r ? 0 : 1], + symbol: a.get("symbol", !0) || p[r ? 0 : 1], + color: a.get("itemStyle.color") || s.getVisual("color") + }) + } + + var a = t.coordinateSystem, o = t.id, s = t.getData(), l = this.markerGroupMap, + h = l.get(o) || l.set(o, new Zf); + this.group.add(h.group); + var u = tp(a, t, e), c = u.from, d = u.to, f = u.line; + e.__from = c, e.__to = d, e.setData(f); + var p = e.get("symbol"), g = e.get("symbolSize"); + _(p) || (p = [p, p]), "number" == typeof g && (g = [g, g]), u.from.each(function (t) { + r(c, t, !0), r(d, t, !1) + }), f.each(function (t) { + var e = f.getItemModel(t).get("lineStyle.color"); + f.setItemVisual(t, {color: e || c.getItemVisual(t, "color")}), f.setItemLayout(t, [c.getItemLayout(t), d.getItemLayout(t)]), f.setItemVisual(t, { + fromSymbolSize: c.getItemVisual(t, "symbolSize"), + fromSymbol: c.getItemVisual(t, "symbol"), + toSymbolSize: d.getItemVisual(t, "symbolSize"), + toSymbol: d.getItemVisual(t, "symbol") + }) + }), h.updateData(f), u.line.eachItemGraphicEl(function (t) { + t.traverse(function (t) { + t.dataModel = e + }) + }), h.__keep = !0, h.group.silent = e.get("silent") || t.get("silent") + } + }), Yl(function (t) { + t.markLine = t.markLine || {} + }), OM.extend({ + type: "markArea", + defaultOption: { + zlevel: 0, + z: 1, + tooltip: {trigger: "item"}, + animation: !1, + label: {show: !0, position: "top"}, + itemStyle: {borderWidth: 0}, + emphasis: {label: {show: !0, position: "top"}} + } + }); + var XM = function (t, e, i, n) { + var r = Df(t, n[0]), o = Df(t, n[1]), s = A, l = r.coord, h = o.coord; + l[0] = s(l[0], -1 / 0), l[1] = s(l[1], -1 / 0), h[0] = s(h[0], 1 / 0), h[1] = s(h[1], 1 / 0); + var u = a([{}, r, o]); + return u.coord = [r.coord, o.coord], u.x0 = r.x, u.y0 = r.y, u.x1 = o.x, u.y1 = o.y, u + }, YM = [["x0", "y0"], ["x1", "y0"], ["x1", "y1"], ["x0", "y1"]]; + BM.extend({ + type: "markArea", updateTransform: function (t, e, i) { + e.eachSeries(function (t) { + var e = t.markAreaModel; + if (e) { + var n = e.getData(); + n.each(function (e) { + var r = p(YM, function (r) { + return rp(n, e, r, t, i) + }); + n.setItemLayout(e, r); + var a = n.getItemGraphicEl(e); + a.setShape("points", r) + }) + } + }, this) + }, renderSeries: function (t, e, i, n) { + var r = t.coordinateSystem, a = t.id, o = t.getData(), l = this.markerGroupMap, + h = l.get(a) || l.set(a, {group: new lv}); + this.group.add(h.group), h.__keep = !0; + var u = ap(r, t, e); + e.setData(u), u.each(function (e) { + u.setItemLayout(e, p(YM, function (i) { + return rp(u, e, i, t, n) + })), u.setItemVisual(e, {color: o.getVisual("color")}) + }), u.diff(h.__data).add(function (t) { + var e = new Cy({shape: {points: u.getItemLayout(t)}}); + u.setItemGraphicEl(t, e), h.group.add(e) + }).update(function (t, i) { + var n = h.__data.getItemGraphicEl(i); + La(n, {shape: {points: u.getItemLayout(t)}}, e, t), h.group.add(n), u.setItemGraphicEl(t, n) + }).remove(function (t) { + var e = h.__data.getItemGraphicEl(t); + h.group.remove(e) + }).execute(), u.eachItemGraphicEl(function (t, i) { + var n = u.getItemModel(i), r = n.getModel("label"), a = n.getModel("emphasis.label"), + o = u.getItemVisual(i, "color"); + t.useStyle(s(n.getModel("itemStyle").getItemStyle(), { + fill: Ke(o, .4), + stroke: o + })), t.hoverStyle = n.getModel("emphasis.itemStyle").getItemStyle(), wa(t.style, t.hoverStyle, r, a, { + labelFetcher: e, + labelDataIndex: i, + defaultText: u.getName(i) || "", + isRectText: !0, + autoColor: o + }), xa(t, {}), t.dataModel = e + }), h.__data = u, h.group.silent = e.get("silent") || t.get("silent") + } + }), Yl(function (t) { + t.markArea = t.markArea || {} + }); + var jM = function (t) { + var e = t && t.timeline; + _(e) || (e = e ? [e] : []), f(e, function (t) { + t && op(t) + }) + }; + yx.registerSubTypeDefaulter("timeline", function () { + return "slider" + }), Ul({type: "timelineChange", event: "timelineChanged", update: "prepareAndUpdate"}, function (t, e) { + var i = e.getComponent("timeline"); + return i && null != t.currentIndex && (i.setCurrentIndex(t.currentIndex), !i.get("loop", !0) && i.isIndexMax() && i.setPlayState(!1)), e.resetOption("timeline"), s({currentIndex: i.option.currentIndex}, t) + }), Ul({type: "timelinePlayChange", event: "timelinePlayChanged", update: "update"}, function (t, e) { + var i = e.getComponent("timeline"); + i && null != t.playState && i.setPlayState(t.playState) + }); + var qM = yx.extend({ + type: "timeline", + layoutMode: "box", + defaultOption: { + zlevel: 0, + z: 4, + show: !0, + axisType: "time", + realtime: !0, + left: "20%", + top: null, + right: "20%", + bottom: 0, + width: null, + height: 40, + padding: 5, + controlPosition: "left", + autoPlay: !1, + rewind: !1, + loop: !0, + playInterval: 2e3, + currentIndex: 0, + itemStyle: {}, + label: {color: "#000"}, + data: [] + }, + init: function (t, e, i) { + this._data, this._names, this.mergeDefaultAndTheme(t, i), this._initData() + }, + mergeOption: function () { + qM.superApply(this, "mergeOption", arguments), this._initData() + }, + setCurrentIndex: function (t) { + null == t && (t = this.option.currentIndex); + var e = this._data.count(); + this.option.loop ? t = (t % e + e) % e : (t >= e && (t = e - 1), 0 > t && (t = 0)), this.option.currentIndex = t + }, + getCurrentIndex: function () { + return this.option.currentIndex + }, + isIndexMax: function () { + return this.getCurrentIndex() >= this._data.count() - 1 + }, + setPlayState: function (t) { + this.option.autoPlay = !!t + }, + getPlayState: function () { + return !!this.option.autoPlay + }, + _initData: function () { + var t = this.option, e = t.data || [], i = t.axisType, r = this._names = []; + if ("category" === i) { + var a = []; + f(e, function (t, e) { + var i, o = Vn(t); + S(t) ? (i = n(t), i.value = e) : i = e, a.push(i), b(o) || null != o && !isNaN(o) || (o = ""), r.push(o + "") + }), e = a + } + var o = {category: "ordinal", time: "time"}[i] || "number", + s = this._data = new Bw([{name: "value", type: o}], this); + s.initData(e, r) + }, + getData: function () { + return this._data + }, + getCategories: function () { + return "category" === this.get("axisType") ? this._names.slice() : void 0 + } + }), UM = qM.extend({ + type: "timeline.slider", defaultOption: { + backgroundColor: "rgba(0,0,0,0)", + borderColor: "#ccc", + borderWidth: 0, + orient: "horizontal", + inverse: !1, + tooltip: {trigger: "item"}, + symbol: "emptyCircle", + symbolSize: 10, + lineStyle: {show: !0, width: 2, color: "#304654"}, + label: {position: "auto", show: !0, interval: "auto", rotate: 0, color: "#304654"}, + itemStyle: {color: "#304654", borderWidth: 1}, + checkpointStyle: { + symbol: "circle", + symbolSize: 13, + color: "#c23531", + borderWidth: 5, + borderColor: "rgba(194,53,49, 0.5)", + animation: !0, + animationDuration: 300, + animationEasing: "quinticInOut" + }, + controlStyle: { + show: !0, + showPlayBtn: !0, + showPrevBtn: !0, + showNextBtn: !0, + itemSize: 22, + itemGap: 12, + position: "left", + playIcon: "path://M31.6,53C17.5,53,6,41.5,6,27.4S17.5,1.8,31.6,1.8C45.7,1.8,57.2,13.3,57.2,27.4S45.7,53,31.6,53z M31.6,3.3 C18.4,3.3,7.5,14.1,7.5,27.4c0,13.3,10.8,24.1,24.1,24.1C44.9,51.5,55.7,40.7,55.7,27.4C55.7,14.1,44.9,3.3,31.6,3.3z M24.9,21.3 c0-2.2,1.6-3.1,3.5-2l10.5,6.1c1.899,1.1,1.899,2.9,0,4l-10.5,6.1c-1.9,1.1-3.5,0.2-3.5-2V21.3z", + stopIcon: "path://M30.9,53.2C16.8,53.2,5.3,41.7,5.3,27.6S16.8,2,30.9,2C45,2,56.4,13.5,56.4,27.6S45,53.2,30.9,53.2z M30.9,3.5C17.6,3.5,6.8,14.4,6.8,27.6c0,13.3,10.8,24.1,24.101,24.1C44.2,51.7,55,40.9,55,27.6C54.9,14.4,44.1,3.5,30.9,3.5z M36.9,35.8c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H36c0.5,0,0.9,0.4,0.9,1V35.8z M27.8,35.8 c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H27c0.5,0,0.9,0.4,0.9,1L27.8,35.8L27.8,35.8z", + nextIcon: "path://M18.6,50.8l22.5-22.5c0.2-0.2,0.3-0.4,0.3-0.7c0-0.3-0.1-0.5-0.3-0.7L18.7,4.4c-0.1-0.1-0.2-0.3-0.2-0.5 c0-0.4,0.3-0.8,0.8-0.8c0.2,0,0.5,0.1,0.6,0.3l23.5,23.5l0,0c0.2,0.2,0.3,0.4,0.3,0.7c0,0.3-0.1,0.5-0.3,0.7l-0.1,0.1L19.7,52 c-0.1,0.1-0.3,0.2-0.5,0.2c-0.4,0-0.8-0.3-0.8-0.8C18.4,51.2,18.5,51,18.6,50.8z", + prevIcon: "path://M43,52.8L20.4,30.3c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.3,0.1-0.5,0.3-0.7L42.9,6.4c0.1-0.1,0.2-0.3,0.2-0.5 c0-0.4-0.3-0.8-0.8-0.8c-0.2,0-0.5,0.1-0.6,0.3L18.3,28.8l0,0c-0.2,0.2-0.3,0.4-0.3,0.7c0,0.3,0.1,0.5,0.3,0.7l0.1,0.1L41.9,54 c0.1,0.1,0.3,0.2,0.5,0.2c0.4,0,0.8-0.3,0.8-0.8C43.2,53.2,43.1,53,43,52.8z", + color: "#304654", + borderColor: "#304654", + borderWidth: 1 + }, + emphasis: { + label: {show: !0, color: "#c23531"}, + itemStyle: {color: "#c23531"}, + controlStyle: {color: "#c23531", borderColor: "#c23531", borderWidth: 2} + }, + data: [] + } + }); + c(UM, i_); + var $M = s_.extend({type: "timeline"}), KM = function (t, e, i, n) { + Pb.call(this, t, e, i), this.type = n || "value", this.model = null + }; + KM.prototype = { + constructor: KM, getLabelModel: function () { + return this.model.getModel("label") + }, isHorizontal: function () { + return "horizontal" === this.model.get("orient") + } + }, u(KM, Pb); + var QM = y, JM = f, tI = Math.PI; + $M.extend({ + type: "timeline.slider", init: function (t, e) { + this.api = e, this._axis, this._viewRect, this._timer, this._currentPointer, this._mainGroup, this._labelGroup + }, render: function (t, e, i) { + if (this.model = t, this.api = i, this.ecModel = e, this.group.removeAll(), t.get("show", !0)) { + var n = this._layout(t, i), r = this._createGroup("mainGroup"), a = this._createGroup("labelGroup"), + o = this._axis = this._createAxis(n, t); + t.formatTooltip = function (t) { + return po(o.scale.getLabel(t)) + }, JM(["AxisLine", "AxisTick", "Control", "CurrentPointer"], function (e) { + this["_render" + e](n, r, o, t) + }, this), this._renderAxisLabel(n, a, o, t), this._position(n, t) + } + this._doPlayStop() + }, remove: function () { + this._clearTimer(), this.group.removeAll() + }, dispose: function () { + this._clearTimer() + }, _layout: function (t, e) { + var i = t.get("label.position"), n = t.get("orient"), r = hp(t, e); + null == i || "auto" === i ? i = "horizontal" === n ? r.y + r.height / 2 < e.getHeight() / 2 ? "-" : "+" : r.x + r.width / 2 < e.getWidth() / 2 ? "+" : "-" : isNaN(i) && (i = { + horizontal: { + top: "-", + bottom: "+" + }, vertical: {left: "-", right: "+"} + }[n][i]); + var a = {horizontal: "center", vertical: i >= 0 || "+" === i ? "left" : "right"}, + o = {horizontal: i >= 0 || "+" === i ? "top" : "bottom", vertical: "middle"}, + s = {horizontal: 0, vertical: tI / 2}, l = "vertical" === n ? r.height : r.width, + h = t.getModel("controlStyle"), u = h.get("show", !0), c = u ? h.get("itemSize") : 0, + d = u ? h.get("itemGap") : 0, f = c + d, p = t.get("label.rotate") || 0; + p = p * tI / 180; + var g, v, m, y, x = h.get("position", !0), _ = u && h.get("showPlayBtn", !0), + w = u && h.get("showPrevBtn", !0), b = u && h.get("showNextBtn", !0), S = 0, M = l; + return "left" === x || "bottom" === x ? (_ && (g = [0, 0], S += f), w && (v = [S, 0], S += f), b && (m = [M - c, 0], M -= f)) : (_ && (g = [M - c, 0], M -= f), w && (v = [0, 0], S += f), b && (m = [M - c, 0], M -= f)), y = [S, M], t.get("inverse") && y.reverse(), { + viewRect: r, + mainLength: l, + orient: n, + rotation: s[n], + labelRotation: p, + labelPosOpt: i, + labelAlign: t.get("label.align") || a[n], + labelBaseline: t.get("label.verticalAlign") || t.get("label.baseline") || o[n], + playPosition: g, + prevBtnPosition: v, + nextBtnPosition: m, + axisExtent: y, + controlSize: c, + controlGap: d + } + }, _position: function (t) { + function e(t) { + var e = t.position; + t.origin = [u[0][0] - e[0], u[1][0] - e[1]] + } + + function i(t) { + return [[t.x, t.x + t.width], [t.y, t.y + t.height]] + } + + function n(t, e, i, n, r) { + t[n] += i[n][r] - e[n][r] + } + + var r = this._mainGroup, a = this._labelGroup, o = t.viewRect; + if ("vertical" === t.orient) { + var s = be(), l = o.x, h = o.y + o.height; + Te(s, s, [-l, -h]), Ce(s, s, -tI / 2), Te(s, s, [l, h]), o = o.clone(), o.applyTransform(s) + } + var u = i(o), c = i(r.getBoundingRect()), d = i(a.getBoundingRect()), f = r.position, p = a.position; + p[0] = f[0] = u[0][0]; + var g = t.labelPosOpt; + if (isNaN(g)) { + var v = "+" === g ? 0 : 1; + n(f, c, u, 1, v), n(p, d, u, 1, 1 - v) + } else { + var v = g >= 0 ? 0 : 1; + n(f, c, u, 1, v), p[1] = f[1] + g + } + r.attr("position", f), a.attr("position", p), r.rotation = a.rotation = t.rotation, e(r), e(a) + }, _createAxis: function (t, e) { + var i = e.getData(), n = e.get("axisType"), r = ou(e, n); + r.getTicks = function () { + return i.mapArray(["value"], function (t) { + return t + }) + }; + var a = i.getDataExtent("value"); + r.setExtent(a[0], a[1]), r.niceTicks(); + var o = new KM("value", r, t.axisExtent, n); + return o.model = e, o + }, _createGroup: function (t) { + var e = this["_" + t] = new lv; + return this.group.add(e), e + }, _renderAxisLine: function (t, e, i, n) { + var r = i.getExtent(); + n.get("lineStyle.show") && e.add(new ky({ + shape: {x1: r[0], y1: 0, x2: r[1], y2: 0}, + style: o({lineCap: "round"}, n.getModel("lineStyle").getLineStyle()), + silent: !0, + z2: 1 + })) + }, _renderAxisTick: function (t, e, i, n) { + var r = n.getData(), a = i.scale.getTicks(); + JM(a, function (t) { + var a = i.dataToCoord(t), o = r.getItemModel(t), s = o.getModel("itemStyle"), + l = o.getModel("emphasis.itemStyle"), + h = {position: [a, 0], onclick: QM(this._changeTimeline, this, t)}, u = cp(o, s, e, h); + xa(u, l.getItemStyle()), o.get("tooltip") ? (u.dataIndex = t, u.dataModel = n) : u.dataIndex = u.dataModel = null + }, this) + }, _renderAxisLabel: function (t, e, i, n) { + var r = i.getLabelModel(); + if (r.get("show")) { + var a = n.getData(), o = i.getViewLabels(); + JM(o, function (n) { + var r = n.tickValue, o = a.getItemModel(r), s = o.getModel("label"), + l = o.getModel("emphasis.label"), h = i.dataToCoord(n.tickValue), u = new xy({ + position: [h, 0], + rotation: t.labelRotation - t.rotation, + onclick: QM(this._changeTimeline, this, r), + silent: !1 + }); + ba(u.style, s, { + text: n.formattedLabel, + textAlign: t.labelAlign, + textVerticalAlign: t.labelBaseline + }), e.add(u), xa(u, ba({}, l)) + }, this) + } + }, _renderControl: function (t, e, i, n) { + function r(t, i, r, u) { + if (t) { + var c = { + position: t, + origin: [a / 2, 0], + rotation: u ? -o : 0, + rectHover: !0, + style: s, + onclick: r + }, d = up(n, i, h, c); + e.add(d), xa(d, l) + } + } + + var a = t.controlSize, o = t.rotation, s = n.getModel("controlStyle").getItemStyle(), + l = n.getModel("emphasis.controlStyle").getItemStyle(), h = [0, -a / 2, a, a], u = n.getPlayState(), + c = n.get("inverse", !0); + r(t.nextBtnPosition, "controlStyle.nextIcon", QM(this._changeTimeline, this, c ? "-" : "+")), r(t.prevBtnPosition, "controlStyle.prevIcon", QM(this._changeTimeline, this, c ? "+" : "-")), r(t.playPosition, "controlStyle." + (u ? "stopIcon" : "playIcon"), QM(this._handlePlayClick, this, !u), !0) + }, _renderCurrentPointer: function (t, e, i, n) { + var r = n.getData(), a = n.getCurrentIndex(), o = r.getItemModel(a).getModel("checkpointStyle"), s = this, + l = { + onCreate: function (t) { + t.draggable = !0, t.drift = QM(s._handlePointerDrag, s), t.ondragend = QM(s._handlePointerDragend, s), dp(t, a, i, n, !0) + }, onUpdate: function (t) { + dp(t, a, i, n) + } + }; + this._currentPointer = cp(o, o, this._mainGroup, {}, this._currentPointer, l) + }, _handlePlayClick: function (t) { + this._clearTimer(), this.api.dispatchAction({type: "timelinePlayChange", playState: t, from: this.uid}) + }, _handlePointerDrag: function (t, e, i) { + this._clearTimer(), this._pointerChangeTimeline([i.offsetX, i.offsetY]) + }, _handlePointerDragend: function (t) { + this._pointerChangeTimeline([t.offsetX, t.offsetY], !0) + }, _pointerChangeTimeline: function (t, e) { + var i = this._toAxisCoord(t)[0], n = this._axis, r = Ka(n.getExtent().slice()); + i > r[1] && (i = r[1]), i < r[0] && (i = r[0]), this._currentPointer.position[0] = i, this._currentPointer.dirty(); + var a = this._findNearestTick(i), o = this.model; + (e || a !== o.getCurrentIndex() && o.get("realtime")) && this._changeTimeline(a) + }, _doPlayStop: function () { + function t() { + var t = this.model; + this._changeTimeline(t.getCurrentIndex() + (t.get("rewind", !0) ? -1 : 1)) + } + + this._clearTimer(), this.model.getPlayState() && (this._timer = setTimeout(QM(t, this), this.model.get("playInterval"))) + }, _toAxisCoord: function (t) { + var e = this._mainGroup.getLocalTransform(); + return Ea(t, e, !0) + }, _findNearestTick: function (t) { + var e, i = this.model.getData(), n = 1 / 0, r = this._axis; + return i.each(["value"], function (i, a) { + var o = r.dataToCoord(i), s = Math.abs(o - t); + n > s && (n = s, e = a) + }), e + }, _clearTimer: function () { + this._timer && (clearTimeout(this._timer), this._timer = null) + }, _changeTimeline: function (t) { + var e = this.model.getCurrentIndex(); + "+" === t ? t = e + 1 : "-" === t && (t = e - 1), this.api.dispatchAction({ + type: "timelineChange", + currentIndex: t, + from: this.uid + }) + } + }), Yl(jM), yx.registerSubTypeDefaulter("dataZoom", function () { + return "slider" + }); + var eI = ["x", "y", "z", "radius", "angle", "single"], iI = ["cartesian2d", "polar", "singleAxis"], + nI = pp(eI, ["axisIndex", "axis", "index", "id"]), rI = f, aI = Ka, oI = function (t, e, i, n) { + this._dimName = t, this._axisIndex = e, this._valueWindow, this._percentWindow, this._dataExtent, this._minMaxSpan, this.ecModel = n, this._dataZoomModel = i + }; + oI.prototype = { + constructor: oI, hostedBy: function (t) { + return this._dataZoomModel === t + }, getDataValueWindow: function () { + return this._valueWindow.slice() + }, getDataPercentWindow: function () { + return this._percentWindow.slice() + }, getTargetSeriesModels: function () { + var t = [], e = this.ecModel; + return e.eachSeries(function (i) { + if (fp(i.get("coordinateSystem"))) { + var n = this._dimName, r = e.queryComponents({ + mainType: n + "Axis", + index: i.get(n + "AxisIndex"), + id: i.get(n + "AxisId") + })[0]; + this._axisIndex === (r && r.componentIndex) && t.push(i) + } + }, this), t + }, getAxisModel: function () { + return this.ecModel.getComponent(this._dimName + "Axis", this._axisIndex) + }, getOtherAxisModel: function () { + var t, e, i = this._dimName, n = this.ecModel, r = this.getAxisModel(), a = "x" === i || "y" === i; + a ? (e = "gridIndex", t = "x" === i ? "y" : "x") : (e = "polarIndex", t = "angle" === i ? "radius" : "angle"); + var o; + return n.eachComponent(t + "Axis", function (t) { + (t.get(e) || 0) === (r.get(e) || 0) && (o = t) + }), o + }, getMinMaxSpan: function () { + return n(this._minMaxSpan) + }, calculateDataWindow: function (t) { + var e = this._dataExtent, i = this.getAxisModel(), n = i.axis.scale, + r = this._dataZoomModel.getRangePropMode(), a = [0, 100], o = [t.start, t.end], s = []; + return rI(["startValue", "endValue"], function (e) { + s.push(null != t[e] ? n.parse(t[e]) : null) + }), rI([0, 1], function (t) { + var i = s[t], l = o[t]; + "percent" === r[t] ? (null == l && (l = a[t]), i = n.parse(qa(l, a, e, !0))) : l = qa(i, e, a, !0), s[t] = i, o[t] = l + }), {valueWindow: aI(s), percentWindow: aI(o)} + }, reset: function (t) { + if (t === this._dataZoomModel) { + var e = this.getTargetSeriesModels(); + this._dataExtent = vp(this, this._dimName, e); + var i = this.calculateDataWindow(t.option); + this._valueWindow = i.valueWindow, this._percentWindow = i.percentWindow, xp(this), yp(this) + } + }, restore: function (t) { + t === this._dataZoomModel && (this._valueWindow = this._percentWindow = null, yp(this, !0)) + }, filterData: function (t) { + function e(t) { + return t >= a[0] && t <= a[1] + } + + if (t === this._dataZoomModel) { + var i = this._dimName, n = this.getTargetSeriesModels(), r = t.get("filterMode"), a = this._valueWindow; + "none" !== r && rI(n, function (t) { + var n = t.getData(), o = n.mapDimension(i, !0); + o.length && ("weakFilter" === r ? n.filterSelf(function (t) { + for (var e, i, r, s = 0; s < o.length; s++) { + var l = n.get(o[s], t), h = !isNaN(l), u = l < a[0], c = l > a[1]; + if (h && !u && !c) return !0; + h && (r = !0), u && (e = !0), c && (i = !0) + } + return r && e && i + }) : rI(o, function (i) { + if ("empty" === r) t.setData(n.map(i, function (t) { + return e(t) ? t : 0 / 0 + })); else { + var o = {}; + o[i] = a, n.selectRange(o) + } + }), rI(o, function (t) { + n.setApproximateExtent(a, t) + })) + }) + } + } + }; + var sI = f, lI = nI, hI = ih({ + type: "dataZoom", + dependencies: ["xAxis", "yAxis", "zAxis", "radiusAxis", "angleAxis", "singleAxis", "series"], + defaultOption: { + zlevel: 0, + z: 4, + orient: null, + xAxisIndex: null, + yAxisIndex: null, + filterMode: "filter", + throttle: null, + start: 0, + end: 100, + startValue: null, + endValue: null, + minSpan: null, + maxSpan: null, + minValueSpan: null, + maxValueSpan: null, + rangeMode: null + }, + init: function (t, e, i) { + this._dataIntervalByAxis = {}, this._dataInfo = {}, this._axisProxies = {}, this.textStyleModel, this._autoThrottle = !0, this._rangePropMode = ["percent", "percent"]; + var n = _p(t); + this.mergeDefaultAndTheme(t, i), this.doInit(n) + }, + mergeOption: function (t) { + var e = _p(t); + r(this.option, t, !0), this.doInit(e) + }, + doInit: function (t) { + var e = this.option; + tg.canvasSupported || (e.realtime = !1), this._setDefaultThrottle(t), wp(this, t), sI([["start", "startValue"], ["end", "endValue"]], function (t, i) { + "value" === this._rangePropMode[i] && (e[t[0]] = null) + }, this), this.textStyleModel = this.getModel("textStyle"), this._resetTarget(), this._giveAxisProxies() + }, + _giveAxisProxies: function () { + var t = this._axisProxies; + this.eachTargetAxis(function (e, i, n, r) { + var a = this.dependentModels[e.axis][i], + o = a.__dzAxisProxy || (a.__dzAxisProxy = new oI(e.name, i, this, r)); + t[e.name + "_" + i] = o + }, this) + }, + _resetTarget: function () { + var t = this.option, e = this._judgeAutoMode(); + lI(function (e) { + var i = e.axisIndex; + t[i] = Nn(t[i]) + }, this), "axisIndex" === e ? this._autoSetAxisIndex() : "orient" === e && this._autoSetOrient() + }, + _judgeAutoMode: function () { + var t = this.option, e = !1; + lI(function (i) { + null != t[i.axisIndex] && (e = !0) + }, this); + var i = t.orient; + return null == i && e ? "orient" : e ? void 0 : (null == i && (t.orient = "horizontal"), "axisIndex") + }, + _autoSetAxisIndex: function () { + var t = !0, e = this.get("orient", !0), i = this.option, n = this.dependentModels; + if (t) { + var r = "vertical" === e ? "y" : "x"; + n[r + "Axis"].length ? (i[r + "AxisIndex"] = [0], t = !1) : sI(n.singleAxis, function (n) { + t && n.get("orient", !0) === e && (i.singleAxisIndex = [n.componentIndex], t = !1) + }) + } + t && lI(function (e) { + if (t) { + var n = [], r = this.dependentModels[e.axis]; + if (r.length && !n.length) for (var a = 0, o = r.length; o > a; a++) "category" === r[a].get("type") && n.push(a); + i[e.axisIndex] = n, n.length && (t = !1) + } + }, this), t && this.ecModel.eachSeries(function (t) { + this._isSeriesHasAllAxesTypeOf(t, "value") && lI(function (e) { + var n = i[e.axisIndex], r = t.get(e.axisIndex), a = t.get(e.axisId), + o = t.ecModel.queryComponents({mainType: e.axis, index: r, id: a})[0]; + r = o.componentIndex, h(n, r) < 0 && n.push(r) + }) + }, this) + }, + _autoSetOrient: function () { + var t; + this.eachTargetAxis(function (e) { + !t && (t = e.name) + }, this), this.option.orient = "y" === t ? "vertical" : "horizontal" + }, + _isSeriesHasAllAxesTypeOf: function (t, e) { + var i = !0; + return lI(function (n) { + var r = t.get(n.axisIndex), a = this.dependentModels[n.axis][r]; + a && a.get("type") === e || (i = !1) + }, this), i + }, + _setDefaultThrottle: function (t) { + if (t.hasOwnProperty("throttle") && (this._autoThrottle = !1), this._autoThrottle) { + var e = this.ecModel.option; + this.option.throttle = e.animation && e.animationDurationUpdate > 0 ? 100 : 20 + } + }, + getFirstTargetAxisModel: function () { + var t; + return lI(function (e) { + if (null == t) { + var i = this.get(e.axisIndex); + i.length && (t = this.dependentModels[e.axis][i[0]]) + } + }, this), t + }, + eachTargetAxis: function (t, e) { + var i = this.ecModel; + lI(function (n) { + sI(this.get(n.axisIndex), function (r) { + t.call(e, n, r, this, i) + }, this) + }, this) + }, + getAxisProxy: function (t, e) { + return this._axisProxies[t + "_" + e] + }, + getAxisModel: function (t, e) { + var i = this.getAxisProxy(t, e); + return i && i.getAxisModel() + }, + setRawRange: function (t, e) { + var i = this.option; + sI([["start", "startValue"], ["end", "endValue"]], function (e) { + (null != t[e[0]] || null != t[e[1]]) && (i[e[0]] = t[e[0]], i[e[1]] = t[e[1]]) + }, this), !e && wp(this, t) + }, + getPercentRange: function () { + var t = this.findRepresentativeAxisProxy(); + return t ? t.getDataPercentWindow() : void 0 + }, + getValueRange: function (t, e) { + if (null != t || null != e) return this.getAxisProxy(t, e).getDataValueWindow(); + var i = this.findRepresentativeAxisProxy(); + return i ? i.getDataValueWindow() : void 0 + }, + findRepresentativeAxisProxy: function (t) { + if (t) return t.__dzAxisProxy; + var e = this._axisProxies; + for (var i in e) if (e.hasOwnProperty(i) && e[i].hostedBy(this)) return e[i]; + for (var i in e) if (e.hasOwnProperty(i) && !e[i].hostedBy(this)) return e[i] + }, + getRangePropMode: function () { + return this._rangePropMode.slice() + } + }), uI = s_.extend({ + type: "dataZoom", render: function (t, e, i) { + this.dataZoomModel = t, this.ecModel = e, this.api = i + }, getTargetCoordInfo: function () { + function t(t, e, i, n) { + for (var r, a = 0; a < i.length; a++) if (i[a].model === t) { + r = i[a]; + break + } + r || i.push(r = {model: t, axisModels: [], coordIndex: n}), r.axisModels.push(e) + } + + var e = this.dataZoomModel, i = this.ecModel, n = {}; + return e.eachTargetAxis(function (e, r) { + var a = i.getComponent(e.axis, r); + if (a) { + var o = a.getCoordSysModel(); + o && t(o, a, n[o.mainType] || (n[o.mainType] = []), o.componentIndex) + } + }, this), n + } + }), cI = (hI.extend({ + type: "dataZoom.slider", + layoutMode: "box", + defaultOption: { + show: !0, + right: "ph", + top: "ph", + width: "ph", + height: "ph", + left: null, + bottom: null, + backgroundColor: "rgba(47,69,84,0)", + dataBackground: { + lineStyle: {color: "#2f4554", width: .5, opacity: .3}, + areaStyle: {color: "rgba(47,69,84,0.3)", opacity: .3} + }, + borderColor: "#ddd", + fillerColor: "rgba(167,183,204,0.4)", + handleIcon: "M8.2,13.6V3.9H6.3v9.7H3.1v14.9h3.3v9.7h1.8v-9.7h3.3V13.6H8.2z M9.7,24.4H4.8v-1.4h4.9V24.4z M9.7,19.1H4.8v-1.4h4.9V19.1z", + handleSize: "100%", + handleStyle: {color: "#a7b7cc"}, + labelPrecision: null, + labelFormatter: null, + showDetail: !0, + showDataShadow: "auto", + realtime: !0, + zoomLock: !1, + textStyle: {color: "#333"} + } + }), function (t, e, i, n, r, a) { + e[0] = Sp(e[0], i), e[1] = Sp(e[1], i), t = t || 0; + var o = i[1] - i[0]; + null != r && (r = Sp(r, [0, o])), null != a && (a = Math.max(a, null != r ? r : 0)), "all" === n && (r = a = Math.abs(e[1] - e[0]), n = 0); + var s = bp(e, n); + e[n] += t; + var l = r || 0, h = i.slice(); + s.sign < 0 ? h[0] += l : h[1] -= l, e[n] = Sp(e[n], h); + var u = bp(e, n); + null != r && (u.sign !== s.sign || u.span < r) && (e[1 - n] = e[n] + s.sign * r); + var u = bp(e, n); + return null != a && u.span > a && (e[1 - n] = e[n] + u.sign * a), e + }), dI = Dy, fI = qa, pI = Ka, gI = y, vI = f, mI = 7, yI = 1, xI = 30, _I = "horizontal", wI = "vertical", bI = 5, + SI = ["line", "bar", "candlestick", "scatter"], MI = uI.extend({ + type: "dataZoom.slider", init: function (t, e) { + this._displayables = {}, this._orient, this._range, this._handleEnds, this._size, this._handleWidth, this._handleHeight, this._location, this._dragging, this._dataShadowInfo, this.api = e + }, render: function (t, e, i, n) { + return MI.superApply(this, "render", arguments), Hs(this, "_dispatchZoomAction", this.dataZoomModel.get("throttle"), "fixRate"), this._orient = t.get("orient"), this.dataZoomModel.get("show") === !1 ? void this.group.removeAll() : (n && "dataZoom" === n.type && n.from === this.uid || this._buildView(), void this._updateView()) + }, remove: function () { + MI.superApply(this, "remove", arguments), Zs(this, "_dispatchZoomAction") + }, dispose: function () { + MI.superApply(this, "dispose", arguments), Zs(this, "_dispatchZoomAction") + }, _buildView: function () { + var t = this.group; + t.removeAll(), this._resetLocation(), this._resetInterval(); + var e = this._displayables.barGroup = new lv; + this._renderBackground(), this._renderHandle(), this._renderDataShadow(), t.add(e), this._positionGroup() + }, _resetLocation: function () { + var t = this.dataZoomModel, e = this.api, i = this._findCoordRect(), + n = {width: e.getWidth(), height: e.getHeight()}, r = this._orient === _I ? { + right: n.width - i.x - i.width, + top: n.height - xI - mI, + width: i.width, + height: xI + } : {right: mI, top: i.y, width: xI, height: i.height}, a = Mo(t.option); + f(["right", "top", "width", "height"], function (t) { + "ph" === a[t] && (a[t] = r[t]) + }); + var o = bo(a, n, t.padding); + this._location = { + x: o.x, + y: o.y + }, this._size = [o.width, o.height], this._orient === wI && this._size.reverse() + }, _positionGroup: function () { + var t = this.group, e = this._location, i = this._orient, n = this.dataZoomModel.getFirstTargetAxisModel(), + r = n && n.get("inverse"), a = this._displayables.barGroup, + o = (this._dataShadowInfo || {}).otherAxisInverse; + a.attr(i !== _I || r ? i === _I && r ? {scale: o ? [-1, 1] : [-1, -1]} : i !== wI || r ? { + scale: o ? [-1, -1] : [-1, 1], + rotation: Math.PI / 2 + } : {scale: o ? [1, -1] : [1, 1], rotation: Math.PI / 2} : {scale: o ? [1, 1] : [1, -1]}); + var s = t.getBoundingRect([a]); + t.attr("position", [e.x - s.x, e.y - s.y]) + }, _getViewExtent: function () { + return [0, this._size[0]] + }, _renderBackground: function () { + var t = this.dataZoomModel, e = this._size, i = this._displayables.barGroup; + i.add(new dI({ + silent: !0, + shape: {x: 0, y: 0, width: e[0], height: e[1]}, + style: {fill: t.get("backgroundColor")}, + z2: -40 + })), i.add(new dI({ + shape: {x: 0, y: 0, width: e[0], height: e[1]}, + style: {fill: "transparent"}, + z2: 0, + onclick: y(this._onClickPanelClick, this) + })) + }, _renderDataShadow: function () { + var t = this._dataShadowInfo = this._prepareDataShadowInfo(); + if (t) { + var e = this._size, i = t.series, n = i.getRawData(), + r = i.getShadowDim ? i.getShadowDim() : t.otherDim; + if (null != r) { + var a = n.getDataExtent(r), o = .3 * (a[1] - a[0]); + a = [a[0] - o, a[1] + o]; + var l, h = [0, e[1]], u = [0, e[0]], c = [[e[0], 0], [0, 0]], d = [], f = u[1] / (n.count() - 1), + p = 0, g = Math.round(n.count() / e[0]); + n.each([r], function (t, e) { + if (g > 0 && e % g) return void (p += f); + var i = null == t || isNaN(t) || "" === t, n = i ? 0 : fI(t, a, h, !0); + i && !l && e ? (c.push([c[c.length - 1][0], 0]), d.push([d[d.length - 1][0], 0])) : !i && l && (c.push([p, 0]), d.push([p, 0])), c.push([p, n]), d.push([p, n]), p += f, l = i + }); + var v = this.dataZoomModel; + this._displayables.barGroup.add(new Cy({ + shape: {points: c}, + style: s({fill: v.get("dataBackgroundColor")}, v.getModel("dataBackground.areaStyle").getAreaStyle()), + silent: !0, + z2: -20 + })), this._displayables.barGroup.add(new Ay({ + shape: {points: d}, + style: v.getModel("dataBackground.lineStyle").getLineStyle(), + silent: !0, + z2: -19 + })) + } + } + }, _prepareDataShadowInfo: function () { + var t = this.dataZoomModel, e = t.get("showDataShadow"); + if (e !== !1) { + var i, n = this.ecModel; + return t.eachTargetAxis(function (r, a) { + var o = t.getAxisProxy(r.name, a).getTargetSeriesModels(); + f(o, function (t) { + if (!(i || e !== !0 && h(SI, t.get("type")) < 0)) { + var o, s = n.getComponent(r.axis, a).axis, l = Mp(r.name), u = t.coordinateSystem; + null != l && u.getOtherAxis && (o = u.getOtherAxis(s).inverse), l = t.getData().mapDimension(l), i = { + thisAxis: s, + series: t, + thisDim: r.name, + otherDim: l, + otherAxisInverse: o + } + } + }, this) + }, this), i + } + }, _renderHandle: function () { + var t = this._displayables, e = t.handles = [], i = t.handleLabels = [], n = this._displayables.barGroup, + r = this._size, a = this.dataZoomModel; + n.add(t.filler = new dI({ + draggable: !0, + cursor: Ip(this._orient), + drift: gI(this._onDragMove, this, "all"), + onmousemove: function (t) { + Ig(t.event) + }, + ondragstart: gI(this._showDataInfo, this, !0), + ondragend: gI(this._onDragEnd, this), + onmouseover: gI(this._showDataInfo, this, !0), + onmouseout: gI(this._showDataInfo, this, !1), + style: {fill: a.get("fillerColor"), textPosition: "inside"} + })), n.add(new dI(na({ + silent: !0, + shape: {x: 0, y: 0, width: r[0], height: r[1]}, + style: { + stroke: a.get("dataBackgroundColor") || a.get("borderColor"), + lineWidth: yI, + fill: "rgba(0,0,0,0)" + } + }))), vI([0, 1], function (t) { + var r = Va(a.get("handleIcon"), { + cursor: Ip(this._orient), + draggable: !0, + drift: gI(this._onDragMove, this, t), + onmousemove: function (t) { + Ig(t.event) + }, + ondragend: gI(this._onDragEnd, this), + onmouseover: gI(this._showDataInfo, this, !0), + onmouseout: gI(this._showDataInfo, this, !1) + }, {x: -1, y: 0, width: 2, height: 2}), o = r.getBoundingRect(); + this._handleHeight = Ua(a.get("handleSize"), this._size[1]), this._handleWidth = o.width / o.height * this._handleHeight, r.setStyle(a.getModel("handleStyle").getItemStyle()); + var s = a.get("handleColor"); + null != s && (r.style.fill = s), n.add(e[t] = r); + var l = a.textStyleModel; + this.group.add(i[t] = new xy({ + silent: !0, + invisible: !0, + style: { + x: 0, + y: 0, + text: "", + textVerticalAlign: "middle", + textAlign: "center", + textFill: l.getTextColor(), + textFont: l.getFont() + }, + z2: 10 + })) + }, this) + }, _resetInterval: function () { + var t = this._range = this.dataZoomModel.getPercentRange(), e = this._getViewExtent(); + this._handleEnds = [fI(t[0], [0, 100], e, !0), fI(t[1], [0, 100], e, !0)] + }, _updateInterval: function (t, e) { + var i = this.dataZoomModel, n = this._handleEnds, r = this._getViewExtent(), + a = i.findRepresentativeAxisProxy().getMinMaxSpan(), o = [0, 100]; + cI(e, n, r, i.get("zoomLock") ? "all" : t, null != a.minSpan ? fI(a.minSpan, o, r, !0) : null, null != a.maxSpan ? fI(a.maxSpan, o, r, !0) : null); + var s = this._range, l = this._range = pI([fI(n[0], r, o, !0), fI(n[1], r, o, !0)]); + return !s || s[0] !== l[0] || s[1] !== l[1] + }, _updateView: function (t) { + var e = this._displayables, i = this._handleEnds, n = pI(i.slice()), r = this._size; + vI([0, 1], function (t) { + var n = e.handles[t], a = this._handleHeight; + n.attr({scale: [a / 2, a / 2], position: [i[t], r[1] / 2 - a / 2]}) + }, this), e.filler.setShape({x: n[0], y: 0, width: n[1] - n[0], height: r[1]}), this._updateDataInfo(t) + }, _updateDataInfo: function (t) { + function e(t) { + var e = za(n.handles[t].parent, this.group), i = Ra(0 === t ? "right" : "left", e), + s = this._handleWidth / 2 + bI, l = Ea([c[t] + (0 === t ? -s : s), this._size[1] / 2], e); + r[t].setStyle({ + x: l[0], + y: l[1], + textVerticalAlign: a === _I ? "middle" : i, + textAlign: a === _I ? i : "center", + text: o[t] + }) + } + + var i = this.dataZoomModel, n = this._displayables, r = n.handleLabels, a = this._orient, o = ["", ""]; + if (i.get("showDetail")) { + var s = i.findRepresentativeAxisProxy(); + if (s) { + var l = s.getAxisModel().axis, h = this._range, + u = t ? s.calculateDataWindow({start: h[0], end: h[1]}).valueWindow : s.getDataValueWindow(); + o = [this._formatLabel(u[0], l), this._formatLabel(u[1], l)] + } + } + var c = pI(this._handleEnds.slice()); + e.call(this, 0), e.call(this, 1) + }, _formatLabel: function (t, e) { + var i = this.dataZoomModel, n = i.get("labelFormatter"), r = i.get("labelPrecision"); + (null == r || "auto" === r) && (r = e.getPixelPrecision()); + var a = null == t || isNaN(t) ? "" : "category" === e.type || "time" === e.type ? e.scale.getLabel(Math.round(t)) : t.toFixed(Math.min(r, 20)); + return w(n) ? n(t, a) : b(n) ? n.replace("{value}", a) : a + }, _showDataInfo: function (t) { + t = this._dragging || t; + var e = this._displayables.handleLabels; + e[0].attr("invisible", !t), e[1].attr("invisible", !t) + }, _onDragMove: function (t, e, i) { + this._dragging = !0; + var n = this._displayables.barGroup.getLocalTransform(), r = Ea([e, i], n, !0), + a = this._updateInterval(t, r[0]), o = this.dataZoomModel.get("realtime"); + this._updateView(!o), a && o && this._dispatchZoomAction() + }, _onDragEnd: function () { + this._dragging = !1, this._showDataInfo(!1); + var t = this.dataZoomModel.get("realtime"); + !t && this._dispatchZoomAction() + }, _onClickPanelClick: function (t) { + var e = this._size, i = this._displayables.barGroup.transformCoordToLocal(t.offsetX, t.offsetY); + if (!(i[0] < 0 || i[0] > e[0] || i[1] < 0 || i[1] > e[1])) { + var n = this._handleEnds, r = (n[0] + n[1]) / 2, a = this._updateInterval("all", i[0] - r); + this._updateView(), a && this._dispatchZoomAction() + } + }, _dispatchZoomAction: function () { + var t = this._range; + this.api.dispatchAction({ + type: "dataZoom", + from: this.uid, + dataZoomId: this.dataZoomModel.id, + start: t[0], + end: t[1] + }) + }, _findCoordRect: function () { + var t; + if (vI(this.getTargetCoordInfo(), function (e) { + if (!t && e.length) { + var i = e[0].model.coordinateSystem; + t = i.getRect && i.getRect() + } + }), !t) { + var e = this.api.getWidth(), i = this.api.getHeight(); + t = {x: .2 * e, y: .2 * i, width: .6 * e, height: .6 * i} + } + return t + } + }); + hI.extend({ + type: "dataZoom.inside", + defaultOption: { + disabled: !1, + zoomLock: !1, + zoomOnMouseWheel: !0, + moveOnMouseMove: !0, + moveOnMouseWheel: !1, + preventDefaultMouseMove: !0 + } + }); + var II = "\x00_ec_interaction_mutex"; + Ul({type: "takeGlobalCursor", event: "globalCursorTaken", update: "update"}, function () { + }), c(Ap, bg); + var TI = "\x00_ec_dataZoom_roams", CI = y, AI = uI.extend({ + type: "dataZoom.inside", init: function () { + this._range + }, render: function (t, e, i) { + AI.superApply(this, "render", arguments), this._range = t.getPercentRange(), f(this.getTargetCoordInfo(), function (e, n) { + var r = p(e, function (t) { + return Fp(t.model) + }); + f(e, function (e) { + var a = e.model, o = {}; + f(["pan", "zoom", "scrollMove"], function (t) { + o[t] = CI(DI[t], this, e, n) + }, this), Bp(i, { + coordId: Fp(a), allCoordIds: r, containsPoint: function (t, e, i) { + return a.coordinateSystem.containPoint([e, i]) + }, dataZoomId: t.id, dataZoomModel: t, getRange: o + }) + }, this) + }, this) + }, dispose: function () { + Np(this.api, this.dataZoomModel.id), AI.superApply(this, "dispose", arguments), this._range = null + } + }), DI = { + zoom: function (t, e, i, n) { + var r = this._range, a = r.slice(), o = t.axisModels[0]; + if (o) { + var s = kI[e](null, [n.originX, n.originY], o, i, t), + l = (s.signal > 0 ? s.pixelStart + s.pixelLength - s.pixel : s.pixel - s.pixelStart) / s.pixelLength * (a[1] - a[0]) + a[0], + h = Math.max(1 / n.scale, 0); + a[0] = (a[0] - l) * h + l, a[1] = (a[1] - l) * h + l; + var u = this.dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan(); + return cI(0, a, [0, 100], 0, u.minSpan, u.maxSpan), this._range = a, r[0] !== a[0] || r[1] !== a[1] ? a : void 0 + } + }, pan: Xp(function (t, e, i, n, r, a) { + var o = kI[n]([a.oldX, a.oldY], [a.newX, a.newY], e, r, i); + return o.signal * (t[1] - t[0]) * o.pixel / o.pixelLength + }), scrollMove: Xp(function (t, e, i, n, r, a) { + var o = kI[n]([0, 0], [a.scrollDelta, a.scrollDelta], e, r, i); + return o.signal * (t[1] - t[0]) * a.scrollDelta + }) + }, kI = { + grid: function (t, e, i, n, r) { + var a = i.axis, o = {}, s = r.model.coordinateSystem.getRect(); + return t = t || [0, 0], "x" === a.dim ? (o.pixel = e[0] - t[0], o.pixelLength = s.width, o.pixelStart = s.x, o.signal = a.inverse ? 1 : -1) : (o.pixel = e[1] - t[1], o.pixelLength = s.height, o.pixelStart = s.y, o.signal = a.inverse ? -1 : 1), o + }, polar: function (t, e, i, n, r) { + var a = i.axis, o = {}, s = r.model.coordinateSystem, l = s.getRadiusAxis().getExtent(), + h = s.getAngleAxis().getExtent(); + return t = t ? s.pointToCoord(t) : [0, 0], e = s.pointToCoord(e), "radiusAxis" === i.mainType ? (o.pixel = e[0] - t[0], o.pixelLength = l[1] - l[0], o.pixelStart = l[0], o.signal = a.inverse ? 1 : -1) : (o.pixel = e[1] - t[1], o.pixelLength = h[1] - h[0], o.pixelStart = h[0], o.signal = a.inverse ? -1 : 1), o + }, singleAxis: function (t, e, i, n, r) { + var a = i.axis, o = r.model.coordinateSystem.getRect(), s = {}; + return t = t || [0, 0], "horizontal" === a.orient ? (s.pixel = e[0] - t[0], s.pixelLength = o.width, s.pixelStart = o.x, s.signal = a.inverse ? 1 : -1) : (s.pixel = e[1] - t[1], s.pixelLength = o.height, s.pixelStart = o.y, s.signal = a.inverse ? -1 : 1), s + } + }; + jl({ + getTargetSeries: function (t) { + var e = N(); + return t.eachComponent("dataZoom", function (t) { + t.eachTargetAxis(function (t, i, n) { + var r = n.getAxisProxy(t.name, i); + f(r.getTargetSeriesModels(), function (t) { + e.set(t.uid, t) + }) + }) + }), e + }, modifyOutputEnd: !0, overallReset: function (t, e) { + t.eachComponent("dataZoom", function (t) { + t.eachTargetAxis(function (t, i, n) { + n.getAxisProxy(t.name, i).reset(n, e) + }), t.eachTargetAxis(function (t, i, n) { + n.getAxisProxy(t.name, i).filterData(n, e) + }) + }), t.eachComponent("dataZoom", function (t) { + var e = t.findRepresentativeAxisProxy(), i = e.getDataPercentWindow(), n = e.getDataValueWindow(); + t.setRawRange({start: i[0], end: i[1], startValue: n[0], endValue: n[1]}, !0) + }) + } + }), Ul("dataZoom", function (t, e) { + var i = gp(y(e.eachComponent, e, "dataZoom"), nI, function (t, e) { + return t.get(e.axisIndex) + }), n = []; + e.eachComponent({mainType: "dataZoom", query: t}, function (t) { + n.push.apply(n, i(t).nodes) + }), f(n, function (e) { + e.setRawRange({start: t.start, end: t.end, startValue: t.startValue, endValue: t.endValue}) + }) + }); + var PI, LI = "urn:schemas-microsoft-com:vml", OI = "undefined" == typeof window ? null : window, zI = !1, + EI = OI && OI.document; + if (EI && !tg.canvasSupported) try { + !EI.namespaces.zrvml && EI.namespaces.add("zrvml", LI), PI = function (t) { + return EI.createElement("') + } + } catch (RI) { + PI = function (t) { + return EI.createElement("<" + t + ' xmlns="' + LI + '" class="zrvml">') + } + } + var BI = qm.CMD, NI = Math.round, FI = Math.sqrt, VI = Math.abs, WI = Math.cos, GI = Math.sin, HI = Math.max; + if (!tg.canvasSupported) { + var ZI = ",", XI = "progid:DXImageTransform.Microsoft", YI = 21600, jI = YI / 2, qI = 1e5, UI = 1e3, + $I = function (t) { + t.style.cssText = "position:absolute;left:0;top:0;width:1px;height:1px;", t.coordsize = YI + "," + YI, t.coordorigin = "0,0" + }, KI = function (t) { + return String(t).replace(/&/g, "&").replace(/"/g, """) + }, QI = function (t, e, i) { + return "rgb(" + [t, e, i].join(",") + ")" + }, JI = function (t, e) { + e && t && e.parentNode !== t && t.appendChild(e) + }, tT = function (t, e) { + e && t && e.parentNode === t && t.removeChild(e) + }, eT = function (t, e, i) { + return (parseFloat(t) || 0) * qI + (parseFloat(e) || 0) * UI + i + }, iT = function (t, e) { + return "string" == typeof t ? t.lastIndexOf("%") >= 0 ? parseFloat(t) / 100 * e : parseFloat(t) : t + }, nT = function (t, e, i) { + var n = He(e); + i = +i, isNaN(i) && (i = 1), n && (t.color = QI(n[0], n[1], n[2]), t.opacity = i * n[3]) + }, rT = function (t) { + var e = He(t); + return [QI(e[0], e[1], e[2]), e[3]] + }, aT = function (t, e, i) { + var n = e.fill; + if (null != n) if (n instanceof Ey) { + var r, a = 0, o = [0, 0], s = 0, l = 1, h = i.getBoundingRect(), u = h.width, c = h.height; + if ("linear" === n.type) { + r = "gradient"; + var d = i.transform, f = [n.x * u, n.y * c], p = [n.x2 * u, n.y2 * c]; + d && (ae(f, f, d), ae(p, p, d)); + var g = p[0] - f[0], v = p[1] - f[1]; + a = 180 * Math.atan2(g, v) / Math.PI, 0 > a && (a += 360), 1e-6 > a && (a = 0) + } else { + r = "gradientradial"; + var f = [n.x * u, n.y * c], d = i.transform, m = i.scale, y = u, x = c; + o = [(f[0] - h.x) / y, (f[1] - h.y) / x], d && ae(f, f, d), y /= m[0] * YI, x /= m[1] * YI; + var _ = HI(y, x); + s = 0 / _, l = 2 * n.r / _ - s + } + var w = n.colorStops.slice(); + w.sort(function (t, e) { + return t.offset - e.offset + }); + for (var b = w.length, S = [], M = [], I = 0; b > I; I++) { + var T = w[I], C = rT(T.color); + M.push(T.offset * l + s + " " + C[0]), (0 === I || I === b - 1) && S.push(C) + } + if (b >= 2) { + var A = S[0][0], D = S[1][0], k = S[0][1] * e.opacity, P = S[1][1] * e.opacity; + t.type = r, t.method = "none", t.focus = "100%", t.angle = a, t.color = A, t.color2 = D, t.colors = M.join(","), t.opacity = P, t.opacity2 = k + } + "radial" === r && (t.focusposition = o.join(",")) + } else nT(t, n, e.opacity) + }, oT = function (t, e) { + null != e.lineDash && (t.dashstyle = e.lineDash.join(" ")), null == e.stroke || e.stroke instanceof Ey || nT(t, e.stroke, e.opacity) + }, sT = function (t, e, i, n) { + var r = "fill" == e, a = t.getElementsByTagName(e)[0]; + null != i[e] && "none" !== i[e] && (r || !r && i.lineWidth) ? (t[r ? "filled" : "stroked"] = "true", i[e] instanceof Ey && tT(t, a), a || (a = Yp(e)), r ? aT(a, i, n) : oT(a, i), JI(t, a)) : (t[r ? "filled" : "stroked"] = "false", tT(t, a)) + }, lT = [[], [], []], hT = function (t, e) { + var i, n, r, a, o, s, l = BI.M, h = BI.C, u = BI.L, c = BI.A, d = BI.Q, f = [], p = t.data, g = t.len(); + for (a = 0; g > a;) { + switch (r = p[a++], n = "", i = 0, r) { + case l: + n = " m ", i = 1, o = p[a++], s = p[a++], lT[0][0] = o, lT[0][1] = s; + break; + case u: + n = " l ", i = 1, o = p[a++], s = p[a++], lT[0][0] = o, lT[0][1] = s; + break; + case d: + case h: + n = " c ", i = 3; + var v, m, y = p[a++], x = p[a++], _ = p[a++], w = p[a++]; + r === d ? (v = _, m = w, _ = (_ + 2 * y) / 3, w = (w + 2 * x) / 3, y = (o + 2 * y) / 3, x = (s + 2 * x) / 3) : (v = p[a++], m = p[a++]), lT[0][0] = y, lT[0][1] = x, lT[1][0] = _, lT[1][1] = w, lT[2][0] = v, lT[2][1] = m, o = v, s = m; + break; + case c: + var b = 0, S = 0, M = 1, I = 1, T = 0; + e && (b = e[4], S = e[5], M = FI(e[0] * e[0] + e[1] * e[1]), I = FI(e[2] * e[2] + e[3] * e[3]), T = Math.atan2(-e[1] / I, e[0] / M)); + var C = p[a++], A = p[a++], D = p[a++], k = p[a++], P = p[a++] + T, L = p[a++] + P + T; + a++; + var O = p[a++], z = C + WI(P) * D, E = A + GI(P) * k, y = C + WI(L) * D, x = A + GI(L) * k, + R = O ? " wa " : " at "; + Math.abs(z - y) < 1e-4 && (Math.abs(L - P) > .01 ? O && (z += 270 / YI) : Math.abs(E - A) < 1e-4 ? O && C > z || !O && z > C ? x -= 270 / YI : x += 270 / YI : O && A > E || !O && E > A ? y += 270 / YI : y -= 270 / YI), f.push(R, NI(((C - D) * M + b) * YI - jI), ZI, NI(((A - k) * I + S) * YI - jI), ZI, NI(((C + D) * M + b) * YI - jI), ZI, NI(((A + k) * I + S) * YI - jI), ZI, NI((z * M + b) * YI - jI), ZI, NI((E * I + S) * YI - jI), ZI, NI((y * M + b) * YI - jI), ZI, NI((x * I + S) * YI - jI)), o = y, s = x; + break; + case BI.R: + var B = lT[0], N = lT[1]; + B[0] = p[a++], B[1] = p[a++], N[0] = B[0] + p[a++], N[1] = B[1] + p[a++], e && (ae(B, B, e), ae(N, N, e)), B[0] = NI(B[0] * YI - jI), N[0] = NI(N[0] * YI - jI), B[1] = NI(B[1] * YI - jI), N[1] = NI(N[1] * YI - jI), f.push(" m ", B[0], ZI, B[1], " l ", N[0], ZI, B[1], " l ", N[0], ZI, N[1], " l ", B[0], ZI, N[1]); + break; + case BI.Z: + f.push(" x ") + } + if (i > 0) { + f.push(n); + for (var F = 0; i > F; F++) { + var V = lT[F]; + e && ae(V, V, e), f.push(NI(V[0] * YI - jI), ZI, NI(V[1] * YI - jI), i - 1 > F ? ZI : "") + } + } + } + return f.join("") + }; + Fr.prototype.brushVML = function (t) { + var e = this.style, i = this._vmlEl; + i || (i = Yp("shape"), $I(i), this._vmlEl = i), sT(i, "fill", e, this), sT(i, "stroke", e, this); + var n = this.transform, r = null != n, a = i.getElementsByTagName("stroke")[0]; + if (a) { + var o = e.lineWidth; + if (r && !e.strokeNoScale) { + var s = n[0] * n[3] - n[1] * n[2]; + o *= FI(VI(s)) + } + a.weight = o + "px" + } + var l = this.path || (this.path = new qm); + this.__dirtyPath && (l.beginPath(), this.buildPath(l, this.shape), l.toStatic(), this.__dirtyPath = !1), i.path = hT(l, this.transform), i.style.zIndex = eT(this.zlevel, this.z, this.z2), JI(t, i), null != e.text ? this.drawRectText(t, this.getBoundingRect()) : this.removeRectText(t) + }, Fr.prototype.onRemove = function (t) { + tT(t, this._vmlEl), this.removeRectText(t) + }, Fr.prototype.onAdd = function (t) { + JI(t, this._vmlEl), this.appendRectText(t) + }; + var uT = function (t) { + return "object" == typeof t && t.tagName && "IMG" === t.tagName.toUpperCase() + }; + yn.prototype.brushVML = function (t) { + var e, i, n = this.style, r = n.image; + if (uT(r)) { + var a = r.src; + if (a === this._imageSrc) e = this._imageWidth, i = this._imageHeight; else { + var o = r.runtimeStyle, s = o.width, l = o.height; + o.width = "auto", o.height = "auto", e = r.width, i = r.height, o.width = s, o.height = l, this._imageSrc = a, this._imageWidth = e, this._imageHeight = i + } + r = a + } else r === this._imageSrc && (e = this._imageWidth, i = this._imageHeight); + if (r) { + var h = n.x || 0, u = n.y || 0, c = n.width, d = n.height, f = n.sWidth, p = n.sHeight, g = n.sx || 0, + v = n.sy || 0, m = f && p, y = this._vmlEl; + y || (y = EI.createElement("div"), $I(y), this._vmlEl = y); + var x, _ = y.style, w = !1, b = 1, S = 1; + if (this.transform && (x = this.transform, b = FI(x[0] * x[0] + x[1] * x[1]), S = FI(x[2] * x[2] + x[3] * x[3]), w = x[1] || x[2]), w) { + var M = [h, u], I = [h + c, u], T = [h, u + d], C = [h + c, u + d]; + ae(M, M, x), ae(I, I, x), ae(T, T, x), ae(C, C, x); + var A = HI(M[0], I[0], T[0], C[0]), D = HI(M[1], I[1], T[1], C[1]), k = []; + k.push("M11=", x[0] / b, ZI, "M12=", x[2] / S, ZI, "M21=", x[1] / b, ZI, "M22=", x[3] / S, ZI, "Dx=", NI(h * b + x[4]), ZI, "Dy=", NI(u * S + x[5])), _.padding = "0 " + NI(A) + "px " + NI(D) + "px 0", _.filter = XI + ".Matrix(" + k.join("") + ", SizingMethod=clip)" + } else x && (h = h * b + x[4], u = u * S + x[5]), _.filter = "", _.left = NI(h) + "px", _.top = NI(u) + "px"; + var P = this._imageEl, L = this._cropEl; + P || (P = EI.createElement("div"), this._imageEl = P); + var O = P.style; + if (m) { + if (e && i) O.width = NI(b * e * c / f) + "px", O.height = NI(S * i * d / p) + "px"; else { + var z = new Image, E = this; + z.onload = function () { + z.onload = null, e = z.width, i = z.height, O.width = NI(b * e * c / f) + "px", O.height = NI(S * i * d / p) + "px", E._imageWidth = e, E._imageHeight = i, E._imageSrc = r + }, z.src = r + } + L || (L = EI.createElement("div"), L.style.overflow = "hidden", this._cropEl = L); + var R = L.style; + R.width = NI((c + g * c / f) * b), R.height = NI((d + v * d / p) * S), R.filter = XI + ".Matrix(Dx=" + -g * c / f * b + ",Dy=" + -v * d / p * S + ")", L.parentNode || y.appendChild(L), P.parentNode != L && L.appendChild(P) + } else O.width = NI(b * c) + "px", O.height = NI(S * d) + "px", y.appendChild(P), L && L.parentNode && (y.removeChild(L), this._cropEl = null); + var B = "", N = n.opacity; + 1 > N && (B += ".Alpha(opacity=" + NI(100 * N) + ") "), B += XI + ".AlphaImageLoader(src=" + r + ", SizingMethod=scale)", O.filter = B, y.style.zIndex = eT(this.zlevel, this.z, this.z2), JI(t, y), null != n.text && this.drawRectText(t, this.getBoundingRect()) + } + }, yn.prototype.onRemove = function (t) { + tT(t, this._vmlEl), this._vmlEl = null, this._cropEl = null, this._imageEl = null, this.removeRectText(t) + }, yn.prototype.onAdd = function (t) { + JI(t, this._vmlEl), this.appendRectText(t) + }; + var cT, dT = "normal", fT = {}, pT = 0, gT = 100, vT = document.createElement("div"), mT = function (t) { + var e = fT[t]; + if (!e) { + pT > gT && (pT = 0, fT = {}); + var i, n = vT.style; + try { + n.font = t, i = n.fontFamily.split(",")[0] + } catch (r) { + } + e = { + style: n.fontStyle || dT, + variant: n.fontVariant || dT, + weight: n.fontWeight || dT, + size: 0 | parseFloat(n.fontSize || 12), + family: i || "Microsoft YaHei" + }, fT[t] = e, pT++ + } + return e + }; + Oi("measureText", function (t, e) { + var i = EI; + cT || (cT = i.createElement("div"), cT.style.cssText = "position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;", EI.body.appendChild(cT)); + try { + cT.style.font = e + } catch (n) { + } + return cT.innerHTML = "", cT.appendChild(i.createTextNode(t)), {width: cT.offsetWidth} + }); + for (var yT = new gi, xT = function (t, e, i, n) { + var r = this.style; + this.__dirty && Qi(r, !0); + var a = r.text; + if (null != a && (a += ""), a) { + if (r.rich) { + var o = qi(a, r); + a = []; + for (var s = 0; s < o.lines.length; s++) { + for (var l = o.lines[s].tokens, h = [], u = 0; u < l.length; u++) h.push(l[u].text); + a.push(h.join("")) + } + a = a.join("\n") + } + var c, d, f = r.textAlign, p = r.textVerticalAlign, g = mT(r.font), + v = g.style + " " + g.variant + " " + g.weight + " " + g.size + 'px "' + g.family + '"'; + i = i || Ei(a, v, f, p); + var m = this.transform; + if (m && !n && (yT.copy(e), yT.applyTransform(m), e = yT), n) c = e.x, d = e.y; else { + var y = r.textPosition, x = r.textDistance; + if (y instanceof Array) c = e.x + iT(y[0], e.width), d = e.y + iT(y[1], e.height), f = f || "left"; else { + var _ = Vi(y, e, x); + c = _.x, d = _.y, f = f || _.textAlign, p = p || _.textVerticalAlign + } + } + c = Ni(c, i.width, f), d = Fi(d, i.height, p), d += i.height / 2; + var w, b, S, M = Yp, I = this._textVmlEl; + I ? (S = I.firstChild, w = S.nextSibling, b = w.nextSibling) : (I = M("line"), w = M("path"), b = M("textpath"), S = M("skew"), b.style["v-text-align"] = "left", $I(I), w.textpathok = !0, b.on = !0, I.from = "0 0", I.to = "1000 0.05", JI(I, S), JI(I, w), JI(I, b), this._textVmlEl = I); + var T = [c, d], C = I.style; + m && n ? (ae(T, T, m), S.on = !0, S.matrix = m[0].toFixed(3) + ZI + m[2].toFixed(3) + ZI + m[1].toFixed(3) + ZI + m[3].toFixed(3) + ",0,0", S.offset = (NI(T[0]) || 0) + "," + (NI(T[1]) || 0), S.origin = "0 0", C.left = "0px", C.top = "0px") : (S.on = !1, C.left = NI(c) + "px", C.top = NI(d) + "px"), b.string = KI(a); + try { + b.style.font = v + } catch (A) { + } + sT(I, "fill", {fill: r.textFill, opacity: r.opacity}, this), sT(I, "stroke", { + stroke: r.textStroke, + opacity: r.opacity, + lineDash: r.lineDash + }, this), I.style.zIndex = eT(this.zlevel, this.z, this.z2), JI(t, I) + } + }, _T = function (t) { + tT(t, this._textVmlEl), this._textVmlEl = null + }, wT = function (t) { + JI(t, this._textVmlEl) + }, bT = [Ov, mn, yn, Fr, xy], ST = 0; ST < bT.length; ST++) { + var MT = bT[ST].prototype; + MT.drawRectText = xT, MT.removeRectText = _T, MT.appendRectText = wT + } + xy.prototype.brushVML = function (t) { + var e = this.style; + null != e.text ? this.drawRectText(t, { + x: e.x || 0, + y: e.y || 0, + width: 0, + height: 0 + }, this.getBoundingRect(), !0) : this.removeRectText(t) + }, xy.prototype.onRemove = function (t) { + this.removeRectText(t) + }, xy.prototype.onAdd = function (t) { + this.appendRectText(t) + } + } + Up.prototype = { + constructor: Up, getType: function () { + return "vml" + }, getViewportRoot: function () { + return this._vmlViewport + }, getViewportRootOffset: function () { + var t = this.getViewportRoot(); + return t ? {offsetLeft: t.offsetLeft || 0, offsetTop: t.offsetTop || 0} : void 0 + }, refresh: function () { + var t = this.storage.getDisplayList(!0, !0); + this._paintList(t) + }, _paintList: function (t) { + for (var e = this._vmlRoot, i = 0; i < t.length; i++) { + var n = t[i]; + n.invisible || n.ignore ? (n.__alreadyNotVisible || n.onRemove(e), n.__alreadyNotVisible = !0) : (n.__alreadyNotVisible && n.onAdd(e), n.__alreadyNotVisible = !1, n.__dirty && (n.beforeBrush && n.beforeBrush(), (n.brushVML || n.brush).call(n, e), n.afterBrush && n.afterBrush())), n.__dirty = !1 + } + this._firstPaint && (this._vmlViewport.appendChild(e), this._firstPaint = !1) + }, resize: function (t, e) { + var t = null == t ? this._getWidth() : t, e = null == e ? this._getHeight() : e; + if (this._width != t || this._height != e) { + this._width = t, this._height = e; + var i = this._vmlViewport.style; + i.width = t + "px", i.height = e + "px" + } + }, dispose: function () { + this.root.innerHTML = "", this._vmlRoot = this._vmlViewport = this.storage = null + }, getWidth: function () { + return this._width + }, getHeight: function () { + return this._height + }, clear: function () { + this._vmlViewport && this.root.removeChild(this._vmlViewport) + }, _getWidth: function () { + var t = this.root, e = t.currentStyle; + return (t.clientWidth || qp(e.width)) - qp(e.paddingLeft) - qp(e.paddingRight) | 0 + }, _getHeight: function () { + var t = this.root, e = t.currentStyle; + return (t.clientHeight || qp(e.height)) - qp(e.paddingTop) - qp(e.paddingBottom) | 0 + } + }, f(["getLayer", "insertLayer", "eachLayer", "eachBuiltinLayer", "eachOtherLayer", "getLayers", "modLayer", "delLayer", "clearLayer", "toDataURL", "pathToImage"], function (t) { + Up.prototype[t] = $p(t) + }), Rn("vml", Up), t.version = $_, t.dependencies = K_, t.PRIORITY = ow, t.init = Fl, t.connect = Vl, t.disConnect = Wl, t.disconnect = Tw, t.dispose = Gl, t.getInstanceByDom = Hl, t.getInstanceById = Zl, t.registerTheme = Xl, t.registerPreprocessor = Yl, t.registerProcessor = jl, t.registerPostUpdate = ql, t.registerAction = Ul, t.registerCoordinateSystem = $l, t.getCoordinateSystemDimensions = Kl, t.registerLayout = Ql, t.registerVisual = Jl, t.registerLoading = eh, t.extendComponentModel = ih, t.extendComponentView = nh, t.extendSeriesModel = rh, t.extendChartView = ah, t.setCanvasCreator = oh, t.registerMap = sh, t.getMap = lh, t.dataTool = Cw, t.zrender = im, t.number = nx, t.format = cx, t.throttle = Gs, t.helper = Tb, t.matrix = kg, t.vector = _g, t.color = Ug, t.parseGeoJSON = Ab, t.parseGeoJson = Lb, t.util = Ob, t.graphic = zb, t.List = Bw, t.Model = Wa, t.Axis = Pb, t.env = tg +}); + +layui.define('echartsTheme', function (exports) { echarts.registerTheme('walden', layui.echartsTheme); exports('echarts', echarts); }); \ No newline at end of file diff --git a/src/main/resources/static/js/lay-module/echarts/echartsTheme.js b/src/main/resources/static/js/lay-module/echarts/echartsTheme.js index f6452041..a11e5f65 100644 --- a/src/main/resources/static/js/lay-module/echarts/echartsTheme.js +++ b/src/main/resources/static/js/lay-module/echarts/echartsTheme.js @@ -1,4 +1,4 @@ -layui.define(function(exports) { +layui.define(function (exports) { exports('echartsTheme', { "color": [ diff --git a/src/main/resources/static/js/lay-module/layarea/layarea.js b/src/main/resources/static/js/lay-module/layarea/layarea.js index d62e3846..aeb5b6dc 100644 --- a/src/main/resources/static/js/lay-module/layarea/layarea.js +++ b/src/main/resources/static/js/lay-module/layarea/layarea.js @@ -3826,7 +3826,8 @@ layui.define(['layer', 'form', 'laytpl'], function (exports) { cityCode: 0, countyCode: 0, }, - change: function(result){} + change: function (result) { + } }; Class.prototype.index = 0; @@ -3850,13 +3851,13 @@ layui.define(['layer', 'form', 'laytpl'], function (exports) { let countyEl = options.elem.find('.county-selector'); //filter - if(provinceEl.attr('lay-filter')){ + if (provinceEl.attr('lay-filter')) { provinceFilter = provinceEl.attr('lay-filter'); } - if(cityEl.attr('lay-filter')){ + if (cityEl.attr('lay-filter')) { cityFilter = cityEl.attr('lay-filter'); } - if(countyEl.attr('lay-filter')){ + if (countyEl.attr('lay-filter')) { countyFilter = countyEl.attr('lay-filter'); } provinceEl.attr('lay-filter', provinceFilter); @@ -3864,16 +3865,16 @@ layui.define(['layer', 'form', 'laytpl'], function (exports) { countyEl.attr('lay-filter', countyFilter); //获取默认值 - if(provinceEl.data('value')){ + if (provinceEl.data('value')) { options.data.province = provinceEl.data('value'); options.data.provinceCode = getCode('province', options.data.province); } - if(cityEl.data('value')){ + if (cityEl.data('value')) { options.data.city = cityEl.data('value'); let code = getCode('city', options.data.city, options.data.provinceCode.slice(0, 2)); options.data.cityCode = code; } - if(countyEl.data('value')){ + if (countyEl.data('value')) { options.data.county = countyEl.data('value'); options.data.countyCode = getCode('county', options.data.county, options.data.cityCode.slice(0, 4)); } @@ -3882,25 +3883,25 @@ layui.define(['layer', 'form', 'laytpl'], function (exports) { countyEl.attr('lay-filter', countyFilter); //监听结果 - form.on('select('+provinceFilter+')', function(data){ + form.on('select(' + provinceFilter + ')', function (data) { options.data.province = data.value; options.data.provinceCode = getCode('province', data.value); renderCity(options.data.provinceCode); options.change(options.data); }); - form.on('select('+cityFilter+')', function(data){ + form.on('select(' + cityFilter + ')', function (data) { options.data.city = data.value; - if(options.data.provinceCode){ + if (options.data.provinceCode) { options.data.cityCode = getCode('city', data.value, options.data.provinceCode.slice(0, 2)); renderCounty(options.data.cityCode); } options.change(options.data); }); - form.on('select('+countyFilter+')', function(data){ + form.on('select(' + countyFilter + ')', function (data) { options.data.county = data.value; - if(options.data.cityCode){ + if (options.data.cityCode) { options.data.countyCode = getCode('county', data.value, options.data.cityCode.slice(0, 4)); } options.change(options.data); @@ -3909,21 +3910,21 @@ layui.define(['layer', 'form', 'laytpl'], function (exports) { renderProvince(); //查找province - function renderProvince(){ + function renderProvince() { let tpl = ''; let provinceList = getList("province"); let currentCode = ''; let currentName = ''; - provinceList.forEach(function(_item){ + provinceList.forEach(function (_item) { // if (!currentCode){ // currentCode = _item.code; // currentName = _item.name; // } - if(_item.name === options.data.province){ + if (_item.name === options.data.province) { currentCode = _item.code; currentName = _item.name; } - tpl += ''; + tpl += ''; }); provinceEl.html(tpl); provinceEl.val(options.data.province); @@ -3931,21 +3932,21 @@ layui.define(['layer', 'form', 'laytpl'], function (exports) { renderCity(currentCode); } - function renderCity(provinceCode){ + function renderCity(provinceCode) { let tpl = ''; let cityList = getList('city', provinceCode.slice(0, 2)); let currentCode = ''; let currentName = ''; - cityList.forEach(function(_item){ + cityList.forEach(function (_item) { // if (!currentCode){ // currentCode = _item.code; // currentName = _item.name; // } - if(_item.name === options.data.city){ + if (_item.name === options.data.city) { currentCode = _item.code; currentName = _item.name; } - tpl += ''; + tpl += ''; }); options.data.city = currentName; cityEl.html(tpl); @@ -3954,21 +3955,21 @@ layui.define(['layer', 'form', 'laytpl'], function (exports) { renderCounty(currentCode); } - function renderCounty(cityCode){ + function renderCounty(cityCode) { let tpl = ''; let countyList = getList('county', cityCode.slice(0, 4)); let currentCode = ''; let currentName = ''; - countyList.forEach(function(_item){ + countyList.forEach(function (_item) { // if (!currentCode){ // currentCode = _item.code; // currentName = _item.name; // } - if(_item.name === options.data.county){ + if (_item.name === options.data.county) { currentCode = _item.code; currentName = _item.name; } - tpl += ''; + tpl += ''; }); options.data.county = currentName; countyEl.html(tpl); @@ -4006,21 +4007,21 @@ layui.define(['layer', 'form', 'laytpl'], function (exports) { return result; } - function getCode(type, name, parentCode = 0){ + function getCode(type, name, parentCode = 0) { let code = ''; let list = areaList[type + "_list"] || {}; let result = {}; Object.keys(list).map(function (_code) { - if(parentCode){ - if(_code.indexOf(parentCode) === 0){ + if (parentCode) { + if (_code.indexOf(parentCode) === 0) { result[_code] = list[_code]; } - }else{ + } else { result[_code] = list[_code]; } }); - layui.each(result, function(_code, _name){ - if(_name === name){ + layui.each(result, function (_code, _name) { + if (_name === name) { code = _code; } }); diff --git a/src/main/resources/static/js/lay-module/layuimini/miniAdmin.js b/src/main/resources/static/js/lay-module/layuimini/miniAdmin.js index 08b4b6b8..3811c916 100644 --- a/src/main/resources/static/js/lay-module/layuimini/miniAdmin.js +++ b/src/main/resources/static/js/lay-module/layuimini/miniAdmin.js @@ -4,12 +4,12 @@ * version:2.0 * description:layuimini 主体框架扩展 */ -layui.define(["jquery", "miniMenu", "element","miniTab", "miniTheme"], function (exports) { +layui.define(["jquery", "miniMenu", "element", "miniTab", "miniTheme"], function (exports) { var $ = layui.$, layer = layui.layer, miniMenu = layui.miniMenu, miniTheme = layui.miniTheme, - element = layui.element , + element = layui.element, miniTab = layui.miniTab; if (!/http(s*):\/\//.test(location.href)) { @@ -103,7 +103,7 @@ layui.define(["jquery", "miniMenu", "element","miniTab", "miniTheme"], function * @param clearUrl */ renderClear: function (clearUrl) { - $('.layuimini-clear').attr('data-href',clearUrl); + $('.layuimini-clear').attr('data-href', clearUrl); }, /** @@ -170,7 +170,7 @@ layui.define(["jquery", "miniMenu", "element","miniTab", "miniTheme"], function el.msExitFullscreen(); } else if (el.oRequestFullscreen) { el.oCancelFullScreen(); - }else if (el.mozCancelFullScreen) { + } else if (el.mozCancelFullScreen) { el.mozCancelFullScreen(); } else if (el.webkitCancelFullScreen) { el.webkitCancelFullScreen(); @@ -290,14 +290,14 @@ layui.define(["jquery", "miniMenu", "element","miniTab", "miniTheme"], function tips = $(this).prop("innerHTML"), isShow = $('.layuimini-tool i').attr('data-side-fold'); if (isShow == 0 && tips) { - tips = "
  • "+tips+"
" ; + tips = "
  • " + tips + "
"; window.openTips = layer.tips(tips, $(this), { tips: [2, '#2f4056'], time: 300000, - skin:"popup-tips", - success:function (el) { - var left = $(el).position().left - 10 ; - $(el).css({ left:left }); + skin: "popup-tips", + success: function (el) { + var left = $(el).position().left - 10; + $(el).css({left: left}); element.render(); } }); diff --git a/src/main/resources/static/js/lay-module/layuimini/miniMenu.js b/src/main/resources/static/js/lay-module/layuimini/miniMenu.js index 507eae35..7cd34c2a 100644 --- a/src/main/resources/static/js/lay-module/layuimini/miniMenu.js +++ b/src/main/resources/static/js/lay-module/layuimini/miniMenu.js @@ -4,7 +4,7 @@ * version:2.0 * description:layuimini 菜单框架扩展 */ -layui.define(["element","laytpl" ,"jquery"], function (exports) { +layui.define(["element", "laytpl", "jquery"], function (exports) { var element = layui.element, $ = layui.$, laytpl = layui.laytpl, @@ -40,9 +40,9 @@ layui.define(["element","laytpl" ,"jquery"], function (exports) { var leftMenuHtml = '', childOpenClass = '', leftMenuCheckDefault = 'layui-this'; - var me = this ; + var me = this; if (menuChildOpen) childOpenClass = ' layui-nav-itemed'; - leftMenuHtml = this.renderLeftMenu(menuList,{ childOpenClass:childOpenClass }) ; + leftMenuHtml = this.renderLeftMenu(menuList, {childOpenClass: childOpenClass}); $('.layui-layout-body').addClass('layuimini-single-module'); //单模块标识 $('.layuimini-header-menu').remove(); $('.layuimini-menu-left').html(leftMenuHtml); @@ -53,49 +53,49 @@ layui.define(["element","laytpl" ,"jquery"], function (exports) { /** * 渲染一级菜单 */ - compileMenu: function(menu,isSub){ - var menuHtml = '' ; - if(isSub){ + compileMenu: function (menu, isSub) { + var menuHtml = ''; + if (isSub) { menuHtml = '' } return laytpl(menuHtml).render(menu); }, - compileMenuContainer :function(menu,isSub){ - var wrapperHtml = '
    {{d.children}}
' ; - if(isSub){ - wrapperHtml = '
{{d.children}}
' ; + compileMenuContainer: function (menu, isSub) { + var wrapperHtml = '
    {{d.children}}
'; + if (isSub) { + wrapperHtml = '
{{d.children}}
'; } - if(!menu.children){ + if (!menu.children) { return ""; } return laytpl(wrapperHtml).render(menu); }, - each:function(list,callback){ + each: function (list, callback) { var _list = []; - for(var i = 0 ,length = list.length ; i' + options.title + '' //用于演示 - , content: '' - , id: options.tabId + , + content: '' + , + id: options.tabId }); $('.layuimini-menu-left').attr('layuimini-tab-tag', 'add'); sessionStorage.setItem('layuiminimenu_' + options.tabId, options.title); @@ -404,10 +406,10 @@ layui.define(["element", "layer", "jquery"], function (exports) { options.menuList = options.menuList || []; if (!options.urlHashLocation) return false; var tabId = location.hash.replace(/^#\//, ''); - if (tabId === null || tabId === undefined || tabId ==='') return false; + if (tabId === null || tabId === undefined || tabId === '') return false; // 判断是否为首页 - if(tabId ===options.homeInfo.href) return false; + if (tabId === options.homeInfo.href) return false; // 判断是否为右侧菜单 var menu = miniTab.searchMenu(tabId, options.menuList); diff --git a/src/main/resources/static/js/lay-module/layuimini/miniTheme.js b/src/main/resources/static/js/lay-module/layuimini/miniTheme.js index 817907b0..aea19eb6 100644 --- a/src/main/resources/static/js/lay-module/layuimini/miniTheme.js +++ b/src/main/resources/static/js/lay-module/layuimini/miniTheme.js @@ -307,7 +307,7 @@ layui.define(["jquery", "layer"], function (exports) { '/**头部右侧下拉字体颜色 headerRightChildColor */\n' + '.layui-layout-admin .layui-header .layui-nav .layui-nav-item .layui-nav-child a {\n' + ' color: ' + bgcolorData.headerRightChildColor + '!important;\n' + - '}\n'+ + '}\n' + '\n' + '/*头部右侧鼠标选中 headerRightColorThis */\n' + '.layui-header .layuimini-menu-header-pc.layui-nav .layui-nav-item a:hover, .layui-header .layuimini-header-menu.layuimini-pc-show.layui-nav .layui-this a {\n' + diff --git a/src/main/resources/static/js/lay-module/layuimini/miniTongji.js b/src/main/resources/static/js/lay-module/layuimini/miniTongji.js index f0ca1016..9ef1f58a 100644 --- a/src/main/resources/static/js/lay-module/layuimini/miniTongji.js +++ b/src/main/resources/static/js/lay-module/layuimini/miniTongji.js @@ -17,7 +17,7 @@ layui.define(["jquery"], function (exports) { options.specific = options.specific || false; options.domains = options.domains || []; var domain = window.location.hostname; - if (options.specific === false || (options.specific === true && options.domains.indexOf(domain) >=0)) { + if (options.specific === false || (options.specific === true && options.domains.indexOf(domain) >= 0)) { miniTongji.listen(); } }, diff --git a/src/main/resources/static/js/lay-module/step-lay/step.js b/src/main/resources/static/js/lay-module/step-lay/step.js index a07c8ff5..51082e1a 100644 --- a/src/main/resources/static/js/lay-module/step-lay/step.js +++ b/src/main/resources/static/js/lay-module/step-lay/step.js @@ -4,7 +4,7 @@ var carousel = layui.carousel; // 添加步骤条dom节点 - var renderDom = function (elem, stepItems, position,newnumber) { + var renderDom = function (elem, stepItems, position, newnumber) { var stepDiv = '
'; for (var i = 0; i < stepItems.length; i++) { stepDiv += '
'; @@ -19,8 +19,8 @@ // 数字 var number = stepItems[i].number; - if(newnumber != 0){ - number = newnumber; + if (newnumber != 0) { + number = newnumber; } if (!number) { number = i + 1; @@ -73,7 +73,7 @@ // 渲染步骤条 var stepItems = param.stepItems; - renderDom(param.elem, stepItems, param.position||0,param.number); + renderDom(param.elem, stepItems, param.position || 0, param.number); $('.lay-step').css('width', param.stepWidth); //监听轮播切换事件 diff --git a/src/main/resources/static/js/lay-module/tableSelect/tableSelect.js b/src/main/resources/static/js/lay-module/tableSelect/tableSelect.js index 84acc3db..a6fb3d14 100644 --- a/src/main/resources/static/js/lay-module/tableSelect/tableSelect.js +++ b/src/main/resources/static/js/lay-module/tableSelect/tableSelect.js @@ -14,7 +14,8 @@ layui.define(['table', 'jquery', 'form'], function (exports) { */ tableSelect.prototype.render = function (opt) { var elem = $(opt.elem); - var tableDone = opt.table.done || function(){}; + var tableDone = opt.table.done || function () { + }; //默认设置 opt.searchKey = opt.searchKey || 'keyword'; @@ -30,34 +31,34 @@ layui.define(['table', 'jquery', 'form'], function (exports) { opt.searchType = opt.searchType || 'one'; opt.searchList = opt.searchList || [{key: opt.searchKey, placeholder: opt.searchPlaceholder}]; - elem.off('click').on('click', function(e) { + elem.off('click').on('click', function (e) { e.stopPropagation(); - if($('div.tableSelect').length >= 1){ + if ($('div.tableSelect').length >= 1) { return false; } - var t = elem.offset().top + elem.outerHeight()+"px"; - var l = elem.offset().left +"px"; + var t = elem.offset().top + elem.outerHeight() + "px"; + var l = elem.offset().left + "px"; var tableName = "tableSelect_table_" + new Date().getTime(); - var tableBox = '
'; + var tableBox = '
'; tableBox += '
'; tableBox += '
'; //判断是否多搜索条件 - if(opt.searchType == 'more'){ + if (opt.searchType == 'more') { $.each(opt.searchList, function (index, item) { - tableBox += ''; + tableBox += ''; }); - }else{ - tableBox += ''; + } else { + tableBox += ''; } tableBox += ''; tableBox += '
'; tableBox += ''; tableBox += '
'; - tableBox += '
'; + tableBox += '
'; tableBox += '
'; tableBox = $(tableBox); $('body').append(tableBox); @@ -66,9 +67,9 @@ layui.define(['table', 'jquery', 'form'], function (exports) { var checkedData = []; //渲染TABLE - opt.table.elem = "#"+tableName; + opt.table.elem = "#" + tableName; opt.table.id = tableName; - opt.table.done = function(res, curr, count){ + opt.table.done = function (res, curr, count) { defaultChecked(res, curr, count); setChecked(res, curr, count); tableDone(res, curr, count); @@ -76,82 +77,83 @@ layui.define(['table', 'jquery', 'form'], function (exports) { var tableSelect_table = table.render(opt.table); //分页选中保存数组 - table.on('radio('+tableName+')', function(obj){ - if(opt.checkedKey){ + table.on('radio(' + tableName + ')', function (obj) { + if (opt.checkedKey) { checkedData = table.checkStatus(tableName).data } updataButton(table.checkStatus(tableName).data.length) }) - table.on('checkbox('+tableName+')', function(obj){ - if(opt.checkedKey){ - if(obj.checked){ - for (var i=0;i $(window).height(); var overWidth = (elem.offset().left + tableBox.outerWidth()) > $(window).width(); - overHeight && tableBox.css({'top':'auto','bottom':'0px'}); - overWidth && tableBox.css({'left':'auto','right':'5px'}) + overHeight && tableBox.css({'top': 'auto', 'bottom': '0px'}); + overWidth && tableBox.css({'left': 'auto', 'right': '5px'}) //关键词搜索 - form.on('submit(tableSelect_btn_search)', function(data){ + form.on('submit(tableSelect_btn_search)', function (data) { tableSelect_table.reload({ where: data.field, page: { @@ -210,28 +212,28 @@ layui.define(['table', 'jquery', 'form'], function (exports) { }); //双击行选中 - table.on('rowDouble('+tableName+')', function(obj){ - var checkStatus = {data:[obj.data]}; + table.on('rowDouble(' + tableName + ')', function (obj) { + var checkStatus = {data: [obj.data]}; selectDone(checkStatus); }) //按钮选中 - tableBox.find('.tableSelect_btn_select').on('click', function() { + tableBox.find('.tableSelect_btn_select').on('click', function () { var checkStatus = table.checkStatus(tableName); - if(checkedData.length > 1){ + if (checkedData.length > 1) { checkStatus.data = checkedData; } selectDone(checkStatus); }) //写值回调和关闭 - function selectDone (checkStatus){ - if(opt.checkedKey){ + function selectDone(checkStatus) { + if (opt.checkedKey) { var selected = []; - for(var i=0;i= 0 && matches.item(i) !== this) {} - return i > -1; - }; - } -}; + // IE 中兼容 Element.prototype.matches + if (!Element.prototype.matches) { + Element.prototype.matches = Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector || function (s) { + var matches = (this.document || this.ownerDocument).querySelectorAll(s), + i = matches.length; + while (--i >= 0 && matches.item(i) !== this) { + } + return i > -1; + }; + } + }; -/* + /* DOM 操作 API */ // 根据 html 代码片段创建 dom 对象 -function createElemByHTML(html) { - var div = void 0; - div = document.createElement('div'); - div.innerHTML = html; - return div.children; -} + function createElemByHTML(html) { + var div = void 0; + div = document.createElement('div'); + div.innerHTML = html; + return div.children; + } // 是否是 DOM List -function isDOMList(selector) { - if (!selector) { + function isDOMList(selector) { + if (!selector) { + return false; + } + if (selector instanceof HTMLCollection || selector instanceof NodeList) { + return true; + } return false; } - if (selector instanceof HTMLCollection || selector instanceof NodeList) { - return true; - } - return false; -} // 封装 document.querySelectorAll -function querySelectorAll(selector) { - var result = document.querySelectorAll(selector); - if (isDOMList(result)) { - return result; - } else { - return [result]; + function querySelectorAll(selector) { + var result = document.querySelectorAll(selector); + if (isDOMList(result)) { + return result; + } else { + return [result]; + } } -} // 记录所有的事件绑定 -var eventList = []; + var eventList = []; // 创建构造函数 -function DomElement(selector) { - if (!selector) { - return; - } - - // selector 本来就是 DomElement 对象,直接返回 - if (selector instanceof DomElement) { - return selector; - } + function DomElement(selector) { + if (!selector) { + return; + } - this.selector = selector; - var nodeType = selector.nodeType; - - // 根据 selector 得出的结果(如 DOM,DOM List) - var selectorResult = []; - if (nodeType === 9) { - // document 节点 - selectorResult = [selector]; - } else if (nodeType === 1) { - // 单个 DOM 节点 - selectorResult = [selector]; - } else if (isDOMList(selector) || selector instanceof Array) { - // DOM List 或者数组 - selectorResult = selector; - } else if (typeof selector === 'string') { - // 字符串 - selector = selector.replace('/\n/mg', '').trim(); - if (selector.indexOf('<') === 0) { - // 如
- selectorResult = createElemByHTML(selector); - } else { - // 如 #id .class - selectorResult = querySelectorAll(selector); + // selector 本来就是 DomElement 对象,直接返回 + if (selector instanceof DomElement) { + return selector; + } + + this.selector = selector; + var nodeType = selector.nodeType; + + // 根据 selector 得出的结果(如 DOM,DOM List) + var selectorResult = []; + if (nodeType === 9) { + // document 节点 + selectorResult = [selector]; + } else if (nodeType === 1) { + // 单个 DOM 节点 + selectorResult = [selector]; + } else if (isDOMList(selector) || selector instanceof Array) { + // DOM List 或者数组 + selectorResult = selector; + } else if (typeof selector === 'string') { + // 字符串 + selector = selector.replace('/\n/mg', '').trim(); + if (selector.indexOf('<') === 0) { + // 如
+ selectorResult = createElemByHTML(selector); + } else { + // 如 #id .class + selectorResult = querySelectorAll(selector); + } } - } - var length = selectorResult.length; - if (!length) { - // 空数组 - return this; - } + var length = selectorResult.length; + if (!length) { + // 空数组 + return this; + } - // 加入 DOM 节点 - var i = void 0; - for (i = 0; i < length; i++) { - this[i] = selectorResult[i]; + // 加入 DOM 节点 + var i = void 0; + for (i = 0; i < length; i++) { + this[i] = selectorResult[i]; + } + this.length = length; } - this.length = length; -} // 修改原型 -DomElement.prototype = { - constructor: DomElement, + DomElement.prototype = { + constructor: DomElement, + + // 类数组,forEach + forEach: function forEach(fn) { + var i = void 0; + for (i = 0; i < this.length; i++) { + var elem = this[i]; + var result = fn.call(elem, elem, i); + if (result === false) { + break; + } + } + return this; + }, - // 类数组,forEach - forEach: function forEach(fn) { - var i = void 0; - for (i = 0; i < this.length; i++) { - var elem = this[i]; - var result = fn.call(elem, elem, i); - if (result === false) { - break; + // clone + clone: function clone(deep) { + var cloneList = []; + this.forEach(function (elem) { + cloneList.push(elem.cloneNode(!!deep)); + }); + return $(cloneList); + }, + + // 获取第几个元素 + get: function get(index) { + var length = this.length; + if (index >= length) { + index = index % length; } - } - return this; - }, - - // clone - clone: function clone(deep) { - var cloneList = []; - this.forEach(function (elem) { - cloneList.push(elem.cloneNode(!!deep)); - }); - return $(cloneList); - }, - - // 获取第几个元素 - get: function get(index) { - var length = this.length; - if (index >= length) { - index = index % length; - } - return $(this[index]); - }, - - // 第一个 - first: function first() { - return this.get(0); - }, - - // 最后一个 - last: function last() { - var length = this.length; - return this.get(length - 1); - }, - - // 绑定事件 - on: function on(type, selector, fn) { - // selector 不为空,证明绑定事件要加代理 - if (!fn) { - fn = selector; - selector = null; - } + return $(this[index]); + }, - // type 是否有多个 - var types = []; - types = type.split(/\s+/); + // 第一个 + first: function first() { + return this.get(0); + }, - return this.forEach(function (elem) { - types.forEach(function (type) { - if (!type) { - return; - } + // 最后一个 + last: function last() { + var length = this.length; + return this.get(length - 1); + }, - // 记录下,方便后面解绑 - eventList.push({ - elem: elem, - type: type, - fn: fn - }); + // 绑定事件 + on: function on(type, selector, fn) { + // selector 不为空,证明绑定事件要加代理 + if (!fn) { + fn = selector; + selector = null; + } - if (!selector) { - // 无代理 - elem.addEventListener(type, fn); - return; - } + // type 是否有多个 + var types = []; + types = type.split(/\s+/); + + return this.forEach(function (elem) { + types.forEach(function (type) { + if (!type) { + return; + } + + // 记录下,方便后面解绑 + eventList.push({ + elem: elem, + type: type, + fn: fn + }); - // 有代理 - elem.addEventListener(type, function (e) { - var target = e.target; - if (target.matches(selector)) { - fn.call(target, e); + if (!selector) { + // 无代理 + elem.addEventListener(type, fn); + return; } + + // 有代理 + elem.addEventListener(type, function (e) { + var target = e.target; + if (target.matches(selector)) { + fn.call(target, e); + } + }); }); }); - }); - }, - - // 取消事件绑定 - off: function off(type, fn) { - return this.forEach(function (elem) { - elem.removeEventListener(type, fn); - }); - }, + }, - // 获取/设置 属性 - attr: function attr(key, val) { - if (val == null) { - // 获取值 - return this[0].getAttribute(key); - } else { - // 设置值 + // 取消事件绑定 + off: function off(type, fn) { return this.forEach(function (elem) { - elem.setAttribute(key, val); + elem.removeEventListener(type, fn); }); - } - }, + }, - // 添加 class - addClass: function addClass(className) { - if (!className) { - return this; - } - return this.forEach(function (elem) { - var arr = void 0; - if (elem.className) { - // 解析当前 className 转换为数组 - arr = elem.className.split(/\s/); - arr = arr.filter(function (item) { - return !!item.trim(); - }); - // 添加 class - if (arr.indexOf(className) < 0) { - arr.push(className); - } - // 修改 elem.class - elem.className = arr.join(' '); + // 获取/设置 属性 + attr: function attr(key, val) { + if (val == null) { + // 获取值 + return this[0].getAttribute(key); } else { - elem.className = className; + // 设置值 + return this.forEach(function (elem) { + elem.setAttribute(key, val); + }); } - }); - }, + }, - // 删除 class - removeClass: function removeClass(className) { - if (!className) { - return this; - } - return this.forEach(function (elem) { - var arr = void 0; - if (elem.className) { - // 解析当前 className 转换为数组 - arr = elem.className.split(/\s/); - arr = arr.filter(function (item) { - item = item.trim(); - // 删除 class - if (!item || item === className) { - return false; - } - return true; - }); - // 修改 elem.class - elem.className = arr.join(' '); + // 添加 class + addClass: function addClass(className) { + if (!className) { + return this; } - }); - }, - - // 修改 css - css: function css(key, val) { - var currentStyle = key + ':' + val + ';'; - return this.forEach(function (elem) { - var style = (elem.getAttribute('style') || '').trim(); - var styleArr = void 0, - resultArr = []; - if (style) { - // 将 style 按照 ; 拆分为数组 - styleArr = style.split(';'); - styleArr.forEach(function (item) { - // 对每项样式,按照 : 拆分为 key 和 value - var arr = item.split(':').map(function (i) { - return i.trim(); + return this.forEach(function (elem) { + var arr = void 0; + if (elem.className) { + // 解析当前 className 转换为数组 + arr = elem.className.split(/\s/); + arr = arr.filter(function (item) { + return !!item.trim(); }); - if (arr.length === 2) { - resultArr.push(arr[0] + ':' + arr[1]); + // 添加 class + if (arr.indexOf(className) < 0) { + arr.push(className); } - }); - // 替换或者新增 - resultArr = resultArr.map(function (item) { - if (item.indexOf(key) === 0) { - return currentStyle; - } else { - return item; + // 修改 elem.class + elem.className = arr.join(' '); + } else { + elem.className = className; + } + }); + }, + + // 删除 class + removeClass: function removeClass(className) { + if (!className) { + return this; + } + return this.forEach(function (elem) { + var arr = void 0; + if (elem.className) { + // 解析当前 className 转换为数组 + arr = elem.className.split(/\s/); + arr = arr.filter(function (item) { + item = item.trim(); + // 删除 class + if (!item || item === className) { + return false; + } + return true; + }); + // 修改 elem.class + elem.className = arr.join(' '); + } + }); + }, + + // 修改 css + css: function css(key, val) { + var currentStyle = key + ':' + val + ';'; + return this.forEach(function (elem) { + var style = (elem.getAttribute('style') || '').trim(); + var styleArr = void 0, + resultArr = []; + if (style) { + // 将 style 按照 ; 拆分为数组 + styleArr = style.split(';'); + styleArr.forEach(function (item) { + // 对每项样式,按照 : 拆分为 key 和 value + var arr = item.split(':').map(function (i) { + return i.trim(); + }); + if (arr.length === 2) { + resultArr.push(arr[0] + ':' + arr[1]); + } + }); + // 替换或者新增 + resultArr = resultArr.map(function (item) { + if (item.indexOf(key) === 0) { + return currentStyle; + } else { + return item; + } + }); + if (resultArr.indexOf(currentStyle) < 0) { + resultArr.push(currentStyle); } - }); - if (resultArr.indexOf(currentStyle) < 0) { - resultArr.push(currentStyle); + // 结果 + elem.setAttribute('style', resultArr.join('; ')); + } else { + // style 无值 + elem.setAttribute('style', currentStyle); } - // 结果 - elem.setAttribute('style', resultArr.join('; ')); - } else { - // style 无值 - elem.setAttribute('style', currentStyle); + }); + }, + + // 显示 + show: function show() { + return this.css('display', 'block'); + }, + + // 隐藏 + hide: function hide() { + return this.css('display', 'none'); + }, + + // 获取子节点 + children: function children() { + var elem = this[0]; + if (!elem) { + return null; } - }); - }, - - // 显示 - show: function show() { - return this.css('display', 'block'); - }, - - // 隐藏 - hide: function hide() { - return this.css('display', 'none'); - }, - - // 获取子节点 - children: function children() { - var elem = this[0]; - if (!elem) { - return null; - } - return $(elem.children); - }, + return $(elem.children); + }, - // 获取子节点(包括文本节点) - childNodes: function childNodes() { - var elem = this[0]; - if (!elem) { - return null; - } + // 获取子节点(包括文本节点) + childNodes: function childNodes() { + var elem = this[0]; + if (!elem) { + return null; + } - return $(elem.childNodes); - }, + return $(elem.childNodes); + }, - // 增加子节点 - append: function append($children) { - return this.forEach(function (elem) { - $children.forEach(function (child) { - elem.appendChild(child); + // 增加子节点 + append: function append($children) { + return this.forEach(function (elem) { + $children.forEach(function (child) { + elem.appendChild(child); + }); }); - }); - }, + }, + + // 移除当前节点 + remove: function remove() { + return this.forEach(function (elem) { + if (elem.remove) { + elem.remove(); + } else { + var parent = elem.parentElement; + parent && parent.removeChild(elem); + } + }); + }, + + // 是否包含某个子节点 + isContain: function isContain($child) { + var elem = this[0]; + var child = $child[0]; + return elem.contains(child); + }, + + // 尺寸数据 + getSizeData: function getSizeData() { + var elem = this[0]; + return elem.getBoundingClientRect(); // 可得到 bottom height left right top width 的数据 + }, + + // 封装 nodeName + getNodeName: function getNodeName() { + var elem = this[0]; + return elem.nodeName; + }, - // 移除当前节点 - remove: function remove() { - return this.forEach(function (elem) { - if (elem.remove) { - elem.remove(); + // 从当前元素查找 + find: function find(selector) { + var elem = this[0]; + return $(elem.querySelectorAll(selector)); + }, + + // 获取当前元素的 text + text: function text(val) { + if (!val) { + // 获取 text + var elem = this[0]; + return elem.innerHTML.replace(/<.*?>/g, function () { + return ''; + }); } else { - var parent = elem.parentElement; - parent && parent.removeChild(elem); + // 设置 text + return this.forEach(function (elem) { + elem.innerHTML = val; + }); } - }); - }, - - // 是否包含某个子节点 - isContain: function isContain($child) { - var elem = this[0]; - var child = $child[0]; - return elem.contains(child); - }, - - // 尺寸数据 - getSizeData: function getSizeData() { - var elem = this[0]; - return elem.getBoundingClientRect(); // 可得到 bottom height left right top width 的数据 - }, - - // 封装 nodeName - getNodeName: function getNodeName() { - var elem = this[0]; - return elem.nodeName; - }, - - // 从当前元素查找 - find: function find(selector) { - var elem = this[0]; - return $(elem.querySelectorAll(selector)); - }, - - // 获取当前元素的 text - text: function text(val) { - if (!val) { - // 获取 text + }, + + // 获取 html + html: function html(value) { var elem = this[0]; - return elem.innerHTML.replace(/<.*?>/g, function () { - return ''; - }); - } else { - // 设置 text + if (value == null) { + return elem.innerHTML; + } else { + elem.innerHTML = value; + return this; + } + }, + + // 获取 value + val: function val() { + var elem = this[0]; + return elem.value.trim(); + }, + + // focus + focus: function focus() { return this.forEach(function (elem) { - elem.innerHTML = val; + elem.focus(); }); - } - }, - - // 获取 html - html: function html(value) { - var elem = this[0]; - if (value == null) { - return elem.innerHTML; - } else { - elem.innerHTML = value; - return this; - } - }, - - // 获取 value - val: function val() { - var elem = this[0]; - return elem.value.trim(); - }, - - // focus - focus: function focus() { - return this.forEach(function (elem) { - elem.focus(); - }); - }, - - // parent - parent: function parent() { - var elem = this[0]; - return $(elem.parentElement); - }, - - // parentUntil 找到符合 selector 的父节点 - parentUntil: function parentUntil(selector, _currentElem) { - var results = document.querySelectorAll(selector); - var length = results.length; - if (!length) { - // 传入的 selector 无效 - return null; - } + }, - var elem = _currentElem || this[0]; - if (elem.nodeName === 'BODY') { - return null; - } + // parent + parent: function parent() { + var elem = this[0]; + return $(elem.parentElement); + }, - var parent = elem.parentElement; - var i = void 0; - for (i = 0; i < length; i++) { - if (parent === results[i]) { - // 找到,并返回 - return $(parent); + // parentUntil 找到符合 selector 的父节点 + parentUntil: function parentUntil(selector, _currentElem) { + var results = document.querySelectorAll(selector); + var length = results.length; + if (!length) { + // 传入的 selector 无效 + return null; } - } - // 继续查找 - return this.parentUntil(selector, parent); - }, + var elem = _currentElem || this[0]; + if (elem.nodeName === 'BODY') { + return null; + } - // 判断两个 elem 是否相等 - equal: function equal($elem) { - if ($elem.nodeType === 1) { - return this[0] === $elem; - } else { - return this[0] === $elem[0]; - } - }, + var parent = elem.parentElement; + var i = void 0; + for (i = 0; i < length; i++) { + if (parent === results[i]) { + // 找到,并返回 + return $(parent); + } + } - // 将该元素插入到某个元素前面 - insertBefore: function insertBefore(selector) { - var $referenceNode = $(selector); - var referenceNode = $referenceNode[0]; - if (!referenceNode) { - return this; - } - return this.forEach(function (elem) { - var parent = referenceNode.parentNode; - parent.insertBefore(elem, referenceNode); - }); - }, + // 继续查找 + return this.parentUntil(selector, parent); + }, - // 将该元素插入到某个元素后面 - insertAfter: function insertAfter(selector) { - var $referenceNode = $(selector); - var referenceNode = $referenceNode[0]; - if (!referenceNode) { - return this; - } - return this.forEach(function (elem) { - var parent = referenceNode.parentNode; - if (parent.lastChild === referenceNode) { - // 最后一个元素 - parent.appendChild(elem); + // 判断两个 elem 是否相等 + equal: function equal($elem) { + if ($elem.nodeType === 1) { + return this[0] === $elem; } else { - // 不是最后一个元素 - parent.insertBefore(elem, referenceNode.nextSibling); + return this[0] === $elem[0]; } - }); - } -}; + }, + + // 将该元素插入到某个元素前面 + insertBefore: function insertBefore(selector) { + var $referenceNode = $(selector); + var referenceNode = $referenceNode[0]; + if (!referenceNode) { + return this; + } + return this.forEach(function (elem) { + var parent = referenceNode.parentNode; + parent.insertBefore(elem, referenceNode); + }); + }, + + // 将该元素插入到某个元素后面 + insertAfter: function insertAfter(selector) { + var $referenceNode = $(selector); + var referenceNode = $referenceNode[0]; + if (!referenceNode) { + return this; + } + return this.forEach(function (elem) { + var parent = referenceNode.parentNode; + if (parent.lastChild === referenceNode) { + // 最后一个元素 + parent.appendChild(elem); + } else { + // 不是最后一个元素 + parent.insertBefore(elem, referenceNode.nextSibling); + } + }); + } + }; // new 一个对象 -function $(selector) { - return new DomElement(selector); -} + function $(selector) { + return new DomElement(selector); + } // 解绑所有事件,用于销毁编辑器 -$.offAll = function () { - eventList.forEach(function (item) { - var elem = item.elem; - var type = item.type; - var fn = item.fn; - // 解绑 - elem.removeEventListener(type, fn); - }); -}; - -/* + $.offAll = function () { + eventList.forEach(function (item) { + var elem = item.elem; + var type = item.type; + var fn = item.fn; + // 解绑 + elem.removeEventListener(type, fn); + }); + }; + + /* 配置信息 */ -var config = { - - // 默认菜单配置 - menus: ['head', 'bold', 'fontSize', 'fontName', 'italic', 'underline', 'strikeThrough', 'foreColor', 'backColor', 'link', 'list', 'justify', 'quote', 'emoticon', 'image', 'table', 'video', 'code', 'undo', 'redo'], - - fontNames: ['宋体', '微软雅黑', 'Arial', 'Tahoma', 'Verdana'], - - colors: ['#000000', '#eeece0', '#1c487f', '#4d80bf', '#c24f4a', '#8baa4a', '#7b5ba1', '#46acc8', '#f9963b', '#ffffff'], - - // // 语言配置 - // lang: { - // '设置标题': 'title', - // '正文': 'p', - // '链接文字': 'link text', - // '链接': 'link', - // '插入': 'insert', - // '创建': 'init' - // }, - - // 表情 - emotions: [{ - // tab 的标题 - title: '默认', - // type -> 'emoji' / 'image' - type: 'image', - // content -> 数组 - content: [{ - alt: '[坏笑]', - src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/50/pcmoren_huaixiao_org.png' - }, { - alt: '[舔屏]', - src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/pcmoren_tian_org.png' - }, { - alt: '[污]', - src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3c/pcmoren_wu_org.png' - }] - }, { - // tab 的标题 - title: '新浪', - // type -> 'emoji' / 'image' - type: 'image', - // content -> 数组 - content: [{ - src: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/7a/shenshou_thumb.gif', - alt: '[草泥马]' + var config = { + + // 默认菜单配置 + menus: ['head', 'bold', 'fontSize', 'fontName', 'italic', 'underline', 'strikeThrough', 'foreColor', 'backColor', 'link', 'list', 'justify', 'quote', 'emoticon', 'image', 'table', 'video', 'code', 'undo', 'redo'], + + fontNames: ['宋体', '微软雅黑', 'Arial', 'Tahoma', 'Verdana'], + + colors: ['#000000', '#eeece0', '#1c487f', '#4d80bf', '#c24f4a', '#8baa4a', '#7b5ba1', '#46acc8', '#f9963b', '#ffffff'], + + // // 语言配置 + // lang: { + // '设置标题': 'title', + // '正文': 'p', + // '链接文字': 'link text', + // '链接': 'link', + // '插入': 'insert', + // '创建': 'init' + // }, + + // 表情 + emotions: [{ + // tab 的标题 + title: '默认', + // type -> 'emoji' / 'image' + type: 'image', + // content -> 数组 + content: [{ + alt: '[坏笑]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/50/pcmoren_huaixiao_org.png' + }, { + alt: '[舔屏]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/pcmoren_tian_org.png' + }, { + alt: '[污]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3c/pcmoren_wu_org.png' + }] }, { - src: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/60/horse2_thumb.gif', - alt: '[神马]' + // tab 的标题 + title: '新浪', + // type -> 'emoji' / 'image' + type: 'image', + // content -> 数组 + content: [{ + src: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/7a/shenshou_thumb.gif', + alt: '[草泥马]' + }, { + src: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/60/horse2_thumb.gif', + alt: '[神马]' + }, { + src: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/bc/fuyun_thumb.gif', + alt: '[浮云]' + }] }, { - src: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/bc/fuyun_thumb.gif', - alt: '[浮云]' - }] - }, { - // tab 的标题 - title: 'emoji', - // type -> 'emoji' / 'image' - type: 'emoji', - // content -> 数组 - content: '😀 😃 😄 😁 😆 😅 😂 😊 😇 🙂 🙃 😉 😓 😪 😴 🙄 🤔 😬 🤐'.split(/\s/) - }], - - // 编辑区域的 z-index - zIndex: 10000, - - // 是否开启 debug 模式(debug 模式下错误会 throw error 形式抛出) - debug: false, - - // 插入链接时候的格式校验 - linkCheck: function linkCheck(text, link) { - // text 是插入的文字 - // link 是插入的链接 - return true; // 返回 true 即表示成功 - // return '校验失败' // 返回字符串即表示失败的提示信息 - }, - - // 插入网络图片的校验 - linkImgCheck: function linkImgCheck(src) { - // src 即图片的地址 - return true; // 返回 true 即表示成功 - // return '校验失败' // 返回字符串即表示失败的提示信息 - }, - - // 粘贴过滤样式,默认开启 - pasteFilterStyle: true, - - // 粘贴内容时,忽略图片。默认关闭 - pasteIgnoreImg: false, - - // 对粘贴的文字进行自定义处理,返回处理后的结果。编辑器会将处理后的结果粘贴到编辑区域中。 - // IE 暂时不支持 - pasteTextHandle: function pasteTextHandle(content) { - // content 即粘贴过来的内容(html 或 纯文本),可进行自定义处理然后返回 - return content; - }, - - // onchange 事件 - // onchange: function (html) { - // // html 即变化之后的内容 - // console.log(html) - // }, - - // 是否显示添加网络图片的 tab - showLinkImg: true, - - // 插入网络图片的回调 - linkImgCallback: function linkImgCallback(url) { - // console.log(url) // url 即插入图片的地址 - }, - - // 默认上传图片 max size: 5M - uploadImgMaxSize: 5 * 1024 * 1024, - - // 配置一次最多上传几个图片 - // uploadImgMaxLength: 5, - - // 上传图片,是否显示 base64 格式 - uploadImgShowBase64: false, - - // 上传图片,server 地址(如果有值,则 base64 格式的配置则失效) - // uploadImgServer: '/upload', - - // 自定义配置 filename - uploadFileName: '', - - // 上传图片的自定义参数 - uploadImgParams: { - // token: 'abcdef12345' - }, - - // 上传图片的自定义header - uploadImgHeaders: { - // 'Accept': 'text/x-json' - }, - - // 配置 XHR withCredentials - withCredentials: false, - - // 自定义上传图片超时时间 ms - uploadImgTimeout: 10000, - - // 上传图片 hook - uploadImgHooks: { - // customInsert: function (insertLinkImg, result, editor) { - // console.log('customInsert') - // // 图片上传并返回结果,自定义插入图片的事件,而不是编辑器自动插入图片 - // const data = result.data1 || [] - // data.forEach(link => { - // insertLinkImg(link) - // }) - // }, - before: function before(xhr, editor, files) { - // 图片上传之前触发 - - // 如果返回的结果是 {prevent: true, msg: 'xxxx'} 则表示用户放弃上传 - // return { - // prevent: true, - // msg: '放弃上传' - // } - }, - success: function success(xhr, editor, result) { - // 图片上传并返回结果,图片插入成功之后触发 - }, - fail: function fail(xhr, editor, result) { - // 图片上传并返回结果,但图片插入错误时触发 + // tab 的标题 + title: 'emoji', + // type -> 'emoji' / 'image' + type: 'emoji', + // content -> 数组 + content: '😀 😃 😄 😁 😆 😅 😂 😊 😇 🙂 🙃 😉 😓 😪 😴 🙄 🤔 😬 🤐'.split(/\s/) + }], + + // 编辑区域的 z-index + zIndex: 10000, + + // 是否开启 debug 模式(debug 模式下错误会 throw error 形式抛出) + debug: false, + + // 插入链接时候的格式校验 + linkCheck: function linkCheck(text, link) { + // text 是插入的文字 + // link 是插入的链接 + return true; // 返回 true 即表示成功 + // return '校验失败' // 返回字符串即表示失败的提示信息 }, - error: function error(xhr, editor) { - // 图片上传出错时触发 + + // 插入网络图片的校验 + linkImgCheck: function linkImgCheck(src) { + // src 即图片的地址 + return true; // 返回 true 即表示成功 + // return '校验失败' // 返回字符串即表示失败的提示信息 }, - timeout: function timeout(xhr, editor) { - // 图片上传超时时触发 - } - }, - // 是否上传七牛云,默认为 false - qiniu: false + // 粘贴过滤样式,默认开启 + pasteFilterStyle: true, -}; + // 粘贴内容时,忽略图片。默认关闭 + pasteIgnoreImg: false, -/* - 工具 -*/ + // 对粘贴的文字进行自定义处理,返回处理后的结果。编辑器会将处理后的结果粘贴到编辑区域中。 + // IE 暂时不支持 + pasteTextHandle: function pasteTextHandle(content) { + // content 即粘贴过来的内容(html 或 纯文本),可进行自定义处理然后返回 + return content; + }, -// 和 UA 相关的属性 -var UA = { - _ua: navigator.userAgent, - - // 是否 webkit - isWebkit: function isWebkit() { - var reg = /webkit/i; - return reg.test(this._ua); - }, - - // 是否 IE - isIE: function isIE() { - return 'ActiveXObject' in window; - } -}; + // onchange 事件 + // onchange: function (html) { + // // html 即变化之后的内容 + // console.log(html) + // }, -// 遍历对象 -function objForEach(obj, fn) { - var key = void 0, - result = void 0; - for (key in obj) { - if (obj.hasOwnProperty(key)) { - result = fn.call(obj, key, obj[key]); - if (result === false) { - break; - } - } - } -} + // 是否显示添加网络图片的 tab + showLinkImg: true, -// 遍历类数组 -function arrForEach(fakeArr, fn) { - var i = void 0, - item = void 0, - result = void 0; - var length = fakeArr.length || 0; - for (i = 0; i < length; i++) { - item = fakeArr[i]; - result = fn.call(fakeArr, item, i); - if (result === false) { - break; - } - } -} + // 插入网络图片的回调 + linkImgCallback: function linkImgCallback(url) { + // console.log(url) // url 即插入图片的地址 + }, -// 获取随机数 -function getRandom(prefix) { - return prefix + Math.random().toString().slice(2); -} + // 默认上传图片 max size: 5M + uploadImgMaxSize: 5 * 1024 * 1024, -// 替换 html 特殊字符 -function replaceHtmlSymbol(html) { - if (html == null) { - return ''; - } - return html.replace(//gm, '>').replace(/"/gm, '"').replace(/(\r\n|\r|\n)/g, '
'); -} + // 配置一次最多上传几个图片 + // uploadImgMaxLength: 5, -// 返回百分比的格式 + // 上传图片,是否显示 base64 格式 + uploadImgShowBase64: false, + // 上传图片,server 地址(如果有值,则 base64 格式的配置则失效) + // uploadImgServer: '/upload', -// 判断是不是 function -function isFunction(fn) { - return typeof fn === 'function'; -} + // 自定义配置 filename + uploadFileName: '', -/* - bold-menu -*/ -// 构造函数 -function Bold(editor) { - this.editor = editor; - this.$elem = $('
\n \n
'); - this.type = 'click'; + // 上传图片的自定义参数 + uploadImgParams: { + // token: 'abcdef12345' + }, + + // 上传图片的自定义header + uploadImgHeaders: { + // 'Accept': 'text/x-json' + }, - // 当前是否 active 状态 - this._active = false; -} + // 配置 XHR withCredentials + withCredentials: false, + + // 自定义上传图片超时时间 ms + uploadImgTimeout: 10000, + + // 上传图片 hook + uploadImgHooks: { + // customInsert: function (insertLinkImg, result, editor) { + // console.log('customInsert') + // // 图片上传并返回结果,自定义插入图片的事件,而不是编辑器自动插入图片 + // const data = result.data1 || [] + // data.forEach(link => { + // insertLinkImg(link) + // }) + // }, + before: function before(xhr, editor, files) { + // 图片上传之前触发 + + // 如果返回的结果是 {prevent: true, msg: 'xxxx'} 则表示用户放弃上传 + // return { + // prevent: true, + // msg: '放弃上传' + // } + }, + success: function success(xhr, editor, result) { + // 图片上传并返回结果,图片插入成功之后触发 + }, + fail: function fail(xhr, editor, result) { + // 图片上传并返回结果,但图片插入错误时触发 + }, + error: function error(xhr, editor) { + // 图片上传出错时触发 + }, + timeout: function timeout(xhr, editor) { + // 图片上传超时时触发 + } + }, -// 原型 -Bold.prototype = { - constructor: Bold, + // 是否上传七牛云,默认为 false + qiniu: false - // 点击事件 - onClick: function onClick(e) { - // 点击菜单将触发这里 + }; - var editor = this.editor; - var isSeleEmpty = editor.selection.isSelectionEmpty(); + /* + 工具 +*/ + +// 和 UA 相关的属性 + var UA = { + _ua: navigator.userAgent, - if (isSeleEmpty) { - // 选区是空的,插入并选中一个“空白” - editor.selection.createEmptyRange(); + // 是否 webkit + isWebkit: function isWebkit() { + var reg = /webkit/i; + return reg.test(this._ua); + }, + + // 是否 IE + isIE: function isIE() { + return 'ActiveXObject' in window; } + }; - // 执行 bold 命令 - editor.cmd.do('bold'); +// 遍历对象 + function objForEach(obj, fn) { + var key = void 0, + result = void 0; + for (key in obj) { + if (obj.hasOwnProperty(key)) { + result = fn.call(obj, key, obj[key]); + if (result === false) { + break; + } + } + } + } - if (isSeleEmpty) { - // 需要将选取折叠起来 - editor.selection.collapseRange(); - editor.selection.restoreSelection(); +// 遍历类数组 + function arrForEach(fakeArr, fn) { + var i = void 0, + item = void 0, + result = void 0; + var length = fakeArr.length || 0; + for (i = 0; i < length; i++) { + item = fakeArr[i]; + result = fn.call(fakeArr, item, i); + if (result === false) { + break; + } } - }, - - // 试图改变 active 状态 - tryChangeActive: function tryChangeActive(e) { - var editor = this.editor; - var $elem = this.$elem; - if (editor.cmd.queryCommandState('bold')) { - this._active = true; - $elem.addClass('w-e-active'); - } else { - this._active = false; - $elem.removeClass('w-e-active'); + } + +// 获取随机数 + function getRandom(prefix) { + return prefix + Math.random().toString().slice(2); + } + +// 替换 html 特殊字符 + function replaceHtmlSymbol(html) { + if (html == null) { + return ''; } + return html.replace(//gm, '>').replace(/"/gm, '"').replace(/(\r\n|\r|\n)/g, '
'); + } + +// 返回百分比的格式 + + +// 判断是不是 function + function isFunction(fn) { + return typeof fn === 'function'; + } + + /* + bold-menu +*/ + +// 构造函数 + function Bold(editor) { + this.editor = editor; + this.$elem = $('
\n \n
'); + this.type = 'click'; + + // 当前是否 active 状态 + this._active = false; } -}; -/* +// 原型 + Bold.prototype = { + constructor: Bold, + + // 点击事件 + onClick: function onClick(e) { + // 点击菜单将触发这里 + + var editor = this.editor; + var isSeleEmpty = editor.selection.isSelectionEmpty(); + + if (isSeleEmpty) { + // 选区是空的,插入并选中一个“空白” + editor.selection.createEmptyRange(); + } + + // 执行 bold 命令 + editor.cmd.do('bold'); + + if (isSeleEmpty) { + // 需要将选取折叠起来 + editor.selection.collapseRange(); + editor.selection.restoreSelection(); + } + }, + + // 试图改变 active 状态 + tryChangeActive: function tryChangeActive(e) { + var editor = this.editor; + var $elem = this.$elem; + if (editor.cmd.queryCommandState('bold')) { + this._active = true; + $elem.addClass('w-e-active'); + } else { + this._active = false; + $elem.removeClass('w-e-active'); + } + } + }; + + /* 替换多语言 */ -var replaceLang = function (editor, str) { - var langArgs = editor.config.langArgs || []; - var result = str; + var replaceLang = function (editor, str) { + var langArgs = editor.config.langArgs || []; + var result = str; - langArgs.forEach(function (item) { - var reg = item.reg; - var val = item.val; + langArgs.forEach(function (item) { + var reg = item.reg; + var val = item.val; - if (reg.test(result)) { - result = result.replace(reg, function () { - return val; - }); - } - }); + if (reg.test(result)) { + result = result.replace(reg, function () { + return val; + }); + } + }); - return result; -}; + return result; + }; -/* + /* droplist */ -var _emptyFn = function _emptyFn() {}; + var _emptyFn = function _emptyFn() { + }; // 构造函数 -function DropList(menu, opt) { - var _this = this; - - // droplist 所依附的菜单 - var editor = menu.editor; - this.menu = menu; - this.opt = opt; - // 容器 - var $container = $('
'); - - // 标题 - var $title = opt.$title; - var titleHtml = void 0; - if ($title) { - // 替换多语言 - titleHtml = $title.html(); - titleHtml = replaceLang(editor, titleHtml); - $title.html(titleHtml); - - $title.addClass('w-e-dp-title'); - $container.append($title); - } + function DropList(menu, opt) { + var _this = this; - var list = opt.list || []; - var type = opt.type || 'list'; // 'list' 列表形式(如“标题”菜单) / 'inline-block' 块状形式(如“颜色”菜单) - var onClick = opt.onClick || _emptyFn; - - // 加入 DOM 并绑定事件 - var $list = $('
    '); - $container.append($list); - list.forEach(function (item) { - var $elem = item.$elem; - - // 替换多语言 - var elemHtml = $elem.html(); - elemHtml = replaceLang(editor, elemHtml); - $elem.html(elemHtml); - - var value = item.value; - var $li = $('
  • '); - if ($elem) { - $li.append($elem); - $list.append($li); - $li.on('click', function (e) { - onClick(value); - - // 隐藏 - _this.hideTimeoutId = setTimeout(function () { - _this.hide(); - }, 0); - }); + // droplist 所依附的菜单 + var editor = menu.editor; + this.menu = menu; + this.opt = opt; + // 容器 + var $container = $('
    '); + + // 标题 + var $title = opt.$title; + var titleHtml = void 0; + if ($title) { + // 替换多语言 + titleHtml = $title.html(); + titleHtml = replaceLang(editor, titleHtml); + $title.html(titleHtml); + + $title.addClass('w-e-dp-title'); + $container.append($title); } - }); - // 绑定隐藏事件 - $container.on('mouseleave', function (e) { - _this.hideTimeoutId = setTimeout(function () { - _this.hide(); - }, 0); - }); + var list = opt.list || []; + var type = opt.type || 'list'; // 'list' 列表形式(如“标题”菜单) / 'inline-block' 块状形式(如“颜色”菜单) + var onClick = opt.onClick || _emptyFn; - // 记录属性 - this.$container = $container; + // 加入 DOM 并绑定事件 + var $list = $('
      '); + $container.append($list); + list.forEach(function (item) { + var $elem = item.$elem; - // 基本属性 - this._rendered = false; - this._show = false; -} + // 替换多语言 + var elemHtml = $elem.html(); + elemHtml = replaceLang(editor, elemHtml); + $elem.html(elemHtml); -// 原型 -DropList.prototype = { - constructor: DropList, - - // 显示(插入DOM) - show: function show() { - if (this.hideTimeoutId) { - // 清除之前的定时隐藏 - clearTimeout(this.hideTimeoutId); - } + var value = item.value; + var $li = $('
    • '); + if ($elem) { + $li.append($elem); + $list.append($li); + $li.on('click', function (e) { + onClick(value); - var menu = this.menu; - var $menuELem = menu.$elem; - var $container = this.$container; - if (this._show) { - return; - } - if (this._rendered) { - // 显示 - $container.show(); - } else { - // 加入 DOM 之前先定位位置 - var menuHeight = $menuELem.getSizeData().height || 0; - var width = this.opt.width || 100; // 默认为 100 - $container.css('margin-top', menuHeight + 'px').css('width', width + 'px'); - - // 加入到 DOM - $menuELem.append($container); - this._rendered = true; - } + // 隐藏 + _this.hideTimeoutId = setTimeout(function () { + _this.hide(); + }, 0); + }); + } + }); - // 修改属性 - this._show = true; - }, + // 绑定隐藏事件 + $container.on('mouseleave', function (e) { + _this.hideTimeoutId = setTimeout(function () { + _this.hide(); + }, 0); + }); - // 隐藏(移除DOM) - hide: function hide() { - if (this.showTimeoutId) { - // 清除之前的定时显示 - clearTimeout(this.showTimeoutId); - } + // 记录属性 + this.$container = $container; - var $container = this.$container; - if (!this._show) { - return; - } - // 隐藏并需改属性 - $container.hide(); + // 基本属性 + this._rendered = false; this._show = false; } -}; -/* +// 原型 + DropList.prototype = { + constructor: DropList, + + // 显示(插入DOM) + show: function show() { + if (this.hideTimeoutId) { + // 清除之前的定时隐藏 + clearTimeout(this.hideTimeoutId); + } + + var menu = this.menu; + var $menuELem = menu.$elem; + var $container = this.$container; + if (this._show) { + return; + } + if (this._rendered) { + // 显示 + $container.show(); + } else { + // 加入 DOM 之前先定位位置 + var menuHeight = $menuELem.getSizeData().height || 0; + var width = this.opt.width || 100; // 默认为 100 + $container.css('margin-top', menuHeight + 'px').css('width', width + 'px'); + + // 加入到 DOM + $menuELem.append($container); + this._rendered = true; + } + + // 修改属性 + this._show = true; + }, + + // 隐藏(移除DOM) + hide: function hide() { + if (this.showTimeoutId) { + // 清除之前的定时显示 + clearTimeout(this.showTimeoutId); + } + + var $container = this.$container; + if (!this._show) { + return; + } + // 隐藏并需改属性 + $container.hide(); + this._show = false; + } + }; + + /* menu - header */ + // 构造函数 -function Head(editor) { - var _this = this; - - this.editor = editor; - this.$elem = $('
      '); - this.type = 'droplist'; - - // 当前是否 active 状态 - this._active = false; - - // 初始化 droplist - this.droplist = new DropList(this, { - width: 100, - $title: $('

      设置标题

      '), - type: 'list', // droplist 以列表形式展示 - list: [{ $elem: $('

      H1

      '), value: '

      ' }, { $elem: $('

      H2

      '), value: '

      ' }, { $elem: $('

      H3

      '), value: '

      ' }, { $elem: $('

      H4

      '), value: '

      ' }, { $elem: $('

      H5
      '), value: '
      ' }, { $elem: $('

      正文

      '), value: '

      ' }], - onClick: function onClick(value) { - // 注意 this 是指向当前的 Head 对象 - _this._command(value); - } - }); -} + function Head(editor) { + var _this = this; + + this.editor = editor; + this.$elem = $('

      '); + this.type = 'droplist'; + + // 当前是否 active 状态 + this._active = false; + + // 初始化 droplist + this.droplist = new DropList(this, { + width: 100, + $title: $('

      设置标题

      '), + type: 'list', // droplist 以列表形式展示 + list: [{$elem: $('

      H1

      '), value: '

      '}, { + $elem: $('

      H2

      '), + value: '

      ' + }, {$elem: $('

      H3

      '), value: '

      '}, { + $elem: $('

      H4

      '), + value: '

      ' + }, {$elem: $('

      H5
      '), value: '
      '}, {$elem: $('

      正文

      '), value: '

      '}], + onClick: function onClick(value) { + // 注意 this 是指向当前的 Head 对象 + _this._command(value); + } + }); + } // 原型 -Head.prototype = { - constructor: Head, + Head.prototype = { + constructor: Head, - // 执行命令 - _command: function _command(value) { - var editor = this.editor; + // 执行命令 + _command: function _command(value) { + var editor = this.editor; - var $selectionElem = editor.selection.getSelectionContainerElem(); - if (editor.$textElem.equal($selectionElem)) { - // 不能选中多行来设置标题,否则会出现问题 - // 例如选中的是

      xxx

      yyy

      来设置标题,设置之后会成为

      xxx
      yyy

      不符合预期 - return; - } + var $selectionElem = editor.selection.getSelectionContainerElem(); + if (editor.$textElem.equal($selectionElem)) { + // 不能选中多行来设置标题,否则会出现问题 + // 例如选中的是

      xxx

      yyy

      来设置标题,设置之后会成为

      xxx
      yyy

      不符合预期 + return; + } - editor.cmd.do('formatBlock', value); - }, - - // 试图改变 active 状态 - tryChangeActive: function tryChangeActive(e) { - var editor = this.editor; - var $elem = this.$elem; - var reg = /^h/i; - var cmdValue = editor.cmd.queryCommandValue('formatBlock'); - if (reg.test(cmdValue)) { - this._active = true; - $elem.addClass('w-e-active'); - } else { - this._active = false; - $elem.removeClass('w-e-active'); + editor.cmd.do('formatBlock', value); + }, + + // 试图改变 active 状态 + tryChangeActive: function tryChangeActive(e) { + var editor = this.editor; + var $elem = this.$elem; + var reg = /^h/i; + var cmdValue = editor.cmd.queryCommandValue('formatBlock'); + if (reg.test(cmdValue)) { + this._active = true; + $elem.addClass('w-e-active'); + } else { + this._active = false; + $elem.removeClass('w-e-active'); + } } - } -}; + }; -/* + /* menu - fontSize */ // 构造函数 -function FontSize(editor) { - var _this = this; - - this.editor = editor; - this.$elem = $('
      '); - this.type = 'droplist'; - - // 当前是否 active 状态 - this._active = false; - - // 初始化 droplist - this.droplist = new DropList(this, { - width: 160, - $title: $('

      字号

      '), - type: 'list', // droplist 以列表形式展示 - list: [{ $elem: $('x-small'), value: '1' }, { $elem: $('small'), value: '2' }, { $elem: $('normal'), value: '3' }, { $elem: $('large'), value: '4' }, { $elem: $('x-large'), value: '5' }, { $elem: $('xx-large'), value: '6' }], - onClick: function onClick(value) { - // 注意 this 是指向当前的 FontSize 对象 - _this._command(value); - } - }); -} + function FontSize(editor) { + var _this = this; + + this.editor = editor; + this.$elem = $('
      '); + this.type = 'droplist'; + + // 当前是否 active 状态 + this._active = false; + + // 初始化 droplist + this.droplist = new DropList(this, { + width: 160, + $title: $('

      字号

      '), + type: 'list', // droplist 以列表形式展示 + list: [{ + $elem: $('x-small'), + value: '1' + }, {$elem: $('small'), value: '2'}, { + $elem: $('normal'), + value: '3' + }, { + $elem: $('large'), + value: '4' + }, { + $elem: $('x-large'), + value: '5' + }, {$elem: $('xx-large'), value: '6'}], + onClick: function onClick(value) { + // 注意 this 是指向当前的 FontSize 对象 + _this._command(value); + } + }); + } // 原型 -FontSize.prototype = { - constructor: FontSize, + FontSize.prototype = { + constructor: FontSize, - // 执行命令 - _command: function _command(value) { - var editor = this.editor; - editor.cmd.do('fontSize', value); - } -}; + // 执行命令 + _command: function _command(value) { + var editor = this.editor; + editor.cmd.do('fontSize', value); + } + }; -/* + /* menu - fontName */ // 构造函数 -function FontName(editor) { - var _this = this; - - this.editor = editor; - this.$elem = $('
      '); - this.type = 'droplist'; - - // 当前是否 active 状态 - this._active = false; - - // 获取配置的字体 - var config = editor.config; - var fontNames = config.fontNames || []; - - // 初始化 droplist - this.droplist = new DropList(this, { - width: 100, - $title: $('

      字体

      '), - type: 'list', // droplist 以列表形式展示 - list: fontNames.map(function (fontName) { - return { $elem: $('' + fontName + ''), value: fontName }; - }), - onClick: function onClick(value) { - // 注意 this 是指向当前的 FontName 对象 - _this._command(value); - } - }); -} + function FontName(editor) { + var _this = this; -// 原型 -FontName.prototype = { - constructor: FontName, + this.editor = editor; + this.$elem = $('
      '); + this.type = 'droplist'; - _command: function _command(value) { - var editor = this.editor; - editor.cmd.do('fontName', value); + // 当前是否 active 状态 + this._active = false; + + // 获取配置的字体 + var config = editor.config; + var fontNames = config.fontNames || []; + + // 初始化 droplist + this.droplist = new DropList(this, { + width: 100, + $title: $('

      字体

      '), + type: 'list', // droplist 以列表形式展示 + list: fontNames.map(function (fontName) { + return { + $elem: $('' + fontName + ''), + value: fontName + }; + }), + onClick: function onClick(value) { + // 注意 this 是指向当前的 FontName 对象 + _this._command(value); + } + }); } -}; -/* +// 原型 + FontName.prototype = { + constructor: FontName, + + _command: function _command(value) { + var editor = this.editor; + editor.cmd.do('fontName', value); + } + }; + + /* panel */ -var emptyFn = function emptyFn() {}; + var emptyFn = function emptyFn() { + }; // 记录已经显示 panel 的菜单 -var _isCreatedPanelMenus = []; + var _isCreatedPanelMenus = []; // 构造函数 -function Panel(menu, opt) { - this.menu = menu; - this.opt = opt; -} + function Panel(menu, opt) { + this.menu = menu; + this.opt = opt; + } // 原型 -Panel.prototype = { - constructor: Panel, - - // 显示(插入DOM) - show: function show() { - var _this = this; - - var menu = this.menu; - if (_isCreatedPanelMenus.indexOf(menu) >= 0) { - // 该菜单已经创建了 panel 不能再创建 - return; - } - - var editor = menu.editor; - var $body = $('body'); - var $textContainerElem = editor.$textContainerElem; - var opt = this.opt; - - // panel 的容器 - var $container = $('
      '); - var width = opt.width || 300; // 默认 300px - $container.css('width', width + 'px').css('margin-left', (0 - width) / 2 + 'px'); - - // 添加关闭按钮 - var $closeBtn = $(''); - $container.append($closeBtn); - $closeBtn.on('click', function () { - _this.hide(); - }); + Panel.prototype = { + constructor: Panel, - // 准备 tabs 容器 - var $tabTitleContainer = $('
        '); - var $tabContentContainer = $('
        '); - $container.append($tabTitleContainer).append($tabContentContainer); + // 显示(插入DOM) + show: function show() { + var _this = this; - // 设置高度 - var height = opt.height; - if (height) { - $tabContentContainer.css('height', height + 'px').css('overflow-y', 'auto'); - } - - // tabs - var tabs = opt.tabs || []; - var tabTitleArr = []; - var tabContentArr = []; - tabs.forEach(function (tab, tabIndex) { - if (!tab) { + var menu = this.menu; + if (_isCreatedPanelMenus.indexOf(menu) >= 0) { + // 该菜单已经创建了 panel 不能再创建 return; } - var title = tab.title || ''; - var tpl = tab.tpl || ''; - // 替换多语言 - title = replaceLang(editor, title); - tpl = replaceLang(editor, tpl); + var editor = menu.editor; + var $body = $('body'); + var $textContainerElem = editor.$textContainerElem; + var opt = this.opt; + + // panel 的容器 + var $container = $('
        '); + var width = opt.width || 300; // 默认 300px + $container.css('width', width + 'px').css('margin-left', (0 - width) / 2 + 'px'); + + // 添加关闭按钮 + var $closeBtn = $(''); + $container.append($closeBtn); + $closeBtn.on('click', function () { + _this.hide(); + }); - // 添加到 DOM - var $title = $('
      • ' + title + '
      • '); - $tabTitleContainer.append($title); - var $content = $(tpl); - $tabContentContainer.append($content); - - // 记录到内存 - $title._index = tabIndex; - tabTitleArr.push($title); - tabContentArr.push($content); - - // 设置 active 项 - if (tabIndex === 0) { - $title._active = true; - $title.addClass('w-e-active'); - } else { - $content.hide(); + // 准备 tabs 容器 + var $tabTitleContainer = $('
          '); + var $tabContentContainer = $('
          '); + $container.append($tabTitleContainer).append($tabContentContainer); + + // 设置高度 + var height = opt.height; + if (height) { + $tabContentContainer.css('height', height + 'px').css('overflow-y', 'auto'); } - // 绑定 tab 的事件 - $title.on('click', function (e) { - if ($title._active) { + // tabs + var tabs = opt.tabs || []; + var tabTitleArr = []; + var tabContentArr = []; + tabs.forEach(function (tab, tabIndex) { + if (!tab) { return; } - // 隐藏所有的 tab - tabTitleArr.forEach(function ($title) { - $title._active = false; - $title.removeClass('w-e-active'); - }); - tabContentArr.forEach(function ($content) { + var title = tab.title || ''; + var tpl = tab.tpl || ''; + + // 替换多语言 + title = replaceLang(editor, title); + tpl = replaceLang(editor, tpl); + + // 添加到 DOM + var $title = $('
        • ' + title + '
        • '); + $tabTitleContainer.append($title); + var $content = $(tpl); + $tabContentContainer.append($content); + + // 记录到内存 + $title._index = tabIndex; + tabTitleArr.push($title); + tabContentArr.push($content); + + // 设置 active 项 + if (tabIndex === 0) { + $title._active = true; + $title.addClass('w-e-active'); + } else { $content.hide(); - }); + } + + // 绑定 tab 的事件 + $title.on('click', function (e) { + if ($title._active) { + return; + } + // 隐藏所有的 tab + tabTitleArr.forEach(function ($title) { + $title._active = false; + $title.removeClass('w-e-active'); + }); + tabContentArr.forEach(function ($content) { + $content.hide(); + }); - // 显示当前的 tab - $title._active = true; - $title.addClass('w-e-active'); - $content.show(); + // 显示当前的 tab + $title._active = true; + $title.addClass('w-e-active'); + $content.show(); + }); }); - }); - // 绑定关闭事件 - $container.on('click', function (e) { - // 点击时阻止冒泡 - e.stopPropagation(); - }); - $body.on('click', function (e) { - _this.hide(); - }); + // 绑定关闭事件 + $container.on('click', function (e) { + // 点击时阻止冒泡 + e.stopPropagation(); + }); + $body.on('click', function (e) { + _this.hide(); + }); - // 添加到 DOM - $textContainerElem.append($container); + // 添加到 DOM + $textContainerElem.append($container); - // 绑定 opt 的事件,只有添加到 DOM 之后才能绑定成功 - tabs.forEach(function (tab, index) { - if (!tab) { - return; - } - var events = tab.events || []; - events.forEach(function (event) { - var selector = event.selector; - var type = event.type; - var fn = event.fn || emptyFn; - var $content = tabContentArr[index]; - $content.find(selector).on(type, function (e) { - e.stopPropagation(); - var needToHide = fn(e); - // 执行完事件之后,是否要关闭 panel - if (needToHide) { - _this.hide(); - } + // 绑定 opt 的事件,只有添加到 DOM 之后才能绑定成功 + tabs.forEach(function (tab, index) { + if (!tab) { + return; + } + var events = tab.events || []; + events.forEach(function (event) { + var selector = event.selector; + var type = event.type; + var fn = event.fn || emptyFn; + var $content = tabContentArr[index]; + $content.find(selector).on(type, function (e) { + e.stopPropagation(); + var needToHide = fn(e); + // 执行完事件之后,是否要关闭 panel + if (needToHide) { + _this.hide(); + } + }); }); }); - }); - // focus 第一个 elem - var $inputs = $container.find('input[type=text],textarea'); - if ($inputs.length) { - $inputs.get(0).focus(); - } + // focus 第一个 elem + var $inputs = $container.find('input[type=text],textarea'); + if ($inputs.length) { + $inputs.get(0).focus(); + } - // 添加到属性 - this.$container = $container; + // 添加到属性 + this.$container = $container; - // 隐藏其他 panel - this._hideOtherPanels(); - // 记录该 menu 已经创建了 panel - _isCreatedPanelMenus.push(menu); - }, - - // 隐藏(移除DOM) - hide: function hide() { - var menu = this.menu; - var $container = this.$container; - if ($container) { - $container.remove(); - } + // 隐藏其他 panel + this._hideOtherPanels(); + // 记录该 menu 已经创建了 panel + _isCreatedPanelMenus.push(menu); + }, - // 将该 menu 记录中移除 - _isCreatedPanelMenus = _isCreatedPanelMenus.filter(function (item) { - if (item === menu) { - return false; - } else { - return true; + // 隐藏(移除DOM) + hide: function hide() { + var menu = this.menu; + var $container = this.$container; + if ($container) { + $container.remove(); } - }); - }, - // 一个 panel 展示时,隐藏其他 panel - _hideOtherPanels: function _hideOtherPanels() { - if (!_isCreatedPanelMenus.length) { - return; - } - _isCreatedPanelMenus.forEach(function (menu) { - var panel = menu.panel || {}; - if (panel.hide) { - panel.hide(); + // 将该 menu 记录中移除 + _isCreatedPanelMenus = _isCreatedPanelMenus.filter(function (item) { + if (item === menu) { + return false; + } else { + return true; + } + }); + }, + + // 一个 panel 展示时,隐藏其他 panel + _hideOtherPanels: function _hideOtherPanels() { + if (!_isCreatedPanelMenus.length) { + return; } - }); - } -}; + _isCreatedPanelMenus.forEach(function (menu) { + var panel = menu.panel || {}; + if (panel.hide) { + panel.hide(); + } + }); + } + }; -/* + /* menu - link */ + // 构造函数 -function Link(editor) { - this.editor = editor; - this.$elem = $('
          '); - this.type = 'panel'; + function Link(editor) { + this.editor = editor; + this.$elem = $('
          '); + this.type = 'panel'; - // 当前是否 active 状态 - this._active = false; -} + // 当前是否 active 状态 + this._active = false; + } // 原型 -Link.prototype = { - constructor: Link, - - // 点击事件 - onClick: function onClick(e) { - var editor = this.editor; - var $linkelem = void 0; - - if (this._active) { - // 当前选区在链接里面 - $linkelem = editor.selection.getSelectionContainerElem(); - if (!$linkelem) { - return; + Link.prototype = { + constructor: Link, + + // 点击事件 + onClick: function onClick(e) { + var editor = this.editor; + var $linkelem = void 0; + + if (this._active) { + // 当前选区在链接里面 + $linkelem = editor.selection.getSelectionContainerElem(); + if (!$linkelem) { + return; + } + // 将该元素都包含在选取之内,以便后面整体替换 + editor.selection.createRangeByElem($linkelem); + editor.selection.restoreSelection(); + // 显示 panel + this._createPanel($linkelem.text(), $linkelem.attr('href')); + } else { + // 当前选区不在链接里面 + if (editor.selection.isSelectionEmpty()) { + // 选区是空的,未选中内容 + this._createPanel('', ''); + } else { + // 选中内容了 + this._createPanel(editor.selection.getSelectionText(), ''); + } } - // 将该元素都包含在选取之内,以便后面整体替换 - editor.selection.createRangeByElem($linkelem); - editor.selection.restoreSelection(); + }, + + // 创建 panel + _createPanel: function _createPanel(text, link) { + var _this = this; + + // panel 中需要用到的id + var inputLinkId = getRandom('input-link'); + var inputTextId = getRandom('input-text'); + var btnOkId = getRandom('btn-ok'); + var btnDelId = getRandom('btn-del'); + + // 是否显示“删除链接” + var delBtnDisplay = this._active ? 'inline-block' : 'none'; + + // 初始化并显示 panel + var panel = new Panel(this, { + width: 300, + // panel 中可包含多个 tab + tabs: [{ + // tab 的标题 + title: '链接', + // 模板 + tpl: '
          \n \n \n
          \n \n \n
          \n
          ', + // 事件绑定 + events: [ + // 插入链接 + { + selector: '#' + btnOkId, + type: 'click', + fn: function fn() { + // 执行插入链接 + var $link = $('#' + inputLinkId); + var $text = $('#' + inputTextId); + var link = $link.val(); + var text = $text.val(); + _this._insertLink(text, link); + + // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + return true; + } + }, + // 删除链接 + { + selector: '#' + btnDelId, + type: 'click', + fn: function fn() { + // 执行删除链接 + _this._delLink(); + + // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + return true; + } + }] + } // tab end + ] // tabs end + }); + // 显示 panel - this._createPanel($linkelem.text(), $linkelem.attr('href')); - } else { - // 当前选区不在链接里面 - if (editor.selection.isSelectionEmpty()) { - // 选区是空的,未选中内容 - this._createPanel('', ''); + panel.show(); + + // 记录属性 + this.panel = panel; + }, + + // 删除当前链接 + _delLink: function _delLink() { + if (!this._active) { + return; + } + var editor = this.editor; + var $selectionELem = editor.selection.getSelectionContainerElem(); + if (!$selectionELem) { + return; + } + var selectionText = editor.selection.getSelectionText(); + editor.cmd.do('insertHTML', '' + selectionText + ''); + }, + + // 插入链接 + _insertLink: function _insertLink(text, link) { + var editor = this.editor; + var config = editor.config; + var linkCheck = config.linkCheck; + var checkResult = true; // 默认为 true + if (linkCheck && typeof linkCheck === 'function') { + checkResult = linkCheck(text, link); + } + if (checkResult === true) { + editor.cmd.do('insertHTML', '' + text + ''); + } else { + alert(checkResult); + } + }, + + // 试图改变 active 状态 + tryChangeActive: function tryChangeActive(e) { + var editor = this.editor; + var $elem = this.$elem; + var $selectionELem = editor.selection.getSelectionContainerElem(); + if (!$selectionELem) { + return; + } + if ($selectionELem.getNodeName() === 'A') { + this._active = true; + $elem.addClass('w-e-active'); } else { - // 选中内容了 - this._createPanel(editor.selection.getSelectionText(), ''); + this._active = false; + $elem.removeClass('w-e-active'); } } - }, + }; - // 创建 panel - _createPanel: function _createPanel(text, link) { - var _this = this; + /* + italic-menu +*/ - // panel 中需要用到的id - var inputLinkId = getRandom('input-link'); - var inputTextId = getRandom('input-text'); - var btnOkId = getRandom('btn-ok'); - var btnDelId = getRandom('btn-del'); - - // 是否显示“删除链接” - var delBtnDisplay = this._active ? 'inline-block' : 'none'; - - // 初始化并显示 panel - var panel = new Panel(this, { - width: 300, - // panel 中可包含多个 tab - tabs: [{ - // tab 的标题 - title: '链接', - // 模板 - tpl: '
          \n \n \n
          \n \n \n
          \n
          ', - // 事件绑定 - events: [ - // 插入链接 - { - selector: '#' + btnOkId, - type: 'click', - fn: function fn() { - // 执行插入链接 - var $link = $('#' + inputLinkId); - var $text = $('#' + inputTextId); - var link = $link.val(); - var text = $text.val(); - _this._insertLink(text, link); +// 构造函数 + function Italic(editor) { + this.editor = editor; + this.$elem = $('
          \n \n
          '); + this.type = 'click'; - // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 - return true; - } - }, - // 删除链接 - { - selector: '#' + btnDelId, - type: 'click', - fn: function fn() { - // 执行删除链接 - _this._delLink(); - - // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 - return true; - } - }] - } // tab end - ] // tabs end - }); - - // 显示 panel - panel.show(); - - // 记录属性 - this.panel = panel; - }, - - // 删除当前链接 - _delLink: function _delLink() { - if (!this._active) { - return; - } - var editor = this.editor; - var $selectionELem = editor.selection.getSelectionContainerElem(); - if (!$selectionELem) { - return; - } - var selectionText = editor.selection.getSelectionText(); - editor.cmd.do('insertHTML', '' + selectionText + ''); - }, - - // 插入链接 - _insertLink: function _insertLink(text, link) { - var editor = this.editor; - var config = editor.config; - var linkCheck = config.linkCheck; - var checkResult = true; // 默认为 true - if (linkCheck && typeof linkCheck === 'function') { - checkResult = linkCheck(text, link); - } - if (checkResult === true) { - editor.cmd.do('insertHTML', '' + text + ''); - } else { - alert(checkResult); - } - }, - - // 试图改变 active 状态 - tryChangeActive: function tryChangeActive(e) { - var editor = this.editor; - var $elem = this.$elem; - var $selectionELem = editor.selection.getSelectionContainerElem(); - if (!$selectionELem) { - return; - } - if ($selectionELem.getNodeName() === 'A') { - this._active = true; - $elem.addClass('w-e-active'); - } else { - this._active = false; - $elem.removeClass('w-e-active'); - } + // 当前是否 active 状态 + this._active = false; } -}; - -/* - italic-menu -*/ -// 构造函数 -function Italic(editor) { - this.editor = editor; - this.$elem = $('
          \n \n
          '); - this.type = 'click'; - - // 当前是否 active 状态 - this._active = false; -} // 原型 -Italic.prototype = { - constructor: Italic, + Italic.prototype = { + constructor: Italic, - // 点击事件 - onClick: function onClick(e) { - // 点击菜单将触发这里 + // 点击事件 + onClick: function onClick(e) { + // 点击菜单将触发这里 - var editor = this.editor; - var isSeleEmpty = editor.selection.isSelectionEmpty(); + var editor = this.editor; + var isSeleEmpty = editor.selection.isSelectionEmpty(); - if (isSeleEmpty) { - // 选区是空的,插入并选中一个“空白” - editor.selection.createEmptyRange(); - } + if (isSeleEmpty) { + // 选区是空的,插入并选中一个“空白” + editor.selection.createEmptyRange(); + } - // 执行 italic 命令 - editor.cmd.do('italic'); + // 执行 italic 命令 + editor.cmd.do('italic'); - if (isSeleEmpty) { - // 需要将选取折叠起来 - editor.selection.collapseRange(); - editor.selection.restoreSelection(); - } - }, - - // 试图改变 active 状态 - tryChangeActive: function tryChangeActive(e) { - var editor = this.editor; - var $elem = this.$elem; - if (editor.cmd.queryCommandState('italic')) { - this._active = true; - $elem.addClass('w-e-active'); - } else { - this._active = false; - $elem.removeClass('w-e-active'); + if (isSeleEmpty) { + // 需要将选取折叠起来 + editor.selection.collapseRange(); + editor.selection.restoreSelection(); + } + }, + + // 试图改变 active 状态 + tryChangeActive: function tryChangeActive(e) { + var editor = this.editor; + var $elem = this.$elem; + if (editor.cmd.queryCommandState('italic')) { + this._active = true; + $elem.addClass('w-e-active'); + } else { + this._active = false; + $elem.removeClass('w-e-active'); + } } - } -}; + }; -/* + /* redo-menu */ + // 构造函数 -function Redo(editor) { - this.editor = editor; - this.$elem = $('
          \n \n
          '); - this.type = 'click'; + function Redo(editor) { + this.editor = editor; + this.$elem = $('
          \n \n
          '); + this.type = 'click'; - // 当前是否 active 状态 - this._active = false; -} + // 当前是否 active 状态 + this._active = false; + } // 原型 -Redo.prototype = { - constructor: Redo, + Redo.prototype = { + constructor: Redo, - // 点击事件 - onClick: function onClick(e) { - // 点击菜单将触发这里 + // 点击事件 + onClick: function onClick(e) { + // 点击菜单将触发这里 - var editor = this.editor; + var editor = this.editor; - // 执行 redo 命令 - editor.cmd.do('redo'); - } -}; + // 执行 redo 命令 + editor.cmd.do('redo'); + } + }; -/* + /* strikeThrough-menu */ + // 构造函数 -function StrikeThrough(editor) { - this.editor = editor; - this.$elem = $('
          \n \n
          '); - this.type = 'click'; + function StrikeThrough(editor) { + this.editor = editor; + this.$elem = $('
          \n \n
          '); + this.type = 'click'; - // 当前是否 active 状态 - this._active = false; -} + // 当前是否 active 状态 + this._active = false; + } // 原型 -StrikeThrough.prototype = { - constructor: StrikeThrough, + StrikeThrough.prototype = { + constructor: StrikeThrough, - // 点击事件 - onClick: function onClick(e) { - // 点击菜单将触发这里 + // 点击事件 + onClick: function onClick(e) { + // 点击菜单将触发这里 - var editor = this.editor; - var isSeleEmpty = editor.selection.isSelectionEmpty(); + var editor = this.editor; + var isSeleEmpty = editor.selection.isSelectionEmpty(); - if (isSeleEmpty) { - // 选区是空的,插入并选中一个“空白” - editor.selection.createEmptyRange(); - } + if (isSeleEmpty) { + // 选区是空的,插入并选中一个“空白” + editor.selection.createEmptyRange(); + } - // 执行 strikeThrough 命令 - editor.cmd.do('strikeThrough'); + // 执行 strikeThrough 命令 + editor.cmd.do('strikeThrough'); - if (isSeleEmpty) { - // 需要将选取折叠起来 - editor.selection.collapseRange(); - editor.selection.restoreSelection(); - } - }, - - // 试图改变 active 状态 - tryChangeActive: function tryChangeActive(e) { - var editor = this.editor; - var $elem = this.$elem; - if (editor.cmd.queryCommandState('strikeThrough')) { - this._active = true; - $elem.addClass('w-e-active'); - } else { - this._active = false; - $elem.removeClass('w-e-active'); + if (isSeleEmpty) { + // 需要将选取折叠起来 + editor.selection.collapseRange(); + editor.selection.restoreSelection(); + } + }, + + // 试图改变 active 状态 + tryChangeActive: function tryChangeActive(e) { + var editor = this.editor; + var $elem = this.$elem; + if (editor.cmd.queryCommandState('strikeThrough')) { + this._active = true; + $elem.addClass('w-e-active'); + } else { + this._active = false; + $elem.removeClass('w-e-active'); + } } - } -}; + }; -/* + /* underline-menu */ + // 构造函数 -function Underline(editor) { - this.editor = editor; - this.$elem = $('
          \n \n
          '); - this.type = 'click'; + function Underline(editor) { + this.editor = editor; + this.$elem = $('
          \n \n
          '); + this.type = 'click'; - // 当前是否 active 状态 - this._active = false; -} + // 当前是否 active 状态 + this._active = false; + } // 原型 -Underline.prototype = { - constructor: Underline, + Underline.prototype = { + constructor: Underline, - // 点击事件 - onClick: function onClick(e) { - // 点击菜单将触发这里 + // 点击事件 + onClick: function onClick(e) { + // 点击菜单将触发这里 - var editor = this.editor; - var isSeleEmpty = editor.selection.isSelectionEmpty(); + var editor = this.editor; + var isSeleEmpty = editor.selection.isSelectionEmpty(); - if (isSeleEmpty) { - // 选区是空的,插入并选中一个“空白” - editor.selection.createEmptyRange(); - } + if (isSeleEmpty) { + // 选区是空的,插入并选中一个“空白” + editor.selection.createEmptyRange(); + } - // 执行 underline 命令 - editor.cmd.do('underline'); + // 执行 underline 命令 + editor.cmd.do('underline'); - if (isSeleEmpty) { - // 需要将选取折叠起来 - editor.selection.collapseRange(); - editor.selection.restoreSelection(); - } - }, - - // 试图改变 active 状态 - tryChangeActive: function tryChangeActive(e) { - var editor = this.editor; - var $elem = this.$elem; - if (editor.cmd.queryCommandState('underline')) { - this._active = true; - $elem.addClass('w-e-active'); - } else { - this._active = false; - $elem.removeClass('w-e-active'); + if (isSeleEmpty) { + // 需要将选取折叠起来 + editor.selection.collapseRange(); + editor.selection.restoreSelection(); + } + }, + + // 试图改变 active 状态 + tryChangeActive: function tryChangeActive(e) { + var editor = this.editor; + var $elem = this.$elem; + if (editor.cmd.queryCommandState('underline')) { + this._active = true; + $elem.addClass('w-e-active'); + } else { + this._active = false; + $elem.removeClass('w-e-active'); + } } - } -}; + }; -/* + /* undo-menu */ + // 构造函数 -function Undo(editor) { - this.editor = editor; - this.$elem = $('
          \n \n
          '); - this.type = 'click'; + function Undo(editor) { + this.editor = editor; + this.$elem = $('
          \n \n
          '); + this.type = 'click'; - // 当前是否 active 状态 - this._active = false; -} + // 当前是否 active 状态 + this._active = false; + } // 原型 -Undo.prototype = { - constructor: Undo, + Undo.prototype = { + constructor: Undo, - // 点击事件 - onClick: function onClick(e) { - // 点击菜单将触发这里 + // 点击事件 + onClick: function onClick(e) { + // 点击菜单将触发这里 - var editor = this.editor; + var editor = this.editor; - // 执行 undo 命令 - editor.cmd.do('undo'); - } -}; + // 执行 undo 命令 + editor.cmd.do('undo'); + } + }; -/* + /* menu - list */ + // 构造函数 -function List(editor) { - var _this = this; - - this.editor = editor; - this.$elem = $('
          '); - this.type = 'droplist'; - - // 当前是否 active 状态 - this._active = false; - - // 初始化 droplist - this.droplist = new DropList(this, { - width: 120, - $title: $('

          设置列表

          '), - type: 'list', // droplist 以列表形式展示 - list: [{ $elem: $(' 有序列表'), value: 'insertOrderedList' }, { $elem: $(' 无序列表'), value: 'insertUnorderedList' }], - onClick: function onClick(value) { - // 注意 this 是指向当前的 List 对象 - _this._command(value); - } - }); -} + function List(editor) { + var _this = this; + + this.editor = editor; + this.$elem = $('
          '); + this.type = 'droplist'; + + // 当前是否 active 状态 + this._active = false; + + // 初始化 droplist + this.droplist = new DropList(this, { + width: 120, + $title: $('

          设置列表

          '), + type: 'list', // droplist 以列表形式展示 + list: [{ + $elem: $(' 有序列表'), + value: 'insertOrderedList' + }, {$elem: $(' 无序列表'), value: 'insertUnorderedList'}], + onClick: function onClick(value) { + // 注意 this 是指向当前的 List 对象 + _this._command(value); + } + }); + } // 原型 -List.prototype = { - constructor: List, - - // 执行命令 - _command: function _command(value) { - var editor = this.editor; - var $textElem = editor.$textElem; - editor.selection.restoreSelection(); - if (editor.cmd.queryCommandState(value)) { - return; - } - editor.cmd.do(value); + List.prototype = { + constructor: List, - // 验证列表是否被包裹在

          之内 - var $selectionElem = editor.selection.getSelectionContainerElem(); - if ($selectionElem.getNodeName() === 'LI') { - $selectionElem = $selectionElem.parent(); - } - if (/^ol|ul$/i.test($selectionElem.getNodeName()) === false) { - return; - } - if ($selectionElem.equal($textElem)) { - // 证明是顶级标签,没有被

          包裹 - return; - } - var $parent = $selectionElem.parent(); - if ($parent.equal($textElem)) { - // $parent 是顶级标签,不能删除 - return; - } + // 执行命令 + _command: function _command(value) { + var editor = this.editor; + var $textElem = editor.$textElem; + editor.selection.restoreSelection(); + if (editor.cmd.queryCommandState(value)) { + return; + } + editor.cmd.do(value); - $selectionElem.insertAfter($parent); - $parent.remove(); - }, - - // 试图改变 active 状态 - tryChangeActive: function tryChangeActive(e) { - var editor = this.editor; - var $elem = this.$elem; - if (editor.cmd.queryCommandState('insertUnOrderedList') || editor.cmd.queryCommandState('insertOrderedList')) { - this._active = true; - $elem.addClass('w-e-active'); - } else { - this._active = false; - $elem.removeClass('w-e-active'); + // 验证列表是否被包裹在

          之内 + var $selectionElem = editor.selection.getSelectionContainerElem(); + if ($selectionElem.getNodeName() === 'LI') { + $selectionElem = $selectionElem.parent(); + } + if (/^ol|ul$/i.test($selectionElem.getNodeName()) === false) { + return; + } + if ($selectionElem.equal($textElem)) { + // 证明是顶级标签,没有被

          包裹 + return; + } + var $parent = $selectionElem.parent(); + if ($parent.equal($textElem)) { + // $parent 是顶级标签,不能删除 + return; + } + + $selectionElem.insertAfter($parent); + $parent.remove(); + }, + + // 试图改变 active 状态 + tryChangeActive: function tryChangeActive(e) { + var editor = this.editor; + var $elem = this.$elem; + if (editor.cmd.queryCommandState('insertUnOrderedList') || editor.cmd.queryCommandState('insertOrderedList')) { + this._active = true; + $elem.addClass('w-e-active'); + } else { + this._active = false; + $elem.removeClass('w-e-active'); + } } - } -}; + }; -/* + /* menu - justify */ + // 构造函数 -function Justify(editor) { - var _this = this; - - this.editor = editor; - this.$elem = $('

          '); - this.type = 'droplist'; - - // 当前是否 active 状态 - this._active = false; - - // 初始化 droplist - this.droplist = new DropList(this, { - width: 100, - $title: $('

          对齐方式

          '), - type: 'list', // droplist 以列表形式展示 - list: [{ $elem: $(' 靠左'), value: 'justifyLeft' }, { $elem: $(' 居中'), value: 'justifyCenter' }, { $elem: $(' 靠右'), value: 'justifyRight' }], - onClick: function onClick(value) { - // 注意 this 是指向当前的 List 对象 - _this._command(value); - } - }); -} + function Justify(editor) { + var _this = this; + + this.editor = editor; + this.$elem = $('
          '); + this.type = 'droplist'; + + // 当前是否 active 状态 + this._active = false; + + // 初始化 droplist + this.droplist = new DropList(this, { + width: 100, + $title: $('

          对齐方式

          '), + type: 'list', // droplist 以列表形式展示 + list: [{ + $elem: $(' 靠左'), + value: 'justifyLeft' + }, { + $elem: $(' 居中'), + value: 'justifyCenter' + }, {$elem: $(' 靠右'), value: 'justifyRight'}], + onClick: function onClick(value) { + // 注意 this 是指向当前的 List 对象 + _this._command(value); + } + }); + } // 原型 -Justify.prototype = { - constructor: Justify, + Justify.prototype = { + constructor: Justify, - // 执行命令 - _command: function _command(value) { - var editor = this.editor; - editor.cmd.do(value); - } -}; + // 执行命令 + _command: function _command(value) { + var editor = this.editor; + editor.cmd.do(value); + } + }; -/* + /* menu - Forecolor */ + // 构造函数 -function ForeColor(editor) { - var _this = this; - - this.editor = editor; - this.$elem = $('
          '); - this.type = 'droplist'; - - // 获取配置的颜色 - var config = editor.config; - var colors = config.colors || []; - - // 当前是否 active 状态 - this._active = false; - - // 初始化 droplist - this.droplist = new DropList(this, { - width: 120, - $title: $('

          文字颜色

          '), - type: 'inline-block', // droplist 内容以 block 形式展示 - list: colors.map(function (color) { - return { $elem: $(''), value: color }; - }), - onClick: function onClick(value) { - // 注意 this 是指向当前的 ForeColor 对象 - _this._command(value); - } - }); -} + function ForeColor(editor) { + var _this = this; -// 原型 -ForeColor.prototype = { - constructor: ForeColor, + this.editor = editor; + this.$elem = $('
          '); + this.type = 'droplist'; - // 执行命令 - _command: function _command(value) { - var editor = this.editor; - editor.cmd.do('foreColor', value); + // 获取配置的颜色 + var config = editor.config; + var colors = config.colors || []; + + // 当前是否 active 状态 + this._active = false; + + // 初始化 droplist + this.droplist = new DropList(this, { + width: 120, + $title: $('

          文字颜色

          '), + type: 'inline-block', // droplist 内容以 block 形式展示 + list: colors.map(function (color) { + return {$elem: $(''), value: color}; + }), + onClick: function onClick(value) { + // 注意 this 是指向当前的 ForeColor 对象 + _this._command(value); + } + }); } -}; -/* +// 原型 + ForeColor.prototype = { + constructor: ForeColor, + + // 执行命令 + _command: function _command(value) { + var editor = this.editor; + editor.cmd.do('foreColor', value); + } + }; + + /* menu - BackColor */ + // 构造函数 -function BackColor(editor) { - var _this = this; - - this.editor = editor; - this.$elem = $('
          '); - this.type = 'droplist'; - - // 获取配置的颜色 - var config = editor.config; - var colors = config.colors || []; - - // 当前是否 active 状态 - this._active = false; - - // 初始化 droplist - this.droplist = new DropList(this, { - width: 120, - $title: $('

          背景色

          '), - type: 'inline-block', // droplist 内容以 block 形式展示 - list: colors.map(function (color) { - return { $elem: $(''), value: color }; - }), - onClick: function onClick(value) { - // 注意 this 是指向当前的 BackColor 对象 - _this._command(value); - } - }); -} + function BackColor(editor) { + var _this = this; -// 原型 -BackColor.prototype = { - constructor: BackColor, + this.editor = editor; + this.$elem = $('
          '); + this.type = 'droplist'; - // 执行命令 - _command: function _command(value) { - var editor = this.editor; - editor.cmd.do('backColor', value); + // 获取配置的颜色 + var config = editor.config; + var colors = config.colors || []; + + // 当前是否 active 状态 + this._active = false; + + // 初始化 droplist + this.droplist = new DropList(this, { + width: 120, + $title: $('

          背景色

          '), + type: 'inline-block', // droplist 内容以 block 形式展示 + list: colors.map(function (color) { + return {$elem: $(''), value: color}; + }), + onClick: function onClick(value) { + // 注意 this 是指向当前的 BackColor 对象 + _this._command(value); + } + }); } -}; -/* +// 原型 + BackColor.prototype = { + constructor: BackColor, + + // 执行命令 + _command: function _command(value) { + var editor = this.editor; + editor.cmd.do('backColor', value); + } + }; + + /* menu - quote */ + // 构造函数 -function Quote(editor) { - this.editor = editor; - this.$elem = $('
          \n \n
          '); - this.type = 'click'; + function Quote(editor) { + this.editor = editor; + this.$elem = $('
          \n \n
          '); + this.type = 'click'; - // 当前是否 active 状态 - this._active = false; -} + // 当前是否 active 状态 + this._active = false; + } // 原型 -Quote.prototype = { - constructor: Quote, + Quote.prototype = { + constructor: Quote, + + onClick: function onClick(e) { + var editor = this.editor; + var $selectionElem = editor.selection.getSelectionContainerElem(); + var nodeName = $selectionElem.getNodeName(); - onClick: function onClick(e) { - var editor = this.editor; - var $selectionElem = editor.selection.getSelectionContainerElem(); - var nodeName = $selectionElem.getNodeName(); + if (!UA.isIE()) { + if (nodeName === 'BLOCKQUOTE') { + // 撤销 quote + editor.cmd.do('formatBlock', '

          '); + } else { + // 转换为 quote + editor.cmd.do('formatBlock', '

          '); + } + return; + } - if (!UA.isIE()) { + // IE 中不支持 formatBlock
          ,要用其他方式兼容 + var content = void 0, + $targetELem = void 0; + if (nodeName === 'P') { + // 将 P 转换为 quote + content = $selectionElem.text(); + $targetELem = $('
          ' + content + '
          '); + $targetELem.insertAfter($selectionElem); + $selectionElem.remove(); + return; + } if (nodeName === 'BLOCKQUOTE') { // 撤销 quote - editor.cmd.do('formatBlock', '

          '); - } else { - // 转换为 quote - editor.cmd.do('formatBlock', '

          '); + content = $selectionElem.text(); + $targetELem = $('

          ' + content + '

          '); + $targetELem.insertAfter($selectionElem); + $selectionElem.remove(); } - return; - } + }, - // IE 中不支持 formatBlock
          ,要用其他方式兼容 - var content = void 0, - $targetELem = void 0; - if (nodeName === 'P') { - // 将 P 转换为 quote - content = $selectionElem.text(); - $targetELem = $('
          ' + content + '
          '); - $targetELem.insertAfter($selectionElem); - $selectionElem.remove(); - return; - } - if (nodeName === 'BLOCKQUOTE') { - // 撤销 quote - content = $selectionElem.text(); - $targetELem = $('

          ' + content + '

          '); - $targetELem.insertAfter($selectionElem); - $selectionElem.remove(); - } - }, - - tryChangeActive: function tryChangeActive(e) { - var editor = this.editor; - var $elem = this.$elem; - var reg = /^BLOCKQUOTE$/i; - var cmdValue = editor.cmd.queryCommandValue('formatBlock'); - if (reg.test(cmdValue)) { - this._active = true; - $elem.addClass('w-e-active'); - } else { - this._active = false; - $elem.removeClass('w-e-active'); + tryChangeActive: function tryChangeActive(e) { + var editor = this.editor; + var $elem = this.$elem; + var reg = /^BLOCKQUOTE$/i; + var cmdValue = editor.cmd.queryCommandValue('formatBlock'); + if (reg.test(cmdValue)) { + this._active = true; + $elem.addClass('w-e-active'); + } else { + this._active = false; + $elem.removeClass('w-e-active'); + } } - } -}; + }; -/* + /* menu - code */ + // 构造函数 -function Code(editor) { - this.editor = editor; - this.$elem = $('
          \n \n
          '); - this.type = 'panel'; + function Code(editor) { + this.editor = editor; + this.$elem = $('
          \n \n
          '); + this.type = 'panel'; - // 当前是否 active 状态 - this._active = false; -} + // 当前是否 active 状态 + this._active = false; + } // 原型 -Code.prototype = { - constructor: Code, - - onClick: function onClick(e) { - var editor = this.editor; - var $startElem = editor.selection.getSelectionStartElem(); - var $endElem = editor.selection.getSelectionEndElem(); - var isSeleEmpty = editor.selection.isSelectionEmpty(); - var selectionText = editor.selection.getSelectionText(); - var $code = void 0; - - if (!$startElem.equal($endElem)) { - // 跨元素选择,不做处理 - editor.selection.restoreSelection(); - return; - } - if (!isSeleEmpty) { - // 选取不是空,用 包裹即可 - $code = $('' + selectionText + ''); - editor.cmd.do('insertElem', $code); - editor.selection.createRangeByElem($code, false); - editor.selection.restoreSelection(); - return; - } + Code.prototype = { + constructor: Code, + + onClick: function onClick(e) { + var editor = this.editor; + var $startElem = editor.selection.getSelectionStartElem(); + var $endElem = editor.selection.getSelectionEndElem(); + var isSeleEmpty = editor.selection.isSelectionEmpty(); + var selectionText = editor.selection.getSelectionText(); + var $code = void 0; + + if (!$startElem.equal($endElem)) { + // 跨元素选择,不做处理 + editor.selection.restoreSelection(); + return; + } + if (!isSeleEmpty) { + // 选取不是空,用 包裹即可 + $code = $('' + selectionText + ''); + editor.cmd.do('insertElem', $code); + editor.selection.createRangeByElem($code, false); + editor.selection.restoreSelection(); + return; + } - // 选取是空,且没有夸元素选择,则插入
          
          -        if (this._active) {
          -            // 选中状态,将编辑内容
          -            this._createPanel($startElem.html());
          -        } else {
          -            // 未选中状态,将创建内容
          -            this._createPanel();
          -        }
          -    },
          +            // 选取是空,且没有夸元素选择,则插入 
          
          +            if (this._active) {
          +                // 选中状态,将编辑内容
          +                this._createPanel($startElem.html());
          +            } else {
          +                // 未选中状态,将创建内容
          +                this._createPanel();
          +            }
          +        },
           
          -    _createPanel: function _createPanel(value) {
          -        var _this = this;
          +        _createPanel: function _createPanel(value) {
          +            var _this = this;
          +
          +            // value - 要编辑的内容
          +            value = value || '';
          +            var type = !value ? 'new' : 'edit';
          +            var textId = getRandom('texxt');
          +            var btnId = getRandom('btn');
          +
          +            var panel = new Panel(this, {
          +                width: 500,
          +                // 一个 Panel 包含多个 tab
          +                tabs: [{
          +                    // 标题
          +                    title: '插入代码',
          +                    // 模板
          +                    tpl: '
          \n \n
          \n \n
          \n
          ', + // 事件绑定 + events: [ + // 插入代码 + { + selector: '#' + btnId, + type: 'click', + fn: function fn() { + var $text = $('#' + textId); + var text = $text.val() || $text.html(); + text = replaceHtmlSymbol(text); + if (type === 'new') { + // 新插入 + _this._insertCode(text); + } else { + // 编辑更新 + _this._updateCode(text); + } + + // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + return true; + } + }] + } // first tab end + ] // tabs end + }); // new Panel end - // value - 要编辑的内容 - value = value || ''; - var type = !value ? 'new' : 'edit'; - var textId = getRandom('texxt'); - var btnId = getRandom('btn'); - - var panel = new Panel(this, { - width: 500, - // 一个 Panel 包含多个 tab - tabs: [{ - // 标题 - title: '插入代码', - // 模板 - tpl: '
          \n \n
          \n \n
          \n
          ', - // 事件绑定 - events: [ - // 插入代码 - { - selector: '#' + btnId, - type: 'click', - fn: function fn() { - var $text = $('#' + textId); - var text = $text.val() || $text.html(); - text = replaceHtmlSymbol(text); - if (type === 'new') { - // 新插入 - _this._insertCode(text); - } else { - // 编辑更新 - _this._updateCode(text); - } + // 显示 panel + panel.show(); - // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 - return true; - } - }] - } // first tab end - ] // tabs end - }); // new Panel end + // 记录属性 + this.panel = panel; + }, + + // 插入代码 + _insertCode: function _insertCode(value) { + var editor = this.editor; + editor.cmd.do('insertHTML', '
          ' + value + '


          '); + }, - // 显示 panel - panel.show(); + // 更新代码 + _updateCode: function _updateCode(value) { + var editor = this.editor; + var $selectionELem = editor.selection.getSelectionContainerElem(); + if (!$selectionELem) { + return; + } + $selectionELem.html(value); + editor.selection.restoreSelection(); + }, - // 记录属性 - this.panel = panel; - }, - - // 插入代码 - _insertCode: function _insertCode(value) { - var editor = this.editor; - editor.cmd.do('insertHTML', '
          ' + value + '


          '); - }, - - // 更新代码 - _updateCode: function _updateCode(value) { - var editor = this.editor; - var $selectionELem = editor.selection.getSelectionContainerElem(); - if (!$selectionELem) { - return; - } - $selectionELem.html(value); - editor.selection.restoreSelection(); - }, - - // 试图改变 active 状态 - tryChangeActive: function tryChangeActive(e) { - var editor = this.editor; - var $elem = this.$elem; - var $selectionELem = editor.selection.getSelectionContainerElem(); - if (!$selectionELem) { - return; - } - var $parentElem = $selectionELem.parent(); - if ($selectionELem.getNodeName() === 'CODE' && $parentElem.getNodeName() === 'PRE') { - this._active = true; - $elem.addClass('w-e-active'); - } else { - this._active = false; - $elem.removeClass('w-e-active'); + // 试图改变 active 状态 + tryChangeActive: function tryChangeActive(e) { + var editor = this.editor; + var $elem = this.$elem; + var $selectionELem = editor.selection.getSelectionContainerElem(); + if (!$selectionELem) { + return; + } + var $parentElem = $selectionELem.parent(); + if ($selectionELem.getNodeName() === 'CODE' && $parentElem.getNodeName() === 'PRE') { + this._active = true; + $elem.addClass('w-e-active'); + } else { + this._active = false; + $elem.removeClass('w-e-active'); + } } - } -}; + }; -/* + /* menu - emoticon */ + // 构造函数 -function Emoticon(editor) { - this.editor = editor; - this.$elem = $('
          \n \n
          '); - this.type = 'panel'; + function Emoticon(editor) { + this.editor = editor; + this.$elem = $('
          \n \n
          '); + this.type = 'panel'; - // 当前是否 active 状态 - this._active = false; -} + // 当前是否 active 状态 + this._active = false; + } // 原型 -Emoticon.prototype = { - constructor: Emoticon, + Emoticon.prototype = { + constructor: Emoticon, - onClick: function onClick() { - this._createPanel(); - }, + onClick: function onClick() { + this._createPanel(); + }, - _createPanel: function _createPanel() { - var _this = this; + _createPanel: function _createPanel() { + var _this = this; - var editor = this.editor; - var config = editor.config; - // 获取表情配置 - var emotions = config.emotions || []; - - // 创建表情 dropPanel 的配置 - var tabConfig = []; - emotions.forEach(function (emotData) { - var emotType = emotData.type; - var content = emotData.content || []; - - // 这一组表情最终拼接出来的 html - var faceHtml = ''; - - // emoji 表情 - if (emotType === 'emoji') { - content.forEach(function (item) { - if (item) { - faceHtml += '' + item + ''; - } - }); - } - // 图片表情 - if (emotType === 'image') { - content.forEach(function (item) { - var src = item.src; - var alt = item.alt; - if (src) { - // 加一个 data-w-e 属性,点击图片的时候不再提示编辑图片 - faceHtml += '' + alt + ''; - } - }); - } + var editor = this.editor; + var config = editor.config; + // 获取表情配置 + var emotions = config.emotions || []; - tabConfig.push({ - title: emotData.title, - tpl: '
          ' + faceHtml + '
          ', - events: [{ - selector: 'span.w-e-item', - type: 'click', - fn: function fn(e) { - var target = e.target; - var $target = $(target); - var nodeName = $target.getNodeName(); + // 创建表情 dropPanel 的配置 + var tabConfig = []; + emotions.forEach(function (emotData) { + var emotType = emotData.type; + var content = emotData.content || []; - var insertHtml = void 0; - if (nodeName === 'IMG') { - // 插入图片 - insertHtml = $target.parent().html(); - } else { - // 插入 emoji - insertHtml = '' + $target.html() + ''; + // 这一组表情最终拼接出来的 html + var faceHtml = ''; + + // emoji 表情 + if (emotType === 'emoji') { + content.forEach(function (item) { + if (item) { + faceHtml += '' + item + ''; + } + }); + } + // 图片表情 + if (emotType === 'image') { + content.forEach(function (item) { + var src = item.src; + var alt = item.alt; + if (src) { + // 加一个 data-w-e 属性,点击图片的时候不再提示编辑图片 + faceHtml += '' + alt + ''; } + }); + } - _this._insert(insertHtml); - // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 - return true; - } - }] + tabConfig.push({ + title: emotData.title, + tpl: '
          ' + faceHtml + '
          ', + events: [{ + selector: 'span.w-e-item', + type: 'click', + fn: function fn(e) { + var target = e.target; + var $target = $(target); + var nodeName = $target.getNodeName(); + + var insertHtml = void 0; + if (nodeName === 'IMG') { + // 插入图片 + insertHtml = $target.parent().html(); + } else { + // 插入 emoji + insertHtml = '' + $target.html() + ''; + } + + _this._insert(insertHtml); + // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + return true; + } + }] + }); }); - }); - var panel = new Panel(this, { - width: 300, - height: 200, - // 一个 Panel 包含多个 tab - tabs: tabConfig - }); + var panel = new Panel(this, { + width: 300, + height: 200, + // 一个 Panel 包含多个 tab + tabs: tabConfig + }); - // 显示 panel - panel.show(); + // 显示 panel + panel.show(); - // 记录属性 - this.panel = panel; - }, + // 记录属性 + this.panel = panel; + }, - // 插入表情 - _insert: function _insert(emotHtml) { - var editor = this.editor; - editor.cmd.do('insertHTML', emotHtml); - } -}; + // 插入表情 + _insert: function _insert(emotHtml) { + var editor = this.editor; + editor.cmd.do('insertHTML', emotHtml); + } + }; -/* + /* menu - table */ + // 构造函数 -function Table(editor) { - this.editor = editor; - this.$elem = $('
          '); - this.type = 'panel'; + function Table(editor) { + this.editor = editor; + this.$elem = $('
          '); + this.type = 'panel'; - // 当前是否 active 状态 - this._active = false; -} + // 当前是否 active 状态 + this._active = false; + } // 原型 -Table.prototype = { - constructor: Table, + Table.prototype = { + constructor: Table, - onClick: function onClick() { - if (this._active) { - // 编辑现有表格 - this._createEditPanel(); - } else { - // 插入新表格 - this._createInsertPanel(); - } - }, - - // 创建插入新表格的 panel - _createInsertPanel: function _createInsertPanel() { - var _this = this; + onClick: function onClick() { + if (this._active) { + // 编辑现有表格 + this._createEditPanel(); + } else { + // 插入新表格 + this._createInsertPanel(); + } + }, - // 用到的 id - var btnInsertId = getRandom('btn'); - var textRowNum = getRandom('row'); - var textColNum = getRandom('col'); - - var panel = new Panel(this, { - width: 250, - // panel 包含多个 tab - tabs: [{ - // 标题 - title: '插入表格', - // 模板 - tpl: '
          \n

          \n \u521B\u5EFA\n \n \u884C\n \n \u5217\u7684\u8868\u683C\n

          \n
          \n \n
          \n
          ', - // 事件绑定 - events: [{ - // 点击按钮,插入表格 - selector: '#' + btnInsertId, - type: 'click', - fn: function fn() { - var rowNum = parseInt($('#' + textRowNum).val()); - var colNum = parseInt($('#' + textColNum).val()); + // 创建插入新表格的 panel + _createInsertPanel: function _createInsertPanel() { + var _this = this; + + // 用到的 id + var btnInsertId = getRandom('btn'); + var textRowNum = getRandom('row'); + var textColNum = getRandom('col'); + + var panel = new Panel(this, { + width: 250, + // panel 包含多个 tab + tabs: [{ + // 标题 + title: '插入表格', + // 模板 + tpl: '
          \n

          \n \u521B\u5EFA\n \n \u884C\n \n \u5217\u7684\u8868\u683C\n

          \n
          \n \n
          \n
          ', + // 事件绑定 + events: [{ + // 点击按钮,插入表格 + selector: '#' + btnInsertId, + type: 'click', + fn: function fn() { + var rowNum = parseInt($('#' + textRowNum).val()); + var colNum = parseInt($('#' + textColNum).val()); + + if (rowNum && colNum && rowNum > 0 && colNum > 0) { + // form 数据有效 + _this._insert(rowNum, colNum); + } - if (rowNum && colNum && rowNum > 0 && colNum > 0) { - // form 数据有效 - _this._insert(rowNum, colNum); + // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + return true; } + }] + } // first tab end + ] // tabs end + }); // panel end - // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 - return true; + // 展示 panel + panel.show(); + + // 记录属性 + this.panel = panel; + }, + + // 插入表格 + _insert: function _insert(rowNum, colNum) { + // 拼接 table 模板 + var r = void 0, + c = void 0; + var html = ''; + for (r = 0; r < rowNum; r++) { + html += ''; + if (r === 0) { + for (c = 0; c < colNum; c++) { + html += ''; } + } else { + for (c = 0; c < colNum; c++) { + html += ''; + } + } + html += ''; + } + html += '
            


          '; + + // 执行命令 + var editor = this.editor; + editor.cmd.do('insertHTML', html); + + // 防止 firefox 下出现 resize 的控制点 + editor.cmd.do('enableObjectResizing', false); + editor.cmd.do('enableInlineTableEditing', false); + }, + + // 创建编辑表格的 panel + _createEditPanel: function _createEditPanel() { + var _this2 = this; + + // 可用的 id + var addRowBtnId = getRandom('add-row'); + var addColBtnId = getRandom('add-col'); + var delRowBtnId = getRandom('del-row'); + var delColBtnId = getRandom('del-col'); + var delTableBtnId = getRandom('del-table'); + + // 创建 panel 对象 + var panel = new Panel(this, { + width: 320, + // panel 包含多个 tab + tabs: [{ + // 标题 + title: '编辑表格', + // 模板 + tpl: '
          \n
          \n \n \n \n \n
          \n
          \n \n \n
          ', + // 事件绑定 + events: [{ + // 增加行 + selector: '#' + addRowBtnId, + type: 'click', + fn: function fn() { + _this2._addRow(); + // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + return true; + } + }, { + // 增加列 + selector: '#' + addColBtnId, + type: 'click', + fn: function fn() { + _this2._addCol(); + // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + return true; + } + }, { + // 删除行 + selector: '#' + delRowBtnId, + type: 'click', + fn: function fn() { + _this2._delRow(); + // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + return true; + } + }, { + // 删除列 + selector: '#' + delColBtnId, + type: 'click', + fn: function fn() { + _this2._delCol(); + // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + return true; + } + }, { + // 删除表格 + selector: '#' + delTableBtnId, + type: 'click', + fn: function fn() { + _this2._delTable(); + // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + return true; + } + }] }] - } // first tab end - ] // tabs end - }); // panel end + }); + // 显示 panel + panel.show(); + }, - // 展示 panel - panel.show(); + // 获取选中的单元格的位置信息 + _getLocationData: function _getLocationData() { + var result = {}; + var editor = this.editor; + var $selectionELem = editor.selection.getSelectionContainerElem(); + if (!$selectionELem) { + return; + } + var nodeName = $selectionELem.getNodeName(); + if (nodeName !== 'TD' && nodeName !== 'TH') { + return; + } - // 记录属性 - this.panel = panel; - }, - - // 插入表格 - _insert: function _insert(rowNum, colNum) { - // 拼接 table 模板 - var r = void 0, - c = void 0; - var html = ''; - for (r = 0; r < rowNum; r++) { - html += ''; - if (r === 0) { - for (c = 0; c < colNum; c++) { - html += ''; + // 获取 td index + var $tr = $selectionELem.parent(); + var $tds = $tr.children(); + var tdLength = $tds.length; + $tds.forEach(function (td, index) { + if (td === $selectionELem[0]) { + // 记录并跳出循环 + result.td = { + index: index, + elem: td, + length: tdLength + }; + return false; } - } else { - for (c = 0; c < colNum; c++) { - html += ''; + }); + + // 获取 tr index + var $tbody = $tr.parent(); + var $trs = $tbody.children(); + var trLength = $trs.length; + $trs.forEach(function (tr, index) { + if (tr === $tr[0]) { + // 记录并跳出循环 + result.tr = { + index: index, + elem: tr, + length: trLength + }; + return false; } + }); + + // 返回结果 + return result; + }, + + // 增加行 + _addRow: function _addRow() { + // 获取当前单元格的位置信息 + var locationData = this._getLocationData(); + if (!locationData) { + return; + } + var trData = locationData.tr; + var $currentTr = $(trData.elem); + var tdData = locationData.td; + var tdLength = tdData.length; + + // 拼接即将插入的字符串 + var newTr = document.createElement('tr'); + var tpl = '', + i = void 0; + for (i = 0; i < tdLength; i++) { + tpl += ''; + } + newTr.innerHTML = tpl; + // 插入 + $(newTr).insertAfter($currentTr); + }, + + // 增加列 + _addCol: function _addCol() { + // 获取当前单元格的位置信息 + var locationData = this._getLocationData(); + if (!locationData) { + return; + } + var trData = locationData.tr; + var tdData = locationData.td; + var tdIndex = tdData.index; + var $currentTr = $(trData.elem); + var $trParent = $currentTr.parent(); + var $trs = $trParent.children(); + + // 遍历所有行 + $trs.forEach(function (tr) { + var $tr = $(tr); + var $tds = $tr.children(); + var $currentTd = $tds.get(tdIndex); + var name = $currentTd.getNodeName().toLowerCase(); + + // new 一个 td,并插入 + var newTd = document.createElement(name); + $(newTd).insertAfter($currentTd); + }); + }, + + // 删除行 + _delRow: function _delRow() { + // 获取当前单元格的位置信息 + var locationData = this._getLocationData(); + if (!locationData) { + return; + } + var trData = locationData.tr; + var $currentTr = $(trData.elem); + $currentTr.remove(); + }, + + // 删除列 + _delCol: function _delCol() { + // 获取当前单元格的位置信息 + var locationData = this._getLocationData(); + if (!locationData) { + return; + } + var trData = locationData.tr; + var tdData = locationData.td; + var tdIndex = tdData.index; + var $currentTr = $(trData.elem); + var $trParent = $currentTr.parent(); + var $trs = $trParent.children(); + + // 遍历所有行 + $trs.forEach(function (tr) { + var $tr = $(tr); + var $tds = $tr.children(); + var $currentTd = $tds.get(tdIndex); + // 删除 + $currentTd.remove(); + }); + }, + + // 删除表格 + _delTable: function _delTable() { + var editor = this.editor; + var $selectionELem = editor.selection.getSelectionContainerElem(); + if (!$selectionELem) { + return; + } + var $table = $selectionELem.parentUntil('table'); + if (!$table) { + return; + } + $table.remove(); + }, + + // 试图改变 active 状态 + tryChangeActive: function tryChangeActive(e) { + var editor = this.editor; + var $elem = this.$elem; + var $selectionELem = editor.selection.getSelectionContainerElem(); + if (!$selectionELem) { + return; + } + var nodeName = $selectionELem.getNodeName(); + if (nodeName === 'TD' || nodeName === 'TH') { + this._active = true; + $elem.addClass('w-e-active'); + } else { + this._active = false; + $elem.removeClass('w-e-active'); } - html += ''; } - html += '
             


          '; + }; - // 执行命令 - var editor = this.editor; - editor.cmd.do('insertHTML', html); - - // 防止 firefox 下出现 resize 的控制点 - editor.cmd.do('enableObjectResizing', false); - editor.cmd.do('enableInlineTableEditing', false); - }, - - // 创建编辑表格的 panel - _createEditPanel: function _createEditPanel() { - var _this2 = this; - - // 可用的 id - var addRowBtnId = getRandom('add-row'); - var addColBtnId = getRandom('add-col'); - var delRowBtnId = getRandom('del-row'); - var delColBtnId = getRandom('del-col'); - var delTableBtnId = getRandom('del-table'); - - // 创建 panel 对象 - var panel = new Panel(this, { - width: 320, - // panel 包含多个 tab - tabs: [{ - // 标题 - title: '编辑表格', - // 模板 - tpl: '
          \n
          \n \n \n \n \n
          \n
          \n \n \n
          ', - // 事件绑定 + /* + menu - video +*/ + +// 构造函数 + function Video(editor) { + this.editor = editor; + this.$elem = $('
          '); + this.type = 'panel'; + + // 当前是否 active 状态 + this._active = false; + } + +// 原型 + Video.prototype = { + constructor: Video, + + onClick: function onClick() { + this._createPanel(); + }, + + _createPanel: function _createPanel() { + var _this = this; + + // 创建 id + var textValId = getRandom('text-val'); + var btnId = getRandom('btn'); + + // 创建 panel + var panel = new Panel(this, { + width: 350, + // 一个 panel 多个 tab + tabs: [{ + // 标题 + title: '插入视频', + // 模板 + tpl: '
          \n \n
          \n \n
          \n
          ', + // 事件绑定 + events: [{ + selector: '#' + btnId, + type: 'click', + fn: function fn() { + var $text = $('#' + textValId); + var val = $text.val().trim(); + + // 测试用视频地址 + // + + if (val) { + // 插入视频 + _this._insert(val); + } + + // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + return true; + } + }] + } // first tab end + ] // tabs end + }); // panel end + + // 显示 panel + panel.show(); + + // 记录属性 + this.panel = panel; + }, + + // 插入视频 + _insert: function _insert(val) { + var editor = this.editor; + editor.cmd.do('insertHTML', val + '


          '); + } + }; + + /* + menu - img +*/ + +// 构造函数 + function Image(editor) { + this.editor = editor; + var imgMenuId = getRandom('w-e-img'); + this.$elem = $('
          '); + editor.imgMenuId = imgMenuId; + this.type = 'panel'; + + // 当前是否 active 状态 + this._active = false; + } + +// 原型 + Image.prototype = { + constructor: Image, + + onClick: function onClick() { + var editor = this.editor; + var config = editor.config; + if (config.qiniu) { + return; + } + if (this._active) { + this._createEditPanel(); + } else { + this._createInsertPanel(); + } + }, + + _createEditPanel: function _createEditPanel() { + var editor = this.editor; + + // id + var width30 = getRandom('width-30'); + var width50 = getRandom('width-50'); + var width100 = getRandom('width-100'); + var delBtn = getRandom('del-btn'); + + // tab 配置 + var tabsConfig = [{ + title: '编辑图片', + tpl: '
          \n
          \n \u6700\u5927\u5BBD\u5EA6\uFF1A\n \n \n \n
          \n
          \n \n \n
          ', events: [{ - // 增加行 - selector: '#' + addRowBtnId, + selector: '#' + width30, type: 'click', fn: function fn() { - _this2._addRow(); + var $img = editor._selectedImg; + if ($img) { + $img.css('max-width', '30%'); + } // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 return true; } }, { - // 增加列 - selector: '#' + addColBtnId, + selector: '#' + width50, type: 'click', fn: function fn() { - _this2._addCol(); + var $img = editor._selectedImg; + if ($img) { + $img.css('max-width', '50%'); + } // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 return true; } }, { - // 删除行 - selector: '#' + delRowBtnId, + selector: '#' + width100, type: 'click', fn: function fn() { - _this2._delRow(); + var $img = editor._selectedImg; + if ($img) { + $img.css('max-width', '100%'); + } // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 return true; } }, { - // 删除列 - selector: '#' + delColBtnId, + selector: '#' + delBtn, type: 'click', fn: function fn() { - _this2._delCol(); + var $img = editor._selectedImg; + if ($img) { + $img.remove(); + } // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 return true; } - }, { - // 删除表格 - selector: '#' + delTableBtnId, + }] + }]; + + // 创建 panel 并显示 + var panel = new Panel(this, { + width: 300, + tabs: tabsConfig + }); + panel.show(); + + // 记录属性 + this.panel = panel; + }, + + _createInsertPanel: function _createInsertPanel() { + var editor = this.editor; + var uploadImg = editor.uploadImg; + var config = editor.config; + + // id + var upTriggerId = getRandom('up-trigger'); + var upFileId = getRandom('up-file'); + var linkUrlId = getRandom('link-url'); + var linkBtnId = getRandom('link-btn'); + + // tabs 的配置 + var tabsConfig = [{ + title: '上传图片', + tpl: '
          \n
          \n \n
          \n
          \n \n
          \n
          ', + events: [{ + // 触发选择图片 + selector: '#' + upTriggerId, type: 'click', fn: function fn() { - _this2._delTable(); - // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + var $file = $('#' + upFileId); + var fileElem = $file[0]; + if (fileElem) { + fileElem.click(); + } else { + // 返回 true 可关闭 panel + return true; + } + } + }, { + // 选择图片完毕 + selector: '#' + upFileId, + type: 'change', + fn: function fn() { + var $file = $('#' + upFileId); + var fileElem = $file[0]; + if (!fileElem) { + // 返回 true 可关闭 panel + return true; + } + + // 获取选中的 file 对象列表 + var fileList = fileElem.files; + if (fileList.length) { + uploadImg.uploadImg(fileList); + } + + // 返回 true 可关闭 panel return true; } }] - }] - }); - // 显示 panel - panel.show(); - }, - - // 获取选中的单元格的位置信息 - _getLocationData: function _getLocationData() { - var result = {}; - var editor = this.editor; - var $selectionELem = editor.selection.getSelectionContainerElem(); - if (!$selectionELem) { - return; - } - var nodeName = $selectionELem.getNodeName(); - if (nodeName !== 'TD' && nodeName !== 'TH') { - return; - } + }, // first tab end + { + title: '网络图片', + tpl: '
          \n \n
          \n \n
          \n
          ', + events: [{ + selector: '#' + linkBtnId, + type: 'click', + fn: function fn() { + var $linkUrl = $('#' + linkUrlId); + var url = $linkUrl.val().trim(); + + if (url) { + uploadImg.insertLinkImg(url); + } - // 获取 td index - var $tr = $selectionELem.parent(); - var $tds = $tr.children(); - var tdLength = $tds.length; - $tds.forEach(function (td, index) { - if (td === $selectionELem[0]) { - // 记录并跳出循环 - result.td = { - index: index, - elem: td, - length: tdLength - }; - return false; + // 返回 true 表示函数执行结束之后关闭 panel + return true; + } + }] + } // second tab end + ]; // tabs end + + // 判断 tabs 的显示 + var tabsConfigResult = []; + if ((config.uploadImgShowBase64 || config.uploadImgServer || config.customUploadImg) && window.FileReader) { + // 显示“上传图片” + tabsConfigResult.push(tabsConfig[0]); } - }); - - // 获取 tr index - var $tbody = $tr.parent(); - var $trs = $tbody.children(); - var trLength = $trs.length; - $trs.forEach(function (tr, index) { - if (tr === $tr[0]) { - // 记录并跳出循环 - result.tr = { - index: index, - elem: tr, - length: trLength - }; - return false; + if (config.showLinkImg) { + // 显示“网络图片” + tabsConfigResult.push(tabsConfig[1]); } - }); - - // 返回结果 - return result; - }, - // 增加行 - _addRow: function _addRow() { - // 获取当前单元格的位置信息 - var locationData = this._getLocationData(); - if (!locationData) { - return; - } - var trData = locationData.tr; - var $currentTr = $(trData.elem); - var tdData = locationData.td; - var tdLength = tdData.length; - - // 拼接即将插入的字符串 - var newTr = document.createElement('tr'); - var tpl = '', - i = void 0; - for (i = 0; i < tdLength; i++) { - tpl += ' '; - } - newTr.innerHTML = tpl; - // 插入 - $(newTr).insertAfter($currentTr); - }, - - // 增加列 - _addCol: function _addCol() { - // 获取当前单元格的位置信息 - var locationData = this._getLocationData(); - if (!locationData) { - return; - } - var trData = locationData.tr; - var tdData = locationData.td; - var tdIndex = tdData.index; - var $currentTr = $(trData.elem); - var $trParent = $currentTr.parent(); - var $trs = $trParent.children(); - - // 遍历所有行 - $trs.forEach(function (tr) { - var $tr = $(tr); - var $tds = $tr.children(); - var $currentTd = $tds.get(tdIndex); - var name = $currentTd.getNodeName().toLowerCase(); - - // new 一个 td,并插入 - var newTd = document.createElement(name); - $(newTd).insertAfter($currentTd); - }); - }, + // 创建 panel 并显示 + var panel = new Panel(this, { + width: 300, + tabs: tabsConfigResult + }); + panel.show(); - // 删除行 - _delRow: function _delRow() { - // 获取当前单元格的位置信息 - var locationData = this._getLocationData(); - if (!locationData) { - return; - } - var trData = locationData.tr; - var $currentTr = $(trData.elem); - $currentTr.remove(); - }, - - // 删除列 - _delCol: function _delCol() { - // 获取当前单元格的位置信息 - var locationData = this._getLocationData(); - if (!locationData) { - return; - } - var trData = locationData.tr; - var tdData = locationData.td; - var tdIndex = tdData.index; - var $currentTr = $(trData.elem); - var $trParent = $currentTr.parent(); - var $trs = $trParent.children(); - - // 遍历所有行 - $trs.forEach(function (tr) { - var $tr = $(tr); - var $tds = $tr.children(); - var $currentTd = $tds.get(tdIndex); - // 删除 - $currentTd.remove(); - }); - }, + // 记录属性 + this.panel = panel; + }, - // 删除表格 - _delTable: function _delTable() { - var editor = this.editor; - var $selectionELem = editor.selection.getSelectionContainerElem(); - if (!$selectionELem) { - return; - } - var $table = $selectionELem.parentUntil('table'); - if (!$table) { - return; - } - $table.remove(); - }, - - // 试图改变 active 状态 - tryChangeActive: function tryChangeActive(e) { - var editor = this.editor; - var $elem = this.$elem; - var $selectionELem = editor.selection.getSelectionContainerElem(); - if (!$selectionELem) { - return; - } - var nodeName = $selectionELem.getNodeName(); - if (nodeName === 'TD' || nodeName === 'TH') { - this._active = true; - $elem.addClass('w-e-active'); - } else { - this._active = false; - $elem.removeClass('w-e-active'); + // 试图改变 active 状态 + tryChangeActive: function tryChangeActive(e) { + var editor = this.editor; + var $elem = this.$elem; + if (editor._selectedImg) { + this._active = true; + $elem.addClass('w-e-active'); + } else { + this._active = false; + $elem.removeClass('w-e-active'); + } } - } -}; + }; -/* - menu - video + /* + 所有菜单的汇总 */ -// 构造函数 -function Video(editor) { - this.editor = editor; - this.$elem = $('
          '); - this.type = 'panel'; - // 当前是否 active 状态 - this._active = false; -} +// 存储菜单的构造函数 + var MenuConstructors = {}; -// 原型 -Video.prototype = { - constructor: Video, + MenuConstructors.bold = Bold; - onClick: function onClick() { - this._createPanel(); - }, + MenuConstructors.head = Head; - _createPanel: function _createPanel() { - var _this = this; + MenuConstructors.fontSize = FontSize; - // 创建 id - var textValId = getRandom('text-val'); - var btnId = getRandom('btn'); + MenuConstructors.fontName = FontName; - // 创建 panel - var panel = new Panel(this, { - width: 350, - // 一个 panel 多个 tab - tabs: [{ - // 标题 - title: '插入视频', - // 模板 - tpl: '
          \n \n
          \n \n
          \n
          ', - // 事件绑定 - events: [{ - selector: '#' + btnId, - type: 'click', - fn: function fn() { - var $text = $('#' + textValId); - var val = $text.val().trim(); + MenuConstructors.link = Link; - // 测试用视频地址 - // + MenuConstructors.italic = Italic; - if (val) { - // 插入视频 - _this._insert(val); - } + MenuConstructors.redo = Redo; - // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 - return true; - } - }] - } // first tab end - ] // tabs end - }); // panel end + MenuConstructors.strikeThrough = StrikeThrough; - // 显示 panel - panel.show(); + MenuConstructors.underline = Underline; - // 记录属性 - this.panel = panel; - }, + MenuConstructors.undo = Undo; - // 插入视频 - _insert: function _insert(val) { - var editor = this.editor; - editor.cmd.do('insertHTML', val + '


          '); - } -}; + MenuConstructors.list = List; -/* - menu - img -*/ -// 构造函数 -function Image(editor) { - this.editor = editor; - var imgMenuId = getRandom('w-e-img'); - this.$elem = $('
          '); - editor.imgMenuId = imgMenuId; - this.type = 'panel'; + MenuConstructors.justify = Justify; - // 当前是否 active 状态 - this._active = false; -} + MenuConstructors.foreColor = ForeColor; -// 原型 -Image.prototype = { - constructor: Image, + MenuConstructors.backColor = BackColor; - onClick: function onClick() { - var editor = this.editor; - var config = editor.config; - if (config.qiniu) { - return; - } - if (this._active) { - this._createEditPanel(); - } else { - this._createInsertPanel(); - } - }, - - _createEditPanel: function _createEditPanel() { - var editor = this.editor; - - // id - var width30 = getRandom('width-30'); - var width50 = getRandom('width-50'); - var width100 = getRandom('width-100'); - var delBtn = getRandom('del-btn'); - - // tab 配置 - var tabsConfig = [{ - title: '编辑图片', - tpl: '
          \n
          \n \u6700\u5927\u5BBD\u5EA6\uFF1A\n \n \n \n
          \n
          \n \n \n
          ', - events: [{ - selector: '#' + width30, - type: 'click', - fn: function fn() { - var $img = editor._selectedImg; - if ($img) { - $img.css('max-width', '30%'); - } - // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 - return true; - } - }, { - selector: '#' + width50, - type: 'click', - fn: function fn() { - var $img = editor._selectedImg; - if ($img) { - $img.css('max-width', '50%'); - } - // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 - return true; - } - }, { - selector: '#' + width100, - type: 'click', - fn: function fn() { - var $img = editor._selectedImg; - if ($img) { - $img.css('max-width', '100%'); - } - // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 - return true; - } - }, { - selector: '#' + delBtn, - type: 'click', - fn: function fn() { - var $img = editor._selectedImg; - if ($img) { - $img.remove(); - } - // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 - return true; - } - }] - }]; + MenuConstructors.quote = Quote; - // 创建 panel 并显示 - var panel = new Panel(this, { - width: 300, - tabs: tabsConfig - }); - panel.show(); + MenuConstructors.code = Code; - // 记录属性 - this.panel = panel; - }, + MenuConstructors.emoticon = Emoticon; - _createInsertPanel: function _createInsertPanel() { - var editor = this.editor; - var uploadImg = editor.uploadImg; - var config = editor.config; + MenuConstructors.table = Table; - // id - var upTriggerId = getRandom('up-trigger'); - var upFileId = getRandom('up-file'); - var linkUrlId = getRandom('link-url'); - var linkBtnId = getRandom('link-btn'); - - // tabs 的配置 - var tabsConfig = [{ - title: '上传图片', - tpl: '
          \n
          \n \n
          \n
          \n \n
          \n
          ', - events: [{ - // 触发选择图片 - selector: '#' + upTriggerId, - type: 'click', - fn: function fn() { - var $file = $('#' + upFileId); - var fileElem = $file[0]; - if (fileElem) { - fileElem.click(); - } else { - // 返回 true 可关闭 panel - return true; - } - } - }, { - // 选择图片完毕 - selector: '#' + upFileId, - type: 'change', - fn: function fn() { - var $file = $('#' + upFileId); - var fileElem = $file[0]; - if (!fileElem) { - // 返回 true 可关闭 panel - return true; - } + MenuConstructors.video = Video; - // 获取选中的 file 对象列表 - var fileList = fileElem.files; - if (fileList.length) { - uploadImg.uploadImg(fileList); - } + MenuConstructors.image = Image; - // 返回 true 可关闭 panel - return true; - } - }] - }, // first tab end - { - title: '网络图片', - tpl: '
          \n \n
          \n \n
          \n
          ', - events: [{ - selector: '#' + linkBtnId, - type: 'click', - fn: function fn() { - var $linkUrl = $('#' + linkUrlId); - var url = $linkUrl.val().trim(); - - if (url) { - uploadImg.insertLinkImg(url); - } + /* + 菜单集合 +*/ - // 返回 true 表示函数执行结束之后关闭 panel - return true; - } - }] - } // second tab end - ]; // tabs end - - // 判断 tabs 的显示 - var tabsConfigResult = []; - if ((config.uploadImgShowBase64 || config.uploadImgServer || config.customUploadImg) && window.FileReader) { - // 显示“上传图片” - tabsConfigResult.push(tabsConfig[0]); - } - if (config.showLinkImg) { - // 显示“网络图片” - tabsConfigResult.push(tabsConfig[1]); - } +// 构造函数 + function Menus(editor) { + this.editor = editor; + this.menus = {}; + } - // 创建 panel 并显示 - var panel = new Panel(this, { - width: 300, - tabs: tabsConfigResult - }); - panel.show(); +// 修改原型 + Menus.prototype = { + constructor: Menus, - // 记录属性 - this.panel = panel; - }, - - // 试图改变 active 状态 - tryChangeActive: function tryChangeActive(e) { - var editor = this.editor; - var $elem = this.$elem; - if (editor._selectedImg) { - this._active = true; - $elem.addClass('w-e-active'); - } else { - this._active = false; - $elem.removeClass('w-e-active'); - } - } -}; - -/* - 所有菜单的汇总 -*/ - -// 存储菜单的构造函数 -var MenuConstructors = {}; - -MenuConstructors.bold = Bold; - -MenuConstructors.head = Head; - -MenuConstructors.fontSize = FontSize; - -MenuConstructors.fontName = FontName; - -MenuConstructors.link = Link; - -MenuConstructors.italic = Italic; + // 初始化菜单 + init: function init() { + var _this = this; + + var editor = this.editor; + var config = editor.config || {}; + var configMenus = config.menus || []; // 获取配置中的菜单 + + // 根据配置信息,创建菜单 + configMenus.forEach(function (menuKey) { + var MenuConstructor = MenuConstructors[menuKey]; + if (MenuConstructor && typeof MenuConstructor === 'function') { + // 创建单个菜单 + _this.menus[menuKey] = new MenuConstructor(editor); + } + }); -MenuConstructors.redo = Redo; + // 添加到菜单栏 + this._addToToolbar(); -MenuConstructors.strikeThrough = StrikeThrough; + // 绑定事件 + this._bindEvent(); + }, -MenuConstructors.underline = Underline; + // 添加到菜单栏 + _addToToolbar: function _addToToolbar() { + var editor = this.editor; + var $toolbarElem = editor.$toolbarElem; + var menus = this.menus; + var config = editor.config; + // config.zIndex 是配置的编辑区域的 z-index,菜单的 z-index 得在其基础上 +1 + var zIndex = config.zIndex + 1; + objForEach(menus, function (key, menu) { + var $elem = menu.$elem; + if ($elem) { + // 设置 z-index + $elem.css('z-index', zIndex); + $toolbarElem.append($elem); + } + }); + }, -MenuConstructors.undo = Undo; + // 绑定菜单 click mouseenter 事件 + _bindEvent: function _bindEvent() { + var menus = this.menus; + var editor = this.editor; + objForEach(menus, function (key, menu) { + var type = menu.type; + if (!type) { + return; + } + var $elem = menu.$elem; + var droplist = menu.droplist; + var panel = menu.panel; + + // 点击类型,例如 bold + if (type === 'click' && menu.onClick) { + $elem.on('click', function (e) { + if (editor.selection.getRange() == null) { + return; + } + menu.onClick(e); + }); + } -MenuConstructors.list = List; + // 下拉框,例如 head + if (type === 'droplist' && droplist) { + $elem.on('mouseenter', function (e) { + if (editor.selection.getRange() == null) { + return; + } + // 显示 + droplist.showTimeoutId = setTimeout(function () { + droplist.show(); + }, 200); + }).on('mouseleave', function (e) { + // 隐藏 + droplist.hideTimeoutId = setTimeout(function () { + droplist.hide(); + }, 0); + }); + } -MenuConstructors.justify = Justify; + // 弹框类型,例如 link + if (type === 'panel' && menu.onClick) { + $elem.on('click', function (e) { + e.stopPropagation(); + if (editor.selection.getRange() == null) { + return; + } + // 在自定义事件中显示 panel + menu.onClick(e); + }); + } + }); + }, -MenuConstructors.foreColor = ForeColor; + // 尝试修改菜单状态 + changeActive: function changeActive() { + var menus = this.menus; + objForEach(menus, function (key, menu) { + if (menu.tryChangeActive) { + setTimeout(function () { + menu.tryChangeActive(); + }, 100); + } + }); + } + }; -MenuConstructors.backColor = BackColor; + /* + 粘贴信息的处理 +*/ -MenuConstructors.quote = Quote; +// 获取粘贴的纯文本 + function getPasteText(e) { + var clipboardData = e.clipboardData || e.originalEvent && e.originalEvent.clipboardData; + var pasteText = void 0; + if (clipboardData == null) { + pasteText = window.clipboardData && window.clipboardData.getData('text'); + } else { + pasteText = clipboardData.getData('text/plain'); + } -MenuConstructors.code = Code; + return replaceHtmlSymbol(pasteText); + } -MenuConstructors.emoticon = Emoticon; +// 获取粘贴的html + function getPasteHtml(e, filterStyle, ignoreImg) { + var clipboardData = e.clipboardData || e.originalEvent && e.originalEvent.clipboardData; + var pasteText = void 0, + pasteHtml = void 0; + if (clipboardData == null) { + pasteText = window.clipboardData && window.clipboardData.getData('text'); + } else { + pasteText = clipboardData.getData('text/plain'); + pasteHtml = clipboardData.getData('text/html'); + } + if (!pasteHtml && pasteText) { + pasteHtml = '

          ' + replaceHtmlSymbol(pasteText) + '

          '; + } + if (!pasteHtml) { + return; + } -MenuConstructors.table = Table; + // 过滤word中状态过来的无用字符 + var docSplitHtml = pasteHtml.split(''); + if (docSplitHtml.length === 2) { + pasteHtml = docSplitHtml[0]; + } -MenuConstructors.video = Video; + // 过滤无用标签 + pasteHtml = pasteHtml.replace(/<(meta|script|link).+?>/igm, ''); + // 去掉注释 + pasteHtml = pasteHtml.replace(//mg, ''); + // 过滤 data-xxx 属性 + pasteHtml = pasteHtml.replace(/\s?data-.+?=('|").+?('|")/igm, ''); -MenuConstructors.image = Image; + if (ignoreImg) { + // 忽略图片 + pasteHtml = pasteHtml.replace(//igm, ''); + } -/* - 菜单集合 -*/ -// 构造函数 -function Menus(editor) { - this.editor = editor; - this.menus = {}; -} + if (filterStyle) { + // 过滤样式 + pasteHtml = pasteHtml.replace(/\s?(class|style)=('|").*?('|")/igm, ''); + } else { + // 保留样式 + pasteHtml = pasteHtml.replace(/\s?class=('|").*?('|")/igm, ''); + } -// 修改原型 -Menus.prototype = { - constructor: Menus, + return pasteHtml; + } - // 初始化菜单 - init: function init() { - var _this = this; +// 获取粘贴的图片文件 + function getPasteImgs(e) { + var result = []; + var txt = getPasteText(e); + if (txt) { + // 有文字,就忽略图片 + return result; + } - var editor = this.editor; - var config = editor.config || {}; - var configMenus = config.menus || []; // 获取配置中的菜单 + var clipboardData = e.clipboardData || e.originalEvent && e.originalEvent.clipboardData || {}; + var items = clipboardData.items; + if (!items) { + return result; + } - // 根据配置信息,创建菜单 - configMenus.forEach(function (menuKey) { - var MenuConstructor = MenuConstructors[menuKey]; - if (MenuConstructor && typeof MenuConstructor === 'function') { - // 创建单个菜单 - _this.menus[menuKey] = new MenuConstructor(editor); + objForEach(items, function (key, value) { + var type = value.type; + if (/image/i.test(type)) { + result.push(value.getAsFile()); } }); - // 添加到菜单栏 - this._addToToolbar(); + return result; + } - // 绑定事件 - this._bindEvent(); - }, - - // 添加到菜单栏 - _addToToolbar: function _addToToolbar() { - var editor = this.editor; - var $toolbarElem = editor.$toolbarElem; - var menus = this.menus; - var config = editor.config; - // config.zIndex 是配置的编辑区域的 z-index,菜单的 z-index 得在其基础上 +1 - var zIndex = config.zIndex + 1; - objForEach(menus, function (key, menu) { - var $elem = menu.$elem; - if ($elem) { - // 设置 z-index - $elem.css('z-index', zIndex); - $toolbarElem.append($elem); - } - }); - }, - - // 绑定菜单 click mouseenter 事件 - _bindEvent: function _bindEvent() { - var menus = this.menus; - var editor = this.editor; - objForEach(menus, function (key, menu) { - var type = menu.type; - if (!type) { - return; - } - var $elem = menu.$elem; - var droplist = menu.droplist; - var panel = menu.panel; + /* + 编辑区域 +*/ - // 点击类型,例如 bold - if (type === 'click' && menu.onClick) { - $elem.on('click', function (e) { - if (editor.selection.getRange() == null) { - return; - } - menu.onClick(e); - }); +// 获取一个 elem.childNodes 的 JSON 数据 + function getChildrenJSON($elem) { + var result = []; + var $children = $elem.childNodes() || []; // 注意 childNodes() 可以获取文本节点 + $children.forEach(function (curElem) { + var elemResult = void 0; + var nodeType = curElem.nodeType; + + // 文本节点 + if (nodeType === 3) { + elemResult = curElem.textContent; + elemResult = replaceHtmlSymbol(elemResult); } - // 下拉框,例如 head - if (type === 'droplist' && droplist) { - $elem.on('mouseenter', function (e) { - if (editor.selection.getRange() == null) { - return; - } - // 显示 - droplist.showTimeoutId = setTimeout(function () { - droplist.show(); - }, 200); - }).on('mouseleave', function (e) { - // 隐藏 - droplist.hideTimeoutId = setTimeout(function () { - droplist.hide(); - }, 0); - }); + // 普通 DOM 节点 + if (nodeType === 1) { + elemResult = {}; + + // tag + elemResult.tag = curElem.nodeName.toLowerCase(); + // attr + var attrData = []; + var attrList = curElem.attributes || {}; + var attrListLength = attrList.length || 0; + for (var i = 0; i < attrListLength; i++) { + var attr = attrList[i]; + attrData.push({ + name: attr.name, + value: attr.value + }); + } + elemResult.attrs = attrData; + // children(递归) + elemResult.children = getChildrenJSON($(curElem)); } - // 弹框类型,例如 link - if (type === 'panel' && menu.onClick) { - $elem.on('click', function (e) { - e.stopPropagation(); - if (editor.selection.getRange() == null) { - return; - } - // 在自定义事件中显示 panel - menu.onClick(e); - }); - } + result.push(elemResult); }); - }, + return result; + } - // 尝试修改菜单状态 - changeActive: function changeActive() { - var menus = this.menus; - objForEach(menus, function (key, menu) { - if (menu.tryChangeActive) { - setTimeout(function () { - menu.tryChangeActive(); - }, 100); - } - }); +// 构造函数 + function Text(editor) { + this.editor = editor; } -}; -/* - 粘贴信息的处理 -*/ +// 修改原型 + Text.prototype = { + constructor: Text, -// 获取粘贴的纯文本 -function getPasteText(e) { - var clipboardData = e.clipboardData || e.originalEvent && e.originalEvent.clipboardData; - var pasteText = void 0; - if (clipboardData == null) { - pasteText = window.clipboardData && window.clipboardData.getData('text'); - } else { - pasteText = clipboardData.getData('text/plain'); - } + // 初始化 + init: function init() { + // 绑定事件 + this._bindEvent(); + }, - return replaceHtmlSymbol(pasteText); -} + // 清空内容 + clear: function clear() { + this.html('


          '); + }, -// 获取粘贴的html -function getPasteHtml(e, filterStyle, ignoreImg) { - var clipboardData = e.clipboardData || e.originalEvent && e.originalEvent.clipboardData; - var pasteText = void 0, - pasteHtml = void 0; - if (clipboardData == null) { - pasteText = window.clipboardData && window.clipboardData.getData('text'); - } else { - pasteText = clipboardData.getData('text/plain'); - pasteHtml = clipboardData.getData('text/html'); - } - if (!pasteHtml && pasteText) { - pasteHtml = '

          ' + replaceHtmlSymbol(pasteText) + '

          '; - } - if (!pasteHtml) { - return; - } + // 获取 设置 html + html: function html(val) { + var editor = this.editor; + var $textElem = editor.$textElem; + var html = void 0; + if (val == null) { + html = $textElem.html(); + // 未选中任何内容的时候点击“加粗”或者“斜体”等按钮,就得需要一个空的占位符 ​ ,这里替换掉 + html = html.replace(/\u200b/gm, ''); + return html; + } else { + $textElem.html(val); - // 过滤word中状态过来的无用字符 - var docSplitHtml = pasteHtml.split(''); - if (docSplitHtml.length === 2) { - pasteHtml = docSplitHtml[0]; - } + // 初始化选取,将光标定位到内容尾部 + editor.initSelection(); + } + }, - // 过滤无用标签 - pasteHtml = pasteHtml.replace(/<(meta|script|link).+?>/igm, ''); - // 去掉注释 - pasteHtml = pasteHtml.replace(//mg, ''); - // 过滤 data-xxx 属性 - pasteHtml = pasteHtml.replace(/\s?data-.+?=('|").+?('|")/igm, ''); + // 获取 JSON + getJSON: function getJSON() { + var editor = this.editor; + var $textElem = editor.$textElem; + return getChildrenJSON($textElem); + }, - if (ignoreImg) { - // 忽略图片 - pasteHtml = pasteHtml.replace(//igm, ''); - } + // 获取 设置 text + text: function text(val) { + var editor = this.editor; + var $textElem = editor.$textElem; + var text = void 0; + if (val == null) { + text = $textElem.text(); + // 未选中任何内容的时候点击“加粗”或者“斜体”等按钮,就得需要一个空的占位符 ​ ,这里替换掉 + text = text.replace(/\u200b/gm, ''); + return text; + } else { + $textElem.text('

          ' + val + '

          '); - if (filterStyle) { - // 过滤样式 - pasteHtml = pasteHtml.replace(/\s?(class|style)=('|").*?('|")/igm, ''); - } else { - // 保留样式 - pasteHtml = pasteHtml.replace(/\s?class=('|").*?('|")/igm, ''); - } + // 初始化选取,将光标定位到内容尾部 + editor.initSelection(); + } + }, - return pasteHtml; -} + // 追加内容 + append: function append(html) { + var editor = this.editor; + var $textElem = editor.$textElem; + $textElem.append($(html)); -// 获取粘贴的图片文件 -function getPasteImgs(e) { - var result = []; - var txt = getPasteText(e); - if (txt) { - // 有文字,就忽略图片 - return result; - } + // 初始化选取,将光标定位到内容尾部 + editor.initSelection(); + }, - var clipboardData = e.clipboardData || e.originalEvent && e.originalEvent.clipboardData || {}; - var items = clipboardData.items; - if (!items) { - return result; - } + // 绑定事件 + _bindEvent: function _bindEvent() { + // 实时保存选取 + this._saveRangeRealTime(); - objForEach(items, function (key, value) { - var type = value.type; - if (/image/i.test(type)) { - result.push(value.getAsFile()); - } - }); + // 按回车建时的特殊处理 + this._enterKeyHandle(); - return result; -} + // 清空时保留


          + this._clearHandle(); -/* - 编辑区域 -*/ + // 粘贴事件(粘贴文字,粘贴图片) + this._pasteHandle(); -// 获取一个 elem.childNodes 的 JSON 数据 -function getChildrenJSON($elem) { - var result = []; - var $children = $elem.childNodes() || []; // 注意 childNodes() 可以获取文本节点 - $children.forEach(function (curElem) { - var elemResult = void 0; - var nodeType = curElem.nodeType; - - // 文本节点 - if (nodeType === 3) { - elemResult = curElem.textContent; - elemResult = replaceHtmlSymbol(elemResult); - } + // tab 特殊处理 + this._tabHandle(); - // 普通 DOM 节点 - if (nodeType === 1) { - elemResult = {}; - - // tag - elemResult.tag = curElem.nodeName.toLowerCase(); - // attr - var attrData = []; - var attrList = curElem.attributes || {}; - var attrListLength = attrList.length || 0; - for (var i = 0; i < attrListLength; i++) { - var attr = attrList[i]; - attrData.push({ - name: attr.name, - value: attr.value - }); - } - elemResult.attrs = attrData; - // children(递归) - elemResult.children = getChildrenJSON($(curElem)); - } + // img 点击 + this._imgHandle(); - result.push(elemResult); - }); - return result; -} + // 拖拽事件 + this._dragHandle(); + }, -// 构造函数 -function Text(editor) { - this.editor = editor; -} + // 实时保存选取 + _saveRangeRealTime: function _saveRangeRealTime() { + var editor = this.editor; + var $textElem = editor.$textElem; + + // 保存当前的选区 + function saveRange(e) { + // 随时保存选区 + editor.selection.saveRange(); + // 更新按钮 ative 状态 + editor.menus.changeActive(); + } -// 修改原型 -Text.prototype = { - constructor: Text, + // 按键后保存 + $textElem.on('keyup', saveRange); + $textElem.on('mousedown', function (e) { + // mousedown 状态下,鼠标滑动到编辑区域外面,也需要保存选区 + $textElem.on('mouseleave', saveRange); + }); + $textElem.on('mouseup', function (e) { + saveRange(); + // 在编辑器区域之内完成点击,取消鼠标滑动到编辑区外面的事件 + $textElem.off('mouseleave', saveRange); + }); + }, - // 初始化 - init: function init() { - // 绑定事件 - this._bindEvent(); - }, - - // 清空内容 - clear: function clear() { - this.html('


          '); - }, - - // 获取 设置 html - html: function html(val) { - var editor = this.editor; - var $textElem = editor.$textElem; - var html = void 0; - if (val == null) { - html = $textElem.html(); - // 未选中任何内容的时候点击“加粗”或者“斜体”等按钮,就得需要一个空的占位符 ​ ,这里替换掉 - html = html.replace(/\u200b/gm, ''); - return html; - } else { - $textElem.html(val); + // 按回车键时的特殊处理 + _enterKeyHandle: function _enterKeyHandle() { + var editor = this.editor; + var $textElem = editor.$textElem; - // 初始化选取,将光标定位到内容尾部 - editor.initSelection(); - } - }, - - // 获取 JSON - getJSON: function getJSON() { - var editor = this.editor; - var $textElem = editor.$textElem; - return getChildrenJSON($textElem); - }, - - // 获取 设置 text - text: function text(val) { - var editor = this.editor; - var $textElem = editor.$textElem; - var text = void 0; - if (val == null) { - text = $textElem.text(); - // 未选中任何内容的时候点击“加粗”或者“斜体”等按钮,就得需要一个空的占位符 ​ ,这里替换掉 - text = text.replace(/\u200b/gm, ''); - return text; - } else { - $textElem.text('

          ' + val + '

          '); + function insertEmptyP($selectionElem) { + var $p = $('


          '); + $p.insertBefore($selectionElem); + editor.selection.createRangeByElem($p, true); + editor.selection.restoreSelection(); + $selectionElem.remove(); + } - // 初始化选取,将光标定位到内容尾部 - editor.initSelection(); - } - }, + // 将回车之后生成的非

          的顶级标签,改为

          + function pHandle(e) { + var $selectionElem = editor.selection.getSelectionContainerElem(); + var $parentElem = $selectionElem.parent(); + + if ($parentElem.html() === '
          ') { + // 回车之前光标所在一个

          .....

          ,忽然回车生成一个空的


          + // 而且继续回车跳不出去,因此只能特殊处理 + insertEmptyP($selectionElem); + return; + } - // 追加内容 - append: function append(html) { - var editor = this.editor; - var $textElem = editor.$textElem; - $textElem.append($(html)); + if (!$parentElem.equal($textElem)) { + // 不是顶级标签 + return; + } - // 初始化选取,将光标定位到内容尾部 - editor.initSelection(); - }, + var nodeName = $selectionElem.getNodeName(); + if (nodeName === 'P') { + // 当前的标签是 P ,不用做处理 + return; + } - // 绑定事件 - _bindEvent: function _bindEvent() { - // 实时保存选取 - this._saveRangeRealTime(); + if ($selectionElem.text()) { + // 有内容,不做处理 + return; + } - // 按回车建时的特殊处理 - this._enterKeyHandle(); + // 插入

          ,并将选取定位到

          ,删除当前标签 + insertEmptyP($selectionElem); + } - // 清空时保留


          - this._clearHandle(); + $textElem.on('keyup', function (e) { + if (e.keyCode !== 13) { + // 不是回车键 + return; + } + // 将回车之后生成的非

          的顶级标签,改为

          + pHandle(e); + }); - // 粘贴事件(粘贴文字,粘贴图片) - this._pasteHandle(); + //

          回车时 特殊处理 + function codeHandle(e) { + var $selectionElem = editor.selection.getSelectionContainerElem(); + if (!$selectionElem) { + return; + } + var $parentElem = $selectionElem.parent(); + var selectionNodeName = $selectionElem.getNodeName(); + var parentNodeName = $parentElem.getNodeName(); - // tab 特殊处理 - this._tabHandle(); + if (selectionNodeName !== 'CODE' || parentNodeName !== 'PRE') { + // 不符合要求 忽略 + return; + } - // img 点击 - this._imgHandle(); + if (!editor.cmd.queryCommandSupported('insertHTML')) { + // 必须原生支持 insertHTML 命令 + return; + } - // 拖拽事件 - this._dragHandle(); - }, + // 处理:光标定位到代码末尾,联系点击两次回车,即跳出代码块 + if (editor._willBreakCode === true) { + // 此时可以跳出代码块 + // 插入

          ,并将选取定位到

          + var $p = $('


          '); + $p.insertAfter($parentElem); + editor.selection.createRangeByElem($p, true); + editor.selection.restoreSelection(); - // 实时保存选取 - _saveRangeRealTime: function _saveRangeRealTime() { - var editor = this.editor; - var $textElem = editor.$textElem; + // 修改状态 + editor._willBreakCode = false; - // 保存当前的选区 - function saveRange(e) { - // 随时保存选区 - editor.selection.saveRange(); - // 更新按钮 ative 状态 - editor.menus.changeActive(); - } - // 按键后保存 - $textElem.on('keyup', saveRange); - $textElem.on('mousedown', function (e) { - // mousedown 状态下,鼠标滑动到编辑区域外面,也需要保存选区 - $textElem.on('mouseleave', saveRange); - }); - $textElem.on('mouseup', function (e) { - saveRange(); - // 在编辑器区域之内完成点击,取消鼠标滑动到编辑区外面的事件 - $textElem.off('mouseleave', saveRange); - }); - }, + e.preventDefault(); + return; + } - // 按回车键时的特殊处理 - _enterKeyHandle: function _enterKeyHandle() { - var editor = this.editor; - var $textElem = editor.$textElem; + var _startOffset = editor.selection.getRange().startOffset; - function insertEmptyP($selectionElem) { - var $p = $('


          '); - $p.insertBefore($selectionElem); - editor.selection.createRangeByElem($p, true); - editor.selection.restoreSelection(); - $selectionElem.remove(); - } + // 处理:回车时,不能插入
          而是插入 \n ,因为是在 pre 标签里面 + editor.cmd.do('insertHTML', '\n'); + editor.selection.saveRange(); + if (editor.selection.getRange().startOffset === _startOffset) { + // 没起作用,再来一遍 + editor.cmd.do('insertHTML', '\n'); + } - // 将回车之后生成的非

          的顶级标签,改为

          - function pHandle(e) { - var $selectionElem = editor.selection.getSelectionContainerElem(); - var $parentElem = $selectionElem.parent(); + var codeLength = $selectionElem.html().length; + if (editor.selection.getRange().startOffset + 1 === codeLength) { + // 说明光标在代码最后的位置,执行了回车操作 + // 记录下来,以便下次回车时候跳出 code + editor._willBreakCode = true; + } - if ($parentElem.html() === '
          ') { - // 回车之前光标所在一个

          .....

          ,忽然回车生成一个空的


          - // 而且继续回车跳不出去,因此只能特殊处理 - insertEmptyP($selectionElem); - return; + // 阻止默认行为 + e.preventDefault(); } - if (!$parentElem.equal($textElem)) { - // 不是顶级标签 - return; - } + $textElem.on('keydown', function (e) { + if (e.keyCode !== 13) { + // 不是回车键 + // 取消即将跳转代码块的记录 + editor._willBreakCode = false; + return; + } + //
          回车时 特殊处理 + codeHandle(e); + }); + }, - var nodeName = $selectionElem.getNodeName(); - if (nodeName === 'P') { - // 当前的标签是 P ,不用做处理 - return; - } + // 清空时保留


          + _clearHandle: function _clearHandle() { + var editor = this.editor; + var $textElem = editor.$textElem; - if ($selectionElem.text()) { - // 有内容,不做处理 - return; - } + $textElem.on('keydown', function (e) { + if (e.keyCode !== 8) { + return; + } + var txtHtml = $textElem.html().toLowerCase().trim(); + if (txtHtml === '


          ') { + // 最后剩下一个空行,就不再删除了 + e.preventDefault(); + return; + } + }); - // 插入

          ,并将选取定位到

          ,删除当前标签 - insertEmptyP($selectionElem); - } + $textElem.on('keyup', function (e) { + if (e.keyCode !== 8) { + return; + } + var $p = void 0; + var txtHtml = $textElem.html().toLowerCase().trim(); + + // firefox 时用 txtHtml === '
          ' 判断,其他用 !txtHtml 判断 + if (!txtHtml || txtHtml === '
          ') { + // 内容空了 + $p = $('


          '); + $textElem.html(''); // 一定要先清空,否则在 firefox 下有问题 + $textElem.append($p); + editor.selection.createRangeByElem($p, false, true); + editor.selection.restoreSelection(); + } + }); + }, - $textElem.on('keyup', function (e) { - if (e.keyCode !== 13) { - // 不是回车键 - return; + // 粘贴事件(粘贴文字 粘贴图片) + _pasteHandle: function _pasteHandle() { + var editor = this.editor; + var config = editor.config; + var pasteFilterStyle = config.pasteFilterStyle; + var pasteTextHandle = config.pasteTextHandle; + var ignoreImg = config.pasteIgnoreImg; + var $textElem = editor.$textElem; + + // 粘贴图片、文本的事件,每次只能执行一个 + // 判断该次粘贴事件是否可以执行 + var pasteTime = 0; + + function canDo() { + var now = Date.now(); + var flag = false; + if (now - pasteTime >= 100) { + // 间隔大于 100 ms ,可以执行 + flag = true; + } + pasteTime = now; + return flag; } - // 将回车之后生成的非

          的顶级标签,改为

          - pHandle(e); - }); - //

          回车时 特殊处理 - function codeHandle(e) { - var $selectionElem = editor.selection.getSelectionContainerElem(); - if (!$selectionElem) { - return; + function resetTime() { + pasteTime = 0; } - var $parentElem = $selectionElem.parent(); - var selectionNodeName = $selectionElem.getNodeName(); - var parentNodeName = $parentElem.getNodeName(); - if (selectionNodeName !== 'CODE' || parentNodeName !== 'PRE') { - // 不符合要求 忽略 - return; - } + // 粘贴文字 + $textElem.on('paste', function (e) { + if (UA.isIE()) { + return; + } else { + // 阻止默认行为,使用 execCommand 的粘贴命令 + e.preventDefault(); + } - if (!editor.cmd.queryCommandSupported('insertHTML')) { - // 必须原生支持 insertHTML 命令 - return; - } + // 粘贴图片和文本,只能同时使用一个 + if (!canDo()) { + return; + } - // 处理:光标定位到代码末尾,联系点击两次回车,即跳出代码块 - if (editor._willBreakCode === true) { - // 此时可以跳出代码块 - // 插入

          ,并将选取定位到

          - var $p = $('


          '); - $p.insertAfter($parentElem); - editor.selection.createRangeByElem($p, true); - editor.selection.restoreSelection(); + // 获取粘贴的文字 + var pasteHtml = getPasteHtml(e, pasteFilterStyle, ignoreImg); + var pasteText = getPasteText(e); + pasteText = pasteText.replace(/\n/gm, '
          '); - // 修改状态 - editor._willBreakCode = false; + var $selectionElem = editor.selection.getSelectionContainerElem(); + if (!$selectionElem) { + return; + } + var nodeName = $selectionElem.getNodeName(); - e.preventDefault(); - return; - } + // code 中只能粘贴纯文本 + if (nodeName === 'CODE' || nodeName === 'PRE') { + if (pasteTextHandle && isFunction(pasteTextHandle)) { + // 用户自定义过滤处理粘贴内容 + pasteText = '' + (pasteTextHandle(pasteText) || ''); + } + editor.cmd.do('insertHTML', '

          ' + pasteText + '

          '); + return; + } - var _startOffset = editor.selection.getRange().startOffset; + // 先放开注释,有问题再追查 ———— + // // 表格中忽略,可能会出现异常问题 + // if (nodeName === 'TD' || nodeName === 'TH') { + // return + // } - // 处理:回车时,不能插入
          而是插入 \n ,因为是在 pre 标签里面 - editor.cmd.do('insertHTML', '\n'); - editor.selection.saveRange(); - if (editor.selection.getRange().startOffset === _startOffset) { - // 没起作用,再来一遍 - editor.cmd.do('insertHTML', '\n'); - } + if (!pasteHtml) { + // 没有内容,可继续执行下面的图片粘贴 + resetTime(); + return; + } + try { + // firefox 中,获取的 pasteHtml 可能是没有
            包裹的
          • + // 因此执行 insertHTML 会报错 + if (pasteTextHandle && isFunction(pasteTextHandle)) { + // 用户自定义过滤处理粘贴内容 + pasteHtml = '' + (pasteTextHandle(pasteHtml) || ''); + } + editor.cmd.do('insertHTML', pasteHtml); + } catch (ex) { + // 此时使用 pasteText 来兼容一下 + if (pasteTextHandle && isFunction(pasteTextHandle)) { + // 用户自定义过滤处理粘贴内容 + pasteText = '' + (pasteTextHandle(pasteText) || ''); + } + editor.cmd.do('insertHTML', '

            ' + pasteText + '

            '); + } + }); - var codeLength = $selectionElem.html().length; - if (editor.selection.getRange().startOffset + 1 === codeLength) { - // 说明光标在代码最后的位置,执行了回车操作 - // 记录下来,以便下次回车时候跳出 code - editor._willBreakCode = true; - } + // 粘贴图片 + $textElem.on('paste', function (e) { + if (UA.isIE()) { + return; + } else { + e.preventDefault(); + } - // 阻止默认行为 - e.preventDefault(); - } + // 粘贴图片和文本,只能同时使用一个 + if (!canDo()) { + return; + } - $textElem.on('keydown', function (e) { - if (e.keyCode !== 13) { - // 不是回车键 - // 取消即将跳转代码块的记录 - editor._willBreakCode = false; - return; - } - //
            回车时 特殊处理 - codeHandle(e); - }); - }, + // 获取粘贴的图片 + var pasteFiles = getPasteImgs(e); + if (!pasteFiles || !pasteFiles.length) { + return; + } - // 清空时保留


            - _clearHandle: function _clearHandle() { - var editor = this.editor; - var $textElem = editor.$textElem; + // 获取当前的元素 + var $selectionElem = editor.selection.getSelectionContainerElem(); + if (!$selectionElem) { + return; + } + var nodeName = $selectionElem.getNodeName(); - $textElem.on('keydown', function (e) { - if (e.keyCode !== 8) { - return; - } - var txtHtml = $textElem.html().toLowerCase().trim(); - if (txtHtml === '


            ') { - // 最后剩下一个空行,就不再删除了 - e.preventDefault(); - return; - } - }); + // code 中粘贴忽略 + if (nodeName === 'CODE' || nodeName === 'PRE') { + return; + } - $textElem.on('keyup', function (e) { - if (e.keyCode !== 8) { - return; - } - var $p = void 0; - var txtHtml = $textElem.html().toLowerCase().trim(); + // 上传图片 + var uploadImg = editor.uploadImg; + uploadImg.uploadImg(pasteFiles); + }); + }, - // firefox 时用 txtHtml === '
            ' 判断,其他用 !txtHtml 判断 - if (!txtHtml || txtHtml === '
            ') { - // 内容空了 - $p = $('


            '); - $textElem.html(''); // 一定要先清空,否则在 firefox 下有问题 - $textElem.append($p); - editor.selection.createRangeByElem($p, false, true); - editor.selection.restoreSelection(); - } - }); - }, + // tab 特殊处理 + _tabHandle: function _tabHandle() { + var editor = this.editor; + var $textElem = editor.$textElem; - // 粘贴事件(粘贴文字 粘贴图片) - _pasteHandle: function _pasteHandle() { - var editor = this.editor; - var config = editor.config; - var pasteFilterStyle = config.pasteFilterStyle; - var pasteTextHandle = config.pasteTextHandle; - var ignoreImg = config.pasteIgnoreImg; - var $textElem = editor.$textElem; - - // 粘贴图片、文本的事件,每次只能执行一个 - // 判断该次粘贴事件是否可以执行 - var pasteTime = 0; - function canDo() { - var now = Date.now(); - var flag = false; - if (now - pasteTime >= 100) { - // 间隔大于 100 ms ,可以执行 - flag = true; - } - pasteTime = now; - return flag; - } - function resetTime() { - pasteTime = 0; - } + $textElem.on('keydown', function (e) { + if (e.keyCode !== 9) { + return; + } + if (!editor.cmd.queryCommandSupported('insertHTML')) { + // 必须原生支持 insertHTML 命令 + return; + } + var $selectionElem = editor.selection.getSelectionContainerElem(); + if (!$selectionElem) { + return; + } + var $parentElem = $selectionElem.parent(); + var selectionNodeName = $selectionElem.getNodeName(); + var parentNodeName = $parentElem.getNodeName(); - // 粘贴文字 - $textElem.on('paste', function (e) { - if (UA.isIE()) { - return; - } else { - // 阻止默认行为,使用 execCommand 的粘贴命令 - e.preventDefault(); - } + if (selectionNodeName === 'CODE' && parentNodeName === 'PRE') { + //
             里面
            +                    editor.cmd.do('insertHTML', '    ');
            +                } else {
            +                    // 普通文字
            +                    editor.cmd.do('insertHTML', '    ');
            +                }
             
            -            // 粘贴图片和文本,只能同时使用一个
            -            if (!canDo()) {
            -                return;
            -            }
            +                e.preventDefault();
            +            });
            +        },
             
            -            // 获取粘贴的文字
            -            var pasteHtml = getPasteHtml(e, pasteFilterStyle, ignoreImg);
            -            var pasteText = getPasteText(e);
            -            pasteText = pasteText.replace(/\n/gm, '
            '); + // img 点击 + _imgHandle: function _imgHandle() { + var editor = this.editor; + var $textElem = editor.$textElem; - var $selectionElem = editor.selection.getSelectionContainerElem(); - if (!$selectionElem) { - return; - } - var nodeName = $selectionElem.getNodeName(); + // 为图片增加 selected 样式 + $textElem.on('click', 'img', function (e) { + var img = this; + var $img = $(img); - // code 中只能粘贴纯文本 - if (nodeName === 'CODE' || nodeName === 'PRE') { - if (pasteTextHandle && isFunction(pasteTextHandle)) { - // 用户自定义过滤处理粘贴内容 - pasteText = '' + (pasteTextHandle(pasteText) || ''); + if ($img.attr('data-w-e') === '1') { + // 是表情图片,忽略 + return; } - editor.cmd.do('insertHTML', '

            ' + pasteText + '

            '); - return; - } - // 先放开注释,有问题再追查 ———— - // // 表格中忽略,可能会出现异常问题 - // if (nodeName === 'TD' || nodeName === 'TH') { - // return - // } + // 记录当前点击过的图片 + editor._selectedImg = $img; - if (!pasteHtml) { - // 没有内容,可继续执行下面的图片粘贴 - resetTime(); - return; - } - try { - // firefox 中,获取的 pasteHtml 可能是没有
              包裹的
            • - // 因此执行 insertHTML 会报错 - if (pasteTextHandle && isFunction(pasteTextHandle)) { - // 用户自定义过滤处理粘贴内容 - pasteHtml = '' + (pasteTextHandle(pasteHtml) || ''); - } - editor.cmd.do('insertHTML', pasteHtml); - } catch (ex) { - // 此时使用 pasteText 来兼容一下 - if (pasteTextHandle && isFunction(pasteTextHandle)) { - // 用户自定义过滤处理粘贴内容 - pasteText = '' + (pasteTextHandle(pasteText) || ''); + // 修改选区并 restore ,防止用户此时点击退格键,会删除其他内容 + editor.selection.createRangeByElem($img); + editor.selection.restoreSelection(); + }); + + // 去掉图片的 selected 样式 + $textElem.on('click keyup', function (e) { + if (e.target.matches('img')) { + // 点击的是图片,忽略 + return; } - editor.cmd.do('insertHTML', '

              ' + pasteText + '

              '); - } - }); + // 删除记录 + editor._selectedImg = null; + }); + }, - // 粘贴图片 - $textElem.on('paste', function (e) { - if (UA.isIE()) { - return; - } else { + // 拖拽事件 + _dragHandle: function _dragHandle() { + var editor = this.editor; + + // 禁用 document 拖拽事件 + var $document = $(document); + $document.on('dragleave drop dragenter dragover', function (e) { e.preventDefault(); - } + }); - // 粘贴图片和文本,只能同时使用一个 - if (!canDo()) { - return; - } + // 添加编辑区域拖拽事件 + var $textElem = editor.$textElem; + $textElem.on('drop', function (e) { + e.preventDefault(); + var files = e.dataTransfer && e.dataTransfer.files; + if (!files || !files.length) { + return; + } - // 获取粘贴的图片 - var pasteFiles = getPasteImgs(e); - if (!pasteFiles || !pasteFiles.length) { - return; - } + // 上传图片 + var uploadImg = editor.uploadImg; + uploadImg.uploadImg(files); + }); + } + }; - // 获取当前的元素 - var $selectionElem = editor.selection.getSelectionContainerElem(); - if (!$selectionElem) { - return; - } - var nodeName = $selectionElem.getNodeName(); + /* + 命令,封装 document.execCommand +*/ - // code 中粘贴忽略 - if (nodeName === 'CODE' || nodeName === 'PRE') { - return; - } +// 构造函数 + function Command(editor) { + this.editor = editor; + } - // 上传图片 - var uploadImg = editor.uploadImg; - uploadImg.uploadImg(pasteFiles); - }); - }, +// 修改原型 + Command.prototype = { + constructor: Command, - // tab 特殊处理 - _tabHandle: function _tabHandle() { - var editor = this.editor; - var $textElem = editor.$textElem; + // 执行命令 + do: function _do(name, value) { + var editor = this.editor; - $textElem.on('keydown', function (e) { - if (e.keyCode !== 9) { - return; - } - if (!editor.cmd.queryCommandSupported('insertHTML')) { - // 必须原生支持 insertHTML 命令 - return; + // 使用 styleWithCSS + if (!editor._useStyleWithCSS) { + document.execCommand('styleWithCSS', null, true); + editor._useStyleWithCSS = true; } - var $selectionElem = editor.selection.getSelectionContainerElem(); - if (!$selectionElem) { + + // 如果无选区,忽略 + if (!editor.selection.getRange()) { return; } - var $parentElem = $selectionElem.parent(); - var selectionNodeName = $selectionElem.getNodeName(); - var parentNodeName = $parentElem.getNodeName(); - if (selectionNodeName === 'CODE' && parentNodeName === 'PRE') { - //
               里面
              -                editor.cmd.do('insertHTML', '    ');
              +            // 恢复选取
              +            editor.selection.restoreSelection();
              +
              +            // 执行
              +            var _name = '_' + name;
              +            if (this[_name]) {
              +                // 有自定义事件
              +                this[_name](value);
                           } else {
              -                // 普通文字
              -                editor.cmd.do('insertHTML', '    ');
              +                // 默认 command
              +                this._execCommand(name, value);
                           }
               
              -            e.preventDefault();
              -        });
              -    },
              +            // 修改菜单状态
              +            editor.menus.changeActive();
               
              -    // img 点击
              -    _imgHandle: function _imgHandle() {
              -        var editor = this.editor;
              -        var $textElem = editor.$textElem;
              +            // 最后,恢复选取保证光标在原来的位置闪烁
              +            editor.selection.saveRange();
              +            editor.selection.restoreSelection();
               
              -        // 为图片增加 selected 样式
              -        $textElem.on('click', 'img', function (e) {
              -            var img = this;
              -            var $img = $(img);
              +            // 触发 onchange
              +            editor.change && editor.change();
              +        },
               
              -            if ($img.attr('data-w-e') === '1') {
              -                // 是表情图片,忽略
              -                return;
              +        // 自定义 insertHTML 事件
              +        _insertHTML: function _insertHTML(html) {
              +            var editor = this.editor;
              +            var range = editor.selection.getRange();
              +
              +            if (this.queryCommandSupported('insertHTML')) {
              +                // W3C
              +                this._execCommand('insertHTML', html);
              +            } else if (range.insertNode) {
              +                // IE
              +                range.deleteContents();
              +                range.insertNode($(html)[0]);
              +            } else if (range.pasteHTML) {
              +                // IE <= 10
              +                range.pasteHTML(html);
                           }
              +        },
               
              -            // 记录当前点击过的图片
              -            editor._selectedImg = $img;
              -
              -            // 修改选区并 restore ,防止用户此时点击退格键,会删除其他内容
              -            editor.selection.createRangeByElem($img);
              -            editor.selection.restoreSelection();
              -        });
              +        // 插入 elem
              +        _insertElem: function _insertElem($elem) {
              +            var editor = this.editor;
              +            var range = editor.selection.getRange();
               
              -        // 去掉图片的 selected 样式
              -        $textElem.on('click  keyup', function (e) {
              -            if (e.target.matches('img')) {
              -                // 点击的是图片,忽略
              -                return;
              +            if (range.insertNode) {
              +                range.deleteContents();
              +                range.insertNode($elem[0]);
                           }
              -            // 删除记录
              -            editor._selectedImg = null;
              -        });
              -    },
              +        },
               
              -    // 拖拽事件
              -    _dragHandle: function _dragHandle() {
              -        var editor = this.editor;
              +        // 封装 execCommand
              +        _execCommand: function _execCommand(name, value) {
              +            document.execCommand(name, false, value);
              +        },
               
              -        // 禁用 document 拖拽事件
              -        var $document = $(document);
              -        $document.on('dragleave drop dragenter dragover', function (e) {
              -            e.preventDefault();
              -        });
              +        // 封装 document.queryCommandValue
              +        queryCommandValue: function queryCommandValue(name) {
              +            return document.queryCommandValue(name);
              +        },
               
              -        // 添加编辑区域拖拽事件
              -        var $textElem = editor.$textElem;
              -        $textElem.on('drop', function (e) {
              -            e.preventDefault();
              -            var files = e.dataTransfer && e.dataTransfer.files;
              -            if (!files || !files.length) {
              -                return;
              -            }
              +        // 封装 document.queryCommandState
              +        queryCommandState: function queryCommandState(name) {
              +            return document.queryCommandState(name);
              +        },
               
              -            // 上传图片
              -            var uploadImg = editor.uploadImg;
              -            uploadImg.uploadImg(files);
              -        });
              -    }
              -};
              +        // 封装 document.queryCommandSupported
              +        queryCommandSupported: function queryCommandSupported(name) {
              +            return document.queryCommandSupported(name);
              +        }
              +    };
               
              -/*
              -    命令,封装 document.execCommand
              +    /*
              +    selection range API
               */
               
               // 构造函数
              -function Command(editor) {
              -    this.editor = editor;
              -}
              +    function API(editor) {
              +        this.editor = editor;
              +        this._currentRange = null;
              +    }
               
               // 修改原型
              -Command.prototype = {
              -    constructor: Command,
              +    API.prototype = {
              +        constructor: API,
               
              -    // 执行命令
              -    do: function _do(name, value) {
              -        var editor = this.editor;
              -
              -        // 使用 styleWithCSS
              -        if (!editor._useStyleWithCSS) {
              -            document.execCommand('styleWithCSS', null, true);
              -            editor._useStyleWithCSS = true;
              -        }
              -
              -        // 如果无选区,忽略
              -        if (!editor.selection.getRange()) {
              -            return;
              -        }
              -
              -        // 恢复选取
              -        editor.selection.restoreSelection();
              +        // 获取 range 对象
              +        getRange: function getRange() {
              +            return this._currentRange;
              +        },
               
              -        // 执行
              -        var _name = '_' + name;
              -        if (this[_name]) {
              -            // 有自定义事件
              -            this[_name](value);
              -        } else {
              -            // 默认 command
              -            this._execCommand(name, value);
              -        }
              +        // 保存选区
              +        saveRange: function saveRange(_range) {
              +            if (_range) {
              +                // 保存已有选区
              +                this._currentRange = _range;
              +                return;
              +            }
               
              -        // 修改菜单状态
              -        editor.menus.changeActive();
              -
              -        // 最后,恢复选取保证光标在原来的位置闪烁
              -        editor.selection.saveRange();
              -        editor.selection.restoreSelection();
              -
              -        // 触发 onchange
              -        editor.change && editor.change();
              -    },
              -
              -    // 自定义 insertHTML 事件
              -    _insertHTML: function _insertHTML(html) {
              -        var editor = this.editor;
              -        var range = editor.selection.getRange();
              -
              -        if (this.queryCommandSupported('insertHTML')) {
              -            // W3C
              -            this._execCommand('insertHTML', html);
              -        } else if (range.insertNode) {
              -            // IE
              -            range.deleteContents();
              -            range.insertNode($(html)[0]);
              -        } else if (range.pasteHTML) {
              -            // IE <= 10
              -            range.pasteHTML(html);
              -        }
              -    },
              +            // 获取当前的选区
              +            var selection = window.getSelection();
              +            if (selection.rangeCount === 0) {
              +                return;
              +            }
              +            var range = selection.getRangeAt(0);
               
              -    // 插入 elem
              -    _insertElem: function _insertElem($elem) {
              -        var editor = this.editor;
              -        var range = editor.selection.getRange();
              +            // 判断选区内容是否在编辑内容之内
              +            var $containerElem = this.getSelectionContainerElem(range);
              +            if (!$containerElem) {
              +                return;
              +            }
               
              -        if (range.insertNode) {
              -            range.deleteContents();
              -            range.insertNode($elem[0]);
              -        }
              -    },
              -
              -    // 封装 execCommand
              -    _execCommand: function _execCommand(name, value) {
              -        document.execCommand(name, false, value);
              -    },
              -
              -    // 封装 document.queryCommandValue
              -    queryCommandValue: function queryCommandValue(name) {
              -        return document.queryCommandValue(name);
              -    },
              -
              -    // 封装 document.queryCommandState
              -    queryCommandState: function queryCommandState(name) {
              -        return document.queryCommandState(name);
              -    },
              -
              -    // 封装 document.queryCommandSupported
              -    queryCommandSupported: function queryCommandSupported(name) {
              -        return document.queryCommandSupported(name);
              -    }
              -};
              +            // 判断选区内容是否在不可编辑区域之内
              +            if ($containerElem.attr('contenteditable') === 'false' || $containerElem.parentUntil('[contenteditable=false]')) {
              +                return;
              +            }
               
              -/*
              -    selection range API
              -*/
              +            var editor = this.editor;
              +            var $textElem = editor.$textElem;
              +            if ($textElem.isContain($containerElem)) {
              +                // 是编辑内容之内的
              +                this._currentRange = range;
              +            }
              +        },
               
              -// 构造函数
              -function API(editor) {
              -    this.editor = editor;
              -    this._currentRange = null;
              -}
              +        // 折叠选区
              +        collapseRange: function collapseRange(toStart) {
              +            if (toStart == null) {
              +                // 默认为 false
              +                toStart = false;
              +            }
              +            var range = this._currentRange;
              +            if (range) {
              +                range.collapse(toStart);
              +            }
              +        },
               
              -// 修改原型
              -API.prototype = {
              -    constructor: API,
              -
              -    // 获取 range 对象
              -    getRange: function getRange() {
              -        return this._currentRange;
              -    },
              -
              -    // 保存选区
              -    saveRange: function saveRange(_range) {
              -        if (_range) {
              -            // 保存已有选区
              -            this._currentRange = _range;
              -            return;
              -        }
              +        // 选中区域的文字
              +        getSelectionText: function getSelectionText() {
              +            var range = this._currentRange;
              +            if (range) {
              +                return this._currentRange.toString();
              +            } else {
              +                return '';
              +            }
              +        },
               
              -        // 获取当前的选区
              -        var selection = window.getSelection();
              -        if (selection.rangeCount === 0) {
              -            return;
              -        }
              -        var range = selection.getRangeAt(0);
              +        // 选区的 $Elem
              +        getSelectionContainerElem: function getSelectionContainerElem(range) {
              +            range = range || this._currentRange;
              +            var elem = void 0;
              +            if (range) {
              +                elem = range.commonAncestorContainer;
              +                return $(elem.nodeType === 1 ? elem : elem.parentNode);
              +            }
              +        },
              +        getSelectionStartElem: function getSelectionStartElem(range) {
              +            range = range || this._currentRange;
              +            var elem = void 0;
              +            if (range) {
              +                elem = range.startContainer;
              +                return $(elem.nodeType === 1 ? elem : elem.parentNode);
              +            }
              +        },
              +        getSelectionEndElem: function getSelectionEndElem(range) {
              +            range = range || this._currentRange;
              +            var elem = void 0;
              +            if (range) {
              +                elem = range.endContainer;
              +                return $(elem.nodeType === 1 ? elem : elem.parentNode);
              +            }
              +        },
               
              -        // 判断选区内容是否在编辑内容之内
              -        var $containerElem = this.getSelectionContainerElem(range);
              -        if (!$containerElem) {
              -            return;
              -        }
              +        // 选区是否为空
              +        isSelectionEmpty: function isSelectionEmpty() {
              +            var range = this._currentRange;
              +            if (range && range.startContainer) {
              +                if (range.startContainer === range.endContainer) {
              +                    if (range.startOffset === range.endOffset) {
              +                        return true;
              +                    }
              +                }
              +            }
              +            return false;
              +        },
               
              -        // 判断选区内容是否在不可编辑区域之内
              -        if ($containerElem.attr('contenteditable') === 'false' || $containerElem.parentUntil('[contenteditable=false]')) {
              -            return;
              -        }
              +        // 恢复选区
              +        restoreSelection: function restoreSelection() {
              +            var selection = window.getSelection();
              +            selection.removeAllRanges();
              +            selection.addRange(this._currentRange);
              +        },
               
              -        var editor = this.editor;
              -        var $textElem = editor.$textElem;
              -        if ($textElem.isContain($containerElem)) {
              -            // 是编辑内容之内的
              -            this._currentRange = range;
              -        }
              -    },
              +        // 创建一个空白(即 ​ 字符)选区
              +        createEmptyRange: function createEmptyRange() {
              +            var editor = this.editor;
              +            var range = this.getRange();
              +            var $elem = void 0;
               
              -    // 折叠选区
              -    collapseRange: function collapseRange(toStart) {
              -        if (toStart == null) {
              -            // 默认为 false
              -            toStart = false;
              -        }
              -        var range = this._currentRange;
              -        if (range) {
              -            range.collapse(toStart);
              -        }
              -    },
              +            if (!range) {
              +                // 当前无 range
              +                return;
              +            }
              +            if (!this.isSelectionEmpty()) {
              +                // 当前选区必须没有内容才可以
              +                return;
              +            }
               
              -    // 选中区域的文字
              -    getSelectionText: function getSelectionText() {
              -        var range = this._currentRange;
              -        if (range) {
              -            return this._currentRange.toString();
              -        } else {
              -            return '';
              -        }
              -    },
              -
              -    // 选区的 $Elem
              -    getSelectionContainerElem: function getSelectionContainerElem(range) {
              -        range = range || this._currentRange;
              -        var elem = void 0;
              -        if (range) {
              -            elem = range.commonAncestorContainer;
              -            return $(elem.nodeType === 1 ? elem : elem.parentNode);
              -        }
              -    },
              -    getSelectionStartElem: function getSelectionStartElem(range) {
              -        range = range || this._currentRange;
              -        var elem = void 0;
              -        if (range) {
              -            elem = range.startContainer;
              -            return $(elem.nodeType === 1 ? elem : elem.parentNode);
              -        }
              -    },
              -    getSelectionEndElem: function getSelectionEndElem(range) {
              -        range = range || this._currentRange;
              -        var elem = void 0;
              -        if (range) {
              -            elem = range.endContainer;
              -            return $(elem.nodeType === 1 ? elem : elem.parentNode);
              -        }
              -    },
              -
              -    // 选区是否为空
              -    isSelectionEmpty: function isSelectionEmpty() {
              -        var range = this._currentRange;
              -        if (range && range.startContainer) {
              -            if (range.startContainer === range.endContainer) {
              -                if (range.startOffset === range.endOffset) {
              -                    return true;
              +            try {
              +                // 目前只支持 webkit 内核
              +                if (UA.isWebkit()) {
              +                    // 插入 ​
              +                    editor.cmd.do('insertHTML', '​');
              +                    // 修改 offset 位置
              +                    range.setEnd(range.endContainer, range.endOffset + 1);
              +                    // 存储
              +                    this.saveRange(range);
              +                } else {
              +                    $elem = $('');
              +                    editor.cmd.do('insertElem', $elem);
              +                    this.createRangeByElem($elem, true);
                               }
              +            } catch (ex) {
              +                // 部分情况下会报错,兼容一下
                           }
              -        }
              -        return false;
              -    },
              -
              -    // 恢复选区
              -    restoreSelection: function restoreSelection() {
              -        var selection = window.getSelection();
              -        selection.removeAllRanges();
              -        selection.addRange(this._currentRange);
              -    },
              -
              -    // 创建一个空白(即 ​ 字符)选区
              -    createEmptyRange: function createEmptyRange() {
              -        var editor = this.editor;
              -        var range = this.getRange();
              -        var $elem = void 0;
              -
              -        if (!range) {
              -            // 当前无 range
              -            return;
              -        }
              -        if (!this.isSelectionEmpty()) {
              -            // 当前选区必须没有内容才可以
              -            return;
              -        }
              +        },
               
              -        try {
              -            // 目前只支持 webkit 内核
              -            if (UA.isWebkit()) {
              -                // 插入 ​
              -                editor.cmd.do('insertHTML', '​');
              -                // 修改 offset 位置
              -                range.setEnd(range.endContainer, range.endOffset + 1);
              -                // 存储
              -                this.saveRange(range);
              -            } else {
              -                $elem = $('');
              -                editor.cmd.do('insertElem', $elem);
              -                this.createRangeByElem($elem, true);
              +        // 根据 $Elem 设置选区
              +        createRangeByElem: function createRangeByElem($elem, toStart, isContent) {
              +            // $elem - 经过封装的 elem
              +            // toStart - true 开始位置,false 结束位置
              +            // isContent - 是否选中Elem的内容
              +            if (!$elem.length) {
              +                return;
                           }
              -        } catch (ex) {
              -            // 部分情况下会报错,兼容一下
              -        }
              -    },
              -
              -    // 根据 $Elem 设置选区
              -    createRangeByElem: function createRangeByElem($elem, toStart, isContent) {
              -        // $elem - 经过封装的 elem
              -        // toStart - true 开始位置,false 结束位置
              -        // isContent - 是否选中Elem的内容
              -        if (!$elem.length) {
              -            return;
              -        }
               
              -        var elem = $elem[0];
              -        var range = document.createRange();
              +            var elem = $elem[0];
              +            var range = document.createRange();
               
              -        if (isContent) {
              -            range.selectNodeContents(elem);
              -        } else {
              -            range.selectNode(elem);
              -        }
              +            if (isContent) {
              +                range.selectNodeContents(elem);
              +            } else {
              +                range.selectNode(elem);
              +            }
               
              -        if (typeof toStart === 'boolean') {
              -            range.collapse(toStart);
              -        }
              +            if (typeof toStart === 'boolean') {
              +                range.collapse(toStart);
              +            }
               
              -        // 存储 range
              -        this.saveRange(range);
              -    }
              -};
              +            // 存储 range
              +            this.saveRange(range);
              +        }
              +    };
               
              -/*
              +    /*
                   上传进度条
               */
               
              -function Progress(editor) {
              -    this.editor = editor;
              -    this._time = 0;
              -    this._isShow = false;
              -    this._isRender = false;
              -    this._timeoutId = 0;
              -    this.$textContainer = editor.$textContainerElem;
              -    this.$bar = $('
              '); -} + function Progress(editor) { + this.editor = editor; + this._time = 0; + this._isShow = false; + this._isRender = false; + this._timeoutId = 0; + this.$textContainer = editor.$textContainerElem; + this.$bar = $('
              '); + } -Progress.prototype = { - constructor: Progress, + Progress.prototype = { + constructor: Progress, - show: function show(progress) { - var _this = this; + show: function show(progress) { + var _this = this; - // 状态处理 - if (this._isShow) { - return; - } - this._isShow = true; + // 状态处理 + if (this._isShow) { + return; + } + this._isShow = true; - // 渲染 - var $bar = this.$bar; - if (!this._isRender) { - var $textContainer = this.$textContainer; - $textContainer.append($bar); - } else { - this._isRender = true; - } + // 渲染 + var $bar = this.$bar; + if (!this._isRender) { + var $textContainer = this.$textContainer; + $textContainer.append($bar); + } else { + this._isRender = true; + } - // 改变进度(节流,100ms 渲染一次) - if (Date.now() - this._time > 100) { - if (progress <= 1) { - $bar.css('width', progress * 100 + '%'); - this._time = Date.now(); + // 改变进度(节流,100ms 渲染一次) + if (Date.now() - this._time > 100) { + if (progress <= 1) { + $bar.css('width', progress * 100 + '%'); + this._time = Date.now(); + } } - } - // 隐藏 - var timeoutId = this._timeoutId; - if (timeoutId) { - clearTimeout(timeoutId); - } - timeoutId = setTimeout(function () { - _this._hide(); - }, 500); - }, + // 隐藏 + var timeoutId = this._timeoutId; + if (timeoutId) { + clearTimeout(timeoutId); + } + timeoutId = setTimeout(function () { + _this._hide(); + }, 500); + }, - _hide: function _hide() { - var $bar = this.$bar; - $bar.remove(); + _hide: function _hide() { + var $bar = this.$bar; + $bar.remove(); - // 修改状态 - this._time = 0; - this._isShow = false; - this._isRender = false; - } -}; + // 修改状态 + this._time = 0; + this._isShow = false; + this._isRender = false; + } + }; -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { - return typeof obj; -} : function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; -}; + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { + return typeof obj; + } : function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; -/* + /* 上传图片 */ // 构造函数 -function UploadImg(editor) { - this.editor = editor; -} + function UploadImg(editor) { + this.editor = editor; + } // 原型 -UploadImg.prototype = { - constructor: UploadImg, + UploadImg.prototype = { + constructor: UploadImg, - // 根据 debug 弹出不同的信息 - _alert: function _alert(alertInfo, debugInfo) { - var editor = this.editor; - var debug = editor.config.debug; - var customAlert = editor.config.customAlert; + // 根据 debug 弹出不同的信息 + _alert: function _alert(alertInfo, debugInfo) { + var editor = this.editor; + var debug = editor.config.debug; + var customAlert = editor.config.customAlert; - if (debug) { - throw new Error('wangEditor: ' + (debugInfo || alertInfo)); - } else { - if (customAlert && typeof customAlert === 'function') { - customAlert(alertInfo); + if (debug) { + throw new Error('wangEditor: ' + (debugInfo || alertInfo)); } else { - alert(alertInfo); + if (customAlert && typeof customAlert === 'function') { + customAlert(alertInfo); + } else { + alert(alertInfo); + } } - } - }, - - // 根据链接插入图片 - insertLinkImg: function insertLinkImg(link) { - var _this2 = this; + }, - if (!link) { - return; - } - var editor = this.editor; - var config = editor.config; + // 根据链接插入图片 + insertLinkImg: function insertLinkImg(link) { + var _this2 = this; - // 校验格式 - var linkImgCheck = config.linkImgCheck; - var checkResult = void 0; - if (linkImgCheck && typeof linkImgCheck === 'function') { - checkResult = linkImgCheck(link); - if (typeof checkResult === 'string') { - // 校验失败,提示信息 - alert(checkResult); + if (!link) { return; } - } - - editor.cmd.do('insertHTML', ''); - - // 验证图片 url 是否有效,无效的话给出提示 - var img = document.createElement('img'); - img.onload = function () { - var callback = config.linkImgCallback; - if (callback && typeof callback === 'function') { - callback(link); + var editor = this.editor; + var config = editor.config; + + // 校验格式 + var linkImgCheck = config.linkImgCheck; + var checkResult = void 0; + if (linkImgCheck && typeof linkImgCheck === 'function') { + checkResult = linkImgCheck(link); + if (typeof checkResult === 'string') { + // 校验失败,提示信息 + alert(checkResult); + return; + } } - img = null; - }; - img.onerror = function () { - img = null; - // 无法成功下载图片 - _this2._alert('插入图片错误', 'wangEditor: \u63D2\u5165\u56FE\u7247\u51FA\u9519\uFF0C\u56FE\u7247\u94FE\u63A5\u662F "' + link + '"\uFF0C\u4E0B\u8F7D\u8BE5\u94FE\u63A5\u5931\u8D25'); - return; - }; - img.onabort = function () { - img = null; - }; - img.src = link; - }, - - // 上传图片 - uploadImg: function uploadImg(files) { - var _this3 = this; - - if (!files || !files.length) { - return; - } + editor.cmd.do('insertHTML', ''); - // ------------------------------ 获取配置信息 ------------------------------ - var editor = this.editor; - var config = editor.config; - var uploadImgServer = config.uploadImgServer; - var uploadImgShowBase64 = config.uploadImgShowBase64; - - var maxSize = config.uploadImgMaxSize; - var maxSizeM = maxSize / 1024 / 1024; - var maxLength = config.uploadImgMaxLength || 10000; - var uploadFileName = config.uploadFileName || ''; - var uploadImgParams = config.uploadImgParams || {}; - var uploadImgParamsWithUrl = config.uploadImgParamsWithUrl; - var uploadImgHeaders = config.uploadImgHeaders || {}; - var hooks = config.uploadImgHooks || {}; - var timeout = config.uploadImgTimeout || 3000; - var withCredentials = config.withCredentials; - if (withCredentials == null) { - withCredentials = false; - } - var customUploadImg = config.customUploadImg; + // 验证图片 url 是否有效,无效的话给出提示 + var img = document.createElement('img'); + img.onload = function () { + var callback = config.linkImgCallback; + if (callback && typeof callback === 'function') { + callback(link); + } - if (!customUploadImg) { - // 没有 customUploadImg 的情况下,需要如下两个配置才能继续进行图片上传 - if (!uploadImgServer && !uploadImgShowBase64) { + img = null; + }; + img.onerror = function () { + img = null; + // 无法成功下载图片 + _this2._alert('插入图片错误', 'wangEditor: \u63D2\u5165\u56FE\u7247\u51FA\u9519\uFF0C\u56FE\u7247\u94FE\u63A5\u662F "' + link + '"\uFF0C\u4E0B\u8F7D\u8BE5\u94FE\u63A5\u5931\u8D25'); return; - } - } + }; + img.onabort = function () { + img = null; + }; + img.src = link; + }, - // ------------------------------ 验证文件信息 ------------------------------ - var resultFiles = []; - var errInfo = []; - arrForEach(files, function (file) { - var name = file.name; - var size = file.size; + // 上传图片 + uploadImg: function uploadImg(files) { + var _this3 = this; - // chrome 低版本 name === undefined - if (!name || !size) { + if (!files || !files.length) { return; } - if (/\.(jpg|jpeg|png|bmp|gif|webp)$/i.test(name) === false) { - // 后缀名不合法,不是图片 - errInfo.push('\u3010' + name + '\u3011\u4E0D\u662F\u56FE\u7247'); - return; + // ------------------------------ 获取配置信息 ------------------------------ + var editor = this.editor; + var config = editor.config; + var uploadImgServer = config.uploadImgServer; + var uploadImgShowBase64 = config.uploadImgShowBase64; + + var maxSize = config.uploadImgMaxSize; + var maxSizeM = maxSize / 1024 / 1024; + var maxLength = config.uploadImgMaxLength || 10000; + var uploadFileName = config.uploadFileName || ''; + var uploadImgParams = config.uploadImgParams || {}; + var uploadImgParamsWithUrl = config.uploadImgParamsWithUrl; + var uploadImgHeaders = config.uploadImgHeaders || {}; + var hooks = config.uploadImgHooks || {}; + var timeout = config.uploadImgTimeout || 3000; + var withCredentials = config.withCredentials; + if (withCredentials == null) { + withCredentials = false; } - if (maxSize < size) { - // 上传图片过大 - errInfo.push('\u3010' + name + '\u3011\u5927\u4E8E ' + maxSizeM + 'M'); - return; - } - - // 验证通过的加入结果列表 - resultFiles.push(file); - }); - // 抛出验证信息 - if (errInfo.length) { - this._alert('图片验证未通过: \n' + errInfo.join('\n')); - return; - } - if (resultFiles.length > maxLength) { - this._alert('一次最多上传' + maxLength + '张图片'); - return; - } + var customUploadImg = config.customUploadImg; - // ------------------------------ 自定义上传 ------------------------------ - if (customUploadImg && typeof customUploadImg === 'function') { - customUploadImg(resultFiles, this.insertLinkImg.bind(this)); + if (!customUploadImg) { + // 没有 customUploadImg 的情况下,需要如下两个配置才能继续进行图片上传 + if (!uploadImgServer && !uploadImgShowBase64) { + return; + } + } - // 阻止以下代码执行 - return; - } + // ------------------------------ 验证文件信息 ------------------------------ + var resultFiles = []; + var errInfo = []; + arrForEach(files, function (file) { + var name = file.name; + var size = file.size; - // 添加图片数据 - var formdata = new FormData(); - arrForEach(resultFiles, function (file) { - var name = uploadFileName || file.name; - formdata.append(name, file); - }); + // chrome 低版本 name === undefined + if (!name || !size) { + return; + } - // ------------------------------ 上传图片 ------------------------------ - if (uploadImgServer && typeof uploadImgServer === 'string') { - // 添加参数 - var uploadImgServerArr = uploadImgServer.split('#'); - uploadImgServer = uploadImgServerArr[0]; - var uploadImgServerHash = uploadImgServerArr[1] || ''; - objForEach(uploadImgParams, function (key, val) { - // 因使用者反应,自定义参数不能默认 encode ,由 v3.1.1 版本开始注释掉 - // val = encodeURIComponent(val) - - // 第一,将参数拼接到 url 中 - if (uploadImgParamsWithUrl) { - if (uploadImgServer.indexOf('?') > 0) { - uploadImgServer += '&'; - } else { - uploadImgServer += '?'; - } - uploadImgServer = uploadImgServer + key + '=' + val; + if (/\.(jpg|jpeg|png|bmp|gif|webp)$/i.test(name) === false) { + // 后缀名不合法,不是图片 + errInfo.push('\u3010' + name + '\u3011\u4E0D\u662F\u56FE\u7247'); + return; + } + if (maxSize < size) { + // 上传图片过大 + errInfo.push('\u3010' + name + '\u3011\u5927\u4E8E ' + maxSizeM + 'M'); + return; } - // 第二,将参数添加到 formdata 中 - formdata.append(key, val); + // 验证通过的加入结果列表 + resultFiles.push(file); }); - if (uploadImgServerHash) { - uploadImgServer += '#' + uploadImgServerHash; + // 抛出验证信息 + if (errInfo.length) { + this._alert('图片验证未通过: \n' + errInfo.join('\n')); + return; + } + if (resultFiles.length > maxLength) { + this._alert('一次最多上传' + maxLength + '张图片'); + return; + } + + // ------------------------------ 自定义上传 ------------------------------ + if (customUploadImg && typeof customUploadImg === 'function') { + customUploadImg(resultFiles, this.insertLinkImg.bind(this)); + + // 阻止以下代码执行 + return; } - // 定义 xhr - var xhr = new XMLHttpRequest(); - xhr.open('POST', uploadImgServer); + // 添加图片数据 + var formdata = new FormData(); + arrForEach(resultFiles, function (file) { + var name = uploadFileName || file.name; + formdata.append(name, file); + }); + + // ------------------------------ 上传图片 ------------------------------ + if (uploadImgServer && typeof uploadImgServer === 'string') { + // 添加参数 + var uploadImgServerArr = uploadImgServer.split('#'); + uploadImgServer = uploadImgServerArr[0]; + var uploadImgServerHash = uploadImgServerArr[1] || ''; + objForEach(uploadImgParams, function (key, val) { + // 因使用者反应,自定义参数不能默认 encode ,由 v3.1.1 版本开始注释掉 + // val = encodeURIComponent(val) + + // 第一,将参数拼接到 url 中 + if (uploadImgParamsWithUrl) { + if (uploadImgServer.indexOf('?') > 0) { + uploadImgServer += '&'; + } else { + uploadImgServer += '?'; + } + uploadImgServer = uploadImgServer + key + '=' + val; + } - // 设置超时 - xhr.timeout = timeout; - xhr.ontimeout = function () { - // hook - timeout - if (hooks.timeout && typeof hooks.timeout === 'function') { - hooks.timeout(xhr, editor); + // 第二,将参数添加到 formdata 中 + formdata.append(key, val); + }); + if (uploadImgServerHash) { + uploadImgServer += '#' + uploadImgServerHash; } - _this3._alert('上传图片超时'); - }; + // 定义 xhr + var xhr = new XMLHttpRequest(); + xhr.open('POST', uploadImgServer); - // 监控 progress - if (xhr.upload) { - xhr.upload.onprogress = function (e) { - var percent = void 0; - // 进度条 - var progressBar = new Progress(editor); - if (e.lengthComputable) { - percent = e.loaded / e.total; - progressBar.show(percent); + // 设置超时 + xhr.timeout = timeout; + xhr.ontimeout = function () { + // hook - timeout + if (hooks.timeout && typeof hooks.timeout === 'function') { + hooks.timeout(xhr, editor); } + + _this3._alert('上传图片超时'); }; - } - // 返回数据 - xhr.onreadystatechange = function () { - var result = void 0; - if (xhr.readyState === 4) { - if (xhr.status < 200 || xhr.status >= 300) { - // hook - error - if (hooks.error && typeof hooks.error === 'function') { - hooks.error(xhr, editor); + // 监控 progress + if (xhr.upload) { + xhr.upload.onprogress = function (e) { + var percent = void 0; + // 进度条 + var progressBar = new Progress(editor); + if (e.lengthComputable) { + percent = e.loaded / e.total; + progressBar.show(percent); } + }; + } - // xhr 返回状态错误 - _this3._alert('上传图片发生错误', '\u4E0A\u4F20\u56FE\u7247\u53D1\u751F\u9519\u8BEF\uFF0C\u670D\u52A1\u5668\u8FD4\u56DE\u72B6\u6001\u662F ' + xhr.status); - return; - } - - result = xhr.responseText; - if ((typeof result === 'undefined' ? 'undefined' : _typeof(result)) !== 'object') { - try { - result = JSON.parse(result); - } catch (ex) { - // hook - fail - if (hooks.fail && typeof hooks.fail === 'function') { - hooks.fail(xhr, editor, result); + // 返回数据 + xhr.onreadystatechange = function () { + var result = void 0; + if (xhr.readyState === 4) { + if (xhr.status < 200 || xhr.status >= 300) { + // hook - error + if (hooks.error && typeof hooks.error === 'function') { + hooks.error(xhr, editor); } - _this3._alert('上传图片失败', '上传图片返回结果错误,返回结果是: ' + result); + // xhr 返回状态错误 + _this3._alert('上传图片发生错误', '\u4E0A\u4F20\u56FE\u7247\u53D1\u751F\u9519\u8BEF\uFF0C\u670D\u52A1\u5668\u8FD4\u56DE\u72B6\u6001\u662F ' + xhr.status); return; } - } - if (!hooks.customInsert && result.errno != '0') { - // hook - fail - if (hooks.fail && typeof hooks.fail === 'function') { - hooks.fail(xhr, editor, result); + + result = xhr.responseText; + if ((typeof result === 'undefined' ? 'undefined' : _typeof(result)) !== 'object') { + try { + result = JSON.parse(result); + } catch (ex) { + // hook - fail + if (hooks.fail && typeof hooks.fail === 'function') { + hooks.fail(xhr, editor, result); + } + + _this3._alert('上传图片失败', '上传图片返回结果错误,返回结果是: ' + result); + return; + } } + if (!hooks.customInsert && result.errno != '0') { + // hook - fail + if (hooks.fail && typeof hooks.fail === 'function') { + hooks.fail(xhr, editor, result); + } - // 数据错误 - _this3._alert('上传图片失败', '上传图片返回结果错误,返回结果 errno=' + result.errno); - } else { - if (hooks.customInsert && typeof hooks.customInsert === 'function') { - // 使用者自定义插入方法 - hooks.customInsert(_this3.insertLinkImg.bind(_this3), result, editor); + // 数据错误 + _this3._alert('上传图片失败', '上传图片返回结果错误,返回结果 errno=' + result.errno); } else { - // 将图片插入编辑器 - var data = result.data || []; - data.forEach(function (link) { - _this3.insertLinkImg(link); - }); - } + if (hooks.customInsert && typeof hooks.customInsert === 'function') { + // 使用者自定义插入方法 + hooks.customInsert(_this3.insertLinkImg.bind(_this3), result, editor); + } else { + // 将图片插入编辑器 + var data = result.data || []; + data.forEach(function (link) { + _this3.insertLinkImg(link); + }); + } - // hook - success - if (hooks.success && typeof hooks.success === 'function') { - hooks.success(xhr, editor, result); + // hook - success + if (hooks.success && typeof hooks.success === 'function') { + hooks.success(xhr, editor, result); + } } } - } - }; + }; - // hook - before - if (hooks.before && typeof hooks.before === 'function') { - var beforeResult = hooks.before(xhr, editor, resultFiles); - if (beforeResult && (typeof beforeResult === 'undefined' ? 'undefined' : _typeof(beforeResult)) === 'object') { - if (beforeResult.prevent) { - // 如果返回的结果是 {prevent: true, msg: 'xxxx'} 则表示用户放弃上传 - this._alert(beforeResult.msg); - return; + // hook - before + if (hooks.before && typeof hooks.before === 'function') { + var beforeResult = hooks.before(xhr, editor, resultFiles); + if (beforeResult && (typeof beforeResult === 'undefined' ? 'undefined' : _typeof(beforeResult)) === 'object') { + if (beforeResult.prevent) { + // 如果返回的结果是 {prevent: true, msg: 'xxxx'} 则表示用户放弃上传 + this._alert(beforeResult.msg); + return; + } } } - } - // 自定义 headers - objForEach(uploadImgHeaders, function (key, val) { - xhr.setRequestHeader(key, val); - }); + // 自定义 headers + objForEach(uploadImgHeaders, function (key, val) { + xhr.setRequestHeader(key, val); + }); - // 跨域传 cookie - xhr.withCredentials = withCredentials; + // 跨域传 cookie + xhr.withCredentials = withCredentials; - // 发送请求 - xhr.send(formdata); + // 发送请求 + xhr.send(formdata); - // 注意,要 return 。不去操作接下来的 base64 显示方式 - return; - } + // 注意,要 return 。不去操作接下来的 base64 显示方式 + return; + } - // ------------------------------ 显示 base64 格式 ------------------------------ - if (uploadImgShowBase64) { - arrForEach(files, function (file) { - var _this = _this3; - var reader = new FileReader(); - reader.readAsDataURL(file); - reader.onload = function () { - _this.insertLinkImg(this.result); - }; - }); + // ------------------------------ 显示 base64 格式 ------------------------------ + if (uploadImgShowBase64) { + arrForEach(files, function (file) { + var _this = _this3; + var reader = new FileReader(); + reader.readAsDataURL(file); + reader.onload = function () { + _this.insertLinkImg(this.result); + }; + }); + } } - } -}; + }; -/* + /* 编辑器构造函数 */ // id,累加 -var editorId = 1; + var editorId = 1; // 构造函数 -function Editor(toolbarSelector, textSelector) { - if (toolbarSelector == null) { - // 没有传入任何参数,报错 - throw new Error('错误:初始化编辑器时候未传入任何参数,请查阅文档'); - } - // id,用以区分单个页面不同的编辑器对象 - this.id = 'wangEditor-' + editorId++; + function Editor(toolbarSelector, textSelector) { + if (toolbarSelector == null) { + // 没有传入任何参数,报错 + throw new Error('错误:初始化编辑器时候未传入任何参数,请查阅文档'); + } + // id,用以区分单个页面不同的编辑器对象 + this.id = 'wangEditor-' + editorId++; - this.toolbarSelector = toolbarSelector; - this.textSelector = textSelector; + this.toolbarSelector = toolbarSelector; + this.textSelector = textSelector; - // 自定义配置 - this.customConfig = {}; -} + // 自定义配置 + this.customConfig = {}; + } // 修改原型 -Editor.prototype = { - constructor: Editor, - - // 初始化配置 - _initConfig: function _initConfig() { - // _config 是默认配置,this.customConfig 是用户自定义配置,将它们 merge 之后再赋值 - var target = {}; - this.config = Object.assign(target, config, this.customConfig); - - // 将语言配置,生成正则表达式 - var langConfig = this.config.lang || {}; - var langArgs = []; - objForEach(langConfig, function (key, val) { - // key 即需要生成正则表达式的规则,如“插入链接” - // val 即需要被替换成的语言,如“insert link” - langArgs.push({ - reg: new RegExp(key, 'img'), - val: val + Editor.prototype = { + constructor: Editor, + + // 初始化配置 + _initConfig: function _initConfig() { + // _config 是默认配置,this.customConfig 是用户自定义配置,将它们 merge 之后再赋值 + var target = {}; + this.config = Object.assign(target, config, this.customConfig); + + // 将语言配置,生成正则表达式 + var langConfig = this.config.lang || {}; + var langArgs = []; + objForEach(langConfig, function (key, val) { + // key 即需要生成正则表达式的规则,如“插入链接” + // val 即需要被替换成的语言,如“insert link” + langArgs.push({ + reg: new RegExp(key, 'img'), + val: val + }); }); - }); - this.config.langArgs = langArgs; - }, + this.config.langArgs = langArgs; + }, - // 初始化 DOM - _initDom: function _initDom() { - var _this = this; + // 初始化 DOM + _initDom: function _initDom() { + var _this = this; - var toolbarSelector = this.toolbarSelector; - var $toolbarSelector = $(toolbarSelector); - var textSelector = this.textSelector; + var toolbarSelector = this.toolbarSelector; + var $toolbarSelector = $(toolbarSelector); + var textSelector = this.textSelector; - var config$$1 = this.config; - var zIndex = config$$1.zIndex; + var config$$1 = this.config; + var zIndex = config$$1.zIndex; - // 定义变量 - var $toolbarElem = void 0, - $textContainerElem = void 0, - $textElem = void 0, - $children = void 0; + // 定义变量 + var $toolbarElem = void 0, + $textContainerElem = void 0, + $textElem = void 0, + $children = void 0; - if (textSelector == null) { - // 只传入一个参数,即是容器的选择器或元素,toolbar 和 text 的元素自行创建 - $toolbarElem = $('
              '); - $textContainerElem = $('
              '); + if (textSelector == null) { + // 只传入一个参数,即是容器的选择器或元素,toolbar 和 text 的元素自行创建 + $toolbarElem = $('
              '); + $textContainerElem = $('
              '); - // 将编辑器区域原有的内容,暂存起来 - $children = $toolbarSelector.children(); + // 将编辑器区域原有的内容,暂存起来 + $children = $toolbarSelector.children(); - // 添加到 DOM 结构中 - $toolbarSelector.append($toolbarElem).append($textContainerElem); + // 添加到 DOM 结构中 + $toolbarSelector.append($toolbarElem).append($textContainerElem); - // 自行创建的,需要配置默认的样式 - $toolbarElem.css('background-color', '#f1f1f1').css('border', '1px solid #ccc'); - $textContainerElem.css('border', '1px solid #ccc').css('border-top', 'none').css('height', '300px'); - } else { - // toolbar 和 text 的选择器都有值,记录属性 - $toolbarElem = $toolbarSelector; - $textContainerElem = $(textSelector); - // 将编辑器区域原有的内容,暂存起来 - $children = $textContainerElem.children(); - } + // 自行创建的,需要配置默认的样式 + $toolbarElem.css('background-color', '#f1f1f1').css('border', '1px solid #ccc'); + $textContainerElem.css('border', '1px solid #ccc').css('border-top', 'none').css('height', '300px'); + } else { + // toolbar 和 text 的选择器都有值,记录属性 + $toolbarElem = $toolbarSelector; + $textContainerElem = $(textSelector); + // 将编辑器区域原有的内容,暂存起来 + $children = $textContainerElem.children(); + } - // 编辑区域 - $textElem = $('
              '); - $textElem.attr('contenteditable', 'true').css('width', '100%').css('height', '100%'); + // 编辑区域 + $textElem = $('
              '); + $textElem.attr('contenteditable', 'true').css('width', '100%').css('height', '100%'); - // 初始化编辑区域内容 - if ($children && $children.length) { - $textElem.append($children); - } else { - $textElem.append($('


              ')); - } + // 初始化编辑区域内容 + if ($children && $children.length) { + $textElem.append($children); + } else { + $textElem.append($('


              ')); + } - // 编辑区域加入DOM - $textContainerElem.append($textElem); + // 编辑区域加入DOM + $textContainerElem.append($textElem); + + // 设置通用的 class + $toolbarElem.addClass('w-e-toolbar'); + $textContainerElem.addClass('w-e-text-container'); + $textContainerElem.css('z-index', zIndex); + $textElem.addClass('w-e-text'); + + // 添加 ID + var toolbarElemId = getRandom('toolbar-elem'); + $toolbarElem.attr('id', toolbarElemId); + var textElemId = getRandom('text-elem'); + $textElem.attr('id', textElemId); + + // 记录属性 + this.$toolbarElem = $toolbarElem; + this.$textContainerElem = $textContainerElem; + this.$textElem = $textElem; + this.toolbarElemId = toolbarElemId; + this.textElemId = textElemId; + + // 记录输入法的开始和结束 + var compositionEnd = true; + $textContainerElem.on('compositionstart', function () { + // 输入法开始输入 + compositionEnd = false; + }); + $textContainerElem.on('compositionend', function () { + // 输入法结束输入 + compositionEnd = true; + }); + + // 绑定 onchange + $textContainerElem.on('click keyup', function () { + // 输入法结束才出发 onchange + compositionEnd && _this.change && _this.change(); + }); + $toolbarElem.on('click', function () { + this.change && this.change(); + }); - // 设置通用的 class - $toolbarElem.addClass('w-e-toolbar'); - $textContainerElem.addClass('w-e-text-container'); - $textContainerElem.css('z-index', zIndex); - $textElem.addClass('w-e-text'); + //绑定 onfocus 与 onblur 事件 + if (config$$1.onfocus || config$$1.onblur) { + // 当前编辑器是否是焦点状态 + this.isFocus = false; - // 添加 ID - var toolbarElemId = getRandom('toolbar-elem'); - $toolbarElem.attr('id', toolbarElemId); - var textElemId = getRandom('text-elem'); - $textElem.attr('id', textElemId); + $(document).on('click', function (e) { + //判断当前点击元素是否在编辑器内 + var isChild = $textElem.isContain($(e.target)); - // 记录属性 - this.$toolbarElem = $toolbarElem; - this.$textContainerElem = $textContainerElem; - this.$textElem = $textElem; - this.toolbarElemId = toolbarElemId; - this.textElemId = textElemId; - - // 记录输入法的开始和结束 - var compositionEnd = true; - $textContainerElem.on('compositionstart', function () { - // 输入法开始输入 - compositionEnd = false; - }); - $textContainerElem.on('compositionend', function () { - // 输入法结束输入 - compositionEnd = true; - }); + //判断当前点击元素是否为工具栏 + var isToolbar = $toolbarElem.isContain($(e.target)); + var isMenu = $toolbarElem[0] == e.target ? true : false; - // 绑定 onchange - $textContainerElem.on('click keyup', function () { - // 输入法结束才出发 onchange - compositionEnd && _this.change && _this.change(); - }); - $toolbarElem.on('click', function () { - this.change && this.change(); - }); + if (!isChild) { + //若为选择工具栏中的功能,则不视为成blur操作 + if (isToolbar && !isMenu) { + return; + } - //绑定 onfocus 与 onblur 事件 - if (config$$1.onfocus || config$$1.onblur) { - // 当前编辑器是否是焦点状态 - this.isFocus = false; + if (_this.isFocus) { + _this.onblur && _this.onblur(); + } + _this.isFocus = false; + } else { + if (!_this.isFocus) { + _this.onfocus && _this.onfocus(); + } + _this.isFocus = true; + } + }); + } + }, - $(document).on('click', function (e) { - //判断当前点击元素是否在编辑器内 - var isChild = $textElem.isContain($(e.target)); + // 封装 command + _initCommand: function _initCommand() { + this.cmd = new Command(this); + }, - //判断当前点击元素是否为工具栏 - var isToolbar = $toolbarElem.isContain($(e.target)); - var isMenu = $toolbarElem[0] == e.target ? true : false; + // 封装 selection range API + _initSelectionAPI: function _initSelectionAPI() { + this.selection = new API(this); + }, - if (!isChild) { - //若为选择工具栏中的功能,则不视为成blur操作 - if (isToolbar && !isMenu) { - return; - } + // 添加图片上传 + _initUploadImg: function _initUploadImg() { + this.uploadImg = new UploadImg(this); + }, - if (_this.isFocus) { - _this.onblur && _this.onblur(); - } - _this.isFocus = false; - } else { - if (!_this.isFocus) { - _this.onfocus && _this.onfocus(); - } - _this.isFocus = true; - } - }); - } - }, - - // 封装 command - _initCommand: function _initCommand() { - this.cmd = new Command(this); - }, - - // 封装 selection range API - _initSelectionAPI: function _initSelectionAPI() { - this.selection = new API(this); - }, - - // 添加图片上传 - _initUploadImg: function _initUploadImg() { - this.uploadImg = new UploadImg(this); - }, - - // 初始化菜单 - _initMenus: function _initMenus() { - this.menus = new Menus(this); - this.menus.init(); - }, - - // 添加 text 区域 - _initText: function _initText() { - this.txt = new Text(this); - this.txt.init(); - }, - - // 初始化选区,将光标定位到内容尾部 - initSelection: function initSelection(newLine) { - var $textElem = this.$textElem; - var $children = $textElem.children(); - if (!$children.length) { - // 如果编辑器区域无内容,添加一个空行,重新设置选区 - $textElem.append($('


              ')); - this.initSelection(); - return; - } + // 初始化菜单 + _initMenus: function _initMenus() { + this.menus = new Menus(this); + this.menus.init(); + }, - var $last = $children.last(); + // 添加 text 区域 + _initText: function _initText() { + this.txt = new Text(this); + this.txt.init(); + }, - if (newLine) { - // 新增一个空行 - var html = $last.html().toLowerCase(); - var nodeName = $last.getNodeName(); - if (html !== '
              ' && html !== '' || nodeName !== 'P') { - // 最后一个元素不是


              ,添加一个空行,重新设置选区 + // 初始化选区,将光标定位到内容尾部 + initSelection: function initSelection(newLine) { + var $textElem = this.$textElem; + var $children = $textElem.children(); + if (!$children.length) { + // 如果编辑器区域无内容,添加一个空行,重新设置选区 $textElem.append($('


              ')); this.initSelection(); return; } - } - this.selection.createRangeByElem($last, false, true); - this.selection.restoreSelection(); - }, - - // 绑定事件 - _bindEvent: function _bindEvent() { - // -------- 绑定 onchange 事件 -------- - var onChangeTimeoutId = 0; - var beforeChangeHtml = this.txt.html(); - var config$$1 = this.config; - - // onchange 触发延迟时间 - var onchangeTimeout = config$$1.onchangeTimeout; - onchangeTimeout = parseInt(onchangeTimeout, 10); - if (!onchangeTimeout || onchangeTimeout <= 0) { - onchangeTimeout = 200; - } + var $last = $children.last(); - var onchange = config$$1.onchange; - if (onchange && typeof onchange === 'function') { - // 触发 change 的有三个场景: - // 1. $textContainerElem.on('click keyup') - // 2. $toolbarElem.on('click') - // 3. editor.cmd.do() - this.change = function () { - // 判断是否有变化 - var currentHtml = this.txt.html(); - - if (currentHtml.length === beforeChangeHtml.length) { - // 需要比较每一个字符 - if (currentHtml === beforeChangeHtml) { - return; - } + if (newLine) { + // 新增一个空行 + var html = $last.html().toLowerCase(); + var nodeName = $last.getNodeName(); + if (html !== '
              ' && html !== '' || nodeName !== 'P') { + // 最后一个元素不是


              ,添加一个空行,重新设置选区 + $textElem.append($('


              ')); + this.initSelection(); + return; } + } - // 执行,使用节流 - if (onChangeTimeoutId) { - clearTimeout(onChangeTimeoutId); - } - onChangeTimeoutId = setTimeout(function () { - // 触发配置的 onchange 函数 - onchange(currentHtml); - beforeChangeHtml = currentHtml; - }, onchangeTimeout); - }; - } + this.selection.createRangeByElem($last, false, true); + this.selection.restoreSelection(); + }, - // -------- 绑定 onblur 事件 -------- - var onblur = config$$1.onblur; - if (onblur && typeof onblur === 'function') { - this.onblur = function () { - var currentHtml = this.txt.html(); - onblur(currentHtml); - }; - } + // 绑定事件 + _bindEvent: function _bindEvent() { + // -------- 绑定 onchange 事件 -------- + var onChangeTimeoutId = 0; + var beforeChangeHtml = this.txt.html(); + var config$$1 = this.config; + + // onchange 触发延迟时间 + var onchangeTimeout = config$$1.onchangeTimeout; + onchangeTimeout = parseInt(onchangeTimeout, 10); + if (!onchangeTimeout || onchangeTimeout <= 0) { + onchangeTimeout = 200; + } - // -------- 绑定 onfocus 事件 -------- - var onfocus = config$$1.onfocus; - if (onfocus && typeof onfocus === 'function') { - this.onfocus = function () { - onfocus(); - }; - } - }, + var onchange = config$$1.onchange; + if (onchange && typeof onchange === 'function') { + // 触发 change 的有三个场景: + // 1. $textContainerElem.on('click keyup') + // 2. $toolbarElem.on('click') + // 3. editor.cmd.do() + this.change = function () { + // 判断是否有变化 + var currentHtml = this.txt.html(); + + if (currentHtml.length === beforeChangeHtml.length) { + // 需要比较每一个字符 + if (currentHtml === beforeChangeHtml) { + return; + } + } - // 创建编辑器 - create: function create() { - // 初始化配置信息 - this._initConfig(); + // 执行,使用节流 + if (onChangeTimeoutId) { + clearTimeout(onChangeTimeoutId); + } + onChangeTimeoutId = setTimeout(function () { + // 触发配置的 onchange 函数 + onchange(currentHtml); + beforeChangeHtml = currentHtml; + }, onchangeTimeout); + }; + } - // 初始化 DOM - this._initDom(); + // -------- 绑定 onblur 事件 -------- + var onblur = config$$1.onblur; + if (onblur && typeof onblur === 'function') { + this.onblur = function () { + var currentHtml = this.txt.html(); + onblur(currentHtml); + }; + } - // 封装 command API - this._initCommand(); + // -------- 绑定 onfocus 事件 -------- + var onfocus = config$$1.onfocus; + if (onfocus && typeof onfocus === 'function') { + this.onfocus = function () { + onfocus(); + }; + } + }, - // 封装 selection range API - this._initSelectionAPI(); + // 创建编辑器 + create: function create() { + // 初始化配置信息 + this._initConfig(); - // 添加 text - this._initText(); + // 初始化 DOM + this._initDom(); - // 初始化菜单 - this._initMenus(); + // 封装 command API + this._initCommand(); - // 添加 图片上传 - this._initUploadImg(); + // 封装 selection range API + this._initSelectionAPI(); - // 初始化选区,将光标定位到内容尾部 - this.initSelection(true); + // 添加 text + this._initText(); - // 绑定事件 - this._bindEvent(); - }, + // 初始化菜单 + this._initMenus(); - // 解绑所有事件(暂时不对外开放) - _offAllEvent: function _offAllEvent() { - $.offAll(); - } -}; + // 添加 图片上传 + this._initUploadImg(); + + // 初始化选区,将光标定位到内容尾部 + this.initSelection(true); + + // 绑定事件 + this._bindEvent(); + }, + + // 解绑所有事件(暂时不对外开放) + _offAllEvent: function _offAllEvent() { + $.offAll(); + } + }; // 检验是否浏览器环境 -try { - document; -} catch (ex) { - throw new Error('请在浏览器环境下运行'); -} + try { + document; + } catch (ex) { + throw new Error('请在浏览器环境下运行'); + } // polyfill -polyfill(); + polyfill(); // 这里的 `inlinecss` 将被替换成 css 代码的内容,详情可去 ./gulpfile.js 中搜索 `inlinecss` 关键字 -var inlinecss = '.w-e-toolbar,.w-e-text-container,.w-e-menu-panel { padding: 0; margin: 0; box-sizing: border-box;}.w-e-toolbar *,.w-e-text-container *,.w-e-menu-panel * { padding: 0; margin: 0; box-sizing: border-box;}.w-e-clear-fix:after { content: ""; display: table; clear: both;}.w-e-toolbar .w-e-droplist { position: absolute; left: 0; top: 0; background-color: #fff; border: 1px solid #f1f1f1; border-right-color: #ccc; border-bottom-color: #ccc;}.w-e-toolbar .w-e-droplist .w-e-dp-title { text-align: center; color: #999; line-height: 2; border-bottom: 1px solid #f1f1f1; font-size: 13px;}.w-e-toolbar .w-e-droplist ul.w-e-list { list-style: none; line-height: 1;}.w-e-toolbar .w-e-droplist ul.w-e-list li.w-e-item { color: #333; padding: 5px 0;}.w-e-toolbar .w-e-droplist ul.w-e-list li.w-e-item:hover { background-color: #f1f1f1;}.w-e-toolbar .w-e-droplist ul.w-e-block { list-style: none; text-align: left; padding: 5px;}.w-e-toolbar .w-e-droplist ul.w-e-block li.w-e-item { display: inline-block; *display: inline; *zoom: 1; padding: 3px 5px;}.w-e-toolbar .w-e-droplist ul.w-e-block li.w-e-item:hover { background-color: #f1f1f1;}@font-face { font-family: \'w-e-icon\'; src: url(data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAABhQAAsAAAAAGAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABCAAAAGAAAABgDxIPBGNtYXAAAAFoAAABBAAAAQQrSf4BZ2FzcAAAAmwAAAAIAAAACAAAABBnbHlmAAACdAAAEvAAABLwfpUWUWhlYWQAABVkAAAANgAAADYQp00kaGhlYQAAFZwAAAAkAAAAJAfEA+FobXR4AAAVwAAAAIQAAACEeAcD7GxvY2EAABZEAAAARAAAAERBSEX+bWF4cAAAFogAAAAgAAAAIAAsALZuYW1lAAAWqAAAAYYAAAGGmUoJ+3Bvc3QAABgwAAAAIAAAACAAAwAAAAMD3gGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAA8fwDwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEAOgAAAA2ACAABAAWAAEAIOkG6Q3pEulH6Wbpd+m56bvpxunL6d/qDepc6l/qZepo6nHqefAN8BTxIPHc8fz//f//AAAAAAAg6QbpDekS6UfpZel36bnpu+nG6cvp3+oN6lzqX+pi6mjqcep38A3wFPEg8dzx/P/9//8AAf/jFv4W+Bb0FsAWoxaTFlIWURZHFkMWMBYDFbUVsxWxFa8VpxWiEA8QCQ7+DkMOJAADAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAACAAD/wAQAA8AABAATAAABNwEnAQMuAScTNwEjAQMlATUBBwGAgAHAQP5Anxc7MmOAAYDA/oDAAoABgP6ATgFAQAHAQP5A/p0yOxcBEU4BgP6A/YDAAYDA/oCAAAQAAAAABAADgAAQACEALQA0AAABOAExETgBMSE4ATEROAExITUhIgYVERQWMyEyNjURNCYjBxQGIyImNTQ2MzIWEyE1EwEzNwPA/IADgPyAGiYmGgOAGiYmGoA4KCg4OCgoOED9AOABAEDgA0D9AAMAQCYa/QAaJiYaAwAaJuAoODgoKDg4/biAAYD+wMAAAAIAAABABAADQAA4ADwAAAEmJy4BJyYjIgcOAQcGBwYHDgEHBhUUFx4BFxYXFhceARcWMzI3PgE3Njc2Nz4BNzY1NCcuAScmJwERDQED1TY4OXY8PT8/PTx2OTg2CwcICwMDAwMLCAcLNjg5djw9Pz89PHY5ODYLBwgLAwMDAwsIBwv9qwFA/sADIAgGBggCAgICCAYGCCkqKlktLi8vLi1ZKiopCAYGCAICAgIIBgYIKSoqWS0uLy8uLVkqKin94AGAwMAAAAAAAgDA/8ADQAPAABsAJwAAASIHDgEHBhUUFx4BFxYxMDc+ATc2NTQnLgEnJgMiJjU0NjMyFhUUBgIAQjs6VxkZMjJ4MjIyMngyMhkZVzo7QlBwcFBQcHADwBkZVzo7Qnh9fcxBQUFBzH19eEI7OlcZGf4AcFBQcHBQUHAAAAEAAAAABAADgAArAAABIgcOAQcGBycRISc+ATMyFx4BFxYVFAcOAQcGBxc2Nz4BNzY1NCcuAScmIwIANTIyXCkpI5YBgJA1i1BQRUZpHh4JCSIYGB5VKCAgLQwMKCiLXl1qA4AKCycbHCOW/oCQNDweHmlGRVArKClJICEaYCMrK2I2NjlqXV6LKCgAAQAAAAAEAAOAACoAABMUFx4BFxYXNyYnLgEnJjU0Nz4BNzYzMhYXByERByYnLgEnJiMiBw4BBwYADAwtICAoVR4YGCIJCR4eaUZFUFCLNZABgJYjKSlcMjI1al1eiygoAYA5NjZiKysjYBohIEkpKCtQRUZpHh48NJABgJYjHBsnCwooKIteXQAAAAACAAAAQAQBAwAAJgBNAAATMhceARcWFRQHDgEHBiMiJy4BJyY1JzQ3PgE3NjMVIgYHDgEHPgEhMhceARcWFRQHDgEHBiMiJy4BJyY1JzQ3PgE3NjMVIgYHDgEHPgHhLikpPRESEhE9KSkuLikpPRESASMjelJRXUB1LQkQBwgSAkkuKSk9ERISET0pKS4uKSk9ERIBIyN6UlFdQHUtCRAHCBICABIRPSkpLi4pKT0REhIRPSkpLiBdUVJ6IyOAMC4IEwoCARIRPSkpLi4pKT0REhIRPSkpLiBdUVJ6IyOAMC4IEwoCAQAABgBA/8AEAAPAAAMABwALABEAHQApAAAlIRUhESEVIREhFSEnESM1IzUTFTMVIzU3NSM1MxUVESM1MzUjNTM1IzUBgAKA/YACgP2AAoD9gMBAQECAwICAwMCAgICAgIACAIACAIDA/wDAQP3yMkCSPDJAku7+wEBAQEBAAAYAAP/ABAADwAADAAcACwAXACMALwAAASEVIREhFSERIRUhATQ2MzIWFRQGIyImETQ2MzIWFRQGIyImETQ2MzIWFRQGIyImAYACgP2AAoD9gAKA/YD+gEs1NUtLNTVLSzU1S0s1NUtLNTVLSzU1SwOAgP8AgP8AgANANUtLNTVLS/61NUtLNTVLS/61NUtLNTVLSwADAAAAAAQAA6AAAwANABQAADchFSElFSE1EyEVITUhJQkBIxEjEQAEAPwABAD8AIABAAEAAQD9YAEgASDggEBAwEBAAQCAgMABIP7g/wABAAAAAAACAB7/zAPiA7QAMwBkAAABIiYnJicmNDc2PwE+ATMyFhcWFxYUBwYPAQYiJyY0PwE2NCcuASMiBg8BBhQXFhQHDgEjAyImJyYnJjQ3Nj8BNjIXFhQPAQYUFx4BMzI2PwE2NCcmNDc2MhcWFxYUBwYPAQ4BIwG4ChMIIxISEhIjwCNZMTFZIyMSEhISI1gPLA8PD1gpKRQzHBwzFMApKQ8PCBMKuDFZIyMSEhISI1gPLA8PD1gpKRQzHBwzFMApKQ8PDysQIxISEhIjwCNZMQFECAckLS1eLS0kwCIlJSIkLS1eLS0kVxAQDysPWCl0KRQVFRTAKXQpDysQBwj+iCUiJC0tXi0tJFcQEA8rD1gpdCkUFRUUwCl0KQ8rEA8PJC0tXi0tJMAiJQAAAAAFAAD/wAQAA8AAGwA3AFMAXwBrAAAFMjc+ATc2NTQnLgEnJiMiBw4BBwYVFBceARcWEzIXHgEXFhUUBw4BBwYjIicuAScmNTQ3PgE3NhMyNz4BNzY3BgcOAQcGIyInLgEnJicWFx4BFxYnNDYzMhYVFAYjIiYlNDYzMhYVFAYjIiYCAGpdXosoKCgoi15dampdXosoKCgoi15dalZMTHEgISEgcUxMVlZMTHEgISEgcUxMVisrKlEmJiMFHBtWODc/Pzc4VhscBSMmJlEqK9UlGxslJRsbJQGAJRsbJSUbGyVAKCiLXl1qal1eiygoKCiLXl1qal1eiygoA6AhIHFMTFZWTExxICEhIHFMTFZWTExxICH+CQYGFRAQFEM6OlYYGRkYVjo6QxQQEBUGBvcoODgoKDg4KCg4OCgoODgAAAMAAP/ABAADwAAbADcAQwAAASIHDgEHBhUUFx4BFxYzMjc+ATc2NTQnLgEnJgMiJy4BJyY1NDc+ATc2MzIXHgEXFhUUBw4BBwYTBycHFwcXNxc3JzcCAGpdXosoKCgoi15dampdXosoKCgoi15dalZMTHEgISEgcUxMVlZMTHEgISEgcUxMSqCgYKCgYKCgYKCgA8AoKIteXWpqXV6LKCgoKIteXWpqXV6LKCj8YCEgcUxMVlZMTHEgISEgcUxMVlZMTHEgIQKgoKBgoKBgoKBgoKAAAQBl/8ADmwPAACkAAAEiJiMiBw4BBwYVFBYzLgE1NDY3MAcGAgcGBxUhEzM3IzceATMyNjcOAQMgRGhGcVNUbRobSUgGDWVKEBBLPDxZAT1sxizXNC1VJi5QGB09A7AQHh1hPj9BTTsLJjeZbwN9fv7Fj5AjGQIAgPYJDzdrCQcAAAAAAgAAAAAEAAOAAAkAFwAAJTMHJzMRIzcXIyURJyMRMxUhNTMRIwcRA4CAoKCAgKCggP8AQMCA/oCAwEDAwMACAMDAwP8AgP1AQEACwIABAAADAMAAAANAA4AAFgAfACgAAAE+ATU0Jy4BJyYjIREhMjc+ATc2NTQmATMyFhUUBisBEyMRMzIWFRQGAsQcIBQURi4vNf7AAYA1Ly5GFBRE/oRlKjw8KWafn58sPj4B2yJULzUvLkYUFPyAFBRGLi81RnQBRks1NUv+gAEASzU1SwAAAAACAMAAAANAA4AAHwAjAAABMxEUBw4BBwYjIicuAScmNREzERQWFx4BMzI2Nz4BNQEhFSECwIAZGVc6O0JCOzpXGRmAGxgcSSgoSRwYG/4AAoD9gAOA/mA8NDVOFhcXFk41NDwBoP5gHjgXGBsbGBc4Hv6ggAAAAAABAIAAAAOAA4AACwAAARUjATMVITUzASM1A4CA/sCA/kCAAUCAA4BA/QBAQAMAQAABAAAAAAQAA4AAPQAAARUjHgEVFAYHDgEjIiYnLgE1MxQWMzI2NTQmIyE1IS4BJy4BNTQ2Nz4BMzIWFx4BFSM0JiMiBhUUFjMyFhcEAOsVFjUwLHE+PnEsMDWAck5OcnJO/gABLAIEATA1NTAscT4+cSwwNYByTk5yck47bisBwEAdQSI1YiQhJCQhJGI1NExMNDRMQAEDASRiNTViJCEkJCEkYjU0TEw0NEwhHwAAAAcAAP/ABAADwAADAAcACwAPABMAGwAjAAATMxUjNzMVIyUzFSM3MxUjJTMVIwMTIRMzEyETAQMhAyMDIQMAgIDAwMABAICAwMDAAQCAgBAQ/QAQIBACgBD9QBADABAgEP2AEAHAQEBAQEBAQEBAAkD+QAHA/oABgPwAAYD+gAFA/sAAAAoAAAAABAADgAADAAcACwAPABMAFwAbAB8AIwAnAAATESERATUhFR0BITUBFSE1IxUhNREhFSElIRUhETUhFQEhFSEhNSEVAAQA/YABAP8AAQD/AED/AAEA/wACgAEA/wABAPyAAQD/AAKAAQADgPyAA4D9wMDAQMDAAgDAwMDA/wDAwMABAMDA/sDAwMAAAAUAAAAABAADgAADAAcACwAPABMAABMhFSEVIRUhESEVIREhFSERIRUhAAQA/AACgP2AAoD9gAQA/AAEAPwAA4CAQID/AIABQID/AIAAAAAABQAAAAAEAAOAAAMABwALAA8AEwAAEyEVIRchFSERIRUhAyEVIREhFSEABAD8AMACgP2AAoD9gMAEAPwABAD8AAOAgECA/wCAAUCA/wCAAAAFAAAAAAQAA4AAAwAHAAsADwATAAATIRUhBSEVIREhFSEBIRUhESEVIQAEAPwAAYACgP2AAoD9gP6ABAD8AAQA/AADgIBAgP8AgAFAgP8AgAAAAAABAD8APwLmAuYALAAAJRQPAQYjIi8BBwYjIi8BJjU0PwEnJjU0PwE2MzIfATc2MzIfARYVFA8BFxYVAuYQThAXFxCoqBAXFhBOEBCoqBAQThAWFxCoqBAXFxBOEBCoqBDDFhBOEBCoqBAQThAWFxCoqBAXFxBOEBCoqBAQThAXFxCoqBAXAAAABgAAAAADJQNuABQAKAA8AE0AVQCCAAABERQHBisBIicmNRE0NzY7ATIXFhUzERQHBisBIicmNRE0NzY7ATIXFhcRFAcGKwEiJyY1ETQ3NjsBMhcWExEhERQXFhcWMyEyNzY3NjUBIScmJyMGBwUVFAcGKwERFAcGIyEiJyY1ESMiJyY9ATQ3NjsBNzY3NjsBMhcWHwEzMhcWFQElBgUIJAgFBgYFCCQIBQaSBQUIJQgFBQUFCCUIBQWSBQUIJQgFBQUFCCUIBQVJ/gAEBAUEAgHbAgQEBAT+gAEAGwQGtQYEAfcGBQg3Ghsm/iUmGxs3CAUFBQUIsSgIFxYXtxcWFgkosAgFBgIS/rcIBQUFBQgBSQgFBgYFCP63CAUFBQUIAUkIBQYGBQj+twgFBQUFCAFJCAUGBgX+WwId/eMNCwoFBQUFCgsNAmZDBQICBVUkCAYF/eMwIiMhIi8CIAUGCCQIBQVgFQ8PDw8VYAUFCAACAAcASQO3Aq8AGgAuAAAJAQYjIi8BJjU0PwEnJjU0PwE2MzIXARYVFAcBFRQHBiMhIicmPQE0NzYzITIXFgFO/vYGBwgFHQYG4eEGBh0FCAcGAQoGBgJpBQUI/dsIBQUFBQgCJQgFBQGF/vYGBhwGCAcG4OEGBwcGHQUF/vUFCAcG/vslCAUFBQUIJQgFBQUFAAAAAQAjAAAD3QNuALMAACUiJyYjIgcGIyInJjU0NzY3Njc2NzY9ATQnJiMhIgcGHQEUFxYXFjMWFxYVFAcGIyInJiMiBwYjIicmNTQ3Njc2NzY3Nj0BETQ1NDU0JzQnJicmJyYnJicmIyInJjU0NzYzMhcWMzI3NjMyFxYVFAcGIwYHBgcGHQEUFxYzITI3Nj0BNCcmJyYnJjU0NzYzMhcWMzI3NjMyFxYVFAcGByIHBgcGFREUFxYXFhcyFxYVFAcGIwPBGTMyGhkyMxkNCAcJCg0MERAKEgEHFf5+FgcBFQkSEw4ODAsHBw4bNTUaGDExGA0HBwkJCwwQDwkSAQIBAgMEBAUIEhENDQoLBwcOGjU1GhgwMRgOBwcJCgwNEBAIFAEHDwGQDgcBFAoXFw8OBwcOGTMyGRkxMRkOBwcKCg0NEBEIFBQJEREODQoLBwcOAAICAgIMCw8RCQkBAQMDBQxE4AwFAwMFDNRRDQYBAgEICBIPDA0CAgICDAwOEQgJAQIDAwUNRSEB0AINDQgIDg4KCgsLBwcDBgEBCAgSDwwNAgICAg0MDxEICAECAQYMULYMBwEBBwy2UAwGAQEGBxYPDA0CAgICDQwPEQgIAQECBg1P/eZEDAYCAgEJCBEPDA0AAAIAAP+3A/8DtwATADkAAAEyFxYVFAcCBwYjIicmNTQ3ATYzARYXFh8BFgcGIyInJicmJyY1FhcWFxYXFjMyNzY3Njc2NzY3NjcDmygeHhq+TDdFSDQ0NQFtISn9+BcmJy8BAkxMe0c2NiEhEBEEExQQEBIRCRcIDxITFRUdHR4eKQO3GxooJDP+mUY0NTRJSTABSx/9sSsfHw0oek1MGhsuLzo6RAMPDgsLCgoWJRsaEREKCwQEAgABAAAAAAAA9evv618PPPUACwQAAAAAANbEBFgAAAAA1sQEWAAA/7cEAQPAAAAACAACAAAAAAAAAAEAAAPA/8AAAAQAAAD//wQBAAEAAAAAAAAAAAAAAAAAAAAhBAAAAAAAAAAAAAAAAgAAAAQAAAAEAAAABAAAAAQAAMAEAAAABAAAAAQAAAAEAABABAAAAAQAAAAEAAAeBAAAAAQAAAAEAABlBAAAAAQAAMAEAADABAAAgAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAMlAD8DJQAAA74ABwQAACMD/wAAAAAAAAAKABQAHgBMAJQA+AE2AXwBwgI2AnQCvgLoA34EHgSIBMoE8gU0BXAFiAXgBiIGagaSBroG5AcoB+AIKgkcCXgAAQAAACEAtAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAAcAAAABAAAAAAACAAcAYAABAAAAAAADAAcANgABAAAAAAAEAAcAdQABAAAAAAAFAAsAFQABAAAAAAAGAAcASwABAAAAAAAKABoAigADAAEECQABAA4ABwADAAEECQACAA4AZwADAAEECQADAA4APQADAAEECQAEAA4AfAADAAEECQAFABYAIAADAAEECQAGAA4AUgADAAEECQAKADQApGljb21vb24AaQBjAG8AbQBvAG8AblZlcnNpb24gMS4wAFYAZQByAHMAaQBvAG4AIAAxAC4AMGljb21vb24AaQBjAG8AbQBvAG8Abmljb21vb24AaQBjAG8AbQBvAG8AblJlZ3VsYXIAUgBlAGcAdQBsAGEAcmljb21vb24AaQBjAG8AbQBvAG8AbkZvbnQgZ2VuZXJhdGVkIGJ5IEljb01vb24uAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=) format(\'truetype\'); font-weight: normal; font-style: normal;}[class^="w-e-icon-"],[class*=" w-e-icon-"] { /* use !important to prevent issues with browser extensions that change fonts */ font-family: \'w-e-icon\' !important; speak: none; font-style: normal; font-weight: normal; font-variant: normal; text-transform: none; line-height: 1; /* Better Font Rendering =========== */ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;}.w-e-icon-close:before { content: "\\f00d";}.w-e-icon-upload2:before { content: "\\e9c6";}.w-e-icon-trash-o:before { content: "\\f014";}.w-e-icon-header:before { content: "\\f1dc";}.w-e-icon-pencil2:before { content: "\\e906";}.w-e-icon-paint-brush:before { content: "\\f1fc";}.w-e-icon-image:before { content: "\\e90d";}.w-e-icon-play:before { content: "\\e912";}.w-e-icon-location:before { content: "\\e947";}.w-e-icon-undo:before { content: "\\e965";}.w-e-icon-redo:before { content: "\\e966";}.w-e-icon-quotes-left:before { content: "\\e977";}.w-e-icon-list-numbered:before { content: "\\e9b9";}.w-e-icon-list2:before { content: "\\e9bb";}.w-e-icon-link:before { content: "\\e9cb";}.w-e-icon-happy:before { content: "\\e9df";}.w-e-icon-bold:before { content: "\\ea62";}.w-e-icon-underline:before { content: "\\ea63";}.w-e-icon-italic:before { content: "\\ea64";}.w-e-icon-strikethrough:before { content: "\\ea65";}.w-e-icon-table2:before { content: "\\ea71";}.w-e-icon-paragraph-left:before { content: "\\ea77";}.w-e-icon-paragraph-center:before { content: "\\ea78";}.w-e-icon-paragraph-right:before { content: "\\ea79";}.w-e-icon-terminal:before { content: "\\f120";}.w-e-icon-page-break:before { content: "\\ea68";}.w-e-icon-cancel-circle:before { content: "\\ea0d";}.w-e-icon-font:before { content: "\\ea5c";}.w-e-icon-text-heigh:before { content: "\\ea5f";}.w-e-toolbar { display: -webkit-box; display: -ms-flexbox; display: flex; padding: 0 5px; /* flex-wrap: wrap; */ /* 单个菜单 */}.w-e-toolbar .w-e-menu { position: relative; text-align: center; padding: 5px 10px; cursor: pointer;}.w-e-toolbar .w-e-menu i { color: #999;}.w-e-toolbar .w-e-menu:hover i { color: #333;}.w-e-toolbar .w-e-active i { color: #1e88e5;}.w-e-toolbar .w-e-active:hover i { color: #1e88e5;}.w-e-text-container .w-e-panel-container { position: absolute; top: 0; left: 50%; border: 1px solid #ccc; border-top: 0; box-shadow: 1px 1px 2px #ccc; color: #333; background-color: #fff; /* 为 emotion panel 定制的样式 */ /* 上传图片的 panel 定制样式 */}.w-e-text-container .w-e-panel-container .w-e-panel-close { position: absolute; right: 0; top: 0; padding: 5px; margin: 2px 5px 0 0; cursor: pointer; color: #999;}.w-e-text-container .w-e-panel-container .w-e-panel-close:hover { color: #333;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-title { list-style: none; display: -webkit-box; display: -ms-flexbox; display: flex; font-size: 14px; margin: 2px 10px 0 10px; border-bottom: 1px solid #f1f1f1;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-title .w-e-item { padding: 3px 5px; color: #999; cursor: pointer; margin: 0 3px; position: relative; top: 1px;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-title .w-e-active { color: #333; border-bottom: 1px solid #333; cursor: default; font-weight: 700;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content { padding: 10px 15px 10px 15px; font-size: 16px; /* 输入框的样式 */ /* 按钮的样式 */}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content input:focus,.w-e-text-container .w-e-panel-container .w-e-panel-tab-content textarea:focus,.w-e-text-container .w-e-panel-container .w-e-panel-tab-content button:focus { outline: none;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content textarea { width: 100%; border: 1px solid #ccc; padding: 5px;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content textarea:focus { border-color: #1e88e5;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content input[type=text] { border: none; border-bottom: 1px solid #ccc; font-size: 14px; height: 20px; color: #333; text-align: left;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content input[type=text].small { width: 30px; text-align: center;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content input[type=text].block { display: block; width: 100%; margin: 10px 0;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content input[type=text]:focus { border-bottom: 2px solid #1e88e5;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button { font-size: 14px; color: #1e88e5; border: none; padding: 5px 10px; background-color: #fff; cursor: pointer; border-radius: 3px;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button.left { float: left; margin-right: 10px;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button.right { float: right; margin-left: 10px;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button.gray { color: #999;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button.red { color: #c24f4a;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button:hover { background-color: #f1f1f1;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container:after { content: ""; display: table; clear: both;}.w-e-text-container .w-e-panel-container .w-e-emoticon-container .w-e-item { cursor: pointer; font-size: 18px; padding: 0 3px; display: inline-block; *display: inline; *zoom: 1;}.w-e-text-container .w-e-panel-container .w-e-up-img-container { text-align: center;}.w-e-text-container .w-e-panel-container .w-e-up-img-container .w-e-up-btn { display: inline-block; *display: inline; *zoom: 1; color: #999; cursor: pointer; font-size: 60px; line-height: 1;}.w-e-text-container .w-e-panel-container .w-e-up-img-container .w-e-up-btn:hover { color: #333;}.w-e-text-container { position: relative;}.w-e-text-container .w-e-progress { position: absolute; background-color: #1e88e5; bottom: 0; left: 0; height: 1px;}.w-e-text { padding: 0 10px; overflow-y: scroll;}.w-e-text p,.w-e-text h1,.w-e-text h2,.w-e-text h3,.w-e-text h4,.w-e-text h5,.w-e-text table,.w-e-text pre { margin: 10px 0; line-height: 1.5;}.w-e-text ul,.w-e-text ol { margin: 10px 0 10px 20px;}.w-e-text blockquote { display: block; border-left: 8px solid #d0e5f2; padding: 5px 10px; margin: 10px 0; line-height: 1.4; font-size: 100%; background-color: #f1f1f1;}.w-e-text code { display: inline-block; *display: inline; *zoom: 1; background-color: #f1f1f1; border-radius: 3px; padding: 3px 5px; margin: 0 3px;}.w-e-text pre code { display: block;}.w-e-text table { border-top: 1px solid #ccc; border-left: 1px solid #ccc;}.w-e-text table td,.w-e-text table th { border-bottom: 1px solid #ccc; border-right: 1px solid #ccc; padding: 3px 5px;}.w-e-text table th { border-bottom: 2px solid #ccc; text-align: center;}.w-e-text:focus { outline: none;}.w-e-text img { cursor: pointer;}.w-e-text img:hover { box-shadow: 0 0 5px #333;}'; + var inlinecss = '.w-e-toolbar,.w-e-text-container,.w-e-menu-panel { padding: 0; margin: 0; box-sizing: border-box;}.w-e-toolbar *,.w-e-text-container *,.w-e-menu-panel * { padding: 0; margin: 0; box-sizing: border-box;}.w-e-clear-fix:after { content: ""; display: table; clear: both;}.w-e-toolbar .w-e-droplist { position: absolute; left: 0; top: 0; background-color: #fff; border: 1px solid #f1f1f1; border-right-color: #ccc; border-bottom-color: #ccc;}.w-e-toolbar .w-e-droplist .w-e-dp-title { text-align: center; color: #999; line-height: 2; border-bottom: 1px solid #f1f1f1; font-size: 13px;}.w-e-toolbar .w-e-droplist ul.w-e-list { list-style: none; line-height: 1;}.w-e-toolbar .w-e-droplist ul.w-e-list li.w-e-item { color: #333; padding: 5px 0;}.w-e-toolbar .w-e-droplist ul.w-e-list li.w-e-item:hover { background-color: #f1f1f1;}.w-e-toolbar .w-e-droplist ul.w-e-block { list-style: none; text-align: left; padding: 5px;}.w-e-toolbar .w-e-droplist ul.w-e-block li.w-e-item { display: inline-block; *display: inline; *zoom: 1; padding: 3px 5px;}.w-e-toolbar .w-e-droplist ul.w-e-block li.w-e-item:hover { background-color: #f1f1f1;}@font-face { font-family: \'w-e-icon\'; src: url(data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAABhQAAsAAAAAGAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABCAAAAGAAAABgDxIPBGNtYXAAAAFoAAABBAAAAQQrSf4BZ2FzcAAAAmwAAAAIAAAACAAAABBnbHlmAAACdAAAEvAAABLwfpUWUWhlYWQAABVkAAAANgAAADYQp00kaGhlYQAAFZwAAAAkAAAAJAfEA+FobXR4AAAVwAAAAIQAAACEeAcD7GxvY2EAABZEAAAARAAAAERBSEX+bWF4cAAAFogAAAAgAAAAIAAsALZuYW1lAAAWqAAAAYYAAAGGmUoJ+3Bvc3QAABgwAAAAIAAAACAAAwAAAAMD3gGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAA8fwDwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEAOgAAAA2ACAABAAWAAEAIOkG6Q3pEulH6Wbpd+m56bvpxunL6d/qDepc6l/qZepo6nHqefAN8BTxIPHc8fz//f//AAAAAAAg6QbpDekS6UfpZel36bnpu+nG6cvp3+oN6lzqX+pi6mjqcep38A3wFPEg8dzx/P/9//8AAf/jFv4W+Bb0FsAWoxaTFlIWURZHFkMWMBYDFbUVsxWxFa8VpxWiEA8QCQ7+DkMOJAADAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAACAAD/wAQAA8AABAATAAABNwEnAQMuAScTNwEjAQMlATUBBwGAgAHAQP5Anxc7MmOAAYDA/oDAAoABgP6ATgFAQAHAQP5A/p0yOxcBEU4BgP6A/YDAAYDA/oCAAAQAAAAABAADgAAQACEALQA0AAABOAExETgBMSE4ATEROAExITUhIgYVERQWMyEyNjURNCYjBxQGIyImNTQ2MzIWEyE1EwEzNwPA/IADgPyAGiYmGgOAGiYmGoA4KCg4OCgoOED9AOABAEDgA0D9AAMAQCYa/QAaJiYaAwAaJuAoODgoKDg4/biAAYD+wMAAAAIAAABABAADQAA4ADwAAAEmJy4BJyYjIgcOAQcGBwYHDgEHBhUUFx4BFxYXFhceARcWMzI3PgE3Njc2Nz4BNzY1NCcuAScmJwERDQED1TY4OXY8PT8/PTx2OTg2CwcICwMDAwMLCAcLNjg5djw9Pz89PHY5ODYLBwgLAwMDAwsIBwv9qwFA/sADIAgGBggCAgICCAYGCCkqKlktLi8vLi1ZKiopCAYGCAICAgIIBgYIKSoqWS0uLy8uLVkqKin94AGAwMAAAAAAAgDA/8ADQAPAABsAJwAAASIHDgEHBhUUFx4BFxYxMDc+ATc2NTQnLgEnJgMiJjU0NjMyFhUUBgIAQjs6VxkZMjJ4MjIyMngyMhkZVzo7QlBwcFBQcHADwBkZVzo7Qnh9fcxBQUFBzH19eEI7OlcZGf4AcFBQcHBQUHAAAAEAAAAABAADgAArAAABIgcOAQcGBycRISc+ATMyFx4BFxYVFAcOAQcGBxc2Nz4BNzY1NCcuAScmIwIANTIyXCkpI5YBgJA1i1BQRUZpHh4JCSIYGB5VKCAgLQwMKCiLXl1qA4AKCycbHCOW/oCQNDweHmlGRVArKClJICEaYCMrK2I2NjlqXV6LKCgAAQAAAAAEAAOAACoAABMUFx4BFxYXNyYnLgEnJjU0Nz4BNzYzMhYXByERByYnLgEnJiMiBw4BBwYADAwtICAoVR4YGCIJCR4eaUZFUFCLNZABgJYjKSlcMjI1al1eiygoAYA5NjZiKysjYBohIEkpKCtQRUZpHh48NJABgJYjHBsnCwooKIteXQAAAAACAAAAQAQBAwAAJgBNAAATMhceARcWFRQHDgEHBiMiJy4BJyY1JzQ3PgE3NjMVIgYHDgEHPgEhMhceARcWFRQHDgEHBiMiJy4BJyY1JzQ3PgE3NjMVIgYHDgEHPgHhLikpPRESEhE9KSkuLikpPRESASMjelJRXUB1LQkQBwgSAkkuKSk9ERISET0pKS4uKSk9ERIBIyN6UlFdQHUtCRAHCBICABIRPSkpLi4pKT0REhIRPSkpLiBdUVJ6IyOAMC4IEwoCARIRPSkpLi4pKT0REhIRPSkpLiBdUVJ6IyOAMC4IEwoCAQAABgBA/8AEAAPAAAMABwALABEAHQApAAAlIRUhESEVIREhFSEnESM1IzUTFTMVIzU3NSM1MxUVESM1MzUjNTM1IzUBgAKA/YACgP2AAoD9gMBAQECAwICAwMCAgICAgIACAIACAIDA/wDAQP3yMkCSPDJAku7+wEBAQEBAAAYAAP/ABAADwAADAAcACwAXACMALwAAASEVIREhFSERIRUhATQ2MzIWFRQGIyImETQ2MzIWFRQGIyImETQ2MzIWFRQGIyImAYACgP2AAoD9gAKA/YD+gEs1NUtLNTVLSzU1S0s1NUtLNTVLSzU1SwOAgP8AgP8AgANANUtLNTVLS/61NUtLNTVLS/61NUtLNTVLSwADAAAAAAQAA6AAAwANABQAADchFSElFSE1EyEVITUhJQkBIxEjEQAEAPwABAD8AIABAAEAAQD9YAEgASDggEBAwEBAAQCAgMABIP7g/wABAAAAAAACAB7/zAPiA7QAMwBkAAABIiYnJicmNDc2PwE+ATMyFhcWFxYUBwYPAQYiJyY0PwE2NCcuASMiBg8BBhQXFhQHDgEjAyImJyYnJjQ3Nj8BNjIXFhQPAQYUFx4BMzI2PwE2NCcmNDc2MhcWFxYUBwYPAQ4BIwG4ChMIIxISEhIjwCNZMTFZIyMSEhISI1gPLA8PD1gpKRQzHBwzFMApKQ8PCBMKuDFZIyMSEhISI1gPLA8PD1gpKRQzHBwzFMApKQ8PDysQIxISEhIjwCNZMQFECAckLS1eLS0kwCIlJSIkLS1eLS0kVxAQDysPWCl0KRQVFRTAKXQpDysQBwj+iCUiJC0tXi0tJFcQEA8rD1gpdCkUFRUUwCl0KQ8rEA8PJC0tXi0tJMAiJQAAAAAFAAD/wAQAA8AAGwA3AFMAXwBrAAAFMjc+ATc2NTQnLgEnJiMiBw4BBwYVFBceARcWEzIXHgEXFhUUBw4BBwYjIicuAScmNTQ3PgE3NhMyNz4BNzY3BgcOAQcGIyInLgEnJicWFx4BFxYnNDYzMhYVFAYjIiYlNDYzMhYVFAYjIiYCAGpdXosoKCgoi15dampdXosoKCgoi15dalZMTHEgISEgcUxMVlZMTHEgISEgcUxMVisrKlEmJiMFHBtWODc/Pzc4VhscBSMmJlEqK9UlGxslJRsbJQGAJRsbJSUbGyVAKCiLXl1qal1eiygoKCiLXl1qal1eiygoA6AhIHFMTFZWTExxICEhIHFMTFZWTExxICH+CQYGFRAQFEM6OlYYGRkYVjo6QxQQEBUGBvcoODgoKDg4KCg4OCgoODgAAAMAAP/ABAADwAAbADcAQwAAASIHDgEHBhUUFx4BFxYzMjc+ATc2NTQnLgEnJgMiJy4BJyY1NDc+ATc2MzIXHgEXFhUUBw4BBwYTBycHFwcXNxc3JzcCAGpdXosoKCgoi15dampdXosoKCgoi15dalZMTHEgISEgcUxMVlZMTHEgISEgcUxMSqCgYKCgYKCgYKCgA8AoKIteXWpqXV6LKCgoKIteXWpqXV6LKCj8YCEgcUxMVlZMTHEgISEgcUxMVlZMTHEgIQKgoKBgoKBgoKBgoKAAAQBl/8ADmwPAACkAAAEiJiMiBw4BBwYVFBYzLgE1NDY3MAcGAgcGBxUhEzM3IzceATMyNjcOAQMgRGhGcVNUbRobSUgGDWVKEBBLPDxZAT1sxizXNC1VJi5QGB09A7AQHh1hPj9BTTsLJjeZbwN9fv7Fj5AjGQIAgPYJDzdrCQcAAAAAAgAAAAAEAAOAAAkAFwAAJTMHJzMRIzcXIyURJyMRMxUhNTMRIwcRA4CAoKCAgKCggP8AQMCA/oCAwEDAwMACAMDAwP8AgP1AQEACwIABAAADAMAAAANAA4AAFgAfACgAAAE+ATU0Jy4BJyYjIREhMjc+ATc2NTQmATMyFhUUBisBEyMRMzIWFRQGAsQcIBQURi4vNf7AAYA1Ly5GFBRE/oRlKjw8KWafn58sPj4B2yJULzUvLkYUFPyAFBRGLi81RnQBRks1NUv+gAEASzU1SwAAAAACAMAAAANAA4AAHwAjAAABMxEUBw4BBwYjIicuAScmNREzERQWFx4BMzI2Nz4BNQEhFSECwIAZGVc6O0JCOzpXGRmAGxgcSSgoSRwYG/4AAoD9gAOA/mA8NDVOFhcXFk41NDwBoP5gHjgXGBsbGBc4Hv6ggAAAAAABAIAAAAOAA4AACwAAARUjATMVITUzASM1A4CA/sCA/kCAAUCAA4BA/QBAQAMAQAABAAAAAAQAA4AAPQAAARUjHgEVFAYHDgEjIiYnLgE1MxQWMzI2NTQmIyE1IS4BJy4BNTQ2Nz4BMzIWFx4BFSM0JiMiBhUUFjMyFhcEAOsVFjUwLHE+PnEsMDWAck5OcnJO/gABLAIEATA1NTAscT4+cSwwNYByTk5yck47bisBwEAdQSI1YiQhJCQhJGI1NExMNDRMQAEDASRiNTViJCEkJCEkYjU0TEw0NEwhHwAAAAcAAP/ABAADwAADAAcACwAPABMAGwAjAAATMxUjNzMVIyUzFSM3MxUjJTMVIwMTIRMzEyETAQMhAyMDIQMAgIDAwMABAICAwMDAAQCAgBAQ/QAQIBACgBD9QBADABAgEP2AEAHAQEBAQEBAQEBAAkD+QAHA/oABgPwAAYD+gAFA/sAAAAoAAAAABAADgAADAAcACwAPABMAFwAbAB8AIwAnAAATESERATUhFR0BITUBFSE1IxUhNREhFSElIRUhETUhFQEhFSEhNSEVAAQA/YABAP8AAQD/AED/AAEA/wACgAEA/wABAPyAAQD/AAKAAQADgPyAA4D9wMDAQMDAAgDAwMDA/wDAwMABAMDA/sDAwMAAAAUAAAAABAADgAADAAcACwAPABMAABMhFSEVIRUhESEVIREhFSERIRUhAAQA/AACgP2AAoD9gAQA/AAEAPwAA4CAQID/AIABQID/AIAAAAAABQAAAAAEAAOAAAMABwALAA8AEwAAEyEVIRchFSERIRUhAyEVIREhFSEABAD8AMACgP2AAoD9gMAEAPwABAD8AAOAgECA/wCAAUCA/wCAAAAFAAAAAAQAA4AAAwAHAAsADwATAAATIRUhBSEVIREhFSEBIRUhESEVIQAEAPwAAYACgP2AAoD9gP6ABAD8AAQA/AADgIBAgP8AgAFAgP8AgAAAAAABAD8APwLmAuYALAAAJRQPAQYjIi8BBwYjIi8BJjU0PwEnJjU0PwE2MzIfATc2MzIfARYVFA8BFxYVAuYQThAXFxCoqBAXFhBOEBCoqBAQThAWFxCoqBAXFxBOEBCoqBDDFhBOEBCoqBAQThAWFxCoqBAXFxBOEBCoqBAQThAXFxCoqBAXAAAABgAAAAADJQNuABQAKAA8AE0AVQCCAAABERQHBisBIicmNRE0NzY7ATIXFhUzERQHBisBIicmNRE0NzY7ATIXFhcRFAcGKwEiJyY1ETQ3NjsBMhcWExEhERQXFhcWMyEyNzY3NjUBIScmJyMGBwUVFAcGKwERFAcGIyEiJyY1ESMiJyY9ATQ3NjsBNzY3NjsBMhcWHwEzMhcWFQElBgUIJAgFBgYFCCQIBQaSBQUIJQgFBQUFCCUIBQWSBQUIJQgFBQUFCCUIBQVJ/gAEBAUEAgHbAgQEBAT+gAEAGwQGtQYEAfcGBQg3Ghsm/iUmGxs3CAUFBQUIsSgIFxYXtxcWFgkosAgFBgIS/rcIBQUFBQgBSQgFBgYFCP63CAUFBQUIAUkIBQYGBQj+twgFBQUFCAFJCAUGBgX+WwId/eMNCwoFBQUFCgsNAmZDBQICBVUkCAYF/eMwIiMhIi8CIAUGCCQIBQVgFQ8PDw8VYAUFCAACAAcASQO3Aq8AGgAuAAAJAQYjIi8BJjU0PwEnJjU0PwE2MzIXARYVFAcBFRQHBiMhIicmPQE0NzYzITIXFgFO/vYGBwgFHQYG4eEGBh0FCAcGAQoGBgJpBQUI/dsIBQUFBQgCJQgFBQGF/vYGBhwGCAcG4OEGBwcGHQUF/vUFCAcG/vslCAUFBQUIJQgFBQUFAAAAAQAjAAAD3QNuALMAACUiJyYjIgcGIyInJjU0NzY3Njc2NzY9ATQnJiMhIgcGHQEUFxYXFjMWFxYVFAcGIyInJiMiBwYjIicmNTQ3Njc2NzY3Nj0BETQ1NDU0JzQnJicmJyYnJicmIyInJjU0NzYzMhcWMzI3NjMyFxYVFAcGIwYHBgcGHQEUFxYzITI3Nj0BNCcmJyYnJjU0NzYzMhcWMzI3NjMyFxYVFAcGByIHBgcGFREUFxYXFhcyFxYVFAcGIwPBGTMyGhkyMxkNCAcJCg0MERAKEgEHFf5+FgcBFQkSEw4ODAsHBw4bNTUaGDExGA0HBwkJCwwQDwkSAQIBAgMEBAUIEhENDQoLBwcOGjU1GhgwMRgOBwcJCgwNEBAIFAEHDwGQDgcBFAoXFw8OBwcOGTMyGRkxMRkOBwcKCg0NEBEIFBQJEREODQoLBwcOAAICAgIMCw8RCQkBAQMDBQxE4AwFAwMFDNRRDQYBAgEICBIPDA0CAgICDAwOEQgJAQIDAwUNRSEB0AINDQgIDg4KCgsLBwcDBgEBCAgSDwwNAgICAg0MDxEICAECAQYMULYMBwEBBwy2UAwGAQEGBxYPDA0CAgICDQwPEQgIAQECBg1P/eZEDAYCAgEJCBEPDA0AAAIAAP+3A/8DtwATADkAAAEyFxYVFAcCBwYjIicmNTQ3ATYzARYXFh8BFgcGIyInJicmJyY1FhcWFxYXFjMyNzY3Njc2NzY3NjcDmygeHhq+TDdFSDQ0NQFtISn9+BcmJy8BAkxMe0c2NiEhEBEEExQQEBIRCRcIDxITFRUdHR4eKQO3GxooJDP+mUY0NTRJSTABSx/9sSsfHw0oek1MGhsuLzo6RAMPDgsLCgoWJRsaEREKCwQEAgABAAAAAAAA9evv618PPPUACwQAAAAAANbEBFgAAAAA1sQEWAAA/7cEAQPAAAAACAACAAAAAAAAAAEAAAPA/8AAAAQAAAD//wQBAAEAAAAAAAAAAAAAAAAAAAAhBAAAAAAAAAAAAAAAAgAAAAQAAAAEAAAABAAAAAQAAMAEAAAABAAAAAQAAAAEAABABAAAAAQAAAAEAAAeBAAAAAQAAAAEAABlBAAAAAQAAMAEAADABAAAgAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAMlAD8DJQAAA74ABwQAACMD/wAAAAAAAAAKABQAHgBMAJQA+AE2AXwBwgI2AnQCvgLoA34EHgSIBMoE8gU0BXAFiAXgBiIGagaSBroG5AcoB+AIKgkcCXgAAQAAACEAtAAKAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAAcAAAABAAAAAAACAAcAYAABAAAAAAADAAcANgABAAAAAAAEAAcAdQABAAAAAAAFAAsAFQABAAAAAAAGAAcASwABAAAAAAAKABoAigADAAEECQABAA4ABwADAAEECQACAA4AZwADAAEECQADAA4APQADAAEECQAEAA4AfAADAAEECQAFABYAIAADAAEECQAGAA4AUgADAAEECQAKADQApGljb21vb24AaQBjAG8AbQBvAG8AblZlcnNpb24gMS4wAFYAZQByAHMAaQBvAG4AIAAxAC4AMGljb21vb24AaQBjAG8AbQBvAG8Abmljb21vb24AaQBjAG8AbQBvAG8AblJlZ3VsYXIAUgBlAGcAdQBsAGEAcmljb21vb24AaQBjAG8AbQBvAG8AbkZvbnQgZ2VuZXJhdGVkIGJ5IEljb01vb24uAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=) format(\'truetype\'); font-weight: normal; font-style: normal;}[class^="w-e-icon-"],[class*=" w-e-icon-"] { /* use !important to prevent issues with browser extensions that change fonts */ font-family: \'w-e-icon\' !important; speak: none; font-style: normal; font-weight: normal; font-variant: normal; text-transform: none; line-height: 1; /* Better Font Rendering =========== */ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;}.w-e-icon-close:before { content: "\\f00d";}.w-e-icon-upload2:before { content: "\\e9c6";}.w-e-icon-trash-o:before { content: "\\f014";}.w-e-icon-header:before { content: "\\f1dc";}.w-e-icon-pencil2:before { content: "\\e906";}.w-e-icon-paint-brush:before { content: "\\f1fc";}.w-e-icon-image:before { content: "\\e90d";}.w-e-icon-play:before { content: "\\e912";}.w-e-icon-location:before { content: "\\e947";}.w-e-icon-undo:before { content: "\\e965";}.w-e-icon-redo:before { content: "\\e966";}.w-e-icon-quotes-left:before { content: "\\e977";}.w-e-icon-list-numbered:before { content: "\\e9b9";}.w-e-icon-list2:before { content: "\\e9bb";}.w-e-icon-link:before { content: "\\e9cb";}.w-e-icon-happy:before { content: "\\e9df";}.w-e-icon-bold:before { content: "\\ea62";}.w-e-icon-underline:before { content: "\\ea63";}.w-e-icon-italic:before { content: "\\ea64";}.w-e-icon-strikethrough:before { content: "\\ea65";}.w-e-icon-table2:before { content: "\\ea71";}.w-e-icon-paragraph-left:before { content: "\\ea77";}.w-e-icon-paragraph-center:before { content: "\\ea78";}.w-e-icon-paragraph-right:before { content: "\\ea79";}.w-e-icon-terminal:before { content: "\\f120";}.w-e-icon-page-break:before { content: "\\ea68";}.w-e-icon-cancel-circle:before { content: "\\ea0d";}.w-e-icon-font:before { content: "\\ea5c";}.w-e-icon-text-heigh:before { content: "\\ea5f";}.w-e-toolbar { display: -webkit-box; display: -ms-flexbox; display: flex; padding: 0 5px; /* flex-wrap: wrap; */ /* 单个菜单 */}.w-e-toolbar .w-e-menu { position: relative; text-align: center; padding: 5px 10px; cursor: pointer;}.w-e-toolbar .w-e-menu i { color: #999;}.w-e-toolbar .w-e-menu:hover i { color: #333;}.w-e-toolbar .w-e-active i { color: #1e88e5;}.w-e-toolbar .w-e-active:hover i { color: #1e88e5;}.w-e-text-container .w-e-panel-container { position: absolute; top: 0; left: 50%; border: 1px solid #ccc; border-top: 0; box-shadow: 1px 1px 2px #ccc; color: #333; background-color: #fff; /* 为 emotion panel 定制的样式 */ /* 上传图片的 panel 定制样式 */}.w-e-text-container .w-e-panel-container .w-e-panel-close { position: absolute; right: 0; top: 0; padding: 5px; margin: 2px 5px 0 0; cursor: pointer; color: #999;}.w-e-text-container .w-e-panel-container .w-e-panel-close:hover { color: #333;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-title { list-style: none; display: -webkit-box; display: -ms-flexbox; display: flex; font-size: 14px; margin: 2px 10px 0 10px; border-bottom: 1px solid #f1f1f1;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-title .w-e-item { padding: 3px 5px; color: #999; cursor: pointer; margin: 0 3px; position: relative; top: 1px;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-title .w-e-active { color: #333; border-bottom: 1px solid #333; cursor: default; font-weight: 700;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content { padding: 10px 15px 10px 15px; font-size: 16px; /* 输入框的样式 */ /* 按钮的样式 */}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content input:focus,.w-e-text-container .w-e-panel-container .w-e-panel-tab-content textarea:focus,.w-e-text-container .w-e-panel-container .w-e-panel-tab-content button:focus { outline: none;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content textarea { width: 100%; border: 1px solid #ccc; padding: 5px;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content textarea:focus { border-color: #1e88e5;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content input[type=text] { border: none; border-bottom: 1px solid #ccc; font-size: 14px; height: 20px; color: #333; text-align: left;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content input[type=text].small { width: 30px; text-align: center;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content input[type=text].block { display: block; width: 100%; margin: 10px 0;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content input[type=text]:focus { border-bottom: 2px solid #1e88e5;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button { font-size: 14px; color: #1e88e5; border: none; padding: 5px 10px; background-color: #fff; cursor: pointer; border-radius: 3px;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button.left { float: left; margin-right: 10px;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button.right { float: right; margin-left: 10px;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button.gray { color: #999;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button.red { color: #c24f4a;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button:hover { background-color: #f1f1f1;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container:after { content: ""; display: table; clear: both;}.w-e-text-container .w-e-panel-container .w-e-emoticon-container .w-e-item { cursor: pointer; font-size: 18px; padding: 0 3px; display: inline-block; *display: inline; *zoom: 1;}.w-e-text-container .w-e-panel-container .w-e-up-img-container { text-align: center;}.w-e-text-container .w-e-panel-container .w-e-up-img-container .w-e-up-btn { display: inline-block; *display: inline; *zoom: 1; color: #999; cursor: pointer; font-size: 60px; line-height: 1;}.w-e-text-container .w-e-panel-container .w-e-up-img-container .w-e-up-btn:hover { color: #333;}.w-e-text-container { position: relative;}.w-e-text-container .w-e-progress { position: absolute; background-color: #1e88e5; bottom: 0; left: 0; height: 1px;}.w-e-text { padding: 0 10px; overflow-y: scroll;}.w-e-text p,.w-e-text h1,.w-e-text h2,.w-e-text h3,.w-e-text h4,.w-e-text h5,.w-e-text table,.w-e-text pre { margin: 10px 0; line-height: 1.5;}.w-e-text ul,.w-e-text ol { margin: 10px 0 10px 20px;}.w-e-text blockquote { display: block; border-left: 8px solid #d0e5f2; padding: 5px 10px; margin: 10px 0; line-height: 1.4; font-size: 100%; background-color: #f1f1f1;}.w-e-text code { display: inline-block; *display: inline; *zoom: 1; background-color: #f1f1f1; border-radius: 3px; padding: 3px 5px; margin: 0 3px;}.w-e-text pre code { display: block;}.w-e-text table { border-top: 1px solid #ccc; border-left: 1px solid #ccc;}.w-e-text table td,.w-e-text table th { border-bottom: 1px solid #ccc; border-right: 1px solid #ccc; padding: 3px 5px;}.w-e-text table th { border-bottom: 2px solid #ccc; text-align: center;}.w-e-text:focus { outline: none;}.w-e-text img { cursor: pointer;}.w-e-text img:hover { box-shadow: 0 0 5px #333;}'; // 将 css 代码添加到 diff --git a/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/components/demos/CustomTracking.vue b/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/components/demos/CustomTracking.vue index 23e77fe2..fb18e097 100644 --- a/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/components/demos/CustomTracking.vue +++ b/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/components/demos/CustomTracking.vue @@ -9,84 +9,84 @@

              - +
          diff --git a/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/components/demos/DecodeAll.vue b/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/components/demos/DecodeAll.vue index 8367c5f5..8d4da013 100644 --- a/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/components/demos/DecodeAll.vue +++ b/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/components/demos/DecodeAll.vue @@ -4,59 +4,59 @@

          Last result: {{ result }}

          - +
          diff --git a/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/components/demos/DragDrop.vue b/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/components/demos/DragDrop.vue index 73a6de4e..bbb392f6 100644 --- a/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/components/demos/DragDrop.vue +++ b/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/components/demos/DragDrop.vue @@ -15,66 +15,66 @@ diff --git a/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/components/demos/Fullscreen.vue b/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/components/demos/Fullscreen.vue index f01c2ac2..d8efe40f 100644 --- a/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/components/demos/Fullscreen.vue +++ b/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/components/demos/Fullscreen.vue @@ -2,114 +2,115 @@
          diff --git a/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/components/demos/LoadingIndicator.vue b/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/components/demos/LoadingIndicator.vue index ae5bfe52..2e6582c4 100644 --- a/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/components/demos/LoadingIndicator.vue +++ b/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/components/demos/LoadingIndicator.vue @@ -11,51 +11,51 @@ diff --git a/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/components/demos/ScanSameQrcodeMoreThanOnce.vue b/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/components/demos/ScanSameQrcodeMoreThanOnce.vue index 33f17185..e8f0f813 100644 --- a/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/components/demos/ScanSameQrcodeMoreThanOnce.vue +++ b/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/components/demos/ScanSameQrcodeMoreThanOnce.vue @@ -5,74 +5,74 @@
          - Checkmark + Checkmark
          diff --git a/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/components/demos/SwitchCamera.vue b/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/components/demos/SwitchCamera.vue index 8de0ea9d..69efa8c3 100644 --- a/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/components/demos/SwitchCamera.vue +++ b/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/components/demos/SwitchCamera.vue @@ -17,66 +17,66 @@ diff --git a/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/components/demos/Torch.vue b/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/components/demos/Torch.vue index 6f063b0e..653d610c 100644 --- a/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/components/demos/Torch.vue +++ b/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/components/demos/Torch.vue @@ -13,52 +13,53 @@ diff --git a/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/components/demos/Upload.vue b/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/components/demos/Upload.vue index a09947d6..7c1254ce 100644 --- a/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/components/demos/Upload.vue +++ b/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/components/demos/Upload.vue @@ -13,35 +13,35 @@

          Last result: {{ result }}

          - +
          diff --git a/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/components/demos/Validate.vue b/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/components/demos/Validate.vue index 11e7c570..6c26fed4 100644 --- a/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/components/demos/Validate.vue +++ b/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/components/demos/Validate.vue @@ -19,100 +19,102 @@ diff --git a/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/config.js b/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/config.js index a8ccd625..8301a43c 100644 --- a/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/config.js +++ b/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/config.js @@ -34,8 +34,8 @@ module.exports = { }, nav: [ - { text: 'Live Demos', link: '/demos/CustomTracking' }, - { text: 'API Reference', link: '/api/QrcodeStream' } + {text: 'Live Demos', link: '/demos/CustomTracking'}, + {text: 'API Reference', link: '/api/QrcodeStream'} ] } } diff --git a/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/public/camera-switch.svg b/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/public/camera-switch.svg index aee2cd71..abc9bd7c 100644 --- a/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/public/camera-switch.svg +++ b/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/public/camera-switch.svg @@ -1 +1,7 @@ - \ No newline at end of file + + + + diff --git a/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/public/checkmark.svg b/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/public/checkmark.svg index 1b04049c..f706fea0 100644 --- a/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/public/checkmark.svg +++ b/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/public/checkmark.svg @@ -1 +1,8 @@ - + + + + diff --git a/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/public/debug-memory-leak.html b/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/public/debug-memory-leak.html index 89ac9a6e..95fbb280 100644 --- a/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/public/debug-memory-leak.html +++ b/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/public/debug-memory-leak.html @@ -6,97 +6,97 @@ Document - + diff --git a/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/public/flash-off.svg b/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/public/flash-off.svg index 2d34c96f..4745d497 100644 --- a/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/public/flash-off.svg +++ b/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/public/flash-off.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + diff --git a/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/public/flash-on.svg b/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/public/flash-on.svg index 9d0d023a..4ccf442a 100644 --- a/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/public/flash-on.svg +++ b/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/public/flash-on.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + diff --git a/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/public/fullscreen-exit.svg b/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/public/fullscreen-exit.svg index 85e2eaaa..1d751c64 100644 --- a/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/public/fullscreen-exit.svg +++ b/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/public/fullscreen-exit.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + diff --git a/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/public/fullscreen.svg b/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/public/fullscreen.svg index 08d4f2cf..580e3ddd 100644 --- a/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/public/fullscreen.svg +++ b/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/public/fullscreen.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + diff --git a/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/public/select-camera-demo.html b/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/public/select-camera-demo.html index 92064974..be0ea101 100644 --- a/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/public/select-camera-demo.html +++ b/src/main/resources/static/lib/vue-qrcode-reader/docs/.vuepress/public/select-camera-demo.html @@ -13,64 +13,64 @@ cameras:
          diff --git a/src/main/resources/static/lib/vue-qrcode-reader/src/components/QrcodeCapture.vue b/src/main/resources/static/lib/vue-qrcode-reader/src/components/QrcodeCapture.vue index b66fe646..503da879 100644 --- a/src/main/resources/static/lib/vue-qrcode-reader/src/components/QrcodeCapture.vue +++ b/src/main/resources/static/lib/vue-qrcode-reader/src/components/QrcodeCapture.vue @@ -10,21 +10,21 @@ diff --git a/src/main/resources/static/lib/vue-qrcode-reader/src/components/QrcodeDropZone.vue b/src/main/resources/static/lib/vue-qrcode-reader/src/components/QrcodeDropZone.vue index 4084cee2..a62de039 100644 --- a/src/main/resources/static/lib/vue-qrcode-reader/src/components/QrcodeDropZone.vue +++ b/src/main/resources/static/lib/vue-qrcode-reader/src/components/QrcodeDropZone.vue @@ -10,33 +10,33 @@ diff --git a/src/main/resources/static/lib/vue-qrcode-reader/src/components/QrcodeStream.vue b/src/main/resources/static/lib/vue-qrcode-reader/src/components/QrcodeStream.vue index a9417fb7..8cc64550 100644 --- a/src/main/resources/static/lib/vue-qrcode-reader/src/components/QrcodeStream.vue +++ b/src/main/resources/static/lib/vue-qrcode-reader/src/components/QrcodeStream.vue @@ -29,296 +29,297 @@ diff --git a/src/main/resources/static/lib/vue-qrcode-reader/src/index.js b/src/main/resources/static/lib/vue-qrcode-reader/src/index.js index 18c123c7..bcbf3498 100644 --- a/src/main/resources/static/lib/vue-qrcode-reader/src/index.js +++ b/src/main/resources/static/lib/vue-qrcode-reader/src/index.js @@ -10,13 +10,13 @@ export function install(Vue) { } // Expose the components -export { QrcodeStream, QrcodeCapture, QrcodeDropZone }; +export {QrcodeStream, QrcodeCapture, QrcodeDropZone}; /* -- Plugin definition & Auto-install -- */ /* You shouldn't have to modify the code below */ // Plugin -const plugin = { install }; +const plugin = {install}; export default plugin; diff --git a/src/main/resources/static/lib/vue-qrcode-reader/src/misc/camera.js b/src/main/resources/static/lib/vue-qrcode-reader/src/misc/camera.js index 951f921b..6091e971 100644 --- a/src/main/resources/static/lib/vue-qrcode-reader/src/misc/camera.js +++ b/src/main/resources/static/lib/vue-qrcode-reader/src/misc/camera.js @@ -1,5 +1,5 @@ -import { StreamApiNotSupportedError, InsecureContextError } from "./errors.js"; -import { eventOn, timeout } from "callforth"; +import {StreamApiNotSupportedError, InsecureContextError} from "./errors.js"; +import {eventOn, timeout} from "callforth"; import shimGetUserMedia from "./shimGetUserMedia"; class Camera { @@ -33,9 +33,9 @@ const narrowDownFacingMode = async camera => { const deviceBlackList = ["OBS Virtual Camera", "OBS-Camera"]; const devices = (await navigator.mediaDevices.enumerateDevices()) - .filter(({ kind }) => kind === "videoinput") - .filter(({ label }) => !deviceBlackList.includes(label)) - .filter(({ label }) => !label.includes("infrared")); + .filter(({kind}) => kind === "videoinput") + .filter(({label}) => !deviceBlackList.includes(label)) + .filter(({label}) => !label.includes("infrared")); if (devices.length > 2) { // Explicitly picking the first entry in the list of all videoinput @@ -46,29 +46,29 @@ const narrowDownFacingMode = async camera => { switch (camera) { case "auto": - return { deviceId: { exact: rearCamera.deviceId } }; + return {deviceId: {exact: rearCamera.deviceId}}; case "rear": - return { deviceId: { exact: rearCamera.deviceId } }; + return {deviceId: {exact: rearCamera.deviceId}}; case "front": - return { deviceId: { exact: frontCamera.deviceId } }; + return {deviceId: {exact: frontCamera.deviceId}}; default: return undefined; } } else { switch (camera) { case "auto": - return { facingMode: { ideal: "environment" } }; + return {facingMode: {ideal: "environment"}}; case "rear": - return { facingMode: { exact: "environment" } }; + return {facingMode: {exact: "environment"}}; case "front": - return { facingMode: { exact: "user" } }; + return {facingMode: {exact: "user"}}; default: return undefined; } } }; -export default async function(videoEl, { camera, torch }) { +export default async function (videoEl, {camera, torch}) { // At least in Chrome `navigator.mediaDevices` is undefined when the page is // loaded using HTTP rather than HTTPS. Thus `STREAM_API_NOT_SUPPORTED` is // initialized with `false` although the API might actually be supported. @@ -90,8 +90,8 @@ export default async function(videoEl, { camera, torch }) { const constraints = { audio: false, video: { - width: { min: 360, ideal: 640, max: 1920 }, - height: { min: 240, ideal: 480, max: 1080 }, + width: {min: 360, ideal: 640, max: 1920}, + height: {min: 240, ideal: 480, max: 1080}, ...(await narrowDownFacingMode(camera)) } }; @@ -122,7 +122,7 @@ export default async function(videoEl, { camera, torch }) { const capabilities = track.getCapabilities(); if (capabilities.torch) { - track.applyConstraints({ advanced: [{ torch: true }] }); + track.applyConstraints({advanced: [{torch: true}]}); } else { console.warn("device does not support torch capability"); } diff --git a/src/main/resources/static/lib/vue-qrcode-reader/src/misc/scanner.js b/src/main/resources/static/lib/vue-qrcode-reader/src/misc/scanner.js index 49e99384..531e895e 100644 --- a/src/main/resources/static/lib/vue-qrcode-reader/src/misc/scanner.js +++ b/src/main/resources/static/lib/vue-qrcode-reader/src/misc/scanner.js @@ -1,9 +1,9 @@ -import { DropImageFetchError } from "./errors.js"; -import { eventOn } from "callforth"; +import {DropImageFetchError} from "./errors.js"; +import {eventOn} from "callforth"; const adaptOldFormat = detectedCodes => { if (detectedCodes.length > 0) { - const [ firstCode ] = detectedCodes; + const [firstCode] = detectedCodes; const [ topLeftCorner, @@ -41,20 +41,20 @@ const adaptOldFormat = detectedCodes => { * potentially pictured QR codes. */ export const keepScanning = (videoElement, options) => { - const barcodeDetector = new BarcodeDetector({ formats: ["qr_code"] }); + const barcodeDetector = new BarcodeDetector({formats: ["qr_code"]}); - const { detectHandler, locateHandler, minDelay } = options; + const {detectHandler, locateHandler, minDelay} = options; const processFrame = state => async timeNow => { if (videoElement.readyState > 1) { - const { lastScanned, contentBefore, locationBefore } = state + const {lastScanned, contentBefore, locationBefore} = state if (timeNow - lastScanned >= minDelay) { const detectedCodes = await barcodeDetector.detect(videoElement); - const { content, location, imageData } = adaptOldFormat(detectedCodes) + const {content, location, imageData} = adaptOldFormat(detectedCodes) if (content !== null && content !== contentBefore) { - detectHandler({ content, location, imageData }); + detectHandler({content, location, imageData}); } if (location !== null || locationBefore !== null) { @@ -93,14 +93,14 @@ const imageElementFromUrl = async url => { } export const processFile = async file => { - const barcodeDetector = new BarcodeDetector({ formats: ["qr_code"] }) + const barcodeDetector = new BarcodeDetector({formats: ["qr_code"]}) const detectedCodes = await barcodeDetector.detect(file) return adaptOldFormat(detectedCodes) } export const processUrl = async url => { - const barcodeDetector = new BarcodeDetector({ formats: ["qr_code"] }) + const barcodeDetector = new BarcodeDetector({formats: ["qr_code"]}) const image = await imageElementFromUrl(url); const detectedCodes = await barcodeDetector.detect(image) diff --git a/src/main/resources/static/lib/vue-qrcode-reader/src/misc/shimGetUserMedia.js b/src/main/resources/static/lib/vue-qrcode-reader/src/misc/shimGetUserMedia.js index c7f6a46c..9ad6be10 100644 --- a/src/main/resources/static/lib/vue-qrcode-reader/src/misc/shimGetUserMedia.js +++ b/src/main/resources/static/lib/vue-qrcode-reader/src/misc/shimGetUserMedia.js @@ -1,14 +1,14 @@ -import { shimGetUserMedia as chromeShim } from "webrtc-adapter/src/js/chrome/getusermedia"; -import { shimGetUserMedia as edgeShim } from "webrtc-adapter/src/js/edge/getusermedia"; -import { shimGetUserMedia as firefoxShim } from "webrtc-adapter/src/js/firefox/getusermedia"; -import { shimGetUserMedia as safariShim } from "webrtc-adapter/src/js/safari/safari_shim"; -import { detectBrowser } from "webrtc-adapter/src/js/utils"; +import {shimGetUserMedia as chromeShim} from "webrtc-adapter/src/js/chrome/getusermedia"; +import {shimGetUserMedia as edgeShim} from "webrtc-adapter/src/js/edge/getusermedia"; +import {shimGetUserMedia as firefoxShim} from "webrtc-adapter/src/js/firefox/getusermedia"; +import {shimGetUserMedia as safariShim} from "webrtc-adapter/src/js/safari/safari_shim"; +import {detectBrowser} from "webrtc-adapter/src/js/utils"; -import { StreamApiNotSupportedError } from "./errors"; -import { indempotent } from "./util"; +import {StreamApiNotSupportedError} from "./errors"; +import {indempotent} from "./util"; export default indempotent(() => { - const { browser } = detectBrowser(window); + const {browser} = detectBrowser(window); switch (browser) { case "chrome": diff --git a/src/main/resources/static/lib/vue-qrcode-reader/src/mixins/CommonAPI.vue b/src/main/resources/static/lib/vue-qrcode-reader/src/mixins/CommonAPI.vue index dab4ba56..ecf6cd97 100644 --- a/src/main/resources/static/lib/vue-qrcode-reader/src/mixins/CommonAPI.vue +++ b/src/main/resources/static/lib/vue-qrcode-reader/src/mixins/CommonAPI.vue @@ -1,27 +1,27 @@ diff --git a/src/main/resources/static/lib/vue-qrcode-reader/vue.config.js b/src/main/resources/static/lib/vue-qrcode-reader/vue.config.js index b1aa9051..7498767a 100644 --- a/src/main/resources/static/lib/vue-qrcode-reader/vue.config.js +++ b/src/main/resources/static/lib/vue-qrcode-reader/vue.config.js @@ -1,5 +1,5 @@ module.exports = { - css: { extract: false }, + css: {extract: false}, lintOnSave: false, diff --git a/src/main/resources/static/vuePage/index.vue b/src/main/resources/static/vuePage/index.vue index 7f2af119..78a8de12 100644 --- a/src/main/resources/static/vuePage/index.vue +++ b/src/main/resources/static/vuePage/index.vue @@ -2,7 +2,7 @@
          { this.$router.history.go(-1); }"> diff --git a/src/main/resources/static/vuePage/scanCode.vue b/src/main/resources/static/vuePage/scanCode.vue index e31a79ea..180f9e63 100644 --- a/src/main/resources/static/vuePage/scanCode.vue +++ b/src/main/resources/static/vuePage/scanCode.vue @@ -1,68 +1,68 @@ diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index 181cd330..c3e3f530 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -8,7 +8,6 @@ - @@ -140,6 +139,7 @@
          + diff --git a/src/main/resources/templates/index_back.html b/src/main/resources/templates/index_back.html index ae149725..3d073665 100644 --- a/src/main/resources/templates/index_back.html +++ b/src/main/resources/templates/index_back.html @@ -7,7 +7,6 @@ - diff --git a/src/main/resources/templates/pages/application/application-in.html b/src/main/resources/templates/pages/application/application-in.html index 08fed817..6953b4e2 100644 --- a/src/main/resources/templates/pages/application/application-in.html +++ b/src/main/resources/templates/pages/application/application-in.html @@ -59,6 +59,7 @@
          +
          diff --git a/src/main/resources/templates/pages/application/application-in_back.html b/src/main/resources/templates/pages/application/application-in_back.html index e53b3470..6c9966aa 100644 --- a/src/main/resources/templates/pages/application/application-in_back.html +++ b/src/main/resources/templates/pages/application/application-in_back.html @@ -80,6 +80,8 @@ lay-verify="required"/> +
          @@ -259,6 +261,8 @@ form.on('submit(formStep)', function (data) { data = data.field; data.type = 1; + var params = []; + data.params = params; $.ajax({ url: "/depositoryRecord/applicationIn", type: 'post', diff --git a/src/main/resources/templates/pages/application/application-out.html b/src/main/resources/templates/pages/application/application-out.html index b6d10058..a71bbadd 100644 --- a/src/main/resources/templates/pages/application/application-out.html +++ b/src/main/resources/templates/pages/application/application-out.html @@ -367,7 +367,7 @@ var req = {}; req.mname = data; $.ajax({ - url: "/material/findMaterialByCondition", + url: "/material/findInventoryByCondition", type: "post", dataType: 'json', data:JSON.stringify(req), diff --git a/src/main/resources/templates/pages/application/application-out_back.html b/src/main/resources/templates/pages/application/application-out_back.html index a58fb336..3b05394a 100644 --- a/src/main/resources/templates/pages/application/application-out_back.html +++ b/src/main/resources/templates/pages/application/application-out_back.html @@ -11,6 +11,19 @@ +
          @@ -22,14 +35,16 @@
          -
          - +
          +
          + + +
          + style="display: none" lay-verify="required"/>
          -
          @@ -164,7 +179,7 @@ var req = {}; req.mname = data; $.ajax({ - url: "/material/findMaterialByCondition", + url: "/material/findInventoryByCondition", type: "post", dataType: 'json', data:JSON.stringify(req), @@ -238,24 +253,24 @@ } }); }); + // 用于分步表单加载 step.render({ elem: '#stepForm', filter: 'stepForm', width: '100%', //设置容器宽度 - stepWidth: '750px', height: '600px', stepItems: [{ - title: '填写申请信息' - }, { - title: '审核中' + title: '填写信息' }, { - title: '等待出库' + title: '提交成功' }] }); form.on('submit(formStep)', function (data) { data=data.field; + var params = []; + data.params = params; $.ajax({ url:"/depositoryRecord/applicationOut", type:'post', diff --git a/src/main/resources/templates/pages/application/application-out_min-mobile.html b/src/main/resources/templates/pages/application/application-out_min-mobile.html index 08052e24..d56f2fb3 100644 --- a/src/main/resources/templates/pages/application/application-out_min-mobile.html +++ b/src/main/resources/templates/pages/application/application-out_min-mobile.html @@ -12,117 +12,117 @@ -
          -
          +
          -
          -
          + +
          + +
          + +
            +
            - diff --git a/src/main/resources/templates/pages/application/application-out_scanQrCode.html b/src/main/resources/templates/pages/application/application-out_scanQrCode.html index acc40b8a..1e7be332 100644 --- a/src/main/resources/templates/pages/application/application-out_scanQrCode.html +++ b/src/main/resources/templates/pages/application/application-out_scanQrCode.html @@ -546,7 +546,7 @@ var req = {}; req.mname = data; $.ajax({ - url: "/material/findMaterialByCondition", + url: "/material/findInventoryByCondition", type: "post", dataType: 'json', data:JSON.stringify(req), diff --git a/src/main/resources/templates/pages/application/application-transfer_back.html b/src/main/resources/templates/pages/application/application-transfer_back.html index b2a08d1d..40ec0e5d 100644 --- a/src/main/resources/templates/pages/application/application-transfer_back.html +++ b/src/main/resources/templates/pages/application/application-transfer_back.html @@ -134,7 +134,7 @@ filter: 'stepForm', width: '100%', //设置容器宽度 stepWidth: '750px', - height: '600px', + height: '100%', stepItems: [{ title: '填写申请信息' }, { @@ -193,7 +193,6 @@ contentType: "application/json;charset=utf-8", success:function(d){ $('#formId').val(d.data.id) - console.log(d.data) layui.use(['form'],function() { var form=layui.form; form.render(); diff --git a/src/main/resources/templates/pages/application/application_in_multi.html b/src/main/resources/templates/pages/application/application_in_multi.html index fe64fe79..7320aa31 100644 --- a/src/main/resources/templates/pages/application/application_in_multi.html +++ b/src/main/resources/templates/pages/application/application_in_multi.html @@ -147,7 +147,7 @@ filter: 'stepForm', width: '100%', //设置容器宽度 stepWidth: '750px', - height: '600px', + height: '100%', stepItems: [{ title: '填写信息' }, { diff --git a/src/main/resources/templates/pages/application/application_multi.html b/src/main/resources/templates/pages/application/application_multi.html index c0e7cc11..663f1e3f 100644 --- a/src/main/resources/templates/pages/application/application_multi.html +++ b/src/main/resources/templates/pages/application/application_multi.html @@ -119,7 +119,6 @@ } if(obj.event==='delete'){ - console.log(req) if(req.mids.length > 0) { layer.confirm('真的删除么', {icon: 2, title: '提示'}, function (index) { $.ajax({ diff --git a/src/main/resources/templates/pages/application/form-step-look.html b/src/main/resources/templates/pages/application/form-step-look.html index 98736548..fe96198e 100644 --- a/src/main/resources/templates/pages/application/form-step-look.html +++ b/src/main/resources/templates/pages/application/form-step-look.html @@ -81,11 +81,6 @@ \ No newline at end of file diff --git a/src/main/resources/templates/pages/application/form-step-look_back.html b/src/main/resources/templates/pages/application/form-step-look_back.html index 798f650c..bee3e410 100644 --- a/src/main/resources/templates/pages/application/form-step-look_back.html +++ b/src/main/resources/templates/pages/application/form-step-look_back.html @@ -30,14 +30,20 @@ 申请编号 123456 - + 物料名称 - 骁龙888芯片 + + + 仓库名称 外芯仓库 + + 处理人 + + 所处库位 0000 @@ -107,6 +113,7 @@ diff --git a/src/main/resources/templates/pages/application/form-step-look_minRecordOut.html b/src/main/resources/templates/pages/application/form-step-look_minRecordOut.html index fe96198e..e2019f5c 100644 --- a/src/main/resources/templates/pages/application/form-step-look_minRecordOut.html +++ b/src/main/resources/templates/pages/application/form-step-look_minRecordOut.html @@ -28,50 +28,40 @@ 申请编号 - 123456 + 123456 物料名称 - 骁龙888芯片 + 骁龙888芯片 存货编码 - 外芯仓库 - - - 计量单位 - 外芯仓库 + 外芯仓库 数量 - 409 + 409 金额 - 2016-11-28 + 2016-11-28 仓库名称 - 外芯仓库 - - - 提交人 - 2016-11-28 + 外芯仓库 - 提交时间 - 2016-11-28 + 库位编码 + 外芯仓库 - - 申请备注 - 2016-11-28 + 出库人员 + 2016-11-28
            -
            diff --git a/src/main/resources/templates/pages/application/my-apply_back.html b/src/main/resources/templates/pages/application/my-apply_back.html index b7da0c8d..cf905ca2 100644 --- a/src/main/resources/templates/pages/application/my-apply_back.html +++ b/src/main/resources/templates/pages/application/my-apply_back.html @@ -51,7 +51,6 @@ let result; $.get('/depositoryRecord/myApply?page='+page+'&size='+size, function(res){ result=res.data; - console.log(result) for (let i=0;i'); diff --git a/src/main/resources/templates/pages/application/my-task.html b/src/main/resources/templates/pages/application/my-task.html index 8b4e6885..485f7bb6 100644 --- a/src/main/resources/templates/pages/application/my-task.html +++ b/src/main/resources/templates/pages/application/my-task.html @@ -66,12 +66,18 @@ function openDetail2(data) { }; - //先声明 + //先声明(用于pc端跳转) function openDetail3(data) { }; - //先声明 + // 用于手机端跳转 + function openDetail3_mobile(data) { + }; + //先声明(用于pc端跳转) function openDetail4(data) { }; + // 用于手机端跳转 + function openDetail4_mobile(data) { + }; layui.use(['flow', 'layer', 'table', 'util'], function () { var $ = layui.jquery, layer = layui.layer, @@ -156,18 +162,23 @@ var Width = "25%"; result=res.data; const keys = Object.keys(result); // 获取map中所有的键 - + let redirectByIsMobile = ""; lis.push("
            "); + if(isMobile()){ + // 如果是移动端 + Width = "50%"; + redirectByIsMobile = "openDetail3_mobile("; + }else{ + redirectByIsMobile = "openDetail3("; + } for (let i = 0; i < keys.length; i++) { - if(isMobile()){ - Width = "50%"; - } - lis.push('
          • ' + + lis.push('
          • ' + + '
            ' + + '

            ' +result[keys[i]][0].depositoryName+'

            ') lis.push('
            ' +result[keys[i]][0].applicantTime+'
          • '); - } lis.push("

            ") @@ -190,14 +201,19 @@ var Width = "25%"; result=res.data; const keys = Object.keys(result); // 获取map中所有的键 - + var redirectByIsMobile = ""; lis.push("
            "); for (let i = 0; i < keys.length; i++) { if(isMobile()){ + // 如果是移动端 Width = "50%"; + redirectByIsMobile = "openDetail4_mobile("; + }else{ + redirectByIsMobile = "openDetail4("; } - lis.push('
          • ' + lis.push('
          • ' + + '
            ' + + '

            ' +result[keys[i]][0].depositoryName+'

            ') lis.push('
            ' +result[keys[i]][0].applicantTime+'
          • '); @@ -247,6 +263,7 @@ layer.full(index); }); }; + // 用于pc端跳转 openDetail3 = function (item) { var index = layer.open({ title: '请求详情', @@ -265,6 +282,25 @@ }); }; + // 用于移动端跳转 + openDetail3_mobile = function (item) { + var index = layer.open({ + title: '请求详情', + type: 2, + shade: 0.2, + maxmin: true, + shadeClose: true, + area: ['100%', '100%'], + content: '/ApplicationOutMinByDidForMobile?depositoryId='+item+"&state=0", + end:function () { + location.reload() + } + }); + $(window).on("resize", function () { + layer.full(index); + }); + }; + // 用于pc端跳转 openDetail4 = function (item) { var index = layer.open({ title: '请求详情', @@ -282,6 +318,24 @@ layer.full(index); }); }; + // 用于移动端跳转 + openDetail4_mobile = function (item) { + var index = layer.open({ + title: '请求详情', + type: 2, + shade: 0.2, + maxmin: true, + shadeClose: true, + area: ['100%', '100%'], + content: '/ApplicationOutMinByDidForMobile?depositoryId='+item+"&state=1", + end:function () { + location.reload() + } + }); + $(window).on("resize", function () { + layer.full(index); + }); + }; //定义一个函数判断是手机端还是pc端 function isMobile(){ diff --git a/src/main/resources/templates/pages/chart/chart-out_back.html b/src/main/resources/templates/pages/chart/chart-out_back.html index fc0984ff..d9cca625 100644 --- a/src/main/resources/templates/pages/chart/chart-out_back.html +++ b/src/main/resources/templates/pages/chart/chart-out_back.html @@ -47,8 +47,8 @@

            - 比昨天 ▲0.12
            - 比七日 ▼0.06 + +
          • @@ -65,8 +65,8 @@
            - 比昨天 ▲0.12
            - 比七日 ▼0.06 + +
            @@ -83,8 +83,8 @@
            - 比昨天 ▲0.12
            - 比七日 ▼0.06 + +
            @@ -101,8 +101,8 @@
            - 比昨天 ▲0.12
            - 比七日 ▼0.06 + +
            @@ -333,7 +333,6 @@ echartsDataset.setOption(optionDataset); echartsMap.setOption(optionMap); - console.log(result) // 折线图 var optionRecordsSeries = []; // 饼状图 @@ -389,7 +388,6 @@ optionMap.series.push({type: 'line', smooth: true, seriesLayoutBy: 'row'}) } - console.log(optionDataset) optionMap.series.push( { type: 'pie', diff --git a/src/main/resources/templates/pages/chart/chart-stock_back.html b/src/main/resources/templates/pages/chart/chart-stock_back.html index f41e1def..99f3e46d 100644 --- a/src/main/resources/templates/pages/chart/chart-stock_back.html +++ b/src/main/resources/templates/pages/chart/chart-stock_back.html @@ -245,14 +245,17 @@ layer.alert("系统繁忙,稍后重试"); } }, + beforeSend: function () { + this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']}); + }, success:function (result){ + layer.close(this.layerIndex); if(result.code == 0){ echartsRecords.setOption(optionRecords); echartsPies.setOption(optionPies); echartsDataset.setOption(optionDataset); echartsMap.setOption(optionMap); - console.log(result) // 折线图 var optionRecordsSeries=[]; // 饼状图 @@ -307,7 +310,7 @@ optionMap.series.push({type: 'line', smooth: true, seriesLayoutBy: 'row'}) } - optionMap.series.push( + /*optionMap.series.push( { type: 'pie', // id: 'pie', @@ -322,7 +325,7 @@ tooltip: '8月' } } - ) + )*/ @@ -384,19 +387,18 @@ series: optionPiesSeries }; echartsRecords.setOption(optionRecords); - console.log(optionRecords) echartsPies.setOption(optionPies); echartsDataset.setOption(optionDataset); echartsMap.setOption(optionMap); } } - }) + }); // echarts 窗口缩放自适应 window.onresize = function () { echartsRecords.resize(); - } + }; form.on('submit(thisWeek)', function () { @@ -411,7 +413,6 @@ } }, success:function (result){ - console.log(result) echartsRecords.setOption(optionRecords); // 折线图 var optionRecordsSeries=[]; diff --git a/src/main/resources/templates/pages/company/company-out.html b/src/main/resources/templates/pages/company/company-out.html index f49d8cdc..a20aba7a 100644 --- a/src/main/resources/templates/pages/company/company-out.html +++ b/src/main/resources/templates/pages/company/company-out.html @@ -149,7 +149,6 @@ table.on('tool(currentTableFilter)', function (obj) { let data = obj.data; - console.log(data) if (obj.event === 'detail') { var index = layer.open({ title: '公司详情', diff --git a/src/main/resources/templates/pages/company/company-out_back.html b/src/main/resources/templates/pages/company/company-out_back.html index e2428cf2..c440bdee 100644 --- a/src/main/resources/templates/pages/company/company-out_back.html +++ b/src/main/resources/templates/pages/company/company-out_back.html @@ -208,7 +208,6 @@ table.on('tool(currentTableFilter)', function (obj) { let data = obj.data; - console.log(data) if (obj.event === 'detail') { var index = layer.open({ title: '公司详情', @@ -317,7 +316,6 @@ req["state"] = 1 } req["id"] = this.value - console.log(req) var hasMaterial = false $.ajax({ url: "/company/EditCompanyState", diff --git a/src/main/resources/templates/pages/company/companyByParentId.html b/src/main/resources/templates/pages/company/companyByParentId.html index bd5fa32a..f1ced438 100644 --- a/src/main/resources/templates/pages/company/companyByParentId.html +++ b/src/main/resources/templates/pages/company/companyByParentId.html @@ -151,7 +151,6 @@ table.on('tool(currentTableFilter)', function (obj) { let data = obj.data; - console.log(data) if (obj.event === 'detail') { var index = layer.open({ title: '公司详情', diff --git a/src/main/resources/templates/pages/depository/table-stock.html b/src/main/resources/templates/pages/depository/table-stock.html index a8f1556e..b4a63a9c 100644 --- a/src/main/resources/templates/pages/depository/table-stock.html +++ b/src/main/resources/templates/pages/depository/table-stock.html @@ -271,7 +271,7 @@ maxmin: true, shadeClose: true, area: ['100%', '100%'], - content: '/application_out_back?code='+data.code+"&depositoryCode="+data.depositoryCode + content: '/application_out_back?code='+data.code+"&depositoryId="+data.depositoryId }); $(window).on("resize", function () { layer.full(index); @@ -296,7 +296,6 @@ //如果上传成功 if(res.code == 200){ var re = ""; - console.log(res) for (let i = 0; i < res.data.errMsg.length; i++) { var show = "

            "+res.data.errMsg[i] + ":错误"+"

            " re += show diff --git a/src/main/resources/templates/pages/material/material-out.html b/src/main/resources/templates/pages/material/material-out.html index 55a954d4..fd9030ec 100644 --- a/src/main/resources/templates/pages/material/material-out.html +++ b/src/main/resources/templates/pages/material/material-out.html @@ -495,7 +495,6 @@ req["state"] = 1 } req["id"] = this.value - console.log(JSON.stringify(req)) $.ajax({ url: "/material/material_edit", type: 'post', diff --git a/src/main/resources/templates/pages/material/material-out_back.html b/src/main/resources/templates/pages/material/material-out_back.html index ae4c67a3..7a7446a3 100644 --- a/src/main/resources/templates/pages/material/material-out_back.html +++ b/src/main/resources/templates/pages/material/material-out_back.html @@ -310,7 +310,6 @@ exts:'xls|xlsx|csv', done:function(res){ //如果上传成功 - console.log(res) if(res.code == 200){ var re = "" for (let i = 0; i < res.data.dataList.length; i++) { @@ -461,7 +460,6 @@ req["state"] = 1 } req["id"] = this.value - console.log(JSON.stringify(req)) $.ajax({ url: "/material/material_edit", type: 'post', diff --git a/src/main/resources/templates/pages/material/selectDepository.html b/src/main/resources/templates/pages/material/selectDepository.html index 61625a62..d840f4b0 100644 --- a/src/main/resources/templates/pages/material/selectDepository.html +++ b/src/main/resources/templates/pages/material/selectDepository.html @@ -26,8 +26,35 @@ ,data: [] ,onlyIconControl: true //是否仅允许节点左侧图标控制展开收缩 ,click: function(obj){ - $("#openSonByDepository",window.parent.document).val(obj.data.title) - $("#depositoryId",window.parent.document).val(obj.data.id) + var data = obj.data; + if(data.id === -1 ){ + return false; + } + // 用于判断是库位还是仓库 + var flag = false; + var dataId = data.id; + if(typeof dataId === "string"){ + flag = true; + } + if(!flag) { + $("#openSonByDepository",window.parent.document).val(obj.data.title); + $("#depositoryId",window.parent.document).val(obj.data.id); + $("#placeId",window.parent.document).val(0); + }else{ + var did = dataId.split("-"); + $.ajax({ + url: "/repository/findDepositoryByDid?depositoryId=0" + did[0], + type: 'get', + dataType: 'json', + contentType: "application/json;charset=utf-8", + success:function (d) { + $("#openSonByDepository",window.parent.document).val(d.data.dname +"-"+ obj.data.title); + } + }); + $("#depositoryId",window.parent.document).val(did[0]); + $("#placeId",window.parent.document).val(did[1]); + } + var index = parent.layer.getFrameIndex(window.name); parent.layer.close(index); } @@ -39,7 +66,6 @@ contentType: "application/json;charset=utf-8", success: function (d) { var data2 = d.data; - console.log(data2) test.reload({ data:data2 }); diff --git a/src/main/resources/templates/pages/materialtype/materialType_view.html b/src/main/resources/templates/pages/materialtype/materialType_view.html index 1a881e1f..f9e9b3a4 100644 --- a/src/main/resources/templates/pages/materialtype/materialType_view.html +++ b/src/main/resources/templates/pages/materialtype/materialType_view.html @@ -114,7 +114,7 @@ {field: 'tname', width: 120, title: '类型名称'}, {field: 'introduce',width: 200,title: '类型介绍'}, {field:'state', title:'状态', minWidth: 80, templet: '#switchTpl'}, - {title: '操作', minWidth: 150, toolbar: '#currentTableBar', align: "center"} + {title: '操作', minWidth: 200, toolbar: '#currentTableBar', align: "center"} ]], limits: [10, 15, 20, 25, 50], limit: 10, @@ -224,7 +224,6 @@ exts:'xls|xlsx|csv', done:function(res){ //如果上传成功 - console.log(res.data.dataList[0]["parentId"] == null) if(res.code == 200){ var re = ""; for (let i = 0; i < res.data.errMsg.length; i++) { @@ -449,7 +448,6 @@ contentType: "application/json;charset=utf-8", success: function (data) { hasMaterial = data.data - console.log(hasMaterial) if(hasMaterial){ // 如果有物品 layer.confirm('该种类下还有物品,确定禁用?', { btn: ['禁用','取消'] //按钮 diff --git a/src/main/resources/templates/pages/post/post-out.html b/src/main/resources/templates/pages/post/post-out.html index b4a0a1f0..fa9983e7 100644 --- a/src/main/resources/templates/pages/post/post-out.html +++ b/src/main/resources/templates/pages/post/post-out.html @@ -162,7 +162,6 @@ table.on('tool(currentTableFilter)', function (obj) { let data = obj.data; - console.log(data) if (obj.event === 'detail') { var index = layer.open({ title: '岗位详情', diff --git a/src/main/resources/templates/pages/scanQrCode/ScanQrCode.html b/src/main/resources/templates/pages/scanQrCode/ScanQrCode.html index a84fb36d..84edcda6 100644 --- a/src/main/resources/templates/pages/scanQrCode/ScanQrCode.html +++ b/src/main/resources/templates/pages/scanQrCode/ScanQrCode.html @@ -80,99 +80,109 @@ onDecode(result) { let params = {}; // 用于暂存扫描结果 this.result = result; - let parse = JSON.parse(result); - vue.turnCameraOff(); // 暂停扫描 - if (parse.did !== undefined) { - // 如果扫描的是仓库二维码 - this.depository = parse;// 将扫描结果保存到vue中 - params.depository = this.depository; - params.place = this.place; - params.materialList = this.materialList; - if (this.materialList.length > 0) { - // 如果有物料 - this.temporaryScanValue(params); // 将数据暂存至redis中 - this.chooseInOrOut(); // 弹出选择框 - } else { - // 如果没有 - layer.confirm("暂未选择物料,是否继续扫描", { - btn:["继续","取消"] - },function () { // 继续 - vue.turnCameraOn(); // 继续扫描 - layer.close(layer.index); // 关闭弹窗 - },function () { // 取消 - vue.temporaryScanValue(params); // 将数据暂存 - vue.chooseInOrOut(); // 弹出选择框 - }) - } - } - else if (parse.pid !== undefined) { - // 如果扫描的是库位二维码 - this.place = parse; // 将扫描结果保存到vue中 - params.depository = this.depository; - params.place = this.place; - params.materialList = this.materialList; - if (this.materialList.length > 0) { - // 如果有物料 - this.temporaryScanValue(params); // 将数据暂存至redis中 - this.chooseInOrOut(); // 弹出选择框 - } else { - // 如果没有 - layer.confirm("当前并未扫描物料,是否继续扫描", - {btn:["继续","取消"]}, - function () { // 继续扫描 - vue.turnCameraOn(); // 继续扫描 - layer.close(layer.index); // 关闭弹窗 - }, - function () { - vue.temporaryScanValue(params); // 将数据暂存 + let jmResult = {}; + jmResult.result = result; + layui.$.ajax({ + url: "/material/decode3Des", + type: 'post', + dataType: 'json', + contentType: "application/json;charset=utf-8", + data: JSON.stringify(jmResult), + success:function (d) { + let parse = JSON.parse(d.data); + vue.turnCameraOff(); // 暂停扫描 + if (parse.did !== undefined) { + // 如果扫描的是仓库二维码 + vue.depository = parse;// 将扫描结果保存到vue中 + params.depository = vue.depository; + params.place = vue.place; + params.materialList = vue.materialList; + if (vue.materialList.length > 0) { + // 如果有物料 + vue.temporaryScanValue(params); // 将数据暂存至redis中 vue.chooseInOrOut(); // 弹出选择框 + } else { + // 如果没有 + layer.confirm("暂未选择物料,是否继续扫描", { + btn:["继续","取消"] + },function () { // 继续 + vue.turnCameraOn(); // 继续扫描 + layer.close(layer.index); // 关闭弹窗 + },function () { // 取消 + vue.temporaryScanValue(params); // 将数据暂存 + vue.chooseInOrOut(); // 弹出选择框 + }) } - ) - } - } - else if (parse.mid !== undefined) { - // 如果扫描的是物料二维码 - this.materialList.push(parse); - layer.confirm("是否继续扫描", - { - btn: ["继续", "取消"] - }, - function () { // 继续扫描物料 - vue.turnCameraOn(); // 继续扫描 - layer.close(layer.index); // 关闭弹窗 - }, - function () { - // 不扫描物料 - params.materialList = vue.materialList; + } + else if (parse.pid !== undefined) { + // 如果扫描的是库位二维码 + vue.place = parse; // 将扫描结果保存到vue中 params.depository = vue.depository; params.place = vue.place; - vue.temporaryScanValue(params); // 将物料暂存 - console.log(vue.place) - console.log(vue.depository) - if ( vue.depository !== null || vue.place !== null) { - // 如果已经扫描了仓库或库位 - // 弹出选择框 - vue.chooseInOrOut(); - } - else { - // 如果没有扫描仓库或库位 - layer.confirm("暂未扫描仓库,是否继续该操作", - { - btn: ["继续", "取消"] - }, - function () {// 继续 - // 弹出选择框 - vue.chooseInOrOut(); - }, - function () { // 取消当前操作 + params.materialList = vue.materialList; + if (vue.materialList.length > 0) { + // 如果有物料 + vue.temporaryScanValue(params); // 将数据暂存至redis中 + vue.chooseInOrOut(); // 弹出选择框 + } else { + // 如果没有 + layer.confirm("当前并未扫描物料,是否继续扫描", + {btn:["继续","取消"]}, + function () { // 继续扫描 vue.turnCameraOn(); // 继续扫描 layer.close(layer.index); // 关闭弹窗 + }, + function () { + vue.temporaryScanValue(params); // 将数据暂存 + vue.chooseInOrOut(); // 弹出选择框 } ) } } - ) - } + else if (parse.mid !== undefined) { + // 如果扫描的是物料二维码 + vue.materialList.push(parse); + layer.confirm("是否继续扫描", + { + btn: ["继续", "取消"] + }, + function () { // 继续扫描物料 + vue.turnCameraOn(); // 继续扫描 + layer.close(layer.index); // 关闭弹窗 + }, + function () { + // 不扫描物料 + params.materialList = vue.materialList; + params.depository = vue.depository; + params.place = vue.place; + vue.temporaryScanValue(params); // 将物料暂存 + if ( vue.depository !== null || vue.place !== null) { + // 如果已经扫描了仓库或库位 + // 弹出选择框 + vue.chooseInOrOut(); + } + else { + // 如果没有扫描仓库或库位 + layer.confirm("暂未扫描仓库,是否继续该操作", + { + btn: ["继续", "取消"] + }, + function () {// 继续 + // 弹出选择框 + vue.chooseInOrOut(); + }, + function () { // 取消当前操作 + vue.turnCameraOn(); // 继续扫描 + layer.close(layer.index); // 关闭弹窗 + } + ) + } + } + ) + } + } + }); + }, /*layer.confirm("请选择入库|出库",{ btn:["入库","出库"]}, diff --git a/src/main/resources/templates/pages/scanQrCode/scanQrCodeOut.html b/src/main/resources/templates/pages/scanQrCode/scanQrCodeOut.html index 8208f199..95fa7747 100644 --- a/src/main/resources/templates/pages/scanQrCode/scanQrCodeOut.html +++ b/src/main/resources/templates/pages/scanQrCode/scanQrCodeOut.html @@ -87,141 +87,154 @@ onDecode(result) { let params = {}; // 用于暂存扫描结果 this.result = result; - let parse = JSON.parse(result); - vue.turnCameraOff(); // 暂停扫描 - if (parse.did !== undefined) { - //如果扫描的为仓库 - this.depository = parse;// 将扫描结果保存到vue中 - if(this.material == null){ - // 如果还没有扫描物料 - layer.confirm("请扫描物料", { - btn:["扫描","取消"] - },function () { // 继续 - vue.turnCameraOn(); // 继续扫描 - layer.close(layer.index); // 关闭弹窗 - },function () { // 取消 - // 将vue中暂存的数据置为空 - this.depository = null; - this.place = null; - this.material = null; - }) - } - else{ - // 如果已经扫描物料 - if(depositoryId !== parse.did && Number(depositoryId) !== parse.did && depositoryId !== parse.did.toString()){ - // 如果当前仓库不是订单对应仓库 - this.depository = null; - this.place = null; - layer.msg("出库仓库不正确,请重新扫描"); - this.turnCameraOn() - }else{ - var req = {}; - req.id = id; - vue.isOutTrue(req); - } - } - } - else if (parse.pid !== undefined){ - // 如果扫描的为库位 - this.place = parse;// 将扫描结果保存到vue中 - if(this.material == null){ - // 如果还没有扫描物料 - layer.confirm("请扫描物料", { - btn:["扫描","取消"] - },function () { // 继续 - vue.turnCameraOn(); // 继续扫描 - layer.close(layer.index); // 关闭弹窗 - },function () { // 取消 - // 将vue中暂存的库位置为空 - this.place = null; - }) - }else{ - if(depositoryId !== parse.depositoryId && Number(depositoryId) !== parse.depositoryId && depositoryId !== parse.depositoryId.toString()){ - // 如果当前仓库不是订单对应仓库 - this.depository = null; - this.place = null; - layer.msg("出库库位所在仓库不正确,请重新扫描"); - this.turnCameraOn() - }else if(parse.mcodeList.indexOf(mcode) === -1){ - // 如果当前库位不存在该物料 - this.depository = null; - this.place = null; - layer.msg("出库库位不含该物料,请重新扫描"); - this.turnCameraOn() - } - else{ - var req = {}; - req.placeId= this.place.pid; - req.id = id; - vue.isOutTrue(req); - } - - } - } - else if (parse.mid !== undefined){ - // 如果扫描的为物料 - this.material = parse;// 将扫描结果保存到vue中 - if(mcode !== this.material.code && Number(mcode) !== this.material.code && mcode !== this.material.code.toString()){ - this.material = null; - layer.msg("出库物料不正确,请重新扫描"); - this.turnCameraOn() - } - else { - if (this.depository !== null) { // 如果已经扫描仓库 - let depository = this.depository; - if (depositoryId !== depository.did && Number(depositoryId) !== depository.did && depositoryId !== depository.did.toString()) { - // 如果扫描的仓库不是订单要求的仓库 - layer.confirm("当前仓库不符合要求,请移步至正确仓库", { - btn: ["确定"] - }, function () { - // 将vue中仓库设为空 + let jmResult = {}; + jmResult.result = result; + layui.$.ajax({ + url: "/material/decode3Des", + type: 'post', + dataType: 'json', + contentType: "application/json;charset=utf-8", + data: JSON.stringify(jmResult), + success:function (d) { + let parse = JSON.parse(d.data); + vue.turnCameraOff(); // 暂停扫描 + if (parse.did !== undefined) { + //如果扫描的为仓库 + vue.depository = parse;// 将扫描结果保存到vue中 + if(vue.material == null){ + // 如果还没有扫描物料 + layer.confirm("请扫描物料", { + btn:["扫描","取消"] + },function () { // 继续 + vue.turnCameraOn(); // 继续扫描 + layer.close(layer.index); // 关闭弹窗 + },function () { // 取消 + // 将vue中暂存的数据置为空 + vue.depository = null; + vue.place = null; + vue.material = null; + }) + } + else{ + // 如果已经扫描物料 + if(depositoryId !== parse.did && Number(depositoryId) !== parse.did && depositoryId !== parse.did.toString()){ + // 如果当前仓库不是订单对应仓库 vue.depository = null; + vue.place = null; + layer.msg("出库仓库不正确,请重新扫描"); + vue.turnCameraOn() + }else{ + var req = {}; + req.id = id; + vue.isOutTrue(req); + } + } + } + else if (parse.pid !== undefined){ + // 如果扫描的为库位 + vue.place = parse;// 将扫描结果保存到vue中 + if(vue.material == null){ + // 如果还没有扫描物料 + layer.confirm("请扫描物料", { + btn:["扫描","取消"] + },function () { // 继续 + vue.turnCameraOn(); // 继续扫描 layer.close(layer.index); // 关闭弹窗 + },function () { // 取消 + // 将vue中暂存的库位置为空 + vue.place = null; }) - } else { - // 如果是出库位置为默认库位 - var req = {}; - req.id = id; - // 弹出确定框 - vue.isOutTrue(req); + }else{ + if(depositoryId !== parse.depositoryId && Number(depositoryId) !== parse.depositoryId && depositoryId !== parse.depositoryId.toString()){ + // 如果当前仓库不是订单对应仓库 + vue.depository = null; + vue.place = null; + layer.msg("出库库位所在仓库不正确,请重新扫描"); + vue.turnCameraOn() + }else if(parse.mcodeList.indexOf(mcode) === -1){ + // 如果当前库位不存在该物料 + vue.depository = null; + vue.place = null; + layer.msg("出库库位不含该物料,请重新扫描"); + vue.turnCameraOn() + } + else{ + var req = {}; + req.placeId= vue.place.pid; + req.id = id; + vue.isOutTrue(req); + } + } } - else if(this.place != null){ - // 如果已经扫描库位 - if(depositoryId !== this.place.depositoryId && Number(depositoryId) !== this.place.depositoryId && depositoryId !== this.place.depositoryId.toString()){ - // 如果当前仓库不是订单对应仓库 - this.depository = null; - this.place = null; - layer.msg("出库库位所在仓库不正确,请重新扫描"); - this.turnCameraOn() - }else if(this.place.mcodeList.indexOf(mcode) === -1){ - // 如果当前库位不存在该物料 - this.depository = null; - this.place = null; - layer.msg("出库库位不含该物料,请重新扫描"); - this.turnCameraOn() + else if (parse.mid !== undefined){ + // 如果扫描的为物料 + vue.material = parse;// 将扫描结果保存到vue中 + if(mcode !== vue.material.code && Number(mcode) !== vue.material.code && mcode !== vue.material.code.toString()){ + vue.material = null; + layer.msg("出库物料不正确,请重新扫描"); + vue.turnCameraOn() } - else{ - var req = {}; - req.id = id; - req.placeId= this.place.pid; - // 弹出确定框 - vue.isOutTrue(req); + else { + if (vue.depository !== null) { // 如果已经扫描仓库 + let depository = vue.depository; + if (depositoryId !== depository.did && Number(depositoryId) !== depository.did && depositoryId !== depository.did.toString()) { + // 如果扫描的仓库不是订单要求的仓库 + layer.confirm("当前仓库不符合要求,请移步至正确仓库", { + btn: ["确定"] + }, function () { + // 将vue中仓库设为空 + vue.depository = null; + layer.close(layer.index); // 关闭弹窗 + }) + } else { + // 如果是出库位置为默认库位 + var req = {}; + req.id = id; + // 弹出确定框 + vue.isOutTrue(req); + } + } + else if(vue.place != null){ + // 如果已经扫描库位 + if(depositoryId !== vue.place.depositoryId && Number(depositoryId) !== vue.place.depositoryId && depositoryId !== vue.place.depositoryId.toString()){ + // 如果当前仓库不是订单对应仓库 + vue.depository = null; + vue.place = null; + layer.msg("出库库位所在仓库不正确,请重新扫描"); + vue.turnCameraOn() + }else if(vue.place.mcodeList.indexOf(mcode) === -1){ + // 如果当前库位不存在该物料 + vue.depository = null; + vue.place = null; + layer.msg("出库库位不含该物料,请重新扫描"); + vue.turnCameraOn() + } + else{ + var req = {}; + req.id = id; + req.placeId= vue.place.pid; + // 弹出确定框 + vue.isOutTrue(req); + } + } + else { + layer.confirm("请扫描仓库或库位", { + btn: ["扫描", "取消"] + }, function () { // 继续 + vue.turnCameraOn(); // 继续扫描 + layer.close(layer.index); // 关闭弹窗 + }, function () { // 取消 + // 将vue中暂存的库位置为空 + vue.material = null; + }) + } } } - else { - layer.confirm("请扫描仓库或库位", { - btn: ["扫描", "取消"] - }, function () { // 继续 - vue.turnCameraOn(); // 继续扫描 - layer.close(layer.index); // 关闭弹窗 - }, function () { // 取消 - // 将vue中暂存的库位置为空 - this.material = null; - }) - } } - } + }); + + }, async onInit(promise) { try { diff --git a/src/main/resources/templates/pages/user/login.html b/src/main/resources/templates/pages/user/login.html index aee92250..036f958f 100644 --- a/src/main/resources/templates/pages/user/login.html +++ b/src/main/resources/templates/pages/user/login.html @@ -4,7 +4,6 @@ 后台管理-登陆 - @@ -37,6 +36,7 @@