All checks were successful
ci/woodpecker/push/check_format Pipeline was successful
12033 lines
488 KiB
JavaScript
12033 lines
488 KiB
JavaScript
import { defineComponent, watch, ref, useCssVars, computed, getCurrentScope, onScopeDispose, unref, provide, onMounted, createBlock, withCtx, axios, nextTick, openBlock, createBaseVNode, createVNode, createTextVNode, createElementBlock, createCommentVNode, Fragment, renderList, toDisplayString, __unplugin_components_4 as __unplugin_components_4$1, __unplugin_components_0 as __unplugin_components_0$1 } from "./index.js";
|
|
import { __unplugin_components_2 } from "./Flex.js";
|
|
import { __unplugin_components_0, __unplugin_components_1 } from "./Checkbox.js";
|
|
import { __unplugin_components_5 } from "./Table.js";
|
|
import { __unplugin_components_7 } from "./Avatar.js";
|
|
import { __unplugin_components_4 } from "./Tag.js";
|
|
import "./get-slot.js";
|
|
import "./use-locale.js";
|
|
import "./utils.js";
|
|
const ba_sluggish = { "termId": "ba.sluggish", "termName": "停顿", "description": "移动速度降低80%", "buffer": [] };
|
|
const ba_root = { "termId": "ba.root", "termName": "束缚", "description": "无法移动", "buffer": [] };
|
|
const ba_stun = { "termId": "ba.stun", "termName": "晕眩", "description": "无法移动、阻挡、攻击及使用技能", "buffer": [] };
|
|
const ba_buffres = { "termId": "ba.buffres", "termName": "抵抗", "description": "<$ba.stun>晕眩</>、<$ba.cold>寒冷</>、<$ba.frozen>冻结</>等异常状态的持续时间减半,<$ba.palsy>麻痹</>等效果每5秒流失1层(同名效果不叠加)", "buffer": [] };
|
|
const ba_invisible = { "termId": "ba.invisible", "termName": "隐匿", "description": "不阻挡时不成为敌方攻击的目标", "buffer": [] };
|
|
const ba_camou = { "termId": "ba.camou", "termName": "迷彩", "description": "不阻挡时不成为敌方普通攻击的目标(无法躲避溅射类攻击)", "buffer": [] };
|
|
const ba_fragile = { "termId": "ba.fragile", "termName": "脆弱", "description": "受到的物理、法术、真实伤害提升相应比例(同名效果取最高)", "buffer": [] };
|
|
const ba_shield = { "termId": "ba.shield", "termName": "护盾", "description": "每层护盾可以抵挡一次伤害", "buffer": [] };
|
|
const ba_protect = { "termId": "ba.protect", "termName": "庇护", "description": "受到的物理和法术伤害降低相应比例(同名效果取最高)", "buffer": [] };
|
|
const ba_cold = { "termId": "ba.cold", "termName": "寒冷", "description": "攻击速度下降30,如果在持续时间内再次受到寒冷效果则会变为<$ba.frozen>冻结</>", "buffer": [] };
|
|
const ba_frozen = { "termId": "ba.frozen", "termName": "冻结", "description": "无法移动、攻击及使用技能(通过<$ba.cold>寒冷</>触发);敌方被冻结时,法术抗性-15", "buffer": [] };
|
|
const ba_sleep = { "termId": "ba.sleep", "termName": "沉睡", "description": "无敌且无法行动", "buffer": [] };
|
|
const ba_inspire = { "termId": "ba.inspire", "termName": "鼓舞", "description": "获得额外附加的基础属性加成(同类属性取最高)", "buffer": [] };
|
|
const ba_binding = { "termId": "ba.binding", "termName": "绑定", "description": "绑定对象不在场时技能强制结束,清空所有技力且无法回复技力", "buffer": [] };
|
|
const ba_dt_neural = { "termId": "ba.dt.neural", "termName": "神经损伤", "description": "神经损伤累计至1000时,受到1000点真实伤害并<$ba.stun>晕眩</>10秒", "buffer": [] };
|
|
const ba_charged = { "termId": "ba.charged", "termName": "蓄力", "description": "技力达到上限可继续回复,回复至上限2倍时进入蓄力状态,此时开启技能会触发额外效果(任何时候开启均消耗全部技力)", "buffer": [] };
|
|
const ba_strong = { "termId": "ba.strong", "termName": "精力充沛", "description": "生命值高于一定比例时攻击力加成提升相应比例(同名效果攻击力加成取最高)", "buffer": [] };
|
|
const ba_dt_erosion = { "termId": "ba.dt.erosion", "termName": "侵蚀损伤", "description": "侵蚀损伤累计至1000时,永久降低100点防御力并受到800点物理伤害", "buffer": [] };
|
|
const ba_dt_burning = { "termId": "ba.dt.burning", "termName": "灼燃损伤", "description": "灼燃损伤累计至1000时,10秒内降低20法术抗性并受到1200点法术伤害", "buffer": [] };
|
|
const ba_float = { "termId": "ba.float", "termName": "近地悬浮", "description": "无法被阻挡或近战攻击", "buffer": [] };
|
|
const ba_refraction = { "termId": "ba.refraction", "termName": "折射", "description": "生效时,法术抗性+70", "buffer": [] };
|
|
const ba_dt_element = { "termId": "ba.dt.element", "termName": "元素损伤", "description": "包括<$ba.dt.neural>神经损伤</>、<$ba.dt.erosion>侵蚀损伤</>、<$ba.dt.burning>灼燃损伤</>、<$ba.dt.apoptosis>凋亡损伤</>", "buffer": [] };
|
|
const ba_overdrive = { "termId": "ba.overdrive", "termName": "过载", "description": "技能持续拥有两段计量槽,技能进行到一半时触发额外效果", "buffer": [] };
|
|
const ba_dt_apoptosis = { "termId": "ba.dt.apoptosis", "termName": "凋亡损伤", "description": "凋亡损伤累计至1000时,15秒内无法开启技能,每秒损失1点技力并受到100点法术伤害", "buffer": [] };
|
|
const ba_debuff = { "termId": "ba.debuff", "termName": "异常状态", "description": "包括<$ba.stun>晕眩</>、<$ba.cold>寒冷</>、<$ba.frozen>冻结</>等", "buffer": [] };
|
|
const ba_levitate = { "termId": "ba.levitate", "termName": "浮空", "description": "变为空中单位,无法移动、攻击及使用技能;对重量大于3的单位持续时间减半", "buffer": [] };
|
|
const ba_physhield = { "termId": "ba.physhield", "termName": "物理护盾", "description": "每层物理护盾可以抵挡一次物理伤害", "buffer": [] };
|
|
const ba_magicfragile = { "termId": "ba.magicfragile", "termName": "法术脆弱", "description": "受到的法术伤害提升相应比例(同名效果取最高)", "buffer": [] };
|
|
const ba_elementfragile = { "termId": "ba.elementfragile", "termName": "元素脆弱", "description": "受到的元素伤害提升相应比例(同名效果取最高)", "buffer": [] };
|
|
const ba_dying = { "termId": "ba.dying", "termName": "重伤", "description": "移速下降且无法被阻挡,10秒后自然死亡,被击杀后使击杀者回复数点技力", "buffer": [] };
|
|
const ba_barrier = { "termId": "ba.barrier", "termName": "屏障", "description": "可以吸收一定数值的伤害", "buffer": [] };
|
|
const ba_weightless = { "termId": "ba.weightless", "termName": "失重", "description": "重量下降一个等级(同名效果不可叠加)", "buffer": [] };
|
|
const ba_berserk = { "termId": "ba.berserk", "termName": "坚忍", "description": "根据已损失的生命值获得相应比例的属性加成,损失一定比例时达最大加成(同类属性取最高)", "buffer": [] };
|
|
const ba_steal = { "termId": "ba.steal", "termName": "偷取", "description": "减少目标的基础属性作为自身加成,目标减少和自身加成的属性不超过指定上限(同类属性取最高)", "buffer": [] };
|
|
const ba_weaken = { "termId": "ba.weaken", "termName": "虚弱", "description": "使目标攻击力降低相应比例(同名效果取最高)", "buffer": [] };
|
|
const ba_dt_apoptosis2 = { "termId": "ba.dt.apoptosis2", "termName": "凋亡损伤·我方", "description": "累计满时爆发(普通、精英敌人1000点、领袖2000点累计值),使敌人附加50%<$ba.weaken>虚弱</>但期间逐渐恢复,每秒受到800点元素伤害。15秒冷却", "buffer": [] };
|
|
const ba_epbarrier = { "termId": "ba.epbarrier", "termName": "损伤屏障", "description": "可以吸收一定数值的<$ba.dt.element>元素损伤</>", "buffer": [] };
|
|
const ba_tremble = { "termId": "ba.tremble", "termName": "战栗", "description": "被阻挡后无法进行普通攻击", "buffer": [] };
|
|
const ba_fear = { "termId": "ba.fear", "termName": "恐惧", "description": "无法被阻挡并四散逃跑", "buffer": [] };
|
|
const ba_dt_burning2 = { "termId": "ba.dt.burning2", "termName": "灼燃损伤·我方", "description": "累计满时爆发(普通、精英敌人1000点、领袖2000点累计值),敌人立即受到7000点元素伤害且期间法术抗性-20。10秒冷却", "buffer": [] };
|
|
const ba_addash = { "termId": "ba.addash", "termName": "移动", "description": "不退场,以当前血量在目标位置部署", "buffer": [] };
|
|
const ba_magicpoint = { "termId": "ba.magicpoint", "termName": "魔力", "description": "特殊技力,整场战斗继承", "buffer": [] };
|
|
const ba_chant = { "termId": "ba.chant", "termName": "吟唱", "description": "停止攻击一段时间后尝试开启技能,期间被打断则中止", "buffer": [] };
|
|
const ba_laiosteam = { "termId": "ba.laiosteam", "termName": "莱欧斯小队", "description": "包括玛露西尔、森西、莱欧斯、齐尔查克", "buffer": [] };
|
|
const ba_liftoff = { "termId": "ba.liftoff", "termName": "起飞", "description": "不阻挡地面敌人且不会被地面敌人攻击,可以阻挡飞行敌人", "buffer": [] };
|
|
const ba_physicfragile = { "termId": "ba.physicfragile", "termName": "物理脆弱", "description": "受到的物理伤害提升相应比例(同名效果取最高)", "buffer": [] };
|
|
const ba_dt_neural2 = { "termId": "ba.dt.neural2", "termName": "神经损伤·我方", "description": "累计满时爆发(普通、精英敌人1000点、领袖2000点累计值),敌人立即受到6000点元素伤害且获得3层<$ba.palsy>麻痹</>。10秒冷却", "buffer": [] };
|
|
const ba_palsy = { "termId": "ba.palsy", "termName": "麻痹", "description": "每层麻痹可以使敌人在普通攻击时打断本次攻击,上限3层;麻痹未被消耗时持续时间无限,拥有抵抗的单位每5秒流失1层", "buffer": [] };
|
|
const ba_addbullet = { "termId": "ba.addbullet", "termName": "补弹", "description": "为其他人的弹药类技能补充弹药。单次弹药类技能的持续时间内,最多被补充该次技能所装有弹药数量上限的弹药", "buffer": [] };
|
|
const ba_attract = { "termId": "ba.attract", "termName": "诱导", "description": "无法被阻挡并向目标位置移动", "buffer": [] };
|
|
const cc_bd_A_1 = { "termId": "cc.bd_A_1", "termName": "念力", "description": "拥有该基建技能的干员\n迷迭香", "buffer": [] };
|
|
const cc_bd_A_2 = { "termId": "cc.bd_A_2", "termName": "意识实体", "description": "拥有该基建技能的干员\n迷迭香", "buffer": [] };
|
|
const cc_bd_B_1 = { "termId": "cc.bd_B_1", "termName": "徘徊旋律", "description": "拥有该基建技能的干员\n黑键", "buffer": [] };
|
|
const cc_bd_B_2 = { "termId": "cc.bd_B_2", "termName": "怅惘和声", "description": "拥有该基建技能的干员\n黑键", "buffer": [] };
|
|
const cc_bd_B_3 = { "termId": "cc.bd_B_3", "termName": "无词颂歌", "description": "拥有该基建技能的干员\n塑心", "buffer": [] };
|
|
const cc_bd_A = { "termId": "cc.bd_A", "termName": "思维链环", "description": "可影响<$cc.bd_A_1><@cc.rem>念力</></>、<$cc.bd_A_2><@cc.rem>意识实体</></>相关技能\n由以下干员的基建技能提供\n迷迭香", "buffer": ["cc_bd_A_1", "cc_bd_A_2"] };
|
|
const cc_bd_B = { "termId": "cc.bd_B", "termName": "无声共鸣", "description": "可影响<$cc.bd_B_1><@cc.rem>徘徊旋律</></>、<$cc.bd_B_2><@cc.rem>怅惘和声</></>、<$cc.bd_B_3><@cc.rem>无词颂歌</></>相关技能\n由以下干员的基建技能提供\n黑键、塑心、深律", "buffer": ["cc_bd_B_1", "cc_bd_B_2", "cc_bd_B_3"] };
|
|
const cc_bd_C = { "termId": "cc.bd_C", "termName": "巫术结晶", "description": "拥有该基建技能的干员\n截云", "buffer": [] };
|
|
const cc_bd_a1 = { "termId": "cc.bd_a1", "termName": "感知信息", "description": "可影响<$cc.bd_A><@cc.rem>思维链环</></>、<$cc.bd_B><@cc.rem>无声共鸣</></>相关变量\n由以下干员的基建技能提供\n迷迭香、黑键、夕、令、絮雨、爱丽丝、车尔尼", "buffer": ["cc_bd_A", "cc_bd_B"] };
|
|
const cc_bd_b1 = { "termId": "cc.bd_b1", "termName": "人间烟火", "description": "可影响<$cc.bd_C><@cc.rem>巫术结晶</></>相关技能\n由以下干员的基建技能提供\n夕、令、重岳、乌有、桑葚", "buffer": ["cc_bd_C"] };
|
|
const cc_bd_ash = { "termId": "cc.bd_ash", "termName": "情报储备", "description": "由以下干员的基建技能提供\n灰烬", "buffer": [] };
|
|
const cc_bd_tachanka = { "termId": "cc.bd_tachanka", "termName": "乌萨斯特饮", "description": "由以下干员的基建技能提供\n战车", "buffer": [] };
|
|
const cc_bd_malist = { "termId": "cc.bd_malist", "termName": "工程机器人", "description": "由以下干员的基建技能提供\n至简", "buffer": [] };
|
|
const cc_bd_a1_a1 = { "termId": "cc.bd_a1_a1", "termName": "记忆碎片", "description": "可影响<$cc.bd_a1><@cc.rem>感知信息</></>相关变量\n由以下干员的基建技能提供\n絮雨", "buffer": ["cc_bd_a1"] };
|
|
const cc_bd_a1_a2 = { "termId": "cc.bd_a1_a2", "termName": "梦境", "description": "可影响<$cc.bd_a1><@cc.rem>感知信息</></>相关变量\n由以下干员的基建技能提供\n爱丽丝", "buffer": ["cc_bd_a1"] };
|
|
const cc_bd_a1_a3 = { "termId": "cc.bd_a1_a3", "termName": "小节", "description": "可影响<$cc.bd_a1><@cc.rem>感知信息</></>相关变量\n由以下干员的基建技能提供\n车尔尼", "buffer": ["cc_bd_a1"] };
|
|
const cc_bd_costdrop = { "termId": "cc.bd.costdrop", "termName": "心情落差", "description": "干员自身心情上限与当前心情值的差值", "buffer": [] };
|
|
const cc_bd_felyne = { "termId": "cc.bd_felyne", "termName": "木天蓼", "description": "可影响<$cc.bd_felyne_1><@cc.rem>可爱的艾露猫</></>、<$cc.bd_felyne_2><@cc.rem>可靠的随从们</></>相关技能\n由以下干员的基建技能提供\n火龙S黑角、麒麟R夜刀", "buffer": ["cc_bd_felyne_1", "cc_bd_felyne_2"] };
|
|
const cc_bd_felyne_1 = { "termId": "cc.bd_felyne_1", "termName": "可爱的艾露猫", "description": "拥有该基建技能的干员\n泰拉大陆调查团", "buffer": [] };
|
|
const cc_bd_felyne_2 = { "termId": "cc.bd_felyne_2", "termName": "可靠的随从们", "description": "拥有该基建技能的干员\n泰拉大陆调查团", "buffer": [] };
|
|
const cc_bd_dungeon = { "termId": "cc.bd_dungeon", "termName": "魔物料理", "description": "由以下干员的基建技能提供\n森西", "buffer": [] };
|
|
const cc_m_var1 = { "termId": "cc.m.var1", "termName": "回收利用", "description": "拥有该基建技能的干员\n红云", "buffer": [] };
|
|
const cc_m_var2 = { "termId": "cc.m.var2", "termName": "配合意识", "description": "拥有该基建技能的干员\n槐琥", "buffer": [] };
|
|
const cc_t_snsant1 = { "termId": "cc.t.snsant1", "termName": "天道酬勤·α", "description": "拥有该基建技能的干员\n雪雉", "buffer": [] };
|
|
const cc_t_snsant2 = { "termId": "cc.t.snsant2", "termName": "天道酬勤·β", "description": "拥有该基建技能的干员\n雪雉", "buffer": [] };
|
|
const cc_g_lgd = { "termId": "cc.g.lgd", "termName": "龙门近卫局", "description": "包含以下干员\n陈、星熊、诗怀雅", "buffer": [] };
|
|
const cc_g_lda = { "termId": "cc.g.lda", "termName": "鲤氏侦探事务所", "description": "包含以下干员\n老鲤、阿、吽、槐琥", "buffer": [] };
|
|
const cc_g_ussg = { "termId": "cc.g.ussg", "termName": "乌萨斯学生自治团", "description": "包含以下干员\n早露、凛冬、真理、古米、烈夏", "buffer": [] };
|
|
const cc_g_A1 = { "termId": "cc.g.A1", "termName": "A1小队", "description": "包含以下干员\n芙蓉、炎熔、米格鲁、芬、克洛丝", "buffer": [] };
|
|
const cc_g_R6 = { "termId": "cc.g.R6", "termName": "彩虹小队", "description": "包含以下干员\n灰烬、战车、闪击、霜华、艾拉、医生、双月、导火索", "buffer": [] };
|
|
const cc_g_Attack = { "termId": "cc.g.Attack", "termName": "进攻方", "description": "包含以下干员\n灰烬、闪击、双月、导火索", "buffer": [] };
|
|
const cc_g_Defence = { "termId": "cc.g.Defence", "termName": "防守方", "description": "包含以下干员\n战车、霜华、艾拉、医生", "buffer": [] };
|
|
const cc_g_sp = { "termId": "cc.g.sp", "termName": "异格", "description": "包含所有异格干员", "buffer": [] };
|
|
const cc_g_abyssal = { "termId": "cc.g.abyssal", "termName": "深海猎人", "description": "包含以下干员\n歌蕾蒂娅、斯卡蒂、幽灵鲨、安哲拉、乌尔比安", "buffer": [] };
|
|
const cc_g_psk = { "termId": "cc.g.psk", "termName": "红松骑士团", "description": "包含以下干员\n焰尾、远牙、灰毫、野鬃、正义骑士号", "buffer": [] };
|
|
const cc_g_karlan = { "termId": "cc.g.karlan", "termName": "喀兰贸易", "description": "包含以下干员\n银灰、灵知、初雪、崖心、角峰、讯使、耶拉、极光、锏", "buffer": [] };
|
|
const cc_g_sui = { "termId": "cc.g.sui", "termName": "岁", "description": "包含以下干员\n年、夕、令、重岳、黍、余", "buffer": [] };
|
|
const cc_g_glasgow = { "termId": "cc.g.glasgow", "termName": "格拉斯哥帮", "description": "包含以下干员\n推进之王、摩根、达格达、因陀罗", "buffer": [] };
|
|
const cc_g_rh = { "termId": "cc.g.rh", "termName": "莱茵生命", "description": "包含以下干员\n赫默、伊芙利特、塞雷娅、白面鸮、梅尔、麦哲伦、多萝西、星源、缪尔赛思", "buffer": [] };
|
|
const cc_g_sm = { "termId": "cc.g.sm", "termName": "萨米", "description": "包含以下干员\n远山、柏喙、雪绒、提丰、寒檀、凛视", "buffer": [] };
|
|
const cc_g_bs = { "termId": "cc.g.bs", "termName": "黑钢国际", "description": "包含以下干员\n雷蛇、芙兰卡、杰西卡、香草、杏仁、寻澜", "buffer": [] };
|
|
const cc_g_siracusa = { "termId": "cc.g.siracusa", "termName": "叙拉古", "description": "包含以下干员\n安洁莉娜、拉普兰德、普罗旺斯、红云、布洛卡、巫恋、铃兰、贾维、奥斯塔、斥罪、子月、伺夜、阿罗玛、忍冬、裁度、荒芜拉普兰德", "buffer": [] };
|
|
const cc_g_laterano = { "termId": "cc.g.laterano", "termName": "拉特兰", "description": "包含以下干员\n翎羽、安德切尔、送葬人、莫斯提马、安比尔、芳汀、空弦、菲亚梅塔、见行者、空构、隐现、塑心、蕾缪安、信仰搅拌机、CONFESS-47", "buffer": [] };
|
|
const cc_c_abyssal2_1 = { "termId": "cc.c.abyssal2_1", "termName": "特殊加成", "description": "每有1个<$cc.g.abyssal><@cc.kw>深海猎人</></>干员进驻制造站,则控制中枢给每个进驻<$cc.g.abyssal><@cc.kw>深海猎人</></>的制造站提供<@cc.vup>5%</>生产力,最多给单个制造站提供<@cc.vup>45%</>生产力", "buffer": ["cc_g_abyssal", "cc_g_abyssal"] };
|
|
const cc_c_abyssal2_2 = { "termId": "cc.c.abyssal2_2", "termName": "特殊加成", "description": "每有1个<$cc.g.abyssal><@cc.kw>深海猎人</></>干员进驻制造站,则控制中枢给每个进驻<$cc.g.abyssal><@cc.kw>深海猎人</></>的制造站提供<@cc.vup>10%</>生产力,最多给单个制造站提供<@cc.vup>90%</>生产力", "buffer": ["cc_g_abyssal", "cc_g_abyssal"] };
|
|
const cc_c_abyssal2_3 = { "termId": "cc.c.abyssal2_3", "termName": "特殊叠加规则", "description": "无法与<$cc.m.var2><@cc.rem>配合意识</></>进行叠加,且优先生效\n无法与<$cc.m.pow1><@cc.rem>自动化·α</></>、<$cc.m.pow2><@cc.rem>自动化·β</></>、<$cc.m.pow3><@cc.rem>仿生海龙</></>进行叠加,且清零效果优先生效", "buffer": ["cc_m_var2", "cc_m_pow1", "cc_m_pow2", "cc_m_pow3"] };
|
|
const cc_c_room1 = { "termId": "cc.c.room1", "termName": "部分设施", "description": "包含以下设施\n发电站、人力办公室、会客室", "buffer": [] };
|
|
const cc_c_room2 = { "termId": "cc.c.room2", "termName": "其他设施", "description": "包含以下设施\n发电站、制造站、贸易站、人力办公室、会客室", "buffer": [] };
|
|
const cc_c_room3 = { "termId": "cc.c.room3", "termName": "工作场所", "description": "包含以下设施\n发电站、制造站、贸易站、人力办公室、会客室、控制中枢、训练室", "buffer": [] };
|
|
const cc_c_skill = { "termId": "cc.c.skill", "termName": "部分技能", "description": "包含以下技能\r\n左膀右臂、S.W.E.E.P.、零食网络、清理协议、替身、必要责任、护卫、小小的领袖、独善其身、笑靥如春、金盏花诗会、捍卫之道、博识生手、点滴关照", "buffer": [] };
|
|
const cc_t_strong2 = { "termId": "cc.t.strong2", "termName": "特殊叠加规则", "description": "无法单独与<$cc.t.snsant1><@cc.rem>天道酬勤·α</></>、<$cc.t.snsant2><@cc.rem>天道酬勤·β</></>进行叠加,且优先生效\n当<$cc.t.snsant1><@cc.rem>天道酬勤·α</></>、<$cc.t.snsant2><@cc.rem>天道酬勤·β</></>与其他技能进行叠加时,该技能会对此叠加效果进行叠加", "buffer": ["cc_t_snsant1", "cc_t_snsant2", "cc_t_snsant1", "cc_t_snsant2"] };
|
|
const cc_c_sui2_1 = { "termId": "cc.c.sui2_1", "termName": "特殊比较规则", "description": "在<@cc.kw>公事公办</>,<@cc.kw>孤光共照</>,<@cc.kw>巴别塔之帜</>提供的<$cc.c.room2><@cc.kw>其他设施</></>每小时心情恢复值中取最高生效", "buffer": ["cc_c_room2"] };
|
|
const cc_m_pow1 = { "termId": "cc.m.pow1", "termName": "自动化·α", "description": "由以下干员提供\n温蒂、森蚺、异客", "buffer": [] };
|
|
const cc_m_pow2 = { "termId": "cc.m.pow2", "termName": "自动化·β", "description": "由以下干员提供\n森蚺", "buffer": [] };
|
|
const cc_m_pow3 = { "termId": "cc.m.pow3", "termName": "仿生海龙", "description": "由以下干员提供\n温蒂", "buffer": [] };
|
|
const cc_t_flow_gold = { "termId": "cc.t.flow_gold", "termName": "赤金生产线", "description": "每有<@cc.kw>1</>间<@cc.kw>制造站</>生产<@cc.kw>赤金</>,则赤金生产线<@cc.kw>+1</>", "buffer": [] };
|
|
const cc_w_ncdeer1 = { "termId": "cc.w.ncdeer1", "termName": "因果", "description": "每当加工心情消耗<@cc.kw>4</>以下的配方未产出副产品时,所消耗的每<@cc.kw>1</>点心情转化为<@cc.kw>1</>点<@cc.kw>因果</>", "buffer": [] };
|
|
const cc_w_ncdeer2 = { "termId": "cc.w.ncdeer2", "termName": "业报", "description": "每当加工心情消耗<@cc.kw>8</>的配方未产出副产品时,所消耗的每<@cc.kw>1</>点心情转化为<@cc.kw>1</>点<@cc.kw>业报</>", "buffer": [] };
|
|
const cc_t_accmuguard1 = { "termId": "cc.t.accmuguard1", "termName": "武道", "description": "协助专精训练至1级时累计<@cc.kw>1</>点、2级时累计<@cc.kw>2</>点、3级时累计<@cc.kw>3</>点,累计上限为<@cc.kw>3</>点(协助者心情为0时,无法累计或消耗)", "buffer": [] };
|
|
const cc_sk_manu1 = { "termId": "cc.sk.manu1", "termName": "标准化类技能", "description": "包含以下技能\n标准化·α、标准化·β", "buffer": [] };
|
|
const cc_sk_manu2 = { "termId": "cc.sk.manu2", "termName": "莱茵科技类技能", "description": "包含以下技能\n莱茵科技·α、莱茵科技·β、莱茵科技·γ", "buffer": [] };
|
|
const cc_sk_manu3 = { "termId": "cc.sk.manu3", "termName": "红松骑士团类技能", "description": "包含以下技能\n红松骑士团·α、红松骑士团·β", "buffer": [] };
|
|
const cc_sk_manu4 = { "termId": "cc.sk.manu4", "termName": "金属工艺类技能", "description": "包含以下技能\n金属工艺·α、金属工艺·β", "buffer": [] };
|
|
const cc_tag_op = { "termId": "cc.tag.op", "termName": "作业平台", "description": "包含以下干员\nLancet-2、Castle-3、THRM-EX、正义骑士号、Friston-3、PhonoR-0、CONFESS-47", "buffer": [] };
|
|
const cc_tag_knight = { "termId": "cc.tag.knight", "termName": "骑士", "description": "包含以下干员\n耀骑士临光、临光、瑕光、鞭刃、焰尾、远牙、灰毫、野鬃、正义骑士号、砾、薇薇安娜", "buffer": [] };
|
|
const cc_tag_durin = { "termId": "cc.tag.durin", "termName": "杜林族", "description": "包含以下干员\n至简、桃金娘、褐果、杜林、特克诺", "buffer": [] };
|
|
const cc_tag_mh = { "termId": "cc.tag.mh", "termName": "怪物猎人小队", "description": "包含以下干员\n火龙S黑角、麒麟R夜刀、泰拉大陆调查团", "buffer": [] };
|
|
const cc_tag_dungeon = { "termId": "cc.tag.dungeon", "termName": "莱欧斯小队", "description": "包含以下干员\n玛露西尔、莱欧斯、齐尔查克、森西", "buffer": [] };
|
|
const cc_gvial = { "termId": "cc.gvial", "termName": "嘉维尔", "description": "包含以下干员\n百炼嘉维尔、嘉维尔", "buffer": [] };
|
|
const cc_angel = { "termId": "cc.angel", "termName": "能天使", "description": "包含以下干员\n新约能天使、能天使", "buffer": [] };
|
|
const cc_tra_pepe = { "termId": "cc.tra.pepe", "termName": "特别独占订单", "description": "由佩佩提供的特殊贵金属订单,该订单的获取时长固定,收益恒定,所需赤金交付数为0", "buffer": [] };
|
|
const buffer = {
|
|
ba_sluggish,
|
|
ba_root,
|
|
ba_stun,
|
|
ba_buffres,
|
|
ba_invisible,
|
|
ba_camou,
|
|
ba_fragile,
|
|
ba_shield,
|
|
ba_protect,
|
|
ba_cold,
|
|
ba_frozen,
|
|
ba_sleep,
|
|
ba_inspire,
|
|
ba_binding,
|
|
ba_dt_neural,
|
|
ba_charged,
|
|
ba_strong,
|
|
ba_dt_erosion,
|
|
ba_dt_burning,
|
|
ba_float,
|
|
ba_refraction,
|
|
ba_dt_element,
|
|
ba_overdrive,
|
|
ba_dt_apoptosis,
|
|
ba_debuff,
|
|
ba_levitate,
|
|
ba_physhield,
|
|
ba_magicfragile,
|
|
ba_elementfragile,
|
|
ba_dying,
|
|
ba_barrier,
|
|
ba_weightless,
|
|
ba_berserk,
|
|
ba_steal,
|
|
ba_weaken,
|
|
ba_dt_apoptosis2,
|
|
ba_epbarrier,
|
|
ba_tremble,
|
|
ba_fear,
|
|
ba_dt_burning2,
|
|
ba_addash,
|
|
ba_magicpoint,
|
|
ba_chant,
|
|
ba_laiosteam,
|
|
ba_liftoff,
|
|
ba_physicfragile,
|
|
ba_dt_neural2,
|
|
ba_palsy,
|
|
ba_addbullet,
|
|
ba_attract,
|
|
cc_bd_A_1,
|
|
cc_bd_A_2,
|
|
cc_bd_B_1,
|
|
cc_bd_B_2,
|
|
cc_bd_B_3,
|
|
cc_bd_A,
|
|
cc_bd_B,
|
|
cc_bd_C,
|
|
cc_bd_a1,
|
|
cc_bd_b1,
|
|
cc_bd_ash,
|
|
cc_bd_tachanka,
|
|
cc_bd_malist,
|
|
cc_bd_a1_a1,
|
|
cc_bd_a1_a2,
|
|
cc_bd_a1_a3,
|
|
cc_bd_costdrop,
|
|
cc_bd_felyne,
|
|
cc_bd_felyne_1,
|
|
cc_bd_felyne_2,
|
|
cc_bd_dungeon,
|
|
cc_m_var1,
|
|
cc_m_var2,
|
|
cc_t_snsant1,
|
|
cc_t_snsant2,
|
|
cc_g_lgd,
|
|
cc_g_lda,
|
|
cc_g_ussg,
|
|
cc_g_A1,
|
|
cc_g_R6,
|
|
cc_g_Attack,
|
|
cc_g_Defence,
|
|
cc_g_sp,
|
|
cc_g_abyssal,
|
|
cc_g_psk,
|
|
cc_g_karlan,
|
|
cc_g_sui,
|
|
cc_g_glasgow,
|
|
cc_g_rh,
|
|
cc_g_sm,
|
|
cc_g_bs,
|
|
cc_g_siracusa,
|
|
cc_g_laterano,
|
|
cc_c_abyssal2_1,
|
|
cc_c_abyssal2_2,
|
|
cc_c_abyssal2_3,
|
|
cc_c_room1,
|
|
cc_c_room2,
|
|
cc_c_room3,
|
|
cc_c_skill,
|
|
cc_t_strong2,
|
|
cc_c_sui2_1,
|
|
cc_m_pow1,
|
|
cc_m_pow2,
|
|
cc_m_pow3,
|
|
cc_t_flow_gold,
|
|
cc_w_ncdeer1,
|
|
cc_w_ncdeer2,
|
|
cc_t_accmuguard1,
|
|
cc_sk_manu1,
|
|
cc_sk_manu2,
|
|
cc_sk_manu3,
|
|
cc_sk_manu4,
|
|
cc_tag_op,
|
|
cc_tag_knight,
|
|
cc_tag_durin,
|
|
cc_tag_mh,
|
|
cc_tag_dungeon,
|
|
cc_gvial,
|
|
cc_angel,
|
|
cc_tra_pepe
|
|
};
|
|
/*!
|
|
* html2canvas 1.4.1 <https://html2canvas.hertzen.com>
|
|
* Copyright (c) 2022 Niklas von Hertzen <https://hertzen.com>
|
|
* Released under MIT License
|
|
*/
|
|
/*! *****************************************************************************
|
|
Copyright (c) Microsoft Corporation.
|
|
|
|
Permission to use, copy, modify, and/or distribute this software for any
|
|
purpose with or without fee is hereby granted.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
PERFORMANCE OF THIS SOFTWARE.
|
|
***************************************************************************** */
|
|
var extendStatics$1 = function(d, b) {
|
|
extendStatics$1 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {
|
|
d2.__proto__ = b2;
|
|
} || function(d2, b2) {
|
|
for (var p in b2) if (Object.prototype.hasOwnProperty.call(b2, p)) d2[p] = b2[p];
|
|
};
|
|
return extendStatics$1(d, b);
|
|
};
|
|
function __extends$1(d, b) {
|
|
if (typeof b !== "function" && b !== null)
|
|
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
extendStatics$1(d, b);
|
|
function __() {
|
|
this.constructor = d;
|
|
}
|
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
}
|
|
function __awaiter(thisArg, _arguments, P, generator) {
|
|
function adopt(value) {
|
|
return value instanceof P ? value : new P(function(resolve) {
|
|
resolve(value);
|
|
});
|
|
}
|
|
return new (P || (P = Promise))(function(resolve, reject) {
|
|
function fulfilled(value) {
|
|
try {
|
|
step(generator.next(value));
|
|
} catch (e2) {
|
|
reject(e2);
|
|
}
|
|
}
|
|
function rejected(value) {
|
|
try {
|
|
step(generator["throw"](value));
|
|
} catch (e2) {
|
|
reject(e2);
|
|
}
|
|
}
|
|
function step(result) {
|
|
result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
|
|
}
|
|
step((generator = generator.apply(thisArg, [])).next());
|
|
});
|
|
}
|
|
function __generator(thisArg, body) {
|
|
var _ = { label: 0, sent: function() {
|
|
if (t[0] & 1) throw t[1];
|
|
return t[1];
|
|
}, trys: [], ops: [] }, f2, y, t, g;
|
|
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() {
|
|
return this;
|
|
}), g;
|
|
function verb(n) {
|
|
return function(v) {
|
|
return step([n, v]);
|
|
};
|
|
}
|
|
function step(op) {
|
|
if (f2) throw new TypeError("Generator is already executing.");
|
|
while (_) try {
|
|
if (f2 = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
switch (op[0]) {
|
|
case 0:
|
|
case 1:
|
|
t = op;
|
|
break;
|
|
case 4:
|
|
_.label++;
|
|
return { value: op[1], done: false };
|
|
case 5:
|
|
_.label++;
|
|
y = op[1];
|
|
op = [0];
|
|
continue;
|
|
case 7:
|
|
op = _.ops.pop();
|
|
_.trys.pop();
|
|
continue;
|
|
default:
|
|
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
|
|
_ = 0;
|
|
continue;
|
|
}
|
|
if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
|
|
_.label = op[1];
|
|
break;
|
|
}
|
|
if (op[0] === 6 && _.label < t[1]) {
|
|
_.label = t[1];
|
|
t = op;
|
|
break;
|
|
}
|
|
if (t && _.label < t[2]) {
|
|
_.label = t[2];
|
|
_.ops.push(op);
|
|
break;
|
|
}
|
|
if (t[2]) _.ops.pop();
|
|
_.trys.pop();
|
|
continue;
|
|
}
|
|
op = body.call(thisArg, _);
|
|
} catch (e2) {
|
|
op = [6, e2];
|
|
y = 0;
|
|
} finally {
|
|
f2 = t = 0;
|
|
}
|
|
if (op[0] & 5) throw op[1];
|
|
return { value: op[0] ? op[1] : void 0, done: true };
|
|
}
|
|
}
|
|
var Bounds = (
|
|
/** @class */
|
|
function() {
|
|
function Bounds2(left, top, width, height) {
|
|
this.left = left;
|
|
this.top = top;
|
|
this.width = width;
|
|
this.height = height;
|
|
}
|
|
Bounds2.prototype.add = function(x, y, w, h) {
|
|
return new Bounds2(this.left + x, this.top + y, this.width + w, this.height + h);
|
|
};
|
|
Bounds2.fromClientRect = function(context, clientRect) {
|
|
return new Bounds2(clientRect.left + context.windowBounds.left, clientRect.top + context.windowBounds.top, clientRect.width, clientRect.height);
|
|
};
|
|
Bounds2.fromDOMRectList = function(context, domRectList) {
|
|
var domRect = Array.from(domRectList).find(function(rect) {
|
|
return rect.width !== 0;
|
|
});
|
|
return domRect ? new Bounds2(domRect.left + context.windowBounds.left, domRect.top + context.windowBounds.top, domRect.width, domRect.height) : Bounds2.EMPTY;
|
|
};
|
|
Bounds2.EMPTY = new Bounds2(0, 0, 0, 0);
|
|
return Bounds2;
|
|
}()
|
|
);
|
|
var parseBounds = function(context, node) {
|
|
return Bounds.fromClientRect(context, node.getBoundingClientRect());
|
|
};
|
|
var toCodePoints$1 = function(str) {
|
|
var codePoints = [];
|
|
var i = 0;
|
|
var length = str.length;
|
|
while (i < length) {
|
|
var value = str.charCodeAt(i++);
|
|
if (value >= 55296 && value <= 56319 && i < length) {
|
|
var extra = str.charCodeAt(i++);
|
|
if ((extra & 64512) === 56320) {
|
|
codePoints.push(((value & 1023) << 10) + (extra & 1023) + 65536);
|
|
} else {
|
|
codePoints.push(value);
|
|
i--;
|
|
}
|
|
} else {
|
|
codePoints.push(value);
|
|
}
|
|
}
|
|
return codePoints;
|
|
};
|
|
var fromCodePoint$1 = function() {
|
|
var codePoints = [];
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
codePoints[_i] = arguments[_i];
|
|
}
|
|
if (String.fromCodePoint) {
|
|
return String.fromCodePoint.apply(String, codePoints);
|
|
}
|
|
var length = codePoints.length;
|
|
if (!length) {
|
|
return "";
|
|
}
|
|
var codeUnits = [];
|
|
var index = -1;
|
|
var result = "";
|
|
while (++index < length) {
|
|
var codePoint = codePoints[index];
|
|
if (codePoint <= 65535) {
|
|
codeUnits.push(codePoint);
|
|
} else {
|
|
codePoint -= 65536;
|
|
codeUnits.push((codePoint >> 10) + 55296, codePoint % 1024 + 56320);
|
|
}
|
|
if (index + 1 === length || codeUnits.length > 16384) {
|
|
result += String.fromCharCode.apply(String, codeUnits);
|
|
codeUnits.length = 0;
|
|
}
|
|
}
|
|
return result;
|
|
};
|
|
var chars$2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
|
var lookup$2 = typeof Uint8Array === "undefined" ? [] : new Uint8Array(256);
|
|
for (var i$2 = 0; i$2 < chars$2.length; i$2++) {
|
|
lookup$2[chars$2.charCodeAt(i$2)] = i$2;
|
|
}
|
|
var chars$1$1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
|
var lookup$1$1 = typeof Uint8Array === "undefined" ? [] : new Uint8Array(256);
|
|
for (var i$1$1 = 0; i$1$1 < chars$1$1.length; i$1$1++) {
|
|
lookup$1$1[chars$1$1.charCodeAt(i$1$1)] = i$1$1;
|
|
}
|
|
var decode$1 = function(base642) {
|
|
var bufferLength = base642.length * 0.75, len = base642.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;
|
|
if (base642[base642.length - 1] === "=") {
|
|
bufferLength--;
|
|
if (base642[base642.length - 2] === "=") {
|
|
bufferLength--;
|
|
}
|
|
}
|
|
var buffer2 = typeof ArrayBuffer !== "undefined" && typeof Uint8Array !== "undefined" && typeof Uint8Array.prototype.slice !== "undefined" ? new ArrayBuffer(bufferLength) : new Array(bufferLength);
|
|
var bytes = Array.isArray(buffer2) ? buffer2 : new Uint8Array(buffer2);
|
|
for (i = 0; i < len; i += 4) {
|
|
encoded1 = lookup$1$1[base642.charCodeAt(i)];
|
|
encoded2 = lookup$1$1[base642.charCodeAt(i + 1)];
|
|
encoded3 = lookup$1$1[base642.charCodeAt(i + 2)];
|
|
encoded4 = lookup$1$1[base642.charCodeAt(i + 3)];
|
|
bytes[p++] = encoded1 << 2 | encoded2 >> 4;
|
|
bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;
|
|
bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;
|
|
}
|
|
return buffer2;
|
|
};
|
|
var polyUint16Array$1 = function(buffer2) {
|
|
var length = buffer2.length;
|
|
var bytes = [];
|
|
for (var i = 0; i < length; i += 2) {
|
|
bytes.push(buffer2[i + 1] << 8 | buffer2[i]);
|
|
}
|
|
return bytes;
|
|
};
|
|
var polyUint32Array$1 = function(buffer2) {
|
|
var length = buffer2.length;
|
|
var bytes = [];
|
|
for (var i = 0; i < length; i += 4) {
|
|
bytes.push(buffer2[i + 3] << 24 | buffer2[i + 2] << 16 | buffer2[i + 1] << 8 | buffer2[i]);
|
|
}
|
|
return bytes;
|
|
};
|
|
var UTRIE2_SHIFT_2$1 = 5;
|
|
var UTRIE2_SHIFT_1$1 = 6 + 5;
|
|
var UTRIE2_INDEX_SHIFT$1 = 2;
|
|
var UTRIE2_SHIFT_1_2$1 = UTRIE2_SHIFT_1$1 - UTRIE2_SHIFT_2$1;
|
|
var UTRIE2_LSCP_INDEX_2_OFFSET$1 = 65536 >> UTRIE2_SHIFT_2$1;
|
|
var UTRIE2_DATA_BLOCK_LENGTH$1 = 1 << UTRIE2_SHIFT_2$1;
|
|
var UTRIE2_DATA_MASK$1 = UTRIE2_DATA_BLOCK_LENGTH$1 - 1;
|
|
var UTRIE2_LSCP_INDEX_2_LENGTH$1 = 1024 >> UTRIE2_SHIFT_2$1;
|
|
var UTRIE2_INDEX_2_BMP_LENGTH$1 = UTRIE2_LSCP_INDEX_2_OFFSET$1 + UTRIE2_LSCP_INDEX_2_LENGTH$1;
|
|
var UTRIE2_UTF8_2B_INDEX_2_OFFSET$1 = UTRIE2_INDEX_2_BMP_LENGTH$1;
|
|
var UTRIE2_UTF8_2B_INDEX_2_LENGTH$1 = 2048 >> 6;
|
|
var UTRIE2_INDEX_1_OFFSET$1 = UTRIE2_UTF8_2B_INDEX_2_OFFSET$1 + UTRIE2_UTF8_2B_INDEX_2_LENGTH$1;
|
|
var UTRIE2_OMITTED_BMP_INDEX_1_LENGTH$1 = 65536 >> UTRIE2_SHIFT_1$1;
|
|
var UTRIE2_INDEX_2_BLOCK_LENGTH$1 = 1 << UTRIE2_SHIFT_1_2$1;
|
|
var UTRIE2_INDEX_2_MASK$1 = UTRIE2_INDEX_2_BLOCK_LENGTH$1 - 1;
|
|
var slice16$1 = function(view, start, end) {
|
|
if (view.slice) {
|
|
return view.slice(start, end);
|
|
}
|
|
return new Uint16Array(Array.prototype.slice.call(view, start, end));
|
|
};
|
|
var slice32$1 = function(view, start, end) {
|
|
if (view.slice) {
|
|
return view.slice(start, end);
|
|
}
|
|
return new Uint32Array(Array.prototype.slice.call(view, start, end));
|
|
};
|
|
var createTrieFromBase64$1 = function(base642, _byteLength) {
|
|
var buffer2 = decode$1(base642);
|
|
var view32 = Array.isArray(buffer2) ? polyUint32Array$1(buffer2) : new Uint32Array(buffer2);
|
|
var view16 = Array.isArray(buffer2) ? polyUint16Array$1(buffer2) : new Uint16Array(buffer2);
|
|
var headerLength = 24;
|
|
var index = slice16$1(view16, headerLength / 2, view32[4] / 2);
|
|
var data = view32[5] === 2 ? slice16$1(view16, (headerLength + view32[4]) / 2) : slice32$1(view32, Math.ceil((headerLength + view32[4]) / 4));
|
|
return new Trie$1(view32[0], view32[1], view32[2], view32[3], index, data);
|
|
};
|
|
var Trie$1 = (
|
|
/** @class */
|
|
function() {
|
|
function Trie2(initialValue, errorValue, highStart, highValueIndex, index, data) {
|
|
this.initialValue = initialValue;
|
|
this.errorValue = errorValue;
|
|
this.highStart = highStart;
|
|
this.highValueIndex = highValueIndex;
|
|
this.index = index;
|
|
this.data = data;
|
|
}
|
|
Trie2.prototype.get = function(codePoint) {
|
|
var ix;
|
|
if (codePoint >= 0) {
|
|
if (codePoint < 55296 || codePoint > 56319 && codePoint <= 65535) {
|
|
ix = this.index[codePoint >> UTRIE2_SHIFT_2$1];
|
|
ix = (ix << UTRIE2_INDEX_SHIFT$1) + (codePoint & UTRIE2_DATA_MASK$1);
|
|
return this.data[ix];
|
|
}
|
|
if (codePoint <= 65535) {
|
|
ix = this.index[UTRIE2_LSCP_INDEX_2_OFFSET$1 + (codePoint - 55296 >> UTRIE2_SHIFT_2$1)];
|
|
ix = (ix << UTRIE2_INDEX_SHIFT$1) + (codePoint & UTRIE2_DATA_MASK$1);
|
|
return this.data[ix];
|
|
}
|
|
if (codePoint < this.highStart) {
|
|
ix = UTRIE2_INDEX_1_OFFSET$1 - UTRIE2_OMITTED_BMP_INDEX_1_LENGTH$1 + (codePoint >> UTRIE2_SHIFT_1$1);
|
|
ix = this.index[ix];
|
|
ix += codePoint >> UTRIE2_SHIFT_2$1 & UTRIE2_INDEX_2_MASK$1;
|
|
ix = this.index[ix];
|
|
ix = (ix << UTRIE2_INDEX_SHIFT$1) + (codePoint & UTRIE2_DATA_MASK$1);
|
|
return this.data[ix];
|
|
}
|
|
if (codePoint <= 1114111) {
|
|
return this.data[this.highValueIndex];
|
|
}
|
|
}
|
|
return this.errorValue;
|
|
};
|
|
return Trie2;
|
|
}()
|
|
);
|
|
var chars$3 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
|
var lookup$3 = typeof Uint8Array === "undefined" ? [] : new Uint8Array(256);
|
|
for (var i$3 = 0; i$3 < chars$3.length; i$3++) {
|
|
lookup$3[chars$3.charCodeAt(i$3)] = i$3;
|
|
}
|
|
var base64$1 = "KwAAAAAAAAAACA4AUD0AADAgAAACAAAAAAAIABAAGABAAEgAUABYAGAAaABgAGgAYgBqAF8AZwBgAGgAcQB5AHUAfQCFAI0AlQCdAKIAqgCyALoAYABoAGAAaABgAGgAwgDKAGAAaADGAM4A0wDbAOEA6QDxAPkAAQEJAQ8BFwF1AH0AHAEkASwBNAE6AUIBQQFJAVEBWQFhAWgBcAF4ATAAgAGGAY4BlQGXAZ8BpwGvAbUBvQHFAc0B0wHbAeMB6wHxAfkBAQIJAvEBEQIZAiECKQIxAjgCQAJGAk4CVgJeAmQCbAJ0AnwCgQKJApECmQKgAqgCsAK4ArwCxAIwAMwC0wLbAjAA4wLrAvMC+AIAAwcDDwMwABcDHQMlAy0DNQN1AD0DQQNJA0kDSQNRA1EDVwNZA1kDdQB1AGEDdQBpA20DdQN1AHsDdQCBA4kDkQN1AHUAmQOhA3UAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AKYDrgN1AHUAtgO+A8YDzgPWAxcD3gPjA+sD8wN1AHUA+wMDBAkEdQANBBUEHQQlBCoEFwMyBDgEYABABBcDSARQBFgEYARoBDAAcAQzAXgEgASIBJAEdQCXBHUAnwSnBK4EtgS6BMIEyAR1AHUAdQB1AHUAdQCVANAEYABgAGAAYABgAGAAYABgANgEYADcBOQEYADsBPQE/AQEBQwFFAUcBSQFLAU0BWQEPAVEBUsFUwVbBWAAYgVgAGoFcgV6BYIFigWRBWAAmQWfBaYFYABgAGAAYABgAKoFYACxBbAFuQW6BcEFwQXHBcEFwQXPBdMF2wXjBeoF8gX6BQIGCgYSBhoGIgYqBjIGOgZgAD4GRgZMBmAAUwZaBmAAYABgAGAAYABgAGAAYABgAGAAYABgAGIGYABpBnAGYABgAGAAYABgAGAAYABgAGAAYAB4Bn8GhQZgAGAAYAB1AHcDFQSLBmAAYABgAJMGdQA9A3UAmwajBqsGqwaVALMGuwbDBjAAywbSBtIG1QbSBtIG0gbSBtIG0gbdBuMG6wbzBvsGAwcLBxMHAwcbByMHJwcsBywHMQcsB9IGOAdAB0gHTgfSBkgHVgfSBtIG0gbSBtIG0gbSBtIG0gbSBiwHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAdgAGAALAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAdbB2MHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsB2kH0gZwB64EdQB1AHUAdQB1AHUAdQB1AHUHfQdgAIUHjQd1AHUAlQedB2AAYAClB6sHYACzB7YHvgfGB3UAzgfWBzMB3gfmB1EB7gf1B/0HlQENAQUIDQh1ABUIHQglCBcDLQg1CD0IRQhNCEEDUwh1AHUAdQBbCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIcAh3CHoIMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIgggwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAALAcsBywHLAcsBywHLAcsBywHLAcsB4oILAcsB44I0gaWCJ4Ipgh1AHUAqgiyCHUAdQB1AHUAdQB1AHUAdQB1AHUAtwh8AXUAvwh1AMUIyQjRCNkI4AjoCHUAdQB1AO4I9gj+CAYJDgkTCS0HGwkjCYIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiAAIAAAAFAAYABgAGIAXwBgAHEAdQBFAJUAogCyAKAAYABgAEIA4ABGANMA4QDxAMEBDwE1AFwBLAE6AQEBUQF4QkhCmEKoQrhCgAHIQsAB0MLAAcABwAHAAeDC6ABoAHDCwMMAAcABwAHAAdDDGMMAAcAB6MM4wwjDWMNow3jDaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAEjDqABWw6bDqABpg6gAaABoAHcDvwOPA+gAaABfA/8DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DpcPAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcAB9cPKwkyCToJMAB1AHUAdQBCCUoJTQl1AFUJXAljCWcJawkwADAAMAAwAHMJdQB2CX4JdQCECYoJjgmWCXUAngkwAGAAYABxAHUApgn3A64JtAl1ALkJdQDACTAAMAAwADAAdQB1AHUAdQB1AHUAdQB1AHUAowYNBMUIMAAwADAAMADICcsJ0wnZCRUE4QkwAOkJ8An4CTAAMAB1AAAKvwh1AAgKDwoXCh8KdQAwACcKLgp1ADYKqAmICT4KRgowADAAdQB1AE4KMAB1AFYKdQBeCnUAZQowADAAMAAwADAAMAAwADAAMAAVBHUAbQowADAAdQC5CXUKMAAwAHwBxAijBogEMgF9CoQKiASMCpQKmgqIBKIKqgquCogEDQG2Cr4KxgrLCjAAMADTCtsKCgHjCusK8Qr5CgELMAAwADAAMAB1AIsECQsRC3UANAEZCzAAMAAwADAAMAB1ACELKQswAHUANAExCzkLdQBBC0kLMABRC1kLMAAwADAAMAAwADAAdQBhCzAAMAAwAGAAYABpC3ELdwt/CzAAMACHC4sLkwubC58Lpwt1AK4Ltgt1APsDMAAwADAAMAAwADAAMAAwAL4LwwvLC9IL1wvdCzAAMADlC+kL8Qv5C/8LSQswADAAMAAwADAAMAAwADAAMAAHDDAAMAAwADAAMAAODBYMHgx1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1ACYMMAAwADAAdQB1AHUALgx1AHUAdQB1AHUAdQA2DDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AD4MdQBGDHUAdQB1AHUAdQB1AEkMdQB1AHUAdQB1AFAMMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQBYDHUAdQB1AF8MMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUA+wMVBGcMMAAwAHwBbwx1AHcMfwyHDI8MMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAYABgAJcMMAAwADAAdQB1AJ8MlQClDDAAMACtDCwHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsB7UMLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AA0EMAC9DDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAsBywHLAcsBywHLAcsBywHLQcwAMEMyAwsBywHLAcsBywHLAcsBywHLAcsBywHzAwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1ANQM2QzhDDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMABgAGAAYABgAGAAYABgAOkMYADxDGAA+AwADQYNYABhCWAAYAAODTAAMAAwADAAFg1gAGAAHg37AzAAMAAwADAAYABgACYNYAAsDTQNPA1gAEMNPg1LDWAAYABgAGAAYABgAGAAYABgAGAAUg1aDYsGVglhDV0NcQBnDW0NdQ15DWAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAlQCBDZUAiA2PDZcNMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAnw2nDTAAMAAwADAAMAAwAHUArw23DTAAMAAwADAAMAAwADAAMAAwADAAMAB1AL8NMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAB1AHUAdQB1AHUAdQDHDTAAYABgAM8NMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAA1w11ANwNMAAwAD0B5A0wADAAMAAwADAAMADsDfQN/A0EDgwOFA4wABsOMAAwADAAMAAwADAAMAAwANIG0gbSBtIG0gbSBtIG0gYjDigOwQUuDsEFMw7SBjoO0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGQg5KDlIOVg7SBtIGXg5lDm0OdQ7SBtIGfQ6EDooOjQ6UDtIGmg6hDtIG0gaoDqwO0ga0DrwO0gZgAGAAYADEDmAAYAAkBtIGzA5gANIOYADaDokO0gbSBt8O5w7SBu8O0gb1DvwO0gZgAGAAxA7SBtIG0gbSBtIGYABgAGAAYAAED2AAsAUMD9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGFA8sBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAccD9IGLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHJA8sBywHLAcsBywHLAccDywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywPLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAc0D9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAccD9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGFA8sBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHPA/SBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gYUD0QPlQCVAJUAMAAwADAAMACVAJUAlQCVAJUAlQCVAEwPMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAA//8EAAQABAAEAAQABAAEAAQABAANAAMAAQABAAIABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQACgATABcAHgAbABoAHgAXABYAEgAeABsAGAAPABgAHABLAEsASwBLAEsASwBLAEsASwBLABgAGAAeAB4AHgATAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABYAGwASAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAWAA0AEQAeAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAFAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJABYAGgAbABsAGwAeAB0AHQAeAE8AFwAeAA0AHgAeABoAGwBPAE8ADgBQAB0AHQAdAE8ATwAXAE8ATwBPABYAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAFAATwBAAE8ATwBPAEAATwBQAFAATwBQAB4AHgAeAB4AHgAeAB0AHQAdAB0AHgAdAB4ADgBQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgBQAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAkACQAJAAkACQAJAAkABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAFAAHgAeAB4AKwArAFAAUABQAFAAGABQACsAKwArACsAHgAeAFAAHgBQAFAAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUAAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAYAA0AKwArAB4AHgAbACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAB4ABAAEAB4ABAAEABMABAArACsAKwArACsAKwArACsAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAKwArACsAKwBWAFYAVgBWAB4AHgArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AGgAaABoAGAAYAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQAEwAEACsAEwATAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABLAEsASwBLAEsASwBLAEsASwBLABoAGQAZAB4AUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABMAUAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABABQAFAABAAEAB4ABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUAAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAFAABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQAUABQAB4AHgAYABMAUAArACsABAAbABsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAFAABAAEAAQABAAEAFAABAAEAAQAUAAEAAQABAAEAAQAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArACsAHgArAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAUAAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEAA0ADQBLAEsASwBLAEsASwBLAEsASwBLAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUAArACsAKwBQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABABQACsAKwArACsAKwArACsAKwAEACsAKwArACsAUABQACsAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUAAaABoAUABQAFAAUABQAEwAHgAbAFAAHgAEACsAKwAEAAQABAArAFAAUABQAFAAUABQACsAKwArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQACsAUABQACsAKwAEACsABAAEAAQABAAEACsAKwArACsABAAEACsAKwAEAAQABAArACsAKwAEACsAKwArACsAKwArACsAUABQAFAAUAArAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLAAQABABQAFAAUAAEAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAArACsAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAB4AGwArACsAKwArACsAKwArAFAABAAEAAQABAAEAAQAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAKwArACsAKwArAAQABAAEACsAKwArACsAUABQACsAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAB4AUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAAQAUAArAFAAUABQAFAAUABQACsAKwArAFAAUABQACsAUABQAFAAUAArACsAKwBQAFAAKwBQACsAUABQACsAKwArAFAAUAArACsAKwBQAFAAUAArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArAAQABAAEAAQABAArACsAKwAEAAQABAArAAQABAAEAAQAKwArAFAAKwArACsAKwArACsABAArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAHgAeAB4AHgAeAB4AGwAeACsAKwArACsAKwAEAAQABAAEAAQAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAUAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAAEACsAKwArACsAKwArACsABAAEACsAUABQAFAAKwArACsAKwArAFAAUAAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwAOAFAAUABQAFAAUABQAFAAHgBQAAQABAAEAA4AUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAKwArAAQAUAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAAEACsAKwArACsAKwArACsABAAEACsAKwArACsAKwArACsAUAArAFAAUAAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwBQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABABQAB4AKwArACsAKwBQAFAAUAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQABoAUABQAFAAUABQAFAAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQACsAUAArACsAUABQAFAAUABQAFAAUAArACsAKwAEACsAKwArACsABAAEAAQABAAEAAQAKwAEACsABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArAAQABAAeACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAXAAqACoAKgAqACoAKgAqACsAKwArACsAGwBcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAeAEsASwBLAEsASwBLAEsASwBLAEsADQANACsAKwArACsAKwBcAFwAKwBcACsAXABcAFwAXABcACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAXAArAFwAXABcAFwAXABcAFwAXABcAFwAKgBcAFwAKgAqACoAKgAqACoAKgAqACoAXAArACsAXABcAFwAXABcACsAXAArACoAKgAqACoAKgAqACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwBcAFwAXABcAFAADgAOAA4ADgAeAA4ADgAJAA4ADgANAAkAEwATABMAEwATAAkAHgATAB4AHgAeAAQABAAeAB4AHgAeAB4AHgBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQAFAADQAEAB4ABAAeAAQAFgARABYAEQAEAAQAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAAQABAAEAAQADQAEAAQAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAA0ADQAeAB4AHgAeAB4AHgAEAB4AHgAeAB4AHgAeACsAHgAeAA4ADgANAA4AHgAeAB4AHgAeAAkACQArACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgBcAEsASwBLAEsASwBLAEsASwBLAEsADQANAB4AHgAeAB4AXABcAFwAXABcAFwAKgAqACoAKgBcAFwAXABcACoAKgAqAFwAKgAqACoAXABcACoAKgAqACoAKgAqACoAXABcAFwAKgAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKgAqAFwAKgBLAEsASwBLAEsASwBLAEsASwBLACoAKgAqACoAKgAqAFAAUABQAFAAUABQACsAUAArACsAKwArACsAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgBQAFAAUABQAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAKwBQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsABAAEAAQAHgANAB4AHgAeAB4AHgAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUAArACsADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAWABEAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAA0ADQANAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAANAA0AKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUAArAAQABAArACsAKwArACsAKwArACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqAA0ADQAVAFwADQAeAA0AGwBcACoAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwAeAB4AEwATAA0ADQAOAB4AEwATAB4ABAAEAAQACQArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUAAEAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAHgArACsAKwATABMASwBLAEsASwBLAEsASwBLAEsASwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAXABcAFwAXABcACsAKwArACsAKwArACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAXAArACsAKwAqACoAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsAHgAeAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKwAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKwArAAQASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACoAKgAqACoAKgAqACoAXAAqACoAKgAqACoAKgArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABABQAFAAUABQAFAAUABQACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwANAA0AHgANAA0ADQANAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQAHgAeAB4AHgAeAB4AHgAeAB4AKwArACsABAAEAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwAeAB4AHgAeAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArAA0ADQANAA0ADQBLAEsASwBLAEsASwBLAEsASwBLACsAKwArAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAA0ADQBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUAAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArAAQABAAEAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAAQAUABQAFAAUABQAFAABABQAFAABAAEAAQAUAArACsAKwArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAKwBQACsAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAFAAUABQACsAHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQACsAKwAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQACsAHgAeAB4AHgAeAB4AHgAOAB4AKwANAA0ADQANAA0ADQANAAkADQANAA0ACAAEAAsABAAEAA0ACQANAA0ADAAdAB0AHgAXABcAFgAXABcAFwAWABcAHQAdAB4AHgAUABQAFAANAAEAAQAEAAQABAAEAAQACQAaABoAGgAaABoAGgAaABoAHgAXABcAHQAVABUAHgAeAB4AHgAeAB4AGAAWABEAFQAVABUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ADQAeAA0ADQANAA0AHgANAA0ADQAHAB4AHgAeAB4AKwAEAAQABAAEAAQABAAEAAQABAAEAFAAUAArACsATwBQAFAAUABQAFAAHgAeAB4AFgARAE8AUABPAE8ATwBPAFAAUABQAFAAUAAeAB4AHgAWABEAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArABsAGwAbABsAGwAbABsAGgAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGgAbABsAGwAbABoAGwAbABoAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAHgAeAFAAGgAeAB0AHgBQAB4AGgAeAB4AHgAeAB4AHgAeAB4AHgBPAB4AUAAbAB4AHgBQAFAAUABQAFAAHgAeAB4AHQAdAB4AUAAeAFAAHgBQAB4AUABPAFAAUAAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAHgBQAFAAUABQAE8ATwBQAFAAUABQAFAATwBQAFAATwBQAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAFAAUABQAFAATwBPAE8ATwBPAE8ATwBPAE8ATwBQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABPAB4AHgArACsAKwArAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHQAdAB4AHgAeAB0AHQAeAB4AHQAeAB4AHgAdAB4AHQAbABsAHgAdAB4AHgAeAB4AHQAeAB4AHQAdAB0AHQAeAB4AHQAeAB0AHgAdAB0AHQAdAB0AHQAeAB0AHgAeAB4AHgAeAB0AHQAdAB0AHgAeAB4AHgAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeAB0AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAeAB0AHQAdAB0AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAWABEAHgAeAB4AHgAeAB4AHQAeAB4AHgAeAB4AHgAeACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAWABEAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAFAAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeAB4AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AHQAdAB0AHgAeAB0AHgAeAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlAB4AHQAdAB4AHgAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AJQAlAB0AHQAlAB4AJQAlACUAIAAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAeAB4AHgAeAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAdAB0AHQAeAB0AJQAdAB0AHgAdAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAdAB0AHQAdACUAHgAlACUAJQAdACUAJQAdAB0AHQAlACUAHQAdACUAHQAdACUAJQAlAB4AHQAeAB4AHgAeAB0AHQAlAB0AHQAdAB0AHQAdACUAJQAlACUAJQAdACUAJQAgACUAHQAdACUAJQAlACUAJQAlACUAJQAeAB4AHgAlACUAIAAgACAAIAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AFwAXABcAFwAXABcAHgATABMAJQAeAB4AHgAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARABYAEQAWABEAFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAEAAQABAAeAB4AKwArACsAKwArABMADQANAA0AUAATAA0AUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUAANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAA0ADQANAA0ADQANAA0ADQAeAA0AFgANAB4AHgAXABcAHgAeABcAFwAWABEAFgARABYAEQAWABEADQANAA0ADQATAFAADQANAB4ADQANAB4AHgAeAB4AHgAMAAwADQANAA0AHgANAA0AFgANAA0ADQANAA0ADQANAA0AHgANAB4ADQANAB4AHgAeACsAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArAA0AEQARACUAJQBHAFcAVwAWABEAFgARABYAEQAWABEAFgARACUAJQAWABEAFgARABYAEQAWABEAFQAWABEAEQAlAFcAVwBXAFcAVwBXAFcAVwBXAAQABAAEAAQABAAEACUAVwBXAFcAVwA2ACUAJQBXAFcAVwBHAEcAJQAlACUAKwBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBRAFcAUQBXAFEAVwBXAFcAVwBXAFcAUQBXAFcAVwBXAFcAVwBRAFEAKwArAAQABAAVABUARwBHAFcAFQBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBRAFcAVwBXAFcAVwBXAFEAUQBXAFcAVwBXABUAUQBHAEcAVwArACsAKwArACsAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwAlACUAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACsAKwArACsAKwArACsAKwArACsAKwArAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBPAE8ATwBPAE8ATwBPAE8AJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADQATAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABLAEsASwBLAEsASwBLAEsASwBLAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAABAAEAAQABAAeAAQABAAEAAQABAAEAAQABAAEAAQAHgBQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAeAA0ADQANAA0ADQArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAAQAUABQAFAABABQAFAAUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAeAB4AHgAeAAQAKwArACsAUABQAFAAUABQAFAAHgAeABoAHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADgAOABMAEwArACsAKwArACsAKwArACsABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwANAA0ASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUAAeAB4AHgBQAA4AUABQAAQAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArAB4AWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYACsAKwArAAQAHgAeAB4AHgAeAB4ADQANAA0AHgAeAB4AHgArAFAASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArAB4AHgBcAFwAXABcAFwAKgBcAFwAXABcAFwAXABcAFwAXABcAEsASwBLAEsASwBLAEsASwBLAEsAXABcAFwAXABcACsAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAFAAUABQAAQAUABQAFAAUABQAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAHgANAA0ADQBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAXAAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAKgAqACoAXABcACoAKgBcAFwAXABcAFwAKgAqAFwAKgBcACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcACoAKgBQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAA0ADQBQAFAAUAAEAAQAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQADQAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAVABVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBUAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVACsAKwArACsAKwArACsAKwArACsAKwArAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAKwArACsAKwBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAKwArACsAKwAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAKwArACsAKwArAFYABABWAFYAVgBWAFYAVgBWAFYAVgBWAB4AVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgArAFYAVgBWAFYAVgArAFYAKwBWAFYAKwBWAFYAKwBWAFYAVgBWAFYAVgBWAFYAVgBWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAEQAWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAaAB4AKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAGAARABEAGAAYABMAEwAWABEAFAArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACUAJQAlACUAJQAWABEAFgARABYAEQAWABEAFgARABYAEQAlACUAFgARACUAJQAlACUAJQAlACUAEQAlABEAKwAVABUAEwATACUAFgARABYAEQAWABEAJQAlACUAJQAlACUAJQAlACsAJQAbABoAJQArACsAKwArAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAcAKwATACUAJQAbABoAJQAlABYAEQAlACUAEQAlABEAJQBXAFcAVwBXAFcAVwBXAFcAVwBXABUAFQAlACUAJQATACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXABYAJQARACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAWACUAEQAlABYAEQARABYAEQARABUAVwBRAFEAUQBRAFEAUQBRAFEAUQBRAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcARwArACsAVwBXAFcAVwBXAFcAKwArAFcAVwBXAFcAVwBXACsAKwBXAFcAVwBXAFcAVwArACsAVwBXAFcAKwArACsAGgAbACUAJQAlABsAGwArAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAAQAB0AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsADQANAA0AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAAQAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAA0AUABQAFAAUAArACsAKwArAFAAUABQAFAAUABQAFAAUAANAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAKwArAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArACsAKwBQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAUABQAFAAUABQAAQABAAEACsABAAEACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAKwBQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAA0ADQANAA0ADQANAA0ADQAeACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAArACsAKwArAFAAUABQAFAAUAANAA0ADQANAA0ADQAUACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsADQANAA0ADQANAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAAQABAAEAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArAAQABAANACsAKwBQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAB4AHgAeAB4AHgArACsAKwArACsAKwAEAAQABAAEAAQABAAEAA0ADQAeAB4AHgAeAB4AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwAeACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsASwBLAEsASwBLAEsASwBLAEsASwANAA0ADQANAFAABAAEAFAAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAeAA4AUAArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAADQANAB4ADQAEAAQABAAEAB4ABAAEAEsASwBLAEsASwBLAEsASwBLAEsAUAAOAFAADQANAA0AKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAANAA0AHgANAA0AHgAEACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAA0AKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsABAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQACsABAAEAFAABAAEAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAUAArACsAKwArACsAKwAEACsAKwArACsAKwBQAFAAUABQAFAABAAEACsAKwAEAAQABAAEAAQABAAEACsAKwArAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABABQAFAAUABQAA0ADQANAA0AHgBLAEsASwBLAEsASwBLAEsASwBLAA0ADQArAB4ABABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAFAAUAAeAFAAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABAAEAAQADgANAA0AEwATAB4AHgAeAA0ADQANAA0ADQANAA0ADQANAA0ADQANAA0ADQANAFAAUABQAFAABAAEACsAKwAEAA0ADQAeAFAAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKwArACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBcAFwADQANAA0AKgBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAKwArAFAAKwArAFAAUABQAFAAUABQAFAAUAArAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQAKwAEAAQAKwArAAQABAAEAAQAUAAEAFAABAAEAA0ADQANACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABABQAA4AUAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAFAABAAEAAQABAAOAB4ADQANAA0ADQAOAB4ABAArACsAKwArACsAKwArACsAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAA0ADQANAFAADgAOAA4ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAAQABAAEAFAADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAOABMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAArACsAKwAEACsABAAEACsABAAEAAQABAAEAAQABABQAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAKwAEAAQAKwAEAAQABAAEAAQAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAaABoAGgAaAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABIAEgAQwBDAEMAUABQAFAAUABDAFAAUABQAEgAQwBIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABDAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAJAAkACQAJAAkACQAJABYAEQArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwANAA0AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAANACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAA0ADQANAB4AHgAeAB4AHgAeAFAAUABQAFAADQAeACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAA0AHgAeACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAARwBHABUARwAJACsAKwArACsAKwArACsAKwArACsAKwAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUQBRAFEAKwArACsAKwArACsAKwArACsAKwArACsAKwBRAFEAUQBRACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArACsAHgAEAAQADQAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAAQABAAEAAQABAAeAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQAHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQAFAAKwArAFAAKwArAFAAUAArACsAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUAArAFAAUABQAFAAUABQAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAHgAeAFAAUABQAFAAUAArAFAAKwArACsAUABQAFAAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeACsAKwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4ABAAeAB4AHgAeAB4AHgAeAB4AHgAeAAQAHgAeAA0ADQANAA0AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAAQAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArAAQABAAEAAQABAAEAAQAKwAEAAQAKwAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwBQAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArABsAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAB4AHgAeAB4ABAAEAAQABAAEAAQABABQACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArABYAFgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAGgBQAFAAUAAaAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQACsAKwBQACsAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwBQACsAUAArACsAKwArACsAKwBQACsAKwArACsAUAArAFAAKwBQACsAUABQAFAAKwBQAFAAKwBQACsAKwBQACsAUAArAFAAKwBQACsAUAArAFAAUAArAFAAKwArAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUAArAFAAUABQAFAAKwBQACsAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAKwBQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8AJQAlACUAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB4AHgAeACUAJQAlAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAlACUAJQAlACUAHgAlACUAJQAlACUAIAAgACAAJQAlACAAJQAlACAAIAAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACEAIQAhACEAIQAlACUAIAAgACUAJQAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAIAAlACUAJQAlACAAIAAgACUAIAAgACAAJQAlACUAJQAlACUAJQAgACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAlAB4AJQAeACUAJQAlACUAJQAgACUAJQAlACUAHgAlAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACAAIAAgACUAJQAlACAAIAAgACAAIAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABcAFwAXABUAFQAVAB4AHgAeAB4AJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAgACUAJQAgACUAJQAlACUAJQAlACUAJQAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAgACAAIAAgACAAIAAgACAAIAAgACUAJQAgACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAlACAAIAAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAgACAAIAAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAA==";
|
|
var LETTER_NUMBER_MODIFIER = 50;
|
|
var BK = 1;
|
|
var CR$1 = 2;
|
|
var LF$1 = 3;
|
|
var CM = 4;
|
|
var NL = 5;
|
|
var WJ = 7;
|
|
var ZW = 8;
|
|
var GL = 9;
|
|
var SP = 10;
|
|
var ZWJ$1 = 11;
|
|
var B2 = 12;
|
|
var BA = 13;
|
|
var BB = 14;
|
|
var HY = 15;
|
|
var CB = 16;
|
|
var CL = 17;
|
|
var CP = 18;
|
|
var EX = 19;
|
|
var IN = 20;
|
|
var NS = 21;
|
|
var OP = 22;
|
|
var QU = 23;
|
|
var IS = 24;
|
|
var NU = 25;
|
|
var PO = 26;
|
|
var PR = 27;
|
|
var SY = 28;
|
|
var AI = 29;
|
|
var AL = 30;
|
|
var CJ = 31;
|
|
var EB = 32;
|
|
var EM = 33;
|
|
var H2 = 34;
|
|
var H3 = 35;
|
|
var HL = 36;
|
|
var ID = 37;
|
|
var JL = 38;
|
|
var JV = 39;
|
|
var JT = 40;
|
|
var RI$1 = 41;
|
|
var SA = 42;
|
|
var XX = 43;
|
|
var ea_OP = [9001, 65288];
|
|
var BREAK_MANDATORY = "!";
|
|
var BREAK_NOT_ALLOWED$1 = "×";
|
|
var BREAK_ALLOWED$1 = "÷";
|
|
var UnicodeTrie$1 = createTrieFromBase64$1(base64$1);
|
|
var ALPHABETICS = [AL, HL];
|
|
var HARD_LINE_BREAKS = [BK, CR$1, LF$1, NL];
|
|
var SPACE$1 = [SP, ZW];
|
|
var PREFIX_POSTFIX = [PR, PO];
|
|
var LINE_BREAKS = HARD_LINE_BREAKS.concat(SPACE$1);
|
|
var KOREAN_SYLLABLE_BLOCK = [JL, JV, JT, H2, H3];
|
|
var HYPHEN = [HY, BA];
|
|
var codePointsToCharacterClasses = function(codePoints, lineBreak2) {
|
|
if (lineBreak2 === void 0) {
|
|
lineBreak2 = "strict";
|
|
}
|
|
var types = [];
|
|
var indices = [];
|
|
var categories = [];
|
|
codePoints.forEach(function(codePoint, index) {
|
|
var classType = UnicodeTrie$1.get(codePoint);
|
|
if (classType > LETTER_NUMBER_MODIFIER) {
|
|
categories.push(true);
|
|
classType -= LETTER_NUMBER_MODIFIER;
|
|
} else {
|
|
categories.push(false);
|
|
}
|
|
if (["normal", "auto", "loose"].indexOf(lineBreak2) !== -1) {
|
|
if ([8208, 8211, 12316, 12448].indexOf(codePoint) !== -1) {
|
|
indices.push(index);
|
|
return types.push(CB);
|
|
}
|
|
}
|
|
if (classType === CM || classType === ZWJ$1) {
|
|
if (index === 0) {
|
|
indices.push(index);
|
|
return types.push(AL);
|
|
}
|
|
var prev = types[index - 1];
|
|
if (LINE_BREAKS.indexOf(prev) === -1) {
|
|
indices.push(indices[index - 1]);
|
|
return types.push(prev);
|
|
}
|
|
indices.push(index);
|
|
return types.push(AL);
|
|
}
|
|
indices.push(index);
|
|
if (classType === CJ) {
|
|
return types.push(lineBreak2 === "strict" ? NS : ID);
|
|
}
|
|
if (classType === SA) {
|
|
return types.push(AL);
|
|
}
|
|
if (classType === AI) {
|
|
return types.push(AL);
|
|
}
|
|
if (classType === XX) {
|
|
if (codePoint >= 131072 && codePoint <= 196605 || codePoint >= 196608 && codePoint <= 262141) {
|
|
return types.push(ID);
|
|
} else {
|
|
return types.push(AL);
|
|
}
|
|
}
|
|
types.push(classType);
|
|
});
|
|
return [indices, types, categories];
|
|
};
|
|
var isAdjacentWithSpaceIgnored = function(a2, b, currentIndex, classTypes) {
|
|
var current = classTypes[currentIndex];
|
|
if (Array.isArray(a2) ? a2.indexOf(current) !== -1 : a2 === current) {
|
|
var i = currentIndex;
|
|
while (i <= classTypes.length) {
|
|
i++;
|
|
var next = classTypes[i];
|
|
if (next === b) {
|
|
return true;
|
|
}
|
|
if (next !== SP) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (current === SP) {
|
|
var i = currentIndex;
|
|
while (i > 0) {
|
|
i--;
|
|
var prev = classTypes[i];
|
|
if (Array.isArray(a2) ? a2.indexOf(prev) !== -1 : a2 === prev) {
|
|
var n = currentIndex;
|
|
while (n <= classTypes.length) {
|
|
n++;
|
|
var next = classTypes[n];
|
|
if (next === b) {
|
|
return true;
|
|
}
|
|
if (next !== SP) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (prev !== SP) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
};
|
|
var previousNonSpaceClassType = function(currentIndex, classTypes) {
|
|
var i = currentIndex;
|
|
while (i >= 0) {
|
|
var type = classTypes[i];
|
|
if (type === SP) {
|
|
i--;
|
|
} else {
|
|
return type;
|
|
}
|
|
}
|
|
return 0;
|
|
};
|
|
var _lineBreakAtIndex = function(codePoints, classTypes, indicies, index, forbiddenBreaks) {
|
|
if (indicies[index] === 0) {
|
|
return BREAK_NOT_ALLOWED$1;
|
|
}
|
|
var currentIndex = index - 1;
|
|
if (Array.isArray(forbiddenBreaks) && forbiddenBreaks[currentIndex] === true) {
|
|
return BREAK_NOT_ALLOWED$1;
|
|
}
|
|
var beforeIndex = currentIndex - 1;
|
|
var afterIndex = currentIndex + 1;
|
|
var current = classTypes[currentIndex];
|
|
var before = beforeIndex >= 0 ? classTypes[beforeIndex] : 0;
|
|
var next = classTypes[afterIndex];
|
|
if (current === CR$1 && next === LF$1) {
|
|
return BREAK_NOT_ALLOWED$1;
|
|
}
|
|
if (HARD_LINE_BREAKS.indexOf(current) !== -1) {
|
|
return BREAK_MANDATORY;
|
|
}
|
|
if (HARD_LINE_BREAKS.indexOf(next) !== -1) {
|
|
return BREAK_NOT_ALLOWED$1;
|
|
}
|
|
if (SPACE$1.indexOf(next) !== -1) {
|
|
return BREAK_NOT_ALLOWED$1;
|
|
}
|
|
if (previousNonSpaceClassType(currentIndex, classTypes) === ZW) {
|
|
return BREAK_ALLOWED$1;
|
|
}
|
|
if (UnicodeTrie$1.get(codePoints[currentIndex]) === ZWJ$1) {
|
|
return BREAK_NOT_ALLOWED$1;
|
|
}
|
|
if ((current === EB || current === EM) && UnicodeTrie$1.get(codePoints[afterIndex]) === ZWJ$1) {
|
|
return BREAK_NOT_ALLOWED$1;
|
|
}
|
|
if (current === WJ || next === WJ) {
|
|
return BREAK_NOT_ALLOWED$1;
|
|
}
|
|
if (current === GL) {
|
|
return BREAK_NOT_ALLOWED$1;
|
|
}
|
|
if ([SP, BA, HY].indexOf(current) === -1 && next === GL) {
|
|
return BREAK_NOT_ALLOWED$1;
|
|
}
|
|
if ([CL, CP, EX, IS, SY].indexOf(next) !== -1) {
|
|
return BREAK_NOT_ALLOWED$1;
|
|
}
|
|
if (previousNonSpaceClassType(currentIndex, classTypes) === OP) {
|
|
return BREAK_NOT_ALLOWED$1;
|
|
}
|
|
if (isAdjacentWithSpaceIgnored(QU, OP, currentIndex, classTypes)) {
|
|
return BREAK_NOT_ALLOWED$1;
|
|
}
|
|
if (isAdjacentWithSpaceIgnored([CL, CP], NS, currentIndex, classTypes)) {
|
|
return BREAK_NOT_ALLOWED$1;
|
|
}
|
|
if (isAdjacentWithSpaceIgnored(B2, B2, currentIndex, classTypes)) {
|
|
return BREAK_NOT_ALLOWED$1;
|
|
}
|
|
if (current === SP) {
|
|
return BREAK_ALLOWED$1;
|
|
}
|
|
if (current === QU || next === QU) {
|
|
return BREAK_NOT_ALLOWED$1;
|
|
}
|
|
if (next === CB || current === CB) {
|
|
return BREAK_ALLOWED$1;
|
|
}
|
|
if ([BA, HY, NS].indexOf(next) !== -1 || current === BB) {
|
|
return BREAK_NOT_ALLOWED$1;
|
|
}
|
|
if (before === HL && HYPHEN.indexOf(current) !== -1) {
|
|
return BREAK_NOT_ALLOWED$1;
|
|
}
|
|
if (current === SY && next === HL) {
|
|
return BREAK_NOT_ALLOWED$1;
|
|
}
|
|
if (next === IN) {
|
|
return BREAK_NOT_ALLOWED$1;
|
|
}
|
|
if (ALPHABETICS.indexOf(next) !== -1 && current === NU || ALPHABETICS.indexOf(current) !== -1 && next === NU) {
|
|
return BREAK_NOT_ALLOWED$1;
|
|
}
|
|
if (current === PR && [ID, EB, EM].indexOf(next) !== -1 || [ID, EB, EM].indexOf(current) !== -1 && next === PO) {
|
|
return BREAK_NOT_ALLOWED$1;
|
|
}
|
|
if (ALPHABETICS.indexOf(current) !== -1 && PREFIX_POSTFIX.indexOf(next) !== -1 || PREFIX_POSTFIX.indexOf(current) !== -1 && ALPHABETICS.indexOf(next) !== -1) {
|
|
return BREAK_NOT_ALLOWED$1;
|
|
}
|
|
if (
|
|
// (PR | PO) × ( OP | HY )? NU
|
|
[PR, PO].indexOf(current) !== -1 && (next === NU || [OP, HY].indexOf(next) !== -1 && classTypes[afterIndex + 1] === NU) || // ( OP | HY ) × NU
|
|
[OP, HY].indexOf(current) !== -1 && next === NU || // NU × (NU | SY | IS)
|
|
current === NU && [NU, SY, IS].indexOf(next) !== -1
|
|
) {
|
|
return BREAK_NOT_ALLOWED$1;
|
|
}
|
|
if ([NU, SY, IS, CL, CP].indexOf(next) !== -1) {
|
|
var prevIndex = currentIndex;
|
|
while (prevIndex >= 0) {
|
|
var type = classTypes[prevIndex];
|
|
if (type === NU) {
|
|
return BREAK_NOT_ALLOWED$1;
|
|
} else if ([SY, IS].indexOf(type) !== -1) {
|
|
prevIndex--;
|
|
} else {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if ([PR, PO].indexOf(next) !== -1) {
|
|
var prevIndex = [CL, CP].indexOf(current) !== -1 ? beforeIndex : currentIndex;
|
|
while (prevIndex >= 0) {
|
|
var type = classTypes[prevIndex];
|
|
if (type === NU) {
|
|
return BREAK_NOT_ALLOWED$1;
|
|
} else if ([SY, IS].indexOf(type) !== -1) {
|
|
prevIndex--;
|
|
} else {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (JL === current && [JL, JV, H2, H3].indexOf(next) !== -1 || [JV, H2].indexOf(current) !== -1 && [JV, JT].indexOf(next) !== -1 || [JT, H3].indexOf(current) !== -1 && next === JT) {
|
|
return BREAK_NOT_ALLOWED$1;
|
|
}
|
|
if (KOREAN_SYLLABLE_BLOCK.indexOf(current) !== -1 && [IN, PO].indexOf(next) !== -1 || KOREAN_SYLLABLE_BLOCK.indexOf(next) !== -1 && current === PR) {
|
|
return BREAK_NOT_ALLOWED$1;
|
|
}
|
|
if (ALPHABETICS.indexOf(current) !== -1 && ALPHABETICS.indexOf(next) !== -1) {
|
|
return BREAK_NOT_ALLOWED$1;
|
|
}
|
|
if (current === IS && ALPHABETICS.indexOf(next) !== -1) {
|
|
return BREAK_NOT_ALLOWED$1;
|
|
}
|
|
if (ALPHABETICS.concat(NU).indexOf(current) !== -1 && next === OP && ea_OP.indexOf(codePoints[afterIndex]) === -1 || ALPHABETICS.concat(NU).indexOf(next) !== -1 && current === CP) {
|
|
return BREAK_NOT_ALLOWED$1;
|
|
}
|
|
if (current === RI$1 && next === RI$1) {
|
|
var i = indicies[currentIndex];
|
|
var count = 1;
|
|
while (i > 0) {
|
|
i--;
|
|
if (classTypes[i] === RI$1) {
|
|
count++;
|
|
} else {
|
|
break;
|
|
}
|
|
}
|
|
if (count % 2 !== 0) {
|
|
return BREAK_NOT_ALLOWED$1;
|
|
}
|
|
}
|
|
if (current === EB && next === EM) {
|
|
return BREAK_NOT_ALLOWED$1;
|
|
}
|
|
return BREAK_ALLOWED$1;
|
|
};
|
|
var cssFormattedClasses = function(codePoints, options) {
|
|
if (!options) {
|
|
options = { lineBreak: "normal", wordBreak: "normal" };
|
|
}
|
|
var _a2 = codePointsToCharacterClasses(codePoints, options.lineBreak), indicies = _a2[0], classTypes = _a2[1], isLetterNumber = _a2[2];
|
|
if (options.wordBreak === "break-all" || options.wordBreak === "break-word") {
|
|
classTypes = classTypes.map(function(type) {
|
|
return [NU, AL, SA].indexOf(type) !== -1 ? ID : type;
|
|
});
|
|
}
|
|
var forbiddenBreakpoints = options.wordBreak === "keep-all" ? isLetterNumber.map(function(letterNumber, i) {
|
|
return letterNumber && codePoints[i] >= 19968 && codePoints[i] <= 40959;
|
|
}) : void 0;
|
|
return [indicies, classTypes, forbiddenBreakpoints];
|
|
};
|
|
var Break = (
|
|
/** @class */
|
|
function() {
|
|
function Break2(codePoints, lineBreak2, start, end) {
|
|
this.codePoints = codePoints;
|
|
this.required = lineBreak2 === BREAK_MANDATORY;
|
|
this.start = start;
|
|
this.end = end;
|
|
}
|
|
Break2.prototype.slice = function() {
|
|
return fromCodePoint$1.apply(void 0, this.codePoints.slice(this.start, this.end));
|
|
};
|
|
return Break2;
|
|
}()
|
|
);
|
|
var LineBreaker = function(str, options) {
|
|
var codePoints = toCodePoints$1(str);
|
|
var _a2 = cssFormattedClasses(codePoints, options), indicies = _a2[0], classTypes = _a2[1], forbiddenBreakpoints = _a2[2];
|
|
var length = codePoints.length;
|
|
var lastEnd = 0;
|
|
var nextIndex = 0;
|
|
return {
|
|
next: function() {
|
|
if (nextIndex >= length) {
|
|
return { done: true, value: null };
|
|
}
|
|
var lineBreak2 = BREAK_NOT_ALLOWED$1;
|
|
while (nextIndex < length && (lineBreak2 = _lineBreakAtIndex(codePoints, classTypes, indicies, ++nextIndex, forbiddenBreakpoints)) === BREAK_NOT_ALLOWED$1) {
|
|
}
|
|
if (lineBreak2 !== BREAK_NOT_ALLOWED$1 || nextIndex === length) {
|
|
var value = new Break(codePoints, lineBreak2, lastEnd, nextIndex);
|
|
lastEnd = nextIndex;
|
|
return { value, done: false };
|
|
}
|
|
return { done: true, value: null };
|
|
}
|
|
};
|
|
};
|
|
var FLAG_UNRESTRICTED = 1 << 0;
|
|
var FLAG_ID = 1 << 1;
|
|
var FLAG_INTEGER = 1 << 2;
|
|
var FLAG_NUMBER = 1 << 3;
|
|
var LINE_FEED = 10;
|
|
var SOLIDUS = 47;
|
|
var REVERSE_SOLIDUS = 92;
|
|
var CHARACTER_TABULATION = 9;
|
|
var SPACE = 32;
|
|
var QUOTATION_MARK = 34;
|
|
var EQUALS_SIGN = 61;
|
|
var NUMBER_SIGN = 35;
|
|
var DOLLAR_SIGN = 36;
|
|
var PERCENTAGE_SIGN = 37;
|
|
var APOSTROPHE = 39;
|
|
var LEFT_PARENTHESIS = 40;
|
|
var RIGHT_PARENTHESIS = 41;
|
|
var LOW_LINE = 95;
|
|
var HYPHEN_MINUS = 45;
|
|
var EXCLAMATION_MARK = 33;
|
|
var LESS_THAN_SIGN = 60;
|
|
var GREATER_THAN_SIGN = 62;
|
|
var COMMERCIAL_AT = 64;
|
|
var LEFT_SQUARE_BRACKET = 91;
|
|
var RIGHT_SQUARE_BRACKET = 93;
|
|
var CIRCUMFLEX_ACCENT = 61;
|
|
var LEFT_CURLY_BRACKET = 123;
|
|
var QUESTION_MARK = 63;
|
|
var RIGHT_CURLY_BRACKET = 125;
|
|
var VERTICAL_LINE = 124;
|
|
var TILDE = 126;
|
|
var CONTROL = 128;
|
|
var REPLACEMENT_CHARACTER = 65533;
|
|
var ASTERISK = 42;
|
|
var PLUS_SIGN = 43;
|
|
var COMMA = 44;
|
|
var COLON = 58;
|
|
var SEMICOLON = 59;
|
|
var FULL_STOP = 46;
|
|
var NULL = 0;
|
|
var BACKSPACE = 8;
|
|
var LINE_TABULATION = 11;
|
|
var SHIFT_OUT = 14;
|
|
var INFORMATION_SEPARATOR_ONE = 31;
|
|
var DELETE = 127;
|
|
var EOF = -1;
|
|
var ZERO = 48;
|
|
var a = 97;
|
|
var e = 101;
|
|
var f = 102;
|
|
var u = 117;
|
|
var z = 122;
|
|
var A = 65;
|
|
var E = 69;
|
|
var F = 70;
|
|
var U = 85;
|
|
var Z = 90;
|
|
var isDigit = function(codePoint) {
|
|
return codePoint >= ZERO && codePoint <= 57;
|
|
};
|
|
var isSurrogateCodePoint = function(codePoint) {
|
|
return codePoint >= 55296 && codePoint <= 57343;
|
|
};
|
|
var isHex = function(codePoint) {
|
|
return isDigit(codePoint) || codePoint >= A && codePoint <= F || codePoint >= a && codePoint <= f;
|
|
};
|
|
var isLowerCaseLetter = function(codePoint) {
|
|
return codePoint >= a && codePoint <= z;
|
|
};
|
|
var isUpperCaseLetter = function(codePoint) {
|
|
return codePoint >= A && codePoint <= Z;
|
|
};
|
|
var isLetter = function(codePoint) {
|
|
return isLowerCaseLetter(codePoint) || isUpperCaseLetter(codePoint);
|
|
};
|
|
var isNonASCIICodePoint = function(codePoint) {
|
|
return codePoint >= CONTROL;
|
|
};
|
|
var isWhiteSpace = function(codePoint) {
|
|
return codePoint === LINE_FEED || codePoint === CHARACTER_TABULATION || codePoint === SPACE;
|
|
};
|
|
var isNameStartCodePoint = function(codePoint) {
|
|
return isLetter(codePoint) || isNonASCIICodePoint(codePoint) || codePoint === LOW_LINE;
|
|
};
|
|
var isNameCodePoint = function(codePoint) {
|
|
return isNameStartCodePoint(codePoint) || isDigit(codePoint) || codePoint === HYPHEN_MINUS;
|
|
};
|
|
var isNonPrintableCodePoint = function(codePoint) {
|
|
return codePoint >= NULL && codePoint <= BACKSPACE || codePoint === LINE_TABULATION || codePoint >= SHIFT_OUT && codePoint <= INFORMATION_SEPARATOR_ONE || codePoint === DELETE;
|
|
};
|
|
var isValidEscape = function(c1, c2) {
|
|
if (c1 !== REVERSE_SOLIDUS) {
|
|
return false;
|
|
}
|
|
return c2 !== LINE_FEED;
|
|
};
|
|
var isIdentifierStart = function(c1, c2, c3) {
|
|
if (c1 === HYPHEN_MINUS) {
|
|
return isNameStartCodePoint(c2) || isValidEscape(c2, c3);
|
|
} else if (isNameStartCodePoint(c1)) {
|
|
return true;
|
|
} else if (c1 === REVERSE_SOLIDUS && isValidEscape(c1, c2)) {
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
var isNumberStart = function(c1, c2, c3) {
|
|
if (c1 === PLUS_SIGN || c1 === HYPHEN_MINUS) {
|
|
if (isDigit(c2)) {
|
|
return true;
|
|
}
|
|
return c2 === FULL_STOP && isDigit(c3);
|
|
}
|
|
if (c1 === FULL_STOP) {
|
|
return isDigit(c2);
|
|
}
|
|
return isDigit(c1);
|
|
};
|
|
var stringToNumber = function(codePoints) {
|
|
var c = 0;
|
|
var sign = 1;
|
|
if (codePoints[c] === PLUS_SIGN || codePoints[c] === HYPHEN_MINUS) {
|
|
if (codePoints[c] === HYPHEN_MINUS) {
|
|
sign = -1;
|
|
}
|
|
c++;
|
|
}
|
|
var integers = [];
|
|
while (isDigit(codePoints[c])) {
|
|
integers.push(codePoints[c++]);
|
|
}
|
|
var int = integers.length ? parseInt(fromCodePoint$1.apply(void 0, integers), 10) : 0;
|
|
if (codePoints[c] === FULL_STOP) {
|
|
c++;
|
|
}
|
|
var fraction = [];
|
|
while (isDigit(codePoints[c])) {
|
|
fraction.push(codePoints[c++]);
|
|
}
|
|
var fracd = fraction.length;
|
|
var frac = fracd ? parseInt(fromCodePoint$1.apply(void 0, fraction), 10) : 0;
|
|
if (codePoints[c] === E || codePoints[c] === e) {
|
|
c++;
|
|
}
|
|
var expsign = 1;
|
|
if (codePoints[c] === PLUS_SIGN || codePoints[c] === HYPHEN_MINUS) {
|
|
if (codePoints[c] === HYPHEN_MINUS) {
|
|
expsign = -1;
|
|
}
|
|
c++;
|
|
}
|
|
var exponent = [];
|
|
while (isDigit(codePoints[c])) {
|
|
exponent.push(codePoints[c++]);
|
|
}
|
|
var exp = exponent.length ? parseInt(fromCodePoint$1.apply(void 0, exponent), 10) : 0;
|
|
return sign * (int + frac * Math.pow(10, -fracd)) * Math.pow(10, expsign * exp);
|
|
};
|
|
var LEFT_PARENTHESIS_TOKEN = {
|
|
type: 2
|
|
/* LEFT_PARENTHESIS_TOKEN */
|
|
};
|
|
var RIGHT_PARENTHESIS_TOKEN = {
|
|
type: 3
|
|
/* RIGHT_PARENTHESIS_TOKEN */
|
|
};
|
|
var COMMA_TOKEN = {
|
|
type: 4
|
|
/* COMMA_TOKEN */
|
|
};
|
|
var SUFFIX_MATCH_TOKEN = {
|
|
type: 13
|
|
/* SUFFIX_MATCH_TOKEN */
|
|
};
|
|
var PREFIX_MATCH_TOKEN = {
|
|
type: 8
|
|
/* PREFIX_MATCH_TOKEN */
|
|
};
|
|
var COLUMN_TOKEN = {
|
|
type: 21
|
|
/* COLUMN_TOKEN */
|
|
};
|
|
var DASH_MATCH_TOKEN = {
|
|
type: 9
|
|
/* DASH_MATCH_TOKEN */
|
|
};
|
|
var INCLUDE_MATCH_TOKEN = {
|
|
type: 10
|
|
/* INCLUDE_MATCH_TOKEN */
|
|
};
|
|
var LEFT_CURLY_BRACKET_TOKEN = {
|
|
type: 11
|
|
/* LEFT_CURLY_BRACKET_TOKEN */
|
|
};
|
|
var RIGHT_CURLY_BRACKET_TOKEN = {
|
|
type: 12
|
|
/* RIGHT_CURLY_BRACKET_TOKEN */
|
|
};
|
|
var SUBSTRING_MATCH_TOKEN = {
|
|
type: 14
|
|
/* SUBSTRING_MATCH_TOKEN */
|
|
};
|
|
var BAD_URL_TOKEN = {
|
|
type: 23
|
|
/* BAD_URL_TOKEN */
|
|
};
|
|
var BAD_STRING_TOKEN = {
|
|
type: 1
|
|
/* BAD_STRING_TOKEN */
|
|
};
|
|
var CDO_TOKEN = {
|
|
type: 25
|
|
/* CDO_TOKEN */
|
|
};
|
|
var CDC_TOKEN = {
|
|
type: 24
|
|
/* CDC_TOKEN */
|
|
};
|
|
var COLON_TOKEN = {
|
|
type: 26
|
|
/* COLON_TOKEN */
|
|
};
|
|
var SEMICOLON_TOKEN = {
|
|
type: 27
|
|
/* SEMICOLON_TOKEN */
|
|
};
|
|
var LEFT_SQUARE_BRACKET_TOKEN = {
|
|
type: 28
|
|
/* LEFT_SQUARE_BRACKET_TOKEN */
|
|
};
|
|
var RIGHT_SQUARE_BRACKET_TOKEN = {
|
|
type: 29
|
|
/* RIGHT_SQUARE_BRACKET_TOKEN */
|
|
};
|
|
var WHITESPACE_TOKEN = {
|
|
type: 31
|
|
/* WHITESPACE_TOKEN */
|
|
};
|
|
var EOF_TOKEN = {
|
|
type: 32
|
|
/* EOF_TOKEN */
|
|
};
|
|
var Tokenizer = (
|
|
/** @class */
|
|
function() {
|
|
function Tokenizer2() {
|
|
this._value = [];
|
|
}
|
|
Tokenizer2.prototype.write = function(chunk) {
|
|
this._value = this._value.concat(toCodePoints$1(chunk));
|
|
};
|
|
Tokenizer2.prototype.read = function() {
|
|
var tokens = [];
|
|
var token = this.consumeToken();
|
|
while (token !== EOF_TOKEN) {
|
|
tokens.push(token);
|
|
token = this.consumeToken();
|
|
}
|
|
return tokens;
|
|
};
|
|
Tokenizer2.prototype.consumeToken = function() {
|
|
var codePoint = this.consumeCodePoint();
|
|
switch (codePoint) {
|
|
case QUOTATION_MARK:
|
|
return this.consumeStringToken(QUOTATION_MARK);
|
|
case NUMBER_SIGN:
|
|
var c1 = this.peekCodePoint(0);
|
|
var c2 = this.peekCodePoint(1);
|
|
var c3 = this.peekCodePoint(2);
|
|
if (isNameCodePoint(c1) || isValidEscape(c2, c3)) {
|
|
var flags = isIdentifierStart(c1, c2, c3) ? FLAG_ID : FLAG_UNRESTRICTED;
|
|
var value = this.consumeName();
|
|
return { type: 5, value, flags };
|
|
}
|
|
break;
|
|
case DOLLAR_SIGN:
|
|
if (this.peekCodePoint(0) === EQUALS_SIGN) {
|
|
this.consumeCodePoint();
|
|
return SUFFIX_MATCH_TOKEN;
|
|
}
|
|
break;
|
|
case APOSTROPHE:
|
|
return this.consumeStringToken(APOSTROPHE);
|
|
case LEFT_PARENTHESIS:
|
|
return LEFT_PARENTHESIS_TOKEN;
|
|
case RIGHT_PARENTHESIS:
|
|
return RIGHT_PARENTHESIS_TOKEN;
|
|
case ASTERISK:
|
|
if (this.peekCodePoint(0) === EQUALS_SIGN) {
|
|
this.consumeCodePoint();
|
|
return SUBSTRING_MATCH_TOKEN;
|
|
}
|
|
break;
|
|
case PLUS_SIGN:
|
|
if (isNumberStart(codePoint, this.peekCodePoint(0), this.peekCodePoint(1))) {
|
|
this.reconsumeCodePoint(codePoint);
|
|
return this.consumeNumericToken();
|
|
}
|
|
break;
|
|
case COMMA:
|
|
return COMMA_TOKEN;
|
|
case HYPHEN_MINUS:
|
|
var e1 = codePoint;
|
|
var e2 = this.peekCodePoint(0);
|
|
var e3 = this.peekCodePoint(1);
|
|
if (isNumberStart(e1, e2, e3)) {
|
|
this.reconsumeCodePoint(codePoint);
|
|
return this.consumeNumericToken();
|
|
}
|
|
if (isIdentifierStart(e1, e2, e3)) {
|
|
this.reconsumeCodePoint(codePoint);
|
|
return this.consumeIdentLikeToken();
|
|
}
|
|
if (e2 === HYPHEN_MINUS && e3 === GREATER_THAN_SIGN) {
|
|
this.consumeCodePoint();
|
|
this.consumeCodePoint();
|
|
return CDC_TOKEN;
|
|
}
|
|
break;
|
|
case FULL_STOP:
|
|
if (isNumberStart(codePoint, this.peekCodePoint(0), this.peekCodePoint(1))) {
|
|
this.reconsumeCodePoint(codePoint);
|
|
return this.consumeNumericToken();
|
|
}
|
|
break;
|
|
case SOLIDUS:
|
|
if (this.peekCodePoint(0) === ASTERISK) {
|
|
this.consumeCodePoint();
|
|
while (true) {
|
|
var c = this.consumeCodePoint();
|
|
if (c === ASTERISK) {
|
|
c = this.consumeCodePoint();
|
|
if (c === SOLIDUS) {
|
|
return this.consumeToken();
|
|
}
|
|
}
|
|
if (c === EOF) {
|
|
return this.consumeToken();
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case COLON:
|
|
return COLON_TOKEN;
|
|
case SEMICOLON:
|
|
return SEMICOLON_TOKEN;
|
|
case LESS_THAN_SIGN:
|
|
if (this.peekCodePoint(0) === EXCLAMATION_MARK && this.peekCodePoint(1) === HYPHEN_MINUS && this.peekCodePoint(2) === HYPHEN_MINUS) {
|
|
this.consumeCodePoint();
|
|
this.consumeCodePoint();
|
|
return CDO_TOKEN;
|
|
}
|
|
break;
|
|
case COMMERCIAL_AT:
|
|
var a1 = this.peekCodePoint(0);
|
|
var a2 = this.peekCodePoint(1);
|
|
var a3 = this.peekCodePoint(2);
|
|
if (isIdentifierStart(a1, a2, a3)) {
|
|
var value = this.consumeName();
|
|
return { type: 7, value };
|
|
}
|
|
break;
|
|
case LEFT_SQUARE_BRACKET:
|
|
return LEFT_SQUARE_BRACKET_TOKEN;
|
|
case REVERSE_SOLIDUS:
|
|
if (isValidEscape(codePoint, this.peekCodePoint(0))) {
|
|
this.reconsumeCodePoint(codePoint);
|
|
return this.consumeIdentLikeToken();
|
|
}
|
|
break;
|
|
case RIGHT_SQUARE_BRACKET:
|
|
return RIGHT_SQUARE_BRACKET_TOKEN;
|
|
case CIRCUMFLEX_ACCENT:
|
|
if (this.peekCodePoint(0) === EQUALS_SIGN) {
|
|
this.consumeCodePoint();
|
|
return PREFIX_MATCH_TOKEN;
|
|
}
|
|
break;
|
|
case LEFT_CURLY_BRACKET:
|
|
return LEFT_CURLY_BRACKET_TOKEN;
|
|
case RIGHT_CURLY_BRACKET:
|
|
return RIGHT_CURLY_BRACKET_TOKEN;
|
|
case u:
|
|
case U:
|
|
var u1 = this.peekCodePoint(0);
|
|
var u2 = this.peekCodePoint(1);
|
|
if (u1 === PLUS_SIGN && (isHex(u2) || u2 === QUESTION_MARK)) {
|
|
this.consumeCodePoint();
|
|
this.consumeUnicodeRangeToken();
|
|
}
|
|
this.reconsumeCodePoint(codePoint);
|
|
return this.consumeIdentLikeToken();
|
|
case VERTICAL_LINE:
|
|
if (this.peekCodePoint(0) === EQUALS_SIGN) {
|
|
this.consumeCodePoint();
|
|
return DASH_MATCH_TOKEN;
|
|
}
|
|
if (this.peekCodePoint(0) === VERTICAL_LINE) {
|
|
this.consumeCodePoint();
|
|
return COLUMN_TOKEN;
|
|
}
|
|
break;
|
|
case TILDE:
|
|
if (this.peekCodePoint(0) === EQUALS_SIGN) {
|
|
this.consumeCodePoint();
|
|
return INCLUDE_MATCH_TOKEN;
|
|
}
|
|
break;
|
|
case EOF:
|
|
return EOF_TOKEN;
|
|
}
|
|
if (isWhiteSpace(codePoint)) {
|
|
this.consumeWhiteSpace();
|
|
return WHITESPACE_TOKEN;
|
|
}
|
|
if (isDigit(codePoint)) {
|
|
this.reconsumeCodePoint(codePoint);
|
|
return this.consumeNumericToken();
|
|
}
|
|
if (isNameStartCodePoint(codePoint)) {
|
|
this.reconsumeCodePoint(codePoint);
|
|
return this.consumeIdentLikeToken();
|
|
}
|
|
return { type: 6, value: fromCodePoint$1(codePoint) };
|
|
};
|
|
Tokenizer2.prototype.consumeCodePoint = function() {
|
|
var value = this._value.shift();
|
|
return typeof value === "undefined" ? -1 : value;
|
|
};
|
|
Tokenizer2.prototype.reconsumeCodePoint = function(codePoint) {
|
|
this._value.unshift(codePoint);
|
|
};
|
|
Tokenizer2.prototype.peekCodePoint = function(delta) {
|
|
if (delta >= this._value.length) {
|
|
return -1;
|
|
}
|
|
return this._value[delta];
|
|
};
|
|
Tokenizer2.prototype.consumeUnicodeRangeToken = function() {
|
|
var digits = [];
|
|
var codePoint = this.consumeCodePoint();
|
|
while (isHex(codePoint) && digits.length < 6) {
|
|
digits.push(codePoint);
|
|
codePoint = this.consumeCodePoint();
|
|
}
|
|
var questionMarks = false;
|
|
while (codePoint === QUESTION_MARK && digits.length < 6) {
|
|
digits.push(codePoint);
|
|
codePoint = this.consumeCodePoint();
|
|
questionMarks = true;
|
|
}
|
|
if (questionMarks) {
|
|
var start_1 = parseInt(fromCodePoint$1.apply(void 0, digits.map(function(digit) {
|
|
return digit === QUESTION_MARK ? ZERO : digit;
|
|
})), 16);
|
|
var end = parseInt(fromCodePoint$1.apply(void 0, digits.map(function(digit) {
|
|
return digit === QUESTION_MARK ? F : digit;
|
|
})), 16);
|
|
return { type: 30, start: start_1, end };
|
|
}
|
|
var start = parseInt(fromCodePoint$1.apply(void 0, digits), 16);
|
|
if (this.peekCodePoint(0) === HYPHEN_MINUS && isHex(this.peekCodePoint(1))) {
|
|
this.consumeCodePoint();
|
|
codePoint = this.consumeCodePoint();
|
|
var endDigits = [];
|
|
while (isHex(codePoint) && endDigits.length < 6) {
|
|
endDigits.push(codePoint);
|
|
codePoint = this.consumeCodePoint();
|
|
}
|
|
var end = parseInt(fromCodePoint$1.apply(void 0, endDigits), 16);
|
|
return { type: 30, start, end };
|
|
} else {
|
|
return { type: 30, start, end: start };
|
|
}
|
|
};
|
|
Tokenizer2.prototype.consumeIdentLikeToken = function() {
|
|
var value = this.consumeName();
|
|
if (value.toLowerCase() === "url" && this.peekCodePoint(0) === LEFT_PARENTHESIS) {
|
|
this.consumeCodePoint();
|
|
return this.consumeUrlToken();
|
|
} else if (this.peekCodePoint(0) === LEFT_PARENTHESIS) {
|
|
this.consumeCodePoint();
|
|
return { type: 19, value };
|
|
}
|
|
return { type: 20, value };
|
|
};
|
|
Tokenizer2.prototype.consumeUrlToken = function() {
|
|
var value = [];
|
|
this.consumeWhiteSpace();
|
|
if (this.peekCodePoint(0) === EOF) {
|
|
return { type: 22, value: "" };
|
|
}
|
|
var next = this.peekCodePoint(0);
|
|
if (next === APOSTROPHE || next === QUOTATION_MARK) {
|
|
var stringToken = this.consumeStringToken(this.consumeCodePoint());
|
|
if (stringToken.type === 0) {
|
|
this.consumeWhiteSpace();
|
|
if (this.peekCodePoint(0) === EOF || this.peekCodePoint(0) === RIGHT_PARENTHESIS) {
|
|
this.consumeCodePoint();
|
|
return { type: 22, value: stringToken.value };
|
|
}
|
|
}
|
|
this.consumeBadUrlRemnants();
|
|
return BAD_URL_TOKEN;
|
|
}
|
|
while (true) {
|
|
var codePoint = this.consumeCodePoint();
|
|
if (codePoint === EOF || codePoint === RIGHT_PARENTHESIS) {
|
|
return { type: 22, value: fromCodePoint$1.apply(void 0, value) };
|
|
} else if (isWhiteSpace(codePoint)) {
|
|
this.consumeWhiteSpace();
|
|
if (this.peekCodePoint(0) === EOF || this.peekCodePoint(0) === RIGHT_PARENTHESIS) {
|
|
this.consumeCodePoint();
|
|
return { type: 22, value: fromCodePoint$1.apply(void 0, value) };
|
|
}
|
|
this.consumeBadUrlRemnants();
|
|
return BAD_URL_TOKEN;
|
|
} else if (codePoint === QUOTATION_MARK || codePoint === APOSTROPHE || codePoint === LEFT_PARENTHESIS || isNonPrintableCodePoint(codePoint)) {
|
|
this.consumeBadUrlRemnants();
|
|
return BAD_URL_TOKEN;
|
|
} else if (codePoint === REVERSE_SOLIDUS) {
|
|
if (isValidEscape(codePoint, this.peekCodePoint(0))) {
|
|
value.push(this.consumeEscapedCodePoint());
|
|
} else {
|
|
this.consumeBadUrlRemnants();
|
|
return BAD_URL_TOKEN;
|
|
}
|
|
} else {
|
|
value.push(codePoint);
|
|
}
|
|
}
|
|
};
|
|
Tokenizer2.prototype.consumeWhiteSpace = function() {
|
|
while (isWhiteSpace(this.peekCodePoint(0))) {
|
|
this.consumeCodePoint();
|
|
}
|
|
};
|
|
Tokenizer2.prototype.consumeBadUrlRemnants = function() {
|
|
while (true) {
|
|
var codePoint = this.consumeCodePoint();
|
|
if (codePoint === RIGHT_PARENTHESIS || codePoint === EOF) {
|
|
return;
|
|
}
|
|
if (isValidEscape(codePoint, this.peekCodePoint(0))) {
|
|
this.consumeEscapedCodePoint();
|
|
}
|
|
}
|
|
};
|
|
Tokenizer2.prototype.consumeStringSlice = function(count) {
|
|
var SLICE_STACK_SIZE = 5e4;
|
|
var value = "";
|
|
while (count > 0) {
|
|
var amount = Math.min(SLICE_STACK_SIZE, count);
|
|
value += fromCodePoint$1.apply(void 0, this._value.splice(0, amount));
|
|
count -= amount;
|
|
}
|
|
this._value.shift();
|
|
return value;
|
|
};
|
|
Tokenizer2.prototype.consumeStringToken = function(endingCodePoint) {
|
|
var value = "";
|
|
var i = 0;
|
|
do {
|
|
var codePoint = this._value[i];
|
|
if (codePoint === EOF || codePoint === void 0 || codePoint === endingCodePoint) {
|
|
value += this.consumeStringSlice(i);
|
|
return { type: 0, value };
|
|
}
|
|
if (codePoint === LINE_FEED) {
|
|
this._value.splice(0, i);
|
|
return BAD_STRING_TOKEN;
|
|
}
|
|
if (codePoint === REVERSE_SOLIDUS) {
|
|
var next = this._value[i + 1];
|
|
if (next !== EOF && next !== void 0) {
|
|
if (next === LINE_FEED) {
|
|
value += this.consumeStringSlice(i);
|
|
i = -1;
|
|
this._value.shift();
|
|
} else if (isValidEscape(codePoint, next)) {
|
|
value += this.consumeStringSlice(i);
|
|
value += fromCodePoint$1(this.consumeEscapedCodePoint());
|
|
i = -1;
|
|
}
|
|
}
|
|
}
|
|
i++;
|
|
} while (true);
|
|
};
|
|
Tokenizer2.prototype.consumeNumber = function() {
|
|
var repr = [];
|
|
var type = FLAG_INTEGER;
|
|
var c1 = this.peekCodePoint(0);
|
|
if (c1 === PLUS_SIGN || c1 === HYPHEN_MINUS) {
|
|
repr.push(this.consumeCodePoint());
|
|
}
|
|
while (isDigit(this.peekCodePoint(0))) {
|
|
repr.push(this.consumeCodePoint());
|
|
}
|
|
c1 = this.peekCodePoint(0);
|
|
var c2 = this.peekCodePoint(1);
|
|
if (c1 === FULL_STOP && isDigit(c2)) {
|
|
repr.push(this.consumeCodePoint(), this.consumeCodePoint());
|
|
type = FLAG_NUMBER;
|
|
while (isDigit(this.peekCodePoint(0))) {
|
|
repr.push(this.consumeCodePoint());
|
|
}
|
|
}
|
|
c1 = this.peekCodePoint(0);
|
|
c2 = this.peekCodePoint(1);
|
|
var c3 = this.peekCodePoint(2);
|
|
if ((c1 === E || c1 === e) && ((c2 === PLUS_SIGN || c2 === HYPHEN_MINUS) && isDigit(c3) || isDigit(c2))) {
|
|
repr.push(this.consumeCodePoint(), this.consumeCodePoint());
|
|
type = FLAG_NUMBER;
|
|
while (isDigit(this.peekCodePoint(0))) {
|
|
repr.push(this.consumeCodePoint());
|
|
}
|
|
}
|
|
return [stringToNumber(repr), type];
|
|
};
|
|
Tokenizer2.prototype.consumeNumericToken = function() {
|
|
var _a2 = this.consumeNumber(), number = _a2[0], flags = _a2[1];
|
|
var c1 = this.peekCodePoint(0);
|
|
var c2 = this.peekCodePoint(1);
|
|
var c3 = this.peekCodePoint(2);
|
|
if (isIdentifierStart(c1, c2, c3)) {
|
|
var unit = this.consumeName();
|
|
return { type: 15, number, flags, unit };
|
|
}
|
|
if (c1 === PERCENTAGE_SIGN) {
|
|
this.consumeCodePoint();
|
|
return { type: 16, number, flags };
|
|
}
|
|
return { type: 17, number, flags };
|
|
};
|
|
Tokenizer2.prototype.consumeEscapedCodePoint = function() {
|
|
var codePoint = this.consumeCodePoint();
|
|
if (isHex(codePoint)) {
|
|
var hex = fromCodePoint$1(codePoint);
|
|
while (isHex(this.peekCodePoint(0)) && hex.length < 6) {
|
|
hex += fromCodePoint$1(this.consumeCodePoint());
|
|
}
|
|
if (isWhiteSpace(this.peekCodePoint(0))) {
|
|
this.consumeCodePoint();
|
|
}
|
|
var hexCodePoint = parseInt(hex, 16);
|
|
if (hexCodePoint === 0 || isSurrogateCodePoint(hexCodePoint) || hexCodePoint > 1114111) {
|
|
return REPLACEMENT_CHARACTER;
|
|
}
|
|
return hexCodePoint;
|
|
}
|
|
if (codePoint === EOF) {
|
|
return REPLACEMENT_CHARACTER;
|
|
}
|
|
return codePoint;
|
|
};
|
|
Tokenizer2.prototype.consumeName = function() {
|
|
var result = "";
|
|
while (true) {
|
|
var codePoint = this.consumeCodePoint();
|
|
if (isNameCodePoint(codePoint)) {
|
|
result += fromCodePoint$1(codePoint);
|
|
} else if (isValidEscape(codePoint, this.peekCodePoint(0))) {
|
|
result += fromCodePoint$1(this.consumeEscapedCodePoint());
|
|
} else {
|
|
this.reconsumeCodePoint(codePoint);
|
|
return result;
|
|
}
|
|
}
|
|
};
|
|
return Tokenizer2;
|
|
}()
|
|
);
|
|
var Parser = (
|
|
/** @class */
|
|
function() {
|
|
function Parser2(tokens) {
|
|
this._tokens = tokens;
|
|
}
|
|
Parser2.create = function(value) {
|
|
var tokenizer = new Tokenizer();
|
|
tokenizer.write(value);
|
|
return new Parser2(tokenizer.read());
|
|
};
|
|
Parser2.parseValue = function(value) {
|
|
return Parser2.create(value).parseComponentValue();
|
|
};
|
|
Parser2.parseValues = function(value) {
|
|
return Parser2.create(value).parseComponentValues();
|
|
};
|
|
Parser2.prototype.parseComponentValue = function() {
|
|
var token = this.consumeToken();
|
|
while (token.type === 31) {
|
|
token = this.consumeToken();
|
|
}
|
|
if (token.type === 32) {
|
|
throw new SyntaxError("Error parsing CSS component value, unexpected EOF");
|
|
}
|
|
this.reconsumeToken(token);
|
|
var value = this.consumeComponentValue();
|
|
do {
|
|
token = this.consumeToken();
|
|
} while (token.type === 31);
|
|
if (token.type === 32) {
|
|
return value;
|
|
}
|
|
throw new SyntaxError("Error parsing CSS component value, multiple values found when expecting only one");
|
|
};
|
|
Parser2.prototype.parseComponentValues = function() {
|
|
var values = [];
|
|
while (true) {
|
|
var value = this.consumeComponentValue();
|
|
if (value.type === 32) {
|
|
return values;
|
|
}
|
|
values.push(value);
|
|
values.push();
|
|
}
|
|
};
|
|
Parser2.prototype.consumeComponentValue = function() {
|
|
var token = this.consumeToken();
|
|
switch (token.type) {
|
|
case 11:
|
|
case 28:
|
|
case 2:
|
|
return this.consumeSimpleBlock(token.type);
|
|
case 19:
|
|
return this.consumeFunction(token);
|
|
}
|
|
return token;
|
|
};
|
|
Parser2.prototype.consumeSimpleBlock = function(type) {
|
|
var block = { type, values: [] };
|
|
var token = this.consumeToken();
|
|
while (true) {
|
|
if (token.type === 32 || isEndingTokenFor(token, type)) {
|
|
return block;
|
|
}
|
|
this.reconsumeToken(token);
|
|
block.values.push(this.consumeComponentValue());
|
|
token = this.consumeToken();
|
|
}
|
|
};
|
|
Parser2.prototype.consumeFunction = function(functionToken) {
|
|
var cssFunction = {
|
|
name: functionToken.value,
|
|
values: [],
|
|
type: 18
|
|
/* FUNCTION */
|
|
};
|
|
while (true) {
|
|
var token = this.consumeToken();
|
|
if (token.type === 32 || token.type === 3) {
|
|
return cssFunction;
|
|
}
|
|
this.reconsumeToken(token);
|
|
cssFunction.values.push(this.consumeComponentValue());
|
|
}
|
|
};
|
|
Parser2.prototype.consumeToken = function() {
|
|
var token = this._tokens.shift();
|
|
return typeof token === "undefined" ? EOF_TOKEN : token;
|
|
};
|
|
Parser2.prototype.reconsumeToken = function(token) {
|
|
this._tokens.unshift(token);
|
|
};
|
|
return Parser2;
|
|
}()
|
|
);
|
|
var isDimensionToken = function(token) {
|
|
return token.type === 15;
|
|
};
|
|
var isNumberToken = function(token) {
|
|
return token.type === 17;
|
|
};
|
|
var isIdentToken = function(token) {
|
|
return token.type === 20;
|
|
};
|
|
var isIdentWithValue = function(token, value) {
|
|
return isIdentToken(token) && token.value === value;
|
|
};
|
|
var nonFunctionArgSeparator = function(token) {
|
|
return token.type !== 31 && token.type !== 4;
|
|
};
|
|
var parseFunctionArgs = function(tokens) {
|
|
var args = [];
|
|
var arg = [];
|
|
tokens.forEach(function(token) {
|
|
if (token.type === 4) {
|
|
if (arg.length === 0) {
|
|
throw new Error("Error parsing function args, zero tokens for arg");
|
|
}
|
|
args.push(arg);
|
|
arg = [];
|
|
return;
|
|
}
|
|
if (token.type !== 31) {
|
|
arg.push(token);
|
|
}
|
|
});
|
|
if (arg.length) {
|
|
args.push(arg);
|
|
}
|
|
return args;
|
|
};
|
|
var isEndingTokenFor = function(token, type) {
|
|
if (type === 11 && token.type === 12) {
|
|
return true;
|
|
}
|
|
if (type === 28 && token.type === 29) {
|
|
return true;
|
|
}
|
|
return type === 2 && token.type === 3;
|
|
};
|
|
var isLength = function(token) {
|
|
return token.type === 17 || token.type === 15;
|
|
};
|
|
var isLengthPercentage = function(token) {
|
|
return token.type === 16 || isLength(token);
|
|
};
|
|
var parseLengthPercentageTuple = function(tokens) {
|
|
return tokens.length > 1 ? [tokens[0], tokens[1]] : [tokens[0]];
|
|
};
|
|
var ZERO_LENGTH = {
|
|
type: 17,
|
|
number: 0,
|
|
flags: FLAG_INTEGER
|
|
};
|
|
var FIFTY_PERCENT = {
|
|
type: 16,
|
|
number: 50,
|
|
flags: FLAG_INTEGER
|
|
};
|
|
var HUNDRED_PERCENT = {
|
|
type: 16,
|
|
number: 100,
|
|
flags: FLAG_INTEGER
|
|
};
|
|
var getAbsoluteValueForTuple = function(tuple, width, height) {
|
|
var x = tuple[0], y = tuple[1];
|
|
return [getAbsoluteValue(x, width), getAbsoluteValue(typeof y !== "undefined" ? y : x, height)];
|
|
};
|
|
var getAbsoluteValue = function(token, parent) {
|
|
if (token.type === 16) {
|
|
return token.number / 100 * parent;
|
|
}
|
|
if (isDimensionToken(token)) {
|
|
switch (token.unit) {
|
|
case "rem":
|
|
case "em":
|
|
return 16 * token.number;
|
|
// TODO use correct font-size
|
|
case "px":
|
|
default:
|
|
return token.number;
|
|
}
|
|
}
|
|
return token.number;
|
|
};
|
|
var DEG = "deg";
|
|
var GRAD = "grad";
|
|
var RAD = "rad";
|
|
var TURN = "turn";
|
|
var angle = {
|
|
name: "angle",
|
|
parse: function(_context, value) {
|
|
if (value.type === 15) {
|
|
switch (value.unit) {
|
|
case DEG:
|
|
return Math.PI * value.number / 180;
|
|
case GRAD:
|
|
return Math.PI / 200 * value.number;
|
|
case RAD:
|
|
return value.number;
|
|
case TURN:
|
|
return Math.PI * 2 * value.number;
|
|
}
|
|
}
|
|
throw new Error("Unsupported angle type");
|
|
}
|
|
};
|
|
var isAngle = function(value) {
|
|
if (value.type === 15) {
|
|
if (value.unit === DEG || value.unit === GRAD || value.unit === RAD || value.unit === TURN) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
};
|
|
var parseNamedSide = function(tokens) {
|
|
var sideOrCorner = tokens.filter(isIdentToken).map(function(ident) {
|
|
return ident.value;
|
|
}).join(" ");
|
|
switch (sideOrCorner) {
|
|
case "to bottom right":
|
|
case "to right bottom":
|
|
case "left top":
|
|
case "top left":
|
|
return [ZERO_LENGTH, ZERO_LENGTH];
|
|
case "to top":
|
|
case "bottom":
|
|
return deg(0);
|
|
case "to bottom left":
|
|
case "to left bottom":
|
|
case "right top":
|
|
case "top right":
|
|
return [ZERO_LENGTH, HUNDRED_PERCENT];
|
|
case "to right":
|
|
case "left":
|
|
return deg(90);
|
|
case "to top left":
|
|
case "to left top":
|
|
case "right bottom":
|
|
case "bottom right":
|
|
return [HUNDRED_PERCENT, HUNDRED_PERCENT];
|
|
case "to bottom":
|
|
case "top":
|
|
return deg(180);
|
|
case "to top right":
|
|
case "to right top":
|
|
case "left bottom":
|
|
case "bottom left":
|
|
return [HUNDRED_PERCENT, ZERO_LENGTH];
|
|
case "to left":
|
|
case "right":
|
|
return deg(270);
|
|
}
|
|
return 0;
|
|
};
|
|
var deg = function(deg2) {
|
|
return Math.PI * deg2 / 180;
|
|
};
|
|
var color$1 = {
|
|
name: "color",
|
|
parse: function(context, value) {
|
|
if (value.type === 18) {
|
|
var colorFunction = SUPPORTED_COLOR_FUNCTIONS[value.name];
|
|
if (typeof colorFunction === "undefined") {
|
|
throw new Error('Attempting to parse an unsupported color function "' + value.name + '"');
|
|
}
|
|
return colorFunction(context, value.values);
|
|
}
|
|
if (value.type === 5) {
|
|
if (value.value.length === 3) {
|
|
var r = value.value.substring(0, 1);
|
|
var g = value.value.substring(1, 2);
|
|
var b = value.value.substring(2, 3);
|
|
return pack(parseInt(r + r, 16), parseInt(g + g, 16), parseInt(b + b, 16), 1);
|
|
}
|
|
if (value.value.length === 4) {
|
|
var r = value.value.substring(0, 1);
|
|
var g = value.value.substring(1, 2);
|
|
var b = value.value.substring(2, 3);
|
|
var a2 = value.value.substring(3, 4);
|
|
return pack(parseInt(r + r, 16), parseInt(g + g, 16), parseInt(b + b, 16), parseInt(a2 + a2, 16) / 255);
|
|
}
|
|
if (value.value.length === 6) {
|
|
var r = value.value.substring(0, 2);
|
|
var g = value.value.substring(2, 4);
|
|
var b = value.value.substring(4, 6);
|
|
return pack(parseInt(r, 16), parseInt(g, 16), parseInt(b, 16), 1);
|
|
}
|
|
if (value.value.length === 8) {
|
|
var r = value.value.substring(0, 2);
|
|
var g = value.value.substring(2, 4);
|
|
var b = value.value.substring(4, 6);
|
|
var a2 = value.value.substring(6, 8);
|
|
return pack(parseInt(r, 16), parseInt(g, 16), parseInt(b, 16), parseInt(a2, 16) / 255);
|
|
}
|
|
}
|
|
if (value.type === 20) {
|
|
var namedColor = COLORS[value.value.toUpperCase()];
|
|
if (typeof namedColor !== "undefined") {
|
|
return namedColor;
|
|
}
|
|
}
|
|
return COLORS.TRANSPARENT;
|
|
}
|
|
};
|
|
var isTransparent = function(color2) {
|
|
return (255 & color2) === 0;
|
|
};
|
|
var asString = function(color2) {
|
|
var alpha = 255 & color2;
|
|
var blue = 255 & color2 >> 8;
|
|
var green = 255 & color2 >> 16;
|
|
var red = 255 & color2 >> 24;
|
|
return alpha < 255 ? "rgba(" + red + "," + green + "," + blue + "," + alpha / 255 + ")" : "rgb(" + red + "," + green + "," + blue + ")";
|
|
};
|
|
var pack = function(r, g, b, a2) {
|
|
return (r << 24 | g << 16 | b << 8 | Math.round(a2 * 255) << 0) >>> 0;
|
|
};
|
|
var getTokenColorValue = function(token, i) {
|
|
if (token.type === 17) {
|
|
return token.number;
|
|
}
|
|
if (token.type === 16) {
|
|
var max = i === 3 ? 1 : 255;
|
|
return i === 3 ? token.number / 100 * max : Math.round(token.number / 100 * max);
|
|
}
|
|
return 0;
|
|
};
|
|
var rgb = function(_context, args) {
|
|
var tokens = args.filter(nonFunctionArgSeparator);
|
|
if (tokens.length === 3) {
|
|
var _a2 = tokens.map(getTokenColorValue), r = _a2[0], g = _a2[1], b = _a2[2];
|
|
return pack(r, g, b, 1);
|
|
}
|
|
if (tokens.length === 4) {
|
|
var _b2 = tokens.map(getTokenColorValue), r = _b2[0], g = _b2[1], b = _b2[2], a2 = _b2[3];
|
|
return pack(r, g, b, a2);
|
|
}
|
|
return 0;
|
|
};
|
|
function hue2rgb(t1, t2, hue) {
|
|
if (hue < 0) {
|
|
hue += 1;
|
|
}
|
|
if (hue >= 1) {
|
|
hue -= 1;
|
|
}
|
|
if (hue < 1 / 6) {
|
|
return (t2 - t1) * hue * 6 + t1;
|
|
} else if (hue < 1 / 2) {
|
|
return t2;
|
|
} else if (hue < 2 / 3) {
|
|
return (t2 - t1) * 6 * (2 / 3 - hue) + t1;
|
|
} else {
|
|
return t1;
|
|
}
|
|
}
|
|
var hsl = function(context, args) {
|
|
var tokens = args.filter(nonFunctionArgSeparator);
|
|
var hue = tokens[0], saturation = tokens[1], lightness = tokens[2], alpha = tokens[3];
|
|
var h = (hue.type === 17 ? deg(hue.number) : angle.parse(context, hue)) / (Math.PI * 2);
|
|
var s = isLengthPercentage(saturation) ? saturation.number / 100 : 0;
|
|
var l = isLengthPercentage(lightness) ? lightness.number / 100 : 0;
|
|
var a2 = typeof alpha !== "undefined" && isLengthPercentage(alpha) ? getAbsoluteValue(alpha, 1) : 1;
|
|
if (s === 0) {
|
|
return pack(l * 255, l * 255, l * 255, 1);
|
|
}
|
|
var t2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;
|
|
var t1 = l * 2 - t2;
|
|
var r = hue2rgb(t1, t2, h + 1 / 3);
|
|
var g = hue2rgb(t1, t2, h);
|
|
var b = hue2rgb(t1, t2, h - 1 / 3);
|
|
return pack(r * 255, g * 255, b * 255, a2);
|
|
};
|
|
var SUPPORTED_COLOR_FUNCTIONS = {
|
|
hsl,
|
|
hsla: hsl,
|
|
rgb,
|
|
rgba: rgb
|
|
};
|
|
var parseColor = function(context, value) {
|
|
return color$1.parse(context, Parser.create(value).parseComponentValue());
|
|
};
|
|
var COLORS = {
|
|
ALICEBLUE: 4042850303,
|
|
ANTIQUEWHITE: 4209760255,
|
|
AQUA: 16777215,
|
|
AQUAMARINE: 2147472639,
|
|
AZURE: 4043309055,
|
|
BEIGE: 4126530815,
|
|
BISQUE: 4293182719,
|
|
BLACK: 255,
|
|
BLANCHEDALMOND: 4293643775,
|
|
BLUE: 65535,
|
|
BLUEVIOLET: 2318131967,
|
|
BROWN: 2771004159,
|
|
BURLYWOOD: 3736635391,
|
|
CADETBLUE: 1604231423,
|
|
CHARTREUSE: 2147418367,
|
|
CHOCOLATE: 3530104575,
|
|
CORAL: 4286533887,
|
|
CORNFLOWERBLUE: 1687547391,
|
|
CORNSILK: 4294499583,
|
|
CRIMSON: 3692313855,
|
|
CYAN: 16777215,
|
|
DARKBLUE: 35839,
|
|
DARKCYAN: 9145343,
|
|
DARKGOLDENROD: 3095837695,
|
|
DARKGRAY: 2846468607,
|
|
DARKGREEN: 6553855,
|
|
DARKGREY: 2846468607,
|
|
DARKKHAKI: 3182914559,
|
|
DARKMAGENTA: 2332068863,
|
|
DARKOLIVEGREEN: 1433087999,
|
|
DARKORANGE: 4287365375,
|
|
DARKORCHID: 2570243327,
|
|
DARKRED: 2332033279,
|
|
DARKSALMON: 3918953215,
|
|
DARKSEAGREEN: 2411499519,
|
|
DARKSLATEBLUE: 1211993087,
|
|
DARKSLATEGRAY: 793726975,
|
|
DARKSLATEGREY: 793726975,
|
|
DARKTURQUOISE: 13554175,
|
|
DARKVIOLET: 2483082239,
|
|
DEEPPINK: 4279538687,
|
|
DEEPSKYBLUE: 12582911,
|
|
DIMGRAY: 1768516095,
|
|
DIMGREY: 1768516095,
|
|
DODGERBLUE: 512819199,
|
|
FIREBRICK: 2988581631,
|
|
FLORALWHITE: 4294635775,
|
|
FORESTGREEN: 579543807,
|
|
FUCHSIA: 4278255615,
|
|
GAINSBORO: 3705462015,
|
|
GHOSTWHITE: 4177068031,
|
|
GOLD: 4292280575,
|
|
GOLDENROD: 3668254975,
|
|
GRAY: 2155905279,
|
|
GREEN: 8388863,
|
|
GREENYELLOW: 2919182335,
|
|
GREY: 2155905279,
|
|
HONEYDEW: 4043305215,
|
|
HOTPINK: 4285117695,
|
|
INDIANRED: 3445382399,
|
|
INDIGO: 1258324735,
|
|
IVORY: 4294963455,
|
|
KHAKI: 4041641215,
|
|
LAVENDER: 3873897215,
|
|
LAVENDERBLUSH: 4293981695,
|
|
LAWNGREEN: 2096890111,
|
|
LEMONCHIFFON: 4294626815,
|
|
LIGHTBLUE: 2916673279,
|
|
LIGHTCORAL: 4034953471,
|
|
LIGHTCYAN: 3774873599,
|
|
LIGHTGOLDENRODYELLOW: 4210742015,
|
|
LIGHTGRAY: 3553874943,
|
|
LIGHTGREEN: 2431553791,
|
|
LIGHTGREY: 3553874943,
|
|
LIGHTPINK: 4290167295,
|
|
LIGHTSALMON: 4288707327,
|
|
LIGHTSEAGREEN: 548580095,
|
|
LIGHTSKYBLUE: 2278488831,
|
|
LIGHTSLATEGRAY: 2005441023,
|
|
LIGHTSLATEGREY: 2005441023,
|
|
LIGHTSTEELBLUE: 2965692159,
|
|
LIGHTYELLOW: 4294959359,
|
|
LIME: 16711935,
|
|
LIMEGREEN: 852308735,
|
|
LINEN: 4210091775,
|
|
MAGENTA: 4278255615,
|
|
MAROON: 2147483903,
|
|
MEDIUMAQUAMARINE: 1724754687,
|
|
MEDIUMBLUE: 52735,
|
|
MEDIUMORCHID: 3126187007,
|
|
MEDIUMPURPLE: 2473647103,
|
|
MEDIUMSEAGREEN: 1018393087,
|
|
MEDIUMSLATEBLUE: 2070474495,
|
|
MEDIUMSPRINGGREEN: 16423679,
|
|
MEDIUMTURQUOISE: 1221709055,
|
|
MEDIUMVIOLETRED: 3340076543,
|
|
MIDNIGHTBLUE: 421097727,
|
|
MINTCREAM: 4127193855,
|
|
MISTYROSE: 4293190143,
|
|
MOCCASIN: 4293178879,
|
|
NAVAJOWHITE: 4292783615,
|
|
NAVY: 33023,
|
|
OLDLACE: 4260751103,
|
|
OLIVE: 2155872511,
|
|
OLIVEDRAB: 1804477439,
|
|
ORANGE: 4289003775,
|
|
ORANGERED: 4282712319,
|
|
ORCHID: 3664828159,
|
|
PALEGOLDENROD: 4008225535,
|
|
PALEGREEN: 2566625535,
|
|
PALETURQUOISE: 2951671551,
|
|
PALEVIOLETRED: 3681588223,
|
|
PAPAYAWHIP: 4293907967,
|
|
PEACHPUFF: 4292524543,
|
|
PERU: 3448061951,
|
|
PINK: 4290825215,
|
|
PLUM: 3718307327,
|
|
POWDERBLUE: 2967529215,
|
|
PURPLE: 2147516671,
|
|
REBECCAPURPLE: 1714657791,
|
|
RED: 4278190335,
|
|
ROSYBROWN: 3163525119,
|
|
ROYALBLUE: 1097458175,
|
|
SADDLEBROWN: 2336560127,
|
|
SALMON: 4202722047,
|
|
SANDYBROWN: 4104413439,
|
|
SEAGREEN: 780883967,
|
|
SEASHELL: 4294307583,
|
|
SIENNA: 2689740287,
|
|
SILVER: 3233857791,
|
|
SKYBLUE: 2278484991,
|
|
SLATEBLUE: 1784335871,
|
|
SLATEGRAY: 1887473919,
|
|
SLATEGREY: 1887473919,
|
|
SNOW: 4294638335,
|
|
SPRINGGREEN: 16744447,
|
|
STEELBLUE: 1182971135,
|
|
TAN: 3535047935,
|
|
TEAL: 8421631,
|
|
THISTLE: 3636451583,
|
|
TOMATO: 4284696575,
|
|
TRANSPARENT: 0,
|
|
TURQUOISE: 1088475391,
|
|
VIOLET: 4001558271,
|
|
WHEAT: 4125012991,
|
|
WHITE: 4294967295,
|
|
WHITESMOKE: 4126537215,
|
|
YELLOW: 4294902015,
|
|
YELLOWGREEN: 2597139199
|
|
};
|
|
var backgroundClip = {
|
|
name: "background-clip",
|
|
initialValue: "border-box",
|
|
prefix: false,
|
|
type: 1,
|
|
parse: function(_context, tokens) {
|
|
return tokens.map(function(token) {
|
|
if (isIdentToken(token)) {
|
|
switch (token.value) {
|
|
case "padding-box":
|
|
return 1;
|
|
case "content-box":
|
|
return 2;
|
|
}
|
|
}
|
|
return 0;
|
|
});
|
|
}
|
|
};
|
|
var backgroundColor = {
|
|
name: "background-color",
|
|
initialValue: "transparent",
|
|
prefix: false,
|
|
type: 3,
|
|
format: "color"
|
|
};
|
|
var parseColorStop = function(context, args) {
|
|
var color2 = color$1.parse(context, args[0]);
|
|
var stop = args[1];
|
|
return stop && isLengthPercentage(stop) ? { color: color2, stop } : { color: color2, stop: null };
|
|
};
|
|
var processColorStops = function(stops, lineLength) {
|
|
var first = stops[0];
|
|
var last = stops[stops.length - 1];
|
|
if (first.stop === null) {
|
|
first.stop = ZERO_LENGTH;
|
|
}
|
|
if (last.stop === null) {
|
|
last.stop = HUNDRED_PERCENT;
|
|
}
|
|
var processStops = [];
|
|
var previous = 0;
|
|
for (var i = 0; i < stops.length; i++) {
|
|
var stop_1 = stops[i].stop;
|
|
if (stop_1 !== null) {
|
|
var absoluteValue = getAbsoluteValue(stop_1, lineLength);
|
|
if (absoluteValue > previous) {
|
|
processStops.push(absoluteValue);
|
|
} else {
|
|
processStops.push(previous);
|
|
}
|
|
previous = absoluteValue;
|
|
} else {
|
|
processStops.push(null);
|
|
}
|
|
}
|
|
var gapBegin = null;
|
|
for (var i = 0; i < processStops.length; i++) {
|
|
var stop_2 = processStops[i];
|
|
if (stop_2 === null) {
|
|
if (gapBegin === null) {
|
|
gapBegin = i;
|
|
}
|
|
} else if (gapBegin !== null) {
|
|
var gapLength = i - gapBegin;
|
|
var beforeGap = processStops[gapBegin - 1];
|
|
var gapValue = (stop_2 - beforeGap) / (gapLength + 1);
|
|
for (var g = 1; g <= gapLength; g++) {
|
|
processStops[gapBegin + g - 1] = gapValue * g;
|
|
}
|
|
gapBegin = null;
|
|
}
|
|
}
|
|
return stops.map(function(_a2, i2) {
|
|
var color2 = _a2.color;
|
|
return { color: color2, stop: Math.max(Math.min(1, processStops[i2] / lineLength), 0) };
|
|
});
|
|
};
|
|
var getAngleFromCorner = function(corner, width, height) {
|
|
var centerX = width / 2;
|
|
var centerY = height / 2;
|
|
var x = getAbsoluteValue(corner[0], width) - centerX;
|
|
var y = centerY - getAbsoluteValue(corner[1], height);
|
|
return (Math.atan2(y, x) + Math.PI * 2) % (Math.PI * 2);
|
|
};
|
|
var calculateGradientDirection = function(angle2, width, height) {
|
|
var radian = typeof angle2 === "number" ? angle2 : getAngleFromCorner(angle2, width, height);
|
|
var lineLength = Math.abs(width * Math.sin(radian)) + Math.abs(height * Math.cos(radian));
|
|
var halfWidth = width / 2;
|
|
var halfHeight = height / 2;
|
|
var halfLineLength = lineLength / 2;
|
|
var yDiff = Math.sin(radian - Math.PI / 2) * halfLineLength;
|
|
var xDiff = Math.cos(radian - Math.PI / 2) * halfLineLength;
|
|
return [lineLength, halfWidth - xDiff, halfWidth + xDiff, halfHeight - yDiff, halfHeight + yDiff];
|
|
};
|
|
var distance = function(a2, b) {
|
|
return Math.sqrt(a2 * a2 + b * b);
|
|
};
|
|
var findCorner = function(width, height, x, y, closest) {
|
|
var corners = [
|
|
[0, 0],
|
|
[0, height],
|
|
[width, 0],
|
|
[width, height]
|
|
];
|
|
return corners.reduce(function(stat, corner) {
|
|
var cx = corner[0], cy = corner[1];
|
|
var d = distance(x - cx, y - cy);
|
|
if (closest ? d < stat.optimumDistance : d > stat.optimumDistance) {
|
|
return {
|
|
optimumCorner: corner,
|
|
optimumDistance: d
|
|
};
|
|
}
|
|
return stat;
|
|
}, {
|
|
optimumDistance: closest ? Infinity : -Infinity,
|
|
optimumCorner: null
|
|
}).optimumCorner;
|
|
};
|
|
var calculateRadius = function(gradient, x, y, width, height) {
|
|
var rx = 0;
|
|
var ry = 0;
|
|
switch (gradient.size) {
|
|
case 0:
|
|
if (gradient.shape === 0) {
|
|
rx = ry = Math.min(Math.abs(x), Math.abs(x - width), Math.abs(y), Math.abs(y - height));
|
|
} else if (gradient.shape === 1) {
|
|
rx = Math.min(Math.abs(x), Math.abs(x - width));
|
|
ry = Math.min(Math.abs(y), Math.abs(y - height));
|
|
}
|
|
break;
|
|
case 2:
|
|
if (gradient.shape === 0) {
|
|
rx = ry = Math.min(distance(x, y), distance(x, y - height), distance(x - width, y), distance(x - width, y - height));
|
|
} else if (gradient.shape === 1) {
|
|
var c = Math.min(Math.abs(y), Math.abs(y - height)) / Math.min(Math.abs(x), Math.abs(x - width));
|
|
var _a2 = findCorner(width, height, x, y, true), cx = _a2[0], cy = _a2[1];
|
|
rx = distance(cx - x, (cy - y) / c);
|
|
ry = c * rx;
|
|
}
|
|
break;
|
|
case 1:
|
|
if (gradient.shape === 0) {
|
|
rx = ry = Math.max(Math.abs(x), Math.abs(x - width), Math.abs(y), Math.abs(y - height));
|
|
} else if (gradient.shape === 1) {
|
|
rx = Math.max(Math.abs(x), Math.abs(x - width));
|
|
ry = Math.max(Math.abs(y), Math.abs(y - height));
|
|
}
|
|
break;
|
|
case 3:
|
|
if (gradient.shape === 0) {
|
|
rx = ry = Math.max(distance(x, y), distance(x, y - height), distance(x - width, y), distance(x - width, y - height));
|
|
} else if (gradient.shape === 1) {
|
|
var c = Math.max(Math.abs(y), Math.abs(y - height)) / Math.max(Math.abs(x), Math.abs(x - width));
|
|
var _b2 = findCorner(width, height, x, y, false), cx = _b2[0], cy = _b2[1];
|
|
rx = distance(cx - x, (cy - y) / c);
|
|
ry = c * rx;
|
|
}
|
|
break;
|
|
}
|
|
if (Array.isArray(gradient.size)) {
|
|
rx = getAbsoluteValue(gradient.size[0], width);
|
|
ry = gradient.size.length === 2 ? getAbsoluteValue(gradient.size[1], height) : rx;
|
|
}
|
|
return [rx, ry];
|
|
};
|
|
var linearGradient = function(context, tokens) {
|
|
var angle$1 = deg(180);
|
|
var stops = [];
|
|
parseFunctionArgs(tokens).forEach(function(arg, i) {
|
|
if (i === 0) {
|
|
var firstToken = arg[0];
|
|
if (firstToken.type === 20 && firstToken.value === "to") {
|
|
angle$1 = parseNamedSide(arg);
|
|
return;
|
|
} else if (isAngle(firstToken)) {
|
|
angle$1 = angle.parse(context, firstToken);
|
|
return;
|
|
}
|
|
}
|
|
var colorStop = parseColorStop(context, arg);
|
|
stops.push(colorStop);
|
|
});
|
|
return {
|
|
angle: angle$1,
|
|
stops,
|
|
type: 1
|
|
/* LINEAR_GRADIENT */
|
|
};
|
|
};
|
|
var prefixLinearGradient = function(context, tokens) {
|
|
var angle$1 = deg(180);
|
|
var stops = [];
|
|
parseFunctionArgs(tokens).forEach(function(arg, i) {
|
|
if (i === 0) {
|
|
var firstToken = arg[0];
|
|
if (firstToken.type === 20 && ["top", "left", "right", "bottom"].indexOf(firstToken.value) !== -1) {
|
|
angle$1 = parseNamedSide(arg);
|
|
return;
|
|
} else if (isAngle(firstToken)) {
|
|
angle$1 = (angle.parse(context, firstToken) + deg(270)) % deg(360);
|
|
return;
|
|
}
|
|
}
|
|
var colorStop = parseColorStop(context, arg);
|
|
stops.push(colorStop);
|
|
});
|
|
return {
|
|
angle: angle$1,
|
|
stops,
|
|
type: 1
|
|
/* LINEAR_GRADIENT */
|
|
};
|
|
};
|
|
var webkitGradient = function(context, tokens) {
|
|
var angle2 = deg(180);
|
|
var stops = [];
|
|
var type = 1;
|
|
var shape = 0;
|
|
var size = 3;
|
|
var position2 = [];
|
|
parseFunctionArgs(tokens).forEach(function(arg, i) {
|
|
var firstToken = arg[0];
|
|
if (i === 0) {
|
|
if (isIdentToken(firstToken) && firstToken.value === "linear") {
|
|
type = 1;
|
|
return;
|
|
} else if (isIdentToken(firstToken) && firstToken.value === "radial") {
|
|
type = 2;
|
|
return;
|
|
}
|
|
}
|
|
if (firstToken.type === 18) {
|
|
if (firstToken.name === "from") {
|
|
var color2 = color$1.parse(context, firstToken.values[0]);
|
|
stops.push({ stop: ZERO_LENGTH, color: color2 });
|
|
} else if (firstToken.name === "to") {
|
|
var color2 = color$1.parse(context, firstToken.values[0]);
|
|
stops.push({ stop: HUNDRED_PERCENT, color: color2 });
|
|
} else if (firstToken.name === "color-stop") {
|
|
var values = firstToken.values.filter(nonFunctionArgSeparator);
|
|
if (values.length === 2) {
|
|
var color2 = color$1.parse(context, values[1]);
|
|
var stop_1 = values[0];
|
|
if (isNumberToken(stop_1)) {
|
|
stops.push({
|
|
stop: { type: 16, number: stop_1.number * 100, flags: stop_1.flags },
|
|
color: color2
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
});
|
|
return type === 1 ? {
|
|
angle: (angle2 + deg(180)) % deg(360),
|
|
stops,
|
|
type
|
|
} : { size, shape, stops, position: position2, type };
|
|
};
|
|
var CLOSEST_SIDE = "closest-side";
|
|
var FARTHEST_SIDE = "farthest-side";
|
|
var CLOSEST_CORNER = "closest-corner";
|
|
var FARTHEST_CORNER = "farthest-corner";
|
|
var CIRCLE = "circle";
|
|
var ELLIPSE = "ellipse";
|
|
var COVER = "cover";
|
|
var CONTAIN = "contain";
|
|
var radialGradient = function(context, tokens) {
|
|
var shape = 0;
|
|
var size = 3;
|
|
var stops = [];
|
|
var position2 = [];
|
|
parseFunctionArgs(tokens).forEach(function(arg, i) {
|
|
var isColorStop = true;
|
|
if (i === 0) {
|
|
var isAtPosition_1 = false;
|
|
isColorStop = arg.reduce(function(acc, token) {
|
|
if (isAtPosition_1) {
|
|
if (isIdentToken(token)) {
|
|
switch (token.value) {
|
|
case "center":
|
|
position2.push(FIFTY_PERCENT);
|
|
return acc;
|
|
case "top":
|
|
case "left":
|
|
position2.push(ZERO_LENGTH);
|
|
return acc;
|
|
case "right":
|
|
case "bottom":
|
|
position2.push(HUNDRED_PERCENT);
|
|
return acc;
|
|
}
|
|
} else if (isLengthPercentage(token) || isLength(token)) {
|
|
position2.push(token);
|
|
}
|
|
} else if (isIdentToken(token)) {
|
|
switch (token.value) {
|
|
case CIRCLE:
|
|
shape = 0;
|
|
return false;
|
|
case ELLIPSE:
|
|
shape = 1;
|
|
return false;
|
|
case "at":
|
|
isAtPosition_1 = true;
|
|
return false;
|
|
case CLOSEST_SIDE:
|
|
size = 0;
|
|
return false;
|
|
case COVER:
|
|
case FARTHEST_SIDE:
|
|
size = 1;
|
|
return false;
|
|
case CONTAIN:
|
|
case CLOSEST_CORNER:
|
|
size = 2;
|
|
return false;
|
|
case FARTHEST_CORNER:
|
|
size = 3;
|
|
return false;
|
|
}
|
|
} else if (isLength(token) || isLengthPercentage(token)) {
|
|
if (!Array.isArray(size)) {
|
|
size = [];
|
|
}
|
|
size.push(token);
|
|
return false;
|
|
}
|
|
return acc;
|
|
}, isColorStop);
|
|
}
|
|
if (isColorStop) {
|
|
var colorStop = parseColorStop(context, arg);
|
|
stops.push(colorStop);
|
|
}
|
|
});
|
|
return {
|
|
size,
|
|
shape,
|
|
stops,
|
|
position: position2,
|
|
type: 2
|
|
/* RADIAL_GRADIENT */
|
|
};
|
|
};
|
|
var prefixRadialGradient = function(context, tokens) {
|
|
var shape = 0;
|
|
var size = 3;
|
|
var stops = [];
|
|
var position2 = [];
|
|
parseFunctionArgs(tokens).forEach(function(arg, i) {
|
|
var isColorStop = true;
|
|
if (i === 0) {
|
|
isColorStop = arg.reduce(function(acc, token) {
|
|
if (isIdentToken(token)) {
|
|
switch (token.value) {
|
|
case "center":
|
|
position2.push(FIFTY_PERCENT);
|
|
return false;
|
|
case "top":
|
|
case "left":
|
|
position2.push(ZERO_LENGTH);
|
|
return false;
|
|
case "right":
|
|
case "bottom":
|
|
position2.push(HUNDRED_PERCENT);
|
|
return false;
|
|
}
|
|
} else if (isLengthPercentage(token) || isLength(token)) {
|
|
position2.push(token);
|
|
return false;
|
|
}
|
|
return acc;
|
|
}, isColorStop);
|
|
} else if (i === 1) {
|
|
isColorStop = arg.reduce(function(acc, token) {
|
|
if (isIdentToken(token)) {
|
|
switch (token.value) {
|
|
case CIRCLE:
|
|
shape = 0;
|
|
return false;
|
|
case ELLIPSE:
|
|
shape = 1;
|
|
return false;
|
|
case CONTAIN:
|
|
case CLOSEST_SIDE:
|
|
size = 0;
|
|
return false;
|
|
case FARTHEST_SIDE:
|
|
size = 1;
|
|
return false;
|
|
case CLOSEST_CORNER:
|
|
size = 2;
|
|
return false;
|
|
case COVER:
|
|
case FARTHEST_CORNER:
|
|
size = 3;
|
|
return false;
|
|
}
|
|
} else if (isLength(token) || isLengthPercentage(token)) {
|
|
if (!Array.isArray(size)) {
|
|
size = [];
|
|
}
|
|
size.push(token);
|
|
return false;
|
|
}
|
|
return acc;
|
|
}, isColorStop);
|
|
}
|
|
if (isColorStop) {
|
|
var colorStop = parseColorStop(context, arg);
|
|
stops.push(colorStop);
|
|
}
|
|
});
|
|
return {
|
|
size,
|
|
shape,
|
|
stops,
|
|
position: position2,
|
|
type: 2
|
|
/* RADIAL_GRADIENT */
|
|
};
|
|
};
|
|
var isLinearGradient = function(background) {
|
|
return background.type === 1;
|
|
};
|
|
var isRadialGradient = function(background) {
|
|
return background.type === 2;
|
|
};
|
|
var image = {
|
|
name: "image",
|
|
parse: function(context, value) {
|
|
if (value.type === 22) {
|
|
var image_1 = {
|
|
url: value.value,
|
|
type: 0
|
|
/* URL */
|
|
};
|
|
context.cache.addImage(value.value);
|
|
return image_1;
|
|
}
|
|
if (value.type === 18) {
|
|
var imageFunction = SUPPORTED_IMAGE_FUNCTIONS[value.name];
|
|
if (typeof imageFunction === "undefined") {
|
|
throw new Error('Attempting to parse an unsupported image function "' + value.name + '"');
|
|
}
|
|
return imageFunction(context, value.values);
|
|
}
|
|
throw new Error("Unsupported image type " + value.type);
|
|
}
|
|
};
|
|
function isSupportedImage(value) {
|
|
return !(value.type === 20 && value.value === "none") && (value.type !== 18 || !!SUPPORTED_IMAGE_FUNCTIONS[value.name]);
|
|
}
|
|
var SUPPORTED_IMAGE_FUNCTIONS = {
|
|
"linear-gradient": linearGradient,
|
|
"-moz-linear-gradient": prefixLinearGradient,
|
|
"-ms-linear-gradient": prefixLinearGradient,
|
|
"-o-linear-gradient": prefixLinearGradient,
|
|
"-webkit-linear-gradient": prefixLinearGradient,
|
|
"radial-gradient": radialGradient,
|
|
"-moz-radial-gradient": prefixRadialGradient,
|
|
"-ms-radial-gradient": prefixRadialGradient,
|
|
"-o-radial-gradient": prefixRadialGradient,
|
|
"-webkit-radial-gradient": prefixRadialGradient,
|
|
"-webkit-gradient": webkitGradient
|
|
};
|
|
var backgroundImage = {
|
|
name: "background-image",
|
|
initialValue: "none",
|
|
type: 1,
|
|
prefix: false,
|
|
parse: function(context, tokens) {
|
|
if (tokens.length === 0) {
|
|
return [];
|
|
}
|
|
var first = tokens[0];
|
|
if (first.type === 20 && first.value === "none") {
|
|
return [];
|
|
}
|
|
return tokens.filter(function(value) {
|
|
return nonFunctionArgSeparator(value) && isSupportedImage(value);
|
|
}).map(function(value) {
|
|
return image.parse(context, value);
|
|
});
|
|
}
|
|
};
|
|
var backgroundOrigin = {
|
|
name: "background-origin",
|
|
initialValue: "border-box",
|
|
prefix: false,
|
|
type: 1,
|
|
parse: function(_context, tokens) {
|
|
return tokens.map(function(token) {
|
|
if (isIdentToken(token)) {
|
|
switch (token.value) {
|
|
case "padding-box":
|
|
return 1;
|
|
case "content-box":
|
|
return 2;
|
|
}
|
|
}
|
|
return 0;
|
|
});
|
|
}
|
|
};
|
|
var backgroundPosition = {
|
|
name: "background-position",
|
|
initialValue: "0% 0%",
|
|
type: 1,
|
|
prefix: false,
|
|
parse: function(_context, tokens) {
|
|
return parseFunctionArgs(tokens).map(function(values) {
|
|
return values.filter(isLengthPercentage);
|
|
}).map(parseLengthPercentageTuple);
|
|
}
|
|
};
|
|
var backgroundRepeat = {
|
|
name: "background-repeat",
|
|
initialValue: "repeat",
|
|
prefix: false,
|
|
type: 1,
|
|
parse: function(_context, tokens) {
|
|
return parseFunctionArgs(tokens).map(function(values) {
|
|
return values.filter(isIdentToken).map(function(token) {
|
|
return token.value;
|
|
}).join(" ");
|
|
}).map(parseBackgroundRepeat);
|
|
}
|
|
};
|
|
var parseBackgroundRepeat = function(value) {
|
|
switch (value) {
|
|
case "no-repeat":
|
|
return 1;
|
|
case "repeat-x":
|
|
case "repeat no-repeat":
|
|
return 2;
|
|
case "repeat-y":
|
|
case "no-repeat repeat":
|
|
return 3;
|
|
case "repeat":
|
|
default:
|
|
return 0;
|
|
}
|
|
};
|
|
var BACKGROUND_SIZE;
|
|
(function(BACKGROUND_SIZE2) {
|
|
BACKGROUND_SIZE2["AUTO"] = "auto";
|
|
BACKGROUND_SIZE2["CONTAIN"] = "contain";
|
|
BACKGROUND_SIZE2["COVER"] = "cover";
|
|
})(BACKGROUND_SIZE || (BACKGROUND_SIZE = {}));
|
|
var backgroundSize = {
|
|
name: "background-size",
|
|
initialValue: "0",
|
|
prefix: false,
|
|
type: 1,
|
|
parse: function(_context, tokens) {
|
|
return parseFunctionArgs(tokens).map(function(values) {
|
|
return values.filter(isBackgroundSizeInfoToken);
|
|
});
|
|
}
|
|
};
|
|
var isBackgroundSizeInfoToken = function(value) {
|
|
return isIdentToken(value) || isLengthPercentage(value);
|
|
};
|
|
var borderColorForSide = function(side) {
|
|
return {
|
|
name: "border-" + side + "-color",
|
|
initialValue: "transparent",
|
|
prefix: false,
|
|
type: 3,
|
|
format: "color"
|
|
};
|
|
};
|
|
var borderTopColor = borderColorForSide("top");
|
|
var borderRightColor = borderColorForSide("right");
|
|
var borderBottomColor = borderColorForSide("bottom");
|
|
var borderLeftColor = borderColorForSide("left");
|
|
var borderRadiusForSide = function(side) {
|
|
return {
|
|
name: "border-radius-" + side,
|
|
initialValue: "0 0",
|
|
prefix: false,
|
|
type: 1,
|
|
parse: function(_context, tokens) {
|
|
return parseLengthPercentageTuple(tokens.filter(isLengthPercentage));
|
|
}
|
|
};
|
|
};
|
|
var borderTopLeftRadius = borderRadiusForSide("top-left");
|
|
var borderTopRightRadius = borderRadiusForSide("top-right");
|
|
var borderBottomRightRadius = borderRadiusForSide("bottom-right");
|
|
var borderBottomLeftRadius = borderRadiusForSide("bottom-left");
|
|
var borderStyleForSide = function(side) {
|
|
return {
|
|
name: "border-" + side + "-style",
|
|
initialValue: "solid",
|
|
prefix: false,
|
|
type: 2,
|
|
parse: function(_context, style2) {
|
|
switch (style2) {
|
|
case "none":
|
|
return 0;
|
|
case "dashed":
|
|
return 2;
|
|
case "dotted":
|
|
return 3;
|
|
case "double":
|
|
return 4;
|
|
}
|
|
return 1;
|
|
}
|
|
};
|
|
};
|
|
var borderTopStyle = borderStyleForSide("top");
|
|
var borderRightStyle = borderStyleForSide("right");
|
|
var borderBottomStyle = borderStyleForSide("bottom");
|
|
var borderLeftStyle = borderStyleForSide("left");
|
|
var borderWidthForSide = function(side) {
|
|
return {
|
|
name: "border-" + side + "-width",
|
|
initialValue: "0",
|
|
type: 0,
|
|
prefix: false,
|
|
parse: function(_context, token) {
|
|
if (isDimensionToken(token)) {
|
|
return token.number;
|
|
}
|
|
return 0;
|
|
}
|
|
};
|
|
};
|
|
var borderTopWidth = borderWidthForSide("top");
|
|
var borderRightWidth = borderWidthForSide("right");
|
|
var borderBottomWidth = borderWidthForSide("bottom");
|
|
var borderLeftWidth = borderWidthForSide("left");
|
|
var color = {
|
|
name: "color",
|
|
initialValue: "transparent",
|
|
prefix: false,
|
|
type: 3,
|
|
format: "color"
|
|
};
|
|
var direction = {
|
|
name: "direction",
|
|
initialValue: "ltr",
|
|
prefix: false,
|
|
type: 2,
|
|
parse: function(_context, direction2) {
|
|
switch (direction2) {
|
|
case "rtl":
|
|
return 1;
|
|
case "ltr":
|
|
default:
|
|
return 0;
|
|
}
|
|
}
|
|
};
|
|
var display = {
|
|
name: "display",
|
|
initialValue: "inline-block",
|
|
prefix: false,
|
|
type: 1,
|
|
parse: function(_context, tokens) {
|
|
return tokens.filter(isIdentToken).reduce(
|
|
function(bit, token) {
|
|
return bit | parseDisplayValue(token.value);
|
|
},
|
|
0
|
|
/* NONE */
|
|
);
|
|
}
|
|
};
|
|
var parseDisplayValue = function(display2) {
|
|
switch (display2) {
|
|
case "block":
|
|
case "-webkit-box":
|
|
return 2;
|
|
case "inline":
|
|
return 4;
|
|
case "run-in":
|
|
return 8;
|
|
case "flow":
|
|
return 16;
|
|
case "flow-root":
|
|
return 32;
|
|
case "table":
|
|
return 64;
|
|
case "flex":
|
|
case "-webkit-flex":
|
|
return 128;
|
|
case "grid":
|
|
case "-ms-grid":
|
|
return 256;
|
|
case "ruby":
|
|
return 512;
|
|
case "subgrid":
|
|
return 1024;
|
|
case "list-item":
|
|
return 2048;
|
|
case "table-row-group":
|
|
return 4096;
|
|
case "table-header-group":
|
|
return 8192;
|
|
case "table-footer-group":
|
|
return 16384;
|
|
case "table-row":
|
|
return 32768;
|
|
case "table-cell":
|
|
return 65536;
|
|
case "table-column-group":
|
|
return 131072;
|
|
case "table-column":
|
|
return 262144;
|
|
case "table-caption":
|
|
return 524288;
|
|
case "ruby-base":
|
|
return 1048576;
|
|
case "ruby-text":
|
|
return 2097152;
|
|
case "ruby-base-container":
|
|
return 4194304;
|
|
case "ruby-text-container":
|
|
return 8388608;
|
|
case "contents":
|
|
return 16777216;
|
|
case "inline-block":
|
|
return 33554432;
|
|
case "inline-list-item":
|
|
return 67108864;
|
|
case "inline-table":
|
|
return 134217728;
|
|
case "inline-flex":
|
|
return 268435456;
|
|
case "inline-grid":
|
|
return 536870912;
|
|
}
|
|
return 0;
|
|
};
|
|
var float = {
|
|
name: "float",
|
|
initialValue: "none",
|
|
prefix: false,
|
|
type: 2,
|
|
parse: function(_context, float2) {
|
|
switch (float2) {
|
|
case "left":
|
|
return 1;
|
|
case "right":
|
|
return 2;
|
|
case "inline-start":
|
|
return 3;
|
|
case "inline-end":
|
|
return 4;
|
|
}
|
|
return 0;
|
|
}
|
|
};
|
|
var letterSpacing = {
|
|
name: "letter-spacing",
|
|
initialValue: "0",
|
|
prefix: false,
|
|
type: 0,
|
|
parse: function(_context, token) {
|
|
if (token.type === 20 && token.value === "normal") {
|
|
return 0;
|
|
}
|
|
if (token.type === 17) {
|
|
return token.number;
|
|
}
|
|
if (token.type === 15) {
|
|
return token.number;
|
|
}
|
|
return 0;
|
|
}
|
|
};
|
|
var LINE_BREAK;
|
|
(function(LINE_BREAK2) {
|
|
LINE_BREAK2["NORMAL"] = "normal";
|
|
LINE_BREAK2["STRICT"] = "strict";
|
|
})(LINE_BREAK || (LINE_BREAK = {}));
|
|
var lineBreak = {
|
|
name: "line-break",
|
|
initialValue: "normal",
|
|
prefix: false,
|
|
type: 2,
|
|
parse: function(_context, lineBreak2) {
|
|
switch (lineBreak2) {
|
|
case "strict":
|
|
return LINE_BREAK.STRICT;
|
|
case "normal":
|
|
default:
|
|
return LINE_BREAK.NORMAL;
|
|
}
|
|
}
|
|
};
|
|
var lineHeight = {
|
|
name: "line-height",
|
|
initialValue: "normal",
|
|
prefix: false,
|
|
type: 4
|
|
/* TOKEN_VALUE */
|
|
};
|
|
var computeLineHeight = function(token, fontSize2) {
|
|
if (isIdentToken(token) && token.value === "normal") {
|
|
return 1.2 * fontSize2;
|
|
} else if (token.type === 17) {
|
|
return fontSize2 * token.number;
|
|
} else if (isLengthPercentage(token)) {
|
|
return getAbsoluteValue(token, fontSize2);
|
|
}
|
|
return fontSize2;
|
|
};
|
|
var listStyleImage = {
|
|
name: "list-style-image",
|
|
initialValue: "none",
|
|
type: 0,
|
|
prefix: false,
|
|
parse: function(context, token) {
|
|
if (token.type === 20 && token.value === "none") {
|
|
return null;
|
|
}
|
|
return image.parse(context, token);
|
|
}
|
|
};
|
|
var listStylePosition = {
|
|
name: "list-style-position",
|
|
initialValue: "outside",
|
|
prefix: false,
|
|
type: 2,
|
|
parse: function(_context, position2) {
|
|
switch (position2) {
|
|
case "inside":
|
|
return 0;
|
|
case "outside":
|
|
default:
|
|
return 1;
|
|
}
|
|
}
|
|
};
|
|
var listStyleType = {
|
|
name: "list-style-type",
|
|
initialValue: "none",
|
|
prefix: false,
|
|
type: 2,
|
|
parse: function(_context, type) {
|
|
switch (type) {
|
|
case "disc":
|
|
return 0;
|
|
case "circle":
|
|
return 1;
|
|
case "square":
|
|
return 2;
|
|
case "decimal":
|
|
return 3;
|
|
case "cjk-decimal":
|
|
return 4;
|
|
case "decimal-leading-zero":
|
|
return 5;
|
|
case "lower-roman":
|
|
return 6;
|
|
case "upper-roman":
|
|
return 7;
|
|
case "lower-greek":
|
|
return 8;
|
|
case "lower-alpha":
|
|
return 9;
|
|
case "upper-alpha":
|
|
return 10;
|
|
case "arabic-indic":
|
|
return 11;
|
|
case "armenian":
|
|
return 12;
|
|
case "bengali":
|
|
return 13;
|
|
case "cambodian":
|
|
return 14;
|
|
case "cjk-earthly-branch":
|
|
return 15;
|
|
case "cjk-heavenly-stem":
|
|
return 16;
|
|
case "cjk-ideographic":
|
|
return 17;
|
|
case "devanagari":
|
|
return 18;
|
|
case "ethiopic-numeric":
|
|
return 19;
|
|
case "georgian":
|
|
return 20;
|
|
case "gujarati":
|
|
return 21;
|
|
case "gurmukhi":
|
|
return 22;
|
|
case "hebrew":
|
|
return 22;
|
|
case "hiragana":
|
|
return 23;
|
|
case "hiragana-iroha":
|
|
return 24;
|
|
case "japanese-formal":
|
|
return 25;
|
|
case "japanese-informal":
|
|
return 26;
|
|
case "kannada":
|
|
return 27;
|
|
case "katakana":
|
|
return 28;
|
|
case "katakana-iroha":
|
|
return 29;
|
|
case "khmer":
|
|
return 30;
|
|
case "korean-hangul-formal":
|
|
return 31;
|
|
case "korean-hanja-formal":
|
|
return 32;
|
|
case "korean-hanja-informal":
|
|
return 33;
|
|
case "lao":
|
|
return 34;
|
|
case "lower-armenian":
|
|
return 35;
|
|
case "malayalam":
|
|
return 36;
|
|
case "mongolian":
|
|
return 37;
|
|
case "myanmar":
|
|
return 38;
|
|
case "oriya":
|
|
return 39;
|
|
case "persian":
|
|
return 40;
|
|
case "simp-chinese-formal":
|
|
return 41;
|
|
case "simp-chinese-informal":
|
|
return 42;
|
|
case "tamil":
|
|
return 43;
|
|
case "telugu":
|
|
return 44;
|
|
case "thai":
|
|
return 45;
|
|
case "tibetan":
|
|
return 46;
|
|
case "trad-chinese-formal":
|
|
return 47;
|
|
case "trad-chinese-informal":
|
|
return 48;
|
|
case "upper-armenian":
|
|
return 49;
|
|
case "disclosure-open":
|
|
return 50;
|
|
case "disclosure-closed":
|
|
return 51;
|
|
case "none":
|
|
default:
|
|
return -1;
|
|
}
|
|
}
|
|
};
|
|
var marginForSide = function(side) {
|
|
return {
|
|
name: "margin-" + side,
|
|
initialValue: "0",
|
|
prefix: false,
|
|
type: 4
|
|
/* TOKEN_VALUE */
|
|
};
|
|
};
|
|
var marginTop = marginForSide("top");
|
|
var marginRight = marginForSide("right");
|
|
var marginBottom = marginForSide("bottom");
|
|
var marginLeft = marginForSide("left");
|
|
var overflow = {
|
|
name: "overflow",
|
|
initialValue: "visible",
|
|
prefix: false,
|
|
type: 1,
|
|
parse: function(_context, tokens) {
|
|
return tokens.filter(isIdentToken).map(function(overflow2) {
|
|
switch (overflow2.value) {
|
|
case "hidden":
|
|
return 1;
|
|
case "scroll":
|
|
return 2;
|
|
case "clip":
|
|
return 3;
|
|
case "auto":
|
|
return 4;
|
|
case "visible":
|
|
default:
|
|
return 0;
|
|
}
|
|
});
|
|
}
|
|
};
|
|
var overflowWrap = {
|
|
name: "overflow-wrap",
|
|
initialValue: "normal",
|
|
prefix: false,
|
|
type: 2,
|
|
parse: function(_context, overflow2) {
|
|
switch (overflow2) {
|
|
case "break-word":
|
|
return "break-word";
|
|
case "normal":
|
|
default:
|
|
return "normal";
|
|
}
|
|
}
|
|
};
|
|
var paddingForSide = function(side) {
|
|
return {
|
|
name: "padding-" + side,
|
|
initialValue: "0",
|
|
prefix: false,
|
|
type: 3,
|
|
format: "length-percentage"
|
|
};
|
|
};
|
|
var paddingTop = paddingForSide("top");
|
|
var paddingRight = paddingForSide("right");
|
|
var paddingBottom = paddingForSide("bottom");
|
|
var paddingLeft = paddingForSide("left");
|
|
var textAlign = {
|
|
name: "text-align",
|
|
initialValue: "left",
|
|
prefix: false,
|
|
type: 2,
|
|
parse: function(_context, textAlign2) {
|
|
switch (textAlign2) {
|
|
case "right":
|
|
return 2;
|
|
case "center":
|
|
case "justify":
|
|
return 1;
|
|
case "left":
|
|
default:
|
|
return 0;
|
|
}
|
|
}
|
|
};
|
|
var position = {
|
|
name: "position",
|
|
initialValue: "static",
|
|
prefix: false,
|
|
type: 2,
|
|
parse: function(_context, position2) {
|
|
switch (position2) {
|
|
case "relative":
|
|
return 1;
|
|
case "absolute":
|
|
return 2;
|
|
case "fixed":
|
|
return 3;
|
|
case "sticky":
|
|
return 4;
|
|
}
|
|
return 0;
|
|
}
|
|
};
|
|
var textShadow = {
|
|
name: "text-shadow",
|
|
initialValue: "none",
|
|
type: 1,
|
|
prefix: false,
|
|
parse: function(context, tokens) {
|
|
if (tokens.length === 1 && isIdentWithValue(tokens[0], "none")) {
|
|
return [];
|
|
}
|
|
return parseFunctionArgs(tokens).map(function(values) {
|
|
var shadow = {
|
|
color: COLORS.TRANSPARENT,
|
|
offsetX: ZERO_LENGTH,
|
|
offsetY: ZERO_LENGTH,
|
|
blur: ZERO_LENGTH
|
|
};
|
|
var c = 0;
|
|
for (var i = 0; i < values.length; i++) {
|
|
var token = values[i];
|
|
if (isLength(token)) {
|
|
if (c === 0) {
|
|
shadow.offsetX = token;
|
|
} else if (c === 1) {
|
|
shadow.offsetY = token;
|
|
} else {
|
|
shadow.blur = token;
|
|
}
|
|
c++;
|
|
} else {
|
|
shadow.color = color$1.parse(context, token);
|
|
}
|
|
}
|
|
return shadow;
|
|
});
|
|
}
|
|
};
|
|
var textTransform = {
|
|
name: "text-transform",
|
|
initialValue: "none",
|
|
prefix: false,
|
|
type: 2,
|
|
parse: function(_context, textTransform2) {
|
|
switch (textTransform2) {
|
|
case "uppercase":
|
|
return 2;
|
|
case "lowercase":
|
|
return 1;
|
|
case "capitalize":
|
|
return 3;
|
|
}
|
|
return 0;
|
|
}
|
|
};
|
|
var transform$1$1 = {
|
|
name: "transform",
|
|
initialValue: "none",
|
|
prefix: true,
|
|
type: 0,
|
|
parse: function(_context, token) {
|
|
if (token.type === 20 && token.value === "none") {
|
|
return null;
|
|
}
|
|
if (token.type === 18) {
|
|
var transformFunction = SUPPORTED_TRANSFORM_FUNCTIONS[token.name];
|
|
if (typeof transformFunction === "undefined") {
|
|
throw new Error('Attempting to parse an unsupported transform function "' + token.name + '"');
|
|
}
|
|
return transformFunction(token.values);
|
|
}
|
|
return null;
|
|
}
|
|
};
|
|
var matrix = function(args) {
|
|
var values = args.filter(function(arg) {
|
|
return arg.type === 17;
|
|
}).map(function(arg) {
|
|
return arg.number;
|
|
});
|
|
return values.length === 6 ? values : null;
|
|
};
|
|
var matrix3d = function(args) {
|
|
var values = args.filter(function(arg) {
|
|
return arg.type === 17;
|
|
}).map(function(arg) {
|
|
return arg.number;
|
|
});
|
|
var a1 = values[0], b1 = values[1];
|
|
values[2];
|
|
values[3];
|
|
var a2 = values[4], b2 = values[5];
|
|
values[6];
|
|
values[7];
|
|
values[8];
|
|
values[9];
|
|
values[10];
|
|
values[11];
|
|
var a4 = values[12], b4 = values[13];
|
|
values[14];
|
|
values[15];
|
|
return values.length === 16 ? [a1, b1, a2, b2, a4, b4] : null;
|
|
};
|
|
var SUPPORTED_TRANSFORM_FUNCTIONS = {
|
|
matrix,
|
|
matrix3d
|
|
};
|
|
var DEFAULT_VALUE = {
|
|
type: 16,
|
|
number: 50,
|
|
flags: FLAG_INTEGER
|
|
};
|
|
var DEFAULT = [DEFAULT_VALUE, DEFAULT_VALUE];
|
|
var transformOrigin = {
|
|
name: "transform-origin",
|
|
initialValue: "50% 50%",
|
|
prefix: true,
|
|
type: 1,
|
|
parse: function(_context, tokens) {
|
|
var origins = tokens.filter(isLengthPercentage);
|
|
if (origins.length !== 2) {
|
|
return DEFAULT;
|
|
}
|
|
return [origins[0], origins[1]];
|
|
}
|
|
};
|
|
var visibility = {
|
|
name: "visible",
|
|
initialValue: "none",
|
|
prefix: false,
|
|
type: 2,
|
|
parse: function(_context, visibility2) {
|
|
switch (visibility2) {
|
|
case "hidden":
|
|
return 1;
|
|
case "collapse":
|
|
return 2;
|
|
case "visible":
|
|
default:
|
|
return 0;
|
|
}
|
|
}
|
|
};
|
|
var WORD_BREAK;
|
|
(function(WORD_BREAK2) {
|
|
WORD_BREAK2["NORMAL"] = "normal";
|
|
WORD_BREAK2["BREAK_ALL"] = "break-all";
|
|
WORD_BREAK2["KEEP_ALL"] = "keep-all";
|
|
})(WORD_BREAK || (WORD_BREAK = {}));
|
|
var wordBreak = {
|
|
name: "word-break",
|
|
initialValue: "normal",
|
|
prefix: false,
|
|
type: 2,
|
|
parse: function(_context, wordBreak2) {
|
|
switch (wordBreak2) {
|
|
case "break-all":
|
|
return WORD_BREAK.BREAK_ALL;
|
|
case "keep-all":
|
|
return WORD_BREAK.KEEP_ALL;
|
|
case "normal":
|
|
default:
|
|
return WORD_BREAK.NORMAL;
|
|
}
|
|
}
|
|
};
|
|
var zIndex = {
|
|
name: "z-index",
|
|
initialValue: "auto",
|
|
prefix: false,
|
|
type: 0,
|
|
parse: function(_context, token) {
|
|
if (token.type === 20) {
|
|
return { auto: true, order: 0 };
|
|
}
|
|
if (isNumberToken(token)) {
|
|
return { auto: false, order: token.number };
|
|
}
|
|
throw new Error("Invalid z-index number parsed");
|
|
}
|
|
};
|
|
var time = {
|
|
name: "time",
|
|
parse: function(_context, value) {
|
|
if (value.type === 15) {
|
|
switch (value.unit.toLowerCase()) {
|
|
case "s":
|
|
return 1e3 * value.number;
|
|
case "ms":
|
|
return value.number;
|
|
}
|
|
}
|
|
throw new Error("Unsupported time type");
|
|
}
|
|
};
|
|
var opacity = {
|
|
name: "opacity",
|
|
initialValue: "1",
|
|
type: 0,
|
|
prefix: false,
|
|
parse: function(_context, token) {
|
|
if (isNumberToken(token)) {
|
|
return token.number;
|
|
}
|
|
return 1;
|
|
}
|
|
};
|
|
var textDecorationColor = {
|
|
name: "text-decoration-color",
|
|
initialValue: "transparent",
|
|
prefix: false,
|
|
type: 3,
|
|
format: "color"
|
|
};
|
|
var textDecorationLine = {
|
|
name: "text-decoration-line",
|
|
initialValue: "none",
|
|
prefix: false,
|
|
type: 1,
|
|
parse: function(_context, tokens) {
|
|
return tokens.filter(isIdentToken).map(function(token) {
|
|
switch (token.value) {
|
|
case "underline":
|
|
return 1;
|
|
case "overline":
|
|
return 2;
|
|
case "line-through":
|
|
return 3;
|
|
case "none":
|
|
return 4;
|
|
}
|
|
return 0;
|
|
}).filter(function(line) {
|
|
return line !== 0;
|
|
});
|
|
}
|
|
};
|
|
var fontFamily = {
|
|
name: "font-family",
|
|
initialValue: "",
|
|
prefix: false,
|
|
type: 1,
|
|
parse: function(_context, tokens) {
|
|
var accumulator = [];
|
|
var results = [];
|
|
tokens.forEach(function(token) {
|
|
switch (token.type) {
|
|
case 20:
|
|
case 0:
|
|
accumulator.push(token.value);
|
|
break;
|
|
case 17:
|
|
accumulator.push(token.number.toString());
|
|
break;
|
|
case 4:
|
|
results.push(accumulator.join(" "));
|
|
accumulator.length = 0;
|
|
break;
|
|
}
|
|
});
|
|
if (accumulator.length) {
|
|
results.push(accumulator.join(" "));
|
|
}
|
|
return results.map(function(result) {
|
|
return result.indexOf(" ") === -1 ? result : "'" + result + "'";
|
|
});
|
|
}
|
|
};
|
|
var fontSize = {
|
|
name: "font-size",
|
|
initialValue: "0",
|
|
prefix: false,
|
|
type: 3,
|
|
format: "length"
|
|
};
|
|
var fontWeight = {
|
|
name: "font-weight",
|
|
initialValue: "normal",
|
|
type: 0,
|
|
prefix: false,
|
|
parse: function(_context, token) {
|
|
if (isNumberToken(token)) {
|
|
return token.number;
|
|
}
|
|
if (isIdentToken(token)) {
|
|
switch (token.value) {
|
|
case "bold":
|
|
return 700;
|
|
case "normal":
|
|
default:
|
|
return 400;
|
|
}
|
|
}
|
|
return 400;
|
|
}
|
|
};
|
|
var fontVariant = {
|
|
name: "font-variant",
|
|
initialValue: "none",
|
|
type: 1,
|
|
prefix: false,
|
|
parse: function(_context, tokens) {
|
|
return tokens.filter(isIdentToken).map(function(token) {
|
|
return token.value;
|
|
});
|
|
}
|
|
};
|
|
var fontStyle = {
|
|
name: "font-style",
|
|
initialValue: "normal",
|
|
prefix: false,
|
|
type: 2,
|
|
parse: function(_context, overflow2) {
|
|
switch (overflow2) {
|
|
case "oblique":
|
|
return "oblique";
|
|
case "italic":
|
|
return "italic";
|
|
case "normal":
|
|
default:
|
|
return "normal";
|
|
}
|
|
}
|
|
};
|
|
var contains = function(bit, value) {
|
|
return (bit & value) !== 0;
|
|
};
|
|
var duration$1 = {
|
|
name: "duration",
|
|
initialValue: "0s",
|
|
prefix: false,
|
|
type: 1,
|
|
parse: function(context, tokens) {
|
|
return tokens.filter(isDimensionToken).map(function(token) {
|
|
return time.parse(context, token);
|
|
});
|
|
}
|
|
};
|
|
var boxShadow = {
|
|
name: "box-shadow",
|
|
initialValue: "none",
|
|
type: 1,
|
|
prefix: false,
|
|
parse: function(context, tokens) {
|
|
if (tokens.length === 1 && isIdentWithValue(tokens[0], "none")) {
|
|
return [];
|
|
}
|
|
return parseFunctionArgs(tokens).map(function(values) {
|
|
var shadow = {
|
|
color: 255,
|
|
offsetX: ZERO_LENGTH,
|
|
offsetY: ZERO_LENGTH,
|
|
blur: ZERO_LENGTH,
|
|
spread: ZERO_LENGTH,
|
|
inset: false
|
|
};
|
|
var c = 0;
|
|
for (var i = 0; i < values.length; i++) {
|
|
var token = values[i];
|
|
if (isIdentWithValue(token, "inset")) {
|
|
shadow.inset = true;
|
|
} else if (isLength(token)) {
|
|
if (c === 0) {
|
|
shadow.offsetX = token;
|
|
} else if (c === 1) {
|
|
shadow.offsetY = token;
|
|
} else if (c === 2) {
|
|
shadow.blur = token;
|
|
} else {
|
|
shadow.spread = token;
|
|
}
|
|
c++;
|
|
} else {
|
|
shadow.color = color$1.parse(context, token);
|
|
}
|
|
}
|
|
return shadow;
|
|
});
|
|
}
|
|
};
|
|
var paintOrder = {
|
|
name: "paint-order",
|
|
initialValue: "normal",
|
|
prefix: false,
|
|
type: 1,
|
|
parse: function(_context, tokens) {
|
|
var DEFAULT_VALUE2 = [
|
|
0,
|
|
1,
|
|
2
|
|
/* MARKERS */
|
|
];
|
|
var layers = [];
|
|
tokens.filter(isIdentToken).forEach(function(token) {
|
|
switch (token.value) {
|
|
case "stroke":
|
|
layers.push(
|
|
1
|
|
/* STROKE */
|
|
);
|
|
break;
|
|
case "fill":
|
|
layers.push(
|
|
0
|
|
/* FILL */
|
|
);
|
|
break;
|
|
case "markers":
|
|
layers.push(
|
|
2
|
|
/* MARKERS */
|
|
);
|
|
break;
|
|
}
|
|
});
|
|
DEFAULT_VALUE2.forEach(function(value) {
|
|
if (layers.indexOf(value) === -1) {
|
|
layers.push(value);
|
|
}
|
|
});
|
|
return layers;
|
|
}
|
|
};
|
|
var webkitTextStrokeColor = {
|
|
name: "-webkit-text-stroke-color",
|
|
initialValue: "currentcolor",
|
|
prefix: false,
|
|
type: 3,
|
|
format: "color"
|
|
};
|
|
var webkitTextStrokeWidth = {
|
|
name: "-webkit-text-stroke-width",
|
|
initialValue: "0",
|
|
type: 0,
|
|
prefix: false,
|
|
parse: function(_context, token) {
|
|
if (isDimensionToken(token)) {
|
|
return token.number;
|
|
}
|
|
return 0;
|
|
}
|
|
};
|
|
var CSSParsedDeclaration = (
|
|
/** @class */
|
|
function() {
|
|
function CSSParsedDeclaration2(context, declaration) {
|
|
var _a2, _b2;
|
|
this.animationDuration = parse(context, duration$1, declaration.animationDuration);
|
|
this.backgroundClip = parse(context, backgroundClip, declaration.backgroundClip);
|
|
this.backgroundColor = parse(context, backgroundColor, declaration.backgroundColor);
|
|
this.backgroundImage = parse(context, backgroundImage, declaration.backgroundImage);
|
|
this.backgroundOrigin = parse(context, backgroundOrigin, declaration.backgroundOrigin);
|
|
this.backgroundPosition = parse(context, backgroundPosition, declaration.backgroundPosition);
|
|
this.backgroundRepeat = parse(context, backgroundRepeat, declaration.backgroundRepeat);
|
|
this.backgroundSize = parse(context, backgroundSize, declaration.backgroundSize);
|
|
this.borderTopColor = parse(context, borderTopColor, declaration.borderTopColor);
|
|
this.borderRightColor = parse(context, borderRightColor, declaration.borderRightColor);
|
|
this.borderBottomColor = parse(context, borderBottomColor, declaration.borderBottomColor);
|
|
this.borderLeftColor = parse(context, borderLeftColor, declaration.borderLeftColor);
|
|
this.borderTopLeftRadius = parse(context, borderTopLeftRadius, declaration.borderTopLeftRadius);
|
|
this.borderTopRightRadius = parse(context, borderTopRightRadius, declaration.borderTopRightRadius);
|
|
this.borderBottomRightRadius = parse(context, borderBottomRightRadius, declaration.borderBottomRightRadius);
|
|
this.borderBottomLeftRadius = parse(context, borderBottomLeftRadius, declaration.borderBottomLeftRadius);
|
|
this.borderTopStyle = parse(context, borderTopStyle, declaration.borderTopStyle);
|
|
this.borderRightStyle = parse(context, borderRightStyle, declaration.borderRightStyle);
|
|
this.borderBottomStyle = parse(context, borderBottomStyle, declaration.borderBottomStyle);
|
|
this.borderLeftStyle = parse(context, borderLeftStyle, declaration.borderLeftStyle);
|
|
this.borderTopWidth = parse(context, borderTopWidth, declaration.borderTopWidth);
|
|
this.borderRightWidth = parse(context, borderRightWidth, declaration.borderRightWidth);
|
|
this.borderBottomWidth = parse(context, borderBottomWidth, declaration.borderBottomWidth);
|
|
this.borderLeftWidth = parse(context, borderLeftWidth, declaration.borderLeftWidth);
|
|
this.boxShadow = parse(context, boxShadow, declaration.boxShadow);
|
|
this.color = parse(context, color, declaration.color);
|
|
this.direction = parse(context, direction, declaration.direction);
|
|
this.display = parse(context, display, declaration.display);
|
|
this.float = parse(context, float, declaration.cssFloat);
|
|
this.fontFamily = parse(context, fontFamily, declaration.fontFamily);
|
|
this.fontSize = parse(context, fontSize, declaration.fontSize);
|
|
this.fontStyle = parse(context, fontStyle, declaration.fontStyle);
|
|
this.fontVariant = parse(context, fontVariant, declaration.fontVariant);
|
|
this.fontWeight = parse(context, fontWeight, declaration.fontWeight);
|
|
this.letterSpacing = parse(context, letterSpacing, declaration.letterSpacing);
|
|
this.lineBreak = parse(context, lineBreak, declaration.lineBreak);
|
|
this.lineHeight = parse(context, lineHeight, declaration.lineHeight);
|
|
this.listStyleImage = parse(context, listStyleImage, declaration.listStyleImage);
|
|
this.listStylePosition = parse(context, listStylePosition, declaration.listStylePosition);
|
|
this.listStyleType = parse(context, listStyleType, declaration.listStyleType);
|
|
this.marginTop = parse(context, marginTop, declaration.marginTop);
|
|
this.marginRight = parse(context, marginRight, declaration.marginRight);
|
|
this.marginBottom = parse(context, marginBottom, declaration.marginBottom);
|
|
this.marginLeft = parse(context, marginLeft, declaration.marginLeft);
|
|
this.opacity = parse(context, opacity, declaration.opacity);
|
|
var overflowTuple = parse(context, overflow, declaration.overflow);
|
|
this.overflowX = overflowTuple[0];
|
|
this.overflowY = overflowTuple[overflowTuple.length > 1 ? 1 : 0];
|
|
this.overflowWrap = parse(context, overflowWrap, declaration.overflowWrap);
|
|
this.paddingTop = parse(context, paddingTop, declaration.paddingTop);
|
|
this.paddingRight = parse(context, paddingRight, declaration.paddingRight);
|
|
this.paddingBottom = parse(context, paddingBottom, declaration.paddingBottom);
|
|
this.paddingLeft = parse(context, paddingLeft, declaration.paddingLeft);
|
|
this.paintOrder = parse(context, paintOrder, declaration.paintOrder);
|
|
this.position = parse(context, position, declaration.position);
|
|
this.textAlign = parse(context, textAlign, declaration.textAlign);
|
|
this.textDecorationColor = parse(context, textDecorationColor, (_a2 = declaration.textDecorationColor) !== null && _a2 !== void 0 ? _a2 : declaration.color);
|
|
this.textDecorationLine = parse(context, textDecorationLine, (_b2 = declaration.textDecorationLine) !== null && _b2 !== void 0 ? _b2 : declaration.textDecoration);
|
|
this.textShadow = parse(context, textShadow, declaration.textShadow);
|
|
this.textTransform = parse(context, textTransform, declaration.textTransform);
|
|
this.transform = parse(context, transform$1$1, declaration.transform);
|
|
this.transformOrigin = parse(context, transformOrigin, declaration.transformOrigin);
|
|
this.visibility = parse(context, visibility, declaration.visibility);
|
|
this.webkitTextStrokeColor = parse(context, webkitTextStrokeColor, declaration.webkitTextStrokeColor);
|
|
this.webkitTextStrokeWidth = parse(context, webkitTextStrokeWidth, declaration.webkitTextStrokeWidth);
|
|
this.wordBreak = parse(context, wordBreak, declaration.wordBreak);
|
|
this.zIndex = parse(context, zIndex, declaration.zIndex);
|
|
}
|
|
CSSParsedDeclaration2.prototype.isVisible = function() {
|
|
return this.display > 0 && this.opacity > 0 && this.visibility === 0;
|
|
};
|
|
CSSParsedDeclaration2.prototype.isTransparent = function() {
|
|
return isTransparent(this.backgroundColor);
|
|
};
|
|
CSSParsedDeclaration2.prototype.isTransformed = function() {
|
|
return this.transform !== null;
|
|
};
|
|
CSSParsedDeclaration2.prototype.isPositioned = function() {
|
|
return this.position !== 0;
|
|
};
|
|
CSSParsedDeclaration2.prototype.isPositionedWithZIndex = function() {
|
|
return this.isPositioned() && !this.zIndex.auto;
|
|
};
|
|
CSSParsedDeclaration2.prototype.isFloating = function() {
|
|
return this.float !== 0;
|
|
};
|
|
CSSParsedDeclaration2.prototype.isInlineLevel = function() {
|
|
return contains(
|
|
this.display,
|
|
4
|
|
/* INLINE */
|
|
) || contains(
|
|
this.display,
|
|
33554432
|
|
/* INLINE_BLOCK */
|
|
) || contains(
|
|
this.display,
|
|
268435456
|
|
/* INLINE_FLEX */
|
|
) || contains(
|
|
this.display,
|
|
536870912
|
|
/* INLINE_GRID */
|
|
) || contains(
|
|
this.display,
|
|
67108864
|
|
/* INLINE_LIST_ITEM */
|
|
) || contains(
|
|
this.display,
|
|
134217728
|
|
/* INLINE_TABLE */
|
|
);
|
|
};
|
|
return CSSParsedDeclaration2;
|
|
}()
|
|
);
|
|
var parse = function(context, descriptor, style2) {
|
|
var tokenizer = new Tokenizer();
|
|
var value = style2 !== null && typeof style2 !== "undefined" ? style2.toString() : descriptor.initialValue;
|
|
tokenizer.write(value);
|
|
var parser = new Parser(tokenizer.read());
|
|
switch (descriptor.type) {
|
|
case 2:
|
|
var token = parser.parseComponentValue();
|
|
return descriptor.parse(context, isIdentToken(token) ? token.value : descriptor.initialValue);
|
|
case 0:
|
|
return descriptor.parse(context, parser.parseComponentValue());
|
|
case 1:
|
|
return descriptor.parse(context, parser.parseComponentValues());
|
|
case 4:
|
|
return parser.parseComponentValue();
|
|
case 3:
|
|
switch (descriptor.format) {
|
|
case "angle":
|
|
return angle.parse(context, parser.parseComponentValue());
|
|
case "color":
|
|
return color$1.parse(context, parser.parseComponentValue());
|
|
case "image":
|
|
return image.parse(context, parser.parseComponentValue());
|
|
case "length":
|
|
var length_1 = parser.parseComponentValue();
|
|
return isLength(length_1) ? length_1 : ZERO_LENGTH;
|
|
case "length-percentage":
|
|
var value_1 = parser.parseComponentValue();
|
|
return isLengthPercentage(value_1) ? value_1 : ZERO_LENGTH;
|
|
case "time":
|
|
return time.parse(context, parser.parseComponentValue());
|
|
}
|
|
break;
|
|
}
|
|
};
|
|
var elementDebuggerAttribute = "data-html2canvas-debug";
|
|
var getElementDebugType = function(element) {
|
|
var attribute = element.getAttribute(elementDebuggerAttribute);
|
|
switch (attribute) {
|
|
case "all":
|
|
return 1;
|
|
case "clone":
|
|
return 2;
|
|
case "parse":
|
|
return 3;
|
|
case "render":
|
|
return 4;
|
|
default:
|
|
return 0;
|
|
}
|
|
};
|
|
var isDebugging = function(element, type) {
|
|
var elementType = getElementDebugType(element);
|
|
return elementType === 1 || type === elementType;
|
|
};
|
|
var ElementContainer = (
|
|
/** @class */
|
|
/* @__PURE__ */ function() {
|
|
function ElementContainer2(context, element) {
|
|
this.context = context;
|
|
this.textNodes = [];
|
|
this.elements = [];
|
|
this.flags = 0;
|
|
if (isDebugging(
|
|
element,
|
|
3
|
|
/* PARSE */
|
|
)) {
|
|
debugger;
|
|
}
|
|
this.styles = new CSSParsedDeclaration(context, window.getComputedStyle(element, null));
|
|
if (isHTMLElementNode(element)) {
|
|
if (this.styles.animationDuration.some(function(duration2) {
|
|
return duration2 > 0;
|
|
})) {
|
|
element.style.animationDuration = "0s";
|
|
}
|
|
if (this.styles.transform !== null) {
|
|
element.style.transform = "none";
|
|
}
|
|
}
|
|
this.bounds = parseBounds(this.context, element);
|
|
if (isDebugging(
|
|
element,
|
|
4
|
|
/* RENDER */
|
|
)) {
|
|
this.flags |= 16;
|
|
}
|
|
}
|
|
return ElementContainer2;
|
|
}()
|
|
);
|
|
var base64 = "AAAAAAAAAAAAEA4AGBkAAFAaAAACAAAAAAAIABAAGAAwADgACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAAQABIAEQATAAIABAACAAQAAgAEAAIABAAVABcAAgAEAAIABAACAAQAGAAaABwAHgAgACIAI4AlgAIABAAmwCjAKgAsAC2AL4AvQDFAMoA0gBPAVYBWgEIAAgACACMANoAYgFkAWwBdAF8AX0BhQGNAZUBlgGeAaMBlQGWAasBswF8AbsBwwF0AcsBYwHTAQgA2wG/AOMBdAF8AekB8QF0AfkB+wHiAHQBfAEIAAMC5gQIAAsCEgIIAAgAFgIeAggAIgIpAggAMQI5AkACygEIAAgASAJQAlgCYAIIAAgACAAKBQoFCgUTBRMFGQUrBSsFCAAIAAgACAAIAAgACAAIAAgACABdAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABoAmgCrwGvAQgAbgJ2AggAHgEIAAgACADnAXsCCAAIAAgAgwIIAAgACAAIAAgACACKAggAkQKZAggAPADJAAgAoQKkAqwCsgK6AsICCADJAggA0AIIAAgACAAIANYC3gIIAAgACAAIAAgACABAAOYCCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAkASoB+QIEAAgACAA8AEMCCABCBQgACABJBVAFCAAIAAgACAAIAAgACAAIAAgACABTBVoFCAAIAFoFCABfBWUFCAAIAAgACAAIAAgAbQUIAAgACAAIAAgACABzBXsFfQWFBYoFigWKBZEFigWKBYoFmAWfBaYFrgWxBbkFCAAIAAgACAAIAAgACAAIAAgACAAIAMEFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAMgFCADQBQgACAAIAAgACAAIAAgACAAIAAgACAAIAO4CCAAIAAgAiQAIAAgACABAAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAD0AggACAD8AggACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIANYFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAMDvwAIAAgAJAIIAAgACAAIAAgACAAIAAgACwMTAwgACAB9BOsEGwMjAwgAKwMyAwsFYgE3A/MEPwMIAEUDTQNRAwgAWQOsAGEDCAAIAAgACAAIAAgACABpAzQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFIQUoBSwFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABtAwgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABMAEwACAAIAAgACAAIABgACAAIAAgACAC/AAgACAAyAQgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACACAAIAAwAAgACAAIAAgACAAIAAgACAAIAAAARABIAAgACAAIABQASAAIAAgAIABwAEAAjgCIABsAqAC2AL0AigDQAtwC+IJIQqVAZUBWQqVAZUBlQGVAZUBlQGrC5UBlQGVAZUBlQGVAZUBlQGVAXsKlQGVAbAK6wsrDGUMpQzlDJUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAfAKAAuZA64AtwCJALoC6ADwAAgAuACgA/oEpgO6AqsD+AAIAAgAswMIAAgACAAIAIkAuwP5AfsBwwPLAwgACAAIAAgACADRA9kDCAAIAOED6QMIAAgACAAIAAgACADuA/YDCAAIAP4DyQAIAAgABgQIAAgAXQAOBAgACAAIAAgACAAIABMECAAIAAgACAAIAAgACAD8AAQBCAAIAAgAGgQiBCoECAExBAgAEAEIAAgACAAIAAgACAAIAAgACAAIAAgACAA4BAgACABABEYECAAIAAgATAQYAQgAVAQIAAgACAAIAAgACAAIAAgACAAIAFoECAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAOQEIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAB+BAcACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAEABhgSMBAgACAAIAAgAlAQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAwAEAAQABAADAAMAAwADAAQABAAEAAQABAAEAAQABHATAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAdQMIAAgACAAIAAgACAAIAMkACAAIAAgAfQMIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACACFA4kDCAAIAAgACAAIAOcBCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAIcDCAAIAAgACAAIAAgACAAIAAgACAAIAJEDCAAIAAgACADFAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABgBAgAZgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAbAQCBXIECAAIAHkECAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABAAJwEQACjBKoEsgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAC6BMIECAAIAAgACAAIAAgACABmBAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAxwQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAGYECAAIAAgAzgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAigWKBYoFigWKBYoFigWKBd0FXwUIAOIF6gXxBYoF3gT5BQAGCAaKBYoFigWKBYoFigWKBYoFigWKBYoFigXWBIoFigWKBYoFigWKBYoFigWKBYsFEAaKBYoFigWKBYoFigWKBRQGCACKBYoFigWKBQgACAAIANEECAAIABgGigUgBggAJgYIAC4GMwaKBYoF0wQ3Bj4GigWKBYoFigWKBYoFigWKBYoFigWKBYoFigUIAAgACAAIAAgACAAIAAgAigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWLBf///////wQABAAEAAQABAAEAAQABAAEAAQAAwAEAAQAAgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAQADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAUAAAAFAAUAAAAFAAUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUAAQAAAAUABQAFAAUABQAFAAAAAAAFAAUAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAFAAUAAQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUABQAFAAAABwAHAAcAAAAHAAcABwAFAAEAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAcABwAFAAUAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAQABAAAAAAAAAAAAAAAFAAUABQAFAAAABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABwAHAAcAAAAHAAcAAAAAAAUABQAHAAUAAQAHAAEABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABwABAAUABQAFAAUAAAAAAAAAAAAAAAEAAQABAAEAAQABAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABQANAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAABQAHAAUABQAFAAAAAAAAAAcABQAFAAUABQAFAAQABAAEAAQABAAEAAQABAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAFAAUABQAFAAUAAAAFAAUABQAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAAAAUABQAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAUAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABwAHAAcABwAFAAcABwAAAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUABwAHAAUABQAFAAUAAAAAAAcABwAAAAAABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAABQAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABwAHAAcABQAFAAAAAAAAAAAABQAFAAAAAAAFAAUABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAFAAUABQAFAAUAAAAFAAUABwAAAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAUABwAFAAUABQAFAAAAAAAHAAcAAAAAAAcABwAFAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABwAAAAAAAAAHAAcABwAAAAcABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAABQAHAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAcABwAAAAUABQAFAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABQAHAAcABQAHAAcAAAAFAAcABwAAAAcABwAFAAUAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAcABwAFAAUABQAAAAUAAAAHAAcABwAHAAcABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAHAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABwAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUAAAAFAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUABQAFAAUAAAAFAAUAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABwAFAAUABQAFAAUABQAAAAUABQAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABQAFAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABQAFAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAHAAUABQAFAAUABQAFAAUABwAHAAcABwAHAAcABwAHAAUABwAHAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABwAHAAcABwAFAAUABwAHAAcAAAAAAAAAAAAHAAcABQAHAAcABwAHAAcABwAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAHAAUABQAFAAUABQAFAAUAAAAFAAAABQAAAAAABQAFAAUABQAFAAUABQAFAAcABwAHAAcABwAHAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAUABQAFAAUABQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABwAFAAcABwAHAAcABwAFAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAUABQAFAAUABwAHAAUABQAHAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABQAFAAcABwAHAAUABwAFAAUABQAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAUABQAFAAUABQAFAAUABQAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAcABQAFAAUABQAFAAUABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABQAAAAAABwAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAABQAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAUABQAHAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABwAFAAUABQAFAAcABwAFAAUABwAHAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAcABwAFAAUABwAHAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAUABQAAAAAABQAFAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAFAAcABwAAAAAAAAAAAAAABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAFAAcABwAFAAcABwAAAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAFAAUABQAAAAUABQAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABwAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABQAFAAUABQAFAAUABQAFAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAHAAcABQAHAAUABQAAAAAAAAAAAAAAAAAFAAAABwAHAAcABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAcABwAAAAAABwAHAAAAAAAHAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABwAHAAUABQAFAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABQAFAAUABQAFAAUABwAFAAcABwAFAAcABQAFAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABQAFAAUABQAAAAAABwAHAAcABwAFAAUABwAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAHAAUABQAFAAUABQAFAAUABQAHAAcABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAFAAcABwAFAAUABQAFAAUABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAcABwAFAAUABQAFAAcABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABQAHAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAAAAAAFAAUABwAHAAcABwAFAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABwAHAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAHAAUABQAFAAUABQAFAAUABwAFAAUABwAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAAAAAAAABQAAAAUABQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAHAAcAAAAFAAUAAAAHAAcABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAAAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAUABQAFAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAABQAFAAUABQAFAAUABQAAAAUABQAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAFAAUABQAFAAUADgAOAA4ADgAOAA4ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAAAAAAAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAMAAwADAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAAAAAAAAAAAAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAAAAAAAAAAAAsADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwACwAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAADgAOAA4AAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAAAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAA4AAAAOAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAAAAAAAAAAAA4AAAAOAAAAAAAAAAAADgAOAA4AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAA4ADgAOAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4AAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAOAA4ADgAOAA4ADgAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAAAAAAA=";
|
|
var chars$1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
|
var lookup$1 = typeof Uint8Array === "undefined" ? [] : new Uint8Array(256);
|
|
for (var i$1 = 0; i$1 < chars$1.length; i$1++) {
|
|
lookup$1[chars$1.charCodeAt(i$1)] = i$1;
|
|
}
|
|
var decode = function(base642) {
|
|
var bufferLength = base642.length * 0.75, len = base642.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;
|
|
if (base642[base642.length - 1] === "=") {
|
|
bufferLength--;
|
|
if (base642[base642.length - 2] === "=") {
|
|
bufferLength--;
|
|
}
|
|
}
|
|
var buffer2 = typeof ArrayBuffer !== "undefined" && typeof Uint8Array !== "undefined" && typeof Uint8Array.prototype.slice !== "undefined" ? new ArrayBuffer(bufferLength) : new Array(bufferLength);
|
|
var bytes = Array.isArray(buffer2) ? buffer2 : new Uint8Array(buffer2);
|
|
for (i = 0; i < len; i += 4) {
|
|
encoded1 = lookup$1[base642.charCodeAt(i)];
|
|
encoded2 = lookup$1[base642.charCodeAt(i + 1)];
|
|
encoded3 = lookup$1[base642.charCodeAt(i + 2)];
|
|
encoded4 = lookup$1[base642.charCodeAt(i + 3)];
|
|
bytes[p++] = encoded1 << 2 | encoded2 >> 4;
|
|
bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;
|
|
bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;
|
|
}
|
|
return buffer2;
|
|
};
|
|
var polyUint16Array = function(buffer2) {
|
|
var length = buffer2.length;
|
|
var bytes = [];
|
|
for (var i = 0; i < length; i += 2) {
|
|
bytes.push(buffer2[i + 1] << 8 | buffer2[i]);
|
|
}
|
|
return bytes;
|
|
};
|
|
var polyUint32Array = function(buffer2) {
|
|
var length = buffer2.length;
|
|
var bytes = [];
|
|
for (var i = 0; i < length; i += 4) {
|
|
bytes.push(buffer2[i + 3] << 24 | buffer2[i + 2] << 16 | buffer2[i + 1] << 8 | buffer2[i]);
|
|
}
|
|
return bytes;
|
|
};
|
|
var UTRIE2_SHIFT_2 = 5;
|
|
var UTRIE2_SHIFT_1 = 6 + 5;
|
|
var UTRIE2_INDEX_SHIFT = 2;
|
|
var UTRIE2_SHIFT_1_2 = UTRIE2_SHIFT_1 - UTRIE2_SHIFT_2;
|
|
var UTRIE2_LSCP_INDEX_2_OFFSET = 65536 >> UTRIE2_SHIFT_2;
|
|
var UTRIE2_DATA_BLOCK_LENGTH = 1 << UTRIE2_SHIFT_2;
|
|
var UTRIE2_DATA_MASK = UTRIE2_DATA_BLOCK_LENGTH - 1;
|
|
var UTRIE2_LSCP_INDEX_2_LENGTH = 1024 >> UTRIE2_SHIFT_2;
|
|
var UTRIE2_INDEX_2_BMP_LENGTH = UTRIE2_LSCP_INDEX_2_OFFSET + UTRIE2_LSCP_INDEX_2_LENGTH;
|
|
var UTRIE2_UTF8_2B_INDEX_2_OFFSET = UTRIE2_INDEX_2_BMP_LENGTH;
|
|
var UTRIE2_UTF8_2B_INDEX_2_LENGTH = 2048 >> 6;
|
|
var UTRIE2_INDEX_1_OFFSET = UTRIE2_UTF8_2B_INDEX_2_OFFSET + UTRIE2_UTF8_2B_INDEX_2_LENGTH;
|
|
var UTRIE2_OMITTED_BMP_INDEX_1_LENGTH = 65536 >> UTRIE2_SHIFT_1;
|
|
var UTRIE2_INDEX_2_BLOCK_LENGTH = 1 << UTRIE2_SHIFT_1_2;
|
|
var UTRIE2_INDEX_2_MASK = UTRIE2_INDEX_2_BLOCK_LENGTH - 1;
|
|
var slice16 = function(view, start, end) {
|
|
if (view.slice) {
|
|
return view.slice(start, end);
|
|
}
|
|
return new Uint16Array(Array.prototype.slice.call(view, start, end));
|
|
};
|
|
var slice32 = function(view, start, end) {
|
|
if (view.slice) {
|
|
return view.slice(start, end);
|
|
}
|
|
return new Uint32Array(Array.prototype.slice.call(view, start, end));
|
|
};
|
|
var createTrieFromBase64 = function(base642, _byteLength) {
|
|
var buffer2 = decode(base642);
|
|
var view32 = Array.isArray(buffer2) ? polyUint32Array(buffer2) : new Uint32Array(buffer2);
|
|
var view16 = Array.isArray(buffer2) ? polyUint16Array(buffer2) : new Uint16Array(buffer2);
|
|
var headerLength = 24;
|
|
var index = slice16(view16, headerLength / 2, view32[4] / 2);
|
|
var data = view32[5] === 2 ? slice16(view16, (headerLength + view32[4]) / 2) : slice32(view32, Math.ceil((headerLength + view32[4]) / 4));
|
|
return new Trie(view32[0], view32[1], view32[2], view32[3], index, data);
|
|
};
|
|
var Trie = (
|
|
/** @class */
|
|
function() {
|
|
function Trie2(initialValue, errorValue, highStart, highValueIndex, index, data) {
|
|
this.initialValue = initialValue;
|
|
this.errorValue = errorValue;
|
|
this.highStart = highStart;
|
|
this.highValueIndex = highValueIndex;
|
|
this.index = index;
|
|
this.data = data;
|
|
}
|
|
Trie2.prototype.get = function(codePoint) {
|
|
var ix;
|
|
if (codePoint >= 0) {
|
|
if (codePoint < 55296 || codePoint > 56319 && codePoint <= 65535) {
|
|
ix = this.index[codePoint >> UTRIE2_SHIFT_2];
|
|
ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK);
|
|
return this.data[ix];
|
|
}
|
|
if (codePoint <= 65535) {
|
|
ix = this.index[UTRIE2_LSCP_INDEX_2_OFFSET + (codePoint - 55296 >> UTRIE2_SHIFT_2)];
|
|
ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK);
|
|
return this.data[ix];
|
|
}
|
|
if (codePoint < this.highStart) {
|
|
ix = UTRIE2_INDEX_1_OFFSET - UTRIE2_OMITTED_BMP_INDEX_1_LENGTH + (codePoint >> UTRIE2_SHIFT_1);
|
|
ix = this.index[ix];
|
|
ix += codePoint >> UTRIE2_SHIFT_2 & UTRIE2_INDEX_2_MASK;
|
|
ix = this.index[ix];
|
|
ix = (ix << UTRIE2_INDEX_SHIFT) + (codePoint & UTRIE2_DATA_MASK);
|
|
return this.data[ix];
|
|
}
|
|
if (codePoint <= 1114111) {
|
|
return this.data[this.highValueIndex];
|
|
}
|
|
}
|
|
return this.errorValue;
|
|
};
|
|
return Trie2;
|
|
}()
|
|
);
|
|
var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
|
var lookup = typeof Uint8Array === "undefined" ? [] : new Uint8Array(256);
|
|
for (var i = 0; i < chars.length; i++) {
|
|
lookup[chars.charCodeAt(i)] = i;
|
|
}
|
|
var Prepend = 1;
|
|
var CR = 2;
|
|
var LF = 3;
|
|
var Control = 4;
|
|
var Extend = 5;
|
|
var SpacingMark = 7;
|
|
var L = 8;
|
|
var V = 9;
|
|
var T = 10;
|
|
var LV = 11;
|
|
var LVT = 12;
|
|
var ZWJ = 13;
|
|
var Extended_Pictographic = 14;
|
|
var RI = 15;
|
|
var toCodePoints = function(str) {
|
|
var codePoints = [];
|
|
var i = 0;
|
|
var length = str.length;
|
|
while (i < length) {
|
|
var value = str.charCodeAt(i++);
|
|
if (value >= 55296 && value <= 56319 && i < length) {
|
|
var extra = str.charCodeAt(i++);
|
|
if ((extra & 64512) === 56320) {
|
|
codePoints.push(((value & 1023) << 10) + (extra & 1023) + 65536);
|
|
} else {
|
|
codePoints.push(value);
|
|
i--;
|
|
}
|
|
} else {
|
|
codePoints.push(value);
|
|
}
|
|
}
|
|
return codePoints;
|
|
};
|
|
var fromCodePoint = function() {
|
|
var codePoints = [];
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
codePoints[_i] = arguments[_i];
|
|
}
|
|
if (String.fromCodePoint) {
|
|
return String.fromCodePoint.apply(String, codePoints);
|
|
}
|
|
var length = codePoints.length;
|
|
if (!length) {
|
|
return "";
|
|
}
|
|
var codeUnits = [];
|
|
var index = -1;
|
|
var result = "";
|
|
while (++index < length) {
|
|
var codePoint = codePoints[index];
|
|
if (codePoint <= 65535) {
|
|
codeUnits.push(codePoint);
|
|
} else {
|
|
codePoint -= 65536;
|
|
codeUnits.push((codePoint >> 10) + 55296, codePoint % 1024 + 56320);
|
|
}
|
|
if (index + 1 === length || codeUnits.length > 16384) {
|
|
result += String.fromCharCode.apply(String, codeUnits);
|
|
codeUnits.length = 0;
|
|
}
|
|
}
|
|
return result;
|
|
};
|
|
var UnicodeTrie = createTrieFromBase64(base64);
|
|
var BREAK_NOT_ALLOWED = "×";
|
|
var BREAK_ALLOWED = "÷";
|
|
var codePointToClass = function(codePoint) {
|
|
return UnicodeTrie.get(codePoint);
|
|
};
|
|
var _graphemeBreakAtIndex = function(_codePoints, classTypes, index) {
|
|
var prevIndex = index - 2;
|
|
var prev = classTypes[prevIndex];
|
|
var current = classTypes[index - 1];
|
|
var next = classTypes[index];
|
|
if (current === CR && next === LF) {
|
|
return BREAK_NOT_ALLOWED;
|
|
}
|
|
if (current === CR || current === LF || current === Control) {
|
|
return BREAK_ALLOWED;
|
|
}
|
|
if (next === CR || next === LF || next === Control) {
|
|
return BREAK_ALLOWED;
|
|
}
|
|
if (current === L && [L, V, LV, LVT].indexOf(next) !== -1) {
|
|
return BREAK_NOT_ALLOWED;
|
|
}
|
|
if ((current === LV || current === V) && (next === V || next === T)) {
|
|
return BREAK_NOT_ALLOWED;
|
|
}
|
|
if ((current === LVT || current === T) && next === T) {
|
|
return BREAK_NOT_ALLOWED;
|
|
}
|
|
if (next === ZWJ || next === Extend) {
|
|
return BREAK_NOT_ALLOWED;
|
|
}
|
|
if (next === SpacingMark) {
|
|
return BREAK_NOT_ALLOWED;
|
|
}
|
|
if (current === Prepend) {
|
|
return BREAK_NOT_ALLOWED;
|
|
}
|
|
if (current === ZWJ && next === Extended_Pictographic) {
|
|
while (prev === Extend) {
|
|
prev = classTypes[--prevIndex];
|
|
}
|
|
if (prev === Extended_Pictographic) {
|
|
return BREAK_NOT_ALLOWED;
|
|
}
|
|
}
|
|
if (current === RI && next === RI) {
|
|
var countRI = 0;
|
|
while (prev === RI) {
|
|
countRI++;
|
|
prev = classTypes[--prevIndex];
|
|
}
|
|
if (countRI % 2 === 0) {
|
|
return BREAK_NOT_ALLOWED;
|
|
}
|
|
}
|
|
return BREAK_ALLOWED;
|
|
};
|
|
var GraphemeBreaker = function(str) {
|
|
var codePoints = toCodePoints(str);
|
|
var length = codePoints.length;
|
|
var index = 0;
|
|
var lastEnd = 0;
|
|
var classTypes = codePoints.map(codePointToClass);
|
|
return {
|
|
next: function() {
|
|
if (index >= length) {
|
|
return { done: true, value: null };
|
|
}
|
|
var graphemeBreak = BREAK_NOT_ALLOWED;
|
|
while (index < length && (graphemeBreak = _graphemeBreakAtIndex(codePoints, classTypes, ++index)) === BREAK_NOT_ALLOWED) {
|
|
}
|
|
if (graphemeBreak !== BREAK_NOT_ALLOWED || index === length) {
|
|
var value = fromCodePoint.apply(null, codePoints.slice(lastEnd, index));
|
|
lastEnd = index;
|
|
return { value, done: false };
|
|
}
|
|
return { done: true, value: null };
|
|
}
|
|
};
|
|
};
|
|
var splitGraphemes = function(str) {
|
|
var breaker = GraphemeBreaker(str);
|
|
var graphemes = [];
|
|
var bk;
|
|
while (!(bk = breaker.next()).done) {
|
|
if (bk.value) {
|
|
graphemes.push(bk.value.slice());
|
|
}
|
|
}
|
|
return graphemes;
|
|
};
|
|
var testRangeBounds = function(document2) {
|
|
var TEST_HEIGHT = 123;
|
|
if (document2.createRange) {
|
|
var range = document2.createRange();
|
|
if (range.getBoundingClientRect) {
|
|
var testElement = document2.createElement("boundtest");
|
|
testElement.style.height = TEST_HEIGHT + "px";
|
|
testElement.style.display = "block";
|
|
document2.body.appendChild(testElement);
|
|
range.selectNode(testElement);
|
|
var rangeBounds = range.getBoundingClientRect();
|
|
var rangeHeight = Math.round(rangeBounds.height);
|
|
document2.body.removeChild(testElement);
|
|
if (rangeHeight === TEST_HEIGHT) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
};
|
|
var testIOSLineBreak = function(document2) {
|
|
var testElement = document2.createElement("boundtest");
|
|
testElement.style.width = "50px";
|
|
testElement.style.display = "block";
|
|
testElement.style.fontSize = "12px";
|
|
testElement.style.letterSpacing = "0px";
|
|
testElement.style.wordSpacing = "0px";
|
|
document2.body.appendChild(testElement);
|
|
var range = document2.createRange();
|
|
testElement.innerHTML = typeof "".repeat === "function" ? "👨".repeat(10) : "";
|
|
var node = testElement.firstChild;
|
|
var textList = toCodePoints$1(node.data).map(function(i) {
|
|
return fromCodePoint$1(i);
|
|
});
|
|
var offset2 = 0;
|
|
var prev = {};
|
|
var supports = textList.every(function(text, i) {
|
|
range.setStart(node, offset2);
|
|
range.setEnd(node, offset2 + text.length);
|
|
var rect = range.getBoundingClientRect();
|
|
offset2 += text.length;
|
|
var boundAhead = rect.x > prev.x || rect.y > prev.y;
|
|
prev = rect;
|
|
if (i === 0) {
|
|
return true;
|
|
}
|
|
return boundAhead;
|
|
});
|
|
document2.body.removeChild(testElement);
|
|
return supports;
|
|
};
|
|
var testCORS = function() {
|
|
return typeof new Image().crossOrigin !== "undefined";
|
|
};
|
|
var testResponseType = function() {
|
|
return typeof new XMLHttpRequest().responseType === "string";
|
|
};
|
|
var testSVG = function(document2) {
|
|
var img = new Image();
|
|
var canvas = document2.createElement("canvas");
|
|
var ctx = canvas.getContext("2d");
|
|
if (!ctx) {
|
|
return false;
|
|
}
|
|
img.src = "data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg'></svg>";
|
|
try {
|
|
ctx.drawImage(img, 0, 0);
|
|
canvas.toDataURL();
|
|
} catch (e2) {
|
|
return false;
|
|
}
|
|
return true;
|
|
};
|
|
var isGreenPixel = function(data) {
|
|
return data[0] === 0 && data[1] === 255 && data[2] === 0 && data[3] === 255;
|
|
};
|
|
var testForeignObject = function(document2) {
|
|
var canvas = document2.createElement("canvas");
|
|
var size = 100;
|
|
canvas.width = size;
|
|
canvas.height = size;
|
|
var ctx = canvas.getContext("2d");
|
|
if (!ctx) {
|
|
return Promise.reject(false);
|
|
}
|
|
ctx.fillStyle = "rgb(0, 255, 0)";
|
|
ctx.fillRect(0, 0, size, size);
|
|
var img = new Image();
|
|
var greenImageSrc = canvas.toDataURL();
|
|
img.src = greenImageSrc;
|
|
var svg = createForeignObjectSVG(size, size, 0, 0, img);
|
|
ctx.fillStyle = "red";
|
|
ctx.fillRect(0, 0, size, size);
|
|
return loadSerializedSVG$1(svg).then(function(img2) {
|
|
ctx.drawImage(img2, 0, 0);
|
|
var data = ctx.getImageData(0, 0, size, size).data;
|
|
ctx.fillStyle = "red";
|
|
ctx.fillRect(0, 0, size, size);
|
|
var node = document2.createElement("div");
|
|
node.style.backgroundImage = "url(" + greenImageSrc + ")";
|
|
node.style.height = size + "px";
|
|
return isGreenPixel(data) ? loadSerializedSVG$1(createForeignObjectSVG(size, size, 0, 0, node)) : Promise.reject(false);
|
|
}).then(function(img2) {
|
|
ctx.drawImage(img2, 0, 0);
|
|
return isGreenPixel(ctx.getImageData(0, 0, size, size).data);
|
|
}).catch(function() {
|
|
return false;
|
|
});
|
|
};
|
|
var createForeignObjectSVG = function(width, height, x, y, node) {
|
|
var xmlns = "http://www.w3.org/2000/svg";
|
|
var svg = document.createElementNS(xmlns, "svg");
|
|
var foreignObject = document.createElementNS(xmlns, "foreignObject");
|
|
svg.setAttributeNS(null, "width", width.toString());
|
|
svg.setAttributeNS(null, "height", height.toString());
|
|
foreignObject.setAttributeNS(null, "width", "100%");
|
|
foreignObject.setAttributeNS(null, "height", "100%");
|
|
foreignObject.setAttributeNS(null, "x", x.toString());
|
|
foreignObject.setAttributeNS(null, "y", y.toString());
|
|
foreignObject.setAttributeNS(null, "externalResourcesRequired", "true");
|
|
svg.appendChild(foreignObject);
|
|
foreignObject.appendChild(node);
|
|
return svg;
|
|
};
|
|
var loadSerializedSVG$1 = function(svg) {
|
|
return new Promise(function(resolve, reject) {
|
|
var img = new Image();
|
|
img.onload = function() {
|
|
return resolve(img);
|
|
};
|
|
img.onerror = reject;
|
|
img.src = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(new XMLSerializer().serializeToString(svg));
|
|
});
|
|
};
|
|
var FEATURES = {
|
|
get SUPPORT_RANGE_BOUNDS() {
|
|
var value = testRangeBounds(document);
|
|
Object.defineProperty(FEATURES, "SUPPORT_RANGE_BOUNDS", { value });
|
|
return value;
|
|
},
|
|
get SUPPORT_WORD_BREAKING() {
|
|
var value = FEATURES.SUPPORT_RANGE_BOUNDS && testIOSLineBreak(document);
|
|
Object.defineProperty(FEATURES, "SUPPORT_WORD_BREAKING", { value });
|
|
return value;
|
|
},
|
|
get SUPPORT_SVG_DRAWING() {
|
|
var value = testSVG(document);
|
|
Object.defineProperty(FEATURES, "SUPPORT_SVG_DRAWING", { value });
|
|
return value;
|
|
},
|
|
get SUPPORT_FOREIGNOBJECT_DRAWING() {
|
|
var value = typeof Array.from === "function" && typeof window.fetch === "function" ? testForeignObject(document) : Promise.resolve(false);
|
|
Object.defineProperty(FEATURES, "SUPPORT_FOREIGNOBJECT_DRAWING", { value });
|
|
return value;
|
|
},
|
|
get SUPPORT_CORS_IMAGES() {
|
|
var value = testCORS();
|
|
Object.defineProperty(FEATURES, "SUPPORT_CORS_IMAGES", { value });
|
|
return value;
|
|
},
|
|
get SUPPORT_RESPONSE_TYPE() {
|
|
var value = testResponseType();
|
|
Object.defineProperty(FEATURES, "SUPPORT_RESPONSE_TYPE", { value });
|
|
return value;
|
|
},
|
|
get SUPPORT_CORS_XHR() {
|
|
var value = "withCredentials" in new XMLHttpRequest();
|
|
Object.defineProperty(FEATURES, "SUPPORT_CORS_XHR", { value });
|
|
return value;
|
|
},
|
|
get SUPPORT_NATIVE_TEXT_SEGMENTATION() {
|
|
var value = !!(typeof Intl !== "undefined" && Intl.Segmenter);
|
|
Object.defineProperty(FEATURES, "SUPPORT_NATIVE_TEXT_SEGMENTATION", { value });
|
|
return value;
|
|
}
|
|
};
|
|
var TextBounds = (
|
|
/** @class */
|
|
/* @__PURE__ */ function() {
|
|
function TextBounds2(text, bounds) {
|
|
this.text = text;
|
|
this.bounds = bounds;
|
|
}
|
|
return TextBounds2;
|
|
}()
|
|
);
|
|
var parseTextBounds = function(context, value, styles, node) {
|
|
var textList = breakText(value, styles);
|
|
var textBounds = [];
|
|
var offset2 = 0;
|
|
textList.forEach(function(text) {
|
|
if (styles.textDecorationLine.length || text.trim().length > 0) {
|
|
if (FEATURES.SUPPORT_RANGE_BOUNDS) {
|
|
var clientRects = createRange(node, offset2, text.length).getClientRects();
|
|
if (clientRects.length > 1) {
|
|
var subSegments = segmentGraphemes(text);
|
|
var subOffset_1 = 0;
|
|
subSegments.forEach(function(subSegment) {
|
|
textBounds.push(new TextBounds(subSegment, Bounds.fromDOMRectList(context, createRange(node, subOffset_1 + offset2, subSegment.length).getClientRects())));
|
|
subOffset_1 += subSegment.length;
|
|
});
|
|
} else {
|
|
textBounds.push(new TextBounds(text, Bounds.fromDOMRectList(context, clientRects)));
|
|
}
|
|
} else {
|
|
var replacementNode = node.splitText(text.length);
|
|
textBounds.push(new TextBounds(text, getWrapperBounds(context, node)));
|
|
node = replacementNode;
|
|
}
|
|
} else if (!FEATURES.SUPPORT_RANGE_BOUNDS) {
|
|
node = node.splitText(text.length);
|
|
}
|
|
offset2 += text.length;
|
|
});
|
|
return textBounds;
|
|
};
|
|
var getWrapperBounds = function(context, node) {
|
|
var ownerDocument = node.ownerDocument;
|
|
if (ownerDocument) {
|
|
var wrapper = ownerDocument.createElement("html2canvaswrapper");
|
|
wrapper.appendChild(node.cloneNode(true));
|
|
var parentNode = node.parentNode;
|
|
if (parentNode) {
|
|
parentNode.replaceChild(wrapper, node);
|
|
var bounds = parseBounds(context, wrapper);
|
|
if (wrapper.firstChild) {
|
|
parentNode.replaceChild(wrapper.firstChild, wrapper);
|
|
}
|
|
return bounds;
|
|
}
|
|
}
|
|
return Bounds.EMPTY;
|
|
};
|
|
var createRange = function(node, offset2, length) {
|
|
var ownerDocument = node.ownerDocument;
|
|
if (!ownerDocument) {
|
|
throw new Error("Node has no owner document");
|
|
}
|
|
var range = ownerDocument.createRange();
|
|
range.setStart(node, offset2);
|
|
range.setEnd(node, offset2 + length);
|
|
return range;
|
|
};
|
|
var segmentGraphemes = function(value) {
|
|
if (FEATURES.SUPPORT_NATIVE_TEXT_SEGMENTATION) {
|
|
var segmenter = new Intl.Segmenter(void 0, { granularity: "grapheme" });
|
|
return Array.from(segmenter.segment(value)).map(function(segment) {
|
|
return segment.segment;
|
|
});
|
|
}
|
|
return splitGraphemes(value);
|
|
};
|
|
var segmentWords = function(value, styles) {
|
|
if (FEATURES.SUPPORT_NATIVE_TEXT_SEGMENTATION) {
|
|
var segmenter = new Intl.Segmenter(void 0, {
|
|
granularity: "word"
|
|
});
|
|
return Array.from(segmenter.segment(value)).map(function(segment) {
|
|
return segment.segment;
|
|
});
|
|
}
|
|
return breakWords(value, styles);
|
|
};
|
|
var breakText = function(value, styles) {
|
|
return styles.letterSpacing !== 0 ? segmentGraphemes(value) : segmentWords(value, styles);
|
|
};
|
|
var wordSeparators = [32, 160, 4961, 65792, 65793, 4153, 4241];
|
|
var breakWords = function(str, styles) {
|
|
var breaker = LineBreaker(str, {
|
|
lineBreak: styles.lineBreak,
|
|
wordBreak: styles.overflowWrap === "break-word" ? "break-word" : styles.wordBreak
|
|
});
|
|
var words = [];
|
|
var bk;
|
|
var _loop_1 = function() {
|
|
if (bk.value) {
|
|
var value = bk.value.slice();
|
|
var codePoints = toCodePoints$1(value);
|
|
var word_1 = "";
|
|
codePoints.forEach(function(codePoint) {
|
|
if (wordSeparators.indexOf(codePoint) === -1) {
|
|
word_1 += fromCodePoint$1(codePoint);
|
|
} else {
|
|
if (word_1.length) {
|
|
words.push(word_1);
|
|
}
|
|
words.push(fromCodePoint$1(codePoint));
|
|
word_1 = "";
|
|
}
|
|
});
|
|
if (word_1.length) {
|
|
words.push(word_1);
|
|
}
|
|
}
|
|
};
|
|
while (!(bk = breaker.next()).done) {
|
|
_loop_1();
|
|
}
|
|
return words;
|
|
};
|
|
var TextContainer = (
|
|
/** @class */
|
|
/* @__PURE__ */ function() {
|
|
function TextContainer2(context, node, styles) {
|
|
this.text = transform$3(node.data, styles.textTransform);
|
|
this.textBounds = parseTextBounds(context, this.text, styles, node);
|
|
}
|
|
return TextContainer2;
|
|
}()
|
|
);
|
|
var transform$3 = function(text, transform2) {
|
|
switch (transform2) {
|
|
case 1:
|
|
return text.toLowerCase();
|
|
case 3:
|
|
return text.replace(CAPITALIZE, capitalize);
|
|
case 2:
|
|
return text.toUpperCase();
|
|
default:
|
|
return text;
|
|
}
|
|
};
|
|
var CAPITALIZE = /(^|\s|:|-|\(|\))([a-z])/g;
|
|
var capitalize = function(m, p1, p2) {
|
|
if (m.length > 0) {
|
|
return p1 + p2.toUpperCase();
|
|
}
|
|
return m;
|
|
};
|
|
var ImageElementContainer = (
|
|
/** @class */
|
|
function(_super) {
|
|
__extends$1(ImageElementContainer2, _super);
|
|
function ImageElementContainer2(context, img) {
|
|
var _this = _super.call(this, context, img) || this;
|
|
_this.src = img.currentSrc || img.src;
|
|
_this.intrinsicWidth = img.naturalWidth;
|
|
_this.intrinsicHeight = img.naturalHeight;
|
|
_this.context.cache.addImage(_this.src);
|
|
return _this;
|
|
}
|
|
return ImageElementContainer2;
|
|
}(ElementContainer)
|
|
);
|
|
var CanvasElementContainer = (
|
|
/** @class */
|
|
function(_super) {
|
|
__extends$1(CanvasElementContainer2, _super);
|
|
function CanvasElementContainer2(context, canvas) {
|
|
var _this = _super.call(this, context, canvas) || this;
|
|
_this.canvas = canvas;
|
|
_this.intrinsicWidth = canvas.width;
|
|
_this.intrinsicHeight = canvas.height;
|
|
return _this;
|
|
}
|
|
return CanvasElementContainer2;
|
|
}(ElementContainer)
|
|
);
|
|
var SVGElementContainer = (
|
|
/** @class */
|
|
function(_super) {
|
|
__extends$1(SVGElementContainer2, _super);
|
|
function SVGElementContainer2(context, img) {
|
|
var _this = _super.call(this, context, img) || this;
|
|
var s = new XMLSerializer();
|
|
var bounds = parseBounds(context, img);
|
|
img.setAttribute("width", bounds.width + "px");
|
|
img.setAttribute("height", bounds.height + "px");
|
|
_this.svg = "data:image/svg+xml," + encodeURIComponent(s.serializeToString(img));
|
|
_this.intrinsicWidth = img.width.baseVal.value;
|
|
_this.intrinsicHeight = img.height.baseVal.value;
|
|
_this.context.cache.addImage(_this.svg);
|
|
return _this;
|
|
}
|
|
return SVGElementContainer2;
|
|
}(ElementContainer)
|
|
);
|
|
var LIElementContainer = (
|
|
/** @class */
|
|
function(_super) {
|
|
__extends$1(LIElementContainer2, _super);
|
|
function LIElementContainer2(context, element) {
|
|
var _this = _super.call(this, context, element) || this;
|
|
_this.value = element.value;
|
|
return _this;
|
|
}
|
|
return LIElementContainer2;
|
|
}(ElementContainer)
|
|
);
|
|
var OLElementContainer = (
|
|
/** @class */
|
|
function(_super) {
|
|
__extends$1(OLElementContainer2, _super);
|
|
function OLElementContainer2(context, element) {
|
|
var _this = _super.call(this, context, element) || this;
|
|
_this.start = element.start;
|
|
_this.reversed = typeof element.reversed === "boolean" && element.reversed === true;
|
|
return _this;
|
|
}
|
|
return OLElementContainer2;
|
|
}(ElementContainer)
|
|
);
|
|
var CHECKBOX_BORDER_RADIUS = [
|
|
{
|
|
type: 15,
|
|
flags: 0,
|
|
unit: "px",
|
|
number: 3
|
|
}
|
|
];
|
|
var RADIO_BORDER_RADIUS = [
|
|
{
|
|
type: 16,
|
|
flags: 0,
|
|
number: 50
|
|
}
|
|
];
|
|
var reformatInputBounds = function(bounds) {
|
|
if (bounds.width > bounds.height) {
|
|
return new Bounds(bounds.left + (bounds.width - bounds.height) / 2, bounds.top, bounds.height, bounds.height);
|
|
} else if (bounds.width < bounds.height) {
|
|
return new Bounds(bounds.left, bounds.top + (bounds.height - bounds.width) / 2, bounds.width, bounds.width);
|
|
}
|
|
return bounds;
|
|
};
|
|
var getInputValue = function(node) {
|
|
var value = node.type === PASSWORD ? new Array(node.value.length + 1).join("•") : node.value;
|
|
return value.length === 0 ? node.placeholder || "" : value;
|
|
};
|
|
var CHECKBOX = "checkbox";
|
|
var RADIO = "radio";
|
|
var PASSWORD = "password";
|
|
var INPUT_COLOR = 707406591;
|
|
var InputElementContainer = (
|
|
/** @class */
|
|
function(_super) {
|
|
__extends$1(InputElementContainer2, _super);
|
|
function InputElementContainer2(context, input) {
|
|
var _this = _super.call(this, context, input) || this;
|
|
_this.type = input.type.toLowerCase();
|
|
_this.checked = input.checked;
|
|
_this.value = getInputValue(input);
|
|
if (_this.type === CHECKBOX || _this.type === RADIO) {
|
|
_this.styles.backgroundColor = 3739148031;
|
|
_this.styles.borderTopColor = _this.styles.borderRightColor = _this.styles.borderBottomColor = _this.styles.borderLeftColor = 2779096575;
|
|
_this.styles.borderTopWidth = _this.styles.borderRightWidth = _this.styles.borderBottomWidth = _this.styles.borderLeftWidth = 1;
|
|
_this.styles.borderTopStyle = _this.styles.borderRightStyle = _this.styles.borderBottomStyle = _this.styles.borderLeftStyle = 1;
|
|
_this.styles.backgroundClip = [
|
|
0
|
|
/* BORDER_BOX */
|
|
];
|
|
_this.styles.backgroundOrigin = [
|
|
0
|
|
/* BORDER_BOX */
|
|
];
|
|
_this.bounds = reformatInputBounds(_this.bounds);
|
|
}
|
|
switch (_this.type) {
|
|
case CHECKBOX:
|
|
_this.styles.borderTopRightRadius = _this.styles.borderTopLeftRadius = _this.styles.borderBottomRightRadius = _this.styles.borderBottomLeftRadius = CHECKBOX_BORDER_RADIUS;
|
|
break;
|
|
case RADIO:
|
|
_this.styles.borderTopRightRadius = _this.styles.borderTopLeftRadius = _this.styles.borderBottomRightRadius = _this.styles.borderBottomLeftRadius = RADIO_BORDER_RADIUS;
|
|
break;
|
|
}
|
|
return _this;
|
|
}
|
|
return InputElementContainer2;
|
|
}(ElementContainer)
|
|
);
|
|
var SelectElementContainer = (
|
|
/** @class */
|
|
function(_super) {
|
|
__extends$1(SelectElementContainer2, _super);
|
|
function SelectElementContainer2(context, element) {
|
|
var _this = _super.call(this, context, element) || this;
|
|
var option = element.options[element.selectedIndex || 0];
|
|
_this.value = option ? option.text || "" : "";
|
|
return _this;
|
|
}
|
|
return SelectElementContainer2;
|
|
}(ElementContainer)
|
|
);
|
|
var TextareaElementContainer = (
|
|
/** @class */
|
|
function(_super) {
|
|
__extends$1(TextareaElementContainer2, _super);
|
|
function TextareaElementContainer2(context, element) {
|
|
var _this = _super.call(this, context, element) || this;
|
|
_this.value = element.value;
|
|
return _this;
|
|
}
|
|
return TextareaElementContainer2;
|
|
}(ElementContainer)
|
|
);
|
|
var IFrameElementContainer = (
|
|
/** @class */
|
|
function(_super) {
|
|
__extends$1(IFrameElementContainer2, _super);
|
|
function IFrameElementContainer2(context, iframe) {
|
|
var _this = _super.call(this, context, iframe) || this;
|
|
_this.src = iframe.src;
|
|
_this.width = parseInt(iframe.width, 10) || 0;
|
|
_this.height = parseInt(iframe.height, 10) || 0;
|
|
_this.backgroundColor = _this.styles.backgroundColor;
|
|
try {
|
|
if (iframe.contentWindow && iframe.contentWindow.document && iframe.contentWindow.document.documentElement) {
|
|
_this.tree = parseTree(context, iframe.contentWindow.document.documentElement);
|
|
var documentBackgroundColor = iframe.contentWindow.document.documentElement ? parseColor(context, getComputedStyle(iframe.contentWindow.document.documentElement).backgroundColor) : COLORS.TRANSPARENT;
|
|
var bodyBackgroundColor = iframe.contentWindow.document.body ? parseColor(context, getComputedStyle(iframe.contentWindow.document.body).backgroundColor) : COLORS.TRANSPARENT;
|
|
_this.backgroundColor = isTransparent(documentBackgroundColor) ? isTransparent(bodyBackgroundColor) ? _this.styles.backgroundColor : bodyBackgroundColor : documentBackgroundColor;
|
|
}
|
|
} catch (e2) {
|
|
}
|
|
return _this;
|
|
}
|
|
return IFrameElementContainer2;
|
|
}(ElementContainer)
|
|
);
|
|
var LIST_OWNERS = ["OL", "UL", "MENU"];
|
|
var parseNodeTree = function(context, node, parent, root) {
|
|
for (var childNode = node.firstChild, nextNode = void 0; childNode; childNode = nextNode) {
|
|
nextNode = childNode.nextSibling;
|
|
if (isTextNode(childNode) && childNode.data.trim().length > 0) {
|
|
parent.textNodes.push(new TextContainer(context, childNode, parent.styles));
|
|
} else if (isElementNode(childNode)) {
|
|
if (isSlotElement(childNode) && childNode.assignedNodes) {
|
|
childNode.assignedNodes().forEach(function(childNode2) {
|
|
return parseNodeTree(context, childNode2, parent, root);
|
|
});
|
|
} else {
|
|
var container = createContainer(context, childNode);
|
|
if (container.styles.isVisible()) {
|
|
if (createsRealStackingContext(childNode, container, root)) {
|
|
container.flags |= 4;
|
|
} else if (createsStackingContext(container.styles)) {
|
|
container.flags |= 2;
|
|
}
|
|
if (LIST_OWNERS.indexOf(childNode.tagName) !== -1) {
|
|
container.flags |= 8;
|
|
}
|
|
parent.elements.push(container);
|
|
childNode.slot;
|
|
if (childNode.shadowRoot) {
|
|
parseNodeTree(context, childNode.shadowRoot, container, root);
|
|
} else if (!isTextareaElement(childNode) && !isSVGElement(childNode) && !isSelectElement(childNode)) {
|
|
parseNodeTree(context, childNode, container, root);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
var createContainer = function(context, element) {
|
|
if (isImageElement(element)) {
|
|
return new ImageElementContainer(context, element);
|
|
}
|
|
if (isCanvasElement(element)) {
|
|
return new CanvasElementContainer(context, element);
|
|
}
|
|
if (isSVGElement(element)) {
|
|
return new SVGElementContainer(context, element);
|
|
}
|
|
if (isLIElement(element)) {
|
|
return new LIElementContainer(context, element);
|
|
}
|
|
if (isOLElement(element)) {
|
|
return new OLElementContainer(context, element);
|
|
}
|
|
if (isInputElement(element)) {
|
|
return new InputElementContainer(context, element);
|
|
}
|
|
if (isSelectElement(element)) {
|
|
return new SelectElementContainer(context, element);
|
|
}
|
|
if (isTextareaElement(element)) {
|
|
return new TextareaElementContainer(context, element);
|
|
}
|
|
if (isIFrameElement(element)) {
|
|
return new IFrameElementContainer(context, element);
|
|
}
|
|
return new ElementContainer(context, element);
|
|
};
|
|
var parseTree = function(context, element) {
|
|
var container = createContainer(context, element);
|
|
container.flags |= 4;
|
|
parseNodeTree(context, element, container, container);
|
|
return container;
|
|
};
|
|
var createsRealStackingContext = function(node, container, root) {
|
|
return container.styles.isPositionedWithZIndex() || container.styles.opacity < 1 || container.styles.isTransformed() || isBodyElement(node) && root.styles.isTransparent();
|
|
};
|
|
var createsStackingContext = function(styles) {
|
|
return styles.isPositioned() || styles.isFloating();
|
|
};
|
|
var isTextNode = function(node) {
|
|
return node.nodeType === Node.TEXT_NODE;
|
|
};
|
|
var isElementNode = function(node) {
|
|
return node.nodeType === Node.ELEMENT_NODE;
|
|
};
|
|
var isHTMLElementNode = function(node) {
|
|
return isElementNode(node) && typeof node.style !== "undefined" && !isSVGElementNode(node);
|
|
};
|
|
var isSVGElementNode = function(element) {
|
|
return typeof element.className === "object";
|
|
};
|
|
var isLIElement = function(node) {
|
|
return node.tagName === "LI";
|
|
};
|
|
var isOLElement = function(node) {
|
|
return node.tagName === "OL";
|
|
};
|
|
var isInputElement = function(node) {
|
|
return node.tagName === "INPUT";
|
|
};
|
|
var isSVGElement = function(node) {
|
|
return node.tagName === "svg";
|
|
};
|
|
var isBodyElement = function(node) {
|
|
return node.tagName === "BODY";
|
|
};
|
|
var isCanvasElement = function(node) {
|
|
return node.tagName === "CANVAS";
|
|
};
|
|
var isImageElement = function(node) {
|
|
return node.tagName === "IMG";
|
|
};
|
|
var isIFrameElement = function(node) {
|
|
return node.tagName === "IFRAME";
|
|
};
|
|
var isTextareaElement = function(node) {
|
|
return node.tagName === "TEXTAREA";
|
|
};
|
|
var isSelectElement = function(node) {
|
|
return node.tagName === "SELECT";
|
|
};
|
|
var isSlotElement = function(node) {
|
|
return node.tagName === "SLOT";
|
|
};
|
|
var ROMAN_UPPER = {
|
|
integers: [1e3, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1],
|
|
values: ["M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"]
|
|
};
|
|
var ARMENIAN = {
|
|
integers: [
|
|
9e3,
|
|
8e3,
|
|
7e3,
|
|
6e3,
|
|
5e3,
|
|
4e3,
|
|
3e3,
|
|
2e3,
|
|
1e3,
|
|
900,
|
|
800,
|
|
700,
|
|
600,
|
|
500,
|
|
400,
|
|
300,
|
|
200,
|
|
100,
|
|
90,
|
|
80,
|
|
70,
|
|
60,
|
|
50,
|
|
40,
|
|
30,
|
|
20,
|
|
10,
|
|
9,
|
|
8,
|
|
7,
|
|
6,
|
|
5,
|
|
4,
|
|
3,
|
|
2,
|
|
1
|
|
],
|
|
values: [
|
|
"Ք",
|
|
"Փ",
|
|
"Ւ",
|
|
"Ց",
|
|
"Ր",
|
|
"Տ",
|
|
"Վ",
|
|
"Ս",
|
|
"Ռ",
|
|
"Ջ",
|
|
"Պ",
|
|
"Չ",
|
|
"Ո",
|
|
"Շ",
|
|
"Ն",
|
|
"Յ",
|
|
"Մ",
|
|
"Ճ",
|
|
"Ղ",
|
|
"Ձ",
|
|
"Հ",
|
|
"Կ",
|
|
"Ծ",
|
|
"Խ",
|
|
"Լ",
|
|
"Ի",
|
|
"Ժ",
|
|
"Թ",
|
|
"Ը",
|
|
"Է",
|
|
"Զ",
|
|
"Ե",
|
|
"Դ",
|
|
"Գ",
|
|
"Բ",
|
|
"Ա"
|
|
]
|
|
};
|
|
var HEBREW = {
|
|
integers: [
|
|
1e4,
|
|
9e3,
|
|
8e3,
|
|
7e3,
|
|
6e3,
|
|
5e3,
|
|
4e3,
|
|
3e3,
|
|
2e3,
|
|
1e3,
|
|
400,
|
|
300,
|
|
200,
|
|
100,
|
|
90,
|
|
80,
|
|
70,
|
|
60,
|
|
50,
|
|
40,
|
|
30,
|
|
20,
|
|
19,
|
|
18,
|
|
17,
|
|
16,
|
|
15,
|
|
10,
|
|
9,
|
|
8,
|
|
7,
|
|
6,
|
|
5,
|
|
4,
|
|
3,
|
|
2,
|
|
1
|
|
],
|
|
values: [
|
|
"י׳",
|
|
"ט׳",
|
|
"ח׳",
|
|
"ז׳",
|
|
"ו׳",
|
|
"ה׳",
|
|
"ד׳",
|
|
"ג׳",
|
|
"ב׳",
|
|
"א׳",
|
|
"ת",
|
|
"ש",
|
|
"ר",
|
|
"ק",
|
|
"צ",
|
|
"פ",
|
|
"ע",
|
|
"ס",
|
|
"נ",
|
|
"מ",
|
|
"ל",
|
|
"כ",
|
|
"יט",
|
|
"יח",
|
|
"יז",
|
|
"טז",
|
|
"טו",
|
|
"י",
|
|
"ט",
|
|
"ח",
|
|
"ז",
|
|
"ו",
|
|
"ה",
|
|
"ד",
|
|
"ג",
|
|
"ב",
|
|
"א"
|
|
]
|
|
};
|
|
var GEORGIAN = {
|
|
integers: [
|
|
1e4,
|
|
9e3,
|
|
8e3,
|
|
7e3,
|
|
6e3,
|
|
5e3,
|
|
4e3,
|
|
3e3,
|
|
2e3,
|
|
1e3,
|
|
900,
|
|
800,
|
|
700,
|
|
600,
|
|
500,
|
|
400,
|
|
300,
|
|
200,
|
|
100,
|
|
90,
|
|
80,
|
|
70,
|
|
60,
|
|
50,
|
|
40,
|
|
30,
|
|
20,
|
|
10,
|
|
9,
|
|
8,
|
|
7,
|
|
6,
|
|
5,
|
|
4,
|
|
3,
|
|
2,
|
|
1
|
|
],
|
|
values: [
|
|
"ჵ",
|
|
"ჰ",
|
|
"ჯ",
|
|
"ჴ",
|
|
"ხ",
|
|
"ჭ",
|
|
"წ",
|
|
"ძ",
|
|
"ც",
|
|
"ჩ",
|
|
"შ",
|
|
"ყ",
|
|
"ღ",
|
|
"ქ",
|
|
"ფ",
|
|
"ჳ",
|
|
"ტ",
|
|
"ს",
|
|
"რ",
|
|
"ჟ",
|
|
"პ",
|
|
"ო",
|
|
"ჲ",
|
|
"ნ",
|
|
"მ",
|
|
"ლ",
|
|
"კ",
|
|
"ი",
|
|
"თ",
|
|
"ჱ",
|
|
"ზ",
|
|
"ვ",
|
|
"ე",
|
|
"დ",
|
|
"გ",
|
|
"ბ",
|
|
"ა"
|
|
]
|
|
};
|
|
var createAdditiveCounter = function(value, min, max, symbols, fallback, suffix) {
|
|
if (value < min || value > max) {
|
|
return createCounterText(value, fallback, suffix.length > 0);
|
|
}
|
|
return symbols.integers.reduce(function(string, integer, index) {
|
|
while (value >= integer) {
|
|
value -= integer;
|
|
string += symbols.values[index];
|
|
}
|
|
return string;
|
|
}, "") + suffix;
|
|
};
|
|
var createCounterStyleWithSymbolResolver = function(value, codePointRangeLength, isNumeric, resolver) {
|
|
var string = "";
|
|
do {
|
|
if (!isNumeric) {
|
|
value--;
|
|
}
|
|
string = resolver(value) + string;
|
|
value /= codePointRangeLength;
|
|
} while (value * codePointRangeLength >= codePointRangeLength);
|
|
return string;
|
|
};
|
|
var createCounterStyleFromRange = function(value, codePointRangeStart, codePointRangeEnd, isNumeric, suffix) {
|
|
var codePointRangeLength = codePointRangeEnd - codePointRangeStart + 1;
|
|
return (value < 0 ? "-" : "") + (createCounterStyleWithSymbolResolver(Math.abs(value), codePointRangeLength, isNumeric, function(codePoint) {
|
|
return fromCodePoint$1(Math.floor(codePoint % codePointRangeLength) + codePointRangeStart);
|
|
}) + suffix);
|
|
};
|
|
var createCounterStyleFromSymbols = function(value, symbols, suffix) {
|
|
if (suffix === void 0) {
|
|
suffix = ". ";
|
|
}
|
|
var codePointRangeLength = symbols.length;
|
|
return createCounterStyleWithSymbolResolver(Math.abs(value), codePointRangeLength, false, function(codePoint) {
|
|
return symbols[Math.floor(codePoint % codePointRangeLength)];
|
|
}) + suffix;
|
|
};
|
|
var CJK_ZEROS = 1 << 0;
|
|
var CJK_TEN_COEFFICIENTS = 1 << 1;
|
|
var CJK_TEN_HIGH_COEFFICIENTS = 1 << 2;
|
|
var CJK_HUNDRED_COEFFICIENTS = 1 << 3;
|
|
var createCJKCounter = function(value, numbers, multipliers, negativeSign, suffix, flags) {
|
|
if (value < -9999 || value > 9999) {
|
|
return createCounterText(value, 4, suffix.length > 0);
|
|
}
|
|
var tmp = Math.abs(value);
|
|
var string = suffix;
|
|
if (tmp === 0) {
|
|
return numbers[0] + string;
|
|
}
|
|
for (var digit = 0; tmp > 0 && digit <= 4; digit++) {
|
|
var coefficient = tmp % 10;
|
|
if (coefficient === 0 && contains(flags, CJK_ZEROS) && string !== "") {
|
|
string = numbers[coefficient] + string;
|
|
} else if (coefficient > 1 || coefficient === 1 && digit === 0 || coefficient === 1 && digit === 1 && contains(flags, CJK_TEN_COEFFICIENTS) || coefficient === 1 && digit === 1 && contains(flags, CJK_TEN_HIGH_COEFFICIENTS) && value > 100 || coefficient === 1 && digit > 1 && contains(flags, CJK_HUNDRED_COEFFICIENTS)) {
|
|
string = numbers[coefficient] + (digit > 0 ? multipliers[digit - 1] : "") + string;
|
|
} else if (coefficient === 1 && digit > 0) {
|
|
string = multipliers[digit - 1] + string;
|
|
}
|
|
tmp = Math.floor(tmp / 10);
|
|
}
|
|
return (value < 0 ? negativeSign : "") + string;
|
|
};
|
|
var CHINESE_INFORMAL_MULTIPLIERS = "十百千萬";
|
|
var CHINESE_FORMAL_MULTIPLIERS = "拾佰仟萬";
|
|
var JAPANESE_NEGATIVE = "マイナス";
|
|
var KOREAN_NEGATIVE = "마이너스";
|
|
var createCounterText = function(value, type, appendSuffix) {
|
|
var defaultSuffix = appendSuffix ? ". " : "";
|
|
var cjkSuffix = appendSuffix ? "、" : "";
|
|
var koreanSuffix = appendSuffix ? ", " : "";
|
|
var spaceSuffix = appendSuffix ? " " : "";
|
|
switch (type) {
|
|
case 0:
|
|
return "•" + spaceSuffix;
|
|
case 1:
|
|
return "◦" + spaceSuffix;
|
|
case 2:
|
|
return "◾" + spaceSuffix;
|
|
case 5:
|
|
var string = createCounterStyleFromRange(value, 48, 57, true, defaultSuffix);
|
|
return string.length < 4 ? "0" + string : string;
|
|
case 4:
|
|
return createCounterStyleFromSymbols(value, "〇一二三四五六七八九", cjkSuffix);
|
|
case 6:
|
|
return createAdditiveCounter(value, 1, 3999, ROMAN_UPPER, 3, defaultSuffix).toLowerCase();
|
|
case 7:
|
|
return createAdditiveCounter(value, 1, 3999, ROMAN_UPPER, 3, defaultSuffix);
|
|
case 8:
|
|
return createCounterStyleFromRange(value, 945, 969, false, defaultSuffix);
|
|
case 9:
|
|
return createCounterStyleFromRange(value, 97, 122, false, defaultSuffix);
|
|
case 10:
|
|
return createCounterStyleFromRange(value, 65, 90, false, defaultSuffix);
|
|
case 11:
|
|
return createCounterStyleFromRange(value, 1632, 1641, true, defaultSuffix);
|
|
case 12:
|
|
case 49:
|
|
return createAdditiveCounter(value, 1, 9999, ARMENIAN, 3, defaultSuffix);
|
|
case 35:
|
|
return createAdditiveCounter(value, 1, 9999, ARMENIAN, 3, defaultSuffix).toLowerCase();
|
|
case 13:
|
|
return createCounterStyleFromRange(value, 2534, 2543, true, defaultSuffix);
|
|
case 14:
|
|
case 30:
|
|
return createCounterStyleFromRange(value, 6112, 6121, true, defaultSuffix);
|
|
case 15:
|
|
return createCounterStyleFromSymbols(value, "子丑寅卯辰巳午未申酉戌亥", cjkSuffix);
|
|
case 16:
|
|
return createCounterStyleFromSymbols(value, "甲乙丙丁戊己庚辛壬癸", cjkSuffix);
|
|
case 17:
|
|
case 48:
|
|
return createCJKCounter(value, "零一二三四五六七八九", CHINESE_INFORMAL_MULTIPLIERS, "負", cjkSuffix, CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS);
|
|
case 47:
|
|
return createCJKCounter(value, "零壹貳參肆伍陸柒捌玖", CHINESE_FORMAL_MULTIPLIERS, "負", cjkSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS);
|
|
case 42:
|
|
return createCJKCounter(value, "零一二三四五六七八九", CHINESE_INFORMAL_MULTIPLIERS, "负", cjkSuffix, CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS);
|
|
case 41:
|
|
return createCJKCounter(value, "零壹贰叁肆伍陆柒捌玖", CHINESE_FORMAL_MULTIPLIERS, "负", cjkSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS | CJK_HUNDRED_COEFFICIENTS);
|
|
case 26:
|
|
return createCJKCounter(value, "〇一二三四五六七八九", "十百千万", JAPANESE_NEGATIVE, cjkSuffix, 0);
|
|
case 25:
|
|
return createCJKCounter(value, "零壱弐参四伍六七八九", "拾百千万", JAPANESE_NEGATIVE, cjkSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS);
|
|
case 31:
|
|
return createCJKCounter(value, "영일이삼사오육칠팔구", "십백천만", KOREAN_NEGATIVE, koreanSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS);
|
|
case 33:
|
|
return createCJKCounter(value, "零一二三四五六七八九", "十百千萬", KOREAN_NEGATIVE, koreanSuffix, 0);
|
|
case 32:
|
|
return createCJKCounter(value, "零壹貳參四五六七八九", "拾百千", KOREAN_NEGATIVE, koreanSuffix, CJK_ZEROS | CJK_TEN_COEFFICIENTS | CJK_TEN_HIGH_COEFFICIENTS);
|
|
case 18:
|
|
return createCounterStyleFromRange(value, 2406, 2415, true, defaultSuffix);
|
|
case 20:
|
|
return createAdditiveCounter(value, 1, 19999, GEORGIAN, 3, defaultSuffix);
|
|
case 21:
|
|
return createCounterStyleFromRange(value, 2790, 2799, true, defaultSuffix);
|
|
case 22:
|
|
return createCounterStyleFromRange(value, 2662, 2671, true, defaultSuffix);
|
|
case 22:
|
|
return createAdditiveCounter(value, 1, 10999, HEBREW, 3, defaultSuffix);
|
|
case 23:
|
|
return createCounterStyleFromSymbols(value, "あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをん");
|
|
case 24:
|
|
return createCounterStyleFromSymbols(value, "いろはにほへとちりぬるをわかよたれそつねならむうゐのおくやまけふこえてあさきゆめみしゑひもせす");
|
|
case 27:
|
|
return createCounterStyleFromRange(value, 3302, 3311, true, defaultSuffix);
|
|
case 28:
|
|
return createCounterStyleFromSymbols(value, "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲン", cjkSuffix);
|
|
case 29:
|
|
return createCounterStyleFromSymbols(value, "イロハニホヘトチリヌルヲワカヨタレソツネナラムウヰノオクヤマケフコエテアサキユメミシヱヒモセス", cjkSuffix);
|
|
case 34:
|
|
return createCounterStyleFromRange(value, 3792, 3801, true, defaultSuffix);
|
|
case 37:
|
|
return createCounterStyleFromRange(value, 6160, 6169, true, defaultSuffix);
|
|
case 38:
|
|
return createCounterStyleFromRange(value, 4160, 4169, true, defaultSuffix);
|
|
case 39:
|
|
return createCounterStyleFromRange(value, 2918, 2927, true, defaultSuffix);
|
|
case 40:
|
|
return createCounterStyleFromRange(value, 1776, 1785, true, defaultSuffix);
|
|
case 43:
|
|
return createCounterStyleFromRange(value, 3046, 3055, true, defaultSuffix);
|
|
case 44:
|
|
return createCounterStyleFromRange(value, 3174, 3183, true, defaultSuffix);
|
|
case 45:
|
|
return createCounterStyleFromRange(value, 3664, 3673, true, defaultSuffix);
|
|
case 46:
|
|
return createCounterStyleFromRange(value, 3872, 3881, true, defaultSuffix);
|
|
case 3:
|
|
default:
|
|
return createCounterStyleFromRange(value, 48, 57, true, defaultSuffix);
|
|
}
|
|
};
|
|
var PseudoElementType;
|
|
(function(PseudoElementType2) {
|
|
PseudoElementType2[PseudoElementType2["BEFORE"] = 0] = "BEFORE";
|
|
PseudoElementType2[PseudoElementType2["AFTER"] = 1] = "AFTER";
|
|
})(PseudoElementType || (PseudoElementType = {}));
|
|
var CacheStorage = (
|
|
/** @class */
|
|
function() {
|
|
function CacheStorage2() {
|
|
}
|
|
CacheStorage2.getOrigin = function(url) {
|
|
var link = CacheStorage2._link;
|
|
if (!link) {
|
|
return "about:blank";
|
|
}
|
|
link.href = url;
|
|
link.href = link.href;
|
|
return link.protocol + link.hostname + link.port;
|
|
};
|
|
CacheStorage2.isSameOrigin = function(src) {
|
|
return CacheStorage2.getOrigin(src) === CacheStorage2._origin;
|
|
};
|
|
CacheStorage2.setContext = function(window2) {
|
|
CacheStorage2._link = window2.document.createElement("a");
|
|
CacheStorage2._origin = CacheStorage2.getOrigin(window2.location.href);
|
|
};
|
|
CacheStorage2._origin = "about:blank";
|
|
return CacheStorage2;
|
|
}()
|
|
);
|
|
var Vector = (
|
|
/** @class */
|
|
function() {
|
|
function Vector2(x, y) {
|
|
this.type = 0;
|
|
this.x = x;
|
|
this.y = y;
|
|
}
|
|
Vector2.prototype.add = function(deltaX, deltaY) {
|
|
return new Vector2(this.x + deltaX, this.y + deltaY);
|
|
};
|
|
return Vector2;
|
|
}()
|
|
);
|
|
var lerp = function(a2, b, t) {
|
|
return new Vector(a2.x + (b.x - a2.x) * t, a2.y + (b.y - a2.y) * t);
|
|
};
|
|
var BezierCurve = (
|
|
/** @class */
|
|
function() {
|
|
function BezierCurve2(start, startControl, endControl, end) {
|
|
this.type = 1;
|
|
this.start = start;
|
|
this.startControl = startControl;
|
|
this.endControl = endControl;
|
|
this.end = end;
|
|
}
|
|
BezierCurve2.prototype.subdivide = function(t, firstHalf) {
|
|
var ab = lerp(this.start, this.startControl, t);
|
|
var bc = lerp(this.startControl, this.endControl, t);
|
|
var cd = lerp(this.endControl, this.end, t);
|
|
var abbc = lerp(ab, bc, t);
|
|
var bccd = lerp(bc, cd, t);
|
|
var dest = lerp(abbc, bccd, t);
|
|
return firstHalf ? new BezierCurve2(this.start, ab, abbc, dest) : new BezierCurve2(dest, bccd, cd, this.end);
|
|
};
|
|
BezierCurve2.prototype.add = function(deltaX, deltaY) {
|
|
return new BezierCurve2(this.start.add(deltaX, deltaY), this.startControl.add(deltaX, deltaY), this.endControl.add(deltaX, deltaY), this.end.add(deltaX, deltaY));
|
|
};
|
|
BezierCurve2.prototype.reverse = function() {
|
|
return new BezierCurve2(this.end, this.endControl, this.startControl, this.start);
|
|
};
|
|
return BezierCurve2;
|
|
}()
|
|
);
|
|
var isBezierCurve = function(path) {
|
|
return path.type === 1;
|
|
};
|
|
var BoundCurves = (
|
|
/** @class */
|
|
/* @__PURE__ */ function() {
|
|
function BoundCurves2(element) {
|
|
var styles = element.styles;
|
|
var bounds = element.bounds;
|
|
var _a2 = getAbsoluteValueForTuple(styles.borderTopLeftRadius, bounds.width, bounds.height), tlh = _a2[0], tlv = _a2[1];
|
|
var _b2 = getAbsoluteValueForTuple(styles.borderTopRightRadius, bounds.width, bounds.height), trh = _b2[0], trv = _b2[1];
|
|
var _c2 = getAbsoluteValueForTuple(styles.borderBottomRightRadius, bounds.width, bounds.height), brh = _c2[0], brv = _c2[1];
|
|
var _d2 = getAbsoluteValueForTuple(styles.borderBottomLeftRadius, bounds.width, bounds.height), blh = _d2[0], blv = _d2[1];
|
|
var factors = [];
|
|
factors.push((tlh + trh) / bounds.width);
|
|
factors.push((blh + brh) / bounds.width);
|
|
factors.push((tlv + blv) / bounds.height);
|
|
factors.push((trv + brv) / bounds.height);
|
|
var maxFactor = Math.max.apply(Math, factors);
|
|
if (maxFactor > 1) {
|
|
tlh /= maxFactor;
|
|
tlv /= maxFactor;
|
|
trh /= maxFactor;
|
|
trv /= maxFactor;
|
|
brh /= maxFactor;
|
|
brv /= maxFactor;
|
|
blh /= maxFactor;
|
|
blv /= maxFactor;
|
|
}
|
|
var topWidth = bounds.width - trh;
|
|
var rightHeight = bounds.height - brv;
|
|
var bottomWidth = bounds.width - brh;
|
|
var leftHeight = bounds.height - blv;
|
|
var borderTopWidth2 = styles.borderTopWidth;
|
|
var borderRightWidth2 = styles.borderRightWidth;
|
|
var borderBottomWidth2 = styles.borderBottomWidth;
|
|
var borderLeftWidth2 = styles.borderLeftWidth;
|
|
var paddingTop2 = getAbsoluteValue(styles.paddingTop, element.bounds.width);
|
|
var paddingRight2 = getAbsoluteValue(styles.paddingRight, element.bounds.width);
|
|
var paddingBottom2 = getAbsoluteValue(styles.paddingBottom, element.bounds.width);
|
|
var paddingLeft2 = getAbsoluteValue(styles.paddingLeft, element.bounds.width);
|
|
this.topLeftBorderDoubleOuterBox = tlh > 0 || tlv > 0 ? getCurvePoints(bounds.left + borderLeftWidth2 / 3, bounds.top + borderTopWidth2 / 3, tlh - borderLeftWidth2 / 3, tlv - borderTopWidth2 / 3, CORNER.TOP_LEFT) : new Vector(bounds.left + borderLeftWidth2 / 3, bounds.top + borderTopWidth2 / 3);
|
|
this.topRightBorderDoubleOuterBox = tlh > 0 || tlv > 0 ? getCurvePoints(bounds.left + topWidth, bounds.top + borderTopWidth2 / 3, trh - borderRightWidth2 / 3, trv - borderTopWidth2 / 3, CORNER.TOP_RIGHT) : new Vector(bounds.left + bounds.width - borderRightWidth2 / 3, bounds.top + borderTopWidth2 / 3);
|
|
this.bottomRightBorderDoubleOuterBox = brh > 0 || brv > 0 ? getCurvePoints(bounds.left + bottomWidth, bounds.top + rightHeight, brh - borderRightWidth2 / 3, brv - borderBottomWidth2 / 3, CORNER.BOTTOM_RIGHT) : new Vector(bounds.left + bounds.width - borderRightWidth2 / 3, bounds.top + bounds.height - borderBottomWidth2 / 3);
|
|
this.bottomLeftBorderDoubleOuterBox = blh > 0 || blv > 0 ? getCurvePoints(bounds.left + borderLeftWidth2 / 3, bounds.top + leftHeight, blh - borderLeftWidth2 / 3, blv - borderBottomWidth2 / 3, CORNER.BOTTOM_LEFT) : new Vector(bounds.left + borderLeftWidth2 / 3, bounds.top + bounds.height - borderBottomWidth2 / 3);
|
|
this.topLeftBorderDoubleInnerBox = tlh > 0 || tlv > 0 ? getCurvePoints(bounds.left + borderLeftWidth2 * 2 / 3, bounds.top + borderTopWidth2 * 2 / 3, tlh - borderLeftWidth2 * 2 / 3, tlv - borderTopWidth2 * 2 / 3, CORNER.TOP_LEFT) : new Vector(bounds.left + borderLeftWidth2 * 2 / 3, bounds.top + borderTopWidth2 * 2 / 3);
|
|
this.topRightBorderDoubleInnerBox = tlh > 0 || tlv > 0 ? getCurvePoints(bounds.left + topWidth, bounds.top + borderTopWidth2 * 2 / 3, trh - borderRightWidth2 * 2 / 3, trv - borderTopWidth2 * 2 / 3, CORNER.TOP_RIGHT) : new Vector(bounds.left + bounds.width - borderRightWidth2 * 2 / 3, bounds.top + borderTopWidth2 * 2 / 3);
|
|
this.bottomRightBorderDoubleInnerBox = brh > 0 || brv > 0 ? getCurvePoints(bounds.left + bottomWidth, bounds.top + rightHeight, brh - borderRightWidth2 * 2 / 3, brv - borderBottomWidth2 * 2 / 3, CORNER.BOTTOM_RIGHT) : new Vector(bounds.left + bounds.width - borderRightWidth2 * 2 / 3, bounds.top + bounds.height - borderBottomWidth2 * 2 / 3);
|
|
this.bottomLeftBorderDoubleInnerBox = blh > 0 || blv > 0 ? getCurvePoints(bounds.left + borderLeftWidth2 * 2 / 3, bounds.top + leftHeight, blh - borderLeftWidth2 * 2 / 3, blv - borderBottomWidth2 * 2 / 3, CORNER.BOTTOM_LEFT) : new Vector(bounds.left + borderLeftWidth2 * 2 / 3, bounds.top + bounds.height - borderBottomWidth2 * 2 / 3);
|
|
this.topLeftBorderStroke = tlh > 0 || tlv > 0 ? getCurvePoints(bounds.left + borderLeftWidth2 / 2, bounds.top + borderTopWidth2 / 2, tlh - borderLeftWidth2 / 2, tlv - borderTopWidth2 / 2, CORNER.TOP_LEFT) : new Vector(bounds.left + borderLeftWidth2 / 2, bounds.top + borderTopWidth2 / 2);
|
|
this.topRightBorderStroke = tlh > 0 || tlv > 0 ? getCurvePoints(bounds.left + topWidth, bounds.top + borderTopWidth2 / 2, trh - borderRightWidth2 / 2, trv - borderTopWidth2 / 2, CORNER.TOP_RIGHT) : new Vector(bounds.left + bounds.width - borderRightWidth2 / 2, bounds.top + borderTopWidth2 / 2);
|
|
this.bottomRightBorderStroke = brh > 0 || brv > 0 ? getCurvePoints(bounds.left + bottomWidth, bounds.top + rightHeight, brh - borderRightWidth2 / 2, brv - borderBottomWidth2 / 2, CORNER.BOTTOM_RIGHT) : new Vector(bounds.left + bounds.width - borderRightWidth2 / 2, bounds.top + bounds.height - borderBottomWidth2 / 2);
|
|
this.bottomLeftBorderStroke = blh > 0 || blv > 0 ? getCurvePoints(bounds.left + borderLeftWidth2 / 2, bounds.top + leftHeight, blh - borderLeftWidth2 / 2, blv - borderBottomWidth2 / 2, CORNER.BOTTOM_LEFT) : new Vector(bounds.left + borderLeftWidth2 / 2, bounds.top + bounds.height - borderBottomWidth2 / 2);
|
|
this.topLeftBorderBox = tlh > 0 || tlv > 0 ? getCurvePoints(bounds.left, bounds.top, tlh, tlv, CORNER.TOP_LEFT) : new Vector(bounds.left, bounds.top);
|
|
this.topRightBorderBox = trh > 0 || trv > 0 ? getCurvePoints(bounds.left + topWidth, bounds.top, trh, trv, CORNER.TOP_RIGHT) : new Vector(bounds.left + bounds.width, bounds.top);
|
|
this.bottomRightBorderBox = brh > 0 || brv > 0 ? getCurvePoints(bounds.left + bottomWidth, bounds.top + rightHeight, brh, brv, CORNER.BOTTOM_RIGHT) : new Vector(bounds.left + bounds.width, bounds.top + bounds.height);
|
|
this.bottomLeftBorderBox = blh > 0 || blv > 0 ? getCurvePoints(bounds.left, bounds.top + leftHeight, blh, blv, CORNER.BOTTOM_LEFT) : new Vector(bounds.left, bounds.top + bounds.height);
|
|
this.topLeftPaddingBox = tlh > 0 || tlv > 0 ? getCurvePoints(bounds.left + borderLeftWidth2, bounds.top + borderTopWidth2, Math.max(0, tlh - borderLeftWidth2), Math.max(0, tlv - borderTopWidth2), CORNER.TOP_LEFT) : new Vector(bounds.left + borderLeftWidth2, bounds.top + borderTopWidth2);
|
|
this.topRightPaddingBox = trh > 0 || trv > 0 ? getCurvePoints(bounds.left + Math.min(topWidth, bounds.width - borderRightWidth2), bounds.top + borderTopWidth2, topWidth > bounds.width + borderRightWidth2 ? 0 : Math.max(0, trh - borderRightWidth2), Math.max(0, trv - borderTopWidth2), CORNER.TOP_RIGHT) : new Vector(bounds.left + bounds.width - borderRightWidth2, bounds.top + borderTopWidth2);
|
|
this.bottomRightPaddingBox = brh > 0 || brv > 0 ? getCurvePoints(bounds.left + Math.min(bottomWidth, bounds.width - borderLeftWidth2), bounds.top + Math.min(rightHeight, bounds.height - borderBottomWidth2), Math.max(0, brh - borderRightWidth2), Math.max(0, brv - borderBottomWidth2), CORNER.BOTTOM_RIGHT) : new Vector(bounds.left + bounds.width - borderRightWidth2, bounds.top + bounds.height - borderBottomWidth2);
|
|
this.bottomLeftPaddingBox = blh > 0 || blv > 0 ? getCurvePoints(bounds.left + borderLeftWidth2, bounds.top + Math.min(leftHeight, bounds.height - borderBottomWidth2), Math.max(0, blh - borderLeftWidth2), Math.max(0, blv - borderBottomWidth2), CORNER.BOTTOM_LEFT) : new Vector(bounds.left + borderLeftWidth2, bounds.top + bounds.height - borderBottomWidth2);
|
|
this.topLeftContentBox = tlh > 0 || tlv > 0 ? getCurvePoints(bounds.left + borderLeftWidth2 + paddingLeft2, bounds.top + borderTopWidth2 + paddingTop2, Math.max(0, tlh - (borderLeftWidth2 + paddingLeft2)), Math.max(0, tlv - (borderTopWidth2 + paddingTop2)), CORNER.TOP_LEFT) : new Vector(bounds.left + borderLeftWidth2 + paddingLeft2, bounds.top + borderTopWidth2 + paddingTop2);
|
|
this.topRightContentBox = trh > 0 || trv > 0 ? getCurvePoints(bounds.left + Math.min(topWidth, bounds.width + borderLeftWidth2 + paddingLeft2), bounds.top + borderTopWidth2 + paddingTop2, topWidth > bounds.width + borderLeftWidth2 + paddingLeft2 ? 0 : trh - borderLeftWidth2 + paddingLeft2, trv - (borderTopWidth2 + paddingTop2), CORNER.TOP_RIGHT) : new Vector(bounds.left + bounds.width - (borderRightWidth2 + paddingRight2), bounds.top + borderTopWidth2 + paddingTop2);
|
|
this.bottomRightContentBox = brh > 0 || brv > 0 ? getCurvePoints(bounds.left + Math.min(bottomWidth, bounds.width - (borderLeftWidth2 + paddingLeft2)), bounds.top + Math.min(rightHeight, bounds.height + borderTopWidth2 + paddingTop2), Math.max(0, brh - (borderRightWidth2 + paddingRight2)), brv - (borderBottomWidth2 + paddingBottom2), CORNER.BOTTOM_RIGHT) : new Vector(bounds.left + bounds.width - (borderRightWidth2 + paddingRight2), bounds.top + bounds.height - (borderBottomWidth2 + paddingBottom2));
|
|
this.bottomLeftContentBox = blh > 0 || blv > 0 ? getCurvePoints(bounds.left + borderLeftWidth2 + paddingLeft2, bounds.top + leftHeight, Math.max(0, blh - (borderLeftWidth2 + paddingLeft2)), blv - (borderBottomWidth2 + paddingBottom2), CORNER.BOTTOM_LEFT) : new Vector(bounds.left + borderLeftWidth2 + paddingLeft2, bounds.top + bounds.height - (borderBottomWidth2 + paddingBottom2));
|
|
}
|
|
return BoundCurves2;
|
|
}()
|
|
);
|
|
var CORNER;
|
|
(function(CORNER2) {
|
|
CORNER2[CORNER2["TOP_LEFT"] = 0] = "TOP_LEFT";
|
|
CORNER2[CORNER2["TOP_RIGHT"] = 1] = "TOP_RIGHT";
|
|
CORNER2[CORNER2["BOTTOM_RIGHT"] = 2] = "BOTTOM_RIGHT";
|
|
CORNER2[CORNER2["BOTTOM_LEFT"] = 3] = "BOTTOM_LEFT";
|
|
})(CORNER || (CORNER = {}));
|
|
var getCurvePoints = function(x, y, r1, r2, position2) {
|
|
var kappa = 4 * ((Math.sqrt(2) - 1) / 3);
|
|
var ox = r1 * kappa;
|
|
var oy = r2 * kappa;
|
|
var xm = x + r1;
|
|
var ym = y + r2;
|
|
switch (position2) {
|
|
case CORNER.TOP_LEFT:
|
|
return new BezierCurve(new Vector(x, ym), new Vector(x, ym - oy), new Vector(xm - ox, y), new Vector(xm, y));
|
|
case CORNER.TOP_RIGHT:
|
|
return new BezierCurve(new Vector(x, y), new Vector(x + ox, y), new Vector(xm, ym - oy), new Vector(xm, ym));
|
|
case CORNER.BOTTOM_RIGHT:
|
|
return new BezierCurve(new Vector(xm, y), new Vector(xm, y + oy), new Vector(x + ox, ym), new Vector(x, ym));
|
|
case CORNER.BOTTOM_LEFT:
|
|
default:
|
|
return new BezierCurve(new Vector(xm, ym), new Vector(xm - ox, ym), new Vector(x, y + oy), new Vector(x, y));
|
|
}
|
|
};
|
|
var calculateBorderBoxPath = function(curves) {
|
|
return [curves.topLeftBorderBox, curves.topRightBorderBox, curves.bottomRightBorderBox, curves.bottomLeftBorderBox];
|
|
};
|
|
var calculateContentBoxPath = function(curves) {
|
|
return [
|
|
curves.topLeftContentBox,
|
|
curves.topRightContentBox,
|
|
curves.bottomRightContentBox,
|
|
curves.bottomLeftContentBox
|
|
];
|
|
};
|
|
var calculatePaddingBoxPath = function(curves) {
|
|
return [
|
|
curves.topLeftPaddingBox,
|
|
curves.topRightPaddingBox,
|
|
curves.bottomRightPaddingBox,
|
|
curves.bottomLeftPaddingBox
|
|
];
|
|
};
|
|
var TransformEffect = (
|
|
/** @class */
|
|
/* @__PURE__ */ function() {
|
|
function TransformEffect2(offsetX, offsetY, matrix2) {
|
|
this.offsetX = offsetX;
|
|
this.offsetY = offsetY;
|
|
this.matrix = matrix2;
|
|
this.type = 0;
|
|
this.target = 2 | 4;
|
|
}
|
|
return TransformEffect2;
|
|
}()
|
|
);
|
|
var ClipEffect = (
|
|
/** @class */
|
|
/* @__PURE__ */ function() {
|
|
function ClipEffect2(path, target) {
|
|
this.path = path;
|
|
this.target = target;
|
|
this.type = 1;
|
|
}
|
|
return ClipEffect2;
|
|
}()
|
|
);
|
|
var OpacityEffect = (
|
|
/** @class */
|
|
/* @__PURE__ */ function() {
|
|
function OpacityEffect2(opacity2) {
|
|
this.opacity = opacity2;
|
|
this.type = 2;
|
|
this.target = 2 | 4;
|
|
}
|
|
return OpacityEffect2;
|
|
}()
|
|
);
|
|
var isTransformEffect = function(effect) {
|
|
return effect.type === 0;
|
|
};
|
|
var isClipEffect = function(effect) {
|
|
return effect.type === 1;
|
|
};
|
|
var isOpacityEffect = function(effect) {
|
|
return effect.type === 2;
|
|
};
|
|
var equalPath = function(a2, b) {
|
|
if (a2.length === b.length) {
|
|
return a2.some(function(v, i) {
|
|
return v === b[i];
|
|
});
|
|
}
|
|
return false;
|
|
};
|
|
var transformPath = function(path, deltaX, deltaY, deltaW, deltaH) {
|
|
return path.map(function(point, index) {
|
|
switch (index) {
|
|
case 0:
|
|
return point.add(deltaX, deltaY);
|
|
case 1:
|
|
return point.add(deltaX + deltaW, deltaY);
|
|
case 2:
|
|
return point.add(deltaX + deltaW, deltaY + deltaH);
|
|
case 3:
|
|
return point.add(deltaX, deltaY + deltaH);
|
|
}
|
|
return point;
|
|
});
|
|
};
|
|
var StackingContext = (
|
|
/** @class */
|
|
/* @__PURE__ */ function() {
|
|
function StackingContext2(container) {
|
|
this.element = container;
|
|
this.inlineLevel = [];
|
|
this.nonInlineLevel = [];
|
|
this.negativeZIndex = [];
|
|
this.zeroOrAutoZIndexOrTransformedOrOpacity = [];
|
|
this.positiveZIndex = [];
|
|
this.nonPositionedFloats = [];
|
|
this.nonPositionedInlineLevel = [];
|
|
}
|
|
return StackingContext2;
|
|
}()
|
|
);
|
|
var ElementPaint = (
|
|
/** @class */
|
|
function() {
|
|
function ElementPaint2(container, parent) {
|
|
this.container = container;
|
|
this.parent = parent;
|
|
this.effects = [];
|
|
this.curves = new BoundCurves(this.container);
|
|
if (this.container.styles.opacity < 1) {
|
|
this.effects.push(new OpacityEffect(this.container.styles.opacity));
|
|
}
|
|
if (this.container.styles.transform !== null) {
|
|
var offsetX = this.container.bounds.left + this.container.styles.transformOrigin[0].number;
|
|
var offsetY = this.container.bounds.top + this.container.styles.transformOrigin[1].number;
|
|
var matrix2 = this.container.styles.transform;
|
|
this.effects.push(new TransformEffect(offsetX, offsetY, matrix2));
|
|
}
|
|
if (this.container.styles.overflowX !== 0) {
|
|
var borderBox = calculateBorderBoxPath(this.curves);
|
|
var paddingBox2 = calculatePaddingBoxPath(this.curves);
|
|
if (equalPath(borderBox, paddingBox2)) {
|
|
this.effects.push(new ClipEffect(
|
|
borderBox,
|
|
2 | 4
|
|
/* CONTENT */
|
|
));
|
|
} else {
|
|
this.effects.push(new ClipEffect(
|
|
borderBox,
|
|
2
|
|
/* BACKGROUND_BORDERS */
|
|
));
|
|
this.effects.push(new ClipEffect(
|
|
paddingBox2,
|
|
4
|
|
/* CONTENT */
|
|
));
|
|
}
|
|
}
|
|
}
|
|
ElementPaint2.prototype.getEffects = function(target) {
|
|
var inFlow = [
|
|
2,
|
|
3
|
|
/* FIXED */
|
|
].indexOf(this.container.styles.position) === -1;
|
|
var parent = this.parent;
|
|
var effects = this.effects.slice(0);
|
|
while (parent) {
|
|
var croplessEffects = parent.effects.filter(function(effect) {
|
|
return !isClipEffect(effect);
|
|
});
|
|
if (inFlow || parent.container.styles.position !== 0 || !parent.parent) {
|
|
effects.unshift.apply(effects, croplessEffects);
|
|
inFlow = [
|
|
2,
|
|
3
|
|
/* FIXED */
|
|
].indexOf(parent.container.styles.position) === -1;
|
|
if (parent.container.styles.overflowX !== 0) {
|
|
var borderBox = calculateBorderBoxPath(parent.curves);
|
|
var paddingBox2 = calculatePaddingBoxPath(parent.curves);
|
|
if (!equalPath(borderBox, paddingBox2)) {
|
|
effects.unshift(new ClipEffect(
|
|
paddingBox2,
|
|
2 | 4
|
|
/* CONTENT */
|
|
));
|
|
}
|
|
}
|
|
} else {
|
|
effects.unshift.apply(effects, croplessEffects);
|
|
}
|
|
parent = parent.parent;
|
|
}
|
|
return effects.filter(function(effect) {
|
|
return contains(effect.target, target);
|
|
});
|
|
};
|
|
return ElementPaint2;
|
|
}()
|
|
);
|
|
var parseStackTree = function(parent, stackingContext, realStackingContext, listItems) {
|
|
parent.container.elements.forEach(function(child) {
|
|
var treatAsRealStackingContext = contains(
|
|
child.flags,
|
|
4
|
|
/* CREATES_REAL_STACKING_CONTEXT */
|
|
);
|
|
var createsStackingContext2 = contains(
|
|
child.flags,
|
|
2
|
|
/* CREATES_STACKING_CONTEXT */
|
|
);
|
|
var paintContainer = new ElementPaint(child, parent);
|
|
if (contains(
|
|
child.styles.display,
|
|
2048
|
|
/* LIST_ITEM */
|
|
)) {
|
|
listItems.push(paintContainer);
|
|
}
|
|
var listOwnerItems = contains(
|
|
child.flags,
|
|
8
|
|
/* IS_LIST_OWNER */
|
|
) ? [] : listItems;
|
|
if (treatAsRealStackingContext || createsStackingContext2) {
|
|
var parentStack = treatAsRealStackingContext || child.styles.isPositioned() ? realStackingContext : stackingContext;
|
|
var stack = new StackingContext(paintContainer);
|
|
if (child.styles.isPositioned() || child.styles.opacity < 1 || child.styles.isTransformed()) {
|
|
var order_1 = child.styles.zIndex.order;
|
|
if (order_1 < 0) {
|
|
var index_1 = 0;
|
|
parentStack.negativeZIndex.some(function(current, i) {
|
|
if (order_1 > current.element.container.styles.zIndex.order) {
|
|
index_1 = i;
|
|
return false;
|
|
} else if (index_1 > 0) {
|
|
return true;
|
|
}
|
|
return false;
|
|
});
|
|
parentStack.negativeZIndex.splice(index_1, 0, stack);
|
|
} else if (order_1 > 0) {
|
|
var index_2 = 0;
|
|
parentStack.positiveZIndex.some(function(current, i) {
|
|
if (order_1 >= current.element.container.styles.zIndex.order) {
|
|
index_2 = i + 1;
|
|
return false;
|
|
} else if (index_2 > 0) {
|
|
return true;
|
|
}
|
|
return false;
|
|
});
|
|
parentStack.positiveZIndex.splice(index_2, 0, stack);
|
|
} else {
|
|
parentStack.zeroOrAutoZIndexOrTransformedOrOpacity.push(stack);
|
|
}
|
|
} else {
|
|
if (child.styles.isFloating()) {
|
|
parentStack.nonPositionedFloats.push(stack);
|
|
} else {
|
|
parentStack.nonPositionedInlineLevel.push(stack);
|
|
}
|
|
}
|
|
parseStackTree(paintContainer, stack, treatAsRealStackingContext ? stack : realStackingContext, listOwnerItems);
|
|
} else {
|
|
if (child.styles.isInlineLevel()) {
|
|
stackingContext.inlineLevel.push(paintContainer);
|
|
} else {
|
|
stackingContext.nonInlineLevel.push(paintContainer);
|
|
}
|
|
parseStackTree(paintContainer, stackingContext, realStackingContext, listOwnerItems);
|
|
}
|
|
if (contains(
|
|
child.flags,
|
|
8
|
|
/* IS_LIST_OWNER */
|
|
)) {
|
|
processListItems(child, listOwnerItems);
|
|
}
|
|
});
|
|
};
|
|
var processListItems = function(owner, elements) {
|
|
var numbering = owner instanceof OLElementContainer ? owner.start : 1;
|
|
var reversed = owner instanceof OLElementContainer ? owner.reversed : false;
|
|
for (var i = 0; i < elements.length; i++) {
|
|
var item = elements[i];
|
|
if (item.container instanceof LIElementContainer && typeof item.container.value === "number" && item.container.value !== 0) {
|
|
numbering = item.container.value;
|
|
}
|
|
item.listValue = createCounterText(numbering, item.container.styles.listStyleType, true);
|
|
numbering += reversed ? -1 : 1;
|
|
}
|
|
};
|
|
var parseStackingContexts = function(container) {
|
|
var paintContainer = new ElementPaint(container, null);
|
|
var root = new StackingContext(paintContainer);
|
|
var listItems = [];
|
|
parseStackTree(paintContainer, root, root, listItems);
|
|
processListItems(paintContainer.container, listItems);
|
|
return root;
|
|
};
|
|
var parsePathForBorder = function(curves, borderSide) {
|
|
switch (borderSide) {
|
|
case 0:
|
|
return createPathFromCurves(curves.topLeftBorderBox, curves.topLeftPaddingBox, curves.topRightBorderBox, curves.topRightPaddingBox);
|
|
case 1:
|
|
return createPathFromCurves(curves.topRightBorderBox, curves.topRightPaddingBox, curves.bottomRightBorderBox, curves.bottomRightPaddingBox);
|
|
case 2:
|
|
return createPathFromCurves(curves.bottomRightBorderBox, curves.bottomRightPaddingBox, curves.bottomLeftBorderBox, curves.bottomLeftPaddingBox);
|
|
case 3:
|
|
default:
|
|
return createPathFromCurves(curves.bottomLeftBorderBox, curves.bottomLeftPaddingBox, curves.topLeftBorderBox, curves.topLeftPaddingBox);
|
|
}
|
|
};
|
|
var parsePathForBorderDoubleOuter = function(curves, borderSide) {
|
|
switch (borderSide) {
|
|
case 0:
|
|
return createPathFromCurves(curves.topLeftBorderBox, curves.topLeftBorderDoubleOuterBox, curves.topRightBorderBox, curves.topRightBorderDoubleOuterBox);
|
|
case 1:
|
|
return createPathFromCurves(curves.topRightBorderBox, curves.topRightBorderDoubleOuterBox, curves.bottomRightBorderBox, curves.bottomRightBorderDoubleOuterBox);
|
|
case 2:
|
|
return createPathFromCurves(curves.bottomRightBorderBox, curves.bottomRightBorderDoubleOuterBox, curves.bottomLeftBorderBox, curves.bottomLeftBorderDoubleOuterBox);
|
|
case 3:
|
|
default:
|
|
return createPathFromCurves(curves.bottomLeftBorderBox, curves.bottomLeftBorderDoubleOuterBox, curves.topLeftBorderBox, curves.topLeftBorderDoubleOuterBox);
|
|
}
|
|
};
|
|
var parsePathForBorderDoubleInner = function(curves, borderSide) {
|
|
switch (borderSide) {
|
|
case 0:
|
|
return createPathFromCurves(curves.topLeftBorderDoubleInnerBox, curves.topLeftPaddingBox, curves.topRightBorderDoubleInnerBox, curves.topRightPaddingBox);
|
|
case 1:
|
|
return createPathFromCurves(curves.topRightBorderDoubleInnerBox, curves.topRightPaddingBox, curves.bottomRightBorderDoubleInnerBox, curves.bottomRightPaddingBox);
|
|
case 2:
|
|
return createPathFromCurves(curves.bottomRightBorderDoubleInnerBox, curves.bottomRightPaddingBox, curves.bottomLeftBorderDoubleInnerBox, curves.bottomLeftPaddingBox);
|
|
case 3:
|
|
default:
|
|
return createPathFromCurves(curves.bottomLeftBorderDoubleInnerBox, curves.bottomLeftPaddingBox, curves.topLeftBorderDoubleInnerBox, curves.topLeftPaddingBox);
|
|
}
|
|
};
|
|
var parsePathForBorderStroke = function(curves, borderSide) {
|
|
switch (borderSide) {
|
|
case 0:
|
|
return createStrokePathFromCurves(curves.topLeftBorderStroke, curves.topRightBorderStroke);
|
|
case 1:
|
|
return createStrokePathFromCurves(curves.topRightBorderStroke, curves.bottomRightBorderStroke);
|
|
case 2:
|
|
return createStrokePathFromCurves(curves.bottomRightBorderStroke, curves.bottomLeftBorderStroke);
|
|
case 3:
|
|
default:
|
|
return createStrokePathFromCurves(curves.bottomLeftBorderStroke, curves.topLeftBorderStroke);
|
|
}
|
|
};
|
|
var createStrokePathFromCurves = function(outer1, outer2) {
|
|
var path = [];
|
|
if (isBezierCurve(outer1)) {
|
|
path.push(outer1.subdivide(0.5, false));
|
|
} else {
|
|
path.push(outer1);
|
|
}
|
|
if (isBezierCurve(outer2)) {
|
|
path.push(outer2.subdivide(0.5, true));
|
|
} else {
|
|
path.push(outer2);
|
|
}
|
|
return path;
|
|
};
|
|
var createPathFromCurves = function(outer1, inner1, outer2, inner2) {
|
|
var path = [];
|
|
if (isBezierCurve(outer1)) {
|
|
path.push(outer1.subdivide(0.5, false));
|
|
} else {
|
|
path.push(outer1);
|
|
}
|
|
if (isBezierCurve(outer2)) {
|
|
path.push(outer2.subdivide(0.5, true));
|
|
} else {
|
|
path.push(outer2);
|
|
}
|
|
if (isBezierCurve(inner2)) {
|
|
path.push(inner2.subdivide(0.5, true).reverse());
|
|
} else {
|
|
path.push(inner2);
|
|
}
|
|
if (isBezierCurve(inner1)) {
|
|
path.push(inner1.subdivide(0.5, false).reverse());
|
|
} else {
|
|
path.push(inner1);
|
|
}
|
|
return path;
|
|
};
|
|
var paddingBox = function(element) {
|
|
var bounds = element.bounds;
|
|
var styles = element.styles;
|
|
return bounds.add(styles.borderLeftWidth, styles.borderTopWidth, -(styles.borderRightWidth + styles.borderLeftWidth), -(styles.borderTopWidth + styles.borderBottomWidth));
|
|
};
|
|
var contentBox = function(element) {
|
|
var styles = element.styles;
|
|
var bounds = element.bounds;
|
|
var paddingLeft2 = getAbsoluteValue(styles.paddingLeft, bounds.width);
|
|
var paddingRight2 = getAbsoluteValue(styles.paddingRight, bounds.width);
|
|
var paddingTop2 = getAbsoluteValue(styles.paddingTop, bounds.width);
|
|
var paddingBottom2 = getAbsoluteValue(styles.paddingBottom, bounds.width);
|
|
return bounds.add(paddingLeft2 + styles.borderLeftWidth, paddingTop2 + styles.borderTopWidth, -(styles.borderRightWidth + styles.borderLeftWidth + paddingLeft2 + paddingRight2), -(styles.borderTopWidth + styles.borderBottomWidth + paddingTop2 + paddingBottom2));
|
|
};
|
|
var calculateBackgroundPositioningArea = function(backgroundOrigin2, element) {
|
|
if (backgroundOrigin2 === 0) {
|
|
return element.bounds;
|
|
}
|
|
if (backgroundOrigin2 === 2) {
|
|
return contentBox(element);
|
|
}
|
|
return paddingBox(element);
|
|
};
|
|
var calculateBackgroundPaintingArea = function(backgroundClip2, element) {
|
|
if (backgroundClip2 === 0) {
|
|
return element.bounds;
|
|
}
|
|
if (backgroundClip2 === 2) {
|
|
return contentBox(element);
|
|
}
|
|
return paddingBox(element);
|
|
};
|
|
var calculateBackgroundRendering = function(container, index, intrinsicSize) {
|
|
var backgroundPositioningArea = calculateBackgroundPositioningArea(getBackgroundValueForIndex(container.styles.backgroundOrigin, index), container);
|
|
var backgroundPaintingArea = calculateBackgroundPaintingArea(getBackgroundValueForIndex(container.styles.backgroundClip, index), container);
|
|
var backgroundImageSize = calculateBackgroundSize(getBackgroundValueForIndex(container.styles.backgroundSize, index), intrinsicSize, backgroundPositioningArea);
|
|
var sizeWidth = backgroundImageSize[0], sizeHeight = backgroundImageSize[1];
|
|
var position2 = getAbsoluteValueForTuple(getBackgroundValueForIndex(container.styles.backgroundPosition, index), backgroundPositioningArea.width - sizeWidth, backgroundPositioningArea.height - sizeHeight);
|
|
var path = calculateBackgroundRepeatPath(getBackgroundValueForIndex(container.styles.backgroundRepeat, index), position2, backgroundImageSize, backgroundPositioningArea, backgroundPaintingArea);
|
|
var offsetX = Math.round(backgroundPositioningArea.left + position2[0]);
|
|
var offsetY = Math.round(backgroundPositioningArea.top + position2[1]);
|
|
return [path, offsetX, offsetY, sizeWidth, sizeHeight];
|
|
};
|
|
var isAuto = function(token) {
|
|
return isIdentToken(token) && token.value === BACKGROUND_SIZE.AUTO;
|
|
};
|
|
var hasIntrinsicValue = function(value) {
|
|
return typeof value === "number";
|
|
};
|
|
var calculateBackgroundSize = function(size, _a2, bounds) {
|
|
var intrinsicWidth = _a2[0], intrinsicHeight = _a2[1], intrinsicProportion = _a2[2];
|
|
var first = size[0], second = size[1];
|
|
if (!first) {
|
|
return [0, 0];
|
|
}
|
|
if (isLengthPercentage(first) && second && isLengthPercentage(second)) {
|
|
return [getAbsoluteValue(first, bounds.width), getAbsoluteValue(second, bounds.height)];
|
|
}
|
|
var hasIntrinsicProportion = hasIntrinsicValue(intrinsicProportion);
|
|
if (isIdentToken(first) && (first.value === BACKGROUND_SIZE.CONTAIN || first.value === BACKGROUND_SIZE.COVER)) {
|
|
if (hasIntrinsicValue(intrinsicProportion)) {
|
|
var targetRatio = bounds.width / bounds.height;
|
|
return targetRatio < intrinsicProportion !== (first.value === BACKGROUND_SIZE.COVER) ? [bounds.width, bounds.width / intrinsicProportion] : [bounds.height * intrinsicProportion, bounds.height];
|
|
}
|
|
return [bounds.width, bounds.height];
|
|
}
|
|
var hasIntrinsicWidth = hasIntrinsicValue(intrinsicWidth);
|
|
var hasIntrinsicHeight = hasIntrinsicValue(intrinsicHeight);
|
|
var hasIntrinsicDimensions = hasIntrinsicWidth || hasIntrinsicHeight;
|
|
if (isAuto(first) && (!second || isAuto(second))) {
|
|
if (hasIntrinsicWidth && hasIntrinsicHeight) {
|
|
return [intrinsicWidth, intrinsicHeight];
|
|
}
|
|
if (!hasIntrinsicProportion && !hasIntrinsicDimensions) {
|
|
return [bounds.width, bounds.height];
|
|
}
|
|
if (hasIntrinsicDimensions && hasIntrinsicProportion) {
|
|
var width_1 = hasIntrinsicWidth ? intrinsicWidth : intrinsicHeight * intrinsicProportion;
|
|
var height_1 = hasIntrinsicHeight ? intrinsicHeight : intrinsicWidth / intrinsicProportion;
|
|
return [width_1, height_1];
|
|
}
|
|
var width_2 = hasIntrinsicWidth ? intrinsicWidth : bounds.width;
|
|
var height_2 = hasIntrinsicHeight ? intrinsicHeight : bounds.height;
|
|
return [width_2, height_2];
|
|
}
|
|
if (hasIntrinsicProportion) {
|
|
var width_3 = 0;
|
|
var height_3 = 0;
|
|
if (isLengthPercentage(first)) {
|
|
width_3 = getAbsoluteValue(first, bounds.width);
|
|
} else if (isLengthPercentage(second)) {
|
|
height_3 = getAbsoluteValue(second, bounds.height);
|
|
}
|
|
if (isAuto(first)) {
|
|
width_3 = height_3 * intrinsicProportion;
|
|
} else if (!second || isAuto(second)) {
|
|
height_3 = width_3 / intrinsicProportion;
|
|
}
|
|
return [width_3, height_3];
|
|
}
|
|
var width = null;
|
|
var height = null;
|
|
if (isLengthPercentage(first)) {
|
|
width = getAbsoluteValue(first, bounds.width);
|
|
} else if (second && isLengthPercentage(second)) {
|
|
height = getAbsoluteValue(second, bounds.height);
|
|
}
|
|
if (width !== null && (!second || isAuto(second))) {
|
|
height = hasIntrinsicWidth && hasIntrinsicHeight ? width / intrinsicWidth * intrinsicHeight : bounds.height;
|
|
}
|
|
if (height !== null && isAuto(first)) {
|
|
width = hasIntrinsicWidth && hasIntrinsicHeight ? height / intrinsicHeight * intrinsicWidth : bounds.width;
|
|
}
|
|
if (width !== null && height !== null) {
|
|
return [width, height];
|
|
}
|
|
throw new Error("Unable to calculate background-size for element");
|
|
};
|
|
var getBackgroundValueForIndex = function(values, index) {
|
|
var value = values[index];
|
|
if (typeof value === "undefined") {
|
|
return values[0];
|
|
}
|
|
return value;
|
|
};
|
|
var calculateBackgroundRepeatPath = function(repeat, _a2, _b2, backgroundPositioningArea, backgroundPaintingArea) {
|
|
var x = _a2[0], y = _a2[1];
|
|
var width = _b2[0], height = _b2[1];
|
|
switch (repeat) {
|
|
case 2:
|
|
return [
|
|
new Vector(Math.round(backgroundPositioningArea.left), Math.round(backgroundPositioningArea.top + y)),
|
|
new Vector(Math.round(backgroundPositioningArea.left + backgroundPositioningArea.width), Math.round(backgroundPositioningArea.top + y)),
|
|
new Vector(Math.round(backgroundPositioningArea.left + backgroundPositioningArea.width), Math.round(height + backgroundPositioningArea.top + y)),
|
|
new Vector(Math.round(backgroundPositioningArea.left), Math.round(height + backgroundPositioningArea.top + y))
|
|
];
|
|
case 3:
|
|
return [
|
|
new Vector(Math.round(backgroundPositioningArea.left + x), Math.round(backgroundPositioningArea.top)),
|
|
new Vector(Math.round(backgroundPositioningArea.left + x + width), Math.round(backgroundPositioningArea.top)),
|
|
new Vector(Math.round(backgroundPositioningArea.left + x + width), Math.round(backgroundPositioningArea.height + backgroundPositioningArea.top)),
|
|
new Vector(Math.round(backgroundPositioningArea.left + x), Math.round(backgroundPositioningArea.height + backgroundPositioningArea.top))
|
|
];
|
|
case 1:
|
|
return [
|
|
new Vector(Math.round(backgroundPositioningArea.left + x), Math.round(backgroundPositioningArea.top + y)),
|
|
new Vector(Math.round(backgroundPositioningArea.left + x + width), Math.round(backgroundPositioningArea.top + y)),
|
|
new Vector(Math.round(backgroundPositioningArea.left + x + width), Math.round(backgroundPositioningArea.top + y + height)),
|
|
new Vector(Math.round(backgroundPositioningArea.left + x), Math.round(backgroundPositioningArea.top + y + height))
|
|
];
|
|
default:
|
|
return [
|
|
new Vector(Math.round(backgroundPaintingArea.left), Math.round(backgroundPaintingArea.top)),
|
|
new Vector(Math.round(backgroundPaintingArea.left + backgroundPaintingArea.width), Math.round(backgroundPaintingArea.top)),
|
|
new Vector(Math.round(backgroundPaintingArea.left + backgroundPaintingArea.width), Math.round(backgroundPaintingArea.height + backgroundPaintingArea.top)),
|
|
new Vector(Math.round(backgroundPaintingArea.left), Math.round(backgroundPaintingArea.height + backgroundPaintingArea.top))
|
|
];
|
|
}
|
|
};
|
|
var SMALL_IMAGE = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7";
|
|
var SAMPLE_TEXT = "Hidden Text";
|
|
var FontMetrics = (
|
|
/** @class */
|
|
function() {
|
|
function FontMetrics2(document2) {
|
|
this._data = {};
|
|
this._document = document2;
|
|
}
|
|
FontMetrics2.prototype.parseMetrics = function(fontFamily2, fontSize2) {
|
|
var container = this._document.createElement("div");
|
|
var img = this._document.createElement("img");
|
|
var span = this._document.createElement("span");
|
|
var body = this._document.body;
|
|
container.style.visibility = "hidden";
|
|
container.style.fontFamily = fontFamily2;
|
|
container.style.fontSize = fontSize2;
|
|
container.style.margin = "0";
|
|
container.style.padding = "0";
|
|
container.style.whiteSpace = "nowrap";
|
|
body.appendChild(container);
|
|
img.src = SMALL_IMAGE;
|
|
img.width = 1;
|
|
img.height = 1;
|
|
img.style.margin = "0";
|
|
img.style.padding = "0";
|
|
img.style.verticalAlign = "baseline";
|
|
span.style.fontFamily = fontFamily2;
|
|
span.style.fontSize = fontSize2;
|
|
span.style.margin = "0";
|
|
span.style.padding = "0";
|
|
span.appendChild(this._document.createTextNode(SAMPLE_TEXT));
|
|
container.appendChild(span);
|
|
container.appendChild(img);
|
|
var baseline = img.offsetTop - span.offsetTop + 2;
|
|
container.removeChild(span);
|
|
container.appendChild(this._document.createTextNode(SAMPLE_TEXT));
|
|
container.style.lineHeight = "normal";
|
|
img.style.verticalAlign = "super";
|
|
var middle = img.offsetTop - container.offsetTop + 2;
|
|
body.removeChild(container);
|
|
return { baseline, middle };
|
|
};
|
|
FontMetrics2.prototype.getMetrics = function(fontFamily2, fontSize2) {
|
|
var key = fontFamily2 + " " + fontSize2;
|
|
if (typeof this._data[key] === "undefined") {
|
|
this._data[key] = this.parseMetrics(fontFamily2, fontSize2);
|
|
}
|
|
return this._data[key];
|
|
};
|
|
return FontMetrics2;
|
|
}()
|
|
);
|
|
var Renderer = (
|
|
/** @class */
|
|
/* @__PURE__ */ function() {
|
|
function Renderer2(context, options) {
|
|
this.context = context;
|
|
this.options = options;
|
|
}
|
|
return Renderer2;
|
|
}()
|
|
);
|
|
var MASK_OFFSET = 1e4;
|
|
(function(_super) {
|
|
__extends$1(CanvasRenderer, _super);
|
|
function CanvasRenderer(context, options) {
|
|
var _this = _super.call(this, context, options) || this;
|
|
_this._activeEffects = [];
|
|
_this.canvas = options.canvas ? options.canvas : document.createElement("canvas");
|
|
_this.ctx = _this.canvas.getContext("2d");
|
|
if (!options.canvas) {
|
|
_this.canvas.width = Math.floor(options.width * options.scale);
|
|
_this.canvas.height = Math.floor(options.height * options.scale);
|
|
_this.canvas.style.width = options.width + "px";
|
|
_this.canvas.style.height = options.height + "px";
|
|
}
|
|
_this.fontMetrics = new FontMetrics(document);
|
|
_this.ctx.scale(_this.options.scale, _this.options.scale);
|
|
_this.ctx.translate(-options.x, -options.y);
|
|
_this.ctx.textBaseline = "bottom";
|
|
_this._activeEffects = [];
|
|
_this.context.logger.debug("Canvas renderer initialized (" + options.width + "x" + options.height + ") with scale " + options.scale);
|
|
return _this;
|
|
}
|
|
CanvasRenderer.prototype.applyEffects = function(effects) {
|
|
var _this = this;
|
|
while (this._activeEffects.length) {
|
|
this.popEffect();
|
|
}
|
|
effects.forEach(function(effect) {
|
|
return _this.applyEffect(effect);
|
|
});
|
|
};
|
|
CanvasRenderer.prototype.applyEffect = function(effect) {
|
|
this.ctx.save();
|
|
if (isOpacityEffect(effect)) {
|
|
this.ctx.globalAlpha = effect.opacity;
|
|
}
|
|
if (isTransformEffect(effect)) {
|
|
this.ctx.translate(effect.offsetX, effect.offsetY);
|
|
this.ctx.transform(effect.matrix[0], effect.matrix[1], effect.matrix[2], effect.matrix[3], effect.matrix[4], effect.matrix[5]);
|
|
this.ctx.translate(-effect.offsetX, -effect.offsetY);
|
|
}
|
|
if (isClipEffect(effect)) {
|
|
this.path(effect.path);
|
|
this.ctx.clip();
|
|
}
|
|
this._activeEffects.push(effect);
|
|
};
|
|
CanvasRenderer.prototype.popEffect = function() {
|
|
this._activeEffects.pop();
|
|
this.ctx.restore();
|
|
};
|
|
CanvasRenderer.prototype.renderStack = function(stack) {
|
|
return __awaiter(this, void 0, void 0, function() {
|
|
var styles;
|
|
return __generator(this, function(_a2) {
|
|
switch (_a2.label) {
|
|
case 0:
|
|
styles = stack.element.container.styles;
|
|
if (!styles.isVisible()) return [3, 2];
|
|
return [4, this.renderStackContent(stack)];
|
|
case 1:
|
|
_a2.sent();
|
|
_a2.label = 2;
|
|
case 2:
|
|
return [
|
|
2
|
|
/*return*/
|
|
];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
CanvasRenderer.prototype.renderNode = function(paint) {
|
|
return __awaiter(this, void 0, void 0, function() {
|
|
return __generator(this, function(_a2) {
|
|
switch (_a2.label) {
|
|
case 0:
|
|
if (contains(
|
|
paint.container.flags,
|
|
16
|
|
/* DEBUG_RENDER */
|
|
)) {
|
|
debugger;
|
|
}
|
|
if (!paint.container.styles.isVisible()) return [3, 3];
|
|
return [4, this.renderNodeBackgroundAndBorders(paint)];
|
|
case 1:
|
|
_a2.sent();
|
|
return [4, this.renderNodeContent(paint)];
|
|
case 2:
|
|
_a2.sent();
|
|
_a2.label = 3;
|
|
case 3:
|
|
return [
|
|
2
|
|
/*return*/
|
|
];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
CanvasRenderer.prototype.renderTextWithLetterSpacing = function(text, letterSpacing2, baseline) {
|
|
var _this = this;
|
|
if (letterSpacing2 === 0) {
|
|
this.ctx.fillText(text.text, text.bounds.left, text.bounds.top + baseline);
|
|
} else {
|
|
var letters = segmentGraphemes(text.text);
|
|
letters.reduce(function(left, letter) {
|
|
_this.ctx.fillText(letter, left, text.bounds.top + baseline);
|
|
return left + _this.ctx.measureText(letter).width;
|
|
}, text.bounds.left);
|
|
}
|
|
};
|
|
CanvasRenderer.prototype.createFontStyle = function(styles) {
|
|
var fontVariant2 = styles.fontVariant.filter(function(variant) {
|
|
return variant === "normal" || variant === "small-caps";
|
|
}).join("");
|
|
var fontFamily2 = fixIOSSystemFonts(styles.fontFamily).join(", ");
|
|
var fontSize2 = isDimensionToken(styles.fontSize) ? "" + styles.fontSize.number + styles.fontSize.unit : styles.fontSize.number + "px";
|
|
return [
|
|
[styles.fontStyle, fontVariant2, styles.fontWeight, fontSize2, fontFamily2].join(" "),
|
|
fontFamily2,
|
|
fontSize2
|
|
];
|
|
};
|
|
CanvasRenderer.prototype.renderTextNode = function(text, styles) {
|
|
return __awaiter(this, void 0, void 0, function() {
|
|
var _a2, font, fontFamily2, fontSize2, _b2, baseline, middle, paintOrder2;
|
|
var _this = this;
|
|
return __generator(this, function(_c2) {
|
|
_a2 = this.createFontStyle(styles), font = _a2[0], fontFamily2 = _a2[1], fontSize2 = _a2[2];
|
|
this.ctx.font = font;
|
|
this.ctx.direction = styles.direction === 1 ? "rtl" : "ltr";
|
|
this.ctx.textAlign = "left";
|
|
this.ctx.textBaseline = "alphabetic";
|
|
_b2 = this.fontMetrics.getMetrics(fontFamily2, fontSize2), baseline = _b2.baseline, middle = _b2.middle;
|
|
paintOrder2 = styles.paintOrder;
|
|
text.textBounds.forEach(function(text2) {
|
|
paintOrder2.forEach(function(paintOrderLayer) {
|
|
switch (paintOrderLayer) {
|
|
case 0:
|
|
_this.ctx.fillStyle = asString(styles.color);
|
|
_this.renderTextWithLetterSpacing(text2, styles.letterSpacing, baseline);
|
|
var textShadows = styles.textShadow;
|
|
if (textShadows.length && text2.text.trim().length) {
|
|
textShadows.slice(0).reverse().forEach(function(textShadow2) {
|
|
_this.ctx.shadowColor = asString(textShadow2.color);
|
|
_this.ctx.shadowOffsetX = textShadow2.offsetX.number * _this.options.scale;
|
|
_this.ctx.shadowOffsetY = textShadow2.offsetY.number * _this.options.scale;
|
|
_this.ctx.shadowBlur = textShadow2.blur.number;
|
|
_this.renderTextWithLetterSpacing(text2, styles.letterSpacing, baseline);
|
|
});
|
|
_this.ctx.shadowColor = "";
|
|
_this.ctx.shadowOffsetX = 0;
|
|
_this.ctx.shadowOffsetY = 0;
|
|
_this.ctx.shadowBlur = 0;
|
|
}
|
|
if (styles.textDecorationLine.length) {
|
|
_this.ctx.fillStyle = asString(styles.textDecorationColor || styles.color);
|
|
styles.textDecorationLine.forEach(function(textDecorationLine2) {
|
|
switch (textDecorationLine2) {
|
|
case 1:
|
|
_this.ctx.fillRect(text2.bounds.left, Math.round(text2.bounds.top + baseline), text2.bounds.width, 1);
|
|
break;
|
|
case 2:
|
|
_this.ctx.fillRect(text2.bounds.left, Math.round(text2.bounds.top), text2.bounds.width, 1);
|
|
break;
|
|
case 3:
|
|
_this.ctx.fillRect(text2.bounds.left, Math.ceil(text2.bounds.top + middle), text2.bounds.width, 1);
|
|
break;
|
|
}
|
|
});
|
|
}
|
|
break;
|
|
case 1:
|
|
if (styles.webkitTextStrokeWidth && text2.text.trim().length) {
|
|
_this.ctx.strokeStyle = asString(styles.webkitTextStrokeColor);
|
|
_this.ctx.lineWidth = styles.webkitTextStrokeWidth;
|
|
_this.ctx.lineJoin = !!window.chrome ? "miter" : "round";
|
|
_this.ctx.strokeText(text2.text, text2.bounds.left, text2.bounds.top + baseline);
|
|
}
|
|
_this.ctx.strokeStyle = "";
|
|
_this.ctx.lineWidth = 0;
|
|
_this.ctx.lineJoin = "miter";
|
|
break;
|
|
}
|
|
});
|
|
});
|
|
return [
|
|
2
|
|
/*return*/
|
|
];
|
|
});
|
|
});
|
|
};
|
|
CanvasRenderer.prototype.renderReplacedElement = function(container, curves, image2) {
|
|
if (image2 && container.intrinsicWidth > 0 && container.intrinsicHeight > 0) {
|
|
var box = contentBox(container);
|
|
var path = calculatePaddingBoxPath(curves);
|
|
this.path(path);
|
|
this.ctx.save();
|
|
this.ctx.clip();
|
|
this.ctx.drawImage(image2, 0, 0, container.intrinsicWidth, container.intrinsicHeight, box.left, box.top, box.width, box.height);
|
|
this.ctx.restore();
|
|
}
|
|
};
|
|
CanvasRenderer.prototype.renderNodeContent = function(paint) {
|
|
return __awaiter(this, void 0, void 0, function() {
|
|
var container, curves, styles, _i, _a2, child, image2, image2, iframeRenderer, canvas, size, _b2, fontFamily2, fontSize2, baseline, bounds, x, textBounds, img, image2, url, fontFamily2, bounds;
|
|
return __generator(this, function(_c2) {
|
|
switch (_c2.label) {
|
|
case 0:
|
|
this.applyEffects(paint.getEffects(
|
|
4
|
|
/* CONTENT */
|
|
));
|
|
container = paint.container;
|
|
curves = paint.curves;
|
|
styles = container.styles;
|
|
_i = 0, _a2 = container.textNodes;
|
|
_c2.label = 1;
|
|
case 1:
|
|
if (!(_i < _a2.length)) return [3, 4];
|
|
child = _a2[_i];
|
|
return [4, this.renderTextNode(child, styles)];
|
|
case 2:
|
|
_c2.sent();
|
|
_c2.label = 3;
|
|
case 3:
|
|
_i++;
|
|
return [3, 1];
|
|
case 4:
|
|
if (!(container instanceof ImageElementContainer)) return [3, 8];
|
|
_c2.label = 5;
|
|
case 5:
|
|
_c2.trys.push([5, 7, , 8]);
|
|
return [4, this.context.cache.match(container.src)];
|
|
case 6:
|
|
image2 = _c2.sent();
|
|
this.renderReplacedElement(container, curves, image2);
|
|
return [3, 8];
|
|
case 7:
|
|
_c2.sent();
|
|
this.context.logger.error("Error loading image " + container.src);
|
|
return [3, 8];
|
|
case 8:
|
|
if (container instanceof CanvasElementContainer) {
|
|
this.renderReplacedElement(container, curves, container.canvas);
|
|
}
|
|
if (!(container instanceof SVGElementContainer)) return [3, 12];
|
|
_c2.label = 9;
|
|
case 9:
|
|
_c2.trys.push([9, 11, , 12]);
|
|
return [4, this.context.cache.match(container.svg)];
|
|
case 10:
|
|
image2 = _c2.sent();
|
|
this.renderReplacedElement(container, curves, image2);
|
|
return [3, 12];
|
|
case 11:
|
|
_c2.sent();
|
|
this.context.logger.error("Error loading svg " + container.svg.substring(0, 255));
|
|
return [3, 12];
|
|
case 12:
|
|
if (!(container instanceof IFrameElementContainer && container.tree)) return [3, 14];
|
|
iframeRenderer = new CanvasRenderer(this.context, {
|
|
scale: this.options.scale,
|
|
backgroundColor: container.backgroundColor,
|
|
x: 0,
|
|
y: 0,
|
|
width: container.width,
|
|
height: container.height
|
|
});
|
|
return [4, iframeRenderer.render(container.tree)];
|
|
case 13:
|
|
canvas = _c2.sent();
|
|
if (container.width && container.height) {
|
|
this.ctx.drawImage(canvas, 0, 0, container.width, container.height, container.bounds.left, container.bounds.top, container.bounds.width, container.bounds.height);
|
|
}
|
|
_c2.label = 14;
|
|
case 14:
|
|
if (container instanceof InputElementContainer) {
|
|
size = Math.min(container.bounds.width, container.bounds.height);
|
|
if (container.type === CHECKBOX) {
|
|
if (container.checked) {
|
|
this.ctx.save();
|
|
this.path([
|
|
new Vector(container.bounds.left + size * 0.39363, container.bounds.top + size * 0.79),
|
|
new Vector(container.bounds.left + size * 0.16, container.bounds.top + size * 0.5549),
|
|
new Vector(container.bounds.left + size * 0.27347, container.bounds.top + size * 0.44071),
|
|
new Vector(container.bounds.left + size * 0.39694, container.bounds.top + size * 0.5649),
|
|
new Vector(container.bounds.left + size * 0.72983, container.bounds.top + size * 0.23),
|
|
new Vector(container.bounds.left + size * 0.84, container.bounds.top + size * 0.34085),
|
|
new Vector(container.bounds.left + size * 0.39363, container.bounds.top + size * 0.79)
|
|
]);
|
|
this.ctx.fillStyle = asString(INPUT_COLOR);
|
|
this.ctx.fill();
|
|
this.ctx.restore();
|
|
}
|
|
} else if (container.type === RADIO) {
|
|
if (container.checked) {
|
|
this.ctx.save();
|
|
this.ctx.beginPath();
|
|
this.ctx.arc(container.bounds.left + size / 2, container.bounds.top + size / 2, size / 4, 0, Math.PI * 2, true);
|
|
this.ctx.fillStyle = asString(INPUT_COLOR);
|
|
this.ctx.fill();
|
|
this.ctx.restore();
|
|
}
|
|
}
|
|
}
|
|
if (isTextInputElement(container) && container.value.length) {
|
|
_b2 = this.createFontStyle(styles), fontFamily2 = _b2[0], fontSize2 = _b2[1];
|
|
baseline = this.fontMetrics.getMetrics(fontFamily2, fontSize2).baseline;
|
|
this.ctx.font = fontFamily2;
|
|
this.ctx.fillStyle = asString(styles.color);
|
|
this.ctx.textBaseline = "alphabetic";
|
|
this.ctx.textAlign = canvasTextAlign(container.styles.textAlign);
|
|
bounds = contentBox(container);
|
|
x = 0;
|
|
switch (container.styles.textAlign) {
|
|
case 1:
|
|
x += bounds.width / 2;
|
|
break;
|
|
case 2:
|
|
x += bounds.width;
|
|
break;
|
|
}
|
|
textBounds = bounds.add(x, 0, 0, -bounds.height / 2 + 1);
|
|
this.ctx.save();
|
|
this.path([
|
|
new Vector(bounds.left, bounds.top),
|
|
new Vector(bounds.left + bounds.width, bounds.top),
|
|
new Vector(bounds.left + bounds.width, bounds.top + bounds.height),
|
|
new Vector(bounds.left, bounds.top + bounds.height)
|
|
]);
|
|
this.ctx.clip();
|
|
this.renderTextWithLetterSpacing(new TextBounds(container.value, textBounds), styles.letterSpacing, baseline);
|
|
this.ctx.restore();
|
|
this.ctx.textBaseline = "alphabetic";
|
|
this.ctx.textAlign = "left";
|
|
}
|
|
if (!contains(
|
|
container.styles.display,
|
|
2048
|
|
/* LIST_ITEM */
|
|
)) return [3, 20];
|
|
if (!(container.styles.listStyleImage !== null)) return [3, 19];
|
|
img = container.styles.listStyleImage;
|
|
if (!(img.type === 0)) return [3, 18];
|
|
image2 = void 0;
|
|
url = img.url;
|
|
_c2.label = 15;
|
|
case 15:
|
|
_c2.trys.push([15, 17, , 18]);
|
|
return [4, this.context.cache.match(url)];
|
|
case 16:
|
|
image2 = _c2.sent();
|
|
this.ctx.drawImage(image2, container.bounds.left - (image2.width + 10), container.bounds.top);
|
|
return [3, 18];
|
|
case 17:
|
|
_c2.sent();
|
|
this.context.logger.error("Error loading list-style-image " + url);
|
|
return [3, 18];
|
|
case 18:
|
|
return [3, 20];
|
|
case 19:
|
|
if (paint.listValue && container.styles.listStyleType !== -1) {
|
|
fontFamily2 = this.createFontStyle(styles)[0];
|
|
this.ctx.font = fontFamily2;
|
|
this.ctx.fillStyle = asString(styles.color);
|
|
this.ctx.textBaseline = "middle";
|
|
this.ctx.textAlign = "right";
|
|
bounds = new Bounds(container.bounds.left, container.bounds.top + getAbsoluteValue(container.styles.paddingTop, container.bounds.width), container.bounds.width, computeLineHeight(styles.lineHeight, styles.fontSize.number) / 2 + 1);
|
|
this.renderTextWithLetterSpacing(new TextBounds(paint.listValue, bounds), styles.letterSpacing, computeLineHeight(styles.lineHeight, styles.fontSize.number) / 2 + 2);
|
|
this.ctx.textBaseline = "bottom";
|
|
this.ctx.textAlign = "left";
|
|
}
|
|
_c2.label = 20;
|
|
case 20:
|
|
return [
|
|
2
|
|
/*return*/
|
|
];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
CanvasRenderer.prototype.renderStackContent = function(stack) {
|
|
return __awaiter(this, void 0, void 0, function() {
|
|
var _i, _a2, child, _b2, _c2, child, _d2, _e, child, _f, _g, child, _h, _j, child, _k, _l, child, _m, _o, child;
|
|
return __generator(this, function(_p) {
|
|
switch (_p.label) {
|
|
case 0:
|
|
if (contains(
|
|
stack.element.container.flags,
|
|
16
|
|
/* DEBUG_RENDER */
|
|
)) {
|
|
debugger;
|
|
}
|
|
return [4, this.renderNodeBackgroundAndBorders(stack.element)];
|
|
case 1:
|
|
_p.sent();
|
|
_i = 0, _a2 = stack.negativeZIndex;
|
|
_p.label = 2;
|
|
case 2:
|
|
if (!(_i < _a2.length)) return [3, 5];
|
|
child = _a2[_i];
|
|
return [4, this.renderStack(child)];
|
|
case 3:
|
|
_p.sent();
|
|
_p.label = 4;
|
|
case 4:
|
|
_i++;
|
|
return [3, 2];
|
|
case 5:
|
|
return [4, this.renderNodeContent(stack.element)];
|
|
case 6:
|
|
_p.sent();
|
|
_b2 = 0, _c2 = stack.nonInlineLevel;
|
|
_p.label = 7;
|
|
case 7:
|
|
if (!(_b2 < _c2.length)) return [3, 10];
|
|
child = _c2[_b2];
|
|
return [4, this.renderNode(child)];
|
|
case 8:
|
|
_p.sent();
|
|
_p.label = 9;
|
|
case 9:
|
|
_b2++;
|
|
return [3, 7];
|
|
case 10:
|
|
_d2 = 0, _e = stack.nonPositionedFloats;
|
|
_p.label = 11;
|
|
case 11:
|
|
if (!(_d2 < _e.length)) return [3, 14];
|
|
child = _e[_d2];
|
|
return [4, this.renderStack(child)];
|
|
case 12:
|
|
_p.sent();
|
|
_p.label = 13;
|
|
case 13:
|
|
_d2++;
|
|
return [3, 11];
|
|
case 14:
|
|
_f = 0, _g = stack.nonPositionedInlineLevel;
|
|
_p.label = 15;
|
|
case 15:
|
|
if (!(_f < _g.length)) return [3, 18];
|
|
child = _g[_f];
|
|
return [4, this.renderStack(child)];
|
|
case 16:
|
|
_p.sent();
|
|
_p.label = 17;
|
|
case 17:
|
|
_f++;
|
|
return [3, 15];
|
|
case 18:
|
|
_h = 0, _j = stack.inlineLevel;
|
|
_p.label = 19;
|
|
case 19:
|
|
if (!(_h < _j.length)) return [3, 22];
|
|
child = _j[_h];
|
|
return [4, this.renderNode(child)];
|
|
case 20:
|
|
_p.sent();
|
|
_p.label = 21;
|
|
case 21:
|
|
_h++;
|
|
return [3, 19];
|
|
case 22:
|
|
_k = 0, _l = stack.zeroOrAutoZIndexOrTransformedOrOpacity;
|
|
_p.label = 23;
|
|
case 23:
|
|
if (!(_k < _l.length)) return [3, 26];
|
|
child = _l[_k];
|
|
return [4, this.renderStack(child)];
|
|
case 24:
|
|
_p.sent();
|
|
_p.label = 25;
|
|
case 25:
|
|
_k++;
|
|
return [3, 23];
|
|
case 26:
|
|
_m = 0, _o = stack.positiveZIndex;
|
|
_p.label = 27;
|
|
case 27:
|
|
if (!(_m < _o.length)) return [3, 30];
|
|
child = _o[_m];
|
|
return [4, this.renderStack(child)];
|
|
case 28:
|
|
_p.sent();
|
|
_p.label = 29;
|
|
case 29:
|
|
_m++;
|
|
return [3, 27];
|
|
case 30:
|
|
return [
|
|
2
|
|
/*return*/
|
|
];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
CanvasRenderer.prototype.mask = function(paths) {
|
|
this.ctx.beginPath();
|
|
this.ctx.moveTo(0, 0);
|
|
this.ctx.lineTo(this.canvas.width, 0);
|
|
this.ctx.lineTo(this.canvas.width, this.canvas.height);
|
|
this.ctx.lineTo(0, this.canvas.height);
|
|
this.ctx.lineTo(0, 0);
|
|
this.formatPath(paths.slice(0).reverse());
|
|
this.ctx.closePath();
|
|
};
|
|
CanvasRenderer.prototype.path = function(paths) {
|
|
this.ctx.beginPath();
|
|
this.formatPath(paths);
|
|
this.ctx.closePath();
|
|
};
|
|
CanvasRenderer.prototype.formatPath = function(paths) {
|
|
var _this = this;
|
|
paths.forEach(function(point, index) {
|
|
var start = isBezierCurve(point) ? point.start : point;
|
|
if (index === 0) {
|
|
_this.ctx.moveTo(start.x, start.y);
|
|
} else {
|
|
_this.ctx.lineTo(start.x, start.y);
|
|
}
|
|
if (isBezierCurve(point)) {
|
|
_this.ctx.bezierCurveTo(point.startControl.x, point.startControl.y, point.endControl.x, point.endControl.y, point.end.x, point.end.y);
|
|
}
|
|
});
|
|
};
|
|
CanvasRenderer.prototype.renderRepeat = function(path, pattern, offsetX, offsetY) {
|
|
this.path(path);
|
|
this.ctx.fillStyle = pattern;
|
|
this.ctx.translate(offsetX, offsetY);
|
|
this.ctx.fill();
|
|
this.ctx.translate(-offsetX, -offsetY);
|
|
};
|
|
CanvasRenderer.prototype.resizeImage = function(image2, width, height) {
|
|
var _a2;
|
|
if (image2.width === width && image2.height === height) {
|
|
return image2;
|
|
}
|
|
var ownerDocument = (_a2 = this.canvas.ownerDocument) !== null && _a2 !== void 0 ? _a2 : document;
|
|
var canvas = ownerDocument.createElement("canvas");
|
|
canvas.width = Math.max(1, width);
|
|
canvas.height = Math.max(1, height);
|
|
var ctx = canvas.getContext("2d");
|
|
ctx.drawImage(image2, 0, 0, image2.width, image2.height, 0, 0, width, height);
|
|
return canvas;
|
|
};
|
|
CanvasRenderer.prototype.renderBackgroundImage = function(container) {
|
|
return __awaiter(this, void 0, void 0, function() {
|
|
var index, _loop_1, this_1, _i, _a2, backgroundImage2;
|
|
return __generator(this, function(_b2) {
|
|
switch (_b2.label) {
|
|
case 0:
|
|
index = container.styles.backgroundImage.length - 1;
|
|
_loop_1 = function(backgroundImage3) {
|
|
var image2, url, _c2, path, x, y, width, height, pattern, _d2, path, x, y, width, height, _e, lineLength, x0, x1, y0, y1, canvas, ctx, gradient_1, pattern, _f, path, left, top_1, width, height, position2, x, y, _g, rx, ry, radialGradient_1, midX, midY, f2, invF;
|
|
return __generator(this, function(_h) {
|
|
switch (_h.label) {
|
|
case 0:
|
|
if (!(backgroundImage3.type === 0)) return [3, 5];
|
|
image2 = void 0;
|
|
url = backgroundImage3.url;
|
|
_h.label = 1;
|
|
case 1:
|
|
_h.trys.push([1, 3, , 4]);
|
|
return [4, this_1.context.cache.match(url)];
|
|
case 2:
|
|
image2 = _h.sent();
|
|
return [3, 4];
|
|
case 3:
|
|
_h.sent();
|
|
this_1.context.logger.error("Error loading background-image " + url);
|
|
return [3, 4];
|
|
case 4:
|
|
if (image2) {
|
|
_c2 = calculateBackgroundRendering(container, index, [
|
|
image2.width,
|
|
image2.height,
|
|
image2.width / image2.height
|
|
]), path = _c2[0], x = _c2[1], y = _c2[2], width = _c2[3], height = _c2[4];
|
|
pattern = this_1.ctx.createPattern(this_1.resizeImage(image2, width, height), "repeat");
|
|
this_1.renderRepeat(path, pattern, x, y);
|
|
}
|
|
return [3, 6];
|
|
case 5:
|
|
if (isLinearGradient(backgroundImage3)) {
|
|
_d2 = calculateBackgroundRendering(container, index, [null, null, null]), path = _d2[0], x = _d2[1], y = _d2[2], width = _d2[3], height = _d2[4];
|
|
_e = calculateGradientDirection(backgroundImage3.angle, width, height), lineLength = _e[0], x0 = _e[1], x1 = _e[2], y0 = _e[3], y1 = _e[4];
|
|
canvas = document.createElement("canvas");
|
|
canvas.width = width;
|
|
canvas.height = height;
|
|
ctx = canvas.getContext("2d");
|
|
gradient_1 = ctx.createLinearGradient(x0, y0, x1, y1);
|
|
processColorStops(backgroundImage3.stops, lineLength).forEach(function(colorStop) {
|
|
return gradient_1.addColorStop(colorStop.stop, asString(colorStop.color));
|
|
});
|
|
ctx.fillStyle = gradient_1;
|
|
ctx.fillRect(0, 0, width, height);
|
|
if (width > 0 && height > 0) {
|
|
pattern = this_1.ctx.createPattern(canvas, "repeat");
|
|
this_1.renderRepeat(path, pattern, x, y);
|
|
}
|
|
} else if (isRadialGradient(backgroundImage3)) {
|
|
_f = calculateBackgroundRendering(container, index, [
|
|
null,
|
|
null,
|
|
null
|
|
]), path = _f[0], left = _f[1], top_1 = _f[2], width = _f[3], height = _f[4];
|
|
position2 = backgroundImage3.position.length === 0 ? [FIFTY_PERCENT] : backgroundImage3.position;
|
|
x = getAbsoluteValue(position2[0], width);
|
|
y = getAbsoluteValue(position2[position2.length - 1], height);
|
|
_g = calculateRadius(backgroundImage3, x, y, width, height), rx = _g[0], ry = _g[1];
|
|
if (rx > 0 && ry > 0) {
|
|
radialGradient_1 = this_1.ctx.createRadialGradient(left + x, top_1 + y, 0, left + x, top_1 + y, rx);
|
|
processColorStops(backgroundImage3.stops, rx * 2).forEach(function(colorStop) {
|
|
return radialGradient_1.addColorStop(colorStop.stop, asString(colorStop.color));
|
|
});
|
|
this_1.path(path);
|
|
this_1.ctx.fillStyle = radialGradient_1;
|
|
if (rx !== ry) {
|
|
midX = container.bounds.left + 0.5 * container.bounds.width;
|
|
midY = container.bounds.top + 0.5 * container.bounds.height;
|
|
f2 = ry / rx;
|
|
invF = 1 / f2;
|
|
this_1.ctx.save();
|
|
this_1.ctx.translate(midX, midY);
|
|
this_1.ctx.transform(1, 0, 0, f2, 0, 0);
|
|
this_1.ctx.translate(-midX, -midY);
|
|
this_1.ctx.fillRect(left, invF * (top_1 - midY) + midY, width, height * invF);
|
|
this_1.ctx.restore();
|
|
} else {
|
|
this_1.ctx.fill();
|
|
}
|
|
}
|
|
}
|
|
_h.label = 6;
|
|
case 6:
|
|
index--;
|
|
return [
|
|
2
|
|
/*return*/
|
|
];
|
|
}
|
|
});
|
|
};
|
|
this_1 = this;
|
|
_i = 0, _a2 = container.styles.backgroundImage.slice(0).reverse();
|
|
_b2.label = 1;
|
|
case 1:
|
|
if (!(_i < _a2.length)) return [3, 4];
|
|
backgroundImage2 = _a2[_i];
|
|
return [5, _loop_1(backgroundImage2)];
|
|
case 2:
|
|
_b2.sent();
|
|
_b2.label = 3;
|
|
case 3:
|
|
_i++;
|
|
return [3, 1];
|
|
case 4:
|
|
return [
|
|
2
|
|
/*return*/
|
|
];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
CanvasRenderer.prototype.renderSolidBorder = function(color2, side, curvePoints) {
|
|
return __awaiter(this, void 0, void 0, function() {
|
|
return __generator(this, function(_a2) {
|
|
this.path(parsePathForBorder(curvePoints, side));
|
|
this.ctx.fillStyle = asString(color2);
|
|
this.ctx.fill();
|
|
return [
|
|
2
|
|
/*return*/
|
|
];
|
|
});
|
|
});
|
|
};
|
|
CanvasRenderer.prototype.renderDoubleBorder = function(color2, width, side, curvePoints) {
|
|
return __awaiter(this, void 0, void 0, function() {
|
|
var outerPaths, innerPaths;
|
|
return __generator(this, function(_a2) {
|
|
switch (_a2.label) {
|
|
case 0:
|
|
if (!(width < 3)) return [3, 2];
|
|
return [4, this.renderSolidBorder(color2, side, curvePoints)];
|
|
case 1:
|
|
_a2.sent();
|
|
return [
|
|
2
|
|
/*return*/
|
|
];
|
|
case 2:
|
|
outerPaths = parsePathForBorderDoubleOuter(curvePoints, side);
|
|
this.path(outerPaths);
|
|
this.ctx.fillStyle = asString(color2);
|
|
this.ctx.fill();
|
|
innerPaths = parsePathForBorderDoubleInner(curvePoints, side);
|
|
this.path(innerPaths);
|
|
this.ctx.fill();
|
|
return [
|
|
2
|
|
/*return*/
|
|
];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
CanvasRenderer.prototype.renderNodeBackgroundAndBorders = function(paint) {
|
|
return __awaiter(this, void 0, void 0, function() {
|
|
var styles, hasBackground, borders, backgroundPaintingArea, side, _i, borders_1, border;
|
|
var _this = this;
|
|
return __generator(this, function(_a2) {
|
|
switch (_a2.label) {
|
|
case 0:
|
|
this.applyEffects(paint.getEffects(
|
|
2
|
|
/* BACKGROUND_BORDERS */
|
|
));
|
|
styles = paint.container.styles;
|
|
hasBackground = !isTransparent(styles.backgroundColor) || styles.backgroundImage.length;
|
|
borders = [
|
|
{ style: styles.borderTopStyle, color: styles.borderTopColor, width: styles.borderTopWidth },
|
|
{ style: styles.borderRightStyle, color: styles.borderRightColor, width: styles.borderRightWidth },
|
|
{ style: styles.borderBottomStyle, color: styles.borderBottomColor, width: styles.borderBottomWidth },
|
|
{ style: styles.borderLeftStyle, color: styles.borderLeftColor, width: styles.borderLeftWidth }
|
|
];
|
|
backgroundPaintingArea = calculateBackgroundCurvedPaintingArea(getBackgroundValueForIndex(styles.backgroundClip, 0), paint.curves);
|
|
if (!(hasBackground || styles.boxShadow.length)) return [3, 2];
|
|
this.ctx.save();
|
|
this.path(backgroundPaintingArea);
|
|
this.ctx.clip();
|
|
if (!isTransparent(styles.backgroundColor)) {
|
|
this.ctx.fillStyle = asString(styles.backgroundColor);
|
|
this.ctx.fill();
|
|
}
|
|
return [4, this.renderBackgroundImage(paint.container)];
|
|
case 1:
|
|
_a2.sent();
|
|
this.ctx.restore();
|
|
styles.boxShadow.slice(0).reverse().forEach(function(shadow) {
|
|
_this.ctx.save();
|
|
var borderBoxArea = calculateBorderBoxPath(paint.curves);
|
|
var maskOffset = shadow.inset ? 0 : MASK_OFFSET;
|
|
var shadowPaintingArea = transformPath(borderBoxArea, -maskOffset + (shadow.inset ? 1 : -1) * shadow.spread.number, (shadow.inset ? 1 : -1) * shadow.spread.number, shadow.spread.number * (shadow.inset ? -2 : 2), shadow.spread.number * (shadow.inset ? -2 : 2));
|
|
if (shadow.inset) {
|
|
_this.path(borderBoxArea);
|
|
_this.ctx.clip();
|
|
_this.mask(shadowPaintingArea);
|
|
} else {
|
|
_this.mask(borderBoxArea);
|
|
_this.ctx.clip();
|
|
_this.path(shadowPaintingArea);
|
|
}
|
|
_this.ctx.shadowOffsetX = shadow.offsetX.number + maskOffset;
|
|
_this.ctx.shadowOffsetY = shadow.offsetY.number;
|
|
_this.ctx.shadowColor = asString(shadow.color);
|
|
_this.ctx.shadowBlur = shadow.blur.number;
|
|
_this.ctx.fillStyle = shadow.inset ? asString(shadow.color) : "rgba(0,0,0,1)";
|
|
_this.ctx.fill();
|
|
_this.ctx.restore();
|
|
});
|
|
_a2.label = 2;
|
|
case 2:
|
|
side = 0;
|
|
_i = 0, borders_1 = borders;
|
|
_a2.label = 3;
|
|
case 3:
|
|
if (!(_i < borders_1.length)) return [3, 13];
|
|
border = borders_1[_i];
|
|
if (!(border.style !== 0 && !isTransparent(border.color) && border.width > 0)) return [3, 11];
|
|
if (!(border.style === 2)) return [3, 5];
|
|
return [4, this.renderDashedDottedBorder(
|
|
border.color,
|
|
border.width,
|
|
side,
|
|
paint.curves,
|
|
2
|
|
/* DASHED */
|
|
)];
|
|
case 4:
|
|
_a2.sent();
|
|
return [3, 11];
|
|
case 5:
|
|
if (!(border.style === 3)) return [3, 7];
|
|
return [4, this.renderDashedDottedBorder(
|
|
border.color,
|
|
border.width,
|
|
side,
|
|
paint.curves,
|
|
3
|
|
/* DOTTED */
|
|
)];
|
|
case 6:
|
|
_a2.sent();
|
|
return [3, 11];
|
|
case 7:
|
|
if (!(border.style === 4)) return [3, 9];
|
|
return [4, this.renderDoubleBorder(border.color, border.width, side, paint.curves)];
|
|
case 8:
|
|
_a2.sent();
|
|
return [3, 11];
|
|
case 9:
|
|
return [4, this.renderSolidBorder(border.color, side, paint.curves)];
|
|
case 10:
|
|
_a2.sent();
|
|
_a2.label = 11;
|
|
case 11:
|
|
side++;
|
|
_a2.label = 12;
|
|
case 12:
|
|
_i++;
|
|
return [3, 3];
|
|
case 13:
|
|
return [
|
|
2
|
|
/*return*/
|
|
];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
CanvasRenderer.prototype.renderDashedDottedBorder = function(color2, width, side, curvePoints, style2) {
|
|
return __awaiter(this, void 0, void 0, function() {
|
|
var strokePaths, boxPaths, startX, startY, endX, endY, length, dashLength, spaceLength, useLineDash, multiplier, numberOfDashes, minSpace, maxSpace, path1, path2, path1, path2;
|
|
return __generator(this, function(_a2) {
|
|
this.ctx.save();
|
|
strokePaths = parsePathForBorderStroke(curvePoints, side);
|
|
boxPaths = parsePathForBorder(curvePoints, side);
|
|
if (style2 === 2) {
|
|
this.path(boxPaths);
|
|
this.ctx.clip();
|
|
}
|
|
if (isBezierCurve(boxPaths[0])) {
|
|
startX = boxPaths[0].start.x;
|
|
startY = boxPaths[0].start.y;
|
|
} else {
|
|
startX = boxPaths[0].x;
|
|
startY = boxPaths[0].y;
|
|
}
|
|
if (isBezierCurve(boxPaths[1])) {
|
|
endX = boxPaths[1].end.x;
|
|
endY = boxPaths[1].end.y;
|
|
} else {
|
|
endX = boxPaths[1].x;
|
|
endY = boxPaths[1].y;
|
|
}
|
|
if (side === 0 || side === 2) {
|
|
length = Math.abs(startX - endX);
|
|
} else {
|
|
length = Math.abs(startY - endY);
|
|
}
|
|
this.ctx.beginPath();
|
|
if (style2 === 3) {
|
|
this.formatPath(strokePaths);
|
|
} else {
|
|
this.formatPath(boxPaths.slice(0, 2));
|
|
}
|
|
dashLength = width < 3 ? width * 3 : width * 2;
|
|
spaceLength = width < 3 ? width * 2 : width;
|
|
if (style2 === 3) {
|
|
dashLength = width;
|
|
spaceLength = width;
|
|
}
|
|
useLineDash = true;
|
|
if (length <= dashLength * 2) {
|
|
useLineDash = false;
|
|
} else if (length <= dashLength * 2 + spaceLength) {
|
|
multiplier = length / (2 * dashLength + spaceLength);
|
|
dashLength *= multiplier;
|
|
spaceLength *= multiplier;
|
|
} else {
|
|
numberOfDashes = Math.floor((length + spaceLength) / (dashLength + spaceLength));
|
|
minSpace = (length - numberOfDashes * dashLength) / (numberOfDashes - 1);
|
|
maxSpace = (length - (numberOfDashes + 1) * dashLength) / numberOfDashes;
|
|
spaceLength = maxSpace <= 0 || Math.abs(spaceLength - minSpace) < Math.abs(spaceLength - maxSpace) ? minSpace : maxSpace;
|
|
}
|
|
if (useLineDash) {
|
|
if (style2 === 3) {
|
|
this.ctx.setLineDash([0, dashLength + spaceLength]);
|
|
} else {
|
|
this.ctx.setLineDash([dashLength, spaceLength]);
|
|
}
|
|
}
|
|
if (style2 === 3) {
|
|
this.ctx.lineCap = "round";
|
|
this.ctx.lineWidth = width;
|
|
} else {
|
|
this.ctx.lineWidth = width * 2 + 1.1;
|
|
}
|
|
this.ctx.strokeStyle = asString(color2);
|
|
this.ctx.stroke();
|
|
this.ctx.setLineDash([]);
|
|
if (style2 === 2) {
|
|
if (isBezierCurve(boxPaths[0])) {
|
|
path1 = boxPaths[3];
|
|
path2 = boxPaths[0];
|
|
this.ctx.beginPath();
|
|
this.formatPath([new Vector(path1.end.x, path1.end.y), new Vector(path2.start.x, path2.start.y)]);
|
|
this.ctx.stroke();
|
|
}
|
|
if (isBezierCurve(boxPaths[1])) {
|
|
path1 = boxPaths[1];
|
|
path2 = boxPaths[2];
|
|
this.ctx.beginPath();
|
|
this.formatPath([new Vector(path1.end.x, path1.end.y), new Vector(path2.start.x, path2.start.y)]);
|
|
this.ctx.stroke();
|
|
}
|
|
}
|
|
this.ctx.restore();
|
|
return [
|
|
2
|
|
/*return*/
|
|
];
|
|
});
|
|
});
|
|
};
|
|
CanvasRenderer.prototype.render = function(element) {
|
|
return __awaiter(this, void 0, void 0, function() {
|
|
var stack;
|
|
return __generator(this, function(_a2) {
|
|
switch (_a2.label) {
|
|
case 0:
|
|
if (this.options.backgroundColor) {
|
|
this.ctx.fillStyle = asString(this.options.backgroundColor);
|
|
this.ctx.fillRect(this.options.x, this.options.y, this.options.width, this.options.height);
|
|
}
|
|
stack = parseStackingContexts(element);
|
|
return [4, this.renderStack(stack)];
|
|
case 1:
|
|
_a2.sent();
|
|
this.applyEffects([]);
|
|
return [2, this.canvas];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
return CanvasRenderer;
|
|
})(Renderer);
|
|
var isTextInputElement = function(container) {
|
|
if (container instanceof TextareaElementContainer) {
|
|
return true;
|
|
} else if (container instanceof SelectElementContainer) {
|
|
return true;
|
|
} else if (container instanceof InputElementContainer && container.type !== RADIO && container.type !== CHECKBOX) {
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
var calculateBackgroundCurvedPaintingArea = function(clip, curves) {
|
|
switch (clip) {
|
|
case 0:
|
|
return calculateBorderBoxPath(curves);
|
|
case 2:
|
|
return calculateContentBoxPath(curves);
|
|
case 1:
|
|
default:
|
|
return calculatePaddingBoxPath(curves);
|
|
}
|
|
};
|
|
var canvasTextAlign = function(textAlign2) {
|
|
switch (textAlign2) {
|
|
case 1:
|
|
return "center";
|
|
case 2:
|
|
return "right";
|
|
case 0:
|
|
default:
|
|
return "left";
|
|
}
|
|
};
|
|
var iOSBrokenFonts = ["-apple-system", "system-ui"];
|
|
var fixIOSSystemFonts = function(fontFamilies) {
|
|
return /iPhone OS 15_(0|1)/.test(window.navigator.userAgent) ? fontFamilies.filter(function(fontFamily2) {
|
|
return iOSBrokenFonts.indexOf(fontFamily2) === -1;
|
|
}) : fontFamilies;
|
|
};
|
|
(function(_super) {
|
|
__extends$1(ForeignObjectRenderer, _super);
|
|
function ForeignObjectRenderer(context, options) {
|
|
var _this = _super.call(this, context, options) || this;
|
|
_this.canvas = options.canvas ? options.canvas : document.createElement("canvas");
|
|
_this.ctx = _this.canvas.getContext("2d");
|
|
_this.options = options;
|
|
_this.canvas.width = Math.floor(options.width * options.scale);
|
|
_this.canvas.height = Math.floor(options.height * options.scale);
|
|
_this.canvas.style.width = options.width + "px";
|
|
_this.canvas.style.height = options.height + "px";
|
|
_this.ctx.scale(_this.options.scale, _this.options.scale);
|
|
_this.ctx.translate(-options.x, -options.y);
|
|
_this.context.logger.debug("EXPERIMENTAL ForeignObject renderer initialized (" + options.width + "x" + options.height + " at " + options.x + "," + options.y + ") with scale " + options.scale);
|
|
return _this;
|
|
}
|
|
ForeignObjectRenderer.prototype.render = function(element) {
|
|
return __awaiter(this, void 0, void 0, function() {
|
|
var svg, img;
|
|
return __generator(this, function(_a2) {
|
|
switch (_a2.label) {
|
|
case 0:
|
|
svg = createForeignObjectSVG(this.options.width * this.options.scale, this.options.height * this.options.scale, this.options.scale, this.options.scale, element);
|
|
return [4, loadSerializedSVG(svg)];
|
|
case 1:
|
|
img = _a2.sent();
|
|
if (this.options.backgroundColor) {
|
|
this.ctx.fillStyle = asString(this.options.backgroundColor);
|
|
this.ctx.fillRect(0, 0, this.options.width * this.options.scale, this.options.height * this.options.scale);
|
|
}
|
|
this.ctx.drawImage(img, -this.options.x * this.options.scale, -this.options.y * this.options.scale);
|
|
return [2, this.canvas];
|
|
}
|
|
});
|
|
});
|
|
};
|
|
return ForeignObjectRenderer;
|
|
})(Renderer);
|
|
var loadSerializedSVG = function(svg) {
|
|
return new Promise(function(resolve, reject) {
|
|
var img = new Image();
|
|
img.onload = function() {
|
|
resolve(img);
|
|
};
|
|
img.onerror = reject;
|
|
img.src = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(new XMLSerializer().serializeToString(svg));
|
|
});
|
|
};
|
|
if (typeof window !== "undefined") {
|
|
CacheStorage.setContext(window);
|
|
}
|
|
function tryOnScopeDispose(fn) {
|
|
if (getCurrentScope()) {
|
|
onScopeDispose(fn);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
const isClient = typeof window !== "undefined";
|
|
function createFilterWrapper(filter, fn) {
|
|
function wrapper(...args) {
|
|
filter(() => fn.apply(this, args), { fn, thisArg: this, args });
|
|
}
|
|
return wrapper;
|
|
}
|
|
function debounceFilter(ms, options = {}) {
|
|
let timer;
|
|
let maxTimer;
|
|
const filter = (invoke) => {
|
|
const duration2 = unref(ms);
|
|
const maxDuration = unref(options.maxWait);
|
|
if (timer)
|
|
clearTimeout(timer);
|
|
if (duration2 <= 0 || maxDuration !== void 0 && maxDuration <= 0) {
|
|
if (maxTimer) {
|
|
clearTimeout(maxTimer);
|
|
maxTimer = null;
|
|
}
|
|
return invoke();
|
|
}
|
|
if (maxDuration && !maxTimer) {
|
|
maxTimer = setTimeout(() => {
|
|
if (timer)
|
|
clearTimeout(timer);
|
|
maxTimer = null;
|
|
invoke();
|
|
}, maxDuration);
|
|
}
|
|
timer = setTimeout(() => {
|
|
if (maxTimer)
|
|
clearTimeout(maxTimer);
|
|
maxTimer = null;
|
|
invoke();
|
|
}, duration2);
|
|
};
|
|
return filter;
|
|
}
|
|
function useDebounceFn(fn, ms = 200, options = {}) {
|
|
return createFilterWrapper(debounceFilter(ms, options), fn);
|
|
}
|
|
function unrefElement(elRef) {
|
|
var _a2;
|
|
const plain = unref(elRef);
|
|
return (_a2 = plain == null ? void 0 : plain.$el) != null ? _a2 : plain;
|
|
}
|
|
const defaultWindow = isClient ? window : void 0;
|
|
const _global = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
|
|
const globalKey = "__vueuse_ssr_handlers__";
|
|
_global[globalKey] = _global[globalKey] || {};
|
|
var __getOwnPropSymbols$c = Object.getOwnPropertySymbols;
|
|
var __hasOwnProp$c = Object.prototype.hasOwnProperty;
|
|
var __propIsEnum$c = Object.prototype.propertyIsEnumerable;
|
|
var __objRest$2 = (source, exclude) => {
|
|
var target = {};
|
|
for (var prop in source)
|
|
if (__hasOwnProp$c.call(source, prop) && exclude.indexOf(prop) < 0)
|
|
target[prop] = source[prop];
|
|
if (source != null && __getOwnPropSymbols$c)
|
|
for (var prop of __getOwnPropSymbols$c(source)) {
|
|
if (exclude.indexOf(prop) < 0 && __propIsEnum$c.call(source, prop))
|
|
target[prop] = source[prop];
|
|
}
|
|
return target;
|
|
};
|
|
function useResizeObserver(target, callback, options = {}) {
|
|
const _a2 = options, { window: window2 = defaultWindow } = _a2, observerOptions = __objRest$2(_a2, ["window"]);
|
|
let observer;
|
|
const isSupported = window2 && "ResizeObserver" in window2;
|
|
const cleanup = () => {
|
|
if (observer) {
|
|
observer.disconnect();
|
|
observer = void 0;
|
|
}
|
|
};
|
|
const stopWatch = watch(() => unrefElement(target), (el) => {
|
|
cleanup();
|
|
if (isSupported && window2 && el) {
|
|
observer = new ResizeObserver(callback);
|
|
observer.observe(el, observerOptions);
|
|
}
|
|
}, { immediate: true, flush: "post" });
|
|
const stop = () => {
|
|
cleanup();
|
|
stopWatch();
|
|
};
|
|
tryOnScopeDispose(stop);
|
|
return {
|
|
isSupported,
|
|
stop
|
|
};
|
|
}
|
|
var _a$1, _b$1;
|
|
isClient && (window == null ? void 0 : window.navigator) && ((_a$1 = window == null ? void 0 : window.navigator) == null ? void 0 : _a$1.platform) && /iP(ad|hone|od)/.test((_b$1 = window == null ? void 0 : window.navigator) == null ? void 0 : _b$1.platform);
|
|
const getItemWidth = ({ breakpoints, wrapperWidth, gutter, hasAroundGutter, initWidth }) => {
|
|
const sizeList = Object.keys(breakpoints).map((key) => {
|
|
return Number(key);
|
|
}).sort((a2, b) => a2 - b);
|
|
let validSize = wrapperWidth;
|
|
let breakpoint = false;
|
|
for (const size of sizeList) {
|
|
if (wrapperWidth <= size) {
|
|
validSize = size;
|
|
breakpoint = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!breakpoint)
|
|
return initWidth;
|
|
let breakWidth = 0;
|
|
const col = breakpoints[validSize].rowPerView;
|
|
if (hasAroundGutter)
|
|
breakWidth = (wrapperWidth - gutter) / col - gutter;
|
|
else
|
|
breakWidth = (wrapperWidth - (col - 1) * gutter) / col;
|
|
return Math.floor(breakWidth);
|
|
};
|
|
function useCalculateCols(props) {
|
|
const wrapperWidth = ref(0);
|
|
const waterfallWrapper = ref(null);
|
|
useResizeObserver(waterfallWrapper, (entries) => {
|
|
const entry = entries[0];
|
|
const { width } = entry.contentRect;
|
|
wrapperWidth.value = width;
|
|
});
|
|
const colWidth = computed(() => {
|
|
return getItemWidth({
|
|
wrapperWidth: wrapperWidth.value,
|
|
breakpoints: props.breakpoints,
|
|
gutter: props.gutter,
|
|
hasAroundGutter: props.hasAroundGutter,
|
|
initWidth: props.width
|
|
});
|
|
});
|
|
const cols = computed(() => {
|
|
const offset2 = props.hasAroundGutter ? -props.gutter : props.gutter;
|
|
const val = (wrapperWidth.value + offset2) / (colWidth.value + props.gutter);
|
|
return Math.floor(val);
|
|
});
|
|
const offsetX = computed(() => {
|
|
if (props.align === "left") {
|
|
return 0;
|
|
} else if (props.align === "center") {
|
|
const offset2 = props.hasAroundGutter ? props.gutter : -props.gutter;
|
|
const contextWidth = cols.value * (colWidth.value + props.gutter) + offset2;
|
|
return (wrapperWidth.value - contextWidth) / 2;
|
|
} else {
|
|
const offset2 = props.hasAroundGutter ? props.gutter : -props.gutter;
|
|
const contextWidth = cols.value * (colWidth.value + props.gutter) + offset2;
|
|
return wrapperWidth.value - contextWidth;
|
|
}
|
|
});
|
|
return {
|
|
waterfallWrapper,
|
|
wrapperWidth,
|
|
colWidth,
|
|
cols,
|
|
offsetX
|
|
};
|
|
}
|
|
function hasClass(el, className) {
|
|
const reg = new RegExp(`(^|\\s)${className}(\\s|$)`);
|
|
return reg.test(el.className);
|
|
}
|
|
function addClass(el, className) {
|
|
if (hasClass(el, className))
|
|
return;
|
|
const newClass = el.className.split(/\s+/);
|
|
newClass.push(className);
|
|
el.className = newClass.join(" ");
|
|
}
|
|
const elementStyle$5 = document.createElement("div").style;
|
|
const vendor$5 = (() => {
|
|
const transformNames = {
|
|
standard: "transform",
|
|
webkit: "webkitTransform",
|
|
Moz: "MozTransform",
|
|
O: "OTransform",
|
|
ms: "msTransform"
|
|
};
|
|
for (const key in transformNames) {
|
|
const val = transformNames[key];
|
|
if (elementStyle$5[val] !== void 0)
|
|
return key;
|
|
}
|
|
return false;
|
|
})();
|
|
function prefixStyle$5(style2) {
|
|
if (vendor$5 === false)
|
|
return false;
|
|
if (vendor$5 === "standard")
|
|
return style2;
|
|
return vendor$5 + style2.charAt(0).toUpperCase() + style2.substr(1);
|
|
}
|
|
const transform$2 = prefixStyle$5("transform");
|
|
const duration = prefixStyle$5("animation-duration");
|
|
const delay = prefixStyle$5("animation-delay");
|
|
const transition$1 = prefixStyle$5("transition");
|
|
const fillMode = prefixStyle$5("animation-fill-mode");
|
|
function useLayout(props, colWidth, cols, offsetX, waterfallWrapper) {
|
|
const posY = ref([]);
|
|
const wrapperHeight = ref(0);
|
|
const getX = (index) => {
|
|
const count = props.hasAroundGutter ? index + 1 : index;
|
|
return props.gutter * count + colWidth.value * index + offsetX.value;
|
|
};
|
|
const initY = () => {
|
|
posY.value = new Array(cols.value).fill(props.hasAroundGutter ? props.gutter : 0);
|
|
};
|
|
const animation = addAnimation(props);
|
|
const layoutHandle = async () => {
|
|
return new Promise((resolve) => {
|
|
initY();
|
|
const items = [];
|
|
if (waterfallWrapper && waterfallWrapper.value) {
|
|
waterfallWrapper.value.childNodes.forEach((el) => {
|
|
if (el.className === "waterfall-item")
|
|
items.push(el);
|
|
});
|
|
}
|
|
if (items.length === 0)
|
|
return false;
|
|
for (let i = 0; i < items.length; i++) {
|
|
const curItem = items[i];
|
|
const minY = Math.min.apply(null, posY.value);
|
|
const minYIndex = posY.value.indexOf(minY);
|
|
const curX = getX(minYIndex);
|
|
const style2 = curItem.style;
|
|
if (transform$2)
|
|
style2[transform$2] = `translate3d(${Math.floor(curX)}px,${Math.floor(minY)}px, 0)`;
|
|
style2.width = `${colWidth.value}px`;
|
|
style2.visibility = "visible";
|
|
const { height } = curItem.getBoundingClientRect();
|
|
posY.value[minYIndex] += height + props.gutter;
|
|
if (!props.animationCancel) {
|
|
animation(curItem, () => {
|
|
const time2 = props.posDuration / 1e3;
|
|
if (transition$1)
|
|
style2[transition$1] = `transform ${time2}s`;
|
|
});
|
|
}
|
|
}
|
|
wrapperHeight.value = Math.max.apply(null, posY.value);
|
|
setTimeout(() => {
|
|
resolve(true);
|
|
}, props.posDuration);
|
|
});
|
|
};
|
|
return {
|
|
wrapperHeight,
|
|
layoutHandle
|
|
};
|
|
}
|
|
function addAnimation(props) {
|
|
return (item, callback) => {
|
|
const content = item.firstChild;
|
|
if (content && !hasClass(content, props.animationPrefix)) {
|
|
const durationSec = `${props.animationDuration / 1e3}s`;
|
|
const delaySec = `${props.animationDelay / 1e3}s`;
|
|
const style2 = content.style;
|
|
addClass(content, props.animationPrefix);
|
|
addClass(content, props.animationEffect);
|
|
if (duration)
|
|
style2[duration] = durationSec;
|
|
if (delay)
|
|
style2[delay] = delaySec;
|
|
if (fillMode)
|
|
style2[fillMode] = "both";
|
|
if (callback) {
|
|
setTimeout(() => {
|
|
callback();
|
|
}, props.animationDuration + props.animationDelay);
|
|
}
|
|
}
|
|
};
|
|
}
|
|
const inBrowser$5 = typeof window !== "undefined" && window !== null;
|
|
const hasIntersectionObserver = checkIntersectionObserver();
|
|
const isEnumerable = Object.prototype.propertyIsEnumerable;
|
|
const getSymbols = Object.getOwnPropertySymbols;
|
|
function getValue(form, ...selectors) {
|
|
const res = selectors.map((s) => {
|
|
return s.replace(/\[(\w+)\]/g, ".$1").split(".").reduce((prev, cur) => {
|
|
return prev && prev[cur];
|
|
}, form);
|
|
});
|
|
return res;
|
|
}
|
|
function checkIntersectionObserver() {
|
|
if (inBrowser$5 && "IntersectionObserver" in window && "IntersectionObserverEntry" in window && "intersectionRatio" in window.IntersectionObserverEntry.prototype) {
|
|
if (!("isIntersecting" in window.IntersectionObserverEntry.prototype)) {
|
|
Object.defineProperty(window.IntersectionObserverEntry.prototype, "isIntersecting", {
|
|
get() {
|
|
return this.intersectionRatio > 0;
|
|
}
|
|
});
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function isObject(val) {
|
|
return typeof val === "function" || toString.call(val) === "[object Object]";
|
|
}
|
|
function isPrimitive(val) {
|
|
return typeof val === "object" ? val === null : typeof val !== "function";
|
|
}
|
|
function isValidKey(key) {
|
|
return key !== "__proto__" && key !== "constructor" && key !== "prototype";
|
|
}
|
|
function assignSymbols(target, ...args) {
|
|
if (!isObject(target))
|
|
throw new TypeError("expected the first argument to be an object");
|
|
if (args.length === 0 || typeof Symbol !== "function" || typeof getSymbols !== "function")
|
|
return target;
|
|
for (const arg of args) {
|
|
const names = getSymbols(arg);
|
|
for (const key of names) {
|
|
if (isEnumerable.call(arg, key))
|
|
target[key] = arg[key];
|
|
}
|
|
}
|
|
return target;
|
|
}
|
|
function assign(target, ...args) {
|
|
let i = 0;
|
|
if (isPrimitive(target))
|
|
target = args[i++];
|
|
if (!target)
|
|
target = {};
|
|
for (; i < args.length; i++) {
|
|
if (isObject(args[i])) {
|
|
for (const key of Object.keys(args[i])) {
|
|
if (isValidKey(key)) {
|
|
if (isObject(target[key]) && isObject(args[i][key]))
|
|
assign(target[key], args[i][key]);
|
|
else
|
|
target[key] = args[i][key];
|
|
}
|
|
}
|
|
assignSymbols(target, args[i]);
|
|
}
|
|
}
|
|
return target;
|
|
}
|
|
function loadImage(url, crossOrigin) {
|
|
return new Promise((resolve, reject) => {
|
|
const image2 = new Image();
|
|
image2.onload = () => {
|
|
resolve(image2);
|
|
};
|
|
image2.onerror = () => {
|
|
reject(new Error("Image load error"));
|
|
};
|
|
if (crossOrigin)
|
|
image2.crossOrigin = "Anonymous";
|
|
image2.src = url;
|
|
});
|
|
}
|
|
var LifecycleEnum;
|
|
(function(LifecycleEnum2) {
|
|
LifecycleEnum2["LOADING"] = "loading";
|
|
LifecycleEnum2["LOADED"] = "loaded";
|
|
LifecycleEnum2["ERROR"] = "error";
|
|
})(LifecycleEnum || (LifecycleEnum = {}));
|
|
const DEFAULT_OBSERVER_OPTIONS = {
|
|
rootMargin: "0px",
|
|
threshold: 0
|
|
};
|
|
const DEFAULT_LOADING = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7";
|
|
const DEFAULT_ERROR = "";
|
|
class Lazy {
|
|
constructor(flag = true, options, crossOrigin = true) {
|
|
this.lazyActive = true;
|
|
this.crossOrigin = true;
|
|
this.options = {
|
|
loading: DEFAULT_LOADING,
|
|
error: DEFAULT_ERROR,
|
|
observerOptions: DEFAULT_OBSERVER_OPTIONS,
|
|
log: true,
|
|
ratioCalculator: (width, height) => height / width
|
|
};
|
|
this._images = /* @__PURE__ */ new WeakMap();
|
|
this.lazyActive = flag;
|
|
this.crossOrigin = crossOrigin;
|
|
this.config(options);
|
|
}
|
|
config(options = {}) {
|
|
assign(this.options, options);
|
|
options.ratioCalculator && (this.options.ratioCalculator = options.ratioCalculator);
|
|
}
|
|
mount(el, binding, callback) {
|
|
const { src, loading, error } = this._valueFormatter(binding);
|
|
el.setAttribute("lazy", LifecycleEnum.LOADING);
|
|
el.setAttribute("src", loading || DEFAULT_LOADING);
|
|
if (!this.lazyActive) {
|
|
this._setImageSrc(el, src, callback, error);
|
|
} else {
|
|
if (!hasIntersectionObserver) {
|
|
this._setImageSrc(el, src, callback, error);
|
|
this._log(() => {
|
|
throw new Error("Not support IntersectionObserver!");
|
|
});
|
|
}
|
|
this._initIntersectionObserver(el, src, callback, error);
|
|
}
|
|
}
|
|
resize(el, callback) {
|
|
const lazy = el.getAttribute("lazy");
|
|
const src = el.getAttribute("src");
|
|
if (lazy && lazy === LifecycleEnum.LOADED && src) {
|
|
loadImage(src, this.crossOrigin).then((image2) => {
|
|
const { width, height } = image2;
|
|
const curHeight = el.width / width * height;
|
|
el.height = curHeight;
|
|
const style2 = el.style;
|
|
style2.height = `${curHeight}px`;
|
|
callback();
|
|
});
|
|
}
|
|
}
|
|
unmount(el) {
|
|
const imgItem = this._realObserver(el);
|
|
imgItem && imgItem.unobserve(el);
|
|
this._images.delete(el);
|
|
}
|
|
_setImageSrc(el, src, callback, error) {
|
|
if (!src)
|
|
return;
|
|
const preSrc = el.getAttribute("src");
|
|
if (preSrc === src)
|
|
return;
|
|
loadImage(src, this.crossOrigin).then((image2) => {
|
|
var _a2, _b2;
|
|
const { width, height } = image2;
|
|
const ratio = ((_b2 = (_a2 = this.options).ratioCalculator) == null ? void 0 : _b2.call(_a2, width, height)) || height / width;
|
|
const lazyBox = el.parentNode.parentNode;
|
|
lazyBox.style.paddingBottom = `${ratio * 100}%`;
|
|
el.setAttribute("lazy", LifecycleEnum.LOADED);
|
|
el.removeAttribute("src");
|
|
el.src = image2.src;
|
|
callback(true);
|
|
}).catch(() => {
|
|
const imgItem = this._realObserver(el);
|
|
imgItem && imgItem.disconnect();
|
|
if (error) {
|
|
el.setAttribute("lazy", LifecycleEnum.ERROR);
|
|
el.setAttribute("src", error);
|
|
callback(false);
|
|
}
|
|
this._log(() => {
|
|
throw new Error(`Image failed to load!And failed src was: ${src} `);
|
|
});
|
|
});
|
|
}
|
|
_isOpenLazy() {
|
|
return hasIntersectionObserver && this.lazyActive;
|
|
}
|
|
_initIntersectionObserver(el, src, callback, error) {
|
|
const observerOptions = this.options.observerOptions;
|
|
this._images.set(el, new IntersectionObserver((entries) => {
|
|
Array.prototype.forEach.call(entries, (entry) => {
|
|
if (entry.isIntersecting) {
|
|
const imgItem2 = this._realObserver(el);
|
|
imgItem2 && imgItem2.unobserve(entry.target);
|
|
this._setImageSrc(el, src, callback, error);
|
|
}
|
|
});
|
|
}, observerOptions));
|
|
const imgItem = this._realObserver(el);
|
|
imgItem && imgItem.observe(el);
|
|
}
|
|
_valueFormatter(value) {
|
|
let src = value;
|
|
let loading = this.options.loading;
|
|
let error = this.options.error;
|
|
if (isObject(value)) {
|
|
src = value.src;
|
|
loading = value.loading || this.options.loading;
|
|
error = value.error || this.options.error;
|
|
}
|
|
return {
|
|
src,
|
|
loading,
|
|
error
|
|
};
|
|
}
|
|
_log(callback) {
|
|
if (this.options.log)
|
|
callback();
|
|
}
|
|
_realObserver(el) {
|
|
return this._images.get(el);
|
|
}
|
|
}
|
|
const __default__ = defineComponent({
|
|
props: {
|
|
list: {
|
|
type: Array,
|
|
default: () => []
|
|
},
|
|
rowKey: {
|
|
type: String,
|
|
default: "id"
|
|
},
|
|
imgSelector: {
|
|
type: String,
|
|
default: "src"
|
|
},
|
|
width: {
|
|
type: Number,
|
|
default: 200
|
|
},
|
|
breakpoints: {
|
|
type: Object,
|
|
default: () => ({
|
|
1200: {
|
|
rowPerView: 3
|
|
},
|
|
800: {
|
|
rowPerView: 2
|
|
},
|
|
500: {
|
|
rowPerView: 1
|
|
}
|
|
})
|
|
},
|
|
gutter: {
|
|
type: Number,
|
|
default: 10
|
|
},
|
|
hasAroundGutter: {
|
|
type: Boolean,
|
|
default: true
|
|
},
|
|
posDuration: {
|
|
type: Number,
|
|
default: 300
|
|
},
|
|
animationPrefix: {
|
|
type: String,
|
|
default: "animate__animated"
|
|
},
|
|
animationEffect: {
|
|
type: String,
|
|
default: "fadeIn"
|
|
},
|
|
animationDuration: {
|
|
type: Number,
|
|
default: 1e3
|
|
},
|
|
animationDelay: {
|
|
type: Number,
|
|
default: 300
|
|
},
|
|
animationCancel: {
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
backgroundColor: {
|
|
type: String,
|
|
default: "#fff"
|
|
},
|
|
lazyload: {
|
|
type: Boolean,
|
|
default: true
|
|
},
|
|
loadProps: {
|
|
type: Object,
|
|
default: () => {
|
|
}
|
|
},
|
|
crossOrigin: {
|
|
type: Boolean,
|
|
default: true
|
|
},
|
|
delay: {
|
|
type: Number,
|
|
default: 300
|
|
},
|
|
align: {
|
|
type: String,
|
|
default: "center"
|
|
}
|
|
},
|
|
setup(props, ctx) {
|
|
const lazy = new Lazy(props.lazyload, props.loadProps, props.crossOrigin);
|
|
provide("lazy", lazy);
|
|
const {
|
|
waterfallWrapper,
|
|
wrapperWidth,
|
|
colWidth,
|
|
cols,
|
|
offsetX
|
|
} = useCalculateCols(props);
|
|
const { wrapperHeight, layoutHandle } = useLayout(props, colWidth, cols, offsetX, waterfallWrapper);
|
|
const renderer = useDebounceFn(() => {
|
|
layoutHandle().then(() => {
|
|
ctx.emit("afterRender");
|
|
});
|
|
}, props.delay);
|
|
watch(() => [wrapperWidth, colWidth, props.list], () => {
|
|
if (wrapperWidth.value > 0)
|
|
renderer();
|
|
}, { deep: true });
|
|
const sizeChangeTime = ref(0);
|
|
provide("sizeChangeTime", sizeChangeTime);
|
|
provide("imgLoaded", renderer);
|
|
const getRenderURL = (item) => {
|
|
return getValue(item, props.imgSelector)[0];
|
|
};
|
|
const getKey = (item, index) => {
|
|
return item[props.rowKey] || index;
|
|
};
|
|
return {
|
|
colWidth,
|
|
waterfallWrapper,
|
|
wrapperHeight,
|
|
getRenderURL,
|
|
getKey,
|
|
renderer
|
|
};
|
|
}
|
|
});
|
|
const __injectCSSVars__ = () => {
|
|
useCssVars((_ctx) => ({
|
|
"0199bd6c": _ctx.backgroundColor
|
|
}));
|
|
};
|
|
const __setup__ = __default__.setup;
|
|
__default__.setup = __setup__ ? (props, ctx) => {
|
|
__injectCSSVars__();
|
|
return __setup__(props, ctx);
|
|
} : __injectCSSVars__;
|
|
/*!
|
|
* better-scroll / core
|
|
* (c) 2016-2023 ustbhuangyi
|
|
* Released under the MIT License.
|
|
*/
|
|
/*! *****************************************************************************
|
|
Copyright (c) Microsoft Corporation.
|
|
|
|
Permission to use, copy, modify, and/or distribute this software for any
|
|
purpose with or without fee is hereby granted.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
PERFORMANCE OF THIS SOFTWARE.
|
|
***************************************************************************** */
|
|
var extendStatics = function(d, b) {
|
|
extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {
|
|
d2.__proto__ = b2;
|
|
} || function(d2, b2) {
|
|
for (var p in b2) if (Object.prototype.hasOwnProperty.call(b2, p)) d2[p] = b2[p];
|
|
};
|
|
return extendStatics(d, b);
|
|
};
|
|
function __extends(d, b) {
|
|
extendStatics(d, b);
|
|
function __() {
|
|
this.constructor = d;
|
|
}
|
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
}
|
|
var __assign$1 = function() {
|
|
__assign$1 = Object.assign || function __assign2(t) {
|
|
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
s = arguments[i];
|
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
|
|
}
|
|
return t;
|
|
};
|
|
return __assign$1.apply(this, arguments);
|
|
};
|
|
function __spreadArrays$1() {
|
|
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
|
|
for (var r = Array(s), k = 0, i = 0; i < il; i++)
|
|
for (var a2 = arguments[i], j = 0, jl = a2.length; j < jl; j++, k++)
|
|
r[k] = a2[j];
|
|
return r;
|
|
}
|
|
var propertiesConfig$1 = [
|
|
{
|
|
sourceKey: "scroller.scrollBehaviorX.currentPos",
|
|
key: "x"
|
|
},
|
|
{
|
|
sourceKey: "scroller.scrollBehaviorY.currentPos",
|
|
key: "y"
|
|
},
|
|
{
|
|
sourceKey: "scroller.scrollBehaviorX.hasScroll",
|
|
key: "hasHorizontalScroll"
|
|
},
|
|
{
|
|
sourceKey: "scroller.scrollBehaviorY.hasScroll",
|
|
key: "hasVerticalScroll"
|
|
},
|
|
{
|
|
sourceKey: "scroller.scrollBehaviorX.contentSize",
|
|
key: "scrollerWidth"
|
|
},
|
|
{
|
|
sourceKey: "scroller.scrollBehaviorY.contentSize",
|
|
key: "scrollerHeight"
|
|
},
|
|
{
|
|
sourceKey: "scroller.scrollBehaviorX.maxScrollPos",
|
|
key: "maxScrollX"
|
|
},
|
|
{
|
|
sourceKey: "scroller.scrollBehaviorY.maxScrollPos",
|
|
key: "maxScrollY"
|
|
},
|
|
{
|
|
sourceKey: "scroller.scrollBehaviorX.minScrollPos",
|
|
key: "minScrollX"
|
|
},
|
|
{
|
|
sourceKey: "scroller.scrollBehaviorY.minScrollPos",
|
|
key: "minScrollY"
|
|
},
|
|
{
|
|
sourceKey: "scroller.scrollBehaviorX.movingDirection",
|
|
key: "movingDirectionX"
|
|
},
|
|
{
|
|
sourceKey: "scroller.scrollBehaviorY.movingDirection",
|
|
key: "movingDirectionY"
|
|
},
|
|
{
|
|
sourceKey: "scroller.scrollBehaviorX.direction",
|
|
key: "directionX"
|
|
},
|
|
{
|
|
sourceKey: "scroller.scrollBehaviorY.direction",
|
|
key: "directionY"
|
|
},
|
|
{
|
|
sourceKey: "scroller.actions.enabled",
|
|
key: "enabled"
|
|
},
|
|
{
|
|
sourceKey: "scroller.animater.pending",
|
|
key: "pending"
|
|
},
|
|
{
|
|
sourceKey: "scroller.animater.stop",
|
|
key: "stop"
|
|
},
|
|
{
|
|
sourceKey: "scroller.scrollTo",
|
|
key: "scrollTo"
|
|
},
|
|
{
|
|
sourceKey: "scroller.scrollBy",
|
|
key: "scrollBy"
|
|
},
|
|
{
|
|
sourceKey: "scroller.scrollToElement",
|
|
key: "scrollToElement"
|
|
},
|
|
{
|
|
sourceKey: "scroller.resetPosition",
|
|
key: "resetPosition"
|
|
}
|
|
];
|
|
function warn$2(msg) {
|
|
console.error("[BScroll warn]: " + msg);
|
|
}
|
|
var inBrowser$4 = typeof window !== "undefined";
|
|
var ua$4 = inBrowser$4 && navigator.userAgent.toLowerCase();
|
|
var isWeChatDevTools = !!(ua$4 && /wechatdevtools/.test(ua$4));
|
|
var isAndroid = ua$4 && ua$4.indexOf("android") > 0;
|
|
var isIOSBadVersion = function() {
|
|
if (typeof ua$4 === "string") {
|
|
var regex = /os (\d\d?_\d(_\d)?)/;
|
|
var matches = regex.exec(ua$4);
|
|
if (!matches)
|
|
return false;
|
|
var parts = matches[1].split("_").map(function(item) {
|
|
return parseInt(item, 10);
|
|
});
|
|
return !!(parts[0] === 13 && parts[1] >= 4);
|
|
}
|
|
return false;
|
|
}();
|
|
var supportsPassive$4 = false;
|
|
if (inBrowser$4) {
|
|
var EventName$4 = "test-passive";
|
|
try {
|
|
var opts$4 = {};
|
|
Object.defineProperty(opts$4, "passive", {
|
|
get: function() {
|
|
supportsPassive$4 = true;
|
|
}
|
|
});
|
|
window.addEventListener(EventName$4, function() {
|
|
}, opts$4);
|
|
} catch (e2) {
|
|
}
|
|
}
|
|
function getNow$1() {
|
|
return window.performance && window.performance.now && window.performance.timing ? window.performance.now() + window.performance.timing.navigationStart : +/* @__PURE__ */ new Date();
|
|
}
|
|
var extend$3 = function(target, source) {
|
|
for (var key in source) {
|
|
target[key] = source[key];
|
|
}
|
|
return target;
|
|
};
|
|
function isUndef(v) {
|
|
return v === void 0 || v === null;
|
|
}
|
|
function between$1(x, min, max) {
|
|
if (x < min) {
|
|
return min;
|
|
}
|
|
if (x > max) {
|
|
return max;
|
|
}
|
|
return x;
|
|
}
|
|
var elementStyle$4 = inBrowser$4 && document.createElement("div").style;
|
|
var vendor$4 = function() {
|
|
if (!inBrowser$4) {
|
|
return false;
|
|
}
|
|
var transformNames = [
|
|
{
|
|
key: "standard",
|
|
value: "transform"
|
|
},
|
|
{
|
|
key: "webkit",
|
|
value: "webkitTransform"
|
|
},
|
|
{
|
|
key: "Moz",
|
|
value: "MozTransform"
|
|
},
|
|
{
|
|
key: "O",
|
|
value: "OTransform"
|
|
},
|
|
{
|
|
key: "ms",
|
|
value: "msTransform"
|
|
}
|
|
];
|
|
for (var _i = 0, transformNames_1 = transformNames; _i < transformNames_1.length; _i++) {
|
|
var obj = transformNames_1[_i];
|
|
if (elementStyle$4[obj.value] !== void 0) {
|
|
return obj.key;
|
|
}
|
|
}
|
|
return false;
|
|
}();
|
|
function prefixStyle$4(style2) {
|
|
if (vendor$4 === false) {
|
|
return style2;
|
|
}
|
|
if (vendor$4 === "standard") {
|
|
if (style2 === "transitionEnd") {
|
|
return "transitionend";
|
|
}
|
|
return style2;
|
|
}
|
|
return vendor$4 + style2.charAt(0).toUpperCase() + style2.substr(1);
|
|
}
|
|
function getElement(el) {
|
|
return typeof el === "string" ? document.querySelector(el) : el;
|
|
}
|
|
function addEvent$2(el, type, fn, capture) {
|
|
var useCapture = supportsPassive$4 ? {
|
|
passive: false,
|
|
capture: !!capture
|
|
} : !!capture;
|
|
el.addEventListener(type, fn, useCapture);
|
|
}
|
|
function removeEvent$2(el, type, fn, capture) {
|
|
el.removeEventListener(type, fn, {
|
|
capture: !!capture
|
|
});
|
|
}
|
|
function maybePrevent$2(e2) {
|
|
if (e2.cancelable) {
|
|
e2.preventDefault();
|
|
}
|
|
}
|
|
function offset(el) {
|
|
var left = 0;
|
|
var top = 0;
|
|
while (el) {
|
|
left -= el.offsetLeft;
|
|
top -= el.offsetTop;
|
|
el = el.offsetParent;
|
|
}
|
|
return {
|
|
left,
|
|
top
|
|
};
|
|
}
|
|
vendor$4 && vendor$4 !== "standard" ? "-" + vendor$4.toLowerCase() + "-" : "";
|
|
var transform$1 = prefixStyle$4("transform");
|
|
var transition = prefixStyle$4("transition");
|
|
var hasPerspective = inBrowser$4 && prefixStyle$4("perspective") in elementStyle$4;
|
|
var hasTouch = inBrowser$4 && ("ontouchstart" in window || isWeChatDevTools);
|
|
var hasTransition = inBrowser$4 && transition in elementStyle$4;
|
|
var style$1 = {
|
|
transform: transform$1,
|
|
transitionTimingFunction: prefixStyle$4("transitionTimingFunction"),
|
|
transitionDuration: prefixStyle$4("transitionDuration"),
|
|
transitionDelay: prefixStyle$4("transitionDelay"),
|
|
transformOrigin: prefixStyle$4("transformOrigin"),
|
|
transitionEnd: prefixStyle$4("transitionEnd"),
|
|
transitionProperty: prefixStyle$4("transitionProperty")
|
|
};
|
|
var eventTypeMap = {
|
|
touchstart: 1,
|
|
touchmove: 1,
|
|
touchend: 1,
|
|
touchcancel: 1,
|
|
mousedown: 2,
|
|
mousemove: 2,
|
|
mouseup: 2
|
|
};
|
|
function getRect$1(el) {
|
|
if (el instanceof window.SVGElement) {
|
|
var rect = el.getBoundingClientRect();
|
|
return {
|
|
top: rect.top,
|
|
left: rect.left,
|
|
width: rect.width,
|
|
height: rect.height
|
|
};
|
|
} else {
|
|
return {
|
|
top: el.offsetTop,
|
|
left: el.offsetLeft,
|
|
width: el.offsetWidth,
|
|
height: el.offsetHeight
|
|
};
|
|
}
|
|
}
|
|
function preventDefaultExceptionFn$1(el, exceptions) {
|
|
for (var i in exceptions) {
|
|
if (exceptions[i].test(el[i])) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
var tagExceptionFn = preventDefaultExceptionFn$1;
|
|
function tap(e2, eventName) {
|
|
var ev = document.createEvent("Event");
|
|
ev.initEvent(eventName, true, true);
|
|
ev.pageX = e2.pageX;
|
|
ev.pageY = e2.pageY;
|
|
e2.target.dispatchEvent(ev);
|
|
}
|
|
function click(e2, event) {
|
|
if (event === void 0) {
|
|
event = "click";
|
|
}
|
|
var eventSource;
|
|
if (e2.type === "mouseup") {
|
|
eventSource = e2;
|
|
} else if (e2.type === "touchend" || e2.type === "touchcancel") {
|
|
eventSource = e2.changedTouches[0];
|
|
}
|
|
var posSrc = {};
|
|
if (eventSource) {
|
|
posSrc.screenX = eventSource.screenX || 0;
|
|
posSrc.screenY = eventSource.screenY || 0;
|
|
posSrc.clientX = eventSource.clientX || 0;
|
|
posSrc.clientY = eventSource.clientY || 0;
|
|
}
|
|
var ev;
|
|
var bubbles = true;
|
|
var cancelable = true;
|
|
var ctrlKey = e2.ctrlKey, shiftKey = e2.shiftKey, altKey = e2.altKey, metaKey = e2.metaKey;
|
|
var pressedKeysMap = {
|
|
ctrlKey,
|
|
shiftKey,
|
|
altKey,
|
|
metaKey
|
|
};
|
|
if (typeof MouseEvent !== "undefined") {
|
|
try {
|
|
ev = new MouseEvent(event, extend$3(__assign$1({
|
|
bubbles,
|
|
cancelable
|
|
}, pressedKeysMap), posSrc));
|
|
} catch (e3) {
|
|
createEvent();
|
|
}
|
|
} else {
|
|
createEvent();
|
|
}
|
|
function createEvent() {
|
|
ev = document.createEvent("Event");
|
|
ev.initEvent(event, bubbles, cancelable);
|
|
extend$3(ev, posSrc);
|
|
}
|
|
ev.forwardedTouchEvent = true;
|
|
ev._constructed = true;
|
|
e2.target.dispatchEvent(ev);
|
|
}
|
|
function dblclick(e2) {
|
|
click(e2, "dblclick");
|
|
}
|
|
var ease = {
|
|
// easeOutQuard
|
|
swipeBounce: {
|
|
style: "cubic-bezier(0.25, 0.46, 0.45, 0.94)",
|
|
fn: function(t) {
|
|
return t * (2 - t);
|
|
}
|
|
},
|
|
// easeOutQuart
|
|
bounce: {
|
|
style: "cubic-bezier(0.165, 0.84, 0.44, 1)",
|
|
fn: function(t) {
|
|
return 1 - --t * t * t * t;
|
|
}
|
|
}
|
|
};
|
|
var DEFAULT_INTERVAL = 1e3 / 60;
|
|
var windowCompat = inBrowser$4 && window;
|
|
function noop$1() {
|
|
}
|
|
var requestAnimationFrame = function() {
|
|
if (!inBrowser$4) {
|
|
return noop$1;
|
|
}
|
|
return windowCompat.requestAnimationFrame || windowCompat.webkitRequestAnimationFrame || windowCompat.mozRequestAnimationFrame || windowCompat.oRequestAnimationFrame || // if all else fails, use setTimeout
|
|
function(callback) {
|
|
return window.setTimeout(callback, callback.interval || DEFAULT_INTERVAL);
|
|
};
|
|
}();
|
|
var cancelAnimationFrame = function() {
|
|
if (!inBrowser$4) {
|
|
return noop$1;
|
|
}
|
|
return windowCompat.cancelAnimationFrame || windowCompat.webkitCancelAnimationFrame || windowCompat.mozCancelAnimationFrame || windowCompat.oCancelAnimationFrame || function(id) {
|
|
window.clearTimeout(id);
|
|
};
|
|
}();
|
|
var noop = function(val) {
|
|
};
|
|
var sharedPropertyDefinition = {
|
|
enumerable: true,
|
|
configurable: true,
|
|
get: noop,
|
|
set: noop
|
|
};
|
|
var getProperty = function(obj, key) {
|
|
var keys = key.split(".");
|
|
for (var i = 0; i < keys.length - 1; i++) {
|
|
obj = obj[keys[i]];
|
|
if (typeof obj !== "object" || !obj)
|
|
return;
|
|
}
|
|
var lastKey = keys.pop();
|
|
if (typeof obj[lastKey] === "function") {
|
|
return function() {
|
|
return obj[lastKey].apply(obj, arguments);
|
|
};
|
|
} else {
|
|
return obj[lastKey];
|
|
}
|
|
};
|
|
var setProperty = function(obj, key, value) {
|
|
var keys = key.split(".");
|
|
var temp;
|
|
for (var i = 0; i < keys.length - 1; i++) {
|
|
temp = keys[i];
|
|
if (!obj[temp])
|
|
obj[temp] = {};
|
|
obj = obj[temp];
|
|
}
|
|
obj[keys.pop()] = value;
|
|
};
|
|
function propertiesProxy(target, sourceKey, key) {
|
|
sharedPropertyDefinition.get = function proxyGetter() {
|
|
return getProperty(this, sourceKey);
|
|
};
|
|
sharedPropertyDefinition.set = function proxySetter(val) {
|
|
setProperty(this, sourceKey, val);
|
|
};
|
|
Object.defineProperty(target, key, sharedPropertyDefinition);
|
|
}
|
|
var EventEmitter$1 = (
|
|
/** @class */
|
|
function() {
|
|
function EventEmitter2(names) {
|
|
this.events = {};
|
|
this.eventTypes = {};
|
|
this.registerType(names);
|
|
}
|
|
EventEmitter2.prototype.on = function(type, fn, context) {
|
|
if (context === void 0) {
|
|
context = this;
|
|
}
|
|
this.hasType(type);
|
|
if (!this.events[type]) {
|
|
this.events[type] = [];
|
|
}
|
|
this.events[type].push([fn, context]);
|
|
return this;
|
|
};
|
|
EventEmitter2.prototype.once = function(type, fn, context) {
|
|
var _this = this;
|
|
if (context === void 0) {
|
|
context = this;
|
|
}
|
|
this.hasType(type);
|
|
var magic = function() {
|
|
var args = [];
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
args[_i] = arguments[_i];
|
|
}
|
|
_this.off(type, magic);
|
|
var ret = fn.apply(context, args);
|
|
if (ret === true) {
|
|
return ret;
|
|
}
|
|
};
|
|
magic.fn = fn;
|
|
this.on(type, magic);
|
|
return this;
|
|
};
|
|
EventEmitter2.prototype.off = function(type, fn) {
|
|
if (!type && !fn) {
|
|
this.events = {};
|
|
return this;
|
|
}
|
|
if (type) {
|
|
this.hasType(type);
|
|
if (!fn) {
|
|
this.events[type] = [];
|
|
return this;
|
|
}
|
|
var events = this.events[type];
|
|
if (!events) {
|
|
return this;
|
|
}
|
|
var count = events.length;
|
|
while (count--) {
|
|
if (events[count][0] === fn || events[count][0] && events[count][0].fn === fn) {
|
|
events.splice(count, 1);
|
|
}
|
|
}
|
|
return this;
|
|
}
|
|
};
|
|
EventEmitter2.prototype.trigger = function(type) {
|
|
var args = [];
|
|
for (var _i = 1; _i < arguments.length; _i++) {
|
|
args[_i - 1] = arguments[_i];
|
|
}
|
|
this.hasType(type);
|
|
var events = this.events[type];
|
|
if (!events) {
|
|
return;
|
|
}
|
|
var len = events.length;
|
|
var eventsCopy = __spreadArrays$1(events);
|
|
var ret;
|
|
for (var i = 0; i < len; i++) {
|
|
var event_1 = eventsCopy[i];
|
|
var fn = event_1[0], context = event_1[1];
|
|
if (fn) {
|
|
ret = fn.apply(context, args);
|
|
if (ret === true) {
|
|
return ret;
|
|
}
|
|
}
|
|
}
|
|
};
|
|
EventEmitter2.prototype.registerType = function(names) {
|
|
var _this = this;
|
|
names.forEach(function(type) {
|
|
_this.eventTypes[type] = type;
|
|
});
|
|
};
|
|
EventEmitter2.prototype.destroy = function() {
|
|
this.events = {};
|
|
this.eventTypes = {};
|
|
};
|
|
EventEmitter2.prototype.hasType = function(type) {
|
|
var types = this.eventTypes;
|
|
var isType = types[type] === type;
|
|
if (!isType) {
|
|
warn$2('EventEmitter has used unknown event type: "' + type + '", should be oneof [' + ("" + Object.keys(types).map(function(_) {
|
|
return JSON.stringify(_);
|
|
})) + "]");
|
|
}
|
|
};
|
|
return EventEmitter2;
|
|
}()
|
|
);
|
|
var EventRegister$2 = (
|
|
/** @class */
|
|
function() {
|
|
function EventRegister2(wrapper, events) {
|
|
this.wrapper = wrapper;
|
|
this.events = events;
|
|
this.addDOMEvents();
|
|
}
|
|
EventRegister2.prototype.destroy = function() {
|
|
this.removeDOMEvents();
|
|
this.events = [];
|
|
};
|
|
EventRegister2.prototype.addDOMEvents = function() {
|
|
this.handleDOMEvents(addEvent$2);
|
|
};
|
|
EventRegister2.prototype.removeDOMEvents = function() {
|
|
this.handleDOMEvents(removeEvent$2);
|
|
};
|
|
EventRegister2.prototype.handleDOMEvents = function(eventOperation) {
|
|
var _this = this;
|
|
var wrapper = this.wrapper;
|
|
this.events.forEach(function(event) {
|
|
eventOperation(wrapper, event.name, _this, !!event.capture);
|
|
});
|
|
};
|
|
EventRegister2.prototype.handleEvent = function(e2) {
|
|
var eventType = e2.type;
|
|
this.events.some(function(event) {
|
|
if (event.name === eventType) {
|
|
event.handler(e2);
|
|
return true;
|
|
}
|
|
return false;
|
|
});
|
|
};
|
|
return EventRegister2;
|
|
}()
|
|
);
|
|
var CustomOptions = (
|
|
/** @class */
|
|
/* @__PURE__ */ function() {
|
|
function CustomOptions2() {
|
|
}
|
|
return CustomOptions2;
|
|
}()
|
|
);
|
|
var OptionsConstructor = (
|
|
/** @class */
|
|
function(_super) {
|
|
__extends(OptionsConstructor2, _super);
|
|
function OptionsConstructor2() {
|
|
var _this = _super.call(this) || this;
|
|
_this.startX = 0;
|
|
_this.startY = 0;
|
|
_this.scrollX = false;
|
|
_this.scrollY = true;
|
|
_this.freeScroll = false;
|
|
_this.directionLockThreshold = 0;
|
|
_this.eventPassthrough = "";
|
|
_this.click = false;
|
|
_this.dblclick = false;
|
|
_this.tap = "";
|
|
_this.bounce = {
|
|
top: true,
|
|
bottom: true,
|
|
left: true,
|
|
right: true
|
|
};
|
|
_this.bounceTime = 800;
|
|
_this.momentum = true;
|
|
_this.momentumLimitTime = 300;
|
|
_this.momentumLimitDistance = 15;
|
|
_this.swipeTime = 2500;
|
|
_this.swipeBounceTime = 500;
|
|
_this.deceleration = 15e-4;
|
|
_this.flickLimitTime = 200;
|
|
_this.flickLimitDistance = 100;
|
|
_this.resizePolling = 60;
|
|
_this.probeType = 0;
|
|
_this.stopPropagation = false;
|
|
_this.preventDefault = true;
|
|
_this.preventDefaultException = {
|
|
tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT|AUDIO)$/
|
|
};
|
|
_this.tagException = {
|
|
tagName: /^TEXTAREA$/
|
|
};
|
|
_this.HWCompositing = true;
|
|
_this.useTransition = true;
|
|
_this.bindToWrapper = false;
|
|
_this.bindToTarget = false;
|
|
_this.disableMouse = hasTouch;
|
|
_this.disableTouch = !hasTouch;
|
|
_this.autoBlur = true;
|
|
_this.autoEndDistance = 5;
|
|
_this.outOfBoundaryDampingFactor = 1 / 3;
|
|
_this.specifiedIndexAsContent = 0;
|
|
_this.quadrant = 1;
|
|
return _this;
|
|
}
|
|
OptionsConstructor2.prototype.merge = function(options) {
|
|
if (!options)
|
|
return this;
|
|
for (var key in options) {
|
|
if (key === "bounce") {
|
|
this.bounce = this.resolveBounce(options[key]);
|
|
continue;
|
|
}
|
|
this[key] = options[key];
|
|
}
|
|
return this;
|
|
};
|
|
OptionsConstructor2.prototype.process = function() {
|
|
this.translateZ = this.HWCompositing && hasPerspective ? " translateZ(1px)" : "";
|
|
this.useTransition = this.useTransition && hasTransition;
|
|
this.preventDefault = !this.eventPassthrough && this.preventDefault;
|
|
this.scrollX = this.eventPassthrough === "horizontal" ? false : this.scrollX;
|
|
this.scrollY = this.eventPassthrough === "vertical" ? false : this.scrollY;
|
|
this.freeScroll = this.freeScroll && !this.eventPassthrough;
|
|
this.scrollX = this.freeScroll ? true : this.scrollX;
|
|
this.scrollY = this.freeScroll ? true : this.scrollY;
|
|
this.directionLockThreshold = this.eventPassthrough ? 0 : this.directionLockThreshold;
|
|
return this;
|
|
};
|
|
OptionsConstructor2.prototype.resolveBounce = function(bounceOptions) {
|
|
var DEFAULT_BOUNCE = {
|
|
top: true,
|
|
right: true,
|
|
bottom: true,
|
|
left: true
|
|
};
|
|
var NEGATED_BOUNCE = {
|
|
top: false,
|
|
right: false,
|
|
bottom: false,
|
|
left: false
|
|
};
|
|
var ret;
|
|
if (typeof bounceOptions === "object") {
|
|
ret = extend$3(DEFAULT_BOUNCE, bounceOptions);
|
|
} else {
|
|
ret = bounceOptions ? DEFAULT_BOUNCE : NEGATED_BOUNCE;
|
|
}
|
|
return ret;
|
|
};
|
|
return OptionsConstructor2;
|
|
}(CustomOptions)
|
|
);
|
|
var ActionsHandler = (
|
|
/** @class */
|
|
function() {
|
|
function ActionsHandler2(wrapper, options) {
|
|
this.wrapper = wrapper;
|
|
this.options = options;
|
|
this.hooks = new EventEmitter$1([
|
|
"beforeStart",
|
|
"start",
|
|
"move",
|
|
"end",
|
|
"click"
|
|
]);
|
|
this.handleDOMEvents();
|
|
}
|
|
ActionsHandler2.prototype.handleDOMEvents = function() {
|
|
var _a2 = this.options, bindToWrapper = _a2.bindToWrapper, disableMouse = _a2.disableMouse, disableTouch = _a2.disableTouch, click2 = _a2.click;
|
|
var wrapper = this.wrapper;
|
|
var target = bindToWrapper ? wrapper : window;
|
|
var wrapperEvents = [];
|
|
var targetEvents = [];
|
|
var shouldRegisterTouch = !disableTouch;
|
|
var shouldRegisterMouse = !disableMouse;
|
|
if (click2) {
|
|
wrapperEvents.push({
|
|
name: "click",
|
|
handler: this.click.bind(this),
|
|
capture: true
|
|
});
|
|
}
|
|
if (shouldRegisterTouch) {
|
|
wrapperEvents.push({
|
|
name: "touchstart",
|
|
handler: this.start.bind(this)
|
|
});
|
|
targetEvents.push({
|
|
name: "touchmove",
|
|
handler: this.move.bind(this)
|
|
}, {
|
|
name: "touchend",
|
|
handler: this.end.bind(this)
|
|
}, {
|
|
name: "touchcancel",
|
|
handler: this.end.bind(this)
|
|
});
|
|
}
|
|
if (shouldRegisterMouse) {
|
|
wrapperEvents.push({
|
|
name: "mousedown",
|
|
handler: this.start.bind(this)
|
|
});
|
|
targetEvents.push({
|
|
name: "mousemove",
|
|
handler: this.move.bind(this)
|
|
}, {
|
|
name: "mouseup",
|
|
handler: this.end.bind(this)
|
|
});
|
|
}
|
|
this.wrapperEventRegister = new EventRegister$2(wrapper, wrapperEvents);
|
|
this.targetEventRegister = new EventRegister$2(target, targetEvents);
|
|
};
|
|
ActionsHandler2.prototype.beforeHandler = function(e2, type) {
|
|
var _a2 = this.options, preventDefault = _a2.preventDefault, stopPropagation = _a2.stopPropagation, preventDefaultException = _a2.preventDefaultException;
|
|
var preventDefaultConditions = {
|
|
start: function() {
|
|
return preventDefault && !preventDefaultExceptionFn$1(e2.target, preventDefaultException);
|
|
},
|
|
end: function() {
|
|
return preventDefault && !preventDefaultExceptionFn$1(e2.target, preventDefaultException);
|
|
},
|
|
move: function() {
|
|
return preventDefault;
|
|
}
|
|
};
|
|
if (preventDefaultConditions[type]()) {
|
|
e2.preventDefault();
|
|
}
|
|
if (stopPropagation) {
|
|
e2.stopPropagation();
|
|
}
|
|
};
|
|
ActionsHandler2.prototype.setInitiated = function(type) {
|
|
if (type === void 0) {
|
|
type = 0;
|
|
}
|
|
this.initiated = type;
|
|
};
|
|
ActionsHandler2.prototype.start = function(e2) {
|
|
var _eventType = eventTypeMap[e2.type];
|
|
if (this.initiated && this.initiated !== _eventType) {
|
|
return;
|
|
}
|
|
this.setInitiated(_eventType);
|
|
if (tagExceptionFn(e2.target, this.options.tagException)) {
|
|
this.setInitiated();
|
|
return;
|
|
}
|
|
if (_eventType === 2 && e2.button !== 0)
|
|
return;
|
|
if (this.hooks.trigger(this.hooks.eventTypes.beforeStart, e2)) {
|
|
return;
|
|
}
|
|
this.beforeHandler(e2, "start");
|
|
var point = e2.touches ? e2.touches[0] : e2;
|
|
this.pointX = point.pageX;
|
|
this.pointY = point.pageY;
|
|
this.hooks.trigger(this.hooks.eventTypes.start, e2);
|
|
};
|
|
ActionsHandler2.prototype.move = function(e2) {
|
|
if (eventTypeMap[e2.type] !== this.initiated) {
|
|
return;
|
|
}
|
|
this.beforeHandler(e2, "move");
|
|
var point = e2.touches ? e2.touches[0] : e2;
|
|
var deltaX = point.pageX - this.pointX;
|
|
var deltaY = point.pageY - this.pointY;
|
|
this.pointX = point.pageX;
|
|
this.pointY = point.pageY;
|
|
if (this.hooks.trigger(this.hooks.eventTypes.move, {
|
|
deltaX,
|
|
deltaY,
|
|
e: e2
|
|
})) {
|
|
return;
|
|
}
|
|
var scrollLeft = document.documentElement.scrollLeft || window.pageXOffset || document.body.scrollLeft;
|
|
var scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;
|
|
var pX = this.pointX - scrollLeft;
|
|
var pY = this.pointY - scrollTop;
|
|
var autoEndDistance = this.options.autoEndDistance;
|
|
if (pX > document.documentElement.clientWidth - autoEndDistance || pY > document.documentElement.clientHeight - autoEndDistance || pX < autoEndDistance || pY < autoEndDistance) {
|
|
this.end(e2);
|
|
}
|
|
};
|
|
ActionsHandler2.prototype.end = function(e2) {
|
|
if (eventTypeMap[e2.type] !== this.initiated) {
|
|
return;
|
|
}
|
|
this.setInitiated();
|
|
this.beforeHandler(e2, "end");
|
|
this.hooks.trigger(this.hooks.eventTypes.end, e2);
|
|
};
|
|
ActionsHandler2.prototype.click = function(e2) {
|
|
this.hooks.trigger(this.hooks.eventTypes.click, e2);
|
|
};
|
|
ActionsHandler2.prototype.setContent = function(content) {
|
|
if (content !== this.wrapper) {
|
|
this.wrapper = content;
|
|
this.rebindDOMEvents();
|
|
}
|
|
};
|
|
ActionsHandler2.prototype.rebindDOMEvents = function() {
|
|
this.wrapperEventRegister.destroy();
|
|
this.targetEventRegister.destroy();
|
|
this.handleDOMEvents();
|
|
};
|
|
ActionsHandler2.prototype.destroy = function() {
|
|
this.wrapperEventRegister.destroy();
|
|
this.targetEventRegister.destroy();
|
|
this.hooks.destroy();
|
|
};
|
|
return ActionsHandler2;
|
|
}()
|
|
);
|
|
var translaterMetaData = {
|
|
x: ["translateX", "px"],
|
|
y: ["translateY", "px"]
|
|
};
|
|
var Translater = (
|
|
/** @class */
|
|
function() {
|
|
function Translater2(content) {
|
|
this.setContent(content);
|
|
this.hooks = new EventEmitter$1(["beforeTranslate", "translate"]);
|
|
}
|
|
Translater2.prototype.getComputedPosition = function() {
|
|
var cssStyle = window.getComputedStyle(this.content, null);
|
|
var matrix2 = cssStyle[style$1.transform].split(")")[0].split(", ");
|
|
var x = +(matrix2[12] || matrix2[4]) || 0;
|
|
var y = +(matrix2[13] || matrix2[5]) || 0;
|
|
return {
|
|
x,
|
|
y
|
|
};
|
|
};
|
|
Translater2.prototype.translate = function(point) {
|
|
var transformStyle = [];
|
|
Object.keys(point).forEach(function(key) {
|
|
if (!translaterMetaData[key]) {
|
|
return;
|
|
}
|
|
var transformFnName = translaterMetaData[key][0];
|
|
if (transformFnName) {
|
|
var transformFnArgUnit = translaterMetaData[key][1];
|
|
var transformFnArg = point[key];
|
|
transformStyle.push(transformFnName + "(" + transformFnArg + transformFnArgUnit + ")");
|
|
}
|
|
});
|
|
this.hooks.trigger(this.hooks.eventTypes.beforeTranslate, transformStyle, point);
|
|
this.style[style$1.transform] = transformStyle.join(" ");
|
|
this.hooks.trigger(this.hooks.eventTypes.translate, point);
|
|
};
|
|
Translater2.prototype.setContent = function(content) {
|
|
if (this.content !== content) {
|
|
this.content = content;
|
|
this.style = content.style;
|
|
}
|
|
};
|
|
Translater2.prototype.destroy = function() {
|
|
this.hooks.destroy();
|
|
};
|
|
return Translater2;
|
|
}()
|
|
);
|
|
var Base = (
|
|
/** @class */
|
|
function() {
|
|
function Base2(content, translater, options) {
|
|
this.translater = translater;
|
|
this.options = options;
|
|
this.timer = 0;
|
|
this.hooks = new EventEmitter$1([
|
|
"move",
|
|
"end",
|
|
"beforeForceStop",
|
|
"forceStop",
|
|
"callStop",
|
|
"time",
|
|
"timeFunction"
|
|
]);
|
|
this.setContent(content);
|
|
}
|
|
Base2.prototype.translate = function(endPoint) {
|
|
this.translater.translate(endPoint);
|
|
};
|
|
Base2.prototype.setPending = function(pending) {
|
|
this.pending = pending;
|
|
};
|
|
Base2.prototype.setForceStopped = function(forceStopped) {
|
|
this.forceStopped = forceStopped;
|
|
};
|
|
Base2.prototype.setCallStop = function(called) {
|
|
this.callStopWhenPending = called;
|
|
};
|
|
Base2.prototype.setContent = function(content) {
|
|
if (this.content !== content) {
|
|
this.content = content;
|
|
this.style = content.style;
|
|
this.stop();
|
|
}
|
|
};
|
|
Base2.prototype.clearTimer = function() {
|
|
if (this.timer) {
|
|
cancelAnimationFrame(this.timer);
|
|
this.timer = 0;
|
|
}
|
|
};
|
|
Base2.prototype.destroy = function() {
|
|
this.hooks.destroy();
|
|
cancelAnimationFrame(this.timer);
|
|
};
|
|
return Base2;
|
|
}()
|
|
);
|
|
var isValidPostion = function(startPoint, endPoint, currentPos, prePos) {
|
|
var computeDirection = function(endValue, startValue) {
|
|
var delta = endValue - startValue;
|
|
var direction2 = delta > 0 ? -1 : delta < 0 ? 1 : 0;
|
|
return direction2;
|
|
};
|
|
var directionX = computeDirection(endPoint.x, startPoint.x);
|
|
var directionY = computeDirection(endPoint.y, startPoint.y);
|
|
var deltaX = currentPos.x - prePos.x;
|
|
var deltaY = currentPos.y - prePos.y;
|
|
return directionX * deltaX <= 0 && directionY * deltaY <= 0;
|
|
};
|
|
var Transition = (
|
|
/** @class */
|
|
function(_super) {
|
|
__extends(Transition2, _super);
|
|
function Transition2() {
|
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
}
|
|
Transition2.prototype.startProbe = function(startPoint, endPoint) {
|
|
var _this = this;
|
|
var prePos = startPoint;
|
|
var probe = function() {
|
|
var pos = _this.translater.getComputedPosition();
|
|
if (isValidPostion(startPoint, endPoint, pos, prePos)) {
|
|
_this.hooks.trigger(_this.hooks.eventTypes.move, pos);
|
|
}
|
|
if (!_this.pending) {
|
|
if (_this.callStopWhenPending) {
|
|
_this.callStopWhenPending = false;
|
|
} else {
|
|
_this.hooks.trigger(_this.hooks.eventTypes.end, pos);
|
|
}
|
|
}
|
|
prePos = pos;
|
|
if (_this.pending) {
|
|
_this.timer = requestAnimationFrame(probe);
|
|
}
|
|
};
|
|
if (this.callStopWhenPending) {
|
|
this.setCallStop(false);
|
|
}
|
|
cancelAnimationFrame(this.timer);
|
|
probe();
|
|
};
|
|
Transition2.prototype.transitionTime = function(time2) {
|
|
if (time2 === void 0) {
|
|
time2 = 0;
|
|
}
|
|
this.style[style$1.transitionDuration] = time2 + "ms";
|
|
this.hooks.trigger(this.hooks.eventTypes.time, time2);
|
|
};
|
|
Transition2.prototype.transitionTimingFunction = function(easing) {
|
|
this.style[style$1.transitionTimingFunction] = easing;
|
|
this.hooks.trigger(this.hooks.eventTypes.timeFunction, easing);
|
|
};
|
|
Transition2.prototype.transitionProperty = function() {
|
|
this.style[style$1.transitionProperty] = style$1.transform;
|
|
};
|
|
Transition2.prototype.move = function(startPoint, endPoint, time2, easingFn) {
|
|
this.setPending(time2 > 0);
|
|
this.transitionTimingFunction(easingFn);
|
|
this.transitionProperty();
|
|
this.transitionTime(time2);
|
|
this.translate(endPoint);
|
|
var isRealtimeProbeType = this.options.probeType === 3;
|
|
if (time2 && isRealtimeProbeType) {
|
|
this.startProbe(startPoint, endPoint);
|
|
}
|
|
if (!time2) {
|
|
this._reflow = this.content.offsetHeight;
|
|
if (isRealtimeProbeType) {
|
|
this.hooks.trigger(this.hooks.eventTypes.move, endPoint);
|
|
}
|
|
this.hooks.trigger(this.hooks.eventTypes.end, endPoint);
|
|
}
|
|
};
|
|
Transition2.prototype.doStop = function() {
|
|
var pending = this.pending;
|
|
this.setForceStopped(false);
|
|
this.setCallStop(false);
|
|
if (pending) {
|
|
this.setPending(false);
|
|
cancelAnimationFrame(this.timer);
|
|
var _a2 = this.translater.getComputedPosition(), x = _a2.x, y = _a2.y;
|
|
this.transitionTime();
|
|
this.translate({ x, y });
|
|
this.setForceStopped(true);
|
|
this.setCallStop(true);
|
|
this.hooks.trigger(this.hooks.eventTypes.forceStop, { x, y });
|
|
}
|
|
return pending;
|
|
};
|
|
Transition2.prototype.stop = function() {
|
|
var stopFromTransition = this.doStop();
|
|
if (stopFromTransition) {
|
|
this.hooks.trigger(this.hooks.eventTypes.callStop);
|
|
}
|
|
};
|
|
return Transition2;
|
|
}(Base)
|
|
);
|
|
var Animation = (
|
|
/** @class */
|
|
function(_super) {
|
|
__extends(Animation2, _super);
|
|
function Animation2() {
|
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
}
|
|
Animation2.prototype.move = function(startPoint, endPoint, time2, easingFn) {
|
|
if (!time2) {
|
|
this.translate(endPoint);
|
|
if (this.options.probeType === 3) {
|
|
this.hooks.trigger(this.hooks.eventTypes.move, endPoint);
|
|
}
|
|
this.hooks.trigger(this.hooks.eventTypes.end, endPoint);
|
|
return;
|
|
}
|
|
this.animate(startPoint, endPoint, time2, easingFn);
|
|
};
|
|
Animation2.prototype.animate = function(startPoint, endPoint, duration2, easingFn) {
|
|
var _this = this;
|
|
var startTime = getNow$1();
|
|
var destTime = startTime + duration2;
|
|
var isRealtimeProbeType = this.options.probeType === 3;
|
|
var step = function() {
|
|
var now = getNow$1();
|
|
if (now >= destTime) {
|
|
_this.translate(endPoint);
|
|
if (isRealtimeProbeType) {
|
|
_this.hooks.trigger(_this.hooks.eventTypes.move, endPoint);
|
|
}
|
|
_this.hooks.trigger(_this.hooks.eventTypes.end, endPoint);
|
|
return;
|
|
}
|
|
now = (now - startTime) / duration2;
|
|
var easing = easingFn(now);
|
|
var newPoint = {};
|
|
Object.keys(endPoint).forEach(function(key) {
|
|
var startValue = startPoint[key];
|
|
var endValue = endPoint[key];
|
|
newPoint[key] = (endValue - startValue) * easing + startValue;
|
|
});
|
|
_this.translate(newPoint);
|
|
if (isRealtimeProbeType) {
|
|
_this.hooks.trigger(_this.hooks.eventTypes.move, newPoint);
|
|
}
|
|
if (_this.pending) {
|
|
_this.timer = requestAnimationFrame(step);
|
|
}
|
|
if (!_this.pending) {
|
|
if (_this.callStopWhenPending) {
|
|
_this.callStopWhenPending = false;
|
|
} else {
|
|
_this.hooks.trigger(_this.hooks.eventTypes.end, endPoint);
|
|
}
|
|
}
|
|
};
|
|
this.setPending(true);
|
|
if (this.callStopWhenPending) {
|
|
this.setCallStop(false);
|
|
}
|
|
cancelAnimationFrame(this.timer);
|
|
step();
|
|
};
|
|
Animation2.prototype.doStop = function() {
|
|
var pending = this.pending;
|
|
this.setForceStopped(false);
|
|
this.setCallStop(false);
|
|
if (pending) {
|
|
this.setPending(false);
|
|
cancelAnimationFrame(this.timer);
|
|
var pos = this.translater.getComputedPosition();
|
|
this.setForceStopped(true);
|
|
this.setCallStop(true);
|
|
this.hooks.trigger(this.hooks.eventTypes.forceStop, pos);
|
|
}
|
|
return pending;
|
|
};
|
|
Animation2.prototype.stop = function() {
|
|
var stopFromAnimation = this.doStop();
|
|
if (stopFromAnimation) {
|
|
this.hooks.trigger(this.hooks.eventTypes.callStop);
|
|
}
|
|
};
|
|
return Animation2;
|
|
}(Base)
|
|
);
|
|
function createAnimater(element, translater, options) {
|
|
var useTransition = options.useTransition;
|
|
var animaterOptions = {};
|
|
Object.defineProperty(animaterOptions, "probeType", {
|
|
enumerable: true,
|
|
configurable: false,
|
|
get: function() {
|
|
return options.probeType;
|
|
}
|
|
});
|
|
if (useTransition) {
|
|
return new Transition(element, translater, animaterOptions);
|
|
} else {
|
|
return new Animation(element, translater, animaterOptions);
|
|
}
|
|
}
|
|
var Behavior = (
|
|
/** @class */
|
|
function() {
|
|
function Behavior2(wrapper, content, options) {
|
|
this.wrapper = wrapper;
|
|
this.options = options;
|
|
this.hooks = new EventEmitter$1([
|
|
"beforeComputeBoundary",
|
|
"computeBoundary",
|
|
"momentum",
|
|
"end",
|
|
"ignoreHasScroll"
|
|
]);
|
|
this.refresh(content);
|
|
}
|
|
Behavior2.prototype.start = function() {
|
|
this.dist = 0;
|
|
this.setMovingDirection(
|
|
0
|
|
/* Default */
|
|
);
|
|
this.setDirection(
|
|
0
|
|
/* Default */
|
|
);
|
|
};
|
|
Behavior2.prototype.move = function(delta) {
|
|
delta = this.hasScroll ? delta : 0;
|
|
this.setMovingDirection(delta);
|
|
return this.performDampingAlgorithm(delta, this.options.outOfBoundaryDampingFactor);
|
|
};
|
|
Behavior2.prototype.setMovingDirection = function(delta) {
|
|
this.movingDirection = delta > 0 ? -1 : delta < 0 ? 1 : 0;
|
|
};
|
|
Behavior2.prototype.setDirection = function(delta) {
|
|
this.direction = delta > 0 ? -1 : delta < 0 ? 1 : 0;
|
|
};
|
|
Behavior2.prototype.performDampingAlgorithm = function(delta, dampingFactor) {
|
|
var newPos = this.currentPos + delta;
|
|
if (newPos > this.minScrollPos || newPos < this.maxScrollPos) {
|
|
if (newPos > this.minScrollPos && this.options.bounces[0] || newPos < this.maxScrollPos && this.options.bounces[1]) {
|
|
newPos = this.currentPos + delta * dampingFactor;
|
|
} else {
|
|
newPos = newPos > this.minScrollPos ? this.minScrollPos : this.maxScrollPos;
|
|
}
|
|
}
|
|
return newPos;
|
|
};
|
|
Behavior2.prototype.end = function(duration2) {
|
|
var momentumInfo = {
|
|
duration: 0
|
|
};
|
|
var absDist = Math.abs(this.currentPos - this.startPos);
|
|
if (this.options.momentum && duration2 < this.options.momentumLimitTime && absDist > this.options.momentumLimitDistance) {
|
|
var wrapperSize = this.direction === -1 && this.options.bounces[0] || this.direction === 1 && this.options.bounces[1] ? this.wrapperSize : 0;
|
|
momentumInfo = this.hasScroll ? this.momentum(this.currentPos, this.startPos, duration2, this.maxScrollPos, this.minScrollPos, wrapperSize, this.options) : { destination: this.currentPos, duration: 0 };
|
|
} else {
|
|
this.hooks.trigger(this.hooks.eventTypes.end, momentumInfo);
|
|
}
|
|
return momentumInfo;
|
|
};
|
|
Behavior2.prototype.momentum = function(current, start, time2, lowerMargin, upperMargin, wrapperSize, options) {
|
|
if (options === void 0) {
|
|
options = this.options;
|
|
}
|
|
var distance2 = current - start;
|
|
var speed = Math.abs(distance2) / time2;
|
|
var deceleration = options.deceleration, swipeBounceTime = options.swipeBounceTime, swipeTime = options.swipeTime;
|
|
var duration2 = Math.min(swipeTime, speed * 2 / deceleration);
|
|
var momentumData = {
|
|
destination: current + speed * speed / deceleration * (distance2 < 0 ? -1 : 1),
|
|
duration: duration2,
|
|
rate: 15
|
|
};
|
|
this.hooks.trigger(this.hooks.eventTypes.momentum, momentumData, distance2);
|
|
if (momentumData.destination < lowerMargin) {
|
|
momentumData.destination = wrapperSize ? Math.max(lowerMargin - wrapperSize / 4, lowerMargin - wrapperSize / momentumData.rate * speed) : lowerMargin;
|
|
momentumData.duration = swipeBounceTime;
|
|
} else if (momentumData.destination > upperMargin) {
|
|
momentumData.destination = wrapperSize ? Math.min(upperMargin + wrapperSize / 4, upperMargin + wrapperSize / momentumData.rate * speed) : upperMargin;
|
|
momentumData.duration = swipeBounceTime;
|
|
}
|
|
momentumData.destination = Math.round(momentumData.destination);
|
|
return momentumData;
|
|
};
|
|
Behavior2.prototype.updateDirection = function() {
|
|
var absDist = this.currentPos - this.absStartPos;
|
|
this.setDirection(absDist);
|
|
};
|
|
Behavior2.prototype.refresh = function(content) {
|
|
var _a2 = this.options.rect, size = _a2.size, position2 = _a2.position;
|
|
var isWrapperStatic = window.getComputedStyle(this.wrapper, null).position === "static";
|
|
var wrapperRect = getRect$1(this.wrapper);
|
|
this.wrapperSize = this.wrapper[size === "width" ? "clientWidth" : "clientHeight"];
|
|
this.setContent(content);
|
|
var contentRect = getRect$1(this.content);
|
|
this.contentSize = contentRect[size];
|
|
this.relativeOffset = contentRect[position2];
|
|
if (isWrapperStatic) {
|
|
this.relativeOffset -= wrapperRect[position2];
|
|
}
|
|
this.computeBoundary();
|
|
this.setDirection(
|
|
0
|
|
/* Default */
|
|
);
|
|
};
|
|
Behavior2.prototype.setContent = function(content) {
|
|
if (content !== this.content) {
|
|
this.content = content;
|
|
this.resetState();
|
|
}
|
|
};
|
|
Behavior2.prototype.resetState = function() {
|
|
this.currentPos = 0;
|
|
this.startPos = 0;
|
|
this.dist = 0;
|
|
this.setDirection(
|
|
0
|
|
/* Default */
|
|
);
|
|
this.setMovingDirection(
|
|
0
|
|
/* Default */
|
|
);
|
|
this.resetStartPos();
|
|
};
|
|
Behavior2.prototype.computeBoundary = function() {
|
|
this.hooks.trigger(this.hooks.eventTypes.beforeComputeBoundary);
|
|
var boundary = {
|
|
minScrollPos: 0,
|
|
maxScrollPos: this.wrapperSize - this.contentSize
|
|
};
|
|
if (boundary.maxScrollPos < 0) {
|
|
boundary.maxScrollPos -= this.relativeOffset;
|
|
if (this.options.specifiedIndexAsContent === 0) {
|
|
boundary.minScrollPos = -this.relativeOffset;
|
|
}
|
|
}
|
|
this.hooks.trigger(this.hooks.eventTypes.computeBoundary, boundary);
|
|
this.minScrollPos = boundary.minScrollPos;
|
|
this.maxScrollPos = boundary.maxScrollPos;
|
|
this.hasScroll = this.options.scrollable && this.maxScrollPos < this.minScrollPos;
|
|
if (!this.hasScroll && this.minScrollPos < this.maxScrollPos) {
|
|
this.maxScrollPos = this.minScrollPos;
|
|
this.contentSize = this.wrapperSize;
|
|
}
|
|
};
|
|
Behavior2.prototype.updatePosition = function(pos) {
|
|
this.currentPos = pos;
|
|
};
|
|
Behavior2.prototype.getCurrentPos = function() {
|
|
return this.currentPos;
|
|
};
|
|
Behavior2.prototype.checkInBoundary = function() {
|
|
var position2 = this.adjustPosition(this.currentPos);
|
|
var inBoundary = position2 === this.getCurrentPos();
|
|
return {
|
|
position: position2,
|
|
inBoundary
|
|
};
|
|
};
|
|
Behavior2.prototype.adjustPosition = function(pos) {
|
|
if (!this.hasScroll && !this.hooks.trigger(this.hooks.eventTypes.ignoreHasScroll)) {
|
|
pos = this.minScrollPos;
|
|
} else if (pos > this.minScrollPos) {
|
|
pos = this.minScrollPos;
|
|
} else if (pos < this.maxScrollPos) {
|
|
pos = this.maxScrollPos;
|
|
}
|
|
return pos;
|
|
};
|
|
Behavior2.prototype.updateStartPos = function() {
|
|
this.startPos = this.currentPos;
|
|
};
|
|
Behavior2.prototype.updateAbsStartPos = function() {
|
|
this.absStartPos = this.currentPos;
|
|
};
|
|
Behavior2.prototype.resetStartPos = function() {
|
|
this.updateStartPos();
|
|
this.updateAbsStartPos();
|
|
};
|
|
Behavior2.prototype.getAbsDist = function(delta) {
|
|
this.dist += delta;
|
|
return Math.abs(this.dist);
|
|
};
|
|
Behavior2.prototype.destroy = function() {
|
|
this.hooks.destroy();
|
|
};
|
|
return Behavior2;
|
|
}()
|
|
);
|
|
var _a, _b, _c, _d;
|
|
var PassthroughHandlers = (_a = {}, _a[
|
|
"yes"
|
|
/* Yes */
|
|
] = function(e2) {
|
|
return true;
|
|
}, _a[
|
|
"no"
|
|
/* No */
|
|
] = function(e2) {
|
|
maybePrevent$2(e2);
|
|
return false;
|
|
}, _a);
|
|
var DirectionMap = (_b = {}, _b[
|
|
"horizontal"
|
|
/* Horizontal */
|
|
] = (_c = {}, _c[
|
|
"yes"
|
|
/* Yes */
|
|
] = "horizontal", _c[
|
|
"no"
|
|
/* No */
|
|
] = "vertical", _c), _b[
|
|
"vertical"
|
|
/* Vertical */
|
|
] = (_d = {}, _d[
|
|
"yes"
|
|
/* Yes */
|
|
] = "vertical", _d[
|
|
"no"
|
|
/* No */
|
|
] = "horizontal", _d), _b);
|
|
var DirectionLockAction = (
|
|
/** @class */
|
|
function() {
|
|
function DirectionLockAction2(directionLockThreshold, freeScroll, eventPassthrough) {
|
|
this.directionLockThreshold = directionLockThreshold;
|
|
this.freeScroll = freeScroll;
|
|
this.eventPassthrough = eventPassthrough;
|
|
this.reset();
|
|
}
|
|
DirectionLockAction2.prototype.reset = function() {
|
|
this.directionLocked = "";
|
|
};
|
|
DirectionLockAction2.prototype.checkMovingDirection = function(absDistX, absDistY, e2) {
|
|
this.computeDirectionLock(absDistX, absDistY);
|
|
return this.handleEventPassthrough(e2);
|
|
};
|
|
DirectionLockAction2.prototype.adjustDelta = function(deltaX, deltaY) {
|
|
if (this.directionLocked === "horizontal") {
|
|
deltaY = 0;
|
|
} else if (this.directionLocked === "vertical") {
|
|
deltaX = 0;
|
|
}
|
|
return {
|
|
deltaX,
|
|
deltaY
|
|
};
|
|
};
|
|
DirectionLockAction2.prototype.computeDirectionLock = function(absDistX, absDistY) {
|
|
if (this.directionLocked === "" && !this.freeScroll) {
|
|
if (absDistX > absDistY + this.directionLockThreshold) {
|
|
this.directionLocked = "horizontal";
|
|
} else if (absDistY >= absDistX + this.directionLockThreshold) {
|
|
this.directionLocked = "vertical";
|
|
} else {
|
|
this.directionLocked = "none";
|
|
}
|
|
}
|
|
};
|
|
DirectionLockAction2.prototype.handleEventPassthrough = function(e2) {
|
|
var handleMap = DirectionMap[this.directionLocked];
|
|
if (handleMap) {
|
|
if (this.eventPassthrough === handleMap[
|
|
"yes"
|
|
/* Yes */
|
|
]) {
|
|
return PassthroughHandlers[
|
|
"yes"
|
|
/* Yes */
|
|
](e2);
|
|
} else if (this.eventPassthrough === handleMap[
|
|
"no"
|
|
/* No */
|
|
]) {
|
|
return PassthroughHandlers[
|
|
"no"
|
|
/* No */
|
|
](e2);
|
|
}
|
|
}
|
|
return false;
|
|
};
|
|
return DirectionLockAction2;
|
|
}()
|
|
);
|
|
var applyQuadrantTransformation = function(deltaX, deltaY, quadrant) {
|
|
if (quadrant === 2) {
|
|
return [deltaY, -deltaX];
|
|
} else if (quadrant === 3) {
|
|
return [-deltaX, -deltaY];
|
|
} else if (quadrant === 4) {
|
|
return [-deltaY, deltaX];
|
|
} else {
|
|
return [deltaX, deltaY];
|
|
}
|
|
};
|
|
var ScrollerActions = (
|
|
/** @class */
|
|
function() {
|
|
function ScrollerActions2(scrollBehaviorX, scrollBehaviorY, actionsHandler, animater, options) {
|
|
this.hooks = new EventEmitter$1([
|
|
"start",
|
|
"beforeMove",
|
|
"scrollStart",
|
|
"scroll",
|
|
"beforeEnd",
|
|
"end",
|
|
"scrollEnd",
|
|
"contentNotMoved",
|
|
"detectMovingDirection",
|
|
"coordinateTransformation"
|
|
]);
|
|
this.scrollBehaviorX = scrollBehaviorX;
|
|
this.scrollBehaviorY = scrollBehaviorY;
|
|
this.actionsHandler = actionsHandler;
|
|
this.animater = animater;
|
|
this.options = options;
|
|
this.directionLockAction = new DirectionLockAction(options.directionLockThreshold, options.freeScroll, options.eventPassthrough);
|
|
this.enabled = true;
|
|
this.bindActionsHandler();
|
|
}
|
|
ScrollerActions2.prototype.bindActionsHandler = function() {
|
|
var _this = this;
|
|
this.actionsHandler.hooks.on(this.actionsHandler.hooks.eventTypes.start, function(e2) {
|
|
if (!_this.enabled)
|
|
return true;
|
|
return _this.handleStart(e2);
|
|
});
|
|
this.actionsHandler.hooks.on(this.actionsHandler.hooks.eventTypes.move, function(_a2) {
|
|
var deltaX = _a2.deltaX, deltaY = _a2.deltaY, e2 = _a2.e;
|
|
if (!_this.enabled)
|
|
return true;
|
|
var _b2 = applyQuadrantTransformation(deltaX, deltaY, _this.options.quadrant), transformateDeltaX = _b2[0], transformateDeltaY = _b2[1];
|
|
var transformateDeltaData = {
|
|
deltaX: transformateDeltaX,
|
|
deltaY: transformateDeltaY
|
|
};
|
|
_this.hooks.trigger(_this.hooks.eventTypes.coordinateTransformation, transformateDeltaData);
|
|
return _this.handleMove(transformateDeltaData.deltaX, transformateDeltaData.deltaY, e2);
|
|
});
|
|
this.actionsHandler.hooks.on(this.actionsHandler.hooks.eventTypes.end, function(e2) {
|
|
if (!_this.enabled)
|
|
return true;
|
|
return _this.handleEnd(e2);
|
|
});
|
|
this.actionsHandler.hooks.on(this.actionsHandler.hooks.eventTypes.click, function(e2) {
|
|
if (_this.enabled && !e2._constructed) {
|
|
_this.handleClick(e2);
|
|
}
|
|
});
|
|
};
|
|
ScrollerActions2.prototype.handleStart = function(e2) {
|
|
var timestamp = getNow$1();
|
|
this.fingerMoved = false;
|
|
this.contentMoved = false;
|
|
this.startTime = timestamp;
|
|
this.directionLockAction.reset();
|
|
this.scrollBehaviorX.start();
|
|
this.scrollBehaviorY.start();
|
|
this.animater.doStop();
|
|
this.scrollBehaviorX.resetStartPos();
|
|
this.scrollBehaviorY.resetStartPos();
|
|
this.hooks.trigger(this.hooks.eventTypes.start, e2);
|
|
};
|
|
ScrollerActions2.prototype.handleMove = function(deltaX, deltaY, e2) {
|
|
if (this.hooks.trigger(this.hooks.eventTypes.beforeMove, e2)) {
|
|
return;
|
|
}
|
|
var absDistX = this.scrollBehaviorX.getAbsDist(deltaX);
|
|
var absDistY = this.scrollBehaviorY.getAbsDist(deltaY);
|
|
var timestamp = getNow$1();
|
|
if (this.checkMomentum(absDistX, absDistY, timestamp)) {
|
|
return true;
|
|
}
|
|
if (this.directionLockAction.checkMovingDirection(absDistX, absDistY, e2)) {
|
|
this.actionsHandler.setInitiated();
|
|
return true;
|
|
}
|
|
var delta = this.directionLockAction.adjustDelta(deltaX, deltaY);
|
|
var prevX = this.scrollBehaviorX.getCurrentPos();
|
|
var newX = this.scrollBehaviorX.move(delta.deltaX);
|
|
var prevY = this.scrollBehaviorY.getCurrentPos();
|
|
var newY = this.scrollBehaviorY.move(delta.deltaY);
|
|
if (this.hooks.trigger(this.hooks.eventTypes.detectMovingDirection)) {
|
|
return;
|
|
}
|
|
if (!this.fingerMoved) {
|
|
this.fingerMoved = true;
|
|
}
|
|
var positionChanged = newX !== prevX || newY !== prevY;
|
|
if (!this.contentMoved && !positionChanged) {
|
|
this.hooks.trigger(this.hooks.eventTypes.contentNotMoved);
|
|
}
|
|
if (!this.contentMoved && positionChanged) {
|
|
this.contentMoved = true;
|
|
this.hooks.trigger(this.hooks.eventTypes.scrollStart);
|
|
}
|
|
if (this.contentMoved && positionChanged) {
|
|
this.animater.translate({
|
|
x: newX,
|
|
y: newY
|
|
});
|
|
this.dispatchScroll(timestamp);
|
|
}
|
|
};
|
|
ScrollerActions2.prototype.dispatchScroll = function(timestamp) {
|
|
if (timestamp - this.startTime > this.options.momentumLimitTime) {
|
|
this.startTime = timestamp;
|
|
this.scrollBehaviorX.updateStartPos();
|
|
this.scrollBehaviorY.updateStartPos();
|
|
if (this.options.probeType === 1) {
|
|
this.hooks.trigger(this.hooks.eventTypes.scroll, this.getCurrentPos());
|
|
}
|
|
}
|
|
if (this.options.probeType > 1) {
|
|
this.hooks.trigger(this.hooks.eventTypes.scroll, this.getCurrentPos());
|
|
}
|
|
};
|
|
ScrollerActions2.prototype.checkMomentum = function(absDistX, absDistY, timestamp) {
|
|
return timestamp - this.endTime > this.options.momentumLimitTime && absDistY < this.options.momentumLimitDistance && absDistX < this.options.momentumLimitDistance;
|
|
};
|
|
ScrollerActions2.prototype.handleEnd = function(e2) {
|
|
if (this.hooks.trigger(this.hooks.eventTypes.beforeEnd, e2)) {
|
|
return;
|
|
}
|
|
var currentPos = this.getCurrentPos();
|
|
this.scrollBehaviorX.updateDirection();
|
|
this.scrollBehaviorY.updateDirection();
|
|
if (this.hooks.trigger(this.hooks.eventTypes.end, e2, currentPos)) {
|
|
return true;
|
|
}
|
|
currentPos = this.ensureIntegerPos(currentPos);
|
|
this.animater.translate(currentPos);
|
|
this.endTime = getNow$1();
|
|
var duration2 = this.endTime - this.startTime;
|
|
this.hooks.trigger(this.hooks.eventTypes.scrollEnd, currentPos, duration2);
|
|
};
|
|
ScrollerActions2.prototype.ensureIntegerPos = function(currentPos) {
|
|
this.ensuringInteger = true;
|
|
var x = currentPos.x, y = currentPos.y;
|
|
var _a2 = this.scrollBehaviorX, minScrollPosX = _a2.minScrollPos, maxScrollPosX = _a2.maxScrollPos;
|
|
var _b2 = this.scrollBehaviorY, minScrollPosY = _b2.minScrollPos, maxScrollPosY = _b2.maxScrollPos;
|
|
x = x > 0 ? Math.ceil(x) : Math.floor(x);
|
|
y = y > 0 ? Math.ceil(y) : Math.floor(y);
|
|
x = between$1(x, maxScrollPosX, minScrollPosX);
|
|
y = between$1(y, maxScrollPosY, minScrollPosY);
|
|
return { x, y };
|
|
};
|
|
ScrollerActions2.prototype.handleClick = function(e2) {
|
|
if (!preventDefaultExceptionFn$1(e2.target, this.options.preventDefaultException)) {
|
|
maybePrevent$2(e2);
|
|
e2.stopPropagation();
|
|
}
|
|
};
|
|
ScrollerActions2.prototype.getCurrentPos = function() {
|
|
return {
|
|
x: this.scrollBehaviorX.getCurrentPos(),
|
|
y: this.scrollBehaviorY.getCurrentPos()
|
|
};
|
|
};
|
|
ScrollerActions2.prototype.refresh = function() {
|
|
this.endTime = 0;
|
|
};
|
|
ScrollerActions2.prototype.destroy = function() {
|
|
this.hooks.destroy();
|
|
};
|
|
return ScrollerActions2;
|
|
}()
|
|
);
|
|
function createActionsHandlerOptions(bsOptions) {
|
|
var options = [
|
|
"click",
|
|
"bindToWrapper",
|
|
"disableMouse",
|
|
"disableTouch",
|
|
"preventDefault",
|
|
"stopPropagation",
|
|
"tagException",
|
|
"preventDefaultException",
|
|
"autoEndDistance"
|
|
].reduce(function(prev, cur) {
|
|
prev[cur] = bsOptions[cur];
|
|
return prev;
|
|
}, {});
|
|
return options;
|
|
}
|
|
function createBehaviorOptions(bsOptions, extraProp, bounces, rect) {
|
|
var options = [
|
|
"momentum",
|
|
"momentumLimitTime",
|
|
"momentumLimitDistance",
|
|
"deceleration",
|
|
"swipeBounceTime",
|
|
"swipeTime",
|
|
"outOfBoundaryDampingFactor",
|
|
"specifiedIndexAsContent"
|
|
].reduce(function(prev, cur) {
|
|
prev[cur] = bsOptions[cur];
|
|
return prev;
|
|
}, {});
|
|
options.scrollable = !!bsOptions[extraProp];
|
|
options.bounces = bounces;
|
|
options.rect = rect;
|
|
return options;
|
|
}
|
|
function bubbling(source, target, events) {
|
|
events.forEach(function(event) {
|
|
var sourceEvent;
|
|
var targetEvent;
|
|
if (typeof event === "string") {
|
|
sourceEvent = targetEvent = event;
|
|
} else {
|
|
sourceEvent = event.source;
|
|
targetEvent = event.target;
|
|
}
|
|
source.on(sourceEvent, function() {
|
|
var args = [];
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
args[_i] = arguments[_i];
|
|
}
|
|
return target.trigger.apply(target, __spreadArrays$1([targetEvent], args));
|
|
});
|
|
});
|
|
}
|
|
function isSamePoint(startPoint, endPoint) {
|
|
var keys = Object.keys(startPoint);
|
|
for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {
|
|
var key = keys_1[_i];
|
|
if (startPoint[key] !== endPoint[key])
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
var MIN_SCROLL_DISTANCE = 1;
|
|
var Scroller = (
|
|
/** @class */
|
|
function() {
|
|
function Scroller2(wrapper, content, options) {
|
|
this.wrapper = wrapper;
|
|
this.content = content;
|
|
this.resizeTimeout = 0;
|
|
this.hooks = new EventEmitter$1([
|
|
"beforeStart",
|
|
"beforeMove",
|
|
"beforeScrollStart",
|
|
"scrollStart",
|
|
"scroll",
|
|
"beforeEnd",
|
|
"scrollEnd",
|
|
"resize",
|
|
"touchEnd",
|
|
"end",
|
|
"flick",
|
|
"scrollCancel",
|
|
"momentum",
|
|
"scrollTo",
|
|
"minDistanceScroll",
|
|
"scrollToElement",
|
|
"beforeRefresh"
|
|
]);
|
|
this.options = options;
|
|
var _a2 = this.options.bounce, left = _a2.left, right = _a2.right, top = _a2.top, bottom = _a2.bottom;
|
|
this.scrollBehaviorX = new Behavior(wrapper, content, createBehaviorOptions(options, "scrollX", [left, right], {
|
|
size: "width",
|
|
position: "left"
|
|
}));
|
|
this.scrollBehaviorY = new Behavior(wrapper, content, createBehaviorOptions(options, "scrollY", [top, bottom], {
|
|
size: "height",
|
|
position: "top"
|
|
}));
|
|
this.translater = new Translater(this.content);
|
|
this.animater = createAnimater(this.content, this.translater, this.options);
|
|
this.actionsHandler = new ActionsHandler(this.options.bindToTarget ? this.content : wrapper, createActionsHandlerOptions(this.options));
|
|
this.actions = new ScrollerActions(this.scrollBehaviorX, this.scrollBehaviorY, this.actionsHandler, this.animater, this.options);
|
|
var resizeHandler = this.resize.bind(this);
|
|
this.resizeRegister = new EventRegister$2(window, [
|
|
{
|
|
name: "orientationchange",
|
|
handler: resizeHandler
|
|
},
|
|
{
|
|
name: "resize",
|
|
handler: resizeHandler
|
|
}
|
|
]);
|
|
this.registerTransitionEnd();
|
|
this.init();
|
|
}
|
|
Scroller2.prototype.init = function() {
|
|
var _this = this;
|
|
this.bindTranslater();
|
|
this.bindAnimater();
|
|
this.bindActions();
|
|
this.hooks.on(this.hooks.eventTypes.scrollEnd, function() {
|
|
_this.togglePointerEvents(true);
|
|
});
|
|
};
|
|
Scroller2.prototype.registerTransitionEnd = function() {
|
|
this.transitionEndRegister = new EventRegister$2(this.content, [
|
|
{
|
|
name: style$1.transitionEnd,
|
|
handler: this.transitionEnd.bind(this)
|
|
}
|
|
]);
|
|
};
|
|
Scroller2.prototype.bindTranslater = function() {
|
|
var _this = this;
|
|
var hooks = this.translater.hooks;
|
|
hooks.on(hooks.eventTypes.beforeTranslate, function(transformStyle) {
|
|
if (_this.options.translateZ) {
|
|
transformStyle.push(_this.options.translateZ);
|
|
}
|
|
});
|
|
hooks.on(hooks.eventTypes.translate, function(pos) {
|
|
var prevPos = _this.getCurrentPos();
|
|
_this.updatePositions(pos);
|
|
if (_this.actions.ensuringInteger === true) {
|
|
_this.actions.ensuringInteger = false;
|
|
return;
|
|
}
|
|
if (pos.x !== prevPos.x || pos.y !== prevPos.y) {
|
|
_this.togglePointerEvents(false);
|
|
}
|
|
});
|
|
};
|
|
Scroller2.prototype.bindAnimater = function() {
|
|
var _this = this;
|
|
this.animater.hooks.on(this.animater.hooks.eventTypes.end, function(pos) {
|
|
if (!_this.resetPosition(_this.options.bounceTime)) {
|
|
_this.animater.setPending(false);
|
|
_this.hooks.trigger(_this.hooks.eventTypes.scrollEnd, pos);
|
|
}
|
|
});
|
|
bubbling(this.animater.hooks, this.hooks, [
|
|
{
|
|
source: this.animater.hooks.eventTypes.move,
|
|
target: this.hooks.eventTypes.scroll
|
|
},
|
|
{
|
|
source: this.animater.hooks.eventTypes.forceStop,
|
|
target: this.hooks.eventTypes.scrollEnd
|
|
}
|
|
]);
|
|
};
|
|
Scroller2.prototype.bindActions = function() {
|
|
var _this = this;
|
|
var actions = this.actions;
|
|
bubbling(actions.hooks, this.hooks, [
|
|
{
|
|
source: actions.hooks.eventTypes.start,
|
|
target: this.hooks.eventTypes.beforeStart
|
|
},
|
|
{
|
|
source: actions.hooks.eventTypes.start,
|
|
target: this.hooks.eventTypes.beforeScrollStart
|
|
},
|
|
{
|
|
source: actions.hooks.eventTypes.beforeMove,
|
|
target: this.hooks.eventTypes.beforeMove
|
|
},
|
|
{
|
|
source: actions.hooks.eventTypes.scrollStart,
|
|
target: this.hooks.eventTypes.scrollStart
|
|
},
|
|
{
|
|
source: actions.hooks.eventTypes.scroll,
|
|
target: this.hooks.eventTypes.scroll
|
|
},
|
|
{
|
|
source: actions.hooks.eventTypes.beforeEnd,
|
|
target: this.hooks.eventTypes.beforeEnd
|
|
}
|
|
]);
|
|
actions.hooks.on(actions.hooks.eventTypes.end, function(e2, pos) {
|
|
_this.hooks.trigger(_this.hooks.eventTypes.touchEnd, pos);
|
|
if (_this.hooks.trigger(_this.hooks.eventTypes.end, pos)) {
|
|
return true;
|
|
}
|
|
if (!actions.fingerMoved) {
|
|
_this.hooks.trigger(_this.hooks.eventTypes.scrollCancel);
|
|
if (_this.checkClick(e2)) {
|
|
return true;
|
|
}
|
|
}
|
|
if (_this.resetPosition(_this.options.bounceTime, ease.bounce)) {
|
|
_this.animater.setForceStopped(false);
|
|
return true;
|
|
}
|
|
});
|
|
actions.hooks.on(actions.hooks.eventTypes.scrollEnd, function(pos, duration2) {
|
|
var deltaX = Math.abs(pos.x - _this.scrollBehaviorX.startPos);
|
|
var deltaY = Math.abs(pos.y - _this.scrollBehaviorY.startPos);
|
|
if (_this.checkFlick(duration2, deltaX, deltaY)) {
|
|
_this.animater.setForceStopped(false);
|
|
_this.hooks.trigger(_this.hooks.eventTypes.flick);
|
|
return;
|
|
}
|
|
if (_this.momentum(pos, duration2)) {
|
|
_this.animater.setForceStopped(false);
|
|
return;
|
|
}
|
|
if (actions.contentMoved) {
|
|
_this.hooks.trigger(_this.hooks.eventTypes.scrollEnd, pos);
|
|
}
|
|
if (_this.animater.forceStopped) {
|
|
_this.animater.setForceStopped(false);
|
|
}
|
|
});
|
|
};
|
|
Scroller2.prototype.checkFlick = function(duration2, deltaX, deltaY) {
|
|
var flickMinMovingDistance = 1;
|
|
if (this.hooks.events.flick.length > 1 && duration2 < this.options.flickLimitTime && deltaX < this.options.flickLimitDistance && deltaY < this.options.flickLimitDistance && (deltaY > flickMinMovingDistance || deltaX > flickMinMovingDistance)) {
|
|
return true;
|
|
}
|
|
};
|
|
Scroller2.prototype.momentum = function(pos, duration2) {
|
|
var meta = {
|
|
time: 0,
|
|
easing: ease.swiper,
|
|
newX: pos.x,
|
|
newY: pos.y
|
|
};
|
|
var momentumX = this.scrollBehaviorX.end(duration2);
|
|
var momentumY = this.scrollBehaviorY.end(duration2);
|
|
meta.newX = isUndef(momentumX.destination) ? meta.newX : momentumX.destination;
|
|
meta.newY = isUndef(momentumY.destination) ? meta.newY : momentumY.destination;
|
|
meta.time = Math.max(momentumX.duration, momentumY.duration);
|
|
this.hooks.trigger(this.hooks.eventTypes.momentum, meta, this);
|
|
if (meta.newX !== pos.x || meta.newY !== pos.y) {
|
|
if (meta.newX > this.scrollBehaviorX.minScrollPos || meta.newX < this.scrollBehaviorX.maxScrollPos || meta.newY > this.scrollBehaviorY.minScrollPos || meta.newY < this.scrollBehaviorY.maxScrollPos) {
|
|
meta.easing = ease.swipeBounce;
|
|
}
|
|
this.scrollTo(meta.newX, meta.newY, meta.time, meta.easing);
|
|
return true;
|
|
}
|
|
};
|
|
Scroller2.prototype.checkClick = function(e2) {
|
|
var cancelable = {
|
|
preventClick: this.animater.forceStopped
|
|
};
|
|
if (this.hooks.trigger(this.hooks.eventTypes.checkClick)) {
|
|
this.animater.setForceStopped(false);
|
|
return true;
|
|
}
|
|
if (!cancelable.preventClick) {
|
|
var _dblclick = this.options.dblclick;
|
|
var dblclickTrigged = false;
|
|
if (_dblclick && this.lastClickTime) {
|
|
var _a2 = _dblclick.delay, delay2 = _a2 === void 0 ? 300 : _a2;
|
|
if (getNow$1() - this.lastClickTime < delay2) {
|
|
dblclickTrigged = true;
|
|
dblclick(e2);
|
|
}
|
|
}
|
|
if (this.options.tap) {
|
|
tap(e2, this.options.tap);
|
|
}
|
|
if (this.options.click && !preventDefaultExceptionFn$1(e2.target, this.options.preventDefaultException)) {
|
|
click(e2);
|
|
}
|
|
this.lastClickTime = dblclickTrigged ? null : getNow$1();
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
Scroller2.prototype.resize = function() {
|
|
var _this = this;
|
|
if (!this.actions.enabled) {
|
|
return;
|
|
}
|
|
if (isAndroid) {
|
|
this.wrapper.scrollTop = 0;
|
|
}
|
|
clearTimeout(this.resizeTimeout);
|
|
this.resizeTimeout = window.setTimeout(function() {
|
|
_this.hooks.trigger(_this.hooks.eventTypes.resize);
|
|
}, this.options.resizePolling);
|
|
};
|
|
Scroller2.prototype.transitionEnd = function(e2) {
|
|
if (e2.target !== this.content || !this.animater.pending) {
|
|
return;
|
|
}
|
|
var animater = this.animater;
|
|
animater.transitionTime();
|
|
if (!this.resetPosition(this.options.bounceTime, ease.bounce)) {
|
|
this.animater.setPending(false);
|
|
if (this.options.probeType !== 3) {
|
|
this.hooks.trigger(this.hooks.eventTypes.scrollEnd, this.getCurrentPos());
|
|
}
|
|
}
|
|
};
|
|
Scroller2.prototype.togglePointerEvents = function(enabled) {
|
|
if (enabled === void 0) {
|
|
enabled = true;
|
|
}
|
|
var el = this.content.children.length ? this.content.children : [this.content];
|
|
var pointerEvents = enabled ? "auto" : "none";
|
|
for (var i = 0; i < el.length; i++) {
|
|
var node = el[i];
|
|
if (node.isBScrollContainer) {
|
|
continue;
|
|
}
|
|
node.style.pointerEvents = pointerEvents;
|
|
}
|
|
};
|
|
Scroller2.prototype.refresh = function(content) {
|
|
var contentChanged = this.setContent(content);
|
|
this.hooks.trigger(this.hooks.eventTypes.beforeRefresh);
|
|
this.scrollBehaviorX.refresh(content);
|
|
this.scrollBehaviorY.refresh(content);
|
|
if (contentChanged) {
|
|
this.translater.setContent(content);
|
|
this.animater.setContent(content);
|
|
this.transitionEndRegister.destroy();
|
|
this.registerTransitionEnd();
|
|
if (this.options.bindToTarget) {
|
|
this.actionsHandler.setContent(content);
|
|
}
|
|
}
|
|
this.actions.refresh();
|
|
this.wrapperOffset = offset(this.wrapper);
|
|
};
|
|
Scroller2.prototype.setContent = function(content) {
|
|
var contentChanged = content !== this.content;
|
|
if (contentChanged) {
|
|
this.content = content;
|
|
}
|
|
return contentChanged;
|
|
};
|
|
Scroller2.prototype.scrollBy = function(deltaX, deltaY, time2, easing) {
|
|
if (time2 === void 0) {
|
|
time2 = 0;
|
|
}
|
|
var _a2 = this.getCurrentPos(), x = _a2.x, y = _a2.y;
|
|
easing = !easing ? ease.bounce : easing;
|
|
deltaX += x;
|
|
deltaY += y;
|
|
this.scrollTo(deltaX, deltaY, time2, easing);
|
|
};
|
|
Scroller2.prototype.scrollTo = function(x, y, time2, easing, extraTransform) {
|
|
if (time2 === void 0) {
|
|
time2 = 0;
|
|
}
|
|
if (easing === void 0) {
|
|
easing = ease.bounce;
|
|
}
|
|
if (extraTransform === void 0) {
|
|
extraTransform = {
|
|
start: {},
|
|
end: {}
|
|
};
|
|
}
|
|
var easingFn = this.options.useTransition ? easing.style : easing.fn;
|
|
var currentPos = this.getCurrentPos();
|
|
var startPoint = __assign$1({ x: currentPos.x, y: currentPos.y }, extraTransform.start);
|
|
var endPoint = __assign$1({
|
|
x,
|
|
y
|
|
}, extraTransform.end);
|
|
this.hooks.trigger(this.hooks.eventTypes.scrollTo, endPoint);
|
|
if (isSamePoint(startPoint, endPoint))
|
|
return;
|
|
var deltaX = Math.abs(endPoint.x - startPoint.x);
|
|
var deltaY = Math.abs(endPoint.y - startPoint.y);
|
|
if (deltaX < MIN_SCROLL_DISTANCE && deltaY < MIN_SCROLL_DISTANCE) {
|
|
time2 = 0;
|
|
this.hooks.trigger(this.hooks.eventTypes.minDistanceScroll);
|
|
}
|
|
this.animater.move(startPoint, endPoint, time2, easingFn);
|
|
};
|
|
Scroller2.prototype.scrollToElement = function(el, time2, offsetX, offsetY, easing) {
|
|
var targetEle = getElement(el);
|
|
var pos = offset(targetEle);
|
|
var getOffset = function(offset2, size, wrapperSize) {
|
|
if (typeof offset2 === "number") {
|
|
return offset2;
|
|
}
|
|
return offset2 ? Math.round(size / 2 - wrapperSize / 2) : 0;
|
|
};
|
|
offsetX = getOffset(offsetX, targetEle.offsetWidth, this.wrapper.offsetWidth);
|
|
offsetY = getOffset(offsetY, targetEle.offsetHeight, this.wrapper.offsetHeight);
|
|
var getPos = function(pos2, wrapperPos, offset2, scrollBehavior) {
|
|
pos2 -= wrapperPos;
|
|
pos2 = scrollBehavior.adjustPosition(pos2 - offset2);
|
|
return pos2;
|
|
};
|
|
pos.left = getPos(pos.left, this.wrapperOffset.left, offsetX, this.scrollBehaviorX);
|
|
pos.top = getPos(pos.top, this.wrapperOffset.top, offsetY, this.scrollBehaviorY);
|
|
if (this.hooks.trigger(this.hooks.eventTypes.scrollToElement, targetEle, pos)) {
|
|
return;
|
|
}
|
|
this.scrollTo(pos.left, pos.top, time2, easing);
|
|
};
|
|
Scroller2.prototype.resetPosition = function(time2, easing) {
|
|
if (time2 === void 0) {
|
|
time2 = 0;
|
|
}
|
|
if (easing === void 0) {
|
|
easing = ease.bounce;
|
|
}
|
|
var _a2 = this.scrollBehaviorX.checkInBoundary(), x = _a2.position, xInBoundary = _a2.inBoundary;
|
|
var _b2 = this.scrollBehaviorY.checkInBoundary(), y = _b2.position, yInBoundary = _b2.inBoundary;
|
|
if (xInBoundary && yInBoundary) {
|
|
return false;
|
|
}
|
|
if (isIOSBadVersion) {
|
|
this.reflow();
|
|
}
|
|
this.scrollTo(x, y, time2, easing);
|
|
return true;
|
|
};
|
|
Scroller2.prototype.reflow = function() {
|
|
this._reflow = this.content.offsetHeight;
|
|
};
|
|
Scroller2.prototype.updatePositions = function(pos) {
|
|
this.scrollBehaviorX.updatePosition(pos.x);
|
|
this.scrollBehaviorY.updatePosition(pos.y);
|
|
};
|
|
Scroller2.prototype.getCurrentPos = function() {
|
|
return this.actions.getCurrentPos();
|
|
};
|
|
Scroller2.prototype.enable = function() {
|
|
this.actions.enabled = true;
|
|
};
|
|
Scroller2.prototype.disable = function() {
|
|
cancelAnimationFrame(this.animater.timer);
|
|
this.actions.enabled = false;
|
|
};
|
|
Scroller2.prototype.destroy = function() {
|
|
var _this = this;
|
|
var keys = [
|
|
"resizeRegister",
|
|
"transitionEndRegister",
|
|
"actionsHandler",
|
|
"actions",
|
|
"hooks",
|
|
"animater",
|
|
"translater",
|
|
"scrollBehaviorX",
|
|
"scrollBehaviorY"
|
|
];
|
|
keys.forEach(function(key) {
|
|
return _this[key].destroy();
|
|
});
|
|
};
|
|
return Scroller2;
|
|
}()
|
|
);
|
|
var BScrollConstructor = (
|
|
/** @class */
|
|
function(_super) {
|
|
__extends(BScrollConstructor2, _super);
|
|
function BScrollConstructor2(el, options) {
|
|
var _this = _super.call(this, [
|
|
"refresh",
|
|
"contentChanged",
|
|
"enable",
|
|
"disable",
|
|
"beforeScrollStart",
|
|
"scrollStart",
|
|
"scroll",
|
|
"scrollEnd",
|
|
"scrollCancel",
|
|
"touchEnd",
|
|
"flick",
|
|
"destroy"
|
|
]) || this;
|
|
var wrapper = getElement(el);
|
|
if (!wrapper) {
|
|
warn$2("Can not resolve the wrapper DOM.");
|
|
return _this;
|
|
}
|
|
_this.plugins = {};
|
|
_this.options = new OptionsConstructor().merge(options).process();
|
|
if (!_this.setContent(wrapper).valid) {
|
|
return _this;
|
|
}
|
|
_this.hooks = new EventEmitter$1([
|
|
"refresh",
|
|
"enable",
|
|
"disable",
|
|
"destroy",
|
|
"beforeInitialScrollTo",
|
|
"contentChanged"
|
|
]);
|
|
_this.init(wrapper);
|
|
return _this;
|
|
}
|
|
BScrollConstructor2.use = function(ctor) {
|
|
var name = ctor.pluginName;
|
|
var installed = BScrollConstructor2.plugins.some(function(plugin) {
|
|
return ctor === plugin.ctor;
|
|
});
|
|
if (installed)
|
|
return BScrollConstructor2;
|
|
if (isUndef(name)) {
|
|
warn$2("Plugin Class must specify plugin's name in static property by 'pluginName' field.");
|
|
return BScrollConstructor2;
|
|
}
|
|
BScrollConstructor2.pluginsMap[name] = true;
|
|
BScrollConstructor2.plugins.push({
|
|
name,
|
|
applyOrder: ctor.applyOrder,
|
|
ctor
|
|
});
|
|
return BScrollConstructor2;
|
|
};
|
|
BScrollConstructor2.prototype.setContent = function(wrapper) {
|
|
var contentChanged = false;
|
|
var valid = true;
|
|
var content = wrapper.children[this.options.specifiedIndexAsContent];
|
|
if (!content) {
|
|
warn$2("The wrapper need at least one child element to be content element to scroll.");
|
|
valid = false;
|
|
} else {
|
|
contentChanged = this.content !== content;
|
|
if (contentChanged) {
|
|
this.content = content;
|
|
}
|
|
}
|
|
return {
|
|
valid,
|
|
contentChanged
|
|
};
|
|
};
|
|
BScrollConstructor2.prototype.init = function(wrapper) {
|
|
var _this = this;
|
|
this.wrapper = wrapper;
|
|
wrapper.isBScrollContainer = true;
|
|
this.scroller = new Scroller(wrapper, this.content, this.options);
|
|
this.scroller.hooks.on(this.scroller.hooks.eventTypes.resize, function() {
|
|
_this.refresh();
|
|
});
|
|
this.eventBubbling();
|
|
this.handleAutoBlur();
|
|
this.enable();
|
|
this.proxy(propertiesConfig$1);
|
|
this.applyPlugins();
|
|
this.refreshWithoutReset(this.content);
|
|
var _a2 = this.options, startX = _a2.startX, startY = _a2.startY;
|
|
var position2 = {
|
|
x: startX,
|
|
y: startY
|
|
};
|
|
if (this.hooks.trigger(this.hooks.eventTypes.beforeInitialScrollTo, position2)) {
|
|
return;
|
|
}
|
|
this.scroller.scrollTo(position2.x, position2.y);
|
|
};
|
|
BScrollConstructor2.prototype.applyPlugins = function() {
|
|
var _this = this;
|
|
var options = this.options;
|
|
BScrollConstructor2.plugins.sort(function(a2, b) {
|
|
var _a2;
|
|
var applyOrderMap = (_a2 = {}, _a2[
|
|
"pre"
|
|
/* Pre */
|
|
] = -1, _a2[
|
|
"post"
|
|
/* Post */
|
|
] = 1, _a2);
|
|
var aOrder = a2.applyOrder ? applyOrderMap[a2.applyOrder] : 0;
|
|
var bOrder = b.applyOrder ? applyOrderMap[b.applyOrder] : 0;
|
|
return aOrder - bOrder;
|
|
}).forEach(function(item) {
|
|
var ctor = item.ctor;
|
|
if (options[item.name] && typeof ctor === "function") {
|
|
_this.plugins[item.name] = new ctor(_this);
|
|
}
|
|
});
|
|
};
|
|
BScrollConstructor2.prototype.handleAutoBlur = function() {
|
|
if (this.options.autoBlur) {
|
|
this.on(this.eventTypes.beforeScrollStart, function() {
|
|
var activeElement = document.activeElement;
|
|
if (activeElement && (activeElement.tagName === "INPUT" || activeElement.tagName === "TEXTAREA")) {
|
|
activeElement.blur();
|
|
}
|
|
});
|
|
}
|
|
};
|
|
BScrollConstructor2.prototype.eventBubbling = function() {
|
|
bubbling(this.scroller.hooks, this, [
|
|
this.eventTypes.beforeScrollStart,
|
|
this.eventTypes.scrollStart,
|
|
this.eventTypes.scroll,
|
|
this.eventTypes.scrollEnd,
|
|
this.eventTypes.scrollCancel,
|
|
this.eventTypes.touchEnd,
|
|
this.eventTypes.flick
|
|
]);
|
|
};
|
|
BScrollConstructor2.prototype.refreshWithoutReset = function(content) {
|
|
this.scroller.refresh(content);
|
|
this.hooks.trigger(this.hooks.eventTypes.refresh, content);
|
|
this.trigger(this.eventTypes.refresh, content);
|
|
};
|
|
BScrollConstructor2.prototype.proxy = function(propertiesConfig2) {
|
|
var _this = this;
|
|
propertiesConfig2.forEach(function(_a2) {
|
|
var key = _a2.key, sourceKey = _a2.sourceKey;
|
|
propertiesProxy(_this, sourceKey, key);
|
|
});
|
|
};
|
|
BScrollConstructor2.prototype.refresh = function() {
|
|
var _a2 = this.setContent(this.wrapper), contentChanged = _a2.contentChanged, valid = _a2.valid;
|
|
if (valid) {
|
|
var content = this.content;
|
|
this.refreshWithoutReset(content);
|
|
if (contentChanged) {
|
|
this.hooks.trigger(this.hooks.eventTypes.contentChanged, content);
|
|
this.trigger(this.eventTypes.contentChanged, content);
|
|
}
|
|
this.scroller.resetPosition();
|
|
}
|
|
};
|
|
BScrollConstructor2.prototype.enable = function() {
|
|
this.scroller.enable();
|
|
this.hooks.trigger(this.hooks.eventTypes.enable);
|
|
this.trigger(this.eventTypes.enable);
|
|
};
|
|
BScrollConstructor2.prototype.disable = function() {
|
|
this.scroller.disable();
|
|
this.hooks.trigger(this.hooks.eventTypes.disable);
|
|
this.trigger(this.eventTypes.disable);
|
|
};
|
|
BScrollConstructor2.prototype.destroy = function() {
|
|
this.hooks.trigger(this.hooks.eventTypes.destroy);
|
|
this.trigger(this.eventTypes.destroy);
|
|
this.scroller.destroy();
|
|
};
|
|
BScrollConstructor2.prototype.eventRegister = function(names) {
|
|
this.registerType(names);
|
|
};
|
|
BScrollConstructor2.plugins = [];
|
|
BScrollConstructor2.pluginsMap = {};
|
|
return BScrollConstructor2;
|
|
}(EventEmitter$1)
|
|
);
|
|
function createBScroll(el, options) {
|
|
var bs = new BScrollConstructor(el, options);
|
|
return bs;
|
|
}
|
|
createBScroll.use = BScrollConstructor.use;
|
|
createBScroll.plugins = BScrollConstructor.plugins;
|
|
createBScroll.pluginsMap = BScrollConstructor.pluginsMap;
|
|
var BScroll = createBScroll;
|
|
/*!
|
|
* better-scroll / scroll-bar
|
|
* (c) 2016-2023 ustbhuangyi
|
|
* Released under the MIT License.
|
|
*/
|
|
/*! *****************************************************************************
|
|
Copyright (c) Microsoft Corporation.
|
|
|
|
Permission to use, copy, modify, and/or distribute this software for any
|
|
purpose with or without fee is hereby granted.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
PERFORMANCE OF THIS SOFTWARE.
|
|
***************************************************************************** */
|
|
var __assign = function() {
|
|
__assign = Object.assign || function __assign2(t) {
|
|
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
s = arguments[i];
|
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
|
|
}
|
|
return t;
|
|
};
|
|
return __assign.apply(this, arguments);
|
|
};
|
|
function __spreadArrays() {
|
|
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
|
|
for (var r = Array(s), k = 0, i = 0; i < il; i++)
|
|
for (var a2 = arguments[i], j = 0, jl = a2.length; j < jl; j++, k++)
|
|
r[k] = a2[j];
|
|
return r;
|
|
}
|
|
function warn$1(msg) {
|
|
console.error("[BScroll warn]: " + msg);
|
|
}
|
|
var inBrowser$3 = typeof window !== "undefined";
|
|
var ua$3 = inBrowser$3 && navigator.userAgent.toLowerCase();
|
|
ua$3 && ua$3.indexOf("android") > 0;
|
|
(function() {
|
|
if (typeof ua$3 === "string") {
|
|
var regex = /os (\d\d?_\d(_\d)?)/;
|
|
var matches = regex.exec(ua$3);
|
|
if (!matches)
|
|
return false;
|
|
var parts = matches[1].split("_").map(function(item) {
|
|
return parseInt(item, 10);
|
|
});
|
|
return !!(parts[0] === 13 && parts[1] >= 4);
|
|
}
|
|
return false;
|
|
})();
|
|
var supportsPassive$3 = false;
|
|
if (inBrowser$3) {
|
|
var EventName$3 = "test-passive";
|
|
try {
|
|
var opts$3 = {};
|
|
Object.defineProperty(opts$3, "passive", {
|
|
get: function() {
|
|
supportsPassive$3 = true;
|
|
}
|
|
});
|
|
window.addEventListener(EventName$3, function() {
|
|
}, opts$3);
|
|
} catch (e2) {
|
|
}
|
|
}
|
|
function getNow() {
|
|
return window.performance && window.performance.now && window.performance.timing ? window.performance.now() + window.performance.timing.navigationStart : +/* @__PURE__ */ new Date();
|
|
}
|
|
var extend$2 = function(target, source) {
|
|
for (var key in source) {
|
|
target[key] = source[key];
|
|
}
|
|
return target;
|
|
};
|
|
function between(x, min, max) {
|
|
if (x < min) {
|
|
return min;
|
|
}
|
|
if (x > max) {
|
|
return max;
|
|
}
|
|
return x;
|
|
}
|
|
var elementStyle$3 = inBrowser$3 && document.createElement("div").style;
|
|
var vendor$3 = function() {
|
|
if (!inBrowser$3) {
|
|
return false;
|
|
}
|
|
var transformNames = [
|
|
{
|
|
key: "standard",
|
|
value: "transform"
|
|
},
|
|
{
|
|
key: "webkit",
|
|
value: "webkitTransform"
|
|
},
|
|
{
|
|
key: "Moz",
|
|
value: "MozTransform"
|
|
},
|
|
{
|
|
key: "O",
|
|
value: "OTransform"
|
|
},
|
|
{
|
|
key: "ms",
|
|
value: "msTransform"
|
|
}
|
|
];
|
|
for (var _i = 0, transformNames_1 = transformNames; _i < transformNames_1.length; _i++) {
|
|
var obj = transformNames_1[_i];
|
|
if (elementStyle$3[obj.value] !== void 0) {
|
|
return obj.key;
|
|
}
|
|
}
|
|
return false;
|
|
}();
|
|
function prefixStyle$3(style2) {
|
|
if (vendor$3 === false) {
|
|
return style2;
|
|
}
|
|
if (vendor$3 === "standard") {
|
|
if (style2 === "transitionEnd") {
|
|
return "transitionend";
|
|
}
|
|
return style2;
|
|
}
|
|
return vendor$3 + style2.charAt(0).toUpperCase() + style2.substr(1);
|
|
}
|
|
function addEvent$1(el, type, fn, capture) {
|
|
var useCapture = supportsPassive$3 ? {
|
|
passive: false,
|
|
capture: !!capture
|
|
} : !!capture;
|
|
el.addEventListener(type, fn, useCapture);
|
|
}
|
|
function removeEvent$1(el, type, fn, capture) {
|
|
el.removeEventListener(type, fn, {
|
|
capture: !!capture
|
|
});
|
|
}
|
|
function maybePrevent$1(e2) {
|
|
if (e2.cancelable) {
|
|
e2.preventDefault();
|
|
}
|
|
}
|
|
vendor$3 && vendor$3 !== "standard" ? "-" + vendor$3.toLowerCase() + "-" : "";
|
|
var transform = prefixStyle$3("transform");
|
|
prefixStyle$3("transition");
|
|
inBrowser$3 && prefixStyle$3("perspective") in elementStyle$3;
|
|
var style = {
|
|
transform,
|
|
transitionTimingFunction: prefixStyle$3("transitionTimingFunction"),
|
|
transitionDuration: prefixStyle$3("transitionDuration"),
|
|
transitionDelay: prefixStyle$3("transitionDelay"),
|
|
transformOrigin: prefixStyle$3("transformOrigin"),
|
|
transitionEnd: prefixStyle$3("transitionEnd"),
|
|
transitionProperty: prefixStyle$3("transitionProperty")
|
|
};
|
|
var EventEmitter = (
|
|
/** @class */
|
|
function() {
|
|
function EventEmitter2(names) {
|
|
this.events = {};
|
|
this.eventTypes = {};
|
|
this.registerType(names);
|
|
}
|
|
EventEmitter2.prototype.on = function(type, fn, context) {
|
|
if (context === void 0) {
|
|
context = this;
|
|
}
|
|
this.hasType(type);
|
|
if (!this.events[type]) {
|
|
this.events[type] = [];
|
|
}
|
|
this.events[type].push([fn, context]);
|
|
return this;
|
|
};
|
|
EventEmitter2.prototype.once = function(type, fn, context) {
|
|
var _this = this;
|
|
if (context === void 0) {
|
|
context = this;
|
|
}
|
|
this.hasType(type);
|
|
var magic = function() {
|
|
var args = [];
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
args[_i] = arguments[_i];
|
|
}
|
|
_this.off(type, magic);
|
|
var ret = fn.apply(context, args);
|
|
if (ret === true) {
|
|
return ret;
|
|
}
|
|
};
|
|
magic.fn = fn;
|
|
this.on(type, magic);
|
|
return this;
|
|
};
|
|
EventEmitter2.prototype.off = function(type, fn) {
|
|
if (!type && !fn) {
|
|
this.events = {};
|
|
return this;
|
|
}
|
|
if (type) {
|
|
this.hasType(type);
|
|
if (!fn) {
|
|
this.events[type] = [];
|
|
return this;
|
|
}
|
|
var events = this.events[type];
|
|
if (!events) {
|
|
return this;
|
|
}
|
|
var count = events.length;
|
|
while (count--) {
|
|
if (events[count][0] === fn || events[count][0] && events[count][0].fn === fn) {
|
|
events.splice(count, 1);
|
|
}
|
|
}
|
|
return this;
|
|
}
|
|
};
|
|
EventEmitter2.prototype.trigger = function(type) {
|
|
var args = [];
|
|
for (var _i = 1; _i < arguments.length; _i++) {
|
|
args[_i - 1] = arguments[_i];
|
|
}
|
|
this.hasType(type);
|
|
var events = this.events[type];
|
|
if (!events) {
|
|
return;
|
|
}
|
|
var len = events.length;
|
|
var eventsCopy = __spreadArrays(events);
|
|
var ret;
|
|
for (var i = 0; i < len; i++) {
|
|
var event_1 = eventsCopy[i];
|
|
var fn = event_1[0], context = event_1[1];
|
|
if (fn) {
|
|
ret = fn.apply(context, args);
|
|
if (ret === true) {
|
|
return ret;
|
|
}
|
|
}
|
|
}
|
|
};
|
|
EventEmitter2.prototype.registerType = function(names) {
|
|
var _this = this;
|
|
names.forEach(function(type) {
|
|
_this.eventTypes[type] = type;
|
|
});
|
|
};
|
|
EventEmitter2.prototype.destroy = function() {
|
|
this.events = {};
|
|
this.eventTypes = {};
|
|
};
|
|
EventEmitter2.prototype.hasType = function(type) {
|
|
var types = this.eventTypes;
|
|
var isType = types[type] === type;
|
|
if (!isType) {
|
|
warn$1('EventEmitter has used unknown event type: "' + type + '", should be oneof [' + ("" + Object.keys(types).map(function(_) {
|
|
return JSON.stringify(_);
|
|
})) + "]");
|
|
}
|
|
};
|
|
return EventEmitter2;
|
|
}()
|
|
);
|
|
var EventRegister$1 = (
|
|
/** @class */
|
|
function() {
|
|
function EventRegister2(wrapper, events) {
|
|
this.wrapper = wrapper;
|
|
this.events = events;
|
|
this.addDOMEvents();
|
|
}
|
|
EventRegister2.prototype.destroy = function() {
|
|
this.removeDOMEvents();
|
|
this.events = [];
|
|
};
|
|
EventRegister2.prototype.addDOMEvents = function() {
|
|
this.handleDOMEvents(addEvent$1);
|
|
};
|
|
EventRegister2.prototype.removeDOMEvents = function() {
|
|
this.handleDOMEvents(removeEvent$1);
|
|
};
|
|
EventRegister2.prototype.handleDOMEvents = function(eventOperation) {
|
|
var _this = this;
|
|
var wrapper = this.wrapper;
|
|
this.events.forEach(function(event) {
|
|
eventOperation(wrapper, event.name, _this, !!event.capture);
|
|
});
|
|
};
|
|
EventRegister2.prototype.handleEvent = function(e2) {
|
|
var eventType = e2.type;
|
|
this.events.some(function(event) {
|
|
if (event.name === eventType) {
|
|
event.handler(e2);
|
|
return true;
|
|
}
|
|
return false;
|
|
});
|
|
};
|
|
return EventRegister2;
|
|
}()
|
|
);
|
|
var EventHandler = (
|
|
/** @class */
|
|
function() {
|
|
function EventHandler2(indicator, options) {
|
|
this.indicator = indicator;
|
|
this.options = options;
|
|
this.hooks = new EventEmitter(["touchStart", "touchMove", "touchEnd"]);
|
|
this.registerEvents();
|
|
}
|
|
EventHandler2.prototype.registerEvents = function() {
|
|
var _a2 = this.options, disableMouse = _a2.disableMouse, disableTouch = _a2.disableTouch;
|
|
var startEvents = [];
|
|
var moveEvents = [];
|
|
var endEvents = [];
|
|
if (!disableMouse) {
|
|
startEvents.push({
|
|
name: "mousedown",
|
|
handler: this.start.bind(this)
|
|
});
|
|
moveEvents.push({
|
|
name: "mousemove",
|
|
handler: this.move.bind(this)
|
|
});
|
|
endEvents.push({
|
|
name: "mouseup",
|
|
handler: this.end.bind(this)
|
|
});
|
|
}
|
|
if (!disableTouch) {
|
|
startEvents.push({
|
|
name: "touchstart",
|
|
handler: this.start.bind(this)
|
|
});
|
|
moveEvents.push({
|
|
name: "touchmove",
|
|
handler: this.move.bind(this)
|
|
});
|
|
endEvents.push({
|
|
name: "touchend",
|
|
handler: this.end.bind(this)
|
|
}, {
|
|
name: "touchcancel",
|
|
handler: this.end.bind(this)
|
|
});
|
|
}
|
|
this.startEventRegister = new EventRegister$1(this.indicator.indicatorEl, startEvents);
|
|
this.moveEventRegister = new EventRegister$1(window, moveEvents);
|
|
this.endEventRegister = new EventRegister$1(window, endEvents);
|
|
};
|
|
EventHandler2.prototype.BScrollIsDisabled = function() {
|
|
return !this.indicator.scroll.enabled;
|
|
};
|
|
EventHandler2.prototype.start = function(e2) {
|
|
if (this.BScrollIsDisabled()) {
|
|
return;
|
|
}
|
|
var point = e2.touches ? e2.touches[0] : e2;
|
|
maybePrevent$1(e2);
|
|
e2.stopPropagation();
|
|
this.initiated = true;
|
|
this.lastPoint = point[this.indicator.keysMap.point];
|
|
this.hooks.trigger(this.hooks.eventTypes.touchStart);
|
|
};
|
|
EventHandler2.prototype.move = function(e2) {
|
|
if (!this.initiated) {
|
|
return;
|
|
}
|
|
var point = e2.touches ? e2.touches[0] : e2;
|
|
var pointPos = point[this.indicator.keysMap.point];
|
|
maybePrevent$1(e2);
|
|
e2.stopPropagation();
|
|
var delta = pointPos - this.lastPoint;
|
|
this.lastPoint = pointPos;
|
|
this.hooks.trigger(this.hooks.eventTypes.touchMove, delta);
|
|
};
|
|
EventHandler2.prototype.end = function(e2) {
|
|
if (!this.initiated) {
|
|
return;
|
|
}
|
|
this.initiated = false;
|
|
maybePrevent$1(e2);
|
|
e2.stopPropagation();
|
|
this.hooks.trigger(this.hooks.eventTypes.touchEnd);
|
|
};
|
|
EventHandler2.prototype.destroy = function() {
|
|
this.startEventRegister.destroy();
|
|
this.moveEventRegister.destroy();
|
|
this.endEventRegister.destroy();
|
|
};
|
|
return EventHandler2;
|
|
}()
|
|
);
|
|
var Indicator = (
|
|
/** @class */
|
|
function() {
|
|
function Indicator2(scroll, options) {
|
|
this.scroll = scroll;
|
|
this.options = options;
|
|
this.hooksFn = [];
|
|
this.wrapper = options.wrapper;
|
|
this.direction = options.direction;
|
|
this.indicatorEl = this.wrapper.children[0];
|
|
this.keysMap = this.getKeysMap();
|
|
this.handleFade();
|
|
this.handleHooks();
|
|
}
|
|
Indicator2.prototype.handleFade = function() {
|
|
if (this.options.fade) {
|
|
this.wrapper.style.opacity = "0";
|
|
}
|
|
};
|
|
Indicator2.prototype.handleHooks = function() {
|
|
var _this = this;
|
|
var _a2 = this.options, fade = _a2.fade, interactive = _a2.interactive, scrollbarTrackClickable = _a2.scrollbarTrackClickable;
|
|
var scroll = this.scroll;
|
|
var scrollHooks = scroll.hooks;
|
|
var translaterHooks = scroll.scroller.translater.hooks;
|
|
var animaterHooks = scroll.scroller.animater.hooks;
|
|
this.registerHooks(scrollHooks, scrollHooks.eventTypes.refresh, this.refresh);
|
|
this.registerHooks(translaterHooks, translaterHooks.eventTypes.translate, function(pos) {
|
|
var hasScrollKey = _this.keysMap.hasScroll;
|
|
if (_this.scroll[hasScrollKey]) {
|
|
_this.updatePosition(pos);
|
|
}
|
|
});
|
|
this.registerHooks(animaterHooks, animaterHooks.eventTypes.time, this.transitionTime);
|
|
this.registerHooks(animaterHooks, animaterHooks.eventTypes.timeFunction, this.transitionTimingFunction);
|
|
if (fade) {
|
|
this.registerHooks(scroll, scroll.eventTypes.scrollEnd, function() {
|
|
_this.fade();
|
|
});
|
|
this.registerHooks(scroll, scroll.eventTypes.scrollStart, function() {
|
|
_this.fade(true);
|
|
});
|
|
if (scroll.eventTypes.mousewheelStart && scroll.eventTypes.mousewheelEnd) {
|
|
this.registerHooks(scroll, scroll.eventTypes.mousewheelStart, function() {
|
|
_this.fade(true);
|
|
});
|
|
this.registerHooks(scroll, scroll.eventTypes.mousewheelMove, function() {
|
|
_this.fade(true);
|
|
});
|
|
this.registerHooks(scroll, scroll.eventTypes.mousewheelEnd, function() {
|
|
_this.fade();
|
|
});
|
|
}
|
|
}
|
|
if (interactive) {
|
|
var _b2 = this.scroll.options, disableMouse = _b2.disableMouse, disableTouch = _b2.disableTouch;
|
|
this.eventHandler = new EventHandler(this, {
|
|
disableMouse,
|
|
disableTouch
|
|
});
|
|
var eventHandlerHooks = this.eventHandler.hooks;
|
|
this.registerHooks(eventHandlerHooks, eventHandlerHooks.eventTypes.touchStart, this.startHandler);
|
|
this.registerHooks(eventHandlerHooks, eventHandlerHooks.eventTypes.touchMove, this.moveHandler);
|
|
this.registerHooks(eventHandlerHooks, eventHandlerHooks.eventTypes.touchEnd, this.endHandler);
|
|
}
|
|
if (scrollbarTrackClickable) {
|
|
this.bindClick();
|
|
}
|
|
};
|
|
Indicator2.prototype.registerHooks = function(hooks, name, handler) {
|
|
hooks.on(name, handler, this);
|
|
this.hooksFn.push([hooks, name, handler]);
|
|
};
|
|
Indicator2.prototype.bindClick = function() {
|
|
var wrapper = this.wrapper;
|
|
this.clickEventRegister = new EventRegister$1(wrapper, [
|
|
{
|
|
name: "click",
|
|
handler: this.handleClick.bind(this)
|
|
}
|
|
]);
|
|
};
|
|
Indicator2.prototype.handleClick = function(e2) {
|
|
var newPos = this.calculateclickOffsetPos(e2);
|
|
var _a2 = this.scroll, x = _a2.x, y = _a2.y;
|
|
x = this.direction === "horizontal" ? newPos : x;
|
|
y = this.direction === "vertical" ? newPos : y;
|
|
this.scroll.scrollTo(x, y, this.options.scrollbarTrackOffsetTime);
|
|
};
|
|
Indicator2.prototype.calculateclickOffsetPos = function(e2) {
|
|
var _a2 = this.keysMap, poinKey = _a2.point, domRectKey = _a2.domRect;
|
|
var scrollbarTrackOffsetType = this.options.scrollbarTrackOffsetType;
|
|
var clickPointOffset = e2[poinKey] - this.wrapperRect[domRectKey];
|
|
var scrollToWhere = clickPointOffset < this.currentPos ? -1 : 1;
|
|
var delta = 0;
|
|
var currentPos = this.currentPos;
|
|
if (scrollbarTrackOffsetType === "step") {
|
|
delta = this.scrollInfo.baseSize * scrollToWhere;
|
|
} else {
|
|
delta = 0;
|
|
currentPos = clickPointOffset;
|
|
}
|
|
return this.newPos(currentPos, delta, this.scrollInfo);
|
|
};
|
|
Indicator2.prototype.getKeysMap = function() {
|
|
if (this.direction === "vertical") {
|
|
return {
|
|
hasScroll: "hasVerticalScroll",
|
|
size: "height",
|
|
wrapperSize: "clientHeight",
|
|
scrollerSize: "scrollerHeight",
|
|
maxScrollPos: "maxScrollY",
|
|
pos: "y",
|
|
point: "pageY",
|
|
translateProperty: "translateY",
|
|
domRect: "top"
|
|
};
|
|
}
|
|
return {
|
|
hasScroll: "hasHorizontalScroll",
|
|
size: "width",
|
|
wrapperSize: "clientWidth",
|
|
scrollerSize: "scrollerWidth",
|
|
maxScrollPos: "maxScrollX",
|
|
pos: "x",
|
|
point: "pageX",
|
|
translateProperty: "translateX",
|
|
domRect: "left"
|
|
};
|
|
};
|
|
Indicator2.prototype.fade = function(visible) {
|
|
var _a2 = this.options, fadeInTime = _a2.fadeInTime, fadeOutTime = _a2.fadeOutTime;
|
|
var time2 = visible ? fadeInTime : fadeOutTime;
|
|
var wrapper = this.wrapper;
|
|
wrapper.style[style.transitionDuration] = time2 + "ms";
|
|
wrapper.style.opacity = visible ? "1" : "0";
|
|
};
|
|
Indicator2.prototype.refresh = function() {
|
|
var hasScrollKey = this.keysMap.hasScroll;
|
|
var scroll = this.scroll;
|
|
var x = scroll.x, y = scroll.y;
|
|
this.wrapperRect = this.wrapper.getBoundingClientRect();
|
|
if (this.canScroll(scroll[hasScrollKey])) {
|
|
var _a2 = this.keysMap, wrapperSizeKey = _a2.wrapperSize, scrollerSizeKey = _a2.scrollerSize, maxScrollPosKey = _a2.maxScrollPos;
|
|
this.scrollInfo = this.refreshScrollInfo(this.wrapper[wrapperSizeKey], scroll[scrollerSizeKey], scroll[maxScrollPosKey], this.indicatorEl[wrapperSizeKey]);
|
|
this.updatePosition({
|
|
x,
|
|
y
|
|
});
|
|
}
|
|
};
|
|
Indicator2.prototype.transitionTime = function(time2) {
|
|
if (time2 === void 0) {
|
|
time2 = 0;
|
|
}
|
|
this.indicatorEl.style[style.transitionDuration] = time2 + "ms";
|
|
};
|
|
Indicator2.prototype.transitionTimingFunction = function(easing) {
|
|
this.indicatorEl.style[style.transitionTimingFunction] = easing;
|
|
};
|
|
Indicator2.prototype.canScroll = function(hasScroll) {
|
|
this.wrapper.style.display = hasScroll ? "block" : "none";
|
|
return hasScroll;
|
|
};
|
|
Indicator2.prototype.refreshScrollInfo = function(wrapperSize, scrollerSize, maxScrollPos, indicatorElSize) {
|
|
var baseSize = Math.max(Math.round(wrapperSize * wrapperSize / (scrollerSize || wrapperSize || 1)), this.options.minSize);
|
|
if (this.options.isCustom) {
|
|
baseSize = indicatorElSize;
|
|
}
|
|
var maxIndicatorScrollPos = wrapperSize - baseSize;
|
|
var sizeRatio = maxIndicatorScrollPos / maxScrollPos;
|
|
return {
|
|
baseSize,
|
|
maxScrollPos: maxIndicatorScrollPos,
|
|
minScrollPos: 0,
|
|
sizeRatio
|
|
};
|
|
};
|
|
Indicator2.prototype.updatePosition = function(point) {
|
|
var _a2 = this.caculatePosAndSize(point, this.scrollInfo), pos = _a2.pos, size = _a2.size;
|
|
this.refreshStyle(size, pos);
|
|
this.currentPos = pos;
|
|
};
|
|
Indicator2.prototype.caculatePosAndSize = function(point, scrollInfo) {
|
|
var posKey = this.keysMap.pos;
|
|
var sizeRatio = scrollInfo.sizeRatio, baseSize = scrollInfo.baseSize, maxScrollPos = scrollInfo.maxScrollPos, minScrollPos = scrollInfo.minScrollPos;
|
|
var minSize = this.options.minSize;
|
|
var pos = Math.round(sizeRatio * point[posKey]);
|
|
var size;
|
|
if (pos < minScrollPos) {
|
|
size = Math.max(baseSize + pos * 3, minSize);
|
|
pos = minScrollPos;
|
|
} else if (pos > maxScrollPos) {
|
|
size = Math.max(baseSize - (pos - maxScrollPos) * 3, minSize);
|
|
pos = maxScrollPos + baseSize - size;
|
|
} else {
|
|
size = baseSize;
|
|
}
|
|
return {
|
|
pos,
|
|
size
|
|
};
|
|
};
|
|
Indicator2.prototype.refreshStyle = function(size, pos) {
|
|
var _a2 = this.keysMap, translatePropertyKey = _a2.translateProperty, sizeKey = _a2.size;
|
|
var translateZ = this.scroll.options.translateZ;
|
|
this.indicatorEl.style[sizeKey] = size + "px";
|
|
this.indicatorEl.style[style.transform] = translatePropertyKey + "(" + pos + "px)" + translateZ;
|
|
};
|
|
Indicator2.prototype.startHandler = function() {
|
|
this.moved = false;
|
|
this.startTime = getNow();
|
|
this.transitionTime();
|
|
this.scroll.scroller.hooks.trigger(this.scroll.scroller.hooks.eventTypes.beforeScrollStart);
|
|
};
|
|
Indicator2.prototype.moveHandler = function(delta) {
|
|
if (!this.moved && !this.indicatorNotMoved(delta)) {
|
|
this.moved = true;
|
|
this.scroll.scroller.hooks.trigger(this.scroll.scroller.hooks.eventTypes.scrollStart);
|
|
}
|
|
if (this.moved) {
|
|
var newPos = this.newPos(this.currentPos, delta, this.scrollInfo);
|
|
this.syncBScroll(newPos);
|
|
}
|
|
};
|
|
Indicator2.prototype.endHandler = function() {
|
|
if (this.moved) {
|
|
var _a2 = this.scroll, x = _a2.x, y = _a2.y;
|
|
this.scroll.scroller.hooks.trigger(this.scroll.scroller.hooks.eventTypes.scrollEnd, {
|
|
x,
|
|
y
|
|
});
|
|
}
|
|
};
|
|
Indicator2.prototype.indicatorNotMoved = function(delta) {
|
|
var currentPos = this.currentPos;
|
|
var _a2 = this.scrollInfo, maxScrollPos = _a2.maxScrollPos, minScrollPos = _a2.minScrollPos;
|
|
var notMoved = currentPos === minScrollPos && delta <= 0 || currentPos === maxScrollPos && delta >= 0;
|
|
return notMoved;
|
|
};
|
|
Indicator2.prototype.syncBScroll = function(newPos) {
|
|
var timestamp = getNow();
|
|
var _a2 = this.scroll, x = _a2.x, y = _a2.y, options = _a2.options, scroller = _a2.scroller, maxScrollY = _a2.maxScrollY, minScrollY = _a2.minScrollY, maxScrollX = _a2.maxScrollX, minScrollX = _a2.minScrollX;
|
|
var probeType = options.probeType, momentumLimitTime = options.momentumLimitTime;
|
|
var position2 = { x, y };
|
|
if (this.direction === "vertical") {
|
|
position2.y = between(newPos, maxScrollY, minScrollY);
|
|
} else {
|
|
position2.x = between(newPos, maxScrollX, minScrollX);
|
|
}
|
|
scroller.translater.translate(position2);
|
|
if (timestamp - this.startTime > momentumLimitTime) {
|
|
this.startTime = timestamp;
|
|
if (probeType === 1) {
|
|
scroller.hooks.trigger(scroller.hooks.eventTypes.scroll, position2);
|
|
}
|
|
}
|
|
if (probeType > 1) {
|
|
scroller.hooks.trigger(scroller.hooks.eventTypes.scroll, position2);
|
|
}
|
|
};
|
|
Indicator2.prototype.newPos = function(currentPos, delta, scrollInfo) {
|
|
var maxScrollPos = scrollInfo.maxScrollPos, sizeRatio = scrollInfo.sizeRatio, minScrollPos = scrollInfo.minScrollPos;
|
|
var newPos = currentPos + delta;
|
|
newPos = between(newPos, minScrollPos, maxScrollPos);
|
|
return Math.round(newPos / sizeRatio);
|
|
};
|
|
Indicator2.prototype.destroy = function() {
|
|
var _a2 = this.options, interactive = _a2.interactive, scrollbarTrackClickable = _a2.scrollbarTrackClickable, isCustom = _a2.isCustom;
|
|
if (interactive) {
|
|
this.eventHandler.destroy();
|
|
}
|
|
if (scrollbarTrackClickable) {
|
|
this.clickEventRegister.destroy();
|
|
}
|
|
if (!isCustom) {
|
|
this.wrapper.parentNode.removeChild(this.wrapper);
|
|
}
|
|
this.hooksFn.forEach(function(item) {
|
|
var hooks = item[0];
|
|
var hooksName = item[1];
|
|
var handlerFn = item[2];
|
|
hooks.off(hooksName, handlerFn);
|
|
});
|
|
this.hooksFn.length = 0;
|
|
};
|
|
return Indicator2;
|
|
}()
|
|
);
|
|
var ScrollBar = (
|
|
/** @class */
|
|
function() {
|
|
function ScrollBar2(scroll) {
|
|
this.scroll = scroll;
|
|
this.handleOptions();
|
|
this.createIndicators();
|
|
this.handleHooks();
|
|
}
|
|
ScrollBar2.prototype.handleHooks = function() {
|
|
var _this = this;
|
|
var scroll = this.scroll;
|
|
scroll.hooks.on(scroll.hooks.eventTypes.destroy, function() {
|
|
for (var _i = 0, _a2 = _this.indicators; _i < _a2.length; _i++) {
|
|
var indicator = _a2[_i];
|
|
indicator.destroy();
|
|
}
|
|
});
|
|
};
|
|
ScrollBar2.prototype.handleOptions = function() {
|
|
var userOptions = this.scroll.options.scrollbar === true ? {} : this.scroll.options.scrollbar;
|
|
var defaultOptions = {
|
|
fade: true,
|
|
fadeInTime: 250,
|
|
fadeOutTime: 500,
|
|
interactive: false,
|
|
customElements: [],
|
|
minSize: 8,
|
|
scrollbarTrackClickable: false,
|
|
scrollbarTrackOffsetType: "step",
|
|
scrollbarTrackOffsetTime: 300
|
|
};
|
|
this.options = extend$2(defaultOptions, userOptions);
|
|
};
|
|
ScrollBar2.prototype.createIndicators = function() {
|
|
var indicatorOptions;
|
|
var scroll = this.scroll;
|
|
var indicators = [];
|
|
var scrollDirectionConfigKeys = ["scrollX", "scrollY"];
|
|
var indicatorDirections = [
|
|
"horizontal",
|
|
"vertical"
|
|
];
|
|
var customScrollbarEls = this.options.customElements;
|
|
for (var i = 0; i < scrollDirectionConfigKeys.length; i++) {
|
|
var key = scrollDirectionConfigKeys[i];
|
|
if (scroll.options[key]) {
|
|
var customElement = customScrollbarEls.shift();
|
|
var direction2 = indicatorDirections[i];
|
|
var isCustom = false;
|
|
var scrollbarWrapper = customElement ? customElement : this.createScrollbarElement(direction2);
|
|
if (scrollbarWrapper !== customElement) {
|
|
scroll.wrapper.appendChild(scrollbarWrapper);
|
|
} else {
|
|
isCustom = true;
|
|
}
|
|
indicatorOptions = __assign(__assign({ wrapper: scrollbarWrapper, direction: direction2 }, this.options), { isCustom });
|
|
indicators.push(new Indicator(scroll, indicatorOptions));
|
|
}
|
|
}
|
|
this.indicators = indicators;
|
|
};
|
|
ScrollBar2.prototype.createScrollbarElement = function(direction2, scrollbarTrackClickable) {
|
|
if (scrollbarTrackClickable === void 0) {
|
|
scrollbarTrackClickable = this.options.scrollbarTrackClickable;
|
|
}
|
|
var scrollbarWrapperEl = document.createElement("div");
|
|
var scrollbarIndicatorEl = document.createElement("div");
|
|
scrollbarWrapperEl.style.cssText = "position:absolute;z-index:9999;overflow:hidden;";
|
|
scrollbarIndicatorEl.style.cssText = "box-sizing:border-box;position:absolute;background:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.9);border-radius:3px;";
|
|
scrollbarIndicatorEl.className = "bscroll-indicator";
|
|
if (direction2 === "horizontal") {
|
|
scrollbarWrapperEl.style.cssText += "height:7px;left:2px;right:2px;bottom:0;";
|
|
scrollbarIndicatorEl.style.height = "100%";
|
|
scrollbarWrapperEl.className = "bscroll-horizontal-scrollbar";
|
|
} else {
|
|
scrollbarWrapperEl.style.cssText += "width:7px;bottom:2px;top:2px;right:1px;";
|
|
scrollbarIndicatorEl.style.width = "100%";
|
|
scrollbarWrapperEl.className = "bscroll-vertical-scrollbar";
|
|
}
|
|
if (!scrollbarTrackClickable) {
|
|
scrollbarWrapperEl.style.cssText += "pointer-events:none;";
|
|
}
|
|
scrollbarWrapperEl.appendChild(scrollbarIndicatorEl);
|
|
return scrollbarWrapperEl;
|
|
};
|
|
ScrollBar2.pluginName = "scrollbar";
|
|
return ScrollBar2;
|
|
}()
|
|
);
|
|
/*!
|
|
* better-scroll / observe-dom
|
|
* (c) 2016-2023 ustbhuangyi
|
|
* Released under the MIT License.
|
|
*/
|
|
var inBrowser$2 = typeof window !== "undefined";
|
|
var ua$2 = inBrowser$2 && navigator.userAgent.toLowerCase();
|
|
ua$2 && ua$2.indexOf("android") > 0;
|
|
(function() {
|
|
if (typeof ua$2 === "string") {
|
|
var regex = /os (\d\d?_\d(_\d)?)/;
|
|
var matches = regex.exec(ua$2);
|
|
if (!matches)
|
|
return false;
|
|
var parts = matches[1].split("_").map(function(item) {
|
|
return parseInt(item, 10);
|
|
});
|
|
return !!(parts[0] === 13 && parts[1] >= 4);
|
|
}
|
|
return false;
|
|
})();
|
|
var supportsPassive$2 = false;
|
|
if (inBrowser$2) {
|
|
var EventName$2 = "test-passive";
|
|
try {
|
|
var opts$2 = {};
|
|
Object.defineProperty(opts$2, "passive", {
|
|
get: function() {
|
|
supportsPassive$2 = true;
|
|
}
|
|
});
|
|
window.addEventListener(EventName$2, function() {
|
|
}, opts$2);
|
|
} catch (e2) {
|
|
}
|
|
}
|
|
var elementStyle$2 = inBrowser$2 && document.createElement("div").style;
|
|
var vendor$2 = function() {
|
|
if (!inBrowser$2) {
|
|
return false;
|
|
}
|
|
var transformNames = [
|
|
{
|
|
key: "standard",
|
|
value: "transform"
|
|
},
|
|
{
|
|
key: "webkit",
|
|
value: "webkitTransform"
|
|
},
|
|
{
|
|
key: "Moz",
|
|
value: "MozTransform"
|
|
},
|
|
{
|
|
key: "O",
|
|
value: "OTransform"
|
|
},
|
|
{
|
|
key: "ms",
|
|
value: "msTransform"
|
|
}
|
|
];
|
|
for (var _i = 0, transformNames_1 = transformNames; _i < transformNames_1.length; _i++) {
|
|
var obj = transformNames_1[_i];
|
|
if (elementStyle$2[obj.value] !== void 0) {
|
|
return obj.key;
|
|
}
|
|
}
|
|
return false;
|
|
}();
|
|
function prefixStyle$2(style2) {
|
|
if (vendor$2 === false) {
|
|
return style2;
|
|
}
|
|
if (vendor$2 === "standard") {
|
|
if (style2 === "transitionEnd") {
|
|
return "transitionend";
|
|
}
|
|
return style2;
|
|
}
|
|
return vendor$2 + style2.charAt(0).toUpperCase() + style2.substr(1);
|
|
}
|
|
vendor$2 && vendor$2 !== "standard" ? "-" + vendor$2.toLowerCase() + "-" : "";
|
|
prefixStyle$2("transform");
|
|
prefixStyle$2("transition");
|
|
inBrowser$2 && prefixStyle$2("perspective") in elementStyle$2;
|
|
({
|
|
transitionTimingFunction: prefixStyle$2("transitionTimingFunction"),
|
|
transitionDuration: prefixStyle$2("transitionDuration"),
|
|
transitionDelay: prefixStyle$2("transitionDelay"),
|
|
transformOrigin: prefixStyle$2("transformOrigin"),
|
|
transitionEnd: prefixStyle$2("transitionEnd"),
|
|
transitionProperty: prefixStyle$2("transitionProperty")
|
|
});
|
|
function getRect(el) {
|
|
if (el instanceof window.SVGElement) {
|
|
var rect = el.getBoundingClientRect();
|
|
return {
|
|
top: rect.top,
|
|
left: rect.left,
|
|
width: rect.width,
|
|
height: rect.height
|
|
};
|
|
} else {
|
|
return {
|
|
top: el.offsetTop,
|
|
left: el.offsetLeft,
|
|
width: el.offsetWidth,
|
|
height: el.offsetHeight
|
|
};
|
|
}
|
|
}
|
|
var ObserveDOM = (
|
|
/** @class */
|
|
function() {
|
|
function ObserveDOM2(scroll) {
|
|
this.scroll = scroll;
|
|
this.stopObserver = false;
|
|
this.init();
|
|
}
|
|
ObserveDOM2.prototype.init = function() {
|
|
this.handleMutationObserver();
|
|
this.handleHooks();
|
|
};
|
|
ObserveDOM2.prototype.handleMutationObserver = function() {
|
|
var _this = this;
|
|
if (typeof MutationObserver !== "undefined") {
|
|
var timer_1 = 0;
|
|
this.observer = new MutationObserver(function(mutations) {
|
|
_this.mutationObserverHandler(mutations, timer_1);
|
|
});
|
|
this.startObserve(this.observer);
|
|
} else {
|
|
this.checkDOMUpdate();
|
|
}
|
|
};
|
|
ObserveDOM2.prototype.handleHooks = function() {
|
|
var _this = this;
|
|
this.hooksFn = [];
|
|
this.registerHooks(this.scroll.hooks, this.scroll.hooks.eventTypes.contentChanged, function() {
|
|
_this.stopObserve();
|
|
_this.handleMutationObserver();
|
|
});
|
|
this.registerHooks(this.scroll.hooks, this.scroll.hooks.eventTypes.enable, function() {
|
|
if (_this.stopObserver) {
|
|
_this.handleMutationObserver();
|
|
}
|
|
});
|
|
this.registerHooks(this.scroll.hooks, this.scroll.hooks.eventTypes.disable, function() {
|
|
_this.stopObserve();
|
|
});
|
|
this.registerHooks(this.scroll.hooks, this.scroll.hooks.eventTypes.destroy, function() {
|
|
_this.destroy();
|
|
});
|
|
};
|
|
ObserveDOM2.prototype.mutationObserverHandler = function(mutations, timer) {
|
|
var _this = this;
|
|
if (this.shouldNotRefresh()) {
|
|
return;
|
|
}
|
|
var immediateRefresh = false;
|
|
var deferredRefresh = false;
|
|
for (var i = 0; i < mutations.length; i++) {
|
|
var mutation = mutations[i];
|
|
if (mutation.type !== "attributes") {
|
|
immediateRefresh = true;
|
|
break;
|
|
} else {
|
|
if (mutation.target !== this.scroll.scroller.content) {
|
|
deferredRefresh = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (immediateRefresh) {
|
|
this.scroll.refresh();
|
|
} else if (deferredRefresh) {
|
|
clearTimeout(timer);
|
|
timer = window.setTimeout(function() {
|
|
if (!_this.shouldNotRefresh()) {
|
|
_this.scroll.refresh();
|
|
}
|
|
}, 60);
|
|
}
|
|
};
|
|
ObserveDOM2.prototype.startObserve = function(observer) {
|
|
var config = {
|
|
attributes: true,
|
|
childList: true,
|
|
subtree: true
|
|
};
|
|
observer.observe(this.scroll.scroller.content, config);
|
|
};
|
|
ObserveDOM2.prototype.shouldNotRefresh = function() {
|
|
var scroller = this.scroll.scroller;
|
|
var scrollBehaviorX = scroller.scrollBehaviorX, scrollBehaviorY = scroller.scrollBehaviorY;
|
|
var outsideBoundaries = scrollBehaviorX.currentPos > scrollBehaviorX.minScrollPos || scrollBehaviorX.currentPos < scrollBehaviorX.maxScrollPos || scrollBehaviorY.currentPos > scrollBehaviorY.minScrollPos || scrollBehaviorY.currentPos < scrollBehaviorY.maxScrollPos;
|
|
return scroller.animater.pending || outsideBoundaries;
|
|
};
|
|
ObserveDOM2.prototype.checkDOMUpdate = function() {
|
|
var _this = this;
|
|
var content = this.scroll.scroller.content;
|
|
var contentRect = getRect(content);
|
|
var oldWidth = contentRect.width;
|
|
var oldHeight = contentRect.height;
|
|
var check = function() {
|
|
if (_this.stopObserver) {
|
|
return;
|
|
}
|
|
contentRect = getRect(content);
|
|
var newWidth = contentRect.width;
|
|
var newHeight = contentRect.height;
|
|
if (oldWidth !== newWidth || oldHeight !== newHeight) {
|
|
_this.scroll.refresh();
|
|
}
|
|
oldWidth = newWidth;
|
|
oldHeight = newHeight;
|
|
next();
|
|
};
|
|
var next = function() {
|
|
setTimeout(function() {
|
|
check();
|
|
}, 1e3);
|
|
};
|
|
next();
|
|
};
|
|
ObserveDOM2.prototype.registerHooks = function(hooks, name, handler) {
|
|
hooks.on(name, handler, this);
|
|
this.hooksFn.push([hooks, name, handler]);
|
|
};
|
|
ObserveDOM2.prototype.stopObserve = function() {
|
|
this.stopObserver = true;
|
|
if (this.observer) {
|
|
this.observer.disconnect();
|
|
}
|
|
};
|
|
ObserveDOM2.prototype.destroy = function() {
|
|
this.stopObserve();
|
|
this.hooksFn.forEach(function(item) {
|
|
var hooks = item[0];
|
|
var hooksName = item[1];
|
|
var handlerFn = item[2];
|
|
hooks.off(hooksName, handlerFn);
|
|
});
|
|
this.hooksFn.length = 0;
|
|
};
|
|
ObserveDOM2.pluginName = "observeDOM";
|
|
return ObserveDOM2;
|
|
}()
|
|
);
|
|
/*!
|
|
* better-scroll / mouse-wheel
|
|
* (c) 2016-2023 ustbhuangyi
|
|
* Released under the MIT License.
|
|
*/
|
|
function warn(msg) {
|
|
console.error("[BScroll warn]: " + msg);
|
|
}
|
|
var inBrowser$1 = typeof window !== "undefined";
|
|
var ua$1 = inBrowser$1 && navigator.userAgent.toLowerCase();
|
|
ua$1 && ua$1.indexOf("android") > 0;
|
|
(function() {
|
|
if (typeof ua$1 === "string") {
|
|
var regex = /os (\d\d?_\d(_\d)?)/;
|
|
var matches = regex.exec(ua$1);
|
|
if (!matches)
|
|
return false;
|
|
var parts = matches[1].split("_").map(function(item) {
|
|
return parseInt(item, 10);
|
|
});
|
|
return !!(parts[0] === 13 && parts[1] >= 4);
|
|
}
|
|
return false;
|
|
})();
|
|
var supportsPassive$1 = false;
|
|
if (inBrowser$1) {
|
|
var EventName$1 = "test-passive";
|
|
try {
|
|
var opts$1 = {};
|
|
Object.defineProperty(opts$1, "passive", {
|
|
get: function() {
|
|
supportsPassive$1 = true;
|
|
}
|
|
});
|
|
window.addEventListener(EventName$1, function() {
|
|
}, opts$1);
|
|
} catch (e2) {
|
|
}
|
|
}
|
|
var extend$1 = function(target, source) {
|
|
for (var key in source) {
|
|
target[key] = source[key];
|
|
}
|
|
return target;
|
|
};
|
|
var elementStyle$1 = inBrowser$1 && document.createElement("div").style;
|
|
var vendor$1 = function() {
|
|
if (!inBrowser$1) {
|
|
return false;
|
|
}
|
|
var transformNames = [
|
|
{
|
|
key: "standard",
|
|
value: "transform"
|
|
},
|
|
{
|
|
key: "webkit",
|
|
value: "webkitTransform"
|
|
},
|
|
{
|
|
key: "Moz",
|
|
value: "MozTransform"
|
|
},
|
|
{
|
|
key: "O",
|
|
value: "OTransform"
|
|
},
|
|
{
|
|
key: "ms",
|
|
value: "msTransform"
|
|
}
|
|
];
|
|
for (var _i = 0, transformNames_1 = transformNames; _i < transformNames_1.length; _i++) {
|
|
var obj = transformNames_1[_i];
|
|
if (elementStyle$1[obj.value] !== void 0) {
|
|
return obj.key;
|
|
}
|
|
}
|
|
return false;
|
|
}();
|
|
function prefixStyle$1(style2) {
|
|
if (vendor$1 === false) {
|
|
return style2;
|
|
}
|
|
if (vendor$1 === "standard") {
|
|
if (style2 === "transitionEnd") {
|
|
return "transitionend";
|
|
}
|
|
return style2;
|
|
}
|
|
return vendor$1 + style2.charAt(0).toUpperCase() + style2.substr(1);
|
|
}
|
|
function addEvent(el, type, fn, capture) {
|
|
var useCapture = supportsPassive$1 ? {
|
|
passive: false,
|
|
capture: !!capture
|
|
} : !!capture;
|
|
el.addEventListener(type, fn, useCapture);
|
|
}
|
|
function removeEvent(el, type, fn, capture) {
|
|
el.removeEventListener(type, fn, {
|
|
capture: !!capture
|
|
});
|
|
}
|
|
function maybePrevent(e2) {
|
|
if (e2.cancelable) {
|
|
e2.preventDefault();
|
|
}
|
|
}
|
|
vendor$1 && vendor$1 !== "standard" ? "-" + vendor$1.toLowerCase() + "-" : "";
|
|
prefixStyle$1("transform");
|
|
prefixStyle$1("transition");
|
|
inBrowser$1 && prefixStyle$1("perspective") in elementStyle$1;
|
|
({
|
|
transitionTimingFunction: prefixStyle$1("transitionTimingFunction"),
|
|
transitionDuration: prefixStyle$1("transitionDuration"),
|
|
transitionDelay: prefixStyle$1("transitionDelay"),
|
|
transformOrigin: prefixStyle$1("transformOrigin"),
|
|
transitionEnd: prefixStyle$1("transitionEnd"),
|
|
transitionProperty: prefixStyle$1("transitionProperty")
|
|
});
|
|
function preventDefaultExceptionFn(el, exceptions) {
|
|
for (var i in exceptions) {
|
|
if (exceptions[i].test(el[i])) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
var EventRegister = (
|
|
/** @class */
|
|
function() {
|
|
function EventRegister2(wrapper, events) {
|
|
this.wrapper = wrapper;
|
|
this.events = events;
|
|
this.addDOMEvents();
|
|
}
|
|
EventRegister2.prototype.destroy = function() {
|
|
this.removeDOMEvents();
|
|
this.events = [];
|
|
};
|
|
EventRegister2.prototype.addDOMEvents = function() {
|
|
this.handleDOMEvents(addEvent);
|
|
};
|
|
EventRegister2.prototype.removeDOMEvents = function() {
|
|
this.handleDOMEvents(removeEvent);
|
|
};
|
|
EventRegister2.prototype.handleDOMEvents = function(eventOperation) {
|
|
var _this = this;
|
|
var wrapper = this.wrapper;
|
|
this.events.forEach(function(event) {
|
|
eventOperation(wrapper, event.name, _this, !!event.capture);
|
|
});
|
|
};
|
|
EventRegister2.prototype.handleEvent = function(e2) {
|
|
var eventType = e2.type;
|
|
this.events.some(function(event) {
|
|
if (event.name === eventType) {
|
|
event.handler(e2);
|
|
return true;
|
|
}
|
|
return false;
|
|
});
|
|
};
|
|
return EventRegister2;
|
|
}()
|
|
);
|
|
var MouseWheel = (
|
|
/** @class */
|
|
function() {
|
|
function MouseWheel2(scroll) {
|
|
this.scroll = scroll;
|
|
this.wheelEndTimer = 0;
|
|
this.wheelMoveTimer = 0;
|
|
this.wheelStart = false;
|
|
this.init();
|
|
}
|
|
MouseWheel2.prototype.init = function() {
|
|
this.handleBScroll();
|
|
this.handleOptions();
|
|
this.handleHooks();
|
|
this.registerEvent();
|
|
};
|
|
MouseWheel2.prototype.handleBScroll = function() {
|
|
this.scroll.registerType([
|
|
"alterOptions",
|
|
"mousewheelStart",
|
|
"mousewheelMove",
|
|
"mousewheelEnd"
|
|
]);
|
|
};
|
|
MouseWheel2.prototype.handleOptions = function() {
|
|
var userOptions = this.scroll.options.mouseWheel === true ? {} : this.scroll.options.mouseWheel;
|
|
var defaultOptions = {
|
|
speed: 20,
|
|
invert: false,
|
|
easeTime: 300,
|
|
discreteTime: 400,
|
|
throttleTime: 0,
|
|
dampingFactor: 0.1
|
|
};
|
|
this.mouseWheelOpt = extend$1(defaultOptions, userOptions);
|
|
};
|
|
MouseWheel2.prototype.handleHooks = function() {
|
|
this.hooksFn = [];
|
|
this.registerHooks(this.scroll.hooks, "destroy", this.destroy);
|
|
};
|
|
MouseWheel2.prototype.registerEvent = function() {
|
|
this.eventRegister = new EventRegister(this.scroll.scroller.wrapper, [
|
|
{
|
|
name: "wheel",
|
|
handler: this.wheelHandler.bind(this)
|
|
},
|
|
{
|
|
name: "mousewheel",
|
|
handler: this.wheelHandler.bind(this)
|
|
},
|
|
{
|
|
name: "DOMMouseScroll",
|
|
handler: this.wheelHandler.bind(this)
|
|
}
|
|
]);
|
|
};
|
|
MouseWheel2.prototype.registerHooks = function(hooks, name, handler) {
|
|
hooks.on(name, handler, this);
|
|
this.hooksFn.push([hooks, name, handler]);
|
|
};
|
|
MouseWheel2.prototype.wheelHandler = function(e2) {
|
|
if (!this.scroll.enabled) {
|
|
return;
|
|
}
|
|
this.beforeHandler(e2);
|
|
if (!this.wheelStart) {
|
|
this.wheelStartHandler(e2);
|
|
this.wheelStart = true;
|
|
}
|
|
var delta = this.getWheelDelta(e2);
|
|
this.wheelMoveHandler(delta);
|
|
this.wheelEndDetector(delta);
|
|
};
|
|
MouseWheel2.prototype.wheelStartHandler = function(e2) {
|
|
this.cleanCache();
|
|
var _a2 = this.scroll.scroller, scrollBehaviorX = _a2.scrollBehaviorX, scrollBehaviorY = _a2.scrollBehaviorY;
|
|
scrollBehaviorX.setMovingDirection(
|
|
0
|
|
/* Default */
|
|
);
|
|
scrollBehaviorY.setMovingDirection(
|
|
0
|
|
/* Default */
|
|
);
|
|
scrollBehaviorX.setDirection(
|
|
0
|
|
/* Default */
|
|
);
|
|
scrollBehaviorY.setDirection(
|
|
0
|
|
/* Default */
|
|
);
|
|
this.scroll.trigger(this.scroll.eventTypes.alterOptions, this.mouseWheelOpt);
|
|
this.scroll.trigger(this.scroll.eventTypes.mousewheelStart);
|
|
};
|
|
MouseWheel2.prototype.cleanCache = function() {
|
|
this.deltaCache = [];
|
|
};
|
|
MouseWheel2.prototype.wheelMoveHandler = function(delta) {
|
|
var _this = this;
|
|
var _a2 = this.mouseWheelOpt, throttleTime = _a2.throttleTime, dampingFactor = _a2.dampingFactor;
|
|
if (throttleTime && this.wheelMoveTimer) {
|
|
this.deltaCache.push(delta);
|
|
} else {
|
|
var cachedDelta = this.deltaCache.reduce(function(prev, current) {
|
|
return {
|
|
x: prev.x + current.x,
|
|
y: prev.y + current.y
|
|
};
|
|
}, { x: 0, y: 0 });
|
|
this.cleanCache();
|
|
var _b2 = this.scroll.scroller, scrollBehaviorX = _b2.scrollBehaviorX, scrollBehaviorY = _b2.scrollBehaviorY;
|
|
scrollBehaviorX.setMovingDirection(-delta.directionX);
|
|
scrollBehaviorY.setMovingDirection(-delta.directionY);
|
|
scrollBehaviorX.setDirection(delta.x);
|
|
scrollBehaviorY.setDirection(delta.y);
|
|
var newX = scrollBehaviorX.performDampingAlgorithm(Math.round(delta.x) + cachedDelta.x, dampingFactor);
|
|
var newY = scrollBehaviorY.performDampingAlgorithm(Math.round(delta.y) + cachedDelta.x, dampingFactor);
|
|
if (!this.scroll.trigger(this.scroll.eventTypes.mousewheelMove, {
|
|
x: newX,
|
|
y: newY
|
|
})) {
|
|
var easeTime = this.getEaseTime();
|
|
if (newX !== this.scroll.x || newY !== this.scroll.y) {
|
|
this.scroll.scrollTo(newX, newY, easeTime);
|
|
}
|
|
}
|
|
if (throttleTime) {
|
|
this.wheelMoveTimer = window.setTimeout(function() {
|
|
_this.wheelMoveTimer = 0;
|
|
}, throttleTime);
|
|
}
|
|
}
|
|
};
|
|
MouseWheel2.prototype.wheelEndDetector = function(delta) {
|
|
var _this = this;
|
|
window.clearTimeout(this.wheelEndTimer);
|
|
this.wheelEndTimer = window.setTimeout(function() {
|
|
_this.wheelStart = false;
|
|
window.clearTimeout(_this.wheelMoveTimer);
|
|
_this.wheelMoveTimer = 0;
|
|
_this.scroll.trigger(_this.scroll.eventTypes.mousewheelEnd, delta);
|
|
}, this.mouseWheelOpt.discreteTime);
|
|
};
|
|
MouseWheel2.prototype.getWheelDelta = function(e2) {
|
|
var _a2 = this.mouseWheelOpt, speed = _a2.speed, invert = _a2.invert;
|
|
var wheelDeltaX = 0;
|
|
var wheelDeltaY = 0;
|
|
var direction2 = invert ? -1 : 1;
|
|
switch (true) {
|
|
case "deltaX" in e2:
|
|
if (e2.deltaMode === 1) {
|
|
wheelDeltaX = -e2.deltaX * speed;
|
|
wheelDeltaY = -e2.deltaY * speed;
|
|
} else {
|
|
wheelDeltaX = -e2.deltaX;
|
|
wheelDeltaY = -e2.deltaY;
|
|
}
|
|
break;
|
|
case "wheelDeltaX" in e2:
|
|
wheelDeltaX = e2.wheelDeltaX / 120 * speed;
|
|
wheelDeltaY = e2.wheelDeltaY / 120 * speed;
|
|
break;
|
|
case "wheelDelta" in e2:
|
|
wheelDeltaX = wheelDeltaY = e2.wheelDelta / 120 * speed;
|
|
break;
|
|
case "detail" in e2:
|
|
wheelDeltaX = wheelDeltaY = -e2.detail / 3 * speed;
|
|
break;
|
|
}
|
|
wheelDeltaX *= direction2;
|
|
wheelDeltaY *= direction2;
|
|
if (!this.scroll.hasVerticalScroll) {
|
|
if (Math.abs(wheelDeltaY) > Math.abs(wheelDeltaX)) {
|
|
wheelDeltaX = wheelDeltaY;
|
|
}
|
|
wheelDeltaY = 0;
|
|
}
|
|
if (!this.scroll.hasHorizontalScroll) {
|
|
wheelDeltaX = 0;
|
|
}
|
|
var directionX = wheelDeltaX > 0 ? -1 : wheelDeltaX < 0 ? 1 : 0;
|
|
var directionY = wheelDeltaY > 0 ? -1 : wheelDeltaY < 0 ? 1 : 0;
|
|
return {
|
|
x: wheelDeltaX,
|
|
y: wheelDeltaY,
|
|
directionX,
|
|
directionY
|
|
};
|
|
};
|
|
MouseWheel2.prototype.beforeHandler = function(e2) {
|
|
var _a2 = this.scroll.options, preventDefault = _a2.preventDefault, stopPropagation = _a2.stopPropagation, preventDefaultException = _a2.preventDefaultException;
|
|
if (preventDefault && !preventDefaultExceptionFn(e2.target, preventDefaultException)) {
|
|
maybePrevent(e2);
|
|
}
|
|
if (stopPropagation) {
|
|
e2.stopPropagation();
|
|
}
|
|
};
|
|
MouseWheel2.prototype.getEaseTime = function() {
|
|
var SAFE_EASETIME = 100;
|
|
var easeTime = this.mouseWheelOpt.easeTime;
|
|
if (easeTime < SAFE_EASETIME) {
|
|
warn("easeTime should be greater than 100.If mouseWheel easeTime is too small,scrollEnd will be triggered many times.");
|
|
}
|
|
return Math.max(easeTime, SAFE_EASETIME);
|
|
};
|
|
MouseWheel2.prototype.destroy = function() {
|
|
this.eventRegister.destroy();
|
|
window.clearTimeout(this.wheelEndTimer);
|
|
window.clearTimeout(this.wheelMoveTimer);
|
|
this.hooksFn.forEach(function(item) {
|
|
var hooks = item[0];
|
|
var hooksName = item[1];
|
|
var handlerFn = item[2];
|
|
hooks.off(hooksName, handlerFn);
|
|
});
|
|
};
|
|
MouseWheel2.pluginName = "mouseWheel";
|
|
MouseWheel2.applyOrder = "pre";
|
|
return MouseWheel2;
|
|
}()
|
|
);
|
|
/*!
|
|
* better-scroll / pull-up
|
|
* (c) 2016-2023 ustbhuangyi
|
|
* Released under the MIT License.
|
|
*/
|
|
var inBrowser = typeof window !== "undefined";
|
|
var ua = inBrowser && navigator.userAgent.toLowerCase();
|
|
ua && ua.indexOf("android") > 0;
|
|
(function() {
|
|
if (typeof ua === "string") {
|
|
var regex = /os (\d\d?_\d(_\d)?)/;
|
|
var matches = regex.exec(ua);
|
|
if (!matches)
|
|
return false;
|
|
var parts = matches[1].split("_").map(function(item) {
|
|
return parseInt(item, 10);
|
|
});
|
|
return !!(parts[0] === 13 && parts[1] >= 4);
|
|
}
|
|
return false;
|
|
})();
|
|
var supportsPassive = false;
|
|
if (inBrowser) {
|
|
var EventName = "test-passive";
|
|
try {
|
|
var opts = {};
|
|
Object.defineProperty(opts, "passive", {
|
|
get: function() {
|
|
supportsPassive = true;
|
|
}
|
|
});
|
|
window.addEventListener(EventName, function() {
|
|
}, opts);
|
|
} catch (e2) {
|
|
}
|
|
}
|
|
var extend = function(target, source) {
|
|
for (var key in source) {
|
|
target[key] = source[key];
|
|
}
|
|
return target;
|
|
};
|
|
var elementStyle = inBrowser && document.createElement("div").style;
|
|
var vendor = function() {
|
|
if (!inBrowser) {
|
|
return false;
|
|
}
|
|
var transformNames = [
|
|
{
|
|
key: "standard",
|
|
value: "transform"
|
|
},
|
|
{
|
|
key: "webkit",
|
|
value: "webkitTransform"
|
|
},
|
|
{
|
|
key: "Moz",
|
|
value: "MozTransform"
|
|
},
|
|
{
|
|
key: "O",
|
|
value: "OTransform"
|
|
},
|
|
{
|
|
key: "ms",
|
|
value: "msTransform"
|
|
}
|
|
];
|
|
for (var _i = 0, transformNames_1 = transformNames; _i < transformNames_1.length; _i++) {
|
|
var obj = transformNames_1[_i];
|
|
if (elementStyle[obj.value] !== void 0) {
|
|
return obj.key;
|
|
}
|
|
}
|
|
return false;
|
|
}();
|
|
function prefixStyle(style2) {
|
|
if (vendor === false) {
|
|
return style2;
|
|
}
|
|
if (vendor === "standard") {
|
|
if (style2 === "transitionEnd") {
|
|
return "transitionend";
|
|
}
|
|
return style2;
|
|
}
|
|
return vendor + style2.charAt(0).toUpperCase() + style2.substr(1);
|
|
}
|
|
vendor && vendor !== "standard" ? "-" + vendor.toLowerCase() + "-" : "";
|
|
prefixStyle("transform");
|
|
prefixStyle("transition");
|
|
inBrowser && prefixStyle("perspective") in elementStyle;
|
|
({
|
|
transitionTimingFunction: prefixStyle("transitionTimingFunction"),
|
|
transitionDuration: prefixStyle("transitionDuration"),
|
|
transitionDelay: prefixStyle("transitionDelay"),
|
|
transformOrigin: prefixStyle("transformOrigin"),
|
|
transitionEnd: prefixStyle("transitionEnd"),
|
|
transitionProperty: prefixStyle("transitionProperty")
|
|
});
|
|
var sourcePrefix = "plugins.pullUpLoad";
|
|
var propertiesMap = [
|
|
{
|
|
key: "finishPullUp",
|
|
name: "finishPullUp"
|
|
},
|
|
{
|
|
key: "openPullUp",
|
|
name: "openPullUp"
|
|
},
|
|
{
|
|
key: "closePullUp",
|
|
name: "closePullUp"
|
|
},
|
|
{
|
|
key: "autoPullUpLoad",
|
|
name: "autoPullUpLoad"
|
|
}
|
|
];
|
|
var propertiesConfig = propertiesMap.map(function(item) {
|
|
return {
|
|
key: item.key,
|
|
sourceKey: sourcePrefix + "." + item.name
|
|
};
|
|
});
|
|
var PULL_UP_HOOKS_NAME = "pullingUp";
|
|
var PullUp = (
|
|
/** @class */
|
|
function() {
|
|
function PullUp2(scroll) {
|
|
this.scroll = scroll;
|
|
this.pulling = false;
|
|
this.watching = false;
|
|
this.init();
|
|
}
|
|
PullUp2.prototype.init = function() {
|
|
this.handleBScroll();
|
|
this.handleOptions(this.scroll.options.pullUpLoad);
|
|
this.handleHooks();
|
|
this.watch();
|
|
};
|
|
PullUp2.prototype.handleBScroll = function() {
|
|
this.scroll.registerType([PULL_UP_HOOKS_NAME]);
|
|
this.scroll.proxy(propertiesConfig);
|
|
};
|
|
PullUp2.prototype.handleOptions = function(userOptions) {
|
|
if (userOptions === void 0) {
|
|
userOptions = {};
|
|
}
|
|
userOptions = userOptions === true ? {} : userOptions;
|
|
var defaultOptions = {
|
|
threshold: 0
|
|
};
|
|
this.options = extend(defaultOptions, userOptions);
|
|
this.scroll.options.probeType = 3;
|
|
};
|
|
PullUp2.prototype.handleHooks = function() {
|
|
var _this = this;
|
|
this.hooksFn = [];
|
|
var scrollBehaviorY = this.scroll.scroller.scrollBehaviorY;
|
|
this.registerHooks(this.scroll.hooks, this.scroll.hooks.eventTypes.contentChanged, function() {
|
|
_this.finishPullUp();
|
|
});
|
|
this.registerHooks(scrollBehaviorY.hooks, scrollBehaviorY.hooks.eventTypes.computeBoundary, function(boundary) {
|
|
if (boundary.maxScrollPos > 0) {
|
|
boundary.maxScrollPos = -1;
|
|
}
|
|
});
|
|
};
|
|
PullUp2.prototype.registerHooks = function(hooks, name, handler) {
|
|
hooks.on(name, handler, this);
|
|
this.hooksFn.push([hooks, name, handler]);
|
|
};
|
|
PullUp2.prototype.watch = function() {
|
|
if (this.watching) {
|
|
return;
|
|
}
|
|
this.watching = true;
|
|
this.registerHooks(this.scroll, this.scroll.eventTypes.scroll, this.checkPullUp);
|
|
};
|
|
PullUp2.prototype.unwatch = function() {
|
|
this.watching = false;
|
|
this.scroll.off(this.scroll.eventTypes.scroll, this.checkPullUp);
|
|
};
|
|
PullUp2.prototype.checkPullUp = function(pos) {
|
|
var _this = this;
|
|
var threshold = this.options.threshold;
|
|
if (this.scroll.movingDirectionY === 1 && pos.y <= this.scroll.maxScrollY + threshold) {
|
|
this.pulling = true;
|
|
this.scroll.once(this.scroll.eventTypes.scrollEnd, function() {
|
|
_this.pulling = false;
|
|
});
|
|
this.unwatch();
|
|
this.scroll.trigger(PULL_UP_HOOKS_NAME);
|
|
}
|
|
};
|
|
PullUp2.prototype.finishPullUp = function() {
|
|
var _this = this;
|
|
this.scroll.scroller.scrollBehaviorY.setMovingDirection(
|
|
0
|
|
/* Default */
|
|
);
|
|
if (this.pulling) {
|
|
this.scroll.once(this.scroll.eventTypes.scrollEnd, function() {
|
|
_this.watch();
|
|
});
|
|
} else {
|
|
this.watch();
|
|
}
|
|
};
|
|
PullUp2.prototype.openPullUp = function(config) {
|
|
if (config === void 0) {
|
|
config = {};
|
|
}
|
|
this.handleOptions(config);
|
|
this.watch();
|
|
};
|
|
PullUp2.prototype.closePullUp = function() {
|
|
this.unwatch();
|
|
};
|
|
PullUp2.prototype.autoPullUpLoad = function() {
|
|
var threshold = this.options.threshold;
|
|
var scrollBehaviorY = this.scroll.scroller.scrollBehaviorY;
|
|
if (this.pulling || !this.watching) {
|
|
return;
|
|
}
|
|
var NEGATIVE_VALUE = -1;
|
|
var outOfBoundaryPos = scrollBehaviorY.maxScrollPos + threshold + NEGATIVE_VALUE;
|
|
this.scroll.scroller.scrollBehaviorY.setMovingDirection(NEGATIVE_VALUE);
|
|
this.scroll.scrollTo(this.scroll.x, outOfBoundaryPos, this.scroll.options.bounceTime);
|
|
};
|
|
PullUp2.pluginName = "pullUpLoad";
|
|
return PullUp2;
|
|
}()
|
|
);
|
|
const _hoisted_1 = ["rowspan"];
|
|
const _hoisted_2 = ["rowspan"];
|
|
const _hoisted_3 = ["innerHTML", "onClick"];
|
|
const _hoisted_4 = { key: 0 };
|
|
const _hoisted_5 = { key: 0 };
|
|
const _hoisted_6 = ["innerHTML"];
|
|
const _hoisted_7 = ["innerHTML"];
|
|
const _sfc_main = {
|
|
__name: "BasementSkill",
|
|
setup(__props) {
|
|
const scrollWrapper = ref(null);
|
|
const scroll = ref(null);
|
|
const initScroll = () => {
|
|
if (scrollWrapper.value) {
|
|
BScroll.use(ScrollBar);
|
|
BScroll.use(ObserveDOM);
|
|
BScroll.use(MouseWheel);
|
|
BScroll.use(PullUp);
|
|
scroll.value = new BScroll(scrollWrapper.value, {
|
|
probeType: 3,
|
|
click: true,
|
|
pullUpLoad: true,
|
|
observeDOM: true,
|
|
mouseWheel: {
|
|
speed: 20,
|
|
invert: false,
|
|
easeTime: 300
|
|
},
|
|
scrollY: true,
|
|
scrollbar: true
|
|
});
|
|
scroll.value.on("pullingUp", () => {
|
|
loadMore();
|
|
});
|
|
}
|
|
};
|
|
const skill = ref([]);
|
|
const currentPage = ref(1);
|
|
const hasMore = ref(true);
|
|
const name_select = ref("");
|
|
const des_select = ref("");
|
|
const room_select = ref("");
|
|
const showOnlyMatchedSkills = ref(false);
|
|
const showModal = ref(false);
|
|
const clickedTerm = ref(null);
|
|
const show_name_inmodel = ref("");
|
|
const show_skillname_inmodel = ref("");
|
|
const fetchData = async (page = 1) => {
|
|
try {
|
|
const response = await axios.get(`${""}/building_skill_waterfall`, {
|
|
params: {
|
|
page,
|
|
name_select: name_select.value,
|
|
des_select: des_select.value,
|
|
room_select: room_select.value,
|
|
showOnlyMatchedSkills: showOnlyMatchedSkills.value
|
|
}
|
|
});
|
|
const { data, has_more } = response.data;
|
|
skill.value = data;
|
|
hasMore.value = has_more;
|
|
nextTick(() => {
|
|
var _a2, _b2;
|
|
(_a2 = scroll.value) == null ? void 0 : _a2.refresh();
|
|
if (hasMore.value) {
|
|
(_b2 = scroll.value) == null ? void 0 : _b2.finishPullUp();
|
|
}
|
|
});
|
|
} catch (error) {
|
|
console.error("Error fetching data:", error);
|
|
}
|
|
};
|
|
onMounted(() => {
|
|
fetchData().then(() => {
|
|
initScroll();
|
|
});
|
|
});
|
|
const loadMore = () => {
|
|
currentPage.value++;
|
|
fetchData(currentPage.value);
|
|
};
|
|
const skill_items = computed(() => {
|
|
return skill.value.map((item, i) => ({
|
|
key: `${i}`,
|
|
value: i,
|
|
avatar: item.name,
|
|
span: item.span,
|
|
childSkill: item.child_skill
|
|
}));
|
|
});
|
|
const openInNewTab = (avatar) => {
|
|
window.open(`https://prts.wiki/w/${avatar}`, "_blank");
|
|
};
|
|
const handleTermClick = (event, name, skill_name) => {
|
|
const clickedTermElement = findTerm(event);
|
|
if (clickedTermElement) {
|
|
const termId = clickedTermElement.dataset.id;
|
|
clickedTerm.value = termId;
|
|
showModal.value = true;
|
|
show_name_inmodel.value = name;
|
|
show_skillname_inmodel.value = skill_name;
|
|
}
|
|
};
|
|
const getClassName = (str) => str.replace(/^[^0-9a-zA-Z]/, "").replace(/[^0-9a-zA-Z]/g, "-");
|
|
const getTermId = (str) => str.replace(/^\W/, "").replace(/\W/g, "_");
|
|
const richText2HTML = (text) => {
|
|
const result = text.replace(/<([^<>]+)>([^<>]+)<\/>/g, (str, key, value) => {
|
|
if (key.startsWith("@cc.")) {
|
|
return `{{span class="riic-rt ${getClassName(key)}"}}${value}{{/span}}`;
|
|
}
|
|
if (key.startsWith("$cc.")) {
|
|
return `{{span class="riic-term" data-id="${getTermId(key)}"}}${value}{{/span}}`;
|
|
}
|
|
}).replace(/\n/g, "<br />");
|
|
return /<[^<>]+>[^<>]+<\/>/.test(result) ? richText2HTML(result) : result.replace(/{{/g, "<").replace(/}}/g, ">");
|
|
};
|
|
const findTerm = (e2) => {
|
|
var _a2, _b2;
|
|
for (const el of ((_a2 = e2.composedPath) == null ? void 0 : _a2.call(e2)) || []) {
|
|
if ((_b2 = el.classList) == null ? void 0 : _b2.contains("riic-term")) return el;
|
|
}
|
|
};
|
|
const groupSkills = (skills) => {
|
|
const groups = skills.reduce((acc, skill2) => {
|
|
const groupKey = skill2.skill_key;
|
|
if (!acc[groupKey]) {
|
|
acc[groupKey] = [];
|
|
}
|
|
acc[groupKey].push(skill2);
|
|
return acc;
|
|
}, {});
|
|
return Object.values(groups);
|
|
};
|
|
const getRowSpan = (item) => {
|
|
const groups = groupSkills(item.childSkill);
|
|
return groups.reduce((total, group) => total + group.length, 0);
|
|
};
|
|
return (_ctx, _cache) => {
|
|
const _component_n_input = __unplugin_components_0;
|
|
const _component_n_checkbox = __unplugin_components_1;
|
|
const _component_n_flex = __unplugin_components_2;
|
|
const _component_n_avatar = __unplugin_components_7;
|
|
const _component_n_tag = __unplugin_components_4;
|
|
const _component_n_table = __unplugin_components_5;
|
|
const _component_n_card = __unplugin_components_0$1;
|
|
const _component_n_modal = __unplugin_components_4$1;
|
|
return openBlock(), createBlock(_component_n_flex, {
|
|
vertical: "",
|
|
align: "center",
|
|
style: { "width": "80vw" }
|
|
}, {
|
|
default: withCtx(() => [
|
|
_cache[11] || (_cache[11] = createBaseVNode("h3", null, "做了筛选名称,筛选描述,没做其他的效果显示,会有的.jpg", -1)),
|
|
createVNode(_component_n_flex, {
|
|
align: "center",
|
|
size: 30
|
|
}, {
|
|
default: withCtx(() => [
|
|
_cache[6] || (_cache[6] = createBaseVNode("div", null, "干员名称搜索:", -1)),
|
|
createVNode(_component_n_input, {
|
|
value: name_select.value,
|
|
"onUpdate:value": _cache[0] || (_cache[0] = ($event) => name_select.value = $event),
|
|
type: "text",
|
|
placeholder: "名称搜索",
|
|
style: { "flex": "1" },
|
|
onInput: fetchData
|
|
}, null, 8, ["value"]),
|
|
_cache[7] || (_cache[7] = createBaseVNode("div", null, "描述搜索(如用拼音,全拼):", -1)),
|
|
createVNode(_component_n_input, {
|
|
value: des_select.value,
|
|
"onUpdate:value": _cache[1] || (_cache[1] = ($event) => des_select.value = $event),
|
|
type: "text",
|
|
placeholder: "名称搜索",
|
|
style: { "flex": "1" },
|
|
onInput: fetchData
|
|
}, null, 8, ["value"]),
|
|
_cache[8] || (_cache[8] = createBaseVNode("div", null, "进驻房间搜索:", -1)),
|
|
createVNode(_component_n_input, {
|
|
value: room_select.value,
|
|
"onUpdate:value": _cache[2] || (_cache[2] = ($event) => room_select.value = $event),
|
|
type: "text",
|
|
placeholder: "房间类型",
|
|
style: { "flex": "1" },
|
|
onInput: fetchData
|
|
}, null, 8, ["value"]),
|
|
createVNode(_component_n_checkbox, {
|
|
checked: showOnlyMatchedSkills.value,
|
|
"onUpdate:checked": _cache[3] || (_cache[3] = ($event) => showOnlyMatchedSkills.value = $event),
|
|
onChange: fetchData
|
|
}, {
|
|
default: withCtx(() => _cache[5] || (_cache[5] = [
|
|
createTextVNode(" 仅显示匹配房间类型的技能 ")
|
|
])),
|
|
_: 1
|
|
}, 8, ["checked"])
|
|
]),
|
|
_: 1
|
|
}),
|
|
createBaseVNode("div", {
|
|
ref_key: "scrollWrapper",
|
|
ref: scrollWrapper,
|
|
class: "scroll-wrapper"
|
|
}, [
|
|
createVNode(_component_n_table, { "single-line": false }, {
|
|
default: withCtx(() => [
|
|
_cache[10] || (_cache[10] = createBaseVNode("thead", null, [
|
|
createBaseVNode("tr", null, [
|
|
createBaseVNode("th", null, "名称"),
|
|
createBaseVNode("th", null, "技能"),
|
|
createBaseVNode("th", null, "条件"),
|
|
createBaseVNode("th", null, "技能名称"),
|
|
createBaseVNode("th", null, "房间类型"),
|
|
createBaseVNode("th", null, "技能描述")
|
|
])
|
|
], -1)),
|
|
createBaseVNode("tbody", null, [
|
|
(openBlock(true), createElementBlock(Fragment, null, renderList(skill_items.value, (item, index) => {
|
|
return openBlock(), createElementBlock(Fragment, { key: index }, [
|
|
(openBlock(true), createElementBlock(Fragment, null, renderList(groupSkills(item.childSkill), (skillGroup, groupIndex) => {
|
|
return openBlock(), createElementBlock(Fragment, { key: groupIndex }, [
|
|
(openBlock(true), createElementBlock(Fragment, null, renderList(skillGroup, (skill2, skillIndex) => {
|
|
return openBlock(), createElementBlock("tr", { key: skillIndex }, [
|
|
groupIndex === 0 && skillIndex === 0 ? (openBlock(), createElementBlock("td", {
|
|
key: 0,
|
|
rowspan: getRowSpan(item)
|
|
}, [
|
|
createVNode(_component_n_flex, {
|
|
align: "center",
|
|
onClick: ($event) => openInNewTab(item.avatar),
|
|
vertical: ""
|
|
}, {
|
|
default: withCtx(() => [
|
|
createVNode(_component_n_avatar, {
|
|
lazy: "",
|
|
src: `avatar/${item.avatar}.webp`,
|
|
size: 60,
|
|
round: "",
|
|
style: { "cursor": "pointer" },
|
|
color: "transparent"
|
|
}, null, 8, ["src"]),
|
|
createVNode(_component_n_tag, { type: "success" }, {
|
|
default: withCtx(() => [
|
|
createTextVNode(toDisplayString(item.avatar), 1)
|
|
]),
|
|
_: 2
|
|
}, 1024)
|
|
]),
|
|
_: 2
|
|
}, 1032, ["onClick"])
|
|
], 8, _hoisted_1)) : createCommentVNode("", true),
|
|
skillIndex === 0 ? (openBlock(), createElementBlock("td", {
|
|
key: 1,
|
|
rowspan: skillGroup.length,
|
|
align: "center"
|
|
}, toDisplayString(groupIndex + 1), 9, _hoisted_2)) : createCommentVNode("", true),
|
|
createBaseVNode("td", null, [
|
|
createVNode(_component_n_tag, {
|
|
color: { color: skill2.buffColor, textColor: skill2.textColor }
|
|
}, {
|
|
default: withCtx(() => [
|
|
createTextVNode(toDisplayString(skill2.phase_level), 1)
|
|
]),
|
|
_: 2
|
|
}, 1032, ["color"])
|
|
]),
|
|
createBaseVNode("td", null, [
|
|
createVNode(_component_n_tag, {
|
|
color: { color: skill2.buffColor, textColor: skill2.textColor }
|
|
}, {
|
|
avatar: withCtx(() => [
|
|
createVNode(_component_n_avatar, {
|
|
src: `building_skill/${skill2.skillIcon}.webp`,
|
|
size: "30",
|
|
color: "transparent"
|
|
}, null, 8, ["src"])
|
|
]),
|
|
default: withCtx(() => [
|
|
createTextVNode(" " + toDisplayString(skill2.skillname), 1)
|
|
]),
|
|
_: 2
|
|
}, 1032, ["color"])
|
|
]),
|
|
createBaseVNode("td", null, [
|
|
createVNode(_component_n_tag, {
|
|
color: { color: skill2.buffColor, textColor: skill2.textColor }
|
|
}, {
|
|
default: withCtx(() => [
|
|
createTextVNode(toDisplayString(skill2.roomType), 1)
|
|
]),
|
|
_: 2
|
|
}, 1032, ["color"])
|
|
]),
|
|
createBaseVNode("td", {
|
|
innerHTML: richText2HTML(skill2.des),
|
|
onClick: ($event) => handleTermClick($event, item.avatar, skill2.skillname)
|
|
}, null, 8, _hoisted_3)
|
|
]);
|
|
}), 128))
|
|
], 64);
|
|
}), 128))
|
|
], 64);
|
|
}), 128)),
|
|
hasMore.value ? (openBlock(), createElementBlock("tr", _hoisted_4, _cache[9] || (_cache[9] = [
|
|
createBaseVNode("td", {
|
|
colspan: "8",
|
|
class: "loading-more"
|
|
}, "加载中...", -1)
|
|
]))) : createCommentVNode("", true)
|
|
])
|
|
]),
|
|
_: 1
|
|
})
|
|
], 512),
|
|
createVNode(_component_n_modal, {
|
|
show: showModal.value,
|
|
"onUpdate:show": _cache[4] || (_cache[4] = ($event) => showModal.value = $event),
|
|
style: { "max-width": "600px", "user-select": "none" }
|
|
}, {
|
|
default: withCtx(() => [
|
|
createVNode(_component_n_card, {
|
|
title: `${show_name_inmodel.value} ${show_skillname_inmodel.value} 技能内的特殊名词`
|
|
}, {
|
|
default: withCtx(() => [
|
|
clickedTerm.value && unref(buffer)[clickedTerm.value] ? (openBlock(), createElementBlock("div", _hoisted_5, [
|
|
createVNode(_component_n_card, {
|
|
title: unref(buffer)[clickedTerm.value].termName
|
|
}, {
|
|
default: withCtx(() => [
|
|
createBaseVNode("div", {
|
|
innerHTML: richText2HTML(unref(buffer)[clickedTerm.value].description)
|
|
}, null, 8, _hoisted_6)
|
|
]),
|
|
_: 1
|
|
}, 8, ["title"]),
|
|
unref(buffer)[unref(buffer)[clickedTerm.value].buffer] != [] ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(unref(buffer)[clickedTerm.value].buffer, (termKey, index) => {
|
|
return openBlock(), createBlock(_component_n_card, {
|
|
title: unref(buffer)[termKey].termName
|
|
}, {
|
|
default: withCtx(() => [
|
|
createBaseVNode("div", {
|
|
innerHTML: richText2HTML(unref(buffer)[termKey].description)
|
|
}, null, 8, _hoisted_7)
|
|
]),
|
|
_: 2
|
|
}, 1032, ["title"]);
|
|
}), 256)) : createCommentVNode("", true)
|
|
])) : createCommentVNode("", true)
|
|
]),
|
|
_: 1
|
|
}, 8, ["title"])
|
|
]),
|
|
_: 1
|
|
}, 8, ["show"])
|
|
]),
|
|
_: 1
|
|
});
|
|
};
|
|
}
|
|
};
|
|
export {
|
|
_sfc_main as default
|
|
};
|